Lines Matching defs:data

109 	.height = 26, /* 24 lines of pixel data + 2 lines of processing data */
142 int (*setup)(struct video_i2c_data *data);
145 int (*xfer)(struct video_i2c_data *data, char *buf);
148 int (*set_power)(struct video_i2c_data *data, bool on);
151 int (*hwmon_init)(struct video_i2c_data *data);
157 struct video_i2c_data *data = priv;
159 return regmap_bulk_read(data->regmap, MLX90640_EEPROM_START_ADDR + offset, val, bytes);
170 static int amg88xx_xfer(struct video_i2c_data *data, char *buf)
172 return regmap_bulk_read(data->regmap, AMG88XX_REG_T01L, buf,
173 data->chip->buffer_size);
176 static int mlx90640_xfer(struct video_i2c_data *data, char *buf)
178 return regmap_bulk_read(data->regmap, MLX90640_RAM_START_ADDR, buf,
179 data->chip->buffer_size);
182 static int amg88xx_setup(struct video_i2c_data *data)
187 if (data->frame_interval.numerator == data->frame_interval.denominator)
192 return regmap_update_bits(data->regmap, AMG88XX_REG_FPSC, mask, val);
195 static int mlx90640_setup(struct video_i2c_data *data)
199 for (n = 0; n < data->chip->num_frame_intervals - 1; n++) {
200 if (V4L2_FRACT_COMPARE(data->frame_interval, ==,
201 data->chip->frame_intervals[n]))
205 idx = data->chip->num_frame_intervals - n - 1;
207 return regmap_update_bits(data->regmap, MLX90640_REG_CTL1,
212 static int amg88xx_set_power_on(struct video_i2c_data *data)
216 ret = regmap_write(data->regmap, AMG88XX_REG_PCTL, AMG88XX_PCTL_NORMAL);
222 ret = regmap_write(data->regmap, AMG88XX_REG_RST, AMG88XX_RST_INIT);
228 ret = regmap_write(data->regmap, AMG88XX_REG_RST, AMG88XX_RST_FLAG);
240 static int amg88xx_set_power_off(struct video_i2c_data *data)
244 ret = regmap_write(data->regmap, AMG88XX_REG_PCTL, AMG88XX_PCTL_SLEEP);
257 static int amg88xx_set_power(struct video_i2c_data *data, bool on)
260 return amg88xx_set_power_on(data);
262 return amg88xx_set_power_off(data);
292 struct video_i2c_data *data = dev_get_drvdata(dev);
296 tmp = pm_runtime_resume_and_get(regmap_get_device(data->regmap));
300 tmp = regmap_bulk_read(data->regmap, AMG88XX_REG_TTHL, &buf, 2);
301 pm_runtime_mark_last_busy(regmap_get_device(data->regmap));
302 pm_runtime_put_autosuspend(regmap_get_device(data->regmap));
331 static int amg88xx_hwmon_init(struct video_i2c_data *data)
333 struct device *dev = regmap_get_device(data->regmap);
334 void *hwmon = devm_hwmon_device_register_with_info(dev, "amg88xx", data,
406 struct video_i2c_data *data = vb2_get_drv_priv(vq);
407 unsigned int size = data->chip->buffer_size;
424 struct video_i2c_data *data = vb2_get_drv_priv(vb->vb2_queue);
425 unsigned int size = data->chip->buffer_size;
439 struct video_i2c_data *data = vb2_get_drv_priv(vb->vb2_queue);
443 spin_lock(&data->slock);
444 list_add_tail(&buf->list, &data->vid_cap_active);
445 spin_unlock(&data->slock);
450 struct video_i2c_data *data = priv;
451 u32 delay = mult_frac(1000000UL, data->frame_interval.numerator,
452 data->frame_interval.denominator);
464 spin_lock(&data->slock);
466 if (!list_empty(&data->vid_cap_active)) {
467 vid_cap_buf = list_last_entry(&data->vid_cap_active,
472 spin_unlock(&data->slock);
479 ret = data->chip->xfer(data, vbuf);
481 vid_cap_buf->vb.sequence = data->sequence++;
501 struct video_i2c_data *data = vb2_get_drv_priv(vq);
504 spin_lock(&data->slock);
506 list_for_each_entry_safe(buf, tmp, &data->vid_cap_active, list) {
511 spin_unlock(&data->slock);
516 struct video_i2c_data *data = vb2_get_drv_priv(vq);
517 struct device *dev = regmap_get_device(data->regmap);
520 if (data->kthread_vid_cap)
527 ret = data->chip->setup(data);
531 data->sequence = 0;
532 data->kthread_vid_cap = kthread_run(video_i2c_thread_vid_cap, data,
533 "%s-vid-cap", data->v4l2_dev.name);
534 ret = PTR_ERR_OR_ZERO(data->kthread_vid_cap);
549 struct video_i2c_data *data = vb2_get_drv_priv(vq);
551 if (data->kthread_vid_cap == NULL)
554 kthread_stop(data->kthread_vid_cap);
555 data->kthread_vid_cap = NULL;
556 pm_runtime_mark_last_busy(regmap_get_device(data->regmap));
557 pm_runtime_put_autosuspend(regmap_get_device(data->regmap));
575 struct video_i2c_data *data = video_drvdata(file);
576 struct device *dev = regmap_get_device(data->regmap);
579 strscpy(vcap->driver, data->v4l2_dev.name, sizeof(vcap->driver));
580 strscpy(vcap->card, data->vdev.name, sizeof(vcap->card));
615 struct video_i2c_data *data = video_drvdata(file);
621 *fmt = *data->chip->format;
630 const struct video_i2c_data *data = video_drvdata(file);
631 const struct v4l2_frmsize_discrete *size = data->chip->size;
637 if (fsize->pixel_format != data->chip->format->pixelformat)
650 const struct video_i2c_data *data = video_drvdata(file);
651 const struct v4l2_frmsize_discrete *size = data->chip->size;
653 if (fe->index >= data->chip->num_frame_intervals)
660 fe->discrete = data->chip->frame_intervals[fe->index];
668 const struct video_i2c_data *data = video_drvdata(file);
669 const struct v4l2_frmsize_discrete *size = data->chip->size;
671 unsigned int bpp = data->chip->bpp / 8;
675 pix->pixelformat = data->chip->format->pixelformat;
687 struct video_i2c_data *data = video_drvdata(file);
689 if (vb2_is_busy(&data->vb_vidq))
698 struct video_i2c_data *data = video_drvdata(filp);
705 parm->parm.capture.timeperframe = data->frame_interval;
713 struct video_i2c_data *data = video_drvdata(filp);
716 for (i = 0; i < data->chip->num_frame_intervals - 1; i++) {
718 data->chip->frame_intervals[i]))
721 data->frame_interval = data->chip->frame_intervals[i];
751 struct video_i2c_data *data = video_get_drvdata(vdev);
753 v4l2_device_unregister(&data->v4l2_dev);
754 mutex_destroy(&data->lock);
755 mutex_destroy(&data->queue_lock);
756 regmap_exit(data->regmap);
757 kfree(data);
763 struct video_i2c_data *data;
768 data = kzalloc(sizeof(*data), GFP_KERNEL);
769 if (!data)
773 data->chip = device_get_match_data(&client->dev);
775 data->chip = &video_i2c_chip[id->driver_data];
779 data->regmap = regmap_init_i2c(client, data->chip->regmap_config);
780 if (IS_ERR(data->regmap)) {
781 ret = PTR_ERR(data->regmap);
785 v4l2_dev = &data->v4l2_dev;
792 mutex_init(&data->lock);
793 mutex_init(&data->queue_lock);
795 queue = &data->vb_vidq;
799 queue->drv_priv = data;
809 data->vdev.queue = queue;
810 data->vdev.queue->lock = &data->queue_lock;
812 snprintf(data->vdev.name, sizeof(data->vdev.name),
816 data->vdev.v4l2_dev = v4l2_dev;
817 data->vdev.fops = &video_i2c_fops;
818 data->vdev.lock = &data->lock;
819 data->vdev.ioctl_ops = &video_i2c_ioctl_ops;
820 data->vdev.release = video_i2c_release;
821 data->vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE |
824 spin_lock_init(&data->slock);
825 INIT_LIST_HEAD(&data->vid_cap_active);
827 data->frame_interval = data->chip->frame_intervals[0];
829 video_set_drvdata(&data->vdev, data);
830 i2c_set_clientdata(client, data);
832 if (data->chip->set_power) {
833 ret = data->chip->set_power(data, true);
844 if (data->chip->hwmon_init) {
845 ret = data->chip->hwmon_init(data);
852 if (data->chip->nvmem_config) {
853 struct nvmem_config *config = data->chip->nvmem_config;
856 config->priv = data;
867 ret = video_register_device(&data->vdev, VFL_TYPE_VIDEO, -1);
881 if (data->chip->set_power)
882 data->chip->set_power(data, false);
886 mutex_destroy(&data->lock);
887 mutex_destroy(&data->queue_lock);
890 regmap_exit(data->regmap);
893 kfree(data);
900 struct video_i2c_data *data = i2c_get_clientdata(client);
907 if (data->chip->set_power)
908 data->chip->set_power(data, false);
910 video_unregister_device(&data->vdev);
917 struct video_i2c_data *data = i2c_get_clientdata(to_i2c_client(dev));
919 if (!data->chip->set_power)
922 return data->chip->set_power(data, false);
927 struct video_i2c_data *data = i2c_get_clientdata(to_i2c_client(dev));
929 if (!data->chip->set_power)
932 return data->chip->set_power(data, true);
950 { .compatible = "panasonic,amg88xx", .data = &video_i2c_chip[AMG88XX] },
951 { .compatible = "melexis,mlx90640", .data = &video_i2c_chip[MLX90640] },