Lines Matching refs:ov7740
84 struct ov7740 { struct
273 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_get_register() local
274 struct regmap *regmap = ov7740->regmap; in ov7740_get_register()
288 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_set_register() local
289 struct regmap *regmap = ov7740->regmap; in ov7740_set_register()
297 static int ov7740_set_power(struct ov7740 *ov7740, int on) in ov7740_set_power() argument
302 ret = clk_prepare_enable(ov7740->xvclk); in ov7740_set_power()
306 if (ov7740->pwdn_gpio) in ov7740_set_power()
307 gpiod_direction_output(ov7740->pwdn_gpio, 0); in ov7740_set_power()
309 if (ov7740->resetb_gpio) { in ov7740_set_power()
310 gpiod_set_value(ov7740->resetb_gpio, 1); in ov7740_set_power()
312 gpiod_set_value(ov7740->resetb_gpio, 0); in ov7740_set_power()
316 clk_disable_unprepare(ov7740->xvclk); in ov7740_set_power()
318 if (ov7740->pwdn_gpio) in ov7740_set_power()
319 gpiod_direction_output(ov7740->pwdn_gpio, 0); in ov7740_set_power()
335 static int ov7740_set_white_balance(struct ov7740 *ov7740, int awb) in ov7740_set_white_balance() argument
337 struct regmap *regmap = ov7740->regmap; in ov7740_set_white_balance()
354 ov7740->blue_balance->val); in ov7740_set_white_balance()
358 ret = regmap_write(regmap, REG_RGAIN, ov7740->red_balance->val); in ov7740_set_white_balance()
430 static int ov7740_get_gain(struct ov7740 *ov7740, struct v4l2_ctrl *ctrl) in ov7740_get_gain() argument
432 struct regmap *regmap = ov7740->regmap; in ov7740_get_gain()
446 ov7740->gain->val = (value1 << 8) | (value0 & 0xff); in ov7740_get_gain()
451 static int ov7740_get_exp(struct ov7740 *ov7740, struct v4l2_ctrl *ctrl) in ov7740_get_exp() argument
453 struct regmap *regmap = ov7740->regmap; in ov7740_get_exp()
467 ov7740->exposure->val = (value1 << 8) | (value0 & 0xff); in ov7740_get_exp()
510 struct ov7740 *ov7740 = container_of(ctrl->handler, in ov7740_get_volatile_ctrl() local
511 struct ov7740, ctrl_handler); in ov7740_get_volatile_ctrl()
516 ret = ov7740_get_gain(ov7740, ctrl); in ov7740_get_volatile_ctrl()
519 ret = ov7740_get_exp(ov7740, ctrl); in ov7740_get_volatile_ctrl()
530 struct ov7740 *ov7740 = container_of(ctrl->handler, in ov7740_set_ctrl() local
531 struct ov7740, ctrl_handler); in ov7740_set_ctrl()
532 struct i2c_client *client = v4l2_get_subdevdata(&ov7740->subdev); in ov7740_set_ctrl()
533 struct regmap *regmap = ov7740->regmap; in ov7740_set_ctrl()
542 ret = ov7740_set_white_balance(ov7740, ctrl->val); in ov7740_set_ctrl()
565 ret = ov7740_set_gain(regmap, ov7740->gain->val); in ov7740_set_ctrl()
572 ret = ov7740_set_exp(regmap, ov7740->exposure->val); in ov7740_set_ctrl()
591 static int ov7740_start_streaming(struct ov7740 *ov7740) in ov7740_start_streaming() argument
595 if (ov7740->fmt) { in ov7740_start_streaming()
596 ret = regmap_multi_reg_write(ov7740->regmap, in ov7740_start_streaming()
597 ov7740->fmt->regs, in ov7740_start_streaming()
598 ov7740->fmt->reg_num); in ov7740_start_streaming()
603 if (ov7740->frmsize) { in ov7740_start_streaming()
604 ret = regmap_multi_reg_write(ov7740->regmap, in ov7740_start_streaming()
605 ov7740->frmsize->regs, in ov7740_start_streaming()
606 ov7740->frmsize->reg_num); in ov7740_start_streaming()
611 return __v4l2_ctrl_handler_setup(ov7740->subdev.ctrl_handler); in ov7740_start_streaming()
616 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_set_stream() local
620 mutex_lock(&ov7740->mutex); in ov7740_set_stream()
621 if (ov7740->streaming == enable) { in ov7740_set_stream()
622 mutex_unlock(&ov7740->mutex); in ov7740_set_stream()
633 ret = ov7740_start_streaming(ov7740); in ov7740_set_stream()
640 ov7740->streaming = enable; in ov7740_set_stream()
642 mutex_unlock(&ov7740->mutex); in ov7740_set_stream()
648 mutex_unlock(&ov7740->mutex); in ov7740_set_stream()
763 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_try_fmt_internal() local
800 ov7740->format = *fmt; in ov7740_try_fmt_internal()
809 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_set_fmt() local
817 mutex_lock(&ov7740->mutex); in ov7740_set_fmt()
831 mutex_unlock(&ov7740->mutex); in ov7740_set_fmt()
839 ov7740->fmt = ovfmt; in ov7740_set_fmt()
840 ov7740->frmsize = fsize; in ov7740_set_fmt()
842 mutex_unlock(&ov7740->mutex); in ov7740_set_fmt()
846 mutex_unlock(&ov7740->mutex); in ov7740_set_fmt()
854 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_get_fmt() local
860 mutex_lock(&ov7740->mutex); in ov7740_get_fmt()
870 format->format = ov7740->format; in ov7740_get_fmt()
872 mutex_unlock(&ov7740->mutex); in ov7740_get_fmt()
894 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_get_default_format() local
896 format->width = ov7740->frmsize->width; in ov7740_get_default_format()
897 format->height = ov7740->frmsize->height; in ov7740_get_default_format()
898 format->colorspace = ov7740->fmt->colorspace; in ov7740_get_default_format()
899 format->code = ov7740->fmt->mbus_code; in ov7740_get_default_format()
906 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_open() local
910 mutex_lock(&ov7740->mutex); in ov7740_open()
912 mutex_unlock(&ov7740->mutex); in ov7740_open()
923 struct ov7740 *ov7740) in ov7740_probe_dt() argument
925 ov7740->resetb_gpio = devm_gpiod_get_optional(&client->dev, "reset", in ov7740_probe_dt()
927 if (IS_ERR(ov7740->resetb_gpio)) { in ov7740_probe_dt()
929 return PTR_ERR(ov7740->resetb_gpio); in ov7740_probe_dt()
932 ov7740->pwdn_gpio = devm_gpiod_get_optional(&client->dev, "powerdown", in ov7740_probe_dt()
934 if (IS_ERR(ov7740->pwdn_gpio)) { in ov7740_probe_dt()
936 return PTR_ERR(ov7740->pwdn_gpio); in ov7740_probe_dt()
942 static int ov7740_detect(struct ov7740 *ov7740) in ov7740_detect() argument
944 struct regmap *regmap = ov7740->regmap; in ov7740_detect()
975 static int ov7740_init_controls(struct ov7740 *ov7740) in ov7740_init_controls() argument
977 struct i2c_client *client = v4l2_get_subdevdata(&ov7740->subdev); in ov7740_init_controls()
978 struct v4l2_ctrl_handler *ctrl_hdlr = &ov7740->ctrl_handler; in ov7740_init_controls()
985 ctrl_hdlr->lock = &ov7740->mutex; in ov7740_init_controls()
986 ov7740->auto_wb = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
989 ov7740->blue_balance = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
992 ov7740->red_balance = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
996 ov7740->brightness = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
999 ov7740->contrast = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1002 ov7740->saturation = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1004 ov7740->hflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1006 ov7740->vflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1009 ov7740->gain = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1012 ov7740->auto_gain = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1015 ov7740->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov7740_ctrl_ops, in ov7740_init_controls()
1018 ov7740->auto_exposure = v4l2_ctrl_new_std_menu(ctrl_hdlr, in ov7740_init_controls()
1024 v4l2_ctrl_auto_cluster(3, &ov7740->auto_wb, 0, false); in ov7740_init_controls()
1025 v4l2_ctrl_auto_cluster(2, &ov7740->auto_gain, 0, true); in ov7740_init_controls()
1026 v4l2_ctrl_auto_cluster(2, &ov7740->auto_exposure, in ov7740_init_controls()
1043 ov7740->subdev.ctrl_handler = ctrl_hdlr; in ov7740_init_controls()
1048 mutex_destroy(&ov7740->mutex); in ov7740_init_controls()
1052 static void ov7740_free_controls(struct ov7740 *ov7740) in ov7740_free_controls() argument
1054 v4l2_ctrl_handler_free(ov7740->subdev.ctrl_handler); in ov7740_free_controls()
1055 mutex_destroy(&ov7740->mutex); in ov7740_free_controls()
1067 struct ov7740 *ov7740; in ov7740_probe() local
1071 ov7740 = devm_kzalloc(&client->dev, sizeof(*ov7740), GFP_KERNEL); in ov7740_probe()
1072 if (!ov7740) in ov7740_probe()
1075 ov7740->xvclk = devm_clk_get(&client->dev, "xvclk"); in ov7740_probe()
1076 if (IS_ERR(ov7740->xvclk)) { in ov7740_probe()
1077 ret = PTR_ERR(ov7740->xvclk); in ov7740_probe()
1083 ret = ov7740_probe_dt(client, ov7740); in ov7740_probe()
1087 ov7740->regmap = devm_regmap_init_sccb(client, &ov7740_regmap_config); in ov7740_probe()
1088 if (IS_ERR(ov7740->regmap)) { in ov7740_probe()
1089 ret = PTR_ERR(ov7740->regmap); in ov7740_probe()
1095 sd = &ov7740->subdev; in ov7740_probe()
1104 ov7740->pad.flags = MEDIA_PAD_FL_SOURCE; in ov7740_probe()
1106 ret = media_entity_pads_init(&sd->entity, 1, &ov7740->pad); in ov7740_probe()
1111 ret = ov7740_set_power(ov7740, 1); in ov7740_probe()
1118 ret = ov7740_detect(ov7740); in ov7740_probe()
1122 mutex_init(&ov7740->mutex); in ov7740_probe()
1124 ret = ov7740_init_controls(ov7740); in ov7740_probe()
1131 ov7740->fmt = &ov7740_formats[0]; in ov7740_probe()
1132 ov7740->frmsize = &ov7740_framesizes[0]; in ov7740_probe()
1134 ov7740_get_default_format(sd, &ov7740->format); in ov7740_probe()
1145 v4l2_ctrl_handler_free(ov7740->subdev.ctrl_handler); in ov7740_probe()
1147 ov7740_free_controls(ov7740); in ov7740_probe()
1151 ov7740_set_power(ov7740, 0); in ov7740_probe()
1152 media_entity_cleanup(&ov7740->subdev.entity); in ov7740_probe()
1160 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_remove() local
1162 mutex_destroy(&ov7740->mutex); in ov7740_remove()
1163 v4l2_ctrl_handler_free(ov7740->subdev.ctrl_handler); in ov7740_remove()
1164 media_entity_cleanup(&ov7740->subdev.entity); in ov7740_remove()
1166 ov7740_free_controls(ov7740); in ov7740_remove()
1173 ov7740_set_power(ov7740, 0); in ov7740_remove()
1181 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_runtime_suspend() local
1183 ov7740_set_power(ov7740, 0); in ov7740_runtime_suspend()
1192 struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev); in ov7740_runtime_resume() local
1194 return ov7740_set_power(ov7740, 1); in ov7740_runtime_resume()