Lines Matching refs:ov9281

141 struct ov9281 {  struct
175 #define to_ov9281(sd) container_of(sd, struct ov9281, subdev) argument
562 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_set_fmt() local
566 mutex_lock(&ov9281->mutex); in ov9281_set_fmt()
577 mutex_unlock(&ov9281->mutex); in ov9281_set_fmt()
581 ov9281->cur_mode = mode; in ov9281_set_fmt()
583 __v4l2_ctrl_modify_range(ov9281->hblank, h_blank, in ov9281_set_fmt()
586 __v4l2_ctrl_modify_range(ov9281->vblank, vblank_def, in ov9281_set_fmt()
591 mutex_unlock(&ov9281->mutex); in ov9281_set_fmt()
600 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_get_fmt() local
601 const struct ov9281_mode *mode = ov9281->cur_mode; in ov9281_get_fmt()
603 mutex_lock(&ov9281->mutex); in ov9281_get_fmt()
608 mutex_unlock(&ov9281->mutex); in ov9281_get_fmt()
617 mutex_unlock(&ov9281->mutex); in ov9281_get_fmt()
651 static int ov9281_enable_test_pattern(struct ov9281 *ov9281, u32 pattern) in ov9281_enable_test_pattern() argument
660 return ov9281_write_reg(ov9281->client, OV9281_REG_TEST_PATTERN, in ov9281_enable_test_pattern()
667 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_g_frame_interval() local
668 const struct ov9281_mode *mode = ov9281->cur_mode; in ov9281_g_frame_interval()
675 static void ov9281_get_module_inf(struct ov9281 *ov9281, in ov9281_get_module_inf() argument
680 strlcpy(inf->base.module, ov9281->module_name, in ov9281_get_module_inf()
682 strlcpy(inf->base.lens, ov9281->len_name, sizeof(inf->base.lens)); in ov9281_get_module_inf()
687 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_ioctl() local
693 ov9281_get_module_inf(ov9281, (struct rkmodule_inf *)arg); in ov9281_ioctl()
700 ret = ov9281_write_reg(ov9281->client, OV9281_REG_CTRL_MODE, in ov9281_ioctl()
703 ret = ov9281_write_reg(ov9281->client, OV9281_REG_CTRL_MODE, in ov9281_ioctl()
763 static int __ov9281_start_stream(struct ov9281 *ov9281) in __ov9281_start_stream() argument
767 if (!ov9281->is_thunderboot) { in __ov9281_start_stream()
768 ret = ov9281_write_array(ov9281->client, ov9281->cur_mode->reg_list); in __ov9281_start_stream()
773 mutex_unlock(&ov9281->mutex); in __ov9281_start_stream()
774 ret = v4l2_ctrl_handler_setup(&ov9281->ctrl_handler); in __ov9281_start_stream()
775 mutex_lock(&ov9281->mutex); in __ov9281_start_stream()
779 return ov9281_write_reg(ov9281->client, OV9281_REG_CTRL_MODE, in __ov9281_start_stream()
783 static int __ov9281_stop_stream(struct ov9281 *ov9281) in __ov9281_stop_stream() argument
785 if (ov9281->is_thunderboot) in __ov9281_stop_stream()
786 ov9281->is_first_streamoff = true; in __ov9281_stop_stream()
787 return ov9281_write_reg(ov9281->client, OV9281_REG_CTRL_MODE, in __ov9281_stop_stream()
793 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_s_stream() local
794 struct i2c_client *client = ov9281->client; in ov9281_s_stream()
797 mutex_lock(&ov9281->mutex); in ov9281_s_stream()
799 if (on == ov9281->streaming) in ov9281_s_stream()
809 ret = __ov9281_start_stream(ov9281); in ov9281_s_stream()
816 __ov9281_stop_stream(ov9281); in ov9281_s_stream()
820 ov9281->streaming = on; in ov9281_s_stream()
823 mutex_unlock(&ov9281->mutex); in ov9281_s_stream()
830 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_s_power() local
831 struct i2c_client *client = ov9281->client; in ov9281_s_power()
834 mutex_lock(&ov9281->mutex); in ov9281_s_power()
837 if (ov9281->power_on == !!on) in ov9281_s_power()
846 ret = ov9281_write_array(ov9281->client, ov9281_global_regs); in ov9281_s_power()
852 ov9281->power_on = true; in ov9281_s_power()
855 ov9281->power_on = false; in ov9281_s_power()
859 mutex_unlock(&ov9281->mutex); in ov9281_s_power()
870 static int __ov9281_power_on(struct ov9281 *ov9281) in __ov9281_power_on() argument
874 struct device *dev = &ov9281->client->dev; in __ov9281_power_on()
877 if (ov9281->is_thunderboot) { in __ov9281_power_on()
881 if (!IS_ERR_OR_NULL(ov9281->pins_default)) { in __ov9281_power_on()
882 ret = pinctrl_select_state(ov9281->pinctrl, in __ov9281_power_on()
883 ov9281->pins_default); in __ov9281_power_on()
888 ret = clk_set_rate(ov9281->xvclk, OV9281_XVCLK_FREQ); in __ov9281_power_on()
891 if (clk_get_rate(ov9281->xvclk) != OV9281_XVCLK_FREQ) in __ov9281_power_on()
893 ret = clk_prepare_enable(ov9281->xvclk); in __ov9281_power_on()
899 if (!IS_ERR(ov9281->reset_gpio)) in __ov9281_power_on()
900 gpiod_set_value_cansleep(ov9281->reset_gpio, 0); in __ov9281_power_on()
902 ret = regulator_bulk_enable(OV9281_NUM_SUPPLIES, ov9281->supplies); in __ov9281_power_on()
908 if (!IS_ERR(ov9281->reset_gpio)) in __ov9281_power_on()
909 gpiod_set_value_cansleep(ov9281->reset_gpio, 1); in __ov9281_power_on()
912 if (!IS_ERR(ov9281->pwdn_gpio)) in __ov9281_power_on()
913 gpiod_set_value_cansleep(ov9281->pwdn_gpio, 1); in __ov9281_power_on()
922 clk_disable_unprepare(ov9281->xvclk); in __ov9281_power_on()
927 static void __ov9281_power_off(struct ov9281 *ov9281) in __ov9281_power_off() argument
930 struct device *dev = &ov9281->client->dev; in __ov9281_power_off()
932 if (ov9281->is_thunderboot) { in __ov9281_power_off()
933 if (ov9281->is_first_streamoff) { in __ov9281_power_off()
934 ov9281->is_thunderboot = false; in __ov9281_power_off()
935 ov9281->is_first_streamoff = false; in __ov9281_power_off()
941 if (!IS_ERR(ov9281->pwdn_gpio)) in __ov9281_power_off()
942 gpiod_set_value_cansleep(ov9281->pwdn_gpio, 0); in __ov9281_power_off()
943 clk_disable_unprepare(ov9281->xvclk); in __ov9281_power_off()
944 if (!IS_ERR(ov9281->reset_gpio)) in __ov9281_power_off()
945 gpiod_set_value_cansleep(ov9281->reset_gpio, 0); in __ov9281_power_off()
946 if (!IS_ERR_OR_NULL(ov9281->pins_sleep)) { in __ov9281_power_off()
947 ret = pinctrl_select_state(ov9281->pinctrl, in __ov9281_power_off()
948 ov9281->pins_sleep); in __ov9281_power_off()
952 regulator_bulk_disable(OV9281_NUM_SUPPLIES, ov9281->supplies); in __ov9281_power_off()
959 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_runtime_resume() local
961 return __ov9281_power_on(ov9281); in ov9281_runtime_resume()
968 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_runtime_suspend() local
970 __ov9281_power_off(ov9281); in ov9281_runtime_suspend()
978 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_open() local
983 mutex_lock(&ov9281->mutex); in ov9281_open()
990 mutex_unlock(&ov9281->mutex); in ov9281_open()
1068 struct ov9281 *ov9281 = container_of(ctrl->handler, in ov9281_set_ctrl() local
1069 struct ov9281, ctrl_handler); in ov9281_set_ctrl()
1070 struct i2c_client *client = ov9281->client; in ov9281_set_ctrl()
1078 max = ov9281->cur_mode->height + ctrl->val - 4; in ov9281_set_ctrl()
1079 __v4l2_ctrl_modify_range(ov9281->exposure, in ov9281_set_ctrl()
1080 ov9281->exposure->minimum, max, in ov9281_set_ctrl()
1081 ov9281->exposure->step, in ov9281_set_ctrl()
1082 ov9281->exposure->default_value); in ov9281_set_ctrl()
1091 ov9281_write_reg(ov9281->client, OV9282_AEC_GROUP_UPDATE_ADDRESS, in ov9281_set_ctrl()
1095 ret = ov9281_write_reg(ov9281->client, OV9281_REG_EXPOSURE, in ov9281_set_ctrl()
1098 ov9281_write_reg(ov9281->client, OV9282_AEC_GROUP_UPDATE_ADDRESS, in ov9281_set_ctrl()
1100 ov9281_write_reg(ov9281->client, OV9282_AEC_GROUP_UPDATE_ADDRESS, in ov9281_set_ctrl()
1104 ret = ov9281_write_reg(ov9281->client, OV9281_REG_GAIN_H, in ov9281_set_ctrl()
1107 ret |= ov9281_write_reg(ov9281->client, OV9281_REG_GAIN_L, in ov9281_set_ctrl()
1112 ret = ov9281_write_reg(ov9281->client, OV9281_REG_VTS, in ov9281_set_ctrl()
1114 ctrl->val + ov9281->cur_mode->height); in ov9281_set_ctrl()
1117 ret = ov9281_write_reg(ov9281->client, OV9281_AEC_STROBE_REG_H, in ov9281_set_ctrl()
1120 ret |= ov9281_write_reg(ov9281->client, OV9281_AEC_STROBE_REG_L, in ov9281_set_ctrl()
1125 ret = ov9281_enable_test_pattern(ov9281, ctrl->val); in ov9281_set_ctrl()
1142 static int ov9281_initialize_controls(struct ov9281 *ov9281) in ov9281_initialize_controls() argument
1151 handler = &ov9281->ctrl_handler; in ov9281_initialize_controls()
1152 mode = ov9281->cur_mode; in ov9281_initialize_controls()
1156 handler->lock = &ov9281->mutex; in ov9281_initialize_controls()
1167 ov9281->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov9281_initialize_controls()
1169 if (ov9281->hblank) in ov9281_initialize_controls()
1170 ov9281->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov9281_initialize_controls()
1173 ov9281->vblank = v4l2_ctrl_new_std(handler, &ov9281_ctrl_ops, in ov9281_initialize_controls()
1179 ov9281->exposure = v4l2_ctrl_new_std(handler, &ov9281_ctrl_ops, in ov9281_initialize_controls()
1184 ov9281->anal_gain = v4l2_ctrl_new_std(handler, &ov9281_ctrl_ops, in ov9281_initialize_controls()
1189 ov9281->strobe = v4l2_ctrl_new_std(handler, &ov9281_ctrl_ops, in ov9281_initialize_controls()
1194 ov9281->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov9281_initialize_controls()
1201 dev_err(&ov9281->client->dev, in ov9281_initialize_controls()
1206 ov9281->subdev.ctrl_handler = handler; in ov9281_initialize_controls()
1216 static int ov9281_check_sensor_id(struct ov9281 *ov9281, in ov9281_check_sensor_id() argument
1219 struct device *dev = &ov9281->client->dev; in ov9281_check_sensor_id()
1223 if (ov9281->is_thunderboot) { in ov9281_check_sensor_id()
1240 static int ov9281_configure_regulators(struct ov9281 *ov9281) in ov9281_configure_regulators() argument
1245 ov9281->supplies[i].supply = ov9281_supply_names[i]; in ov9281_configure_regulators()
1247 return devm_regulator_bulk_get(&ov9281->client->dev, in ov9281_configure_regulators()
1249 ov9281->supplies); in ov9281_configure_regulators()
1257 struct ov9281 *ov9281; in ov9281_probe() local
1267 ov9281 = devm_kzalloc(dev, sizeof(*ov9281), GFP_KERNEL); in ov9281_probe()
1268 if (!ov9281) in ov9281_probe()
1272 &ov9281->module_index); in ov9281_probe()
1274 &ov9281->module_facing); in ov9281_probe()
1276 &ov9281->module_name); in ov9281_probe()
1278 &ov9281->len_name); in ov9281_probe()
1284 ov9281->client = client; in ov9281_probe()
1285 ov9281->cur_mode = &supported_modes[0]; in ov9281_probe()
1286 ov9281->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in ov9281_probe()
1288 ov9281->xvclk = devm_clk_get(dev, "xvclk"); in ov9281_probe()
1289 if (IS_ERR(ov9281->xvclk)) { in ov9281_probe()
1294 ov9281->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in ov9281_probe()
1295 if (IS_ERR(ov9281->reset_gpio)) in ov9281_probe()
1298 ov9281->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in ov9281_probe()
1299 if (IS_ERR(ov9281->pwdn_gpio)) in ov9281_probe()
1302 ov9281->pinctrl = devm_pinctrl_get(dev); in ov9281_probe()
1303 if (!IS_ERR(ov9281->pinctrl)) { in ov9281_probe()
1304 ov9281->pins_default = in ov9281_probe()
1305 pinctrl_lookup_state(ov9281->pinctrl, in ov9281_probe()
1307 if (IS_ERR(ov9281->pins_default)) in ov9281_probe()
1310 ov9281->pins_sleep = in ov9281_probe()
1311 pinctrl_lookup_state(ov9281->pinctrl, in ov9281_probe()
1313 if (IS_ERR(ov9281->pins_sleep)) in ov9281_probe()
1319 ret = ov9281_configure_regulators(ov9281); in ov9281_probe()
1325 mutex_init(&ov9281->mutex); in ov9281_probe()
1327 sd = &ov9281->subdev; in ov9281_probe()
1329 ret = ov9281_initialize_controls(ov9281); in ov9281_probe()
1333 ret = __ov9281_power_on(ov9281); in ov9281_probe()
1337 ret = ov9281_check_sensor_id(ov9281, client); in ov9281_probe()
1347 ov9281->pad.flags = MEDIA_PAD_FL_SOURCE; in ov9281_probe()
1349 ret = media_entity_pads_init(&sd->entity, 1, &ov9281->pad); in ov9281_probe()
1355 if (strcmp(ov9281->module_facing, "back") == 0) in ov9281_probe()
1361 ov9281->module_index, facing, in ov9281_probe()
1380 __ov9281_power_off(ov9281); in ov9281_probe()
1382 v4l2_ctrl_handler_free(&ov9281->ctrl_handler); in ov9281_probe()
1384 mutex_destroy(&ov9281->mutex); in ov9281_probe()
1392 struct ov9281 *ov9281 = to_ov9281(sd); in ov9281_remove() local
1398 v4l2_ctrl_handler_free(&ov9281->ctrl_handler); in ov9281_remove()
1399 mutex_destroy(&ov9281->mutex); in ov9281_remove()
1403 __ov9281_power_off(ov9281); in ov9281_remove()