Lines Matching refs:mcam

54 	struct mcam_camera mcam;  member
149 return container_of(m, struct cafe_camera, mcam); in to_cam()
153 static int cafe_smbus_write_done(struct mcam_camera *mcam) in cafe_smbus_write_done() argument
164 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_done()
165 c1 = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_write_done()
166 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_done()
175 struct mcam_camera *mcam = &cam->mcam; in cafe_smbus_write_data() local
177 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_data()
184 mcam_reg_write(mcam, REG_TWSIC0, rval); in cafe_smbus_write_data()
185 (void) mcam_reg_read(mcam, REG_TWSIC1); /* force write */ in cafe_smbus_write_data()
187 mcam_reg_write(mcam, REG_TWSIC1, rval); in cafe_smbus_write_data()
188 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_data()
208 wait_event_timeout(cam->smbus_wait, cafe_smbus_write_done(mcam), in cafe_smbus_write_data()
211 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_write_data()
212 rval = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_write_data()
213 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_write_data()
230 static int cafe_smbus_read_done(struct mcam_camera *mcam) in cafe_smbus_read_done() argument
241 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_done()
242 c1 = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_read_done()
243 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_done()
254 struct mcam_camera *mcam = &cam->mcam; in cafe_smbus_read_data() local
256 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_data()
263 mcam_reg_write(mcam, REG_TWSIC0, rval); in cafe_smbus_read_data()
264 (void) mcam_reg_read(mcam, REG_TWSIC1); /* force write */ in cafe_smbus_read_data()
266 mcam_reg_write(mcam, REG_TWSIC1, rval); in cafe_smbus_read_data()
267 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_data()
270 cafe_smbus_read_done(mcam), CAFE_SMBUS_TIMEOUT); in cafe_smbus_read_data()
271 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_smbus_read_data()
272 rval = mcam_reg_read(mcam, REG_TWSIC1); in cafe_smbus_read_data()
273 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_smbus_read_data()
320 spin_lock_irqsave(&cam->mcam.dev_lock, flags); in cafe_smbus_enable_irq()
321 mcam_reg_set_bit(&cam->mcam, REG_IRQMASK, TWSIIRQS); in cafe_smbus_enable_irq()
322 spin_unlock_irqrestore(&cam->mcam.dev_lock, flags); in cafe_smbus_enable_irq()
372 static void cafe_ctlr_init(struct mcam_camera *mcam) in cafe_ctlr_init() argument
376 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_ctlr_init()
380 mcam_reg_write(mcam, 0x3038, 0x8); in cafe_ctlr_init()
381 mcam_reg_write(mcam, 0x315c, 0x80008); in cafe_ctlr_init()
388 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRS|GCSR_MRS); /* Needed? */ in cafe_ctlr_init()
389 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRC|GCSR_MRC); in cafe_ctlr_init()
390 mcam_reg_write(mcam, REG_GL_CSR, GCSR_SRC|GCSR_MRS); in cafe_ctlr_init()
394 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_ctlr_init()
396 spin_lock_irqsave(&mcam->dev_lock, flags); in cafe_ctlr_init()
398 mcam_reg_write(mcam, REG_GL_CSR, GCSR_CCIC_EN|GCSR_SRC|GCSR_MRC); in cafe_ctlr_init()
399 mcam_reg_set_bit(mcam, REG_GL_IMASK, GIMSK_CCIC_EN); in cafe_ctlr_init()
403 mcam_reg_write(mcam, REG_IRQMASK, 0); in cafe_ctlr_init()
404 spin_unlock_irqrestore(&mcam->dev_lock, flags); in cafe_ctlr_init()
408 static int cafe_ctlr_power_up(struct mcam_camera *mcam) in cafe_ctlr_power_up() argument
414 mcam_reg_write(mcam, REG_GL_FCR, GFCR_GPIO_ON); in cafe_ctlr_power_up()
415 mcam_reg_write(mcam, REG_GL_GPIOR, GGPIO_OUT|GGPIO_VAL); in cafe_ctlr_power_up()
421 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN); /* pwr up, reset */ in cafe_ctlr_power_up()
422 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C0); in cafe_ctlr_power_up()
427 static void cafe_ctlr_power_down(struct mcam_camera *mcam) in cafe_ctlr_power_down() argument
429 mcam_reg_write(mcam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C1); in cafe_ctlr_power_down()
430 mcam_reg_write(mcam, REG_GL_FCR, GFCR_GPIO_ON); in cafe_ctlr_power_down()
431 mcam_reg_write(mcam, REG_GL_GPIOR, GGPIO_OUT); in cafe_ctlr_power_down()
442 struct mcam_camera *mcam = &cam->mcam; in cafe_irq() local
445 spin_lock(&mcam->dev_lock); in cafe_irq()
446 irqs = mcam_reg_read(mcam, REG_IRQSTAT); in cafe_irq()
447 handled = cam->registered && mccic_irq(mcam, irqs); in cafe_irq()
449 mcam_reg_write(mcam, REG_IRQSTAT, TWSIIRQS); in cafe_irq()
453 spin_unlock(&mcam->dev_lock); in cafe_irq()
491 struct mcam_camera *mcam; in cafe_pci_probe() local
502 mcam = &cam->mcam; in cafe_pci_probe()
503 mcam->chip_id = MCAM_CAFE; in cafe_pci_probe()
504 spin_lock_init(&mcam->dev_lock); in cafe_pci_probe()
506 mcam->plat_power_up = cafe_ctlr_power_up; in cafe_pci_probe()
507 mcam->plat_power_down = cafe_ctlr_power_down; in cafe_pci_probe()
508 mcam->dev = &pdev->dev; in cafe_pci_probe()
509 snprintf(mcam->bus_info, sizeof(mcam->bus_info), "PCI:%s", pci_name(pdev)); in cafe_pci_probe()
515 mcam->buffer_mode = B_vmalloc; in cafe_pci_probe()
525 mcam->regs = pci_iomap(pdev, 0, 0); in cafe_pci_probe()
526 if (!mcam->regs) { in cafe_pci_probe()
530 mcam->regs_size = pci_resource_len(pdev, 0); in cafe_pci_probe()
538 cafe_ctlr_init(mcam); in cafe_pci_probe()
549 mcam->asd.match_type = V4L2_ASYNC_MATCH_I2C; in cafe_pci_probe()
550 mcam->asd.match.i2c.adapter_id = i2c_adapter_id(cam->i2c_adapter); in cafe_pci_probe()
551 mcam->asd.match.i2c.address = ov7670_info.addr; in cafe_pci_probe()
553 ret = mccic_register(mcam); in cafe_pci_probe()
557 clkdev_create(mcam->mclk, "xclk", "%d-%04x", in cafe_pci_probe()
565 mccic_shutdown(mcam); in cafe_pci_probe()
569 cafe_ctlr_power_down(mcam); in cafe_pci_probe()
572 pci_iounmap(pdev, mcam->regs); in cafe_pci_probe()
587 mccic_shutdown(&cam->mcam); in cafe_shutdown()
590 pci_iounmap(cam->pdev, cam->mcam.regs); in cafe_shutdown()
614 mccic_suspend(&cam->mcam); in cafe_pci_suspend()
623 cafe_ctlr_init(&cam->mcam); in cafe_pci_resume()
624 return mccic_resume(&cam->mcam); in cafe_pci_resume()