• Home
  • Raw
  • Download

Lines Matching full:sensor

2  * Driver for MT9M032 CMOS Image Sensor from Micron
133 * for this sensor.
163 #define to_dev(sensor) \ argument
164 (&((struct i2c_client *)v4l2_get_subdevdata(&(sensor)->subdev))->dev)
176 static u32 mt9m032_row_time(struct mt9m032 *sensor, unsigned int width) in mt9m032_row_time() argument
182 ns = div_u64(1000000000ULL * effective_width, sensor->pix_clock); in mt9m032_row_time()
183 dev_dbg(to_dev(sensor), "MT9M032 line time: %u ns\n", ns); in mt9m032_row_time()
187 static int mt9m032_update_timing(struct mt9m032 *sensor, in mt9m032_update_timing() argument
190 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_update_timing()
191 struct v4l2_rect *crop = &sensor->crop; in mt9m032_update_timing()
197 interval = &sensor->frame_interval; in mt9m032_update_timing()
199 row_time = mt9m032_row_time(sensor, crop->width); in mt9m032_update_timing()
223 static int mt9m032_update_geom_timing(struct mt9m032 *sensor) in mt9m032_update_geom_timing() argument
225 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_update_geom_timing()
229 sensor->crop.width - 1); in mt9m032_update_geom_timing()
232 sensor->crop.height - 1); in mt9m032_update_geom_timing()
235 sensor->crop.left); in mt9m032_update_geom_timing()
238 sensor->crop.top); in mt9m032_update_geom_timing()
240 ret = mt9m032_update_timing(sensor, NULL); in mt9m032_update_geom_timing()
244 static int update_formatter2(struct mt9m032 *sensor, bool streaming) in update_formatter2() argument
246 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in update_formatter2()
257 static int mt9m032_setup_pll(struct mt9m032 *sensor) in mt9m032_setup_pll() argument
275 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_setup_pll()
276 struct mt9m032_platform_data *pdata = sensor->pdata; in mt9m032_setup_pll()
288 sensor->pix_clock = pdata->pix_clock; in mt9m032_setup_pll()
342 * @sensor: pointer to the sensor struct
349 __mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg, in __mt9m032_get_pad_crop() argument
354 return v4l2_subdev_get_try_crop(&sensor->subdev, cfg, 0); in __mt9m032_get_pad_crop()
356 return &sensor->crop; in __mt9m032_get_pad_crop()
364 * @sensor: pointer to the sensor struct
371 __mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg, in __mt9m032_get_pad_format() argument
376 return v4l2_subdev_get_try_format(&sensor->subdev, cfg, 0); in __mt9m032_get_pad_format()
378 return &sensor->format; in __mt9m032_get_pad_format()
388 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_get_pad_format() local
390 mutex_lock(&sensor->lock); in mt9m032_get_pad_format()
391 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which); in mt9m032_get_pad_format()
392 mutex_unlock(&sensor->lock); in mt9m032_get_pad_format()
401 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_set_pad_format() local
404 mutex_lock(&sensor->lock); in mt9m032_set_pad_format()
406 if (sensor->streaming && fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) { in mt9m032_set_pad_format()
412 fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which); in mt9m032_set_pad_format()
416 mutex_unlock(&sensor->lock); in mt9m032_set_pad_format()
424 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_get_pad_selection() local
429 mutex_lock(&sensor->lock); in mt9m032_get_pad_selection()
430 sel->r = *__mt9m032_get_pad_crop(sensor, cfg, sel->which); in mt9m032_get_pad_selection()
431 mutex_unlock(&sensor->lock); in mt9m032_get_pad_selection()
440 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_set_pad_selection() local
449 mutex_lock(&sensor->lock); in mt9m032_set_pad_selection()
451 if (sensor->streaming && sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) { in mt9m032_set_pad_selection()
473 __crop = __mt9m032_get_pad_crop(sensor, cfg, sel->which); in mt9m032_set_pad_selection()
479 format = __mt9m032_get_pad_format(sensor, cfg, sel->which); in mt9m032_set_pad_selection()
488 ret = mt9m032_update_geom_timing(sensor); in mt9m032_set_pad_selection()
491 mutex_unlock(&sensor->lock); in mt9m032_set_pad_selection()
498 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_get_frame_interval() local
500 mutex_lock(&sensor->lock); in mt9m032_get_frame_interval()
502 fi->interval = sensor->frame_interval; in mt9m032_get_frame_interval()
503 mutex_unlock(&sensor->lock); in mt9m032_get_frame_interval()
511 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_set_frame_interval() local
514 mutex_lock(&sensor->lock); in mt9m032_set_frame_interval()
516 if (sensor->streaming) { in mt9m032_set_frame_interval()
525 ret = mt9m032_update_timing(sensor, &fi->interval); in mt9m032_set_frame_interval()
527 sensor->frame_interval = fi->interval; in mt9m032_set_frame_interval()
530 mutex_unlock(&sensor->lock); in mt9m032_set_frame_interval()
536 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_s_stream() local
539 mutex_lock(&sensor->lock); in mt9m032_s_stream()
540 ret = update_formatter2(sensor, streaming); in mt9m032_s_stream()
542 sensor->streaming = streaming; in mt9m032_s_stream()
543 mutex_unlock(&sensor->lock); in mt9m032_s_stream()
556 struct mt9m032 *sensor = to_mt9m032(sd); in mt9m032_g_register() local
557 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_g_register()
576 struct mt9m032 *sensor = to_mt9m032(sd); in mt9m032_s_register() local
577 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_s_register()
590 static int update_read_mode2(struct mt9m032 *sensor, bool vflip, bool hflip) in update_read_mode2() argument
592 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in update_read_mode2()
601 static int mt9m032_set_gain(struct mt9m032 *sensor, s32 val) in mt9m032_set_gain() argument
603 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_set_gain()
642 struct mt9m032 *sensor = in mt9m032_set_ctrl() local
644 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in mt9m032_set_ctrl()
649 return mt9m032_set_gain(sensor, ctrl->val); in mt9m032_set_ctrl()
653 return update_read_mode2(sensor, sensor->vflip->val, in mt9m032_set_ctrl()
654 sensor->hflip->val); in mt9m032_set_ctrl()
713 struct mt9m032 *sensor; in mt9m032_probe() local
731 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); in mt9m032_probe()
732 if (sensor == NULL) in mt9m032_probe()
735 mutex_init(&sensor->lock); in mt9m032_probe()
737 sensor->pdata = pdata; in mt9m032_probe()
739 v4l2_i2c_subdev_init(&sensor->subdev, client, &mt9m032_ops); in mt9m032_probe()
740 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in mt9m032_probe()
753 sensor->frame_interval.numerator = 1; in mt9m032_probe()
754 sensor->frame_interval.denominator = 30; in mt9m032_probe()
756 sensor->crop.left = MT9M032_COLUMN_START_DEF; in mt9m032_probe()
757 sensor->crop.top = MT9M032_ROW_START_DEF; in mt9m032_probe()
758 sensor->crop.width = MT9M032_COLUMN_SIZE_DEF; in mt9m032_probe()
759 sensor->crop.height = MT9M032_ROW_SIZE_DEF; in mt9m032_probe()
761 sensor->format.width = sensor->crop.width; in mt9m032_probe()
762 sensor->format.height = sensor->crop.height; in mt9m032_probe()
763 sensor->format.code = MEDIA_BUS_FMT_Y8_1X8; in mt9m032_probe()
764 sensor->format.field = V4L2_FIELD_NONE; in mt9m032_probe()
765 sensor->format.colorspace = V4L2_COLORSPACE_SRGB; in mt9m032_probe()
767 v4l2_ctrl_handler_init(&sensor->ctrls, 5); in mt9m032_probe()
769 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, in mt9m032_probe()
772 sensor->hflip = v4l2_ctrl_new_std(&sensor->ctrls, in mt9m032_probe()
775 sensor->vflip = v4l2_ctrl_new_std(&sensor->ctrls, in mt9m032_probe()
779 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, in mt9m032_probe()
783 v4l2_ctrl_new_std(&sensor->ctrls, &mt9m032_ctrl_ops, in mt9m032_probe()
787 if (sensor->ctrls.error) { in mt9m032_probe()
788 ret = sensor->ctrls.error; in mt9m032_probe()
793 v4l2_ctrl_cluster(2, &sensor->hflip); in mt9m032_probe()
795 sensor->subdev.ctrl_handler = &sensor->ctrls; in mt9m032_probe()
796 sensor->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; in mt9m032_probe()
797 sensor->pad.flags = MEDIA_PAD_FL_SOURCE; in mt9m032_probe()
798 ret = media_entity_pads_init(&sensor->subdev.entity, 1, &sensor->pad); in mt9m032_probe()
809 ret = mt9m032_setup_pll(sensor); in mt9m032_probe()
814 ret = v4l2_ctrl_handler_setup(&sensor->ctrls); in mt9m032_probe()
819 ret = mt9m032_update_geom_timing(sensor); in mt9m032_probe()
835 if (sensor->pdata->invert_pixclock) { in mt9m032_probe()
850 ret = update_formatter2(sensor, false); in mt9m032_probe()
857 media_entity_cleanup(&sensor->subdev.entity); in mt9m032_probe()
859 v4l2_ctrl_handler_free(&sensor->ctrls); in mt9m032_probe()
861 mutex_destroy(&sensor->lock); in mt9m032_probe()
868 struct mt9m032 *sensor = to_mt9m032(subdev); in mt9m032_remove() local
871 v4l2_ctrl_handler_free(&sensor->ctrls); in mt9m032_remove()
873 mutex_destroy(&sensor->lock); in mt9m032_remove()
896 MODULE_DESCRIPTION("MT9M032 camera sensor driver");