Lines Matching refs:sensor

554 static int et8ek8_set_gain(struct et8ek8_sensor *sensor, s32 gain)  in et8ek8_set_gain()  argument
556 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in et8ek8_set_gain()
582 static int et8ek8_set_test_pattern(struct et8ek8_sensor *sensor, s32 mode) in et8ek8_set_test_pattern() argument
584 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in et8ek8_set_test_pattern()
638 struct et8ek8_sensor *sensor = in et8ek8_set_ctrl() local
643 return et8ek8_set_gain(sensor, ctrl->val); in et8ek8_set_ctrl()
648 v4l2_get_subdevdata(&sensor->subdev); in et8ek8_set_ctrl()
655 return et8ek8_set_test_pattern(sensor, ctrl->val); in et8ek8_set_ctrl()
681 static int et8ek8_init_controls(struct et8ek8_sensor *sensor) in et8ek8_init_controls() argument
685 v4l2_ctrl_handler_init(&sensor->ctrl_handler, 4); in et8ek8_init_controls()
688 v4l2_ctrl_new_std(&sensor->ctrl_handler, &et8ek8_ctrl_ops, in et8ek8_init_controls()
692 max_rows = sensor->current_reglist->mode.max_exp; in et8ek8_init_controls()
696 sensor->exposure = in et8ek8_init_controls()
697 v4l2_ctrl_new_std(&sensor->ctrl_handler, in et8ek8_init_controls()
703 sensor->pixel_rate = in et8ek8_init_controls()
704 v4l2_ctrl_new_std(&sensor->ctrl_handler, &et8ek8_ctrl_ops, in et8ek8_init_controls()
708 v4l2_ctrl_new_std_menu_items(&sensor->ctrl_handler, in et8ek8_init_controls()
713 if (sensor->ctrl_handler.error) in et8ek8_init_controls()
714 return sensor->ctrl_handler.error; in et8ek8_init_controls()
716 sensor->subdev.ctrl_handler = &sensor->ctrl_handler; in et8ek8_init_controls()
721 static void et8ek8_update_controls(struct et8ek8_sensor *sensor) in et8ek8_update_controls() argument
724 struct et8ek8_mode *mode = &sensor->current_reglist->mode; in et8ek8_update_controls()
729 ctrl = sensor->exposure; in et8ek8_update_controls()
743 __v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate, pixel_rate << S); in et8ek8_update_controls()
746 static int et8ek8_configure(struct et8ek8_sensor *sensor) in et8ek8_configure() argument
748 struct v4l2_subdev *subdev = &sensor->subdev; in et8ek8_configure()
752 rval = et8ek8_i2c_write_regs(client, sensor->current_reglist->regs); in et8ek8_configure()
760 rval = v4l2_ctrl_handler_setup(&sensor->ctrl_handler); in et8ek8_configure()
772 static int et8ek8_stream_on(struct et8ek8_sensor *sensor) in et8ek8_stream_on() argument
774 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in et8ek8_stream_on()
779 static int et8ek8_stream_off(struct et8ek8_sensor *sensor) in et8ek8_stream_off() argument
781 struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); in et8ek8_stream_off()
788 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_s_stream() local
792 return et8ek8_stream_off(sensor); in et8ek8_s_stream()
794 ret = et8ek8_configure(sensor); in et8ek8_s_stream()
798 return et8ek8_stream_on(sensor); in et8ek8_s_stream()
805 static int et8ek8_power_off(struct et8ek8_sensor *sensor) in et8ek8_power_off() argument
807 gpiod_set_value(sensor->reset, 0); in et8ek8_power_off()
810 clk_disable_unprepare(sensor->ext_clk); in et8ek8_power_off()
812 return regulator_disable(sensor->vana); in et8ek8_power_off()
815 static int et8ek8_power_on(struct et8ek8_sensor *sensor) in et8ek8_power_on() argument
817 struct v4l2_subdev *subdev = &sensor->subdev; in et8ek8_power_on()
822 rval = regulator_enable(sensor->vana); in et8ek8_power_on()
828 if (sensor->current_reglist) in et8ek8_power_on()
829 xclk_freq = sensor->current_reglist->mode.ext_clock; in et8ek8_power_on()
831 xclk_freq = sensor->xclk_freq; in et8ek8_power_on()
833 rval = clk_set_rate(sensor->ext_clk, xclk_freq); in et8ek8_power_on()
839 rval = clk_prepare_enable(sensor->ext_clk); in et8ek8_power_on()
850 gpiod_set_value(sensor->reset, 1); in et8ek8_power_on()
875 et8ek8_power_off(sensor); in et8ek8_power_on()
992 __et8ek8_get_pad_format(struct et8ek8_sensor *sensor, in __et8ek8_get_pad_format() argument
1000 return &sensor->format; in __et8ek8_get_pad_format()
1010 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_get_pad_format() local
1013 format = __et8ek8_get_pad_format(sensor, sd_state, fmt->pad, in et8ek8_get_pad_format()
1027 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_set_pad_format() local
1031 format = __et8ek8_get_pad_format(sensor, sd_state, fmt->pad, in et8ek8_set_pad_format()
1041 sensor->current_reglist = reglist; in et8ek8_set_pad_format()
1042 et8ek8_update_controls(sensor); in et8ek8_set_pad_format()
1052 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_get_frame_interval() local
1062 fi->interval = sensor->current_reglist->mode.timeperframe; in et8ek8_get_frame_interval()
1071 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_set_frame_interval() local
1082 sensor->current_reglist, in et8ek8_set_frame_interval()
1088 if (sensor->current_reglist->mode.ext_clock != reglist->mode.ext_clock) in et8ek8_set_frame_interval()
1091 sensor->current_reglist = reglist; in et8ek8_set_frame_interval()
1092 et8ek8_update_controls(sensor); in et8ek8_set_frame_interval()
1099 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_g_priv_mem() local
1103 u8 *ptr = sensor->priv_mem; in et8ek8_g_priv_mem()
1174 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_dev_init() local
1178 rval = et8ek8_power_on(sensor); in et8ek8_dev_init()
1194 sensor->version = (rev_h << 8) + rev_l; in et8ek8_dev_init()
1195 if (sensor->version != ET8EK8_REV_1 && sensor->version != ET8EK8_REV_2) in et8ek8_dev_init()
1198 sensor->version); in et8ek8_dev_init()
1208 sensor->current_reglist = et8ek8_reglist_find_type(&meta_reglist, in et8ek8_dev_init()
1210 if (!sensor->current_reglist) { in et8ek8_dev_init()
1218 et8ek8_reglist_to_mbus(sensor->current_reglist, &sensor->format); in et8ek8_dev_init()
1228 rval = et8ek8_stream_on(sensor); /* Needed to be able to read EEPROM */ in et8ek8_dev_init()
1235 rval = et8ek8_stream_off(sensor); in et8ek8_dev_init()
1239 rval = et8ek8_power_off(sensor); in et8ek8_dev_init()
1246 et8ek8_power_off(sensor); in et8ek8_dev_init()
1258 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in priv_mem_show() local
1264 memcpy(buf, sensor->priv_mem, ET8EK8_PRIV_MEM_SIZE); in priv_mem_show()
1277 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_registered() local
1293 rval = et8ek8_init_controls(sensor); in et8ek8_registered()
1299 __et8ek8_get_pad_format(sensor, NULL, 0, V4L2_SUBDEV_FORMAT_ACTIVE); in et8ek8_registered()
1309 static int __et8ek8_set_power(struct et8ek8_sensor *sensor, bool on) in __et8ek8_set_power() argument
1311 return on ? et8ek8_power_on(sensor) : et8ek8_power_off(sensor); in __et8ek8_set_power()
1316 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_set_power() local
1319 mutex_lock(&sensor->power_lock); in et8ek8_set_power()
1324 if (sensor->power_count == !on) { in et8ek8_set_power()
1325 ret = __et8ek8_set_power(sensor, !!on); in et8ek8_set_power()
1331 sensor->power_count += on ? 1 : -1; in et8ek8_set_power()
1332 WARN_ON(sensor->power_count < 0); in et8ek8_set_power()
1335 mutex_unlock(&sensor->power_lock); in et8ek8_set_power()
1342 struct et8ek8_sensor *sensor = to_et8ek8_sensor(sd); in et8ek8_open() local
1347 format = __et8ek8_get_pad_format(sensor, fh->state, 0, in et8ek8_open()
1395 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_suspend() local
1397 if (!sensor->power_count) in et8ek8_suspend()
1400 return __et8ek8_set_power(sensor, false); in et8ek8_suspend()
1406 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_resume() local
1408 if (!sensor->power_count) in et8ek8_resume()
1411 return __et8ek8_set_power(sensor, true); in et8ek8_resume()
1416 struct et8ek8_sensor *sensor; in et8ek8_probe() local
1420 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); in et8ek8_probe()
1421 if (!sensor) in et8ek8_probe()
1424 sensor->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in et8ek8_probe()
1425 if (IS_ERR(sensor->reset)) { in et8ek8_probe()
1427 return PTR_ERR(sensor->reset); in et8ek8_probe()
1430 sensor->vana = devm_regulator_get(dev, "vana"); in et8ek8_probe()
1431 if (IS_ERR(sensor->vana)) { in et8ek8_probe()
1433 return PTR_ERR(sensor->vana); in et8ek8_probe()
1436 sensor->ext_clk = devm_clk_get(dev, NULL); in et8ek8_probe()
1437 if (IS_ERR(sensor->ext_clk)) { in et8ek8_probe()
1439 return PTR_ERR(sensor->ext_clk); in et8ek8_probe()
1443 &sensor->xclk_freq); in et8ek8_probe()
1449 mutex_init(&sensor->power_lock); in et8ek8_probe()
1451 v4l2_i2c_subdev_init(&sensor->subdev, client, &et8ek8_ops); in et8ek8_probe()
1452 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in et8ek8_probe()
1453 sensor->subdev.internal_ops = &et8ek8_internal_ops; in et8ek8_probe()
1455 sensor->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; in et8ek8_probe()
1456 sensor->pad.flags = MEDIA_PAD_FL_SOURCE; in et8ek8_probe()
1457 ret = media_entity_pads_init(&sensor->subdev.entity, 1, &sensor->pad); in et8ek8_probe()
1463 ret = v4l2_async_register_subdev_sensor(&sensor->subdev); in et8ek8_probe()
1472 media_entity_cleanup(&sensor->subdev.entity); in et8ek8_probe()
1474 mutex_destroy(&sensor->power_lock); in et8ek8_probe()
1481 struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); in et8ek8_remove() local
1483 if (sensor->power_count) { in et8ek8_remove()
1485 et8ek8_power_off(sensor); in et8ek8_remove()
1486 sensor->power_count = 0; in et8ek8_remove()
1489 v4l2_device_unregister_subdev(&sensor->subdev); in et8ek8_remove()
1491 v4l2_ctrl_handler_free(&sensor->ctrl_handler); in et8ek8_remove()
1492 v4l2_async_unregister_subdev(&sensor->subdev); in et8ek8_remove()
1493 media_entity_cleanup(&sensor->subdev.entity); in et8ek8_remove()
1494 mutex_destroy(&sensor->power_lock); in et8ek8_remove()