Lines Matching refs:ov5648

125 struct ov5648 {  struct
159 #define to_ov5648(sd) container_of(sd, struct ov5648, subdev) argument
605 ov5648_find_best_fit(struct ov5648 *ov5648, in ov5648_find_best_fit() argument
614 for (i = 0; i < ov5648->cfg_num; i++) { in ov5648_find_best_fit()
629 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_set_fmt() local
633 mutex_lock(&ov5648->mutex); in ov5648_set_fmt()
635 mode = ov5648_find_best_fit(ov5648, fmt); in ov5648_set_fmt()
644 mutex_unlock(&ov5648->mutex); in ov5648_set_fmt()
648 ov5648->cur_mode = mode; in ov5648_set_fmt()
650 __v4l2_ctrl_modify_range(ov5648->hblank, h_blank, in ov5648_set_fmt()
653 __v4l2_ctrl_modify_range(ov5648->vblank, vblank_def, in ov5648_set_fmt()
658 mutex_unlock(&ov5648->mutex); in ov5648_set_fmt()
667 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_get_fmt() local
668 const struct ov5648_mode *mode = ov5648->cur_mode; in ov5648_get_fmt()
670 mutex_lock(&ov5648->mutex); in ov5648_get_fmt()
675 mutex_unlock(&ov5648->mutex); in ov5648_get_fmt()
684 mutex_unlock(&ov5648->mutex); in ov5648_get_fmt()
704 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_enum_frame_sizes() local
706 if (fse->index >= ov5648->cfg_num) in ov5648_enum_frame_sizes()
720 static int ov5648_enable_test_pattern(struct ov5648 *ov5648, u32 pattern) in ov5648_enable_test_pattern() argument
729 return ov5648_write_reg(ov5648->client, OV5648_REG_TEST_PATTERN, in ov5648_enable_test_pattern()
736 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_g_frame_interval() local
737 const struct ov5648_mode *mode = ov5648->cur_mode; in ov5648_g_frame_interval()
744 static void ov5648_get_module_inf(struct ov5648 *ov5648, in ov5648_get_module_inf() argument
749 strlcpy(inf->base.module, ov5648->module_name, in ov5648_get_module_inf()
751 strlcpy(inf->base.lens, ov5648->len_name, sizeof(inf->base.lens)); in ov5648_get_module_inf()
756 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_ioctl() local
762 ov5648_get_module_inf(ov5648, (struct rkmodule_inf *)arg); in ov5648_ioctl()
769 ret = ov5648_write_reg(ov5648->client, OV5648_REG_CTRL_MODE, in ov5648_ioctl()
772 ret = ov5648_write_reg(ov5648->client, OV5648_REG_CTRL_MODE, in ov5648_ioctl()
832 static int __ov5648_start_stream(struct ov5648 *ov5648) in __ov5648_start_stream() argument
836 ret = ov5648_write_array(ov5648->client, ov5648->cur_mode->reg_list); in __ov5648_start_stream()
844 dev_info(&ov5648->client->dev, "%s:Check register value!\n", in __ov5648_start_stream()
846 ret = ov5648_reg_verify(ov5648->client, ov5648_global_regs); in __ov5648_start_stream()
850 ret = ov5648_reg_verify(ov5648->client, ov5648->cur_mode->reg_list); in __ov5648_start_stream()
856 mutex_unlock(&ov5648->mutex); in __ov5648_start_stream()
857 ret = v4l2_ctrl_handler_setup(&ov5648->ctrl_handler); in __ov5648_start_stream()
858 mutex_lock(&ov5648->mutex); in __ov5648_start_stream()
861 ret = ov5648_write_reg(ov5648->client, OV5648_REG_CTRL_MODE, in __ov5648_start_stream()
866 static int __ov5648_stop_stream(struct ov5648 *ov5648) in __ov5648_stop_stream() argument
868 return ov5648_write_reg(ov5648->client, OV5648_REG_CTRL_MODE, in __ov5648_stop_stream()
874 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_s_stream() local
875 struct i2c_client *client = ov5648->client; in ov5648_s_stream()
879 mutex_lock(&ov5648->mutex); in ov5648_s_stream()
881 if (on == ov5648->streaming) in ov5648_s_stream()
892 ret = __ov5648_start_stream(ov5648); in ov5648_s_stream()
900 __ov5648_stop_stream(ov5648); in ov5648_s_stream()
904 ov5648->streaming = on; in ov5648_s_stream()
907 mutex_unlock(&ov5648->mutex); in ov5648_s_stream()
914 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_s_power() local
915 struct i2c_client *client = ov5648->client; in ov5648_s_power()
918 mutex_lock(&ov5648->mutex); in ov5648_s_power()
921 if (ov5648->power_on == !!on) in ov5648_s_power()
931 ret = ov5648_write_array(ov5648->client, ov5648_global_regs); in ov5648_s_power()
938 ov5648->power_on = true; in ov5648_s_power()
941 ov5648->power_on = false; in ov5648_s_power()
945 mutex_unlock(&ov5648->mutex); in ov5648_s_power()
956 static int __ov5648_power_on(struct ov5648 *ov5648) in __ov5648_power_on() argument
960 struct device *dev = &ov5648->client->dev; in __ov5648_power_on()
962 if (!IS_ERR(ov5648->power_gpio)) in __ov5648_power_on()
963 gpiod_set_value_cansleep(ov5648->power_gpio, 1); in __ov5648_power_on()
967 if (!IS_ERR_OR_NULL(ov5648->pins_default)) { in __ov5648_power_on()
968 ret = pinctrl_select_state(ov5648->pinctrl, in __ov5648_power_on()
969 ov5648->pins_default); in __ov5648_power_on()
973 ret = clk_set_rate(ov5648->xvclk, OV5648_XVCLK_FREQ); in __ov5648_power_on()
976 if (clk_get_rate(ov5648->xvclk) != OV5648_XVCLK_FREQ) in __ov5648_power_on()
978 ret = clk_prepare_enable(ov5648->xvclk); in __ov5648_power_on()
983 if (!IS_ERR(ov5648->reset_gpio)) in __ov5648_power_on()
984 gpiod_set_value_cansleep(ov5648->reset_gpio, 1); in __ov5648_power_on()
986 ret = regulator_bulk_enable(OV5648_NUM_SUPPLIES, ov5648->supplies); in __ov5648_power_on()
992 if (!IS_ERR(ov5648->reset_gpio)) in __ov5648_power_on()
993 gpiod_set_value_cansleep(ov5648->reset_gpio, 0); in __ov5648_power_on()
995 if (!IS_ERR(ov5648->pwdn_gpio)) in __ov5648_power_on()
996 gpiod_set_value_cansleep(ov5648->pwdn_gpio, 1); in __ov5648_power_on()
1005 clk_disable_unprepare(ov5648->xvclk); in __ov5648_power_on()
1010 static void __ov5648_power_off(struct ov5648 *ov5648) in __ov5648_power_off() argument
1013 struct device *dev = &ov5648->client->dev; in __ov5648_power_off()
1015 if (!IS_ERR(ov5648->pwdn_gpio)) in __ov5648_power_off()
1016 gpiod_set_value_cansleep(ov5648->pwdn_gpio, 0); in __ov5648_power_off()
1017 clk_disable_unprepare(ov5648->xvclk); in __ov5648_power_off()
1018 if (!IS_ERR(ov5648->reset_gpio)) in __ov5648_power_off()
1019 gpiod_set_value_cansleep(ov5648->reset_gpio, 1); in __ov5648_power_off()
1020 if (!IS_ERR_OR_NULL(ov5648->pins_sleep)) { in __ov5648_power_off()
1021 ret = pinctrl_select_state(ov5648->pinctrl, in __ov5648_power_off()
1022 ov5648->pins_sleep); in __ov5648_power_off()
1026 if (!IS_ERR(ov5648->power_gpio)) in __ov5648_power_off()
1027 gpiod_set_value_cansleep(ov5648->power_gpio, 0); in __ov5648_power_off()
1029 regulator_bulk_disable(OV5648_NUM_SUPPLIES, ov5648->supplies); in __ov5648_power_off()
1036 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_runtime_resume() local
1038 return __ov5648_power_on(ov5648); in ov5648_runtime_resume()
1045 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_runtime_suspend() local
1047 __ov5648_power_off(ov5648); in ov5648_runtime_suspend()
1055 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_open() local
1060 mutex_lock(&ov5648->mutex); in ov5648_open()
1067 mutex_unlock(&ov5648->mutex); in ov5648_open()
1078 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_enum_frame_interval() local
1080 if (fie->index >= ov5648->cfg_num) in ov5648_enum_frame_interval()
1145 struct ov5648 *ov5648 = container_of(ctrl->handler, in ov5648_set_ctrl() local
1146 struct ov5648, ctrl_handler); in ov5648_set_ctrl()
1147 struct i2c_client *client = ov5648->client; in ov5648_set_ctrl()
1155 max = ov5648->cur_mode->height + ctrl->val - 4; in ov5648_set_ctrl()
1156 __v4l2_ctrl_modify_range(ov5648->exposure, in ov5648_set_ctrl()
1157 ov5648->exposure->minimum, max, in ov5648_set_ctrl()
1158 ov5648->exposure->step, in ov5648_set_ctrl()
1159 ov5648->exposure->default_value); in ov5648_set_ctrl()
1170 ret = ov5648_write_reg(ov5648->client, OV5648_REG_EXPOSURE, in ov5648_set_ctrl()
1175 ret = ov5648_write_reg(ov5648->client, OV5648_REG_GAIN_L, in ov5648_set_ctrl()
1178 ret |= ov5648_write_reg(ov5648->client, OV5648_REG_GAIN_H, in ov5648_set_ctrl()
1185 ret = ov5648_write_reg(ov5648->client, OV5648_REG_VTS, in ov5648_set_ctrl()
1187 ctrl->val + ov5648->cur_mode->height); in ov5648_set_ctrl()
1190 ret = ov5648_enable_test_pattern(ov5648, ctrl->val); in ov5648_set_ctrl()
1207 static int ov5648_initialize_controls(struct ov5648 *ov5648) in ov5648_initialize_controls() argument
1216 handler = &ov5648->ctrl_handler; in ov5648_initialize_controls()
1217 mode = ov5648->cur_mode; in ov5648_initialize_controls()
1221 handler->lock = &ov5648->mutex; in ov5648_initialize_controls()
1229 0, ov5648->pixel_rate, 1, ov5648->pixel_rate); in ov5648_initialize_controls()
1232 ov5648->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov5648_initialize_controls()
1234 if (ov5648->hblank) in ov5648_initialize_controls()
1235 ov5648->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov5648_initialize_controls()
1238 ov5648->vblank = v4l2_ctrl_new_std(handler, &ov5648_ctrl_ops, in ov5648_initialize_controls()
1244 ov5648->exposure = v4l2_ctrl_new_std(handler, &ov5648_ctrl_ops, in ov5648_initialize_controls()
1249 ov5648->anal_gain = v4l2_ctrl_new_std(handler, &ov5648_ctrl_ops, in ov5648_initialize_controls()
1255 ov5648->digi_gain = v4l2_ctrl_new_std(handler, &ov5648_ctrl_ops, in ov5648_initialize_controls()
1260 ov5648->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov5648_initialize_controls()
1267 dev_err(&ov5648->client->dev, in ov5648_initialize_controls()
1272 ov5648->subdev.ctrl_handler = handler; in ov5648_initialize_controls()
1282 static int ov5648_check_sensor_id(struct ov5648 *ov5648, in ov5648_check_sensor_id() argument
1285 struct device *dev = &ov5648->client->dev; in ov5648_check_sensor_id()
1301 static int ov5648_configure_regulators(struct ov5648 *ov5648) in ov5648_configure_regulators() argument
1306 ov5648->supplies[i].supply = ov5648_supply_names[i]; in ov5648_configure_regulators()
1308 return devm_regulator_bulk_get(&ov5648->client->dev, in ov5648_configure_regulators()
1310 ov5648->supplies); in ov5648_configure_regulators()
1313 static int ov5648_parse_of(struct ov5648 *ov5648) in ov5648_parse_of() argument
1315 struct device *dev = &ov5648->client->dev; in ov5648_parse_of()
1332 ov5648->lane_num = rval; in ov5648_parse_of()
1333 if (2 == ov5648->lane_num) { in ov5648_parse_of()
1334 ov5648->cur_mode = &supported_modes_2lane[0]; in ov5648_parse_of()
1336 ov5648->cfg_num = ARRAY_SIZE(supported_modes_2lane); in ov5648_parse_of()
1339 ov5648->pixel_rate = MIPI_FREQ * 2U * ov5648->lane_num / 10U; in ov5648_parse_of()
1341 ov5648->lane_num, ov5648->pixel_rate); in ov5648_parse_of()
1343 dev_err(dev, "unsupported lane_num(%d)\n", ov5648->lane_num); in ov5648_parse_of()
1354 struct ov5648 *ov5648; in ov5648_probe() local
1364 ov5648 = devm_kzalloc(dev, sizeof(*ov5648), GFP_KERNEL); in ov5648_probe()
1365 if (!ov5648) in ov5648_probe()
1369 &ov5648->module_index); in ov5648_probe()
1372 ov5648->module_index = 0; in ov5648_probe()
1375 &ov5648->module_facing); in ov5648_probe()
1377 &ov5648->module_name); in ov5648_probe()
1379 &ov5648->len_name); in ov5648_probe()
1385 ov5648->client = client; in ov5648_probe()
1387 ov5648->xvclk = devm_clk_get(dev, "xvclk"); in ov5648_probe()
1388 if (IS_ERR(ov5648->xvclk)) { in ov5648_probe()
1393 ov5648->power_gpio = devm_gpiod_get(dev, "power", GPIOD_OUT_LOW); in ov5648_probe()
1394 if (IS_ERR(ov5648->power_gpio)) in ov5648_probe()
1397 ov5648->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov5648_probe()
1398 if (IS_ERR(ov5648->reset_gpio)) in ov5648_probe()
1401 ov5648->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov5648_probe()
1402 if (IS_ERR(ov5648->pwdn_gpio)) in ov5648_probe()
1405 ret = ov5648_configure_regulators(ov5648); in ov5648_probe()
1410 ret = ov5648_parse_of(ov5648); in ov5648_probe()
1414 ov5648->pinctrl = devm_pinctrl_get(dev); in ov5648_probe()
1415 if (!IS_ERR(ov5648->pinctrl)) { in ov5648_probe()
1416 ov5648->pins_default = in ov5648_probe()
1417 pinctrl_lookup_state(ov5648->pinctrl, in ov5648_probe()
1419 if (IS_ERR(ov5648->pins_default)) in ov5648_probe()
1422 ov5648->pins_sleep = in ov5648_probe()
1423 pinctrl_lookup_state(ov5648->pinctrl, in ov5648_probe()
1425 if (IS_ERR(ov5648->pins_sleep)) in ov5648_probe()
1429 mutex_init(&ov5648->mutex); in ov5648_probe()
1431 sd = &ov5648->subdev; in ov5648_probe()
1433 ret = ov5648_initialize_controls(ov5648); in ov5648_probe()
1437 ret = __ov5648_power_on(ov5648); in ov5648_probe()
1441 ret = ov5648_check_sensor_id(ov5648, client); in ov5648_probe()
1456 ov5648->pad.flags = MEDIA_PAD_FL_SOURCE; in ov5648_probe()
1458 ret = media_entity_pads_init(&sd->entity, 1, &ov5648->pad); in ov5648_probe()
1464 if (strcmp(ov5648->module_facing, "back") == 0) in ov5648_probe()
1470 ov5648->module_index, facing, in ov5648_probe()
1490 __ov5648_power_off(ov5648); in ov5648_probe()
1492 v4l2_ctrl_handler_free(&ov5648->ctrl_handler); in ov5648_probe()
1494 mutex_destroy(&ov5648->mutex); in ov5648_probe()
1502 struct ov5648 *ov5648 = to_ov5648(sd); in ov5648_remove() local
1508 v4l2_ctrl_handler_free(&ov5648->ctrl_handler); in ov5648_remove()
1509 mutex_destroy(&ov5648->mutex); in ov5648_remove()
1513 __ov5648_power_off(ov5648); in ov5648_remove()