Lines Matching +full:fsin +full:- +full:enable
1 // SPDX-License-Identifier: GPL-2.0
26 #include <media/v4l2-async.h>
27 #include <media/media-entity.h>
28 #include <media/v4l2-common.h>
29 #include <media/v4l2-ctrls.h>
30 #include <media/v4l2-device.h>
31 #include <media/v4l2-event.h>
32 #include <media/v4l2-fwnode.h>
33 #include <media/v4l2-image-sizes.h>
34 #include <media/v4l2-mediabus.h>
35 #include <media/v4l2-subdev.h>
37 #include <linux/rk-camera-module.h>
187 {0x03, "A-kerr"},
205 {0x15, "Lite-on"},
236 {0xa0, "E-pin D517"},
237 {0xc0, "XuYe XA-0502B"},
238 {0xc8, "XuYe XA-0502A"},
271 {0x3000, 0x00}, //Fsin/Vsync input
284 {0x3031, 0x0a}, //10-bit mode
287 {0x3040, 0xf0}, //sclk_isp_fc_en, sclk_fc-en, sclk_tpm_en, sclk_fmt_en
443 {0x4001, 0x60}, //BLC, K enable
492 {0x5004, 0x0c}, //ISP size auto control enable
538 {0x3002, 0x61}, //[6]ULPM output enable
539 {0x3010, 0x40}, //[6]enable ULPM as GPIO controlled by register
541 {0x5045, 0x05}, //[2] enable MWB manual bias
678 dev_dbg(&client->dev, "%s(%d) enter!\n", __func__, __LINE__); in ov5670_write_reg()
679 dev_dbg(&client->dev, "write reg(0x%x val:0x%x)!\n", reg, val); in ov5670_write_reg()
682 return -EINVAL; in ov5670_write_reg()
690 val_i = 4 - len; in ov5670_write_reg()
696 dev_err(&client->dev, in ov5670_write_reg()
698 return -EIO; in ov5670_write_reg()
711 dev_info(&client->dev, "delay(%d) ms !\n", delay_ms); in ov5670_write_array()
718 dev_err(&client->dev, "%s failed !\n", __func__); in ov5670_write_array()
734 return -EINVAL; in ov5670_read_reg()
738 msgs[0].addr = client->addr; in ov5670_read_reg()
744 msgs[1].addr = client->addr; in ov5670_read_reg()
747 msgs[1].buf = &data_be_p[4 - len]; in ov5670_read_reg()
749 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in ov5670_read_reg()
751 return -EIO; in ov5670_read_reg()
771 dev_info(&client->dev, "%s: 0x%04x is 0x%x instead of 0x%x\n", in ov5670_reg_verify()
782 return abs(mode->width - framefmt->width) + in ov5670_get_reso_dist()
783 abs(mode->height - framefmt->height); in ov5670_get_reso_dist()
790 struct v4l2_mbus_framefmt *framefmt = &fmt->format; in ov5670_find_best_fit()
793 int cur_best_fit_dist = -1; in ov5670_find_best_fit()
796 for (i = 0; i < ov5670->cfg_num; i++) { in ov5670_find_best_fit()
798 if (cur_best_fit_dist == -1 || dist < cur_best_fit_dist) { in ov5670_find_best_fit()
815 mutex_lock(&ov5670->mutex); in ov5670_set_fmt()
818 fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; in ov5670_set_fmt()
819 fmt->format.width = mode->width; in ov5670_set_fmt()
820 fmt->format.height = mode->height; in ov5670_set_fmt()
821 fmt->format.field = V4L2_FIELD_NONE; in ov5670_set_fmt()
822 if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { in ov5670_set_fmt()
824 *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; in ov5670_set_fmt()
826 mutex_unlock(&ov5670->mutex); in ov5670_set_fmt()
827 return -ENOTTY; in ov5670_set_fmt()
830 ov5670->cur_mode = mode; in ov5670_set_fmt()
831 h_blank = mode->hts_def - mode->width; in ov5670_set_fmt()
832 __v4l2_ctrl_modify_range(ov5670->hblank, h_blank, in ov5670_set_fmt()
834 vblank_def = mode->vts_def - mode->height; in ov5670_set_fmt()
835 __v4l2_ctrl_modify_range(ov5670->vblank, vblank_def, in ov5670_set_fmt()
836 OV5670_VTS_MAX - mode->height, in ov5670_set_fmt()
840 mutex_unlock(&ov5670->mutex); in ov5670_set_fmt()
850 const struct ov5670_mode *mode = ov5670->cur_mode; in ov5670_get_fmt()
852 mutex_lock(&ov5670->mutex); in ov5670_get_fmt()
853 if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { in ov5670_get_fmt()
855 fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); in ov5670_get_fmt()
857 mutex_unlock(&ov5670->mutex); in ov5670_get_fmt()
858 return -ENOTTY; in ov5670_get_fmt()
861 fmt->format.width = mode->width; in ov5670_get_fmt()
862 fmt->format.height = mode->height; in ov5670_get_fmt()
863 fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10; in ov5670_get_fmt()
864 fmt->format.field = V4L2_FIELD_NONE; in ov5670_get_fmt()
866 mutex_unlock(&ov5670->mutex); in ov5670_get_fmt()
875 if (code->index != 0) in ov5670_enum_mbus_code()
876 return -EINVAL; in ov5670_enum_mbus_code()
877 code->code = MEDIA_BUS_FMT_SBGGR10_1X10; in ov5670_enum_mbus_code()
888 if (fse->index >= ov5670->cfg_num) in ov5670_enum_frame_sizes()
889 return -EINVAL; in ov5670_enum_frame_sizes()
891 if (fse->code != MEDIA_BUS_FMT_SBGGR10_1X10) in ov5670_enum_frame_sizes()
892 return -EINVAL; in ov5670_enum_frame_sizes()
894 fse->min_width = supported_modes[fse->index].width; in ov5670_enum_frame_sizes()
895 fse->max_width = supported_modes[fse->index].width; in ov5670_enum_frame_sizes()
896 fse->max_height = supported_modes[fse->index].height; in ov5670_enum_frame_sizes()
897 fse->min_height = supported_modes[fse->index].height; in ov5670_enum_frame_sizes()
907 val = (pattern - 1) | OV5670_TEST_PATTERN_ENABLE; in ov5670_enable_test_pattern()
911 return ov5670_write_reg(ov5670->client, OV5670_REG_TEST_PATTERN, in ov5670_enable_test_pattern()
922 if (otp->flag & 0x80) { in ov5670_get_otp()
923 inf->fac.flag = 1; in ov5670_get_otp()
924 inf->fac.year = otp->year; in ov5670_get_otp()
925 inf->fac.month = otp->month; in ov5670_get_otp()
926 inf->fac.day = otp->day; in ov5670_get_otp()
928 for (i = 0; i < ARRAY_SIZE(ov5670_module_info) - 1; i++) { in ov5670_get_otp()
929 if (ov5670_module_info[i].id == otp->module_id) in ov5670_get_otp()
932 strscpy(inf->fac.module, ov5670_module_info[i].name, in ov5670_get_otp()
933 sizeof(inf->fac.module)); in ov5670_get_otp()
935 for (i = 0; i < ARRAY_SIZE(ov5670_lens_info) - 1; i++) { in ov5670_get_otp()
936 if (ov5670_lens_info[i].id == otp->lens_id) in ov5670_get_otp()
939 strscpy(inf->fac.lens, ov5670_lens_info[i].name, in ov5670_get_otp()
940 sizeof(inf->fac.lens)); in ov5670_get_otp()
944 if (otp->flag & 0x40) { in ov5670_get_otp()
945 rg = otp->rg_ratio; in ov5670_get_otp()
946 bg = otp->bg_ratio; in ov5670_get_otp()
948 inf->awb.flag = 1; in ov5670_get_otp()
949 inf->awb.r_value = rg; in ov5670_get_otp()
950 inf->awb.b_value = bg; in ov5670_get_otp()
951 inf->awb.gr_value = 0x200; in ov5670_get_otp()
952 inf->awb.gb_value = 0x200; in ov5670_get_otp()
954 inf->awb.golden_r_value = 0; in ov5670_get_otp()
955 inf->awb.golden_b_value = 0; in ov5670_get_otp()
956 inf->awb.golden_gr_value = 0; in ov5670_get_otp()
957 inf->awb.golden_gb_value = 0; in ov5670_get_otp()
965 const struct ov5670_mode *mode = ov5670->cur_mode; in ov5670_g_frame_interval()
967 mutex_lock(&ov5670->mutex); in ov5670_g_frame_interval()
968 fi->interval = mode->max_fps; in ov5670_g_frame_interval()
969 mutex_unlock(&ov5670->mutex); in ov5670_g_frame_interval()
977 struct ov5670_otp_info *otp = ov5670->otp; in ov5670_get_module_inf()
980 strscpy(inf->base.sensor, OV5670_NAME, sizeof(inf->base.sensor)); in ov5670_get_module_inf()
981 strscpy(inf->base.module, ov5670->module_name, in ov5670_get_module_inf()
982 sizeof(inf->base.module)); in ov5670_get_module_inf()
983 strscpy(inf->base.lens, ov5670->len_name, sizeof(inf->base.lens)); in ov5670_get_module_inf()
991 mutex_lock(&ov5670->mutex); in ov5670_set_awb_cfg()
992 memcpy(&ov5670->awb_cfg, cfg, sizeof(*cfg)); in ov5670_set_awb_cfg()
993 mutex_unlock(&ov5670->mutex); in ov5670_set_awb_cfg()
1009 ret = -ENOIOCTLCMD; in ov5670_ioctl()
1029 ret = -ENOMEM; in ov5670_compat_ioctl32()
1036 return -EFAULT; in ov5670_compat_ioctl32()
1043 ret = -ENOMEM; in ov5670_compat_ioctl32()
1048 return -EFAULT; in ov5670_compat_ioctl32()
1054 ret = -ENOIOCTLCMD; in ov5670_compat_ioctl32()
1062 /*--------------------------------------------------------------------------*/
1066 struct i2c_client *client = ov5670->client; in ov5670_apply_otp()
1067 struct ov5670_otp_info *otp_ptr = ov5670->otp; in ov5670_apply_otp()
1068 struct rkmodule_awb_cfg *awb_cfg = &ov5670->awb_cfg; in ov5670_apply_otp()
1073 if (awb_cfg->enable) { in ov5670_apply_otp()
1074 golden_g_value = (awb_cfg->golden_gb_value + in ov5670_apply_otp()
1075 awb_cfg->golden_gr_value) / 2; in ov5670_apply_otp()
1077 golden_rg_ratio = awb_cfg->golden_r_value * 0x200 in ov5670_apply_otp()
1079 golden_bg_ratio = awb_cfg->golden_b_value * 0x200 in ov5670_apply_otp()
1088 if (otp_ptr->flag & 0x40) { in ov5670_apply_otp()
1089 rg = otp_ptr->rg_ratio; in ov5670_apply_otp()
1090 bg = otp_ptr->bg_ratio; in ov5670_apply_otp()
1122 dev_info(&client->dev, "apply awb gain: 0x%x, 0x%x, 0x%x\n", in ov5670_apply_otp()
1132 ret = ov5670_write_array(ov5670->client, ov5670->cur_mode->reg_list); in __ov5670_start_stream()
1140 dev_info(&ov5670->client->dev, "%s:Check register value!\n", in __ov5670_start_stream()
1142 ret = ov5670_reg_verify(ov5670->client, ov5670_global_regs); in __ov5670_start_stream()
1146 ret = ov5670_reg_verify(ov5670->client, ov5670->cur_mode->reg_list); in __ov5670_start_stream()
1152 mutex_unlock(&ov5670->mutex); in __ov5670_start_stream()
1153 ret = v4l2_ctrl_handler_setup(&ov5670->ctrl_handler); in __ov5670_start_stream()
1154 mutex_lock(&ov5670->mutex); in __ov5670_start_stream()
1158 if (ov5670->otp) in __ov5670_start_stream()
1162 dev_info(&ov5670->client->dev, "APPly otp failed!\n"); in __ov5670_start_stream()
1164 ret = ov5670_write_reg(ov5670->client, OV5670_REG_CTRL_MODE, in __ov5670_start_stream()
1171 return ov5670_write_reg(ov5670->client, OV5670_REG_CTRL_MODE, in __ov5670_stop_stream()
1178 struct i2c_client *client = ov5670->client; in ov5670_s_stream()
1181 dev_info(&client->dev, "%s: on: %d, %dx%d@%d\n", __func__, on, in ov5670_s_stream()
1182 ov5670->cur_mode->width, in ov5670_s_stream()
1183 ov5670->cur_mode->height, in ov5670_s_stream()
1184 DIV_ROUND_CLOSEST(ov5670->cur_mode->max_fps.denominator, in ov5670_s_stream()
1185 ov5670->cur_mode->max_fps.numerator)); in ov5670_s_stream()
1187 mutex_lock(&ov5670->mutex); in ov5670_s_stream()
1189 if (on == ov5670->streaming) in ov5670_s_stream()
1193 dev_info(&client->dev, "stream on!!!\n"); in ov5670_s_stream()
1194 ret = pm_runtime_get_sync(&client->dev); in ov5670_s_stream()
1196 pm_runtime_put_noidle(&client->dev); in ov5670_s_stream()
1203 pm_runtime_put(&client->dev); in ov5670_s_stream()
1207 dev_info(&client->dev, "stream off!!!\n"); in ov5670_s_stream()
1209 pm_runtime_put(&client->dev); in ov5670_s_stream()
1212 ov5670->streaming = on; in ov5670_s_stream()
1215 mutex_unlock(&ov5670->mutex); in ov5670_s_stream()
1223 struct i2c_client *client = ov5670->client; in ov5670_s_power()
1226 dev_info(&client->dev, "%s(%d) on(%d)\n", __func__, __LINE__, on); in ov5670_s_power()
1227 mutex_lock(&ov5670->mutex); in ov5670_s_power()
1229 /* If the power state is not modified - no work to do. */ in ov5670_s_power()
1230 if (ov5670->power_on == !!on) in ov5670_s_power()
1234 ret = pm_runtime_get_sync(&client->dev); in ov5670_s_power()
1236 pm_runtime_put_noidle(&client->dev); in ov5670_s_power()
1240 ret = ov5670_write_array(ov5670->client, ov5670_global_regs); in ov5670_s_power()
1243 pm_runtime_put_noidle(&client->dev); in ov5670_s_power()
1247 ov5670->power_on = true; in ov5670_s_power()
1249 if (!IS_ERR(ov5670->reset_gpio)) in ov5670_s_power()
1250 gpiod_export(ov5670->reset_gpio, false); in ov5670_s_power()
1251 if (!IS_ERR(ov5670->pwdn_gpio)) in ov5670_s_power()
1252 gpiod_export(ov5670->pwdn_gpio, false); in ov5670_s_power()
1254 pm_runtime_put(&client->dev); in ov5670_s_power()
1255 ov5670->power_on = false; in ov5670_s_power()
1259 mutex_unlock(&ov5670->mutex); in ov5670_s_power()
1274 struct device *dev = &ov5670->client->dev; in __ov5670_power_on()
1276 if (!IS_ERR(ov5670->power_gpio)) in __ov5670_power_on()
1277 gpiod_set_value_cansleep(ov5670->power_gpio, 1); in __ov5670_power_on()
1281 if (!IS_ERR_OR_NULL(ov5670->pins_default)) { in __ov5670_power_on()
1282 ret = pinctrl_select_state(ov5670->pinctrl, in __ov5670_power_on()
1283 ov5670->pins_default); in __ov5670_power_on()
1287 ret = clk_set_rate(ov5670->xvclk, OV5670_XVCLK_FREQ); in __ov5670_power_on()
1290 if (clk_get_rate(ov5670->xvclk) != OV5670_XVCLK_FREQ) in __ov5670_power_on()
1292 ret = clk_prepare_enable(ov5670->xvclk); in __ov5670_power_on()
1294 dev_err(dev, "Failed to enable xvclk\n"); in __ov5670_power_on()
1298 ret = regulator_bulk_enable(OV5670_NUM_SUPPLIES, ov5670->supplies); in __ov5670_power_on()
1300 dev_err(dev, "Failed to enable regulators\n"); in __ov5670_power_on()
1304 if (!IS_ERR(ov5670->reset_gpio)) in __ov5670_power_on()
1305 gpiod_set_value_cansleep(ov5670->reset_gpio, 1); in __ov5670_power_on()
1307 if (!IS_ERR(ov5670->pwdn_gpio)) in __ov5670_power_on()
1308 gpiod_set_value_cansleep(ov5670->pwdn_gpio, 1); in __ov5670_power_on()
1311 if (!IS_ERR(ov5670->reset_gpio)) in __ov5670_power_on()
1312 gpiod_export(ov5670->reset_gpio, false); in __ov5670_power_on()
1313 if (!IS_ERR(ov5670->pwdn_gpio)) in __ov5670_power_on()
1314 gpiod_export(ov5670->pwdn_gpio, false); in __ov5670_power_on()
1323 clk_disable_unprepare(ov5670->xvclk); in __ov5670_power_on()
1331 struct device *dev = &ov5670->client->dev; in __ov5670_power_off()
1333 if (!IS_ERR(ov5670->pwdn_gpio)) in __ov5670_power_off()
1334 gpiod_set_value_cansleep(ov5670->pwdn_gpio, 0); in __ov5670_power_off()
1335 clk_disable_unprepare(ov5670->xvclk); in __ov5670_power_off()
1336 if (!IS_ERR(ov5670->reset_gpio)) in __ov5670_power_off()
1337 gpiod_set_value_cansleep(ov5670->reset_gpio, 0); in __ov5670_power_off()
1338 if (!IS_ERR_OR_NULL(ov5670->pins_sleep)) { in __ov5670_power_off()
1339 ret = pinctrl_select_state(ov5670->pinctrl, in __ov5670_power_off()
1340 ov5670->pins_sleep); in __ov5670_power_off()
1344 if (!IS_ERR(ov5670->power_gpio)) in __ov5670_power_off()
1345 gpiod_set_value_cansleep(ov5670->power_gpio, 0); in __ov5670_power_off()
1347 regulator_bulk_disable(OV5670_NUM_SUPPLIES, ov5670->supplies); in __ov5670_power_off()
1375 v4l2_subdev_get_try_format(sd, fh->pad, 0); in ov5670_open()
1378 mutex_lock(&ov5670->mutex); in ov5670_open()
1380 try_fmt->width = def_mode->width; in ov5670_open()
1381 try_fmt->height = def_mode->height; in ov5670_open()
1382 try_fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10; in ov5670_open()
1383 try_fmt->field = V4L2_FIELD_NONE; in ov5670_open()
1385 mutex_unlock(&ov5670->mutex); in ov5670_open()
1398 if (fie->index >= ov5670->cfg_num) in ov5670_enum_frame_interval()
1399 return -EINVAL; in ov5670_enum_frame_interval()
1401 fie->code = MEDIA_BUS_FMT_SBGGR10_1X10; in ov5670_enum_frame_interval()
1402 fie->width = supported_modes[fie->index].width; in ov5670_enum_frame_interval()
1403 fie->height = supported_modes[fie->index].height; in ov5670_enum_frame_interval()
1404 fie->interval = supported_modes[fie->index].max_fps; in ov5670_enum_frame_interval()
1412 u32 val = 1 << (OV5670_LANES - 1) | in ov5670_g_mbus_config()
1416 config->type = V4L2_MBUS_CSI2_DPHY; in ov5670_g_mbus_config()
1417 config->flags = val; in ov5670_g_mbus_config()
1463 struct ov5670 *ov5670 = container_of(ctrl->handler, in ov5670_set_ctrl()
1465 struct i2c_client *client = ov5670->client; in ov5670_set_ctrl()
1470 switch (ctrl->id) { in ov5670_set_ctrl()
1473 max = ov5670->cur_mode->height + ctrl->val - 4; in ov5670_set_ctrl()
1474 __v4l2_ctrl_modify_range(ov5670->exposure, in ov5670_set_ctrl()
1475 ov5670->exposure->minimum, max, in ov5670_set_ctrl()
1476 ov5670->exposure->step, in ov5670_set_ctrl()
1477 ov5670->exposure->default_value); in ov5670_set_ctrl()
1481 if (pm_runtime_get(&client->dev) <= 0) in ov5670_set_ctrl()
1484 switch (ctrl->id) { in ov5670_set_ctrl()
1488 ret = ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1490 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_EXPOSURE, in ov5670_set_ctrl()
1491 OV5670_REG_VALUE_24BIT, ctrl->val << 4); in ov5670_set_ctrl()
1492 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1494 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1500 ret = ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1503 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GAIN_L, in ov5670_set_ctrl()
1505 ctrl->val & OV5670_GAIN_L_MASK); in ov5670_set_ctrl()
1506 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GAIN_H, in ov5670_set_ctrl()
1508 (ctrl->val >> OV5670_GAIN_H_SHIFT) & in ov5670_set_ctrl()
1510 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1512 ret |= ov5670_write_reg(ov5670->client, OV5670_REG_GROUP, in ov5670_set_ctrl()
1517 ret = ov5670_write_reg(ov5670->client, OV5670_REG_VTS, in ov5670_set_ctrl()
1519 ctrl->val + ov5670->cur_mode->height); in ov5670_set_ctrl()
1522 ret = ov5670_enable_test_pattern(ov5670, ctrl->val); in ov5670_set_ctrl()
1525 dev_warn(&client->dev, "%s Unhandled id:0x%x, val:0x%x\n", in ov5670_set_ctrl()
1526 __func__, ctrl->id, ctrl->val); in ov5670_set_ctrl()
1530 pm_runtime_put(&client->dev); in ov5670_set_ctrl()
1548 handler = &ov5670->ctrl_handler; in ov5670_initialize_controls()
1549 mode = ov5670->cur_mode; in ov5670_initialize_controls()
1553 handler->lock = &ov5670->mutex; in ov5670_initialize_controls()
1558 ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov5670_initialize_controls()
1561 0, ov5670->pixel_rate, 1, ov5670->pixel_rate); in ov5670_initialize_controls()
1563 h_blank = mode->hts_def - mode->width; in ov5670_initialize_controls()
1564 ov5670->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov5670_initialize_controls()
1566 if (ov5670->hblank) in ov5670_initialize_controls()
1567 ov5670->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov5670_initialize_controls()
1569 vblank_def = mode->vts_def - mode->height; in ov5670_initialize_controls()
1570 ov5670->vblank = v4l2_ctrl_new_std(handler, &ov5670_ctrl_ops, in ov5670_initialize_controls()
1572 OV5670_VTS_MAX - mode->height, in ov5670_initialize_controls()
1575 exposure_max = mode->vts_def - 4; in ov5670_initialize_controls()
1576 ov5670->exposure = v4l2_ctrl_new_std(handler, &ov5670_ctrl_ops, in ov5670_initialize_controls()
1579 mode->exp_def); in ov5670_initialize_controls()
1581 ov5670->anal_gain = v4l2_ctrl_new_std(handler, &ov5670_ctrl_ops, in ov5670_initialize_controls()
1586 ov5670->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov5670_initialize_controls()
1588 ARRAY_SIZE(ov5670_test_pattern_menu) - 1, in ov5670_initialize_controls()
1591 if (handler->error) { in ov5670_initialize_controls()
1592 ret = handler->error; in ov5670_initialize_controls()
1593 dev_err(&ov5670->client->dev, in ov5670_initialize_controls()
1598 ov5670->subdev.ctrl_handler = handler; in ov5670_initialize_controls()
1612 struct device *dev = &ov5670->client->dev; in ov5670_otp_read()
1613 struct i2c_client *client = ov5670->client; in ov5670_otp_read()
1617 return -ENOMEM; in ov5670_otp_read()
1631 otp_ptr->flag = 0x80; /* valid info in OTP */ in ov5670_otp_read()
1632 ov5670_read_1byte(client, addr, &otp_ptr->module_id); in ov5670_otp_read()
1633 ov5670_read_1byte(client, addr + 1, &otp_ptr->lens_id); in ov5670_otp_read()
1634 ov5670_read_1byte(client, addr + 2, &otp_ptr->year); in ov5670_otp_read()
1635 ov5670_read_1byte(client, addr + 3, &otp_ptr->month); in ov5670_otp_read()
1636 ov5670_read_1byte(client, addr + 4, &otp_ptr->day); in ov5670_otp_read()
1638 otp_ptr->module_id, in ov5670_otp_read()
1639 otp_ptr->lens_id, in ov5670_otp_read()
1640 otp_ptr->year, in ov5670_otp_read()
1641 otp_ptr->month, in ov5670_otp_read()
1642 otp_ptr->day); in ov5670_otp_read()
1644 otp_ptr->flag = 0x00; /* not info in OTP */ in ov5670_otp_read()
1645 otp_ptr->module_id = 0x00; in ov5670_otp_read()
1646 otp_ptr->lens_id = 0x00; in ov5670_otp_read()
1647 otp_ptr->year = 0x00; in ov5670_otp_read()
1648 otp_ptr->month = 0x00; in ov5670_otp_read()
1649 otp_ptr->day = 0x00; in ov5670_otp_read()
1651 otp_ptr->module_id, in ov5670_otp_read()
1652 otp_ptr->lens_id, in ov5670_otp_read()
1653 otp_ptr->year, in ov5670_otp_read()
1654 otp_ptr->month, in ov5670_otp_read()
1655 otp_ptr->day); in ov5670_otp_read()
1670 otp_ptr->flag |= 0x40; /* valid info and AWB in OTP */ in ov5670_otp_read()
1672 ov5670_read_1byte(client, addr, &otp_ptr->rg_ratio); in ov5670_otp_read()
1673 otp_ptr->rg_ratio = (otp_ptr->rg_ratio << 2) + in ov5670_otp_read()
1675 ov5670_read_1byte(client, addr + 1, &otp_ptr->bg_ratio); in ov5670_otp_read()
1676 otp_ptr->bg_ratio = (otp_ptr->bg_ratio << 2) + in ov5670_otp_read()
1679 otp_ptr->rg_ratio, otp_ptr->bg_ratio); in ov5670_otp_read()
1681 otp_ptr->rg_ratio = 0x00; in ov5670_otp_read()
1682 otp_ptr->bg_ratio = 0x00; in ov5670_otp_read()
1684 otp_ptr->rg_ratio, otp_ptr->bg_ratio); in ov5670_otp_read()
1690 if (otp_ptr->flag) { in ov5670_otp_read()
1691 ov5670->otp = otp_ptr; in ov5670_otp_read()
1693 ov5670->otp = NULL; in ov5670_otp_read()
1705 struct i2c_client *client = ov5670->client; in ov5670_otp_check_read()
1741 struct device *dev = &ov5670->client->dev; in ov5670_check_sensor_id()
1749 return -ENODEV; in ov5670_check_sensor_id()
1762 ov5670->supplies[i].supply = ov5670_supply_names[i]; in ov5670_configure_regulators()
1764 return devm_regulator_bulk_get(&ov5670->client->dev, in ov5670_configure_regulators()
1766 ov5670->supplies); in ov5670_configure_regulators()
1771 struct device *dev = &ov5670->client->dev; in ov5670_parse_of()
1776 endpoint = of_graph_get_next_endpoint(dev->of_node, NULL); in ov5670_parse_of()
1779 return -EINVAL; in ov5670_parse_of()
1782 rval = fwnode_property_read_u32_array(fwnode, "data-lanes", NULL, 0); in ov5670_parse_of()
1785 return -1; in ov5670_parse_of()
1788 ov5670->lane_num = rval; in ov5670_parse_of()
1789 if (ov5670->lane_num == 2) { in ov5670_parse_of()
1790 ov5670->cur_mode = &supported_modes_2lane[0]; in ov5670_parse_of()
1792 ov5670->cfg_num = ARRAY_SIZE(supported_modes_2lane); in ov5670_parse_of()
1795 ov5670->pixel_rate = MIPI_FREQ * 2U * ov5670->lane_num / 8U; in ov5670_parse_of()
1797 ov5670->lane_num, ov5670->pixel_rate); in ov5670_parse_of()
1799 dev_err(dev, "unsupported lane_num(%d)\n", ov5670->lane_num); in ov5670_parse_of()
1800 return -1; in ov5670_parse_of()
1809 struct device *dev = &client->dev; in ov5670_probe()
1810 struct device_node *node = dev->of_node; in ov5670_probe()
1823 return -ENOMEM; in ov5670_probe()
1826 &ov5670->module_index); in ov5670_probe()
1829 ov5670->module_index = 0; in ov5670_probe()
1832 &ov5670->module_facing); in ov5670_probe()
1834 &ov5670->module_name); in ov5670_probe()
1836 &ov5670->len_name); in ov5670_probe()
1839 return -EINVAL; in ov5670_probe()
1842 ov5670->client = client; in ov5670_probe()
1844 ov5670->xvclk = devm_clk_get(dev, "xvclk"); in ov5670_probe()
1845 if (IS_ERR(ov5670->xvclk)) { in ov5670_probe()
1847 return -EINVAL; in ov5670_probe()
1850 ov5670->power_gpio = devm_gpiod_get(dev, "power", GPIOD_OUT_LOW); in ov5670_probe()
1851 if (IS_ERR(ov5670->power_gpio)) in ov5670_probe()
1852 dev_warn(dev, "Failed to get power-gpios, maybe no use\n"); in ov5670_probe()
1854 ov5670->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov5670_probe()
1855 if (IS_ERR(ov5670->reset_gpio)) in ov5670_probe()
1856 dev_warn(dev, "Failed to get reset-gpios, maybe no use\n"); in ov5670_probe()
1858 ov5670->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov5670_probe()
1859 if (IS_ERR(ov5670->pwdn_gpio)) in ov5670_probe()
1860 dev_warn(dev, "Failed to get pwdn-gpios\n"); in ov5670_probe()
1869 return -EINVAL; in ov5670_probe()
1871 ov5670->pinctrl = devm_pinctrl_get(dev); in ov5670_probe()
1872 if (!IS_ERR(ov5670->pinctrl)) { in ov5670_probe()
1873 ov5670->pins_default = in ov5670_probe()
1874 pinctrl_lookup_state(ov5670->pinctrl, in ov5670_probe()
1876 if (IS_ERR(ov5670->pins_default)) in ov5670_probe()
1879 ov5670->pins_sleep = in ov5670_probe()
1880 pinctrl_lookup_state(ov5670->pinctrl, in ov5670_probe()
1882 if (IS_ERR(ov5670->pins_sleep)) in ov5670_probe()
1886 mutex_init(&ov5670->mutex); in ov5670_probe()
1888 sd = &ov5670->subdev; in ov5670_probe()
1900 dev_info(&client->dev, "%s(%d) Check id failed\n" in ov5670_probe()
1909 sd->internal_ops = &ov5670_internal_ops; in ov5670_probe()
1910 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in ov5670_probe()
1913 ov5670->pad.flags = MEDIA_PAD_FL_SOURCE; in ov5670_probe()
1914 sd->entity.function = MEDIA_ENT_F_CAM_SENSOR; in ov5670_probe()
1915 ret = media_entity_pads_init(&sd->entity, 1, &ov5670->pad); in ov5670_probe()
1921 if (strcmp(ov5670->module_facing, "back") == 0) in ov5670_probe()
1926 snprintf(sd->name, sizeof(sd->name), "m%02d_%s_%s %s", in ov5670_probe()
1927 ov5670->module_index, facing, in ov5670_probe()
1928 OV5670_NAME, dev_name(sd->dev)); in ov5670_probe()
1944 media_entity_cleanup(&sd->entity); in ov5670_probe()
1949 v4l2_ctrl_handler_free(&ov5670->ctrl_handler); in ov5670_probe()
1951 mutex_destroy(&ov5670->mutex); in ov5670_probe()
1963 media_entity_cleanup(&sd->entity); in ov5670_remove()
1965 v4l2_ctrl_handler_free(&ov5670->ctrl_handler); in ov5670_remove()
1966 mutex_destroy(&ov5670->mutex); in ov5670_remove()
1968 pm_runtime_disable(&client->dev); in ov5670_remove()
1969 if (!pm_runtime_status_suspended(&client->dev)) in ov5670_remove()
1971 pm_runtime_set_suspended(&client->dev); in ov5670_remove()