Lines Matching defs:sensor

125  * for this sensor.
155 #define to_dev(sensor) \
156 (&((struct i2c_client *)v4l2_get_subdevdata(&(sensor)->subdev))->dev)
168 static u32 mt9m032_row_time(struct mt9m032 *sensor, unsigned int width)
174 ns = div_u64(1000000000ULL * effective_width, sensor->pix_clock);
175 dev_dbg(to_dev(sensor), "MT9M032 line time: %u ns\n", ns);
179 static int mt9m032_update_timing(struct mt9m032 *sensor,
182 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
183 struct v4l2_rect *crop = &sensor->crop;
189 interval = &sensor->frame_interval;
191 row_time = mt9m032_row_time(sensor, crop->width);
215 static int mt9m032_update_geom_timing(struct mt9m032 *sensor)
217 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
221 sensor->crop.width - 1);
224 sensor->crop.height - 1);
227 sensor->crop.left);
230 sensor->crop.top);
232 ret = mt9m032_update_timing(sensor, NULL);
236 static int update_formatter2(struct mt9m032 *sensor, bool streaming)
238 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
249 static int mt9m032_setup_pll(struct mt9m032 *sensor)
267 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
268 struct mt9m032_platform_data *pdata = sensor->pdata;
280 sensor->pix_clock = pdata->pix_clock;
334 * @sensor: pointer to the sensor struct
341 __mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg,
346 return v4l2_subdev_get_try_crop(&sensor->subdev, cfg, 0);
348 return &sensor->crop;
356 * @sensor: pointer to the sensor struct
363 __mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg,
368 return v4l2_subdev_get_try_format(&sensor->subdev, cfg, 0);
370 return &sensor->format;
380 struct mt9m032 *sensor = to_mt9m032(subdev);
382 mutex_lock(&sensor->lock);
383 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which);
384 mutex_unlock(&sensor->lock);
393 struct mt9m032 *sensor = to_mt9m032(subdev);
396 mutex_lock(&sensor->lock);
398 if (sensor->streaming && fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
404 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which);
408 mutex_unlock(&sensor->lock);
416 struct mt9m032 *sensor = to_mt9m032(subdev);
421 mutex_lock(&sensor->lock);
422 sel->r = *__mt9m032_get_pad_crop(sensor, cfg, sel->which);
423 mutex_unlock(&sensor->lock);
432 struct mt9m032 *sensor = to_mt9m032(subdev);
441 mutex_lock(&sensor->lock);
443 if (sensor->streaming && sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
465 __crop = __mt9m032_get_pad_crop(sensor, cfg, sel->which);
471 format = __mt9m032_get_pad_format(sensor, cfg, sel->which);
480 ret = mt9m032_update_geom_timing(sensor);
483 mutex_unlock(&sensor->lock);
490 struct mt9m032 *sensor = to_mt9m032(subdev);
492 mutex_lock(&sensor->lock);
494 fi->interval = sensor->frame_interval;
495 mutex_unlock(&sensor->lock);
503 struct mt9m032 *sensor = to_mt9m032(subdev);
506 mutex_lock(&sensor->lock);
508 if (sensor->streaming) {
517 ret = mt9m032_update_timing(sensor, &fi->interval);
519 sensor->frame_interval = fi->interval;
522 mutex_unlock(&sensor->lock);
528 struct mt9m032 *sensor = to_mt9m032(subdev);
531 mutex_lock(&sensor->lock);
532 ret = update_formatter2(sensor, streaming);
534 sensor->streaming = streaming;
535 mutex_unlock(&sensor->lock);
548 struct mt9m032 *sensor = to_mt9m032(sd);
549 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
568 struct mt9m032 *sensor = to_mt9m032(sd);
569 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
582 static int update_read_mode2(struct mt9m032 *sensor, bool vflip, bool hflip)
584 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
593 static int mt9m032_set_gain(struct mt9m032 *sensor, s32 val)
595 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
634 struct mt9m032 *sensor =
636 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
641 return mt9m032_set_gain(sensor, ctrl->val);
645 return update_read_mode2(sensor, sensor->vflip->val,
646 sensor->hflip->val);
705 struct mt9m032 *sensor;
723 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL);
724 if (sensor == NULL)
727 mutex_init(&sensor->lock);
729 sensor->pdata = pdata;
731 v4l2_i2c_subdev_init(&sensor->subdev, client, &mt9m032_ops);
732 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
745 sensor->frame_interval.numerator = 1;
746 sensor->frame_interval.denominator = 30;
748 sensor->crop.left = MT9M032_COLUMN_START_DEF;
749 sensor->crop.top = MT9M032_ROW_START_DEF;
750 sensor->crop.width = MT9M032_COLUMN_SIZE_DEF;
751 sensor->crop.height = MT9M032_ROW_SIZE_DEF;
753 sensor->format.width = sensor->crop.width;
754 sensor->format.height = sensor->crop.height;
755 sensor->format.code = MEDIA_BUS_FMT_Y8_1X8;
756 sensor->format.field = V4L2_FIELD_NONE;
757 sensor->format.colorspace = V4L2_COLORSPACE_SRGB;
759 v4l2_ctrl_handler_init(&sensor->ctrls, 5);
761 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops,
764 sensor->hflip = v4l2_ctrl_new_std(&sensor->ctrls,
767 sensor->vflip = v4l2_ctrl_new_std(&sensor->ctrls,
771 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops,
775 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops,
779 if (sensor->ctrls.error) {
780 ret = sensor->ctrls.error;
785 v4l2_ctrl_cluster(2, &sensor->hflip);
787 sensor->subdev.ctrl_handler = &sensor->ctrls;
788 sensor->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
789 sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
790 ret = media_entity_pads_init(&sensor->subdev.entity, 1, &sensor->pad);
801 ret = mt9m032_setup_pll(sensor);
806 ret = v4l2_ctrl_handler_setup(&sensor->ctrls);
811 ret = mt9m032_update_geom_timing(sensor);
827 if (sensor->pdata->invert_pixclock) {
842 ret = update_formatter2(sensor, false);
849 media_entity_cleanup(&sensor->subdev.entity);
851 v4l2_ctrl_handler_free(&sensor->ctrls);
853 mutex_destroy(&sensor->lock);
860 struct mt9m032 *sensor = to_mt9m032(subdev);
863 v4l2_ctrl_handler_free(&sensor->ctrls);
865 mutex_destroy(&sensor->lock);
888 MODULE_DESCRIPTION("MT9M032 camera sensor driver");