Lines Matching refs:ov7750

114 struct ov7750 {  struct
144 #define to_ov7750(sd) container_of(sd, struct ov7750, subdev) argument
518 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_set_fmt() local
522 mutex_lock(&ov7750->mutex); in ov7750_set_fmt()
533 mutex_unlock(&ov7750->mutex); in ov7750_set_fmt()
537 ov7750->cur_mode = mode; in ov7750_set_fmt()
539 __v4l2_ctrl_modify_range(ov7750->hblank, h_blank, in ov7750_set_fmt()
542 __v4l2_ctrl_modify_range(ov7750->vblank, vblank_def, in ov7750_set_fmt()
547 mutex_unlock(&ov7750->mutex); in ov7750_set_fmt()
556 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_get_fmt() local
557 const struct ov7750_mode *mode = ov7750->cur_mode; in ov7750_get_fmt()
559 mutex_lock(&ov7750->mutex); in ov7750_get_fmt()
564 mutex_unlock(&ov7750->mutex); in ov7750_get_fmt()
573 mutex_unlock(&ov7750->mutex); in ov7750_get_fmt()
607 static int ov7750_enable_test_pattern(struct ov7750 *ov7750, u32 pattern) in ov7750_enable_test_pattern() argument
616 return ov7750_write_reg(ov7750->client, in ov7750_enable_test_pattern()
622 static void ov7750_get_module_inf(struct ov7750 *ov7750, in ov7750_get_module_inf() argument
627 strlcpy(inf->base.module, ov7750->module_name, in ov7750_get_module_inf()
629 strlcpy(inf->base.lens, ov7750->len_name, sizeof(inf->base.lens)); in ov7750_get_module_inf()
634 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_ioctl() local
640 ov7750_get_module_inf(ov7750, (struct rkmodule_inf *)arg); in ov7750_ioctl()
647 ret = ov7750_write_reg(ov7750->client, in ov7750_ioctl()
652 ret = ov7750_write_reg(ov7750->client, in ov7750_ioctl()
714 static int __ov7750_start_stream(struct ov7750 *ov7750) in __ov7750_start_stream() argument
718 ret = ov7750_write_array(ov7750->client, ov7750->cur_mode->reg_list); in __ov7750_start_stream()
723 mutex_unlock(&ov7750->mutex); in __ov7750_start_stream()
724 ret = v4l2_ctrl_handler_setup(&ov7750->ctrl_handler); in __ov7750_start_stream()
725 mutex_lock(&ov7750->mutex); in __ov7750_start_stream()
729 return ov7750_write_reg(ov7750->client, in __ov7750_start_stream()
735 static int __ov7750_stop_stream(struct ov7750 *ov7750) in __ov7750_stop_stream() argument
737 return ov7750_write_reg(ov7750->client, in __ov7750_stop_stream()
745 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_s_stream() local
746 struct i2c_client *client = ov7750->client; in ov7750_s_stream()
749 mutex_lock(&ov7750->mutex); in ov7750_s_stream()
751 if (on == ov7750->streaming) in ov7750_s_stream()
761 ret = __ov7750_start_stream(ov7750); in ov7750_s_stream()
768 __ov7750_stop_stream(ov7750); in ov7750_s_stream()
772 ov7750->streaming = on; in ov7750_s_stream()
775 mutex_unlock(&ov7750->mutex); in ov7750_s_stream()
782 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_s_power() local
783 struct i2c_client *client = ov7750->client; in ov7750_s_power()
786 mutex_lock(&ov7750->mutex); in ov7750_s_power()
789 if (ov7750->power_on == !!on) in ov7750_s_power()
799 ret = ov7750_write_array(ov7750->client, ov7750_global_regs); in ov7750_s_power()
806 ov7750->power_on = true; in ov7750_s_power()
809 ov7750->power_on = false; in ov7750_s_power()
813 mutex_unlock(&ov7750->mutex); in ov7750_s_power()
824 static int __ov7750_power_on(struct ov7750 *ov7750) in __ov7750_power_on() argument
828 struct device *dev = &ov7750->client->dev; in __ov7750_power_on()
830 if (!IS_ERR_OR_NULL(ov7750->pins_default)) { in __ov7750_power_on()
831 ret = pinctrl_select_state(ov7750->pinctrl, in __ov7750_power_on()
832 ov7750->pins_default); in __ov7750_power_on()
837 ret = clk_set_rate(ov7750->xvclk, OV7750_XVCLK_FREQ); in __ov7750_power_on()
840 if (clk_get_rate(ov7750->xvclk) != OV7750_XVCLK_FREQ) in __ov7750_power_on()
842 ret = clk_prepare_enable(ov7750->xvclk); in __ov7750_power_on()
848 if (!IS_ERR(ov7750->reset_gpio)) in __ov7750_power_on()
849 gpiod_set_value_cansleep(ov7750->reset_gpio, 0); in __ov7750_power_on()
851 ret = regulator_bulk_enable(OV7750_NUM_SUPPLIES, ov7750->supplies); in __ov7750_power_on()
857 if (!IS_ERR(ov7750->reset_gpio)) in __ov7750_power_on()
858 gpiod_set_value_cansleep(ov7750->reset_gpio, 1); in __ov7750_power_on()
861 if (!IS_ERR(ov7750->pwdn_gpio)) in __ov7750_power_on()
862 gpiod_set_value_cansleep(ov7750->pwdn_gpio, 1); in __ov7750_power_on()
871 clk_disable_unprepare(ov7750->xvclk); in __ov7750_power_on()
876 static void __ov7750_power_off(struct ov7750 *ov7750) in __ov7750_power_off() argument
879 struct device *dev = &ov7750->client->dev; in __ov7750_power_off()
881 if (!IS_ERR(ov7750->pwdn_gpio)) in __ov7750_power_off()
882 gpiod_set_value_cansleep(ov7750->pwdn_gpio, 0); in __ov7750_power_off()
883 clk_disable_unprepare(ov7750->xvclk); in __ov7750_power_off()
884 if (!IS_ERR(ov7750->reset_gpio)) in __ov7750_power_off()
885 gpiod_set_value_cansleep(ov7750->reset_gpio, 0); in __ov7750_power_off()
886 if (!IS_ERR_OR_NULL(ov7750->pins_sleep)) { in __ov7750_power_off()
887 ret = pinctrl_select_state(ov7750->pinctrl, in __ov7750_power_off()
888 ov7750->pins_sleep); in __ov7750_power_off()
892 regulator_bulk_disable(OV7750_NUM_SUPPLIES, ov7750->supplies); in __ov7750_power_off()
899 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_runtime_resume() local
901 return __ov7750_power_on(ov7750); in ov7750_runtime_resume()
908 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_runtime_suspend() local
910 __ov7750_power_off(ov7750); in ov7750_runtime_suspend()
918 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_open() local
923 mutex_lock(&ov7750->mutex); in ov7750_open()
930 mutex_unlock(&ov7750->mutex); in ov7750_open()
1005 struct ov7750 *ov7750 = container_of(ctrl->handler, in ov7750_set_ctrl() local
1006 struct ov7750, ctrl_handler); in ov7750_set_ctrl()
1007 struct i2c_client *client = ov7750->client; in ov7750_set_ctrl()
1015 max = ov7750->cur_mode->height + ctrl->val - in ov7750_set_ctrl()
1017 __v4l2_ctrl_modify_range(ov7750->exposure, in ov7750_set_ctrl()
1018 ov7750->exposure->minimum, max, in ov7750_set_ctrl()
1019 ov7750->exposure->step, in ov7750_set_ctrl()
1020 ov7750->exposure->default_value); in ov7750_set_ctrl()
1030 ret = ov7750_write_reg(ov7750->client, in ov7750_set_ctrl()
1036 ret = ov7750_write_reg(ov7750->client, in ov7750_set_ctrl()
1041 ret |= ov7750_write_reg(ov7750->client, in ov7750_set_ctrl()
1047 ret = ov7750_write_reg(ov7750->client, in ov7750_set_ctrl()
1050 ctrl->val + ov7750->cur_mode->height); in ov7750_set_ctrl()
1053 ret = ov7750_enable_test_pattern(ov7750, ctrl->val); in ov7750_set_ctrl()
1070 static int ov7750_initialize_controls(struct ov7750 *ov7750) in ov7750_initialize_controls() argument
1079 handler = &ov7750->ctrl_handler; in ov7750_initialize_controls()
1080 mode = ov7750->cur_mode; in ov7750_initialize_controls()
1084 handler->lock = &ov7750->mutex; in ov7750_initialize_controls()
1095 ov7750->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov7750_initialize_controls()
1097 if (ov7750->hblank) in ov7750_initialize_controls()
1098 ov7750->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov7750_initialize_controls()
1101 ov7750->vblank = v4l2_ctrl_new_std(handler, &ov7750_ctrl_ops, in ov7750_initialize_controls()
1107 ov7750->exposure = v4l2_ctrl_new_std(handler, &ov7750_ctrl_ops, in ov7750_initialize_controls()
1112 ov7750->anal_gain = v4l2_ctrl_new_std(handler, &ov7750_ctrl_ops, in ov7750_initialize_controls()
1117 ov7750->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov7750_initialize_controls()
1124 dev_err(&ov7750->client->dev, in ov7750_initialize_controls()
1129 ov7750->subdev.ctrl_handler = handler; in ov7750_initialize_controls()
1139 static int ov7750_check_sensor_id(struct ov7750 *ov7750, in ov7750_check_sensor_id() argument
1142 struct device *dev = &ov7750->client->dev; in ov7750_check_sensor_id()
1169 static int ov7750_configure_regulators(struct ov7750 *ov7750) in ov7750_configure_regulators() argument
1174 ov7750->supplies[i].supply = ov7750_supply_names[i]; in ov7750_configure_regulators()
1176 return devm_regulator_bulk_get(&ov7750->client->dev, in ov7750_configure_regulators()
1178 ov7750->supplies); in ov7750_configure_regulators()
1186 struct ov7750 *ov7750; in ov7750_probe() local
1196 ov7750 = devm_kzalloc(dev, sizeof(*ov7750), GFP_KERNEL); in ov7750_probe()
1197 if (!ov7750) in ov7750_probe()
1201 &ov7750->module_index); in ov7750_probe()
1203 &ov7750->module_facing); in ov7750_probe()
1205 &ov7750->module_name); in ov7750_probe()
1207 &ov7750->len_name); in ov7750_probe()
1213 ov7750->client = client; in ov7750_probe()
1214 ov7750->cur_mode = &supported_modes[0]; in ov7750_probe()
1216 ov7750->xvclk = devm_clk_get(dev, "xvclk"); in ov7750_probe()
1217 if (IS_ERR(ov7750->xvclk)) { in ov7750_probe()
1222 ov7750->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov7750_probe()
1223 if (IS_ERR(ov7750->reset_gpio)) in ov7750_probe()
1226 ov7750->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov7750_probe()
1227 if (IS_ERR(ov7750->pwdn_gpio)) in ov7750_probe()
1230 ret = ov7750_configure_regulators(ov7750); in ov7750_probe()
1236 ov7750->pinctrl = devm_pinctrl_get(dev); in ov7750_probe()
1237 if (!IS_ERR(ov7750->pinctrl)) { in ov7750_probe()
1238 ov7750->pins_default = in ov7750_probe()
1239 pinctrl_lookup_state(ov7750->pinctrl, in ov7750_probe()
1241 if (IS_ERR(ov7750->pins_default)) in ov7750_probe()
1244 ov7750->pins_sleep = in ov7750_probe()
1245 pinctrl_lookup_state(ov7750->pinctrl, in ov7750_probe()
1247 if (IS_ERR(ov7750->pins_sleep)) in ov7750_probe()
1251 mutex_init(&ov7750->mutex); in ov7750_probe()
1253 sd = &ov7750->subdev; in ov7750_probe()
1255 ret = ov7750_initialize_controls(ov7750); in ov7750_probe()
1259 ret = __ov7750_power_on(ov7750); in ov7750_probe()
1263 ret = ov7750_check_sensor_id(ov7750, client); in ov7750_probe()
1273 ov7750->pad.flags = MEDIA_PAD_FL_SOURCE; in ov7750_probe()
1275 ret = media_entity_pads_init(&sd->entity, 1, &ov7750->pad); in ov7750_probe()
1281 if (strcmp(ov7750->module_facing, "back") == 0) in ov7750_probe()
1287 ov7750->module_index, facing, in ov7750_probe()
1306 __ov7750_power_off(ov7750); in ov7750_probe()
1308 v4l2_ctrl_handler_free(&ov7750->ctrl_handler); in ov7750_probe()
1310 mutex_destroy(&ov7750->mutex); in ov7750_probe()
1318 struct ov7750 *ov7750 = to_ov7750(sd); in ov7750_remove() local
1324 v4l2_ctrl_handler_free(&ov7750->ctrl_handler); in ov7750_remove()
1325 mutex_destroy(&ov7750->mutex); in ov7750_remove()
1329 __ov7750_power_off(ov7750); in ov7750_remove()