Lines Matching refs:ov9750

106 struct ov9750 {  struct
136 #define to_ov9750(sd) container_of(sd, struct ov9750, subdev) argument
518 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_set_fmt() local
522 mutex_lock(&ov9750->mutex); in ov9750_set_fmt()
533 mutex_unlock(&ov9750->mutex); in ov9750_set_fmt()
537 ov9750->cur_mode = mode; in ov9750_set_fmt()
539 __v4l2_ctrl_modify_range(ov9750->hblank, h_blank, in ov9750_set_fmt()
542 __v4l2_ctrl_modify_range(ov9750->vblank, vblank_def, in ov9750_set_fmt()
547 mutex_unlock(&ov9750->mutex); in ov9750_set_fmt()
556 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_get_fmt() local
557 const struct ov9750_mode *mode = ov9750->cur_mode; in ov9750_get_fmt()
559 mutex_lock(&ov9750->mutex); in ov9750_get_fmt()
564 mutex_unlock(&ov9750->mutex); in ov9750_get_fmt()
573 mutex_unlock(&ov9750->mutex); in ov9750_get_fmt()
607 static int ov9750_enable_test_pattern(struct ov9750 *ov9750, u32 pattern) in ov9750_enable_test_pattern() argument
616 return ov9750_write_reg(ov9750->client, OV9750_REG_TEST_PATTERN, in ov9750_enable_test_pattern()
623 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_g_frame_interval() local
624 const struct ov9750_mode *mode = ov9750->cur_mode; in ov9750_g_frame_interval()
631 static void ov9750_get_module_inf(struct ov9750 *ov9750, in ov9750_get_module_inf() argument
636 strlcpy(inf->base.module, ov9750->module_name, in ov9750_get_module_inf()
638 strlcpy(inf->base.lens, ov9750->len_name, sizeof(inf->base.lens)); in ov9750_get_module_inf()
643 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_ioctl() local
649 ov9750_get_module_inf(ov9750, (struct rkmodule_inf *)arg); in ov9750_ioctl()
656 ret = ov9750_write_reg(ov9750->client, OV9750_REG_CTRL_MODE, in ov9750_ioctl()
659 ret = ov9750_write_reg(ov9750->client, OV9750_REG_CTRL_MODE, in ov9750_ioctl()
705 static int __ov9750_start_stream(struct ov9750 *ov9750) in __ov9750_start_stream() argument
709 ret = ov9750_write_array(ov9750->client, ov9750->cur_mode->reg_list); in __ov9750_start_stream()
714 mutex_unlock(&ov9750->mutex); in __ov9750_start_stream()
715 ret = v4l2_ctrl_handler_setup(&ov9750->ctrl_handler); in __ov9750_start_stream()
716 mutex_lock(&ov9750->mutex); in __ov9750_start_stream()
720 return ov9750_write_reg(ov9750->client, OV9750_REG_CTRL_MODE, in __ov9750_start_stream()
724 static int __ov9750_stop_stream(struct ov9750 *ov9750) in __ov9750_stop_stream() argument
726 return ov9750_write_reg(ov9750->client, OV9750_REG_CTRL_MODE, in __ov9750_stop_stream()
732 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_s_stream() local
733 struct i2c_client *client = ov9750->client; in ov9750_s_stream()
736 mutex_lock(&ov9750->mutex); in ov9750_s_stream()
738 if (on == ov9750->streaming) in ov9750_s_stream()
748 ret = __ov9750_start_stream(ov9750); in ov9750_s_stream()
755 __ov9750_stop_stream(ov9750); in ov9750_s_stream()
759 ov9750->streaming = on; in ov9750_s_stream()
762 mutex_unlock(&ov9750->mutex); in ov9750_s_stream()
769 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_s_power() local
770 struct i2c_client *client = ov9750->client; in ov9750_s_power()
773 mutex_lock(&ov9750->mutex); in ov9750_s_power()
776 if (ov9750->power_on == !!on) in ov9750_s_power()
785 ret = ov9750_write_array(ov9750->client, ov9750_global_regs); in ov9750_s_power()
791 ov9750->power_on = true; in ov9750_s_power()
794 ov9750->power_on = false; in ov9750_s_power()
798 mutex_unlock(&ov9750->mutex); in ov9750_s_power()
809 static int __ov9750_power_on(struct ov9750 *ov9750) in __ov9750_power_on() argument
813 struct device *dev = &ov9750->client->dev; in __ov9750_power_on()
815 if (!IS_ERR_OR_NULL(ov9750->pins_default)) { in __ov9750_power_on()
816 ret = pinctrl_select_state(ov9750->pinctrl, in __ov9750_power_on()
817 ov9750->pins_default); in __ov9750_power_on()
822 ret = clk_set_rate(ov9750->xvclk, OV9750_XVCLK_FREQ); in __ov9750_power_on()
825 if (clk_get_rate(ov9750->xvclk) != OV9750_XVCLK_FREQ) in __ov9750_power_on()
827 ret = clk_prepare_enable(ov9750->xvclk); in __ov9750_power_on()
833 if (!IS_ERR(ov9750->reset_gpio)) in __ov9750_power_on()
834 gpiod_set_value_cansleep(ov9750->reset_gpio, 0); in __ov9750_power_on()
836 ret = regulator_bulk_enable(OV9750_NUM_SUPPLIES, ov9750->supplies); in __ov9750_power_on()
842 if (!IS_ERR(ov9750->reset_gpio)) in __ov9750_power_on()
843 gpiod_set_value_cansleep(ov9750->reset_gpio, 1); in __ov9750_power_on()
846 if (!IS_ERR(ov9750->pwdn_gpio)) in __ov9750_power_on()
847 gpiod_set_value_cansleep(ov9750->pwdn_gpio, 1); in __ov9750_power_on()
856 clk_disable_unprepare(ov9750->xvclk); in __ov9750_power_on()
861 static void __ov9750_power_off(struct ov9750 *ov9750) in __ov9750_power_off() argument
865 if (!IS_ERR(ov9750->pwdn_gpio)) in __ov9750_power_off()
866 gpiod_set_value_cansleep(ov9750->pwdn_gpio, 0); in __ov9750_power_off()
867 clk_disable_unprepare(ov9750->xvclk); in __ov9750_power_off()
868 if (!IS_ERR(ov9750->reset_gpio)) in __ov9750_power_off()
869 gpiod_set_value_cansleep(ov9750->reset_gpio, 0); in __ov9750_power_off()
870 if (!IS_ERR_OR_NULL(ov9750->pins_sleep)) { in __ov9750_power_off()
871 ret = pinctrl_select_state(ov9750->pinctrl, in __ov9750_power_off()
872 ov9750->pins_sleep); in __ov9750_power_off()
874 dev_dbg(&ov9750->client->dev, "could not set pins\n"); in __ov9750_power_off()
876 regulator_bulk_disable(OV9750_NUM_SUPPLIES, ov9750->supplies); in __ov9750_power_off()
883 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_runtime_resume() local
885 return __ov9750_power_on(ov9750); in ov9750_runtime_resume()
892 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_runtime_suspend() local
894 __ov9750_power_off(ov9750); in ov9750_runtime_suspend()
902 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_open() local
907 mutex_lock(&ov9750->mutex); in ov9750_open()
914 mutex_unlock(&ov9750->mutex); in ov9750_open()
990 struct ov9750 *ov9750 = container_of(ctrl->handler, in ov9750_set_ctrl() local
991 struct ov9750, ctrl_handler); in ov9750_set_ctrl()
992 struct i2c_client *client = ov9750->client; in ov9750_set_ctrl()
1000 max = ov9750->cur_mode->height + ctrl->val - 4; in ov9750_set_ctrl()
1001 __v4l2_ctrl_modify_range(ov9750->exposure, in ov9750_set_ctrl()
1002 ov9750->exposure->minimum, max, in ov9750_set_ctrl()
1003 ov9750->exposure->step, in ov9750_set_ctrl()
1004 ov9750->exposure->default_value); in ov9750_set_ctrl()
1014 ret = ov9750_write_reg(ov9750->client, OV9750_REG_EXPOSURE, in ov9750_set_ctrl()
1018 ret = ov9750_write_reg(ov9750->client, OV9750_REG_GAIN_H, in ov9750_set_ctrl()
1021 ret |= ov9750_write_reg(ov9750->client, OV9750_REG_GAIN_L, in ov9750_set_ctrl()
1026 ret = ov9750_write_reg(ov9750->client, OV9750_REG_VTS, in ov9750_set_ctrl()
1028 ctrl->val + ov9750->cur_mode->height); in ov9750_set_ctrl()
1031 ret = ov9750_enable_test_pattern(ov9750, ctrl->val); in ov9750_set_ctrl()
1048 static int ov9750_initialize_controls(struct ov9750 *ov9750) in ov9750_initialize_controls() argument
1057 handler = &ov9750->ctrl_handler; in ov9750_initialize_controls()
1058 mode = ov9750->cur_mode; in ov9750_initialize_controls()
1062 handler->lock = &ov9750->mutex; in ov9750_initialize_controls()
1073 ov9750->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov9750_initialize_controls()
1075 if (ov9750->hblank) in ov9750_initialize_controls()
1076 ov9750->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov9750_initialize_controls()
1079 ov9750->vblank = v4l2_ctrl_new_std(handler, &ov9750_ctrl_ops, in ov9750_initialize_controls()
1085 ov9750->exposure = v4l2_ctrl_new_std(handler, &ov9750_ctrl_ops, in ov9750_initialize_controls()
1090 ov9750->anal_gain = v4l2_ctrl_new_std(handler, &ov9750_ctrl_ops, in ov9750_initialize_controls()
1095 ov9750->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov9750_initialize_controls()
1102 dev_err(&ov9750->client->dev, in ov9750_initialize_controls()
1107 ov9750->subdev.ctrl_handler = handler; in ov9750_initialize_controls()
1117 static int ov9750_check_sensor_id(struct ov9750 *ov9750, in ov9750_check_sensor_id() argument
1120 struct device *dev = &ov9750->client->dev; in ov9750_check_sensor_id()
1136 static int ov9750_configure_regulators(struct ov9750 *ov9750) in ov9750_configure_regulators() argument
1141 ov9750->supplies[i].supply = ov9750_supply_names[i]; in ov9750_configure_regulators()
1143 return devm_regulator_bulk_get(&ov9750->client->dev, in ov9750_configure_regulators()
1145 ov9750->supplies); in ov9750_configure_regulators()
1153 struct ov9750 *ov9750; in ov9750_probe() local
1163 ov9750 = devm_kzalloc(dev, sizeof(*ov9750), GFP_KERNEL); in ov9750_probe()
1164 if (!ov9750) in ov9750_probe()
1168 &ov9750->module_index); in ov9750_probe()
1170 &ov9750->module_facing); in ov9750_probe()
1172 &ov9750->module_name); in ov9750_probe()
1174 &ov9750->len_name); in ov9750_probe()
1180 ov9750->client = client; in ov9750_probe()
1181 ov9750->cur_mode = &supported_modes[0]; in ov9750_probe()
1183 ov9750->xvclk = devm_clk_get(dev, "xvclk"); in ov9750_probe()
1184 if (IS_ERR(ov9750->xvclk)) { in ov9750_probe()
1189 ov9750->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov9750_probe()
1190 if (IS_ERR(ov9750->reset_gpio)) in ov9750_probe()
1193 ov9750->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov9750_probe()
1194 if (IS_ERR(ov9750->pwdn_gpio)) in ov9750_probe()
1197 ov9750->pinctrl = devm_pinctrl_get(dev); in ov9750_probe()
1198 if (!IS_ERR(ov9750->pinctrl)) { in ov9750_probe()
1199 ov9750->pins_default = in ov9750_probe()
1200 pinctrl_lookup_state(ov9750->pinctrl, in ov9750_probe()
1202 if (IS_ERR(ov9750->pins_default)) in ov9750_probe()
1205 ov9750->pins_sleep = in ov9750_probe()
1206 pinctrl_lookup_state(ov9750->pinctrl, in ov9750_probe()
1208 if (IS_ERR(ov9750->pins_sleep)) in ov9750_probe()
1214 ret = ov9750_configure_regulators(ov9750); in ov9750_probe()
1220 mutex_init(&ov9750->mutex); in ov9750_probe()
1222 sd = &ov9750->subdev; in ov9750_probe()
1224 ret = ov9750_initialize_controls(ov9750); in ov9750_probe()
1228 ret = __ov9750_power_on(ov9750); in ov9750_probe()
1232 ret = ov9750_check_sensor_id(ov9750, client); in ov9750_probe()
1242 ov9750->pad.flags = MEDIA_PAD_FL_SOURCE; in ov9750_probe()
1244 ret = media_entity_pads_init(&sd->entity, 1, &ov9750->pad); in ov9750_probe()
1250 if (strcmp(ov9750->module_facing, "back") == 0) in ov9750_probe()
1256 ov9750->module_index, facing, in ov9750_probe()
1275 __ov9750_power_off(ov9750); in ov9750_probe()
1277 v4l2_ctrl_handler_free(&ov9750->ctrl_handler); in ov9750_probe()
1279 mutex_destroy(&ov9750->mutex); in ov9750_probe()
1287 struct ov9750 *ov9750 = to_ov9750(sd); in ov9750_remove() local
1293 v4l2_ctrl_handler_free(&ov9750->ctrl_handler); in ov9750_remove()
1294 mutex_destroy(&ov9750->mutex); in ov9750_remove()
1298 __ov9750_power_off(ov9750); in ov9750_remove()