Lines Matching refs:mcam
53 struct mcam_camera mcam; member
147 return container_of(m, struct cafe_camera, mcam); in to_cam()
151 static int cafe_smbus_write_done(struct mcam_camera *mcam) in cafe_smbus_write_done() argument
162 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_done()
163 c1 = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_write_done()
164 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_done()
173 struct mcam_camera *mcam = &cam->mcam; in cafe_smbus_write_data() local
175 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_data()
182 mcam_reg_write(mcam, REG_TWSIC0, rval); in cafe_smbus_write_data()
183 (void) mcam_reg_read(mcam, REG_TWSIC1); /* force write */ in cafe_smbus_write_data()
185 mcam_reg_write(mcam, REG_TWSIC1, rval); in cafe_smbus_write_data()
186 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_data()
206 wait_event_timeout(cam->smbus_wait, cafe_smbus_write_done(mcam), in cafe_smbus_write_data()
209 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_data()
210 rval = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_write_data()
211 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_data()
228 static int cafe_smbus_read_done(struct mcam_camera *mcam) in cafe_smbus_read_done() argument
239 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_done()
240 c1 = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_read_done()
241 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_done()
252 struct mcam_camera *mcam = &cam->mcam; in cafe_smbus_read_data() local
254 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_data()
261 mcam_reg_write(mcam, REG_TWSIC0, rval); in cafe_smbus_read_data()
262 (void) mcam_reg_read(mcam, REG_TWSIC1); /* force write */ in cafe_smbus_read_data()
264 mcam_reg_write(mcam, REG_TWSIC1, rval); in cafe_smbus_read_data()
265 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_data()
268 cafe_smbus_read_done(mcam), CAFE_SMBUS_TIMEOUT); in cafe_smbus_read_data()
269 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_data()
270 rval = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_read_data()
271 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_data()
318 spin_lock_irqsave(&cam->mcam.dev_lock, flags); in cafe_smbus_enable_irq()
319 mcam_reg_set_bit(&cam->mcam, REG_IRQMASK, TWSIIRQS); in cafe_smbus_enable_irq()
320 spin_unlock_irqrestore(&cam->mcam.dev_lock, flags); in cafe_smbus_enable_irq()
342 cam->mcam.i2c_adapter = adap; in cafe_smbus_setup()
357 i2c_del_adapter(cam->mcam.i2c_adapter); in cafe_smbus_shutdown()
358 kfree(cam->mcam.i2c_adapter); in cafe_smbus_shutdown()
366 static void cafe_ctlr_init(struct mcam_camera *mcam) in cafe_ctlr_init() argument
370 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_ctlr_init()
374 mcam_reg_write(mcam, 0x3038, 0x8); in cafe_ctlr_init()
375 mcam_reg_write(mcam, 0x315c, 0x80008); in cafe_ctlr_init()
382 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRS|GCSR_MRS); /* Needed? */ in cafe_ctlr_init()
383 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRC|GCSR_MRC); in cafe_ctlr_init()
384 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRC|GCSR_MRS); in cafe_ctlr_init()
388 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_ctlr_init()
390 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_ctlr_init()
392 mcam_reg_write(mcam, REG_GL_CSR, GCSR_CCIC_EN|GCSR_SRC|GCSR_MRC); in cafe_ctlr_init()
393 mcam_reg_set_bit(mcam, REG_GL_IMASK, GIMSK_CCIC_EN); in cafe_ctlr_init()
397 mcam_reg_write(mcam, REG_IRQMASK, 0); in cafe_ctlr_init()
398 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_ctlr_init()
402 static int cafe_ctlr_power_up(struct mcam_camera *mcam) in cafe_ctlr_power_up() argument
408 mcam_reg_write(mcam, REG_GL_FCR, GFCR_GPIO_ON); in cafe_ctlr_power_up()
409 mcam_reg_write(mcam, REG_GL_GPIOR, GGPIO_OUT|GGPIO_VAL); in cafe_ctlr_power_up()
415 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN); /* pwr up, reset */ in cafe_ctlr_power_up()
416 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C0); in cafe_ctlr_power_up()
421 static void cafe_ctlr_power_down(struct mcam_camera *mcam) in cafe_ctlr_power_down() argument
423 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C1); in cafe_ctlr_power_down()
424 mcam_reg_write(mcam, REG_GL_FCR, GFCR_GPIO_ON); in cafe_ctlr_power_down()
425 mcam_reg_write(mcam, REG_GL_GPIOR, GGPIO_OUT); in cafe_ctlr_power_down()
436 struct mcam_camera *mcam = &cam->mcam; in cafe_irq() local
439 spin_lock(&mcam->dev_lock); in cafe_irq()
440 irqs = mcam_reg_read(mcam, REG_IRQSTAT); in cafe_irq()
441 handled = cam->registered && mccic_irq(mcam, irqs); in cafe_irq()
443 mcam_reg_write(mcam, REG_IRQSTAT, TWSIIRQS); in cafe_irq()
447 spin_unlock(&mcam->dev_lock); in cafe_irq()
462 struct mcam_camera *mcam; in cafe_pci_probe() local
472 mcam = &cam->mcam; in cafe_pci_probe()
473 mcam->chip_id = MCAM_CAFE; in cafe_pci_probe()
474 spin_lock_init(&mcam->dev_lock); in cafe_pci_probe()
476 mcam->plat_power_up = cafe_ctlr_power_up; in cafe_pci_probe()
477 mcam->plat_power_down = cafe_ctlr_power_down; in cafe_pci_probe()
478 mcam->dev = &pdev->dev; in cafe_pci_probe()
483 mcam->clock_speed = 45; in cafe_pci_probe()
484 mcam->use_smbus = 1; in cafe_pci_probe()
490 mcam->buffer_mode = B_vmalloc; in cafe_pci_probe()
500 mcam->regs = pci_iomap(pdev, 0, 0); in cafe_pci_probe()
501 if (!mcam->regs) { in cafe_pci_probe()
505 mcam->regs_size = pci_resource_len(pdev, 0); in cafe_pci_probe()
514 cafe_ctlr_init(mcam); in cafe_pci_probe()
515 cafe_ctlr_power_up(mcam); in cafe_pci_probe()
525 ret = mccic_register(mcam); in cafe_pci_probe()
533 cafe_ctlr_power_down(mcam); in cafe_pci_probe()
536 pci_iounmap(pdev, mcam->regs); in cafe_pci_probe()
551 mccic_shutdown(&cam->mcam); in cafe_shutdown()
554 pci_iounmap(cam->pdev, cam->mcam.regs); in cafe_shutdown()
585 mccic_suspend(&cam->mcam); in cafe_pci_suspend()
604 cafe_ctlr_init(&cam->mcam); in cafe_pci_resume()
605 return mccic_resume(&cam->mcam); in cafe_pci_resume()