Lines Matching refs:ov2718
145 struct ov2718 { struct
183 #define to_ov2718(sd) container_of(sd, struct ov2718, subdev) argument
7771 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_find_best_fit() local
7778 for (i = 0; i < ov2718->support_modes_num; i++) { in ov2718_find_best_fit()
7779 dist = ov2718_get_reso_dist(&ov2718->support_modes[i], in ov2718_find_best_fit()
7787 return &ov2718->support_modes[cur_best_fit]; in ov2718_find_best_fit()
7794 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_set_fmt() local
7798 mutex_lock(&ov2718->mutex); in ov2718_set_fmt()
7809 mutex_unlock(&ov2718->mutex); in ov2718_set_fmt()
7813 ov2718->cur_mode = mode; in ov2718_set_fmt()
7815 __v4l2_ctrl_modify_range(ov2718->hblank, h_blank, in ov2718_set_fmt()
7818 __v4l2_ctrl_modify_range(ov2718->vblank, vblank_def, in ov2718_set_fmt()
7823 __v4l2_ctrl_s_ctrl_int64(ov2718->pixel_rate, OV2718_PIXEL_RATE_10BIT); in ov2718_set_fmt()
7825 __v4l2_ctrl_s_ctrl_int64(ov2718->pixel_rate, OV2718_PIXEL_RATE_12BIT); in ov2718_set_fmt()
7829 mutex_unlock(&ov2718->mutex); in ov2718_set_fmt()
7838 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_get_fmt() local
7839 const struct ov2718_mode *mode = ov2718->cur_mode; in ov2718_get_fmt()
7841 mutex_lock(&ov2718->mutex); in ov2718_get_fmt()
7846 mutex_unlock(&ov2718->mutex); in ov2718_get_fmt()
7859 mutex_unlock(&ov2718->mutex); in ov2718_get_fmt()
7868 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_enum_mbus_code() local
7872 code->code = ov2718->support_modes[0].bus_fmt; in ov2718_enum_mbus_code()
7881 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_enum_frame_sizes() local
7883 if (fse->index >= ov2718->support_modes_num) in ov2718_enum_frame_sizes()
7886 if (fse->code != ov2718->support_modes[0].bus_fmt) in ov2718_enum_frame_sizes()
7889 fse->min_width = ov2718->support_modes[fse->index].width; in ov2718_enum_frame_sizes()
7890 fse->max_width = ov2718->support_modes[fse->index].width; in ov2718_enum_frame_sizes()
7891 fse->max_height = ov2718->support_modes[fse->index].height; in ov2718_enum_frame_sizes()
7892 fse->min_height = ov2718->support_modes[fse->index].height; in ov2718_enum_frame_sizes()
7897 static int ov2718_enable_test_pattern(struct ov2718 *ov2718, u32 pattern) in ov2718_enable_test_pattern() argument
7906 return ov2718_write_reg(ov2718->client, OV2718_REG_TEST_PATTERN, in ov2718_enable_test_pattern()
7913 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_g_frame_interval() local
7914 const struct ov2718_mode *mode = ov2718->cur_mode; in ov2718_g_frame_interval()
7994 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_g_mbus_config() local
7995 const struct ov2718_mode *mode = ov2718->cur_mode; in ov2718_g_mbus_config()
8014 static void ov2718_get_module_inf(struct ov2718 *ov2718, in ov2718_get_module_inf() argument
8019 strlcpy(inf->base.module, ov2718->module_name, in ov2718_get_module_inf()
8021 strlcpy(inf->base.lens, ov2718->len_name, sizeof(inf->base.lens)); in ov2718_get_module_inf()
8026 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_ioctl() local
8027 struct i2c_client *client = ov2718->client; in ov2718_ioctl()
8037 if (!ov2718->has_init_exp && !ov2718->streaming) { in ov2718_ioctl()
8038 ov2718->init_hdrae_exp = *hdrae_exp; in ov2718_ioctl()
8039 ov2718->has_init_exp = true; in ov2718_ioctl()
8059 ret = ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8065 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8070 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8076 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8082 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8088 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8094 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8100 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8106 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8113 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8119 ret |= ov2718_write_reg(ov2718->client, in ov2718_ioctl()
8133 hdr_cfg->hdr_mode = ov2718->cur_mode->hdr_mode; in ov2718_ioctl()
8136 ov2718_get_module_inf(ov2718, (struct rkmodule_inf *)arg); in ov2718_ioctl()
8140 w = ov2718->cur_mode->width; in ov2718_ioctl()
8141 h = ov2718->cur_mode->height; in ov2718_ioctl()
8142 for (i = 0; i < ov2718->support_modes_num; i++) { in ov2718_ioctl()
8146 ov2718->cur_mode = &supported_modes[i]; in ov2718_ioctl()
8150 if (i == ov2718->support_modes_num) { in ov2718_ioctl()
8156 w = ov2718->cur_mode->hts_def - ov2718->cur_mode->width; in ov2718_ioctl()
8157 h = ov2718->cur_mode->vts_def - ov2718->cur_mode->height; in ov2718_ioctl()
8158 __v4l2_ctrl_modify_range(ov2718->hblank, w, w, 1, w); in ov2718_ioctl()
8159 __v4l2_ctrl_modify_range(ov2718->vblank, h, in ov2718_ioctl()
8160 OV2718_VTS_MAX - ov2718->cur_mode->height, in ov2718_ioctl()
8164 ov2718->cur_mode->hdr_mode, i); in ov2718_ioctl()
8172 ret = ov2718_write_reg(ov2718->client, OV2718_REG_CTRL_MODE, in ov2718_ioctl()
8175 ret = ov2718_write_reg(ov2718->client, OV2718_REG_CTRL_MODE, in ov2718_ioctl()
8272 static int ov2718_set_flip(struct ov2718 *ov2718, u32 flip) in ov2718_set_flip() argument
8277 ret = ov2718_read_reg(ov2718->client, OV2718_READ_MODE, in ov2718_set_flip()
8284 ov2718_write_reg(ov2718->client, 0x30a9, in ov2718_set_flip()
8286 ov2718_write_reg(ov2718->client, 0x3252, in ov2718_set_flip()
8290 ret |= ov2718_write_reg(ov2718->client, OV2718_READ_MODE, in ov2718_set_flip()
8296 static int __ov2718_start_stream(struct ov2718 *ov2718) in __ov2718_start_stream() argument
8300 ret = ov2718_write_array(ov2718->client, in __ov2718_start_stream()
8301 ov2718->cur_mode->reg_list); in __ov2718_start_stream()
8306 if (ov2718->has_init_exp && ov2718->cur_mode->hdr_mode != NO_HDR) { in __ov2718_start_stream()
8307 ret = ov2718_ioctl(&ov2718->subdev, PREISP_CMD_SET_HDRAE_EXP, in __ov2718_start_stream()
8308 &ov2718->init_hdrae_exp); in __ov2718_start_stream()
8310 dev_err(&ov2718->client->dev, in __ov2718_start_stream()
8315 mutex_unlock(&ov2718->mutex); in __ov2718_start_stream()
8316 ret = v4l2_ctrl_handler_setup(&ov2718->ctrl_handler); in __ov2718_start_stream()
8317 mutex_lock(&ov2718->mutex); in __ov2718_start_stream()
8322 if (ov2718->flip) in __ov2718_start_stream()
8323 ov2718_set_flip(ov2718, ov2718->flip); in __ov2718_start_stream()
8325 return ov2718_write_reg(ov2718->client, OV2718_REG_CTRL_MODE, in __ov2718_start_stream()
8329 static int __ov2718_stop_stream(struct ov2718 *ov2718) in __ov2718_stop_stream() argument
8331 ov2718->has_init_exp = false; in __ov2718_stop_stream()
8332 return ov2718_write_reg(ov2718->client, OV2718_REG_CTRL_MODE, in __ov2718_stop_stream()
8338 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_s_stream() local
8339 struct i2c_client *client = ov2718->client; in ov2718_s_stream()
8342 mutex_lock(&ov2718->mutex); in ov2718_s_stream()
8344 if (on == ov2718->streaming) in ov2718_s_stream()
8354 ret = __ov2718_start_stream(ov2718); in ov2718_s_stream()
8361 __ov2718_stop_stream(ov2718); in ov2718_s_stream()
8365 ov2718->streaming = on; in ov2718_s_stream()
8368 mutex_unlock(&ov2718->mutex); in ov2718_s_stream()
8375 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_s_power() local
8376 struct i2c_client *client = ov2718->client; in ov2718_s_power()
8379 mutex_lock(&ov2718->mutex); in ov2718_s_power()
8382 if (ov2718->power_on == !!on) in ov2718_s_power()
8392 ov2718->power_on = true; in ov2718_s_power()
8395 ov2718->power_on = false; in ov2718_s_power()
8399 mutex_unlock(&ov2718->mutex); in ov2718_s_power()
8410 static int __ov2718_power_on(struct ov2718 *ov2718) in __ov2718_power_on() argument
8414 struct device *dev = &ov2718->client->dev; in __ov2718_power_on()
8416 if (!IS_ERR_OR_NULL(ov2718->pins_default)) { in __ov2718_power_on()
8417 ret = pinctrl_select_state(ov2718->pinctrl, in __ov2718_power_on()
8418 ov2718->pins_default); in __ov2718_power_on()
8422 ret = clk_set_rate(ov2718->xvclk, OV2718_XVCLK_FREQ); in __ov2718_power_on()
8425 if (clk_get_rate(ov2718->xvclk) != OV2718_XVCLK_FREQ) in __ov2718_power_on()
8427 ret = clk_prepare_enable(ov2718->xvclk); in __ov2718_power_on()
8432 ret = regulator_bulk_enable(OV2718_NUM_SUPPLIES, ov2718->supplies); in __ov2718_power_on()
8438 if (!IS_ERR(ov2718->pwd_gpio)) { in __ov2718_power_on()
8439 gpiod_direction_output(ov2718->pwd_gpio, 1); in __ov2718_power_on()
8443 if (!IS_ERR(ov2718->pd_gpio)) { in __ov2718_power_on()
8444 gpiod_direction_output(ov2718->pd_gpio, 1); in __ov2718_power_on()
8448 if (!IS_ERR(ov2718->rst_gpio)) { in __ov2718_power_on()
8449 gpiod_direction_output(ov2718->rst_gpio, 1); in __ov2718_power_on()
8451 gpiod_direction_output(ov2718->rst_gpio, 0); in __ov2718_power_on()
8460 clk_disable_unprepare(ov2718->xvclk); in __ov2718_power_on()
8465 static void __ov2718_power_off(struct ov2718 *ov2718) in __ov2718_power_off() argument
8468 struct device *dev = &ov2718->client->dev; in __ov2718_power_off()
8470 if (!IS_ERR(ov2718->pd_gpio)) in __ov2718_power_off()
8471 gpiod_direction_output(ov2718->pd_gpio, 0); in __ov2718_power_off()
8473 clk_disable_unprepare(ov2718->xvclk); in __ov2718_power_off()
8475 if (!IS_ERR(ov2718->rst_gpio)) in __ov2718_power_off()
8476 gpiod_direction_output(ov2718->rst_gpio, 0); in __ov2718_power_off()
8478 if (!IS_ERR(ov2718->pwd_gpio)) in __ov2718_power_off()
8479 gpiod_direction_output(ov2718->pwd_gpio, 0); in __ov2718_power_off()
8481 if (!IS_ERR_OR_NULL(ov2718->pins_sleep)) { in __ov2718_power_off()
8482 ret = pinctrl_select_state(ov2718->pinctrl, in __ov2718_power_off()
8483 ov2718->pins_sleep); in __ov2718_power_off()
8488 regulator_bulk_disable(OV2718_NUM_SUPPLIES, ov2718->supplies); in __ov2718_power_off()
8495 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_runtime_resume() local
8497 return __ov2718_power_on(ov2718); in ov2718_runtime_resume()
8504 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_runtime_suspend() local
8506 __ov2718_power_off(ov2718); in ov2718_runtime_suspend()
8514 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_open() local
8517 const struct ov2718_mode *def_mode = &ov2718->support_modes[0]; in ov2718_open()
8519 mutex_lock(&ov2718->mutex); in ov2718_open()
8526 mutex_unlock(&ov2718->mutex); in ov2718_open()
8537 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_enum_frame_interval() local
8539 if (fie->index >= ov2718->support_modes_num) in ov2718_enum_frame_interval()
8543 fie->width = ov2718->support_modes[fie->index].width; in ov2718_enum_frame_interval()
8544 fie->height = ov2718->support_modes[fie->index].height; in ov2718_enum_frame_interval()
8545 fie->interval = ov2718->support_modes[fie->index].max_fps; in ov2718_enum_frame_interval()
8631 struct ov2718 *ov2718 = container_of(ctrl->handler, in ov2718_set_ctrl() local
8632 struct ov2718, ctrl_handler); in ov2718_set_ctrl()
8633 struct i2c_client *client = ov2718->client; in ov2718_set_ctrl()
8642 max = ov2718->cur_mode->height + ctrl->val - 4; in ov2718_set_ctrl()
8643 __v4l2_ctrl_modify_range(ov2718->exposure, in ov2718_set_ctrl()
8644 ov2718->exposure->minimum, max, in ov2718_set_ctrl()
8645 ov2718->exposure->step, in ov2718_set_ctrl()
8646 ov2718->exposure->default_value); in ov2718_set_ctrl()
8655 ret = ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8660 ret |= ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8669 ret = ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8674 ret |= ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8679 ret |= ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8688 val = ctrl->val + ov2718->cur_mode->height; in ov2718_set_ctrl()
8689 ret = ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8694 ret |= ov2718_write_reg(ov2718->client, in ov2718_set_ctrl()
8702 ret = ov2718_enable_test_pattern(ov2718, ctrl->val); in ov2718_set_ctrl()
8706 ov2718->flip |= OV2718_MIRROR; in ov2718_set_ctrl()
8708 ov2718->flip &= ~OV2718_MIRROR; in ov2718_set_ctrl()
8712 ov2718->flip |= OV2718_FLIP; in ov2718_set_ctrl()
8714 ov2718->flip &= ~OV2718_FLIP; in ov2718_set_ctrl()
8731 static int ov2718_initialize_controls(struct ov2718 *ov2718) in ov2718_initialize_controls() argument
8740 handler = &ov2718->ctrl_handler; in ov2718_initialize_controls()
8741 mode = ov2718->cur_mode; in ov2718_initialize_controls()
8745 handler->lock = &ov2718->mutex; in ov2718_initialize_controls()
8753 ov2718->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in ov2718_initialize_controls()
8757 ov2718->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in ov2718_initialize_controls()
8762 ov2718->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov2718_initialize_controls()
8764 if (ov2718->hblank) in ov2718_initialize_controls()
8765 ov2718->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov2718_initialize_controls()
8768 ov2718->vblank = v4l2_ctrl_new_std(handler, &ov2718_ctrl_ops, in ov2718_initialize_controls()
8774 ov2718->exposure = v4l2_ctrl_new_std(handler, &ov2718_ctrl_ops, in ov2718_initialize_controls()
8781 ov2718->anal_gain = v4l2_ctrl_new_std(handler, &ov2718_ctrl_ops, in ov2718_initialize_controls()
8788 ov2718->test_pattern = in ov2718_initialize_controls()
8795 ov2718->h_flip = v4l2_ctrl_new_std(handler, &ov2718_ctrl_ops, in ov2718_initialize_controls()
8798 ov2718->v_flip = v4l2_ctrl_new_std(handler, &ov2718_ctrl_ops, in ov2718_initialize_controls()
8800 ov2718->flip = 0; in ov2718_initialize_controls()
8804 dev_err(&ov2718->client->dev, in ov2718_initialize_controls()
8809 ov2718->subdev.ctrl_handler = handler; in ov2718_initialize_controls()
8810 ov2718->has_init_exp = false; in ov2718_initialize_controls()
8820 static int ov2718_check_sensor_id(struct ov2718 *ov2718, in ov2718_check_sensor_id() argument
8823 struct device *dev = &ov2718->client->dev; in ov2718_check_sensor_id()
8847 static int ov2718_get_regulators(struct ov2718 *ov2718) in ov2718_get_regulators() argument
8852 ov2718->supplies[i].supply = ov2718_supply_names[i]; in ov2718_get_regulators()
8854 return devm_regulator_bulk_get(&ov2718->client->dev, in ov2718_get_regulators()
8856 ov2718->supplies); in ov2718_get_regulators()
8859 static int ov2718_analyze_dts(struct ov2718 *ov2718) in ov2718_analyze_dts() argument
8861 struct device *dev = &ov2718->client->dev; in ov2718_analyze_dts()
8863 ov2718->xvclk = devm_clk_get(dev, "xvclk"); in ov2718_analyze_dts()
8864 if (IS_ERR(ov2718->xvclk)) { in ov2718_analyze_dts()
8869 ov2718->pinctrl = devm_pinctrl_get(dev); in ov2718_analyze_dts()
8870 if (!IS_ERR(ov2718->pinctrl)) { in ov2718_analyze_dts()
8871 ov2718->pins_default = in ov2718_analyze_dts()
8872 pinctrl_lookup_state(ov2718->pinctrl, in ov2718_analyze_dts()
8874 if (IS_ERR(ov2718->pins_default)) in ov2718_analyze_dts()
8877 ov2718->pins_sleep = in ov2718_analyze_dts()
8878 pinctrl_lookup_state(ov2718->pinctrl, in ov2718_analyze_dts()
8880 if (IS_ERR(ov2718->pins_sleep)) in ov2718_analyze_dts()
8886 ov2718->pd_gpio = devm_gpiod_get(dev, "pd", GPIOD_OUT_LOW); in ov2718_analyze_dts()
8887 if (IS_ERR(ov2718->pd_gpio)) in ov2718_analyze_dts()
8889 PTR_ERR(ov2718->pd_gpio)); in ov2718_analyze_dts()
8891 ov2718->rst_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov2718_analyze_dts()
8892 if (IS_ERR(ov2718->rst_gpio)) in ov2718_analyze_dts()
8894 PTR_ERR(ov2718->rst_gpio)); in ov2718_analyze_dts()
8896 ov2718->pwd_gpio = devm_gpiod_get(dev, "pwd", GPIOD_OUT_HIGH); in ov2718_analyze_dts()
8897 if (IS_ERR(ov2718->pwd_gpio)) in ov2718_analyze_dts()
8899 PTR_ERR(ov2718->pwd_gpio)); in ov2718_analyze_dts()
8901 return ov2718_get_regulators(ov2718); in ov2718_analyze_dts()
8909 struct ov2718 *ov2718; in ov2718_probe() local
8919 ov2718 = devm_kzalloc(dev, sizeof(*ov2718), GFP_KERNEL); in ov2718_probe()
8920 if (!ov2718) in ov2718_probe()
8924 &ov2718->module_index); in ov2718_probe()
8926 &ov2718->module_facing); in ov2718_probe()
8928 &ov2718->module_name); in ov2718_probe()
8930 &ov2718->len_name); in ov2718_probe()
8936 ov2718->client = client; in ov2718_probe()
8938 ret = ov2718_analyze_dts(ov2718); in ov2718_probe()
8944 mutex_init(&ov2718->mutex); in ov2718_probe()
8946 sd = &ov2718->subdev; in ov2718_probe()
8949 ov2718->support_modes = supported_modes; in ov2718_probe()
8950 ov2718->support_modes_num = ARRAY_SIZE(supported_modes); in ov2718_probe()
8951 ov2718->cur_mode = &ov2718->support_modes[0]; in ov2718_probe()
8953 ret = ov2718_initialize_controls(ov2718); in ov2718_probe()
8957 ret = __ov2718_power_on(ov2718); in ov2718_probe()
8961 ret = ov2718_check_sensor_id(ov2718, client); in ov2718_probe()
8970 ov2718->pad.flags = MEDIA_PAD_FL_SOURCE; in ov2718_probe()
8972 ret = media_entity_pads_init(&sd->entity, 1, &ov2718->pad); in ov2718_probe()
8978 if (strcmp(ov2718->module_facing, "back") == 0) in ov2718_probe()
8984 ov2718->module_index, facing, in ov2718_probe()
9003 __ov2718_power_off(ov2718); in ov2718_probe()
9005 v4l2_ctrl_handler_free(&ov2718->ctrl_handler); in ov2718_probe()
9007 mutex_destroy(&ov2718->mutex); in ov2718_probe()
9015 struct ov2718 *ov2718 = to_ov2718(sd); in ov2718_remove() local
9021 v4l2_ctrl_handler_free(&ov2718->ctrl_handler); in ov2718_remove()
9022 mutex_destroy(&ov2718->mutex); in ov2718_remove()
9026 __ov2718_power_off(ov2718); in ov2718_remove()