Lines Matching refs:cam

133 #define cam_err(cam, fmt, arg...) \
134 dev_err(&(cam)->pdev->dev, fmt, ##arg);
135 #define cam_warn(cam, fmt, arg...) \
136 dev_warn(&(cam)->pdev->dev, fmt, ##arg);
170 static int cafe_smbus_write_data(struct cafe_camera *cam,
175 struct mcam_camera *mcam = &cam->mcam;
208 wait_event_timeout(cam->smbus_wait, cafe_smbus_write_done(mcam),
216 cam_err(cam, "SMBUS write (%02x/%02x/%02x) timed out\n", addr,
221 cam_err(cam, "SMBUS write (%02x/%02x/%02x) error\n", addr,
249 static int cafe_smbus_read_data(struct cafe_camera *cam,
254 struct mcam_camera *mcam = &cam->mcam;
269 wait_event_timeout(cam->smbus_wait,
276 cam_err(cam, "SMBUS read (%02x/%02x) error\n", addr, command);
280 cam_err(cam, "SMBUS read (%02x/%02x) timed out\n", addr,
296 struct cafe_camera *cam = i2c_get_adapdata(adapter);
301 * it can do word too, but the cam chip has no use for that.
304 cam_err(cam, "funky xfer size %d\n", size);
309 ret = cafe_smbus_write_data(cam, addr, command, data->byte);
311 ret = cafe_smbus_read_data(cam, addr, command, &data->byte);
316 static void cafe_smbus_enable_irq(struct cafe_camera *cam)
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);
336 static int cafe_smbus_setup(struct cafe_camera *cam)
347 adap->dev.parent = &cam->pdev->dev;
348 i2c_set_adapdata(adap, cam);
356 cam->i2c_adapter = adap;
357 cafe_smbus_enable_irq(cam);
361 static void cafe_smbus_shutdown(struct cafe_camera *cam)
363 i2c_del_adapter(cam->i2c_adapter);
364 kfree(cam->i2c_adapter);
441 struct cafe_camera *cam = data;
442 struct mcam_camera *mcam = &cam->mcam;
447 handled = cam->registered && mccic_irq(mcam, irqs);
450 wake_up(&cam->smbus_wait);
490 struct cafe_camera *cam;
497 cam = kzalloc(sizeof(struct cafe_camera), GFP_KERNEL);
498 if (cam == NULL)
500 pci_set_drvdata(pdev, cam);
501 cam->pdev = pdev;
502 mcam = &cam->mcam;
505 init_waitqueue_head(&cam->smbus_wait);
531 ret = request_irq(pdev->irq, cafe_irq, IRQF_SHARED, "cafe-ccic", cam);
545 ret = cafe_smbus_setup(cam);
550 mcam->asd.match.i2c.adapter_id = i2c_adapter_id(cam->i2c_adapter);
558 i2c_adapter_id(cam->i2c_adapter), ov7670_info.addr);
560 if (!IS_ERR(i2c_new_client_device(cam->i2c_adapter, &ov7670_info))) {
561 cam->registered = 1;
567 cafe_smbus_shutdown(cam);
570 free_irq(pdev->irq, cam);
576 kfree(cam);
585 static void cafe_shutdown(struct cafe_camera *cam)
587 mccic_shutdown(&cam->mcam);
588 cafe_smbus_shutdown(cam);
589 free_irq(cam->pdev->irq, cam);
590 pci_iounmap(cam->pdev, cam->mcam.regs);
596 struct cafe_camera *cam = pci_get_drvdata(pdev);
598 if (cam == NULL) {
602 cafe_shutdown(cam);
603 kfree(cam);
612 struct cafe_camera *cam = dev_get_drvdata(dev);
614 mccic_suspend(&cam->mcam);
621 struct cafe_camera *cam = dev_get_drvdata(dev);
623 cafe_ctlr_init(&cam->mcam);
624 return mccic_resume(&cam->mcam);