2 * imx274.c - imx274 sensor driver
4 * Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #include <linux/slab.h>
20 #include <linux/uaccess.h>
21 #include <linux/gpio.h>
22 #include <linux/module.h>
24 #include <linux/seq_file.h>
26 #include <linux/of_device.h>
27 #include <linux/of_gpio.h>
29 #include <media/camera_common.h>
30 #include <media/imx274.h>
32 #include "imx274_mode_tbls.h"
34 #define IMX274_MAX_COARSE_DIFF 10
36 #define IMX274_GAIN_SHIFT 8
37 #define IMX274_MIN_GAIN (1 << IMX274_GAIN_SHIFT)
38 #define IMX274_MAX_GAIN (23 << IMX274_GAIN_SHIFT)
39 #define IMX274_MIN_FRAME_LENGTH (0x8ED)
40 #define IMX274_MAX_FRAME_LENGTH (0xB292)
41 #define IMX274_MIN_EXPOSURE_COARSE (0x0001)
42 #define IMX274_MAX_EXPOSURE_COARSE \
43 (IMX274_MAX_FRAME_LENGTH-IMX274_MAX_COARSE_DIFF)
45 #define IMX274_DEFAULT_GAIN IMX274_MIN_GAIN
46 #define IMX274_DEFAULT_FRAME_LENGTH (0x111B)
47 #define IMX274_DEFAULT_EXPOSURE_COARSE \
48 (IMX274_DEFAULT_FRAME_LENGTH-IMX274_MAX_COARSE_DIFF)
50 #define IMX274_DEFAULT_MODE IMX274_MODE_3840X2160
52 #define IMX274_DEFAULT_WIDTH 3840
53 #define IMX274_DEFAULT_HEIGHT 2160
54 #define IMX274_DEFAULT_DATAFMT V4L2_MBUS_FMT_SRGGB10_1X10
55 #define IMX274_DEFAULT_CLK_FREQ 24000000
58 struct camera_common_power_rail power;
60 struct v4l2_ctrl_handler ctrl_handler;
61 struct camera_common_eeprom_data eeprom[IMX274_EEPROM_NUM_BLOCKS];
62 u8 eeprom_buf[IMX274_EEPROM_SIZE];
63 struct i2c_client *i2c_client;
64 struct v4l2_subdev *subdev;
69 struct regmap *regmap;
70 struct camera_common_data *s_data;
71 struct camera_common_pdata *pdata;
72 struct v4l2_ctrl *ctrls[];
75 static const struct regmap_config sensor_regmap_config = {
78 .cache_type = REGCACHE_RBTREE,
81 static int imx274_g_volatile_ctrl(struct v4l2_ctrl *ctrl);
82 static int imx274_s_ctrl(struct v4l2_ctrl *ctrl);
84 static const struct v4l2_ctrl_ops imx274_ctrl_ops = {
85 .g_volatile_ctrl = imx274_g_volatile_ctrl,
86 .s_ctrl = imx274_s_ctrl,
89 static struct v4l2_ctrl_config ctrl_config_list[] = {
90 /* Do not change the name field for the controls! */
92 .ops = &imx274_ctrl_ops,
95 .type = V4L2_CTRL_TYPE_INTEGER,
96 .flags = V4L2_CTRL_FLAG_SLIDER,
97 .min = IMX274_MIN_GAIN,
98 .max = IMX274_MAX_GAIN,
99 .def = IMX274_DEFAULT_GAIN,
103 .ops = &imx274_ctrl_ops,
104 .id = V4L2_CID_FRAME_LENGTH,
105 .name = "Frame Length",
106 .type = V4L2_CTRL_TYPE_INTEGER,
107 .flags = V4L2_CTRL_FLAG_SLIDER,
108 .min = IMX274_MIN_FRAME_LENGTH,
109 .max = IMX274_MAX_FRAME_LENGTH,
110 .def = IMX274_DEFAULT_FRAME_LENGTH,
114 .ops = &imx274_ctrl_ops,
115 .id = V4L2_CID_COARSE_TIME,
116 .name = "Coarse Time",
117 .type = V4L2_CTRL_TYPE_INTEGER,
118 .flags = V4L2_CTRL_FLAG_SLIDER,
119 .min = IMX274_MIN_EXPOSURE_COARSE,
120 .max = IMX274_MAX_EXPOSURE_COARSE,
121 .def = IMX274_DEFAULT_EXPOSURE_COARSE,
125 .ops = &imx274_ctrl_ops,
126 .id = V4L2_CID_COARSE_TIME_SHORT,
127 .name = "Coarse Time Short",
128 .type = V4L2_CTRL_TYPE_INTEGER,
129 .flags = V4L2_CTRL_FLAG_SLIDER,
130 .min = IMX274_MIN_EXPOSURE_COARSE,
131 .max = IMX274_MAX_EXPOSURE_COARSE,
132 .def = IMX274_DEFAULT_EXPOSURE_COARSE,
136 .ops = &imx274_ctrl_ops,
137 .id = V4L2_CID_GROUP_HOLD,
138 .name = "Group Hold",
139 .type = V4L2_CTRL_TYPE_INTEGER_MENU,
141 .max = ARRAY_SIZE(switch_ctrl_qmenu) - 1,
144 .qmenu_int = switch_ctrl_qmenu,
147 .ops = &imx274_ctrl_ops,
148 .id = V4L2_CID_HDR_EN,
149 .name = "HDR enable",
150 .type = V4L2_CTRL_TYPE_INTEGER_MENU,
152 .max = ARRAY_SIZE(switch_ctrl_qmenu) - 1,
155 .qmenu_int = switch_ctrl_qmenu,
158 .ops = &imx274_ctrl_ops,
159 .id = V4L2_CID_EEPROM_DATA,
160 .name = "EEPROM Data",
161 .type = V4L2_CTRL_TYPE_STRING,
162 .flags = V4L2_CTRL_FLAG_VOLATILE,
164 .max = IMX274_EEPROM_STR_SIZE,
168 .ops = &imx274_ctrl_ops,
169 .id = V4L2_CID_OTP_DATA,
171 .type = V4L2_CTRL_TYPE_STRING,
172 .flags = V4L2_CTRL_FLAG_READ_ONLY,
174 .max = IMX274_OTP_STR_SIZE,
178 .ops = &imx274_ctrl_ops,
179 .id = V4L2_CID_FUSE_ID,
181 .type = V4L2_CTRL_TYPE_STRING,
182 .flags = V4L2_CTRL_FLAG_READ_ONLY,
184 .max = IMX274_FUSE_ID_STR_SIZE,
189 static inline void imx274_get_vmax_regs(imx274_reg *regs,
192 regs->addr = IMX274_VMAX_ADDR_MSB;
193 regs->val = (vmax >> 8) & 0xff;
194 (regs + 1)->addr = IMX274_VMAX_ADDR_LSB;
195 (regs + 1)->val = (vmax) & 0xff;
198 static inline void imx274_get_shr_regs(imx274_reg *regs,
201 regs->addr = IMX274_SHR_ADDR_MSB;
202 regs->val = (shr >> 8) & 0xff;
203 (regs + 1)->addr = IMX274_SHR_ADDR_LSB;
204 (regs + 1)->val = (shr) & 0xff;
207 static inline void imx274_get_gain_reg(imx274_reg *regs,
210 regs->addr = IMX274_GAIN_ADDR_MSB;
211 regs->val = (gain >> 8) & 0xff;
212 (regs + 1)->addr = IMX274_GAIN_ADDR_LSB;
213 (regs + 1)->val = (gain) & 0xff;
216 static int test_mode;
217 module_param(test_mode, int, 0644);
219 static inline int imx274_read_reg(struct camera_common_data *s_data,
222 struct imx274 *priv = (struct imx274 *)s_data->priv;
223 return regmap_read(priv->regmap, addr, (unsigned int *) val);
226 static int imx274_write_reg(struct camera_common_data *s_data, u16 addr, u8 val)
229 struct imx274 *priv = (struct imx274 *)s_data->priv;
231 err = regmap_write(priv->regmap, addr, val);
233 pr_err("%s:i2c write failed, %x = %x\n",
234 __func__, addr, val);
239 static int imx274_write_table(struct imx274 *priv,
240 const imx274_reg table[])
242 return regmap_util_write_table_8(priv->regmap,
245 IMX274_TABLE_WAIT_MS,
249 static int imx274_power_on(struct camera_common_data *s_data)
252 struct imx274 *priv = (struct imx274 *)s_data->priv;
253 struct camera_common_power_rail *pw = &priv->power;
255 dev_dbg(&priv->i2c_client->dev, "%s: power on\n", __func__);
257 if (priv->pdata && priv->pdata->power_on) {
258 err = priv->pdata->power_on(pw);
260 pr_err("%s failed.\n", __func__);
262 pw->state = SWITCH_ON;
267 gpio_set_value(pw->reset_gpio, 0);
269 gpio_set_value(pw->af_gpio, 1);
271 gpio_set_value(pw->pwdn_gpio, 0);
272 usleep_range(10, 20);
276 err = regulator_enable(pw->dvdd);
278 goto imx274_dvdd_fail;
281 err = regulator_enable(pw->iovdd);
283 goto imx274_iovdd_fail;
286 err = regulator_enable(pw->avdd);
288 goto imx274_avdd_fail;
292 gpio_set_value(pw->reset_gpio, 1);
294 gpio_set_value(pw->pwdn_gpio, 1);
296 usleep_range(300, 310);
298 pw->state = SWITCH_ON;
303 gpio_set_value(pw->af_gpio, 0);
306 regulator_disable(pw->dvdd);
309 regulator_disable(pw->iovdd);
311 pr_err("%s failed.\n", __func__);
315 static int imx274_power_off(struct camera_common_data *s_data)
318 struct imx274 *priv = (struct imx274 *)s_data->priv;
319 struct camera_common_power_rail *pw = &priv->power;
323 dev_dbg(&priv->i2c_client->dev, "%s: power off\n", __func__);
325 if (priv->pdata->power_off) {
326 err = priv->pdata->power_off(pw);
328 pr_err("%s failed.\n", __func__);
337 gpio_set_value(pw->reset_gpio, 0);
339 gpio_set_value(pw->af_gpio, 0);
341 gpio_set_value(pw->pwdn_gpio, 0);
345 regulator_disable(pw->avdd);
347 regulator_disable(pw->iovdd);
349 regulator_disable(pw->dvdd);
352 pw->state = SWITCH_OFF;
356 static int imx274_power_put(struct imx274 *priv)
358 struct camera_common_power_rail *pw = &priv->power;
362 if (likely(pw->avdd))
363 regulator_put(pw->avdd);
365 if (likely(pw->iovdd))
366 regulator_put(pw->iovdd);
368 if (likely(pw->dvdd))
369 regulator_put(pw->dvdd);
378 static int imx274_power_get(struct imx274 *priv)
380 struct camera_common_power_rail *pw = &priv->power;
381 struct camera_common_pdata *pdata = priv->pdata;
382 const char *mclk_name;
383 const char *parentclk_name;
387 mclk_name = priv->pdata->mclk_name ?
388 priv->pdata->mclk_name : "cam_mclk1";
389 pw->mclk = devm_clk_get(&priv->i2c_client->dev, mclk_name);
390 if (IS_ERR(pw->mclk)) {
391 dev_err(&priv->i2c_client->dev,
392 "unable to get clock %s\n", mclk_name);
393 return PTR_ERR(pw->mclk);
396 parentclk_name = priv->pdata->parentclk_name;
397 if (parentclk_name) {
398 parent = devm_clk_get(&priv->i2c_client->dev, parentclk_name);
399 if (IS_ERR(parent)) {
400 dev_err(&priv->i2c_client->dev,
401 "unable to get parent clcok %s",
404 clk_set_parent(pw->mclk, parent);
408 err |= camera_common_regulator_get(priv->i2c_client,
409 &pw->avdd, pdata->regulators.avdd);
411 err |= camera_common_regulator_get(priv->i2c_client,
412 &pw->dvdd, pdata->regulators.dvdd);
414 err |= camera_common_regulator_get(priv->i2c_client,
415 &pw->iovdd, pdata->regulators.iovdd);
418 pw->reset_gpio = pdata->reset_gpio;
419 pw->af_gpio = pdata->af_gpio;
420 pw->pwdn_gpio = pdata->pwdn_gpio;
423 pw->state = SWITCH_OFF;
427 static int imx274_set_gain(struct imx274 *priv, s32 val);
428 static int imx274_set_frame_length(struct imx274 *priv, s32 val);
429 static int imx274_set_coarse_time(struct imx274 *priv, s32 val);
431 static int imx274_s_stream(struct v4l2_subdev *sd, int enable)
433 struct i2c_client *client = v4l2_get_subdevdata(sd);
434 struct camera_common_data *s_data = to_camera_common_data(client);
435 struct imx274 *priv = (struct imx274 *)s_data->priv;
436 struct v4l2_control control;
439 dev_dbg(&client->dev, "%s++\n", __func__);
441 imx274_write_table(priv, mode_table[IMX274_MODE_STOP_STREAM]);
443 dev_dbg(&client->dev, "%s mode[%d]\n", __func__, s_data->mode);
445 err = imx274_write_table(priv, mode_table[s_data->mode]);
449 /* write list of override regs for the asking frame length, */
450 /* coarse integration time, and gain. */
452 control.id = V4L2_CID_GAIN;
453 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
454 err |= imx274_set_gain(priv, control.value);
456 dev_dbg(&client->dev, "%s: error gain override\n", __func__);
458 control.id = V4L2_CID_FRAME_LENGTH;
459 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
460 err |= imx274_set_frame_length(priv, control.value);
462 dev_dbg(&client->dev,
463 "%s: error frame length override\n", __func__);
465 control.id = V4L2_CID_COARSE_TIME;
466 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
467 err |= imx274_set_coarse_time(priv, control.value);
469 dev_dbg(&client->dev,
470 "%s: error coarse time override\n", __func__);
473 err = imx274_write_table(priv,
474 mode_table[IMX274_MODE_TEST_PATTERN]);
476 err = imx274_write_table(priv, mode_table[IMX274_MODE_START_STREAM]);
483 dev_dbg(&client->dev, "%s: error setting stream\n", __func__);
487 static int imx274_get_fmt(struct v4l2_subdev *sd,
488 struct v4l2_subdev_fh *fh,
489 struct v4l2_subdev_format *format)
491 return camera_common_g_fmt(sd, &format->format);
494 static int imx274_set_fmt(struct v4l2_subdev *sd,
495 struct v4l2_subdev_fh *fh,
496 struct v4l2_subdev_format *format)
500 if (format->which == V4L2_SUBDEV_FORMAT_TRY)
501 ret = camera_common_try_fmt(sd, &format->format);
503 ret = camera_common_s_fmt(sd, &format->format);
508 static int imx274_g_input_status(struct v4l2_subdev *sd, u32 *status)
510 struct i2c_client *client = v4l2_get_subdevdata(sd);
511 struct camera_common_data *s_data = to_camera_common_data(client);
512 struct imx274 *priv = (struct imx274 *)s_data->priv;
513 struct camera_common_power_rail *pw = &priv->power;
515 *status = pw->state == SWITCH_ON;
519 static struct v4l2_subdev_video_ops imx274_subdev_video_ops = {
520 .s_stream = imx274_s_stream,
521 .s_mbus_fmt = camera_common_s_fmt,
522 .g_mbus_fmt = camera_common_g_fmt,
523 .try_mbus_fmt = camera_common_try_fmt,
524 .enum_mbus_fmt = camera_common_enum_fmt,
525 .g_mbus_config = camera_common_g_mbus_config,
526 .enum_framesizes = camera_common_enum_framesizes,
527 .enum_frameintervals = camera_common_enum_frameintervals,
528 .g_input_status = imx274_g_input_status,
531 static struct v4l2_subdev_core_ops imx274_subdev_core_ops = {
532 .s_power = camera_common_s_power,
535 static struct v4l2_subdev_pad_ops imx274_subdev_pad_ops = {
536 .enum_mbus_code = camera_common_enum_mbus_code,
537 .set_fmt = imx274_set_fmt,
538 .get_fmt = imx274_get_fmt,
541 static struct v4l2_subdev_ops imx274_subdev_ops = {
542 .core = &imx274_subdev_core_ops,
543 .video = &imx274_subdev_video_ops,
544 .pad = &imx274_subdev_pad_ops,
547 static struct of_device_id imx274_of_match[] = {
548 { .compatible = "nvidia,imx274", },
552 static struct camera_common_sensor_ops imx274_common_ops = {
553 .power_on = imx274_power_on,
554 .power_off = imx274_power_off,
555 .write_reg = imx274_write_reg,
556 .read_reg = imx274_read_reg,
559 static int imx274_set_group_hold(struct imx274 *priv)
562 int gh_prev = switch_ctrl_qmenu[priv->group_hold_prev];
564 if (priv->group_hold_en == true && gh_prev == SWITCH_OFF) {
565 err = imx274_write_reg(priv->s_data,
566 IMX274_GROUP_HOLD_ADDR, 0x1);
569 priv->group_hold_prev = 1;
570 } else if (priv->group_hold_en == false && gh_prev == SWITCH_ON) {
571 err = imx274_write_reg(priv->s_data,
572 IMX274_GROUP_HOLD_ADDR, 0x0);
575 priv->group_hold_prev = 0;
581 dev_dbg(&priv->i2c_client->dev,
582 "%s: Group hold control error\n", __func__);
586 static int imx274_set_gain(struct imx274 *priv, s32 val)
588 imx274_reg reg_list[2];
593 dev_dbg(&priv->i2c_client->dev,
594 "%s: val: %d\n", __func__, val);
596 if (val < IMX274_MIN_GAIN)
597 val = IMX274_MIN_GAIN;
598 else if (val > IMX274_MAX_GAIN)
599 val = IMX274_MAX_GAIN;
601 gain = 2048 - (2048 * IMX274_MIN_GAIN / val);
603 imx274_get_gain_reg(reg_list, gain);
604 imx274_set_group_hold(priv);
606 /* writing analog gain */
607 for (i = 0; i < 2; i++) {
608 err = imx274_write_reg(priv->s_data, reg_list[i].addr,
617 dev_dbg(&priv->i2c_client->dev,
618 "%s: GAIN control error\n", __func__);
622 static int imx274_set_frame_length(struct imx274 *priv, s32 val)
624 imx274_reg reg_list[2];
632 dev_dbg(&priv->i2c_client->dev,
633 "%s: val: %u\n", __func__, val);
635 frame_length = (u32)val;
637 frame_rate = (u32)(IMX274_PIXEL_CLK_HZ /
638 (u32)(frame_length * IMX274_LINE_LENGTH));
640 imx274_read_reg(priv->s_data, IMX274_SVR_ADDR, &svr);
642 vmax = (u32)(72000000 /
643 (u32)(frame_rate * IMX274_HMAX * (svr + 1))) - 12;
645 imx274_get_vmax_regs(reg_list, vmax);
647 imx274_set_group_hold(priv);
649 for (i = 0; i < 2; i++) {
650 err = imx274_write_reg(priv->s_data, reg_list[i].addr,
656 dev_dbg(&priv->i2c_client->dev,
657 "%s: frame_rate: %d vmax: %u\n", __func__, frame_rate, vmax);
661 dev_info(&priv->i2c_client->dev,
662 "%s: FRAME_LENGTH control error\n", __func__);
666 static int imx274_calculate_shr(struct imx274 *priv, u32 rep)
676 imx274_read_reg(priv->s_data, IMX274_SVR_ADDR, &svr);
678 imx274_read_reg(priv->s_data, IMX274_VMAX_ADDR_LSB, &vmax_l);
679 imx274_read_reg(priv->s_data, IMX274_VMAX_ADDR_MSB, &vmax_m);
681 vmax = ((vmax_m << 8) + vmax_l);
683 min = IMX274_MODE1_SHR_MIN;
684 max = ((svr + 1) * IMX274_VMAX) - 4;
686 shr = vmax * (svr + 1) -
687 (rep * IMX274_ET_FACTOR - IMX274_MODE1_OFFSET) /
696 dev_dbg(&priv->i2c_client->dev,
697 "%s: shr: %u vmax: %d\n", __func__, shr, vmax);
701 static int imx274_set_coarse_time(struct imx274 *priv, s32 val)
703 imx274_reg reg_list[2];
711 dev_dbg(&priv->i2c_client->dev,
712 "%s: val: %d\n", __func__, coarse_time);
714 shr = imx274_calculate_shr(priv, coarse_time);
716 imx274_get_shr_regs(reg_list, shr);
717 imx274_set_group_hold(priv);
719 for (i = 0; i < 2; i++) {
720 err = imx274_write_reg(priv->s_data, reg_list[i].addr,
729 dev_dbg(&priv->i2c_client->dev,
730 "%s: COARSE_TIME control error\n", __func__);
734 static int imx274_eeprom_device_release(struct imx274 *priv)
738 for (i = 0; i < IMX274_EEPROM_NUM_BLOCKS; i++) {
739 if (priv->eeprom[i].i2c_client != NULL) {
740 i2c_unregister_device(priv->eeprom[i].i2c_client);
741 priv->eeprom[i].i2c_client = NULL;
748 static int imx274_eeprom_device_init(struct imx274 *priv)
750 char *dev_name = "eeprom_imx274";
751 static struct regmap_config eeprom_regmap_config = {
760 for (i = 0; i < IMX274_EEPROM_NUM_BLOCKS; i++) {
761 priv->eeprom[i].adap = i2c_get_adapter(
762 priv->i2c_client->adapter->nr);
763 memset(&priv->eeprom[i].brd, 0, sizeof(priv->eeprom[i].brd));
764 strncpy(priv->eeprom[i].brd.type, dev_name,
765 sizeof(priv->eeprom[i].brd.type));
766 priv->eeprom[i].brd.addr = IMX274_EEPROM_ADDRESS + i;
767 priv->eeprom[i].i2c_client = i2c_new_device(
768 priv->eeprom[i].adap, &priv->eeprom[i].brd);
770 priv->eeprom[i].regmap = devm_regmap_init_i2c(
771 priv->eeprom[i].i2c_client, &eeprom_regmap_config);
772 if (IS_ERR(priv->eeprom[i].regmap)) {
773 err = PTR_ERR(priv->eeprom[i].regmap);
774 imx274_eeprom_device_release(priv);
782 static int imx274_read_eeprom(struct imx274 *priv,
783 struct v4l2_ctrl *ctrl)
787 for (i = 0; i < IMX274_EEPROM_NUM_BLOCKS; i++) {
788 err = regmap_bulk_read(priv->eeprom[i].regmap, 0,
789 &priv->eeprom_buf[i * IMX274_EEPROM_BLOCK_SIZE],
790 IMX274_EEPROM_BLOCK_SIZE);
795 for (i = 0; i < IMX274_EEPROM_SIZE; i++)
796 sprintf(&ctrl->string[i*2], "%02x",
797 priv->eeprom_buf[i]);
801 static int imx274_write_eeprom(struct imx274 *priv,
809 for (i = 0; i < IMX274_EEPROM_SIZE; i++) {
810 curr[0] = string[i*2];
811 curr[1] = string[i*2+1];
814 err = kstrtol(curr, 16, &data);
816 dev_err(&priv->i2c_client->dev,
817 "invalid eeprom string\n");
821 priv->eeprom_buf[i] = (u8)data;
822 err = regmap_write(priv->eeprom[i >> 8].regmap,
831 static int imx274_read_otp_page(struct imx274 *priv,
832 u8 *buf, int page, u16 addr, int size)
837 err = imx274_write_reg(priv->s_data, IMX274_OTP_PAGE_NUM_ADDR, page);
840 err = imx274_write_reg(priv->s_data, IMX274_OTP_CTRL_ADDR, 0x01);
843 err = imx274_read_reg(priv->s_data, IMX274_OTP_STATUS_ADDR, &status);
846 if (status == IMX274_OTP_STATUS_IN_PROGRESS) {
847 dev_err(&priv->i2c_client->dev,
848 "another OTP read in progress\n");
852 err = regmap_bulk_read(priv->regmap, addr, buf, size);
856 err = imx274_read_reg(priv->s_data, IMX274_OTP_STATUS_ADDR, &status);
859 if (status == IMX274_OTP_STATUS_READ_FAIL) {
860 dev_err(&priv->i2c_client->dev, "fuse id read error\n");
867 static int imx274_verify_streaming(struct imx274 *priv)
871 err = camera_common_s_power(priv->subdev, true);
875 err = imx274_s_stream(priv->subdev, true);
880 imx274_s_stream(priv->subdev, false);
881 camera_common_s_power(priv->subdev, false);
886 static int imx274_otp_setup(struct imx274 *priv)
890 struct v4l2_ctrl *ctrl;
891 u8 otp_buf[IMX274_OTP_SIZE];
895 err = camera_common_s_power(priv->subdev, true);
899 for (i = 0; i < IMX274_OTP_NUM_PAGES; i++) {
900 err = imx274_read_otp_page(priv,
901 &otp_buf[i * IMX274_OTP_PAGE_SIZE],
903 IMX274_OTP_PAGE_START_ADDR,
904 IMX274_OTP_PAGE_SIZE);
909 ctrl = v4l2_ctrl_find(&priv->ctrl_handler, V4L2_CID_OTP_DATA);
911 dev_err(&priv->i2c_client->dev,
912 "could not find device ctrl.\n");
917 dev_err(&priv->i2c_client->dev, "%s error read otp bank\n",
919 ctrl->flags = V4L2_CTRL_FLAG_DISABLED;
923 for (i = 0; i < IMX274_OTP_SIZE; i++)
924 sprintf(&ctrl->string[i*2], "%02x",
926 ctrl->cur.string = ctrl->string;
928 err = camera_common_s_power(priv->subdev, false);
935 static int imx274_fuse_id_setup(struct imx274 *priv)
939 struct v4l2_ctrl *ctrl;
940 u8 fuse_id[IMX274_FUSE_ID_SIZE];
944 err = camera_common_s_power(priv->subdev, true);
948 err = imx274_read_otp_page(priv,
950 IMX274_FUSE_ID_OTP_PAGE,
951 IMX274_FUSE_ID_OTP_ROW_ADDR,
952 IMX274_FUSE_ID_SIZE);
954 ctrl = v4l2_ctrl_find(&priv->ctrl_handler, V4L2_CID_FUSE_ID);
956 dev_err(&priv->i2c_client->dev,
957 "could not find device ctrl.\n");
962 dev_err(&priv->i2c_client->dev, "%s error read fuse id\n",
964 ctrl->flags = V4L2_CTRL_FLAG_DISABLED;
968 for (i = 0; i < IMX274_FUSE_ID_SIZE; i++)
969 sprintf(&ctrl->string[i*2], "%02x",
971 ctrl->cur.string = ctrl->string;
973 err = camera_common_s_power(priv->subdev, false);
980 static int imx274_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
982 struct imx274 *priv =
983 container_of(ctrl->handler, struct imx274, ctrl_handler);
986 if (priv->power.state == SWITCH_OFF)
990 case V4L2_CID_EEPROM_DATA:
991 err = imx274_read_eeprom(priv, ctrl);
996 pr_err("%s: unknown ctrl id.\n", __func__);
1003 static int imx274_s_ctrl(struct v4l2_ctrl *ctrl)
1005 struct imx274 *priv =
1006 container_of(ctrl->handler, struct imx274, ctrl_handler);
1009 if (priv->power.state == SWITCH_OFF)
1014 err = imx274_set_gain(priv, ctrl->val);
1016 case V4L2_CID_FRAME_LENGTH:
1017 err = imx274_set_frame_length(priv, ctrl->val);
1019 case V4L2_CID_COARSE_TIME:
1020 err = imx274_set_coarse_time(priv, ctrl->val);
1022 case V4L2_CID_COARSE_TIME_SHORT:
1023 err = imx274_set_coarse_time(priv, ctrl->val);
1025 case V4L2_CID_GROUP_HOLD:
1026 if (switch_ctrl_qmenu[ctrl->val] == SWITCH_ON) {
1027 priv->group_hold_en = true;
1029 priv->group_hold_en = false;
1030 err = imx274_set_group_hold(priv);
1033 case V4L2_CID_EEPROM_DATA:
1034 if (!ctrl->string[0])
1036 err = imx274_write_eeprom(priv, ctrl->string);
1040 case V4L2_CID_HDR_EN:
1043 pr_err("%s: unknown ctrl id.\n", __func__);
1050 static int imx274_ctrls_init(struct imx274 *priv)
1052 struct i2c_client *client = priv->i2c_client;
1053 struct v4l2_ctrl *ctrl;
1058 dev_dbg(&client->dev, "%s++\n", __func__);
1060 num_ctrls = ARRAY_SIZE(ctrl_config_list);
1061 v4l2_ctrl_handler_init(&priv->ctrl_handler, num_ctrls);
1063 for (i = 0; i < num_ctrls; i++) {
1064 ctrl = v4l2_ctrl_new_custom(&priv->ctrl_handler,
1065 &ctrl_config_list[i], NULL);
1067 dev_err(&client->dev, "Failed to init %s ctrl\n",
1068 ctrl_config_list[i].name);
1072 if (ctrl_config_list[i].type == V4L2_CTRL_TYPE_STRING &&
1073 ctrl_config_list[i].flags & V4L2_CTRL_FLAG_READ_ONLY) {
1074 ctrl->string = devm_kzalloc(&client->dev,
1075 ctrl_config_list[i].max + 1, GFP_KERNEL);
1077 priv->ctrls[i] = ctrl;
1080 priv->num_ctrls = num_ctrls;
1081 priv->subdev->ctrl_handler = &priv->ctrl_handler;
1082 if (priv->ctrl_handler.error) {
1083 dev_err(&client->dev, "Error %d adding controls\n",
1084 priv->ctrl_handler.error);
1085 err = priv->ctrl_handler.error;
1089 err = v4l2_ctrl_handler_setup(&priv->ctrl_handler);
1091 dev_err(&client->dev,
1092 "Error %d setting default controls\n", err);
1096 err = imx274_otp_setup(priv);
1098 dev_err(&client->dev,
1099 "Error %d reading otp data\n", err);
1103 err = imx274_fuse_id_setup(priv);
1105 dev_err(&client->dev,
1106 "Error %d reading fuse id data\n", err);
1113 v4l2_ctrl_handler_free(&priv->ctrl_handler);
1117 MODULE_DEVICE_TABLE(of, imx274_of_match);
1119 static struct camera_common_pdata *imx274_parse_dt(struct i2c_client *client)
1121 struct device_node *node = client->dev.of_node;
1122 struct camera_common_pdata *board_priv_pdata;
1123 const struct of_device_id *match;
1129 match = of_match_device(imx274_of_match, &client->dev);
1131 dev_err(&client->dev, " Failed to find matching dt id\n");
1135 board_priv_pdata = devm_kzalloc(&client->dev,
1136 sizeof(*board_priv_pdata), GFP_KERNEL);
1137 if (!board_priv_pdata) {
1138 dev_err(&client->dev, "Failed to allocate pdata\n");
1143 err = camera_common_parse_clocks(client, board_priv_pdata);
1145 dev_err(&client->dev, "Failed to find clocks\n");
1149 err = of_property_read_string(node, "mclk",
1150 &board_priv_pdata->mclk_name);
1152 dev_err(&client->dev, "mclk not in DT\n");
1154 board_priv_pdata->reset_gpio = of_get_named_gpio(node,
1157 of_property_read_string(node, "avdd-reg",
1158 &board_priv_pdata->regulators.avdd);
1159 of_property_read_string(node, "dvdd-reg",
1160 &board_priv_pdata->regulators.dvdd);
1161 of_property_read_string(node, "iovdd-reg",
1162 &board_priv_pdata->regulators.iovdd);
1164 return board_priv_pdata;
1167 devm_kfree(&client->dev, board_priv_pdata);
1171 static int imx274_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
1173 struct i2c_client *client = v4l2_get_subdevdata(sd);
1174 dev_dbg(&client->dev, "%s:\n", __func__);
1180 static const struct v4l2_subdev_internal_ops imx274_subdev_internal_ops = {
1181 .open = imx274_open,
1184 static const struct media_entity_operations imx274_media_ops = {
1185 #ifdef CONFIG_MEDIA_CONTROLLER
1186 .link_validate = v4l2_subdev_link_validate,
1190 static int imx274_probe(struct i2c_client *client,
1191 const struct i2c_device_id *id)
1193 struct camera_common_data *common_data;
1194 struct device_node *node = client->dev.of_node;
1195 struct imx274 *priv;
1196 char debugfs_name[10];
1199 pr_info("[IMX274]: probing v4l2 sensor.\n");
1201 if (!IS_ENABLED(CONFIG_OF) || !node)
1204 common_data = devm_kzalloc(&client->dev,
1205 sizeof(struct camera_common_data), GFP_KERNEL);
1207 dev_err(&client->dev, "unable to allocate memory!\n");
1211 priv = devm_kzalloc(&client->dev,
1212 sizeof(struct imx274) + sizeof(struct v4l2_ctrl *) *
1213 ARRAY_SIZE(ctrl_config_list),
1216 dev_err(&client->dev, "unable to allocate memory!\n");
1220 priv->regmap = devm_regmap_init_i2c(client, &sensor_regmap_config);
1221 if (IS_ERR(priv->regmap)) {
1222 dev_err(&client->dev,
1223 "regmap init failed: %ld\n", PTR_ERR(priv->regmap));
1227 priv->pdata = imx274_parse_dt(client);
1229 dev_err(&client->dev, " unable to get platform data\n");
1233 common_data->ops = &imx274_common_ops;
1234 common_data->ctrl_handler = &priv->ctrl_handler;
1235 common_data->i2c_client = client;
1236 common_data->frmfmt = &imx274_frmfmt[0];
1237 common_data->colorfmt = camera_common_find_datafmt(
1238 IMX274_DEFAULT_DATAFMT);
1239 common_data->power = &priv->power;
1240 common_data->ctrls = priv->ctrls;
1241 common_data->priv = (void *)priv;
1242 common_data->numctrls = ARRAY_SIZE(ctrl_config_list);
1243 common_data->numfmts = ARRAY_SIZE(imx274_frmfmt);
1244 common_data->def_mode = IMX274_DEFAULT_MODE;
1245 common_data->def_width = IMX274_DEFAULT_WIDTH;
1246 common_data->def_height = IMX274_DEFAULT_HEIGHT;
1247 common_data->fmt_width = common_data->def_width;
1248 common_data->fmt_height = common_data->def_height;
1249 common_data->def_clk_freq = IMX274_DEFAULT_CLK_FREQ;
1251 priv->i2c_client = client;
1252 priv->s_data = common_data;
1253 priv->subdev = &common_data->subdev;
1254 priv->subdev->dev = &client->dev;
1256 err = imx274_power_get(priv);
1260 err = camera_common_parse_ports(client, common_data);
1262 dev_err(&client->dev, "Failed to find port info\n");
1265 sprintf(debugfs_name, "imx274_%c", common_data->csi_port + 'a');
1266 dev_dbg(&client->dev, "%s: name %s\n", __func__, debugfs_name);
1268 camera_common_create_debugfs(common_data, "imx274");
1270 v4l2_i2c_subdev_init(priv->subdev, client, &imx274_subdev_ops);
1272 err = imx274_ctrls_init(priv);
1276 err = imx274_verify_streaming(priv);
1280 /* eeprom interface */
1281 err = imx274_eeprom_device_init(priv);
1283 dev_err(&client->dev,
1284 "Failed to allocate eeprom register map: %d\n", err);
1286 priv->subdev->internal_ops = &imx274_subdev_internal_ops;
1287 priv->subdev->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
1288 V4L2_SUBDEV_FL_HAS_EVENTS;
1290 #if defined(CONFIG_MEDIA_CONTROLLER)
1291 priv->pad.flags = MEDIA_PAD_FL_SOURCE;
1292 priv->subdev->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR;
1293 priv->subdev->entity.ops = &imx274_media_ops;
1294 err = media_entity_init(&priv->subdev->entity, 1, &priv->pad, 0);
1296 dev_err(&client->dev, "unable to init media entity\n");
1301 err = v4l2_async_register_subdev(priv->subdev);
1305 dev_dbg(&client->dev, "Detected IMX274 sensor\n");
1311 imx274_remove(struct i2c_client *client)
1313 struct camera_common_data *s_data = to_camera_common_data(client);
1314 struct imx274 *priv = (struct imx274 *)s_data->priv;
1316 v4l2_async_unregister_subdev(priv->subdev);
1317 #if defined(CONFIG_MEDIA_CONTROLLER)
1318 media_entity_cleanup(&priv->subdev->entity);
1321 v4l2_ctrl_handler_free(&priv->ctrl_handler);
1322 imx274_power_put(priv);
1323 camera_common_remove_debugfs(s_data);
1328 static const struct i2c_device_id imx274_id[] = {
1333 MODULE_DEVICE_TABLE(i2c, imx274_id);
1335 static struct i2c_driver imx274_i2c_driver = {
1338 .owner = THIS_MODULE,
1340 .probe = imx274_probe,
1341 .remove = imx274_remove,
1342 .id_table = imx274_id,
1345 module_i2c_driver(imx274_i2c_driver);
1347 MODULE_DESCRIPTION("Media Controller driver for Sony IMX274");
1348 MODULE_AUTHOR("Josh Kuo <joshk@nvidia.com>");
1349 MODULE_LICENSE("GPL v2");