Lines Matching refs:ov5695

111 struct ov5695 {  struct
137 #define to_ov5695(sd) container_of(sd, struct ov5695, subdev) argument
736 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_set_fmt() local
740 mutex_lock(&ov5695->mutex); in ov5695_set_fmt()
751 mutex_unlock(&ov5695->mutex); in ov5695_set_fmt()
755 ov5695->cur_mode = mode; in ov5695_set_fmt()
757 __v4l2_ctrl_modify_range(ov5695->hblank, h_blank, in ov5695_set_fmt()
760 __v4l2_ctrl_modify_range(ov5695->vblank, vblank_def, in ov5695_set_fmt()
765 mutex_unlock(&ov5695->mutex); in ov5695_set_fmt()
774 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_get_fmt() local
775 const struct ov5695_mode *mode = ov5695->cur_mode; in ov5695_get_fmt()
777 mutex_lock(&ov5695->mutex); in ov5695_get_fmt()
782 mutex_unlock(&ov5695->mutex); in ov5695_get_fmt()
791 mutex_unlock(&ov5695->mutex); in ov5695_get_fmt()
825 static int ov5695_enable_test_pattern(struct ov5695 *ov5695, u32 pattern) in ov5695_enable_test_pattern() argument
834 return ov5695_write_reg(ov5695->client, OV5695_REG_TEST_PATTERN, in ov5695_enable_test_pattern()
841 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_g_frame_interval() local
842 const struct ov5695_mode *mode = ov5695->cur_mode; in ov5695_g_frame_interval()
849 static void ov5695_get_module_inf(struct ov5695 *ov5695, in ov5695_get_module_inf() argument
854 strscpy(inf->base.module, ov5695->module_name, in ov5695_get_module_inf()
856 strscpy(inf->base.lens, ov5695->len_name, sizeof(inf->base.lens)); in ov5695_get_module_inf()
861 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_ioctl() local
867 ov5695_get_module_inf(ov5695, (struct rkmodule_inf *)arg); in ov5695_ioctl()
874 ret = ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE, in ov5695_ioctl()
877 ret = ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE, in ov5695_ioctl()
944 static int __ov5695_start_stream(struct ov5695 *ov5695) in __ov5695_start_stream() argument
948 ret = ov5695_write_array(ov5695->client, ov5695->cur_mode->reg_list); in __ov5695_start_stream()
953 mutex_unlock(&ov5695->mutex); in __ov5695_start_stream()
954 ret = v4l2_ctrl_handler_setup(&ov5695->ctrl_handler); in __ov5695_start_stream()
955 mutex_lock(&ov5695->mutex); in __ov5695_start_stream()
959 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE, in __ov5695_start_stream()
963 static int __ov5695_stop_stream(struct ov5695 *ov5695) in __ov5695_stop_stream() argument
965 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE, in __ov5695_stop_stream()
971 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_s_stream() local
972 struct i2c_client *client = ov5695->client; in ov5695_s_stream()
975 mutex_lock(&ov5695->mutex); in ov5695_s_stream()
977 if (on == ov5695->streaming) in ov5695_s_stream()
987 ret = __ov5695_start_stream(ov5695); in ov5695_s_stream()
994 __ov5695_stop_stream(ov5695); in ov5695_s_stream()
998 ov5695->streaming = on; in ov5695_s_stream()
1001 mutex_unlock(&ov5695->mutex); in ov5695_s_stream()
1008 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_s_power() local
1009 struct i2c_client *client = ov5695->client; in ov5695_s_power()
1012 mutex_lock(&ov5695->mutex); in ov5695_s_power()
1015 if (ov5695->power_on == !!on) in ov5695_s_power()
1025 ret = ov5695_write_array(ov5695->client, ov5695_global_regs); in ov5695_s_power()
1032 ov5695->power_on = true; in ov5695_s_power()
1035 ov5695->power_on = false; in ov5695_s_power()
1039 mutex_unlock(&ov5695->mutex); in ov5695_s_power()
1050 static int __ov5695_power_on(struct ov5695 *ov5695) in __ov5695_power_on() argument
1054 struct device *dev = &ov5695->client->dev; in __ov5695_power_on()
1056 ret = clk_set_rate(ov5695->xvclk, OV5695_XVCLK_FREQ); in __ov5695_power_on()
1061 if (clk_get_rate(ov5695->xvclk) != OV5695_XVCLK_FREQ) in __ov5695_power_on()
1063 ret = clk_prepare_enable(ov5695->xvclk); in __ov5695_power_on()
1069 if (!IS_ERR(ov5695->reset_gpio)) in __ov5695_power_on()
1070 gpiod_set_value_cansleep(ov5695->reset_gpio, 1); in __ov5695_power_on()
1072 ret = regulator_bulk_enable(OV5695_NUM_SUPPLIES, ov5695->supplies); in __ov5695_power_on()
1078 if (!IS_ERR(ov5695->reset_gpio)) in __ov5695_power_on()
1079 gpiod_set_value_cansleep(ov5695->reset_gpio, 0); in __ov5695_power_on()
1081 if (!IS_ERR(ov5695->pwdn_gpio)) in __ov5695_power_on()
1082 gpiod_set_value_cansleep(ov5695->pwdn_gpio, 1); in __ov5695_power_on()
1091 clk_disable_unprepare(ov5695->xvclk); in __ov5695_power_on()
1096 static void __ov5695_power_off(struct ov5695 *ov5695) in __ov5695_power_off() argument
1098 if (!IS_ERR(ov5695->pwdn_gpio)) in __ov5695_power_off()
1099 gpiod_set_value_cansleep(ov5695->pwdn_gpio, 0); in __ov5695_power_off()
1100 clk_disable_unprepare(ov5695->xvclk); in __ov5695_power_off()
1101 if (!IS_ERR(ov5695->reset_gpio)) in __ov5695_power_off()
1102 gpiod_set_value_cansleep(ov5695->reset_gpio, 1); in __ov5695_power_off()
1103 regulator_bulk_disable(OV5695_NUM_SUPPLIES, ov5695->supplies); in __ov5695_power_off()
1110 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_runtime_resume() local
1112 return __ov5695_power_on(ov5695); in ov5695_runtime_resume()
1119 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_runtime_suspend() local
1121 __ov5695_power_off(ov5695); in ov5695_runtime_suspend()
1129 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_open() local
1134 mutex_lock(&ov5695->mutex); in ov5695_open()
1141 mutex_unlock(&ov5695->mutex); in ov5695_open()
1217 struct ov5695 *ov5695 = container_of(ctrl->handler, in ov5695_set_ctrl() local
1218 struct ov5695, ctrl_handler); in ov5695_set_ctrl()
1219 struct i2c_client *client = ov5695->client; in ov5695_set_ctrl()
1227 max = ov5695->cur_mode->height + ctrl->val - 4; in ov5695_set_ctrl()
1228 __v4l2_ctrl_modify_range(ov5695->exposure, in ov5695_set_ctrl()
1229 ov5695->exposure->minimum, max, in ov5695_set_ctrl()
1230 ov5695->exposure->step, in ov5695_set_ctrl()
1231 ov5695->exposure->default_value); in ov5695_set_ctrl()
1241 ret = ov5695_write_reg(ov5695->client, OV5695_REG_EXPOSURE, in ov5695_set_ctrl()
1245 ret = ov5695_write_reg(ov5695->client, OV5695_REG_ANALOG_GAIN, in ov5695_set_ctrl()
1249 ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L, in ov5695_set_ctrl()
1252 ret |= ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_H, in ov5695_set_ctrl()
1257 ret = ov5695_write_reg(ov5695->client, OV5695_REG_VTS, in ov5695_set_ctrl()
1259 ctrl->val + ov5695->cur_mode->height); in ov5695_set_ctrl()
1262 ret = ov5695_enable_test_pattern(ov5695, ctrl->val); in ov5695_set_ctrl()
1279 static int ov5695_initialize_controls(struct ov5695 *ov5695) in ov5695_initialize_controls() argument
1288 handler = &ov5695->ctrl_handler; in ov5695_initialize_controls()
1289 mode = ov5695->cur_mode; in ov5695_initialize_controls()
1293 handler->lock = &ov5695->mutex; in ov5695_initialize_controls()
1304 ov5695->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov5695_initialize_controls()
1306 if (ov5695->hblank) in ov5695_initialize_controls()
1307 ov5695->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov5695_initialize_controls()
1310 ov5695->vblank = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops, in ov5695_initialize_controls()
1316 ov5695->exposure = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops, in ov5695_initialize_controls()
1321 ov5695->anal_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops, in ov5695_initialize_controls()
1327 ov5695->digi_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops, in ov5695_initialize_controls()
1332 ov5695->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov5695_initialize_controls()
1339 dev_err(&ov5695->client->dev, in ov5695_initialize_controls()
1344 ov5695->subdev.ctrl_handler = handler; in ov5695_initialize_controls()
1354 static int ov5695_check_sensor_id(struct ov5695 *ov5695, in ov5695_check_sensor_id() argument
1357 struct device *dev = &ov5695->client->dev; in ov5695_check_sensor_id()
1373 static int ov5695_configure_regulators(struct ov5695 *ov5695) in ov5695_configure_regulators() argument
1378 ov5695->supplies[i].supply = ov5695_supply_names[i]; in ov5695_configure_regulators()
1380 return devm_regulator_bulk_get(&ov5695->client->dev, in ov5695_configure_regulators()
1382 ov5695->supplies); in ov5695_configure_regulators()
1390 struct ov5695 *ov5695; in ov5695_probe() local
1400 ov5695 = devm_kzalloc(dev, sizeof(*ov5695), GFP_KERNEL); in ov5695_probe()
1401 if (!ov5695) in ov5695_probe()
1405 &ov5695->module_index); in ov5695_probe()
1407 &ov5695->module_facing); in ov5695_probe()
1409 &ov5695->module_name); in ov5695_probe()
1411 &ov5695->len_name); in ov5695_probe()
1417 ov5695->client = client; in ov5695_probe()
1418 ov5695->cur_mode = &supported_modes[0]; in ov5695_probe()
1420 ov5695->xvclk = devm_clk_get(dev, "xvclk"); in ov5695_probe()
1421 if (IS_ERR(ov5695->xvclk)) { in ov5695_probe()
1426 ov5695->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov5695_probe()
1427 if (IS_ERR(ov5695->reset_gpio)) { in ov5695_probe()
1431 ov5695->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov5695_probe()
1432 if (IS_ERR(ov5695->pwdn_gpio)) in ov5695_probe()
1435 ret = ov5695_configure_regulators(ov5695); in ov5695_probe()
1441 mutex_init(&ov5695->mutex); in ov5695_probe()
1443 sd = &ov5695->subdev; in ov5695_probe()
1445 ret = ov5695_initialize_controls(ov5695); in ov5695_probe()
1449 ret = __ov5695_power_on(ov5695); in ov5695_probe()
1453 ret = ov5695_check_sensor_id(ov5695, client); in ov5695_probe()
1463 ov5695->pad.flags = MEDIA_PAD_FL_SOURCE; in ov5695_probe()
1465 ret = media_entity_pads_init(&sd->entity, 1, &ov5695->pad); in ov5695_probe()
1471 if (strcmp(ov5695->module_facing, "back") == 0) in ov5695_probe()
1477 ov5695->module_index, facing, in ov5695_probe()
1496 __ov5695_power_off(ov5695); in ov5695_probe()
1498 v4l2_ctrl_handler_free(&ov5695->ctrl_handler); in ov5695_probe()
1500 mutex_destroy(&ov5695->mutex); in ov5695_probe()
1508 struct ov5695 *ov5695 = to_ov5695(sd); in ov5695_remove() local
1514 v4l2_ctrl_handler_free(&ov5695->ctrl_handler); in ov5695_remove()
1515 mutex_destroy(&ov5695->mutex); in ov5695_remove()
1519 __ov5695_power_off(ov5695); in ov5695_remove()