Lines Matching refs:ar0822

133 struct ar0822 {  struct
176 #define to_ar0822(sd) container_of(sd, struct ar0822, subdev) argument
4099 static int __ar0822_power_on(struct ar0822 *ar0822);
4191 ar0822_find_best_fit(struct ar0822 *ar0822, struct v4l2_subdev_format *fmt) in ar0822_find_best_fit() argument
4199 for (i = 0; i < ar0822->cfg_num; i++) { in ar0822_find_best_fit()
4210 static int ar0822_set_rates(struct ar0822 *ar0822) in ar0822_set_rates() argument
4212 const struct ar0822_mode *mode = ar0822->cur_mode; in ar0822_set_rates()
4217 dev_err(&ar0822->client->dev, in ar0822_set_rates()
4220 __v4l2_ctrl_modify_range(ar0822->hblank, h_blank, in ar0822_set_rates()
4223 __v4l2_ctrl_modify_range(ar0822->vblank, vblank_def, in ar0822_set_rates()
4227 __v4l2_ctrl_s_ctrl_int64(ar0822->pixel_rate, in ar0822_set_rates()
4229 __v4l2_ctrl_s_ctrl(ar0822->link_freq, in ar0822_set_rates()
4239 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_set_fmt() local
4242 mutex_lock(&ar0822->mutex); in ar0822_set_fmt()
4244 mode = ar0822_find_best_fit(ar0822, fmt); in ar0822_set_fmt()
4253 mutex_unlock(&ar0822->mutex); in ar0822_set_fmt()
4257 ar0822->cur_mode = mode; in ar0822_set_fmt()
4258 ar0822_set_rates(ar0822); in ar0822_set_fmt()
4261 mutex_unlock(&ar0822->mutex); in ar0822_set_fmt()
4270 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_get_fmt() local
4271 const struct ar0822_mode *mode = ar0822->cur_mode; in ar0822_get_fmt()
4273 mutex_lock(&ar0822->mutex); in ar0822_get_fmt()
4278 mutex_unlock(&ar0822->mutex); in ar0822_get_fmt()
4291 mutex_unlock(&ar0822->mutex); in ar0822_get_fmt()
4300 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_enum_mbus_code() local
4302 if (code->index >= ar0822->cfg_num) in ar0822_enum_mbus_code()
4313 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_enum_frame_sizes() local
4315 if (fse->index >= ar0822->cfg_num) in ar0822_enum_frame_sizes()
4329 static int ar0822_enable_test_pattern(struct ar0822 *ar0822, u32 pattern) in ar0822_enable_test_pattern() argument
4339 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_g_frame_interval() local
4340 const struct ar0822_mode *mode = ar0822->cur_mode; in ar0822_g_frame_interval()
4342 mutex_lock(&ar0822->mutex); in ar0822_g_frame_interval()
4344 mutex_unlock(&ar0822->mutex); in ar0822_g_frame_interval()
4352 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_g_mbus_config() local
4353 const struct ar0822_mode *mode = ar0822->cur_mode; in ar0822_g_mbus_config()
4371 static void ar0822_get_module_inf(struct ar0822 *ar0822, in ar0822_get_module_inf() argument
4376 strlcpy(inf->base.module, ar0822->module_name, in ar0822_get_module_inf()
4378 strlcpy(inf->base.lens, ar0822->len_name, sizeof(inf->base.lens)); in ar0822_get_module_inf()
4381 static int ar0822_set_hdrae(struct ar0822 *ar0822, in ar0822_set_hdrae() argument
4392 if (!ar0822->has_init_exp && !ar0822->streaming) { in ar0822_set_hdrae()
4393 ar0822->init_hdrae_exp = *ae; in ar0822_set_hdrae()
4394 ar0822->has_init_exp = true; in ar0822_set_hdrae()
4395 dev_err(&ar0822->client->dev, "ar0822 don't stream, record exp for hdr!\n"); in ar0822_set_hdrae()
4407 dev_dbg(&ar0822->client->dev, in ar0822_set_hdrae()
4413 if (ar0822->cur_mode->hdr_mode == HDR_X2) { in ar0822_set_hdrae()
4431 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4436 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4441 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4445 if (ar0822->cur_mode->hdr_mode == HDR_X3) { in ar0822_set_hdrae()
4447 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4451 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4456 ret |= ar0822_write_reg(ar0822->client, in ar0822_set_hdrae()
4461 dev_dbg(&ar0822->client->dev, "ar0822_set_hdrae exp 0x%x\n",l_exp_time); in ar0822_set_hdrae()
4466 static int ar0822_set_conversion_gain(struct ar0822 *ar0822, u32 *cg) in ar0822_set_conversion_gain() argument
4481 struct ar0822 *ar0822 = to_ar0822(sd); in set_conversion_gain_status() local
4487 ar0822_set_conversion_gain(ar0822, &status); in set_conversion_gain_status()
4513 static int ar0822_get_channel_info(struct ar0822 *ar0822, struct rkmodule_channel_info *ch_info) in ar0822_get_channel_info() argument
4517 ch_info->vc = ar0822->cur_mode->vc[ch_info->index]; in ar0822_get_channel_info()
4518 ch_info->width = ar0822->cur_mode->width; in ar0822_get_channel_info()
4519 ch_info->height = ar0822->cur_mode->height; in ar0822_get_channel_info()
4520 ch_info->bus_fmt = ar0822->cur_mode->bus_fmt; in ar0822_get_channel_info()
4526 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_ioctl() local
4535 ar0822_set_hdrae(ar0822, arg); in ar0822_ioctl()
4539 w = ar0822->cur_mode->width; in ar0822_ioctl()
4540 h = ar0822->cur_mode->height; in ar0822_ioctl()
4541 for (i = 0; i < ar0822->cfg_num; i++) { in ar0822_ioctl()
4545 ar0822->cur_mode = &supported_modes[i]; in ar0822_ioctl()
4549 if (i == ar0822->cfg_num) { in ar0822_ioctl()
4550 dev_err(&ar0822->client->dev, in ar0822_ioctl()
4555 w = ar0822->cur_mode->hts_def - ar0822->cur_mode->width; in ar0822_ioctl()
4556 h = ar0822->cur_mode->vts_def - ar0822->cur_mode->height; in ar0822_ioctl()
4557 dev_info(&ar0822->client->dev, in ar0822_ioctl()
4559 __v4l2_ctrl_modify_range(ar0822->hblank, w, w, 1, w); in ar0822_ioctl()
4560 __v4l2_ctrl_modify_range(ar0822->vblank, h, in ar0822_ioctl()
4561 AR0822_VTS_MAX - ar0822->cur_mode->height, in ar0822_ioctl()
4563 dev_info(&ar0822->client->dev, in ar0822_ioctl()
4565 ar0822->cur_mode->hdr_mode); in ar0822_ioctl()
4567 ar0822_set_rates(ar0822); in ar0822_ioctl()
4570 ar0822_get_module_inf(ar0822, (struct rkmodule_inf *)arg); in ar0822_ioctl()
4575 hdr_cfg->hdr_mode = ar0822->cur_mode->hdr_mode; in ar0822_ioctl()
4585 ret = ar0822_write_reg(ar0822->client, AR0822_REG_CTRL_MODE, in ar0822_ioctl()
4588 ret = ar0822_write_reg(ar0822->client, AR0822_REG_CTRL_MODE, in ar0822_ioctl()
4593 ret = ar0822_get_channel_info(ar0822, ch_info); in ar0822_ioctl()
4712 static int __ar0822_start_stream(struct ar0822 *ar0822) in __ar0822_start_stream() argument
4716 if (!ar0822->is_thunderboot) { in __ar0822_start_stream()
4717 ret = ar0822_write_reg(ar0822->client, in __ar0822_start_stream()
4722 ret = ar0822_write_array(ar0822->client, ar0822->cur_mode->reg_list); in __ar0822_start_stream()
4728 ret = __v4l2_ctrl_handler_setup(&ar0822->ctrl_handler); in __ar0822_start_stream()
4731 if (ar0822->has_init_exp && ar0822->cur_mode->hdr_mode != NO_HDR) { in __ar0822_start_stream()
4732 ret = ar0822_ioctl(&ar0822->subdev, PREISP_CMD_SET_HDRAE_EXP, &ar0822->init_hdrae_exp); in __ar0822_start_stream()
4734 dev_err(&ar0822->client->dev, in __ar0822_start_stream()
4738 dev_err(&ar0822->client->dev, in __ar0822_start_stream()
4741 return ar0822_write_reg(ar0822->client, AR0822_REG_CTRL_MODE, in __ar0822_start_stream()
4745 static int __ar0822_stop_stream(struct ar0822 *ar0822) in __ar0822_stop_stream() argument
4747 ar0822->has_init_exp = false; in __ar0822_stop_stream()
4748 if (ar0822->is_thunderboot) in __ar0822_stop_stream()
4749 ar0822->is_first_streamoff = true; in __ar0822_stop_stream()
4750 return ar0822_write_reg(ar0822->client, AR0822_REG_CTRL_MODE, in __ar0822_stop_stream()
4756 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_s_stream() local
4757 struct i2c_client *client = ar0822->client; in ar0822_s_stream()
4760 mutex_lock(&ar0822->mutex); in ar0822_s_stream()
4762 if (on == ar0822->streaming) in ar0822_s_stream()
4765 if (ar0822->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in ar0822_s_stream()
4766 ar0822->is_thunderboot = false; in ar0822_s_stream()
4767 __ar0822_power_on(ar0822); in ar0822_s_stream()
4775 ret = __ar0822_start_stream(ar0822); in ar0822_s_stream()
4782 __ar0822_stop_stream(ar0822); in ar0822_s_stream()
4785 ar0822->streaming = on; in ar0822_s_stream()
4789 mutex_unlock(&ar0822->mutex); in ar0822_s_stream()
4796 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_s_power() local
4797 struct i2c_client *client = ar0822->client; in ar0822_s_power()
4800 mutex_lock(&ar0822->mutex); in ar0822_s_power()
4802 if (ar0822->power_on == !!on) in ar0822_s_power()
4812 if (!ar0822->is_thunderboot) { in ar0822_s_power()
4813 ret |= ar0822_write_reg(ar0822->client, in ar0822_s_power()
4820 ar0822->power_on = true; in ar0822_s_power()
4823 ar0822->power_on = false; in ar0822_s_power()
4827 mutex_unlock(&ar0822->mutex); in ar0822_s_power()
4838 static int __ar0822_power_on(struct ar0822 *ar0822) /* sensor power on config, need check power, … in __ar0822_power_on() argument
4842 struct device *dev = &ar0822->client->dev; in __ar0822_power_on()
4844 if (ar0822->is_thunderboot) in __ar0822_power_on()
4847 if (!IS_ERR_OR_NULL(ar0822->pins_default)) { in __ar0822_power_on()
4848 ret = pinctrl_select_state(ar0822->pinctrl, in __ar0822_power_on()
4849 ar0822->pins_default); in __ar0822_power_on()
4853 ret = clk_set_rate(ar0822->xvclk, AR0822_XVCLK_FREQ); in __ar0822_power_on()
4856 if (clk_get_rate(ar0822->xvclk) != AR0822_XVCLK_FREQ) in __ar0822_power_on()
4858 ret = clk_prepare_enable(ar0822->xvclk); in __ar0822_power_on()
4863 if (!IS_ERR(ar0822->reset_gpio)) in __ar0822_power_on()
4864 gpiod_direction_output(ar0822->reset_gpio, 1); in __ar0822_power_on()
4866 ret = regulator_bulk_enable(AR0822_NUM_SUPPLIES, ar0822->supplies); in __ar0822_power_on()
4872 if (!IS_ERR(ar0822->reset_gpio)) in __ar0822_power_on()
4873 gpiod_direction_output(ar0822->reset_gpio, 0); in __ar0822_power_on()
4876 if (!IS_ERR(ar0822->pwdn_gpio)) in __ar0822_power_on()
4877 gpiod_direction_output(ar0822->pwdn_gpio, 1); in __ar0822_power_on()
4882 if (!IS_ERR(ar0822->reset_gpio)) in __ar0822_power_on()
4894 clk_disable_unprepare(ar0822->xvclk); in __ar0822_power_on()
4899 static void __ar0822_power_off(struct ar0822 *ar0822) in __ar0822_power_off() argument
4902 struct device *dev = &ar0822->client->dev; in __ar0822_power_off()
4904 if (ar0822->is_thunderboot) { in __ar0822_power_off()
4905 if (ar0822->is_first_streamoff) { in __ar0822_power_off()
4906 ar0822->is_thunderboot = false; in __ar0822_power_off()
4907 ar0822->is_first_streamoff = false; in __ar0822_power_off()
4913 if (!IS_ERR(ar0822->pwdn_gpio)) in __ar0822_power_off()
4914 gpiod_direction_output(ar0822->pwdn_gpio, 0); in __ar0822_power_off()
4916 clk_disable_unprepare(ar0822->xvclk); in __ar0822_power_off()
4918 if (!IS_ERR(ar0822->reset_gpio)) in __ar0822_power_off()
4919 gpiod_direction_output(ar0822->reset_gpio, 0); in __ar0822_power_off()
4920 if (!IS_ERR_OR_NULL(ar0822->pins_sleep)) { in __ar0822_power_off()
4921 ret = pinctrl_select_state(ar0822->pinctrl, in __ar0822_power_off()
4922 ar0822->pins_sleep); in __ar0822_power_off()
4927 if (ar0822->is_thunderboot_ng) { in __ar0822_power_off()
4928 ar0822->is_thunderboot_ng = false; in __ar0822_power_off()
4929 regulator_bulk_disable(AR0822_NUM_SUPPLIES, ar0822->supplies); in __ar0822_power_off()
4937 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_runtime_resume() local
4939 return __ar0822_power_on(ar0822); in ar0822_runtime_resume()
4946 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_runtime_suspend() local
4948 __ar0822_power_off(ar0822); in ar0822_runtime_suspend()
4956 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_open() local
4960 mutex_lock(&ar0822->mutex); in ar0822_open()
4967 mutex_unlock(&ar0822->mutex); in ar0822_open()
4978 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_enum_frame_interval() local
4980 if (fie->index >= ar0822->cfg_num) in ar0822_enum_frame_interval()
5032 struct ar0822 *ar0822 = container_of(ctrl->handler, in ar0822_set_ctrl() local
5033 struct ar0822, ctrl_handler); in ar0822_set_ctrl()
5034 struct i2c_client *client = ar0822->client; in ar0822_set_ctrl()
5044 max = ar0822->cur_mode->height + ctrl->val - 4; in ar0822_set_ctrl()
5045 __v4l2_ctrl_modify_range(ar0822->exposure, in ar0822_set_ctrl()
5046 ar0822->exposure->minimum, max, in ar0822_set_ctrl()
5047 ar0822->exposure->step, in ar0822_set_ctrl()
5048 ar0822->exposure->default_value); in ar0822_set_ctrl()
5057 if (ar0822->cur_mode->hdr_mode != NO_HDR) in ar0822_set_ctrl()
5059 ret = ar0822_write_reg(ar0822->client, in ar0822_set_ctrl()
5068 if (ar0822->cur_mode->hdr_mode != NO_HDR) in ar0822_set_ctrl()
5082 ret = ar0822_write_reg(ar0822->client, in ar0822_set_ctrl()
5098 ret = ar0822_enable_test_pattern(ar0822, ctrl->val); in ar0822_set_ctrl()
5101 ret = ar0822_read_reg(ar0822->client, AR0822_FLIP_REG, in ar0822_set_ctrl()
5108 ret = ar0822_write_reg(ar0822->client, AR0822_FLIP_REG, in ar0822_set_ctrl()
5112 ar0822->flip = val; in ar0822_set_ctrl()
5115 ret = ar0822_read_reg(ar0822->client, AR0822_FLIP_REG, in ar0822_set_ctrl()
5122 ret = ar0822_write_reg(ar0822->client, AR0822_FLIP_REG, in ar0822_set_ctrl()
5126 ar0822->flip = val; in ar0822_set_ctrl()
5145 static int ar0822_initialize_controls(struct ar0822 *ar0822) in ar0822_initialize_controls() argument
5155 handler = &ar0822->ctrl_handler; in ar0822_initialize_controls()
5156 mode = ar0822->cur_mode; in ar0822_initialize_controls()
5160 handler->lock = &ar0822->mutex; in ar0822_initialize_controls()
5161 ar0822->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in ar0822_initialize_controls()
5168 ar0822->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in ar0822_initialize_controls()
5172 __v4l2_ctrl_s_ctrl(ar0822->link_freq, in ar0822_initialize_controls()
5176 ar0822->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ar0822_initialize_controls()
5178 if (ar0822->hblank) in ar0822_initialize_controls()
5179 ar0822->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ar0822_initialize_controls()
5182 ar0822->vblank = v4l2_ctrl_new_std(handler, &ar0822_ctrl_ops, in ar0822_initialize_controls()
5188 ar0822->exposure = v4l2_ctrl_new_std(handler, &ar0822_ctrl_ops, in ar0822_initialize_controls()
5193 ar0822->anal_gain = v4l2_ctrl_new_std(handler, &ar0822_ctrl_ops, in ar0822_initialize_controls()
5198 ar0822->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ar0822_initialize_controls()
5203 ar0822->h_flip = v4l2_ctrl_new_std(handler, &ar0822_ctrl_ops, in ar0822_initialize_controls()
5206 ar0822->v_flip = v4l2_ctrl_new_std(handler, &ar0822_ctrl_ops, in ar0822_initialize_controls()
5208 ar0822->flip = 0; in ar0822_initialize_controls()
5211 dev_err(&ar0822->client->dev, in ar0822_initialize_controls()
5216 ar0822->subdev.ctrl_handler = handler; in ar0822_initialize_controls()
5217 ar0822->has_init_exp = false; in ar0822_initialize_controls()
5218 ar0822->long_hcg = false; in ar0822_initialize_controls()
5219 ar0822->middle_hcg = false; in ar0822_initialize_controls()
5220 ar0822->short_hcg = false; in ar0822_initialize_controls()
5230 static int ar0822_check_sensor_id(struct ar0822 *ar0822, in ar0822_check_sensor_id() argument
5233 struct device *dev = &ar0822->client->dev; in ar0822_check_sensor_id()
5237 if (ar0822->is_thunderboot) { in ar0822_check_sensor_id()
5254 static int ar0822_configure_regulators(struct ar0822 *ar0822) in ar0822_configure_regulators() argument
5259 ar0822->supplies[i].supply = ar0822_supply_names[i]; in ar0822_configure_regulators()
5261 return devm_regulator_bulk_get(&ar0822->client->dev, in ar0822_configure_regulators()
5263 ar0822->supplies); in ar0822_configure_regulators()
5271 struct ar0822 *ar0822; in ar0822_probe() local
5282 ar0822 = devm_kzalloc(dev, sizeof(*ar0822), GFP_KERNEL); in ar0822_probe()
5283 if (!ar0822) in ar0822_probe()
5287 &ar0822->module_index); in ar0822_probe()
5289 &ar0822->module_facing); in ar0822_probe()
5291 &ar0822->module_name); in ar0822_probe()
5293 &ar0822->len_name); in ar0822_probe()
5299 ar0822->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in ar0822_probe()
5306 ar0822->cfg_num = ARRAY_SIZE(supported_modes); in ar0822_probe()
5307 if(ar0822->cfg_num == 0){ in ar0822_probe()
5311 ar0822->cur_mode = &supported_modes[0];//initialize. in ar0822_probe()
5312 for (i = 0; i < ar0822->cfg_num; i++) { in ar0822_probe()
5314 ar0822->cur_mode = &supported_modes[i]; in ar0822_probe()
5318 ar0822->client = client; in ar0822_probe()
5320 ar0822->xvclk = devm_clk_get(dev, "xvclk"); in ar0822_probe()
5321 if (IS_ERR(ar0822->xvclk)) { in ar0822_probe()
5326 ar0822->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in ar0822_probe()
5327 if (IS_ERR(ar0822->reset_gpio)) in ar0822_probe()
5330 ar0822->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in ar0822_probe()
5331 if (IS_ERR(ar0822->pwdn_gpio)) in ar0822_probe()
5334 ar0822->pinctrl = devm_pinctrl_get(dev); in ar0822_probe()
5335 if (!IS_ERR(ar0822->pinctrl)) { in ar0822_probe()
5336 ar0822->pins_default = in ar0822_probe()
5337 pinctrl_lookup_state(ar0822->pinctrl, in ar0822_probe()
5339 if (IS_ERR(ar0822->pins_default)) in ar0822_probe()
5342 ar0822->pins_sleep = in ar0822_probe()
5343 pinctrl_lookup_state(ar0822->pinctrl, in ar0822_probe()
5345 if (IS_ERR(ar0822->pins_sleep)) in ar0822_probe()
5351 ret = ar0822_configure_regulators(ar0822); in ar0822_probe()
5357 mutex_init(&ar0822->mutex); in ar0822_probe()
5359 sd = &ar0822->subdev; in ar0822_probe()
5361 ret = ar0822_initialize_controls(ar0822); in ar0822_probe()
5365 ret = __ar0822_power_on(ar0822); in ar0822_probe()
5369 ret = ar0822_check_sensor_id(ar0822, client); in ar0822_probe()
5378 ar0822->pad.flags = MEDIA_PAD_FL_SOURCE; in ar0822_probe()
5380 ret = media_entity_pads_init(&sd->entity, 1, &ar0822->pad); in ar0822_probe()
5386 if (strcmp(ar0822->module_facing, "back") == 0) in ar0822_probe()
5392 ar0822->module_index, facing, in ar0822_probe()
5413 __ar0822_power_off(ar0822); in ar0822_probe()
5415 v4l2_ctrl_handler_free(&ar0822->ctrl_handler); in ar0822_probe()
5417 mutex_destroy(&ar0822->mutex); in ar0822_probe()
5425 struct ar0822 *ar0822 = to_ar0822(sd); in ar0822_remove() local
5431 v4l2_ctrl_handler_free(&ar0822->ctrl_handler); in ar0822_remove()
5432 mutex_destroy(&ar0822->mutex); in ar0822_remove()
5436 __ar0822_power_off(ar0822); in ar0822_remove()