Lines Matching refs:os02g10
122 struct os02g10 { struct
155 #define to_os02g10(sd) container_of(sd, struct os02g10, subdev) argument
388 os02g10_find_best_fit(struct os02g10 *os02g10, struct v4l2_subdev_format *fmt) in os02g10_find_best_fit() argument
396 for (i = 0; i < os02g10->cfg_num; i++) { in os02g10_find_best_fit()
412 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_set_fmt() local
418 mutex_lock(&os02g10->mutex); in os02g10_set_fmt()
420 mode = os02g10_find_best_fit(os02g10, fmt); in os02g10_set_fmt()
429 mutex_unlock(&os02g10->mutex); in os02g10_set_fmt()
433 os02g10->cur_mode = mode; in os02g10_set_fmt()
435 __v4l2_ctrl_modify_range(os02g10->hblank, h_blank, in os02g10_set_fmt()
439 __v4l2_ctrl_modify_range(os02g10->vblank, vblank_def, in os02g10_set_fmt()
448 __v4l2_ctrl_s_ctrl_int64(os02g10->pixel_rate, in os02g10_set_fmt()
450 __v4l2_ctrl_s_ctrl(os02g10->link_freq, in os02g10_set_fmt()
454 mutex_unlock(&os02g10->mutex); in os02g10_set_fmt()
463 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_get_fmt() local
464 const struct os02g10_mode *mode = os02g10->cur_mode; in os02g10_get_fmt()
466 mutex_lock(&os02g10->mutex); in os02g10_get_fmt()
471 mutex_unlock(&os02g10->mutex); in os02g10_get_fmt()
484 mutex_unlock(&os02g10->mutex); in os02g10_get_fmt()
493 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_enum_mbus_code() local
497 code->code = os02g10->cur_mode->bus_fmt; in os02g10_enum_mbus_code()
506 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_enum_frame_sizes() local
508 if (fse->index >= os02g10->cfg_num) in os02g10_enum_frame_sizes()
525 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_g_frame_interval() local
526 const struct os02g10_mode *mode = os02g10->cur_mode; in os02g10_g_frame_interval()
536 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_g_mbus_config() local
537 const struct os02g10_mode *mode = os02g10->cur_mode; in os02g10_g_mbus_config()
551 static void os02g10_get_module_inf(struct os02g10 *os02g10, in os02g10_get_module_inf() argument
556 strscpy(inf->base.module, os02g10->module_name, in os02g10_get_module_inf()
558 strscpy(inf->base.lens, os02g10->len_name, sizeof(inf->base.lens)); in os02g10_get_module_inf()
563 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_ioctl() local
570 os02g10_get_module_inf(os02g10, (struct rkmodule_inf *)arg); in os02g10_ioctl()
580 hdr_cfg->hdr_mode = os02g10->cur_mode->hdr_mode; in os02g10_ioctl()
585 ret = os02g10_write_reg(os02g10->client, OS02G10_REG_CTRL_MODE, in os02g10_ioctl()
588 ret = os02g10_write_reg(os02g10->client, OS02G10_REG_CTRL_MODE, in os02g10_ioctl()
668 static int __os02g10_start_stream(struct os02g10 *os02g10) in __os02g10_start_stream() argument
672 ret |= os02g10_write_reg(os02g10->client, 0xfd, 0x00); in __os02g10_start_stream()
673 ret |= os02g10_write_reg(os02g10->client, 0x36, 0x01); in __os02g10_start_stream()
674 ret |= os02g10_write_reg(os02g10->client, 0xfd, 0x00); in __os02g10_start_stream()
675 ret |= os02g10_write_reg(os02g10->client, 0x36, 0x00); in __os02g10_start_stream()
676 ret |= os02g10_write_reg(os02g10->client, 0xfd, 0x00); in __os02g10_start_stream()
680 ret |= os02g10_write_array(os02g10->client, os02g10->cur_mode->reg_list); in __os02g10_start_stream()
685 ret = __v4l2_ctrl_handler_setup(&os02g10->ctrl_handler); in __os02g10_start_stream()
688 if (os02g10->has_init_exp && os02g10->cur_mode->hdr_mode != NO_HDR) { in __os02g10_start_stream()
689 ret = os02g10_ioctl(&os02g10->subdev, PREISP_CMD_SET_HDRAE_EXP, in __os02g10_start_stream()
690 &os02g10->init_hdrae_exp); in __os02g10_start_stream()
692 dev_err(&os02g10->client->dev, in __os02g10_start_stream()
697 return os02g10_write_reg(os02g10->client, OS02G10_REG_CTRL_MODE, OS02G10_MODE_STREAMING); in __os02g10_start_stream()
700 static int __os02g10_stop_stream(struct os02g10 *os02g10) in __os02g10_stop_stream() argument
702 os02g10->has_init_exp = false; in __os02g10_stop_stream()
703 return os02g10_write_reg(os02g10->client, OS02G10_REG_CTRL_MODE, OS02G10_MODE_SW_STANDBY); in __os02g10_stop_stream()
708 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_s_stream() local
709 struct i2c_client *client = os02g10->client; in os02g10_s_stream()
712 mutex_lock(&os02g10->mutex); in os02g10_s_stream()
714 if (on == os02g10->streaming) in os02g10_s_stream()
724 ret = __os02g10_start_stream(os02g10); in os02g10_s_stream()
731 __os02g10_stop_stream(os02g10); in os02g10_s_stream()
735 os02g10->streaming = on; in os02g10_s_stream()
738 mutex_unlock(&os02g10->mutex); in os02g10_s_stream()
745 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_s_power() local
746 struct i2c_client *client = os02g10->client; in os02g10_s_power()
749 mutex_lock(&os02g10->mutex); in os02g10_s_power()
752 if (os02g10->power_on == !!on) in os02g10_s_power()
762 ret |= os02g10_write_reg(os02g10->client, in os02g10_s_power()
767 os02g10->power_on = true; in os02g10_s_power()
770 os02g10->power_on = false; in os02g10_s_power()
774 mutex_unlock(&os02g10->mutex); in os02g10_s_power()
779 static int __os02g10_power_on(struct os02g10 *os02g10) in __os02g10_power_on() argument
782 struct device *dev = &os02g10->client->dev; in __os02g10_power_on()
784 if (!IS_ERR_OR_NULL(os02g10->pins_default)) { in __os02g10_power_on()
785 ret = pinctrl_select_state(os02g10->pinctrl, in __os02g10_power_on()
786 os02g10->pins_default); in __os02g10_power_on()
790 ret = clk_set_rate(os02g10->xvclk, OS02G10_XVCLK_FREQ); in __os02g10_power_on()
793 if (clk_get_rate(os02g10->xvclk) != OS02G10_XVCLK_FREQ) in __os02g10_power_on()
795 ret = clk_prepare_enable(os02g10->xvclk); in __os02g10_power_on()
801 if (!IS_ERR(os02g10->pwdn_gpio)) in __os02g10_power_on()
802 gpiod_direction_output(os02g10->pwdn_gpio, 0); in __os02g10_power_on()
804 if (!IS_ERR(os02g10->reset_gpio)) in __os02g10_power_on()
805 gpiod_direction_output(os02g10->reset_gpio, 0); in __os02g10_power_on()
807 ret = regulator_bulk_enable(OS02G10_NUM_SUPPLIES, os02g10->supplies); in __os02g10_power_on()
815 if (!IS_ERR(os02g10->pwdn_gpio)) in __os02g10_power_on()
816 gpiod_direction_output(os02g10->pwdn_gpio, 1); in __os02g10_power_on()
820 if (!IS_ERR(os02g10->reset_gpio)) in __os02g10_power_on()
821 gpiod_direction_output(os02g10->reset_gpio, 1); in __os02g10_power_on()
828 clk_disable_unprepare(os02g10->xvclk); in __os02g10_power_on()
833 static void __os02g10_power_off(struct os02g10 *os02g10) in __os02g10_power_off() argument
836 struct device *dev = &os02g10->client->dev; in __os02g10_power_off()
838 if (!IS_ERR(os02g10->pwdn_gpio)) in __os02g10_power_off()
839 gpiod_direction_output(os02g10->pwdn_gpio, 0); in __os02g10_power_off()
841 clk_disable_unprepare(os02g10->xvclk); in __os02g10_power_off()
843 if (!IS_ERR(os02g10->reset_gpio)) in __os02g10_power_off()
844 gpiod_direction_output(os02g10->reset_gpio, 0); in __os02g10_power_off()
845 if (!IS_ERR_OR_NULL(os02g10->pins_sleep)) { in __os02g10_power_off()
846 ret = pinctrl_select_state(os02g10->pinctrl, in __os02g10_power_off()
847 os02g10->pins_sleep); in __os02g10_power_off()
851 regulator_bulk_disable(OS02G10_NUM_SUPPLIES, os02g10->supplies); in __os02g10_power_off()
858 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_runtime_resume() local
860 return __os02g10_power_on(os02g10); in os02g10_runtime_resume()
867 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_runtime_suspend() local
869 __os02g10_power_off(os02g10); in os02g10_runtime_suspend()
877 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_open() local
882 mutex_lock(&os02g10->mutex); in os02g10_open()
889 mutex_unlock(&os02g10->mutex); in os02g10_open()
900 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_enum_frame_interval() local
902 if (fie->index >= os02g10->cfg_num) in os02g10_enum_frame_interval()
989 struct os02g10 *os02g10 = container_of(ctrl->handler, in os02g10_set_ctrl() local
990 struct os02g10, ctrl_handler); in os02g10_set_ctrl()
991 struct i2c_client *client = os02g10->client; in os02g10_set_ctrl()
1000 max = os02g10->cur_mode->height + ctrl->val - 8; in os02g10_set_ctrl()
1001 __v4l2_ctrl_modify_range(os02g10->exposure, in os02g10_set_ctrl()
1002 os02g10->exposure->minimum, max, in os02g10_set_ctrl()
1003 os02g10->exposure->step, in os02g10_set_ctrl()
1004 os02g10->exposure->default_value); in os02g10_set_ctrl()
1013 ret = os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1015 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1017 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1019 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1026 ret = os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1028 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1030 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1032 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1034 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1041 ret = os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1043 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1045 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1047 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1055 os02g10->flip |= MIRROR_BIT_MASK; in os02g10_set_ctrl()
1057 os02g10->flip &= ~MIRROR_BIT_MASK; in os02g10_set_ctrl()
1059 ret = os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1061 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1062 OS02G10_FLIP_REG, os02g10->flip); in os02g10_set_ctrl()
1063 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1065 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1067 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1069 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1071 dev_dbg(&client->dev, "set hflip 0x%x\n", os02g10->flip); in os02g10_set_ctrl()
1075 os02g10->flip |= FLIP_BIT_MASK; in os02g10_set_ctrl()
1077 os02g10->flip &= ~FLIP_BIT_MASK; in os02g10_set_ctrl()
1079 ret = os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1081 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1082 OS02G10_FLIP_REG, os02g10->flip); in os02g10_set_ctrl()
1083 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1085 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1087 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1089 ret |= os02g10_write_reg(os02g10->client, in os02g10_set_ctrl()
1091 dev_dbg(&client->dev, "set vflip 0x%x\n", os02g10->flip); in os02g10_set_ctrl()
1107 static int os02g10_initialize_controls(struct os02g10 *os02g10) in os02g10_initialize_controls() argument
1117 handler = &os02g10->ctrl_handler; in os02g10_initialize_controls()
1118 mode = os02g10->cur_mode; in os02g10_initialize_controls()
1122 handler->lock = &os02g10->mutex; in os02g10_initialize_controls()
1124 os02g10->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in os02g10_initialize_controls()
1129 if (os02g10->cur_mode->bus_fmt == MEDIA_BUS_FMT_SBGGR10_1X10) { in os02g10_initialize_controls()
1134 os02g10->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in os02g10_initialize_controls()
1139 __v4l2_ctrl_s_ctrl(os02g10->link_freq, in os02g10_initialize_controls()
1143 os02g10->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in os02g10_initialize_controls()
1145 if (os02g10->hblank) in os02g10_initialize_controls()
1146 os02g10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in os02g10_initialize_controls()
1149 os02g10->vblank = v4l2_ctrl_new_std(handler, &os02g10_ctrl_ops, in os02g10_initialize_controls()
1155 os02g10->exposure = v4l2_ctrl_new_std(handler, &os02g10_ctrl_ops, in os02g10_initialize_controls()
1160 os02g10->anal_gain = v4l2_ctrl_new_std(handler, &os02g10_ctrl_ops, in os02g10_initialize_controls()
1169 os02g10->flip = 0; in os02g10_initialize_controls()
1173 dev_err(&os02g10->client->dev, in os02g10_initialize_controls()
1178 os02g10->subdev.ctrl_handler = handler; in os02g10_initialize_controls()
1179 os02g10->has_init_exp = false; in os02g10_initialize_controls()
1189 static int os02g10_check_sensor_id(struct os02g10 *os02g10, in os02g10_check_sensor_id() argument
1192 struct device *dev = &os02g10->client->dev; in os02g10_check_sensor_id()
1209 static int os02g10_configure_regulators(struct os02g10 *os02g10) in os02g10_configure_regulators() argument
1214 os02g10->supplies[i].supply = OS02G10_supply_names[i]; in os02g10_configure_regulators()
1216 return devm_regulator_bulk_get(&os02g10->client->dev, in os02g10_configure_regulators()
1218 os02g10->supplies); in os02g10_configure_regulators()
1226 struct os02g10 *os02g10; in os02g10_probe() local
1237 os02g10 = devm_kzalloc(dev, sizeof(*os02g10), GFP_KERNEL); in os02g10_probe()
1238 if (!os02g10) in os02g10_probe()
1242 &os02g10->module_index); in os02g10_probe()
1244 &os02g10->module_facing); in os02g10_probe()
1246 &os02g10->module_name); in os02g10_probe()
1248 &os02g10->len_name); in os02g10_probe()
1260 os02g10->cfg_num = ARRAY_SIZE(supported_modes); in os02g10_probe()
1261 for (i = 0; i < os02g10->cfg_num; i++) { in os02g10_probe()
1263 os02g10->cur_mode = &supported_modes[i]; in os02g10_probe()
1267 os02g10->client = client; in os02g10_probe()
1269 os02g10->xvclk = devm_clk_get(dev, "xvclk"); in os02g10_probe()
1270 if (IS_ERR(os02g10->xvclk)) { in os02g10_probe()
1275 os02g10->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in os02g10_probe()
1276 if (IS_ERR(os02g10->reset_gpio)) in os02g10_probe()
1279 os02g10->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in os02g10_probe()
1280 if (IS_ERR(os02g10->pwdn_gpio)) in os02g10_probe()
1283 os02g10->pinctrl = devm_pinctrl_get(dev); in os02g10_probe()
1284 if (!IS_ERR(os02g10->pinctrl)) { in os02g10_probe()
1285 os02g10->pins_default = in os02g10_probe()
1286 pinctrl_lookup_state(os02g10->pinctrl, in os02g10_probe()
1288 if (IS_ERR(os02g10->pins_default)) in os02g10_probe()
1291 os02g10->pins_sleep = in os02g10_probe()
1292 pinctrl_lookup_state(os02g10->pinctrl, in os02g10_probe()
1294 if (IS_ERR(os02g10->pins_sleep)) in os02g10_probe()
1300 ret = os02g10_configure_regulators(os02g10); in os02g10_probe()
1306 mutex_init(&os02g10->mutex); in os02g10_probe()
1308 sd = &os02g10->subdev; in os02g10_probe()
1310 ret = os02g10_initialize_controls(os02g10); in os02g10_probe()
1314 ret = __os02g10_power_on(os02g10); in os02g10_probe()
1318 ret = os02g10_check_sensor_id(os02g10, client); in os02g10_probe()
1327 os02g10->pad.flags = MEDIA_PAD_FL_SOURCE; in os02g10_probe()
1329 ret = media_entity_pads_init(&sd->entity, 1, &os02g10->pad); in os02g10_probe()
1335 if (strcmp(os02g10->module_facing, "back") == 0) in os02g10_probe()
1341 os02g10->module_index, facing, in os02g10_probe()
1360 __os02g10_power_off(os02g10); in os02g10_probe()
1362 v4l2_ctrl_handler_free(&os02g10->ctrl_handler); in os02g10_probe()
1364 mutex_destroy(&os02g10->mutex); in os02g10_probe()
1372 struct os02g10 *os02g10 = to_os02g10(sd); in os02g10_remove() local
1378 v4l2_ctrl_handler_free(&os02g10->ctrl_handler); in os02g10_remove()
1379 mutex_destroy(&os02g10->mutex); in os02g10_remove()
1383 __os02g10_power_off(os02g10); in os02g10_remove()