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