Lines Matching refs:ov2775

132 struct ov2775 {  struct
170 #define to_ov2775(sd) container_of(sd, struct ov2775, subdev) argument
3967 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_find_best_fit() local
3974 for (i = 0; i < ov2775->support_modes_num; i++) { in ov2775_find_best_fit()
3975 dist = ov2775_get_reso_dist(&ov2775->support_modes[i], in ov2775_find_best_fit()
3983 return &ov2775->support_modes[cur_best_fit]; in ov2775_find_best_fit()
3990 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_set_fmt() local
3994 mutex_lock(&ov2775->mutex); in ov2775_set_fmt()
4005 mutex_unlock(&ov2775->mutex); in ov2775_set_fmt()
4009 ov2775->cur_mode = mode; in ov2775_set_fmt()
4011 __v4l2_ctrl_modify_range(ov2775->hblank, h_blank, in ov2775_set_fmt()
4014 __v4l2_ctrl_modify_range(ov2775->vblank, vblank_def, in ov2775_set_fmt()
4019 mutex_unlock(&ov2775->mutex); in ov2775_set_fmt()
4028 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_get_fmt() local
4029 const struct ov2775_mode *mode = ov2775->cur_mode; in ov2775_get_fmt()
4031 mutex_lock(&ov2775->mutex); in ov2775_get_fmt()
4036 mutex_unlock(&ov2775->mutex); in ov2775_get_fmt()
4049 mutex_unlock(&ov2775->mutex); in ov2775_get_fmt()
4058 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_enum_mbus_code() local
4062 code->code = ov2775->support_modes[0].bus_fmt; in ov2775_enum_mbus_code()
4071 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_enum_frame_sizes() local
4073 if (fse->index >= ov2775->support_modes_num) in ov2775_enum_frame_sizes()
4076 if (fse->code != ov2775->support_modes[0].bus_fmt) in ov2775_enum_frame_sizes()
4079 fse->min_width = ov2775->support_modes[fse->index].width; in ov2775_enum_frame_sizes()
4080 fse->max_width = ov2775->support_modes[fse->index].width; in ov2775_enum_frame_sizes()
4081 fse->max_height = ov2775->support_modes[fse->index].height; in ov2775_enum_frame_sizes()
4082 fse->min_height = ov2775->support_modes[fse->index].height; in ov2775_enum_frame_sizes()
4087 static int ov2775_enable_test_pattern(struct ov2775 *ov2775, u32 pattern) in ov2775_enable_test_pattern() argument
4096 return ov2775_write_reg(ov2775->client, OV2775_REG_TEST_PATTERN, in ov2775_enable_test_pattern()
4103 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_g_frame_interval() local
4104 const struct ov2775_mode *mode = ov2775->cur_mode; in ov2775_g_frame_interval()
4184 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_g_mbus_config() local
4185 const struct ov2775_mode *mode = ov2775->cur_mode; in ov2775_g_mbus_config()
4204 static void ov2775_get_module_inf(struct ov2775 *ov2775, in ov2775_get_module_inf() argument
4209 strlcpy(inf->base.module, ov2775->module_name, in ov2775_get_module_inf()
4211 strlcpy(inf->base.lens, ov2775->len_name, sizeof(inf->base.lens)); in ov2775_get_module_inf()
4216 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_ioctl() local
4217 struct i2c_client *client = ov2775->client; in ov2775_ioctl()
4227 if (!ov2775->has_init_exp && !ov2775->streaming) { in ov2775_ioctl()
4228 ov2775->init_hdrae_exp = *hdrae_exp; in ov2775_ioctl()
4229 ov2775->has_init_exp = true; in ov2775_ioctl()
4249 ret = ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4255 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4260 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4266 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4272 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4278 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4284 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4290 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4296 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4303 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4309 ret |= ov2775_write_reg(ov2775->client, in ov2775_ioctl()
4323 hdr_cfg->hdr_mode = ov2775->cur_mode->hdr_mode; in ov2775_ioctl()
4326 ov2775_get_module_inf(ov2775, (struct rkmodule_inf *)arg); in ov2775_ioctl()
4330 w = ov2775->cur_mode->width; in ov2775_ioctl()
4331 h = ov2775->cur_mode->height; in ov2775_ioctl()
4332 for (i = 0; i < ov2775->support_modes_num; i++) { in ov2775_ioctl()
4336 ov2775->cur_mode = &supported_modes[i]; in ov2775_ioctl()
4340 if (i == ov2775->support_modes_num) { in ov2775_ioctl()
4346 w = ov2775->cur_mode->hts_def - ov2775->cur_mode->width; in ov2775_ioctl()
4347 h = ov2775->cur_mode->vts_def - ov2775->cur_mode->height; in ov2775_ioctl()
4348 __v4l2_ctrl_modify_range(ov2775->hblank, w, w, 1, w); in ov2775_ioctl()
4349 __v4l2_ctrl_modify_range(ov2775->vblank, h, in ov2775_ioctl()
4350 OV2775_VTS_MAX - ov2775->cur_mode->height, in ov2775_ioctl()
4355 ov2775->cur_mode->hdr_mode, i); in ov2775_ioctl()
4363 ret = ov2775_write_reg(ov2775->client, OV2775_REG_CTRL_MODE, in ov2775_ioctl()
4366 ret = ov2775_write_reg(ov2775->client, OV2775_REG_CTRL_MODE, in ov2775_ioctl()
4463 static int ov2775_set_flip(struct ov2775 *ov2775, u32 flip) in ov2775_set_flip() argument
4468 ret = ov2775_read_reg(ov2775->client, OV2775_READ_MODE, in ov2775_set_flip()
4474 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4479 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4482 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4486 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4489 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4494 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4498 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4504 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_flip()
4512 static int __ov2775_start_stream(struct ov2775 *ov2775) in __ov2775_start_stream() argument
4516 ret = ov2775_write_array(ov2775->client, in __ov2775_start_stream()
4517 ov2775->cur_mode->reg_list); in __ov2775_start_stream()
4521 ret = __v4l2_ctrl_handler_setup(&ov2775->ctrl_handler); in __ov2775_start_stream()
4523 if (ov2775->has_init_exp && ov2775->cur_mode->hdr_mode != NO_HDR) { in __ov2775_start_stream()
4524 ret = ov2775_ioctl(&ov2775->subdev, PREISP_CMD_SET_HDRAE_EXP, in __ov2775_start_stream()
4525 &ov2775->init_hdrae_exp); in __ov2775_start_stream()
4527 dev_err(&ov2775->client->dev, in __ov2775_start_stream()
4533 return ov2775_write_reg(ov2775->client, OV2775_REG_CTRL_MODE, in __ov2775_start_stream()
4537 static int __ov2775_stop_stream(struct ov2775 *ov2775) in __ov2775_stop_stream() argument
4539 ov2775->has_init_exp = false; in __ov2775_stop_stream()
4540 return ov2775_write_reg(ov2775->client, OV2775_REG_CTRL_MODE, in __ov2775_stop_stream()
4546 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_s_stream() local
4547 struct i2c_client *client = ov2775->client; in ov2775_s_stream()
4550 mutex_lock(&ov2775->mutex); in ov2775_s_stream()
4552 if (on == ov2775->streaming) in ov2775_s_stream()
4562 ret = __ov2775_start_stream(ov2775); in ov2775_s_stream()
4569 __ov2775_stop_stream(ov2775); in ov2775_s_stream()
4573 ov2775->streaming = on; in ov2775_s_stream()
4576 mutex_unlock(&ov2775->mutex); in ov2775_s_stream()
4583 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_s_power() local
4584 struct i2c_client *client = ov2775->client; in ov2775_s_power()
4587 mutex_lock(&ov2775->mutex); in ov2775_s_power()
4590 if (ov2775->power_on == !!on) in ov2775_s_power()
4600 ov2775->power_on = true; in ov2775_s_power()
4603 ov2775->power_on = false; in ov2775_s_power()
4607 mutex_unlock(&ov2775->mutex); in ov2775_s_power()
4618 static int __ov2775_power_on(struct ov2775 *ov2775) in __ov2775_power_on() argument
4622 struct device *dev = &ov2775->client->dev; in __ov2775_power_on()
4624 if (!IS_ERR_OR_NULL(ov2775->pins_default)) { in __ov2775_power_on()
4625 ret = pinctrl_select_state(ov2775->pinctrl, in __ov2775_power_on()
4626 ov2775->pins_default); in __ov2775_power_on()
4630 ret = clk_set_rate(ov2775->xvclk, OV2775_XVCLK_FREQ); in __ov2775_power_on()
4633 if (clk_get_rate(ov2775->xvclk) != OV2775_XVCLK_FREQ) in __ov2775_power_on()
4635 ret = clk_prepare_enable(ov2775->xvclk); in __ov2775_power_on()
4640 ret = regulator_bulk_enable(OV2775_NUM_SUPPLIES, ov2775->supplies); in __ov2775_power_on()
4646 if (!IS_ERR(ov2775->pwd_gpio)) { in __ov2775_power_on()
4647 gpiod_direction_output(ov2775->pwd_gpio, 0); in __ov2775_power_on()
4651 if (!IS_ERR(ov2775->pd_gpio)) { in __ov2775_power_on()
4652 gpiod_direction_output(ov2775->pd_gpio, 1); in __ov2775_power_on()
4656 if (!IS_ERR(ov2775->rst_gpio)) { in __ov2775_power_on()
4657 gpiod_direction_output(ov2775->rst_gpio, 1); in __ov2775_power_on()
4659 gpiod_direction_output(ov2775->rst_gpio, 0); in __ov2775_power_on()
4668 clk_disable_unprepare(ov2775->xvclk); in __ov2775_power_on()
4673 static void __ov2775_power_off(struct ov2775 *ov2775) in __ov2775_power_off() argument
4676 struct device *dev = &ov2775->client->dev; in __ov2775_power_off()
4678 if (!IS_ERR(ov2775->pd_gpio)) in __ov2775_power_off()
4679 gpiod_direction_output(ov2775->pd_gpio, 0); in __ov2775_power_off()
4681 clk_disable_unprepare(ov2775->xvclk); in __ov2775_power_off()
4683 if (!IS_ERR(ov2775->rst_gpio)) in __ov2775_power_off()
4684 gpiod_direction_output(ov2775->rst_gpio, 1); in __ov2775_power_off()
4686 if (!IS_ERR(ov2775->pwd_gpio)) in __ov2775_power_off()
4687 gpiod_direction_output(ov2775->pwd_gpio, 1); in __ov2775_power_off()
4689 if (!IS_ERR_OR_NULL(ov2775->pins_sleep)) { in __ov2775_power_off()
4690 ret = pinctrl_select_state(ov2775->pinctrl, in __ov2775_power_off()
4691 ov2775->pins_sleep); in __ov2775_power_off()
4696 regulator_bulk_disable(OV2775_NUM_SUPPLIES, ov2775->supplies); in __ov2775_power_off()
4703 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_runtime_resume() local
4705 return __ov2775_power_on(ov2775); in ov2775_runtime_resume()
4712 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_runtime_suspend() local
4714 __ov2775_power_off(ov2775); in ov2775_runtime_suspend()
4722 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_open() local
4725 const struct ov2775_mode *def_mode = &ov2775->support_modes[0]; in ov2775_open()
4727 mutex_lock(&ov2775->mutex); in ov2775_open()
4734 mutex_unlock(&ov2775->mutex); in ov2775_open()
4745 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_enum_frame_interval() local
4747 if (fie->index >= ov2775->support_modes_num) in ov2775_enum_frame_interval()
4751 fie->width = ov2775->support_modes[fie->index].width; in ov2775_enum_frame_interval()
4752 fie->height = ov2775->support_modes[fie->index].height; in ov2775_enum_frame_interval()
4753 fie->interval = ov2775->support_modes[fie->index].max_fps; in ov2775_enum_frame_interval()
4839 struct ov2775 *ov2775 = container_of(ctrl->handler, in ov2775_set_ctrl() local
4840 struct ov2775, ctrl_handler); in ov2775_set_ctrl()
4841 struct i2c_client *client = ov2775->client; in ov2775_set_ctrl()
4850 if (ov2775->cur_mode->hdr_mode == NO_HDR) { in ov2775_set_ctrl()
4851 max = ov2775->cur_mode->height + ctrl->val - 4; in ov2775_set_ctrl()
4852 __v4l2_ctrl_modify_range(ov2775->exposure, in ov2775_set_ctrl()
4853 ov2775->exposure->minimum, max, in ov2775_set_ctrl()
4854 ov2775->exposure->step, in ov2775_set_ctrl()
4855 ov2775->exposure->default_value); in ov2775_set_ctrl()
4865 if (ov2775->cur_mode->hdr_mode != NO_HDR) in ov2775_set_ctrl()
4867 ret = ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4872 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4880 if (ov2775->cur_mode->hdr_mode != NO_HDR) in ov2775_set_ctrl()
4883 ret = ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4888 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4893 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4902 val = ctrl->val + ov2775->cur_mode->height; in ov2775_set_ctrl()
4903 ret = ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4908 ret |= ov2775_write_reg(ov2775->client, in ov2775_set_ctrl()
4916 ret = ov2775_enable_test_pattern(ov2775, ctrl->val); in ov2775_set_ctrl()
4920 ov2775->flip |= OV2775_MIRROR; in ov2775_set_ctrl()
4922 ov2775->flip &= ~OV2775_MIRROR; in ov2775_set_ctrl()
4923 ov2775_set_flip(ov2775, ov2775->flip); in ov2775_set_ctrl()
4927 ov2775->flip |= OV2775_FLIP; in ov2775_set_ctrl()
4929 ov2775->flip &= ~OV2775_FLIP; in ov2775_set_ctrl()
4930 ov2775_set_flip(ov2775, ov2775->flip); in ov2775_set_ctrl()
4948 static int ov2775_initialize_controls(struct ov2775 *ov2775) in ov2775_initialize_controls() argument
4958 handler = &ov2775->ctrl_handler; in ov2775_initialize_controls()
4959 mode = ov2775->cur_mode; in ov2775_initialize_controls()
4963 handler->lock = &ov2775->mutex; in ov2775_initialize_controls()
4971 ov2775->pixel_rate = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_PIXEL_RATE, in ov2775_initialize_controls()
4975 ov2775->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov2775_initialize_controls()
4977 if (ov2775->hblank) in ov2775_initialize_controls()
4978 ov2775->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov2775_initialize_controls()
4981 ov2775->vblank = v4l2_ctrl_new_std(handler, &ov2775_ctrl_ops, in ov2775_initialize_controls()
4987 ov2775->exposure = v4l2_ctrl_new_std(handler, &ov2775_ctrl_ops, in ov2775_initialize_controls()
4994 ov2775->anal_gain = v4l2_ctrl_new_std(handler, &ov2775_ctrl_ops, in ov2775_initialize_controls()
5001 ov2775->test_pattern = in ov2775_initialize_controls()
5008 ov2775->h_flip = v4l2_ctrl_new_std(handler, &ov2775_ctrl_ops, in ov2775_initialize_controls()
5011 ov2775->v_flip = v4l2_ctrl_new_std(handler, &ov2775_ctrl_ops, in ov2775_initialize_controls()
5013 ov2775->flip = 0; in ov2775_initialize_controls()
5017 dev_err(&ov2775->client->dev, in ov2775_initialize_controls()
5022 ov2775->subdev.ctrl_handler = handler; in ov2775_initialize_controls()
5023 ov2775->has_init_exp = false; in ov2775_initialize_controls()
5033 static int ov2775_check_sensor_id(struct ov2775 *ov2775, in ov2775_check_sensor_id() argument
5036 struct device *dev = &ov2775->client->dev; in ov2775_check_sensor_id()
5060 static int ov2775_get_regulators(struct ov2775 *ov2775) in ov2775_get_regulators() argument
5065 ov2775->supplies[i].supply = ov2775_supply_names[i]; in ov2775_get_regulators()
5067 return devm_regulator_bulk_get(&ov2775->client->dev, in ov2775_get_regulators()
5069 ov2775->supplies); in ov2775_get_regulators()
5072 static int ov2775_analyze_dts(struct ov2775 *ov2775) in ov2775_analyze_dts() argument
5074 struct device *dev = &ov2775->client->dev; in ov2775_analyze_dts()
5076 ov2775->xvclk = devm_clk_get(dev, "xvclk"); in ov2775_analyze_dts()
5077 if (IS_ERR(ov2775->xvclk)) { in ov2775_analyze_dts()
5082 ov2775->pinctrl = devm_pinctrl_get(dev); in ov2775_analyze_dts()
5083 if (!IS_ERR(ov2775->pinctrl)) { in ov2775_analyze_dts()
5084 ov2775->pins_default = in ov2775_analyze_dts()
5085 pinctrl_lookup_state(ov2775->pinctrl, in ov2775_analyze_dts()
5087 if (IS_ERR(ov2775->pins_default)) in ov2775_analyze_dts()
5090 ov2775->pins_sleep = in ov2775_analyze_dts()
5091 pinctrl_lookup_state(ov2775->pinctrl, in ov2775_analyze_dts()
5093 if (IS_ERR(ov2775->pins_sleep)) in ov2775_analyze_dts()
5099 ov2775->pd_gpio = devm_gpiod_get(dev, "pd", GPIOD_OUT_LOW); in ov2775_analyze_dts()
5100 if (IS_ERR(ov2775->pd_gpio)) in ov2775_analyze_dts()
5102 PTR_ERR(ov2775->pd_gpio)); in ov2775_analyze_dts()
5104 ov2775->rst_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov2775_analyze_dts()
5105 if (IS_ERR(ov2775->rst_gpio)) in ov2775_analyze_dts()
5107 PTR_ERR(ov2775->rst_gpio)); in ov2775_analyze_dts()
5109 ov2775->pwd_gpio = devm_gpiod_get(dev, "pwd", GPIOD_OUT_HIGH); in ov2775_analyze_dts()
5110 if (IS_ERR(ov2775->pwd_gpio)) in ov2775_analyze_dts()
5112 PTR_ERR(ov2775->pwd_gpio)); in ov2775_analyze_dts()
5114 return ov2775_get_regulators(ov2775); in ov2775_analyze_dts()
5122 struct ov2775 *ov2775; in ov2775_probe() local
5132 ov2775 = devm_kzalloc(dev, sizeof(*ov2775), GFP_KERNEL); in ov2775_probe()
5133 if (!ov2775) in ov2775_probe()
5137 &ov2775->module_index); in ov2775_probe()
5139 &ov2775->module_facing); in ov2775_probe()
5141 &ov2775->module_name); in ov2775_probe()
5143 &ov2775->len_name); in ov2775_probe()
5149 ov2775->client = client; in ov2775_probe()
5151 ret = ov2775_analyze_dts(ov2775); in ov2775_probe()
5157 mutex_init(&ov2775->mutex); in ov2775_probe()
5159 sd = &ov2775->subdev; in ov2775_probe()
5162 ov2775->support_modes = supported_modes; in ov2775_probe()
5163 ov2775->support_modes_num = ARRAY_SIZE(supported_modes); in ov2775_probe()
5164 ov2775->cur_mode = &ov2775->support_modes[0]; in ov2775_probe()
5166 ret = ov2775_initialize_controls(ov2775); in ov2775_probe()
5170 ret = __ov2775_power_on(ov2775); in ov2775_probe()
5174 ret = ov2775_check_sensor_id(ov2775, client); in ov2775_probe()
5183 ov2775->pad.flags = MEDIA_PAD_FL_SOURCE; in ov2775_probe()
5185 ret = media_entity_pads_init(&sd->entity, 1, &ov2775->pad); in ov2775_probe()
5191 if (strcmp(ov2775->module_facing, "back") == 0) in ov2775_probe()
5197 ov2775->module_index, facing, in ov2775_probe()
5216 __ov2775_power_off(ov2775); in ov2775_probe()
5218 v4l2_ctrl_handler_free(&ov2775->ctrl_handler); in ov2775_probe()
5220 mutex_destroy(&ov2775->mutex); in ov2775_probe()
5228 struct ov2775 *ov2775 = to_ov2775(sd); in ov2775_remove() local
5234 v4l2_ctrl_handler_free(&ov2775->ctrl_handler); in ov2775_remove()
5235 mutex_destroy(&ov2775->mutex); in ov2775_remove()
5239 __ov2775_power_off(ov2775); in ov2775_remove()