Lines Matching defs:sensor

70  * This table describes what should be written to the sensor register
551 * If power is on, also updates the sensor analog and digital gains.
554 static int et8ek8_set_gain(struct et8ek8_sensor *sensor, s32 gain)
556 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
582 static int et8ek8_set_test_pattern(struct et8ek8_sensor *sensor, s32 mode)
584 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
638 struct et8ek8_sensor *sensor =
643 return et8ek8_set_gain(sensor, ctrl->val);
648 v4l2_get_subdevdata(&sensor->subdev);
655 return et8ek8_set_test_pattern(sensor, ctrl->val);
681 static int et8ek8_init_controls(struct et8ek8_sensor *sensor)
685 v4l2_ctrl_handler_init(&sensor->ctrl_handler, 4);
688 v4l2_ctrl_new_std(&sensor->ctrl_handler, &et8ek8_ctrl_ops,
692 max_rows = sensor->current_reglist->mode.max_exp;
696 sensor->exposure =
697 v4l2_ctrl_new_std(&sensor->ctrl_handler,
703 sensor->pixel_rate =
704 v4l2_ctrl_new_std(&sensor->ctrl_handler, &et8ek8_ctrl_ops,
708 v4l2_ctrl_new_std_menu_items(&sensor->ctrl_handler,
713 if (sensor->ctrl_handler.error)
714 return sensor->ctrl_handler.error;
716 sensor->subdev.ctrl_handler = &sensor->ctrl_handler;
721 static void et8ek8_update_controls(struct et8ek8_sensor *sensor)
724 struct et8ek8_mode *mode = &sensor->current_reglist->mode;
729 ctrl = sensor->exposure;
743 __v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate, pixel_rate << S);
746 static int et8ek8_configure(struct et8ek8_sensor *sensor)
748 struct v4l2_subdev *subdev = &sensor->subdev;
752 rval = et8ek8_i2c_write_regs(client, sensor->current_reglist->regs);
756 /* Controls set while the power to the sensor is turned off are saved
760 rval = v4l2_ctrl_handler_setup(&sensor->ctrl_handler);
767 dev_err(&client->dev, "sensor configuration failed\n");
772 static int et8ek8_stream_on(struct et8ek8_sensor *sensor)
774 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
779 static int et8ek8_stream_off(struct et8ek8_sensor *sensor)
781 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
788 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
792 return et8ek8_stream_off(sensor);
794 ret = et8ek8_configure(sensor);
798 return et8ek8_stream_on(sensor);
805 static int et8ek8_power_off(struct et8ek8_sensor *sensor)
807 gpiod_set_value(sensor->reset, 0);
810 clk_disable_unprepare(sensor->ext_clk);
812 return regulator_disable(sensor->vana);
815 static int et8ek8_power_on(struct et8ek8_sensor *sensor)
817 struct v4l2_subdev *subdev = &sensor->subdev;
822 rval = regulator_enable(sensor->vana);
828 if (sensor->current_reglist)
829 xclk_freq = sensor->current_reglist->mode.ext_clock;
831 xclk_freq = sensor->xclk_freq;
833 rval = clk_set_rate(sensor->ext_clk, xclk_freq);
839 rval = clk_prepare_enable(sensor->ext_clk);
850 gpiod_set_value(sensor->reset, 1);
875 et8ek8_power_off(sensor);
992 __et8ek8_get_pad_format(struct et8ek8_sensor *sensor,
998 return v4l2_subdev_get_try_format(&sensor->subdev, cfg, pad);
1000 return &sensor->format;
1010 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1013 format = __et8ek8_get_pad_format(sensor, cfg, fmt->pad, fmt->which);
1026 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1030 format = __et8ek8_get_pad_format(sensor, cfg, fmt->pad, fmt->which);
1039 sensor->current_reglist = reglist;
1040 et8ek8_update_controls(sensor);
1049 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1052 fi->interval = sensor->current_reglist->mode.timeperframe;
1060 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1064 sensor->current_reglist,
1070 if (sensor->current_reglist->mode.ext_clock != reglist->mode.ext_clock)
1073 sensor->current_reglist = reglist;
1074 et8ek8_update_controls(sensor);
1081 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1085 u8 *ptr = sensor->priv_mem;
1156 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1160 rval = et8ek8_power_on(sensor);
1172 dev_err(&client->dev, "no et8ek8 sensor detected\n");
1176 sensor->version = (rev_h << 8) + rev_l;
1177 if (sensor->version != ET8EK8_REV_1 && sensor->version != ET8EK8_REV_2)
1180 sensor->version);
1190 sensor->current_reglist = et8ek8_reglist_find_type(&meta_reglist,
1192 if (!sensor->current_reglist) {
1200 et8ek8_reglist_to_mbus(sensor->current_reglist, &sensor->format);
1210 rval = et8ek8_stream_on(sensor); /* Needed to be able to read EEPROM */
1216 "can not read OTP (EEPROM) memory from sensor\n");
1217 rval = et8ek8_stream_off(sensor);
1221 rval = et8ek8_power_off(sensor);
1228 et8ek8_power_off(sensor);
1241 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1247 memcpy(buf, sensor->priv_mem, ET8EK8_PRIV_MEM_SIZE);
1260 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1276 rval = et8ek8_init_controls(sensor);
1282 __et8ek8_get_pad_format(sensor, NULL, 0, V4L2_SUBDEV_FORMAT_ACTIVE);
1292 static int __et8ek8_set_power(struct et8ek8_sensor *sensor, bool on)
1294 return on ? et8ek8_power_on(sensor) : et8ek8_power_off(sensor);
1299 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1302 mutex_lock(&sensor->power_lock);
1307 if (sensor->power_count == !on) {
1308 ret = __et8ek8_set_power(sensor, !!on);
1314 sensor->power_count += on ? 1 : -1;
1315 WARN_ON(sensor->power_count < 0);
1318 mutex_unlock(&sensor->power_lock);
1325 struct et8ek8_sensor *sensor = to_et8ek8_sensor(sd);
1330 format = __et8ek8_get_pad_format(sensor, fh->pad, 0,
1379 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1381 if (!sensor->power_count)
1384 return __et8ek8_set_power(sensor, false);
1391 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1393 if (!sensor->power_count)
1396 return __et8ek8_set_power(sensor, true);
1401 struct et8ek8_sensor *sensor;
1405 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL);
1406 if (!sensor)
1409 sensor->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
1410 if (IS_ERR(sensor->reset)) {
1412 return PTR_ERR(sensor->reset);
1415 sensor->vana = devm_regulator_get(dev, "vana");
1416 if (IS_ERR(sensor->vana)) {
1418 return PTR_ERR(sensor->vana);
1421 sensor->ext_clk = devm_clk_get(dev, NULL);
1422 if (IS_ERR(sensor->ext_clk)) {
1424 return PTR_ERR(sensor->ext_clk);
1428 &sensor->xclk_freq);
1434 mutex_init(&sensor->power_lock);
1436 v4l2_i2c_subdev_init(&sensor->subdev, client, &et8ek8_ops);
1437 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1438 sensor->subdev.internal_ops = &et8ek8_internal_ops;
1440 sensor->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1441 sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
1442 ret = media_entity_pads_init(&sensor->subdev.entity, 1, &sensor->pad);
1448 ret = v4l2_async_register_subdev_sensor_common(&sensor->subdev);
1457 media_entity_cleanup(&sensor->subdev.entity);
1459 mutex_destroy(&sensor->power_lock);
1466 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
1468 if (sensor->power_count) {
1470 et8ek8_power_off(sensor);
1471 sensor->power_count = 0;
1474 v4l2_device_unregister_subdev(&sensor->subdev);
1476 v4l2_ctrl_handler_free(&sensor->ctrl_handler);
1477 v4l2_async_unregister_subdev(&sensor->subdev);
1478 media_entity_cleanup(&sensor->subdev.entity);
1479 mutex_destroy(&sensor->power_lock);
1514 MODULE_DESCRIPTION("Toshiba ET8EK8 camera sensor driver");