Lines Matching refs:cam
129 #define cam_err(cam, fmt, arg...) \
130 dev_err(&(cam)->pdev->dev, fmt, ##arg);
131 #define cam_warn(cam, fmt, arg...) \
132 dev_warn(&(cam)->pdev->dev, fmt, ##arg);
159 static int cafe_smbus_write_data(struct cafe_camera *cam,
164 struct mcam_camera *mcam = &cam->mcam;
197 wait_event_timeout(cam->smbus_wait, cafe_smbus_write_done(mcam),
205 cam_err(cam, "SMBUS write (%02x/%02x/%02x) timed out\n", addr,
210 cam_err(cam, "SMBUS write (%02x/%02x/%02x) error\n", addr,
238 static int cafe_smbus_read_data(struct cafe_camera *cam,
243 struct mcam_camera *mcam = &cam->mcam;
258 wait_event_timeout(cam->smbus_wait,
265 cam_err(cam, "SMBUS read (%02x/%02x) error\n", addr, command);
269 cam_err(cam, "SMBUS read (%02x/%02x) timed out\n", addr,
285 struct cafe_camera *cam = i2c_get_adapdata(adapter);
290 * it can do word too, but the cam chip has no use for that.
293 cam_err(cam, "funky xfer size %d\n", size);
298 ret = cafe_smbus_write_data(cam, addr, command, data->byte);
300 ret = cafe_smbus_read_data(cam, addr, command, &data->byte);
305 static void cafe_smbus_enable_irq(struct cafe_camera *cam)
309 spin_lock_irqsave(&cam->mcam.dev_lock, flags);
310 mcam_reg_set_bit(&cam->mcam, REG_IRQMASK, TWSIIRQS);
311 spin_unlock_irqrestore(&cam->mcam.dev_lock, flags);
325 static int cafe_smbus_setup(struct cafe_camera *cam)
336 adap->dev.parent = &cam->pdev->dev;
337 i2c_set_adapdata(adap, cam);
345 cam->i2c_adapter = adap;
346 cafe_smbus_enable_irq(cam);
350 static void cafe_smbus_shutdown(struct cafe_camera *cam)
352 i2c_del_adapter(cam->i2c_adapter);
353 kfree(cam->i2c_adapter);
430 struct cafe_camera *cam = data;
431 struct mcam_camera *mcam = &cam->mcam;
436 handled = cam->registered && mccic_irq(mcam, irqs);
439 wake_up(&cam->smbus_wait);
479 struct cafe_camera *cam;
488 cam = kzalloc(sizeof(struct cafe_camera), GFP_KERNEL);
489 if (cam == NULL)
491 pci_set_drvdata(pdev, cam);
492 cam->pdev = pdev;
493 mcam = &cam->mcam;
496 init_waitqueue_head(&cam->smbus_wait);
521 ret = request_irq(pdev->irq, cafe_irq, IRQF_SHARED, "cafe-ccic", cam);
535 ret = cafe_smbus_setup(cam);
546 i2c_adapter_id(cam->i2c_adapter),
559 i2c_adapter_id(cam->i2c_adapter), ov7670_info.addr);
561 i2c_dev = i2c_new_client_device(cam->i2c_adapter, &ov7670_info);
567 cam->registered = 1;
575 cafe_smbus_shutdown(cam);
578 free_irq(pdev->irq, cam);
584 kfree(cam);
593 static void cafe_shutdown(struct cafe_camera *cam)
595 mccic_shutdown(&cam->mcam);
596 v4l2_device_unregister(&cam->mcam.v4l2_dev);
597 cafe_smbus_shutdown(cam);
598 free_irq(cam->pdev->irq, cam);
599 pci_iounmap(cam->pdev, cam->mcam.regs);
605 struct cafe_camera *cam = pci_get_drvdata(pdev);
607 if (cam == NULL) {
611 cafe_shutdown(cam);
612 kfree(cam);
621 struct cafe_camera *cam = dev_get_drvdata(dev);
623 mccic_suspend(&cam->mcam);
630 struct cafe_camera *cam = dev_get_drvdata(dev);
632 cafe_ctlr_init(&cam->mcam);
633 return mccic_resume(&cam->mcam);