2 * imx185.c - imx185 sensor driver
4 * Copyright (c) 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/imx185.h>
31 #include "imx185_mode_tbls.h"
34 #define IMX185_DEFAULT_MODE IMX185_MODE_1920X1080_CROP_HDR_30FPS
35 #define IMX185_DEFAULT_DATAFMT V4L2_MBUS_FMT_SRGGB12_1X12
37 #define IMX185_MAX_COARSE_DIFF 2
38 #define IMX185_MAX_COARSE_DIFF_HDR 5
39 #define IMX185_GAIN_SHIFT 8
40 #define IMX185_MIN_GAIN (1 << IMX185_GAIN_SHIFT)
41 #define IMX185_MAX_GAIN (255 << IMX185_GAIN_SHIFT)
42 #define IMX185_MIN_FRAME_LENGTH (1125)
43 #define IMX185_MAX_FRAME_LENGTH (0xFFFF)
44 #define IMX185_MIN_EXPOSURE_COARSE (0x0001)
45 #define IMX185_MAX_EXPOSURE_COARSE \
46 (IMX185_MAX_FRAME_LENGTH-IMX185_MAX_COARSE_DIFF)
48 #define IMX185_MIN_FRAME_LENGTH_1080P_HDR (1125)
49 #define IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS1 (5)
50 #define IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS1 (70)
51 #define IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS2 (80)
52 #define IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS2 (1120)
55 #define IMX185_DEFAULT_WIDTH 1920
56 #define IMX185_DEFAULT_HEIGHT 1080
57 #define IMX185_DEFAULT_GAIN IMX185_MIN_GAIN
58 #define IMX185_DEFAULT_FRAME_LENGTH (1125)
59 #define IMX185_DEFAULT_EXPOSURE_COARSE \
60 (IMX185_DEFAULT_FRAME_LENGTH-IMX185_MAX_COARSE_DIFF)
61 #define IMX185_DEFAULT_EXPOSURE_COARSE_SHORT_HDR \
62 (IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS1- \
63 IMX185_MAX_COARSE_DIFF_HDR)
66 #define IMX185_DEFAULT_CLK_FREQ 37125000
70 struct camera_common_power_rail power;
72 struct v4l2_ctrl_handler ctrl_handler;
73 struct i2c_client *i2c_client;
74 struct v4l2_subdev *subdev;
81 struct regmap *regmap;
82 struct camera_common_data *s_data;
83 struct camera_common_pdata *pdata;
84 struct v4l2_ctrl *ctrls[];
87 static const struct regmap_config sensor_regmap_config = {
90 .cache_type = REGCACHE_RBTREE,
93 static int imx185_g_volatile_ctrl(struct v4l2_ctrl *ctrl);
94 static int imx185_s_ctrl(struct v4l2_ctrl *ctrl);
96 static const struct v4l2_ctrl_ops imx185_ctrl_ops = {
97 .g_volatile_ctrl = imx185_g_volatile_ctrl,
98 .s_ctrl = imx185_s_ctrl,
101 static struct v4l2_ctrl_config ctrl_config_list[] = {
102 /* Do not change the name field for the controls! */
104 .ops = &imx185_ctrl_ops,
107 .type = V4L2_CTRL_TYPE_INTEGER,
108 .flags = V4L2_CTRL_FLAG_SLIDER,
109 .min = IMX185_MIN_GAIN,
110 .max = IMX185_MAX_GAIN,
111 .def = IMX185_DEFAULT_GAIN,
115 .ops = &imx185_ctrl_ops,
116 .id = V4L2_CID_FRAME_LENGTH,
117 .name = "Frame Length",
118 .type = V4L2_CTRL_TYPE_INTEGER,
119 .flags = V4L2_CTRL_FLAG_SLIDER,
120 .min = IMX185_MIN_FRAME_LENGTH,
121 .max = IMX185_MAX_FRAME_LENGTH,
122 .def = IMX185_DEFAULT_FRAME_LENGTH,
126 .ops = &imx185_ctrl_ops,
127 .id = V4L2_CID_COARSE_TIME,
128 .name = "Coarse Time",
129 .type = V4L2_CTRL_TYPE_INTEGER,
130 .flags = V4L2_CTRL_FLAG_SLIDER,
131 .min = IMX185_MIN_EXPOSURE_COARSE,
132 .max = IMX185_MAX_EXPOSURE_COARSE,
133 .def = IMX185_DEFAULT_EXPOSURE_COARSE,
137 .ops = &imx185_ctrl_ops,
138 .id = V4L2_CID_COARSE_TIME_SHORT,
139 .name = "Coarse Time Short",
140 .type = V4L2_CTRL_TYPE_INTEGER,
141 .flags = V4L2_CTRL_FLAG_SLIDER,
142 .min = IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS1,
143 .max = IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS1,
144 .def = IMX185_DEFAULT_EXPOSURE_COARSE_SHORT_HDR,
148 .ops = &imx185_ctrl_ops,
149 .id = V4L2_CID_GROUP_HOLD,
150 .name = "Group Hold",
151 .type = V4L2_CTRL_TYPE_INTEGER_MENU,
153 .max = ARRAY_SIZE(switch_ctrl_qmenu) - 1,
156 .qmenu_int = switch_ctrl_qmenu,
159 .ops = &imx185_ctrl_ops,
160 .id = V4L2_CID_HDR_EN,
161 .name = "HDR enable",
162 .type = V4L2_CTRL_TYPE_INTEGER_MENU,
164 .max = ARRAY_SIZE(switch_ctrl_qmenu) - 1,
167 .qmenu_int = switch_ctrl_qmenu,
170 .ops = &imx185_ctrl_ops,
171 .id = V4L2_CID_FUSE_ID,
173 .type = V4L2_CTRL_TYPE_STRING,
174 .flags = V4L2_CTRL_FLAG_READ_ONLY,
176 .max = IMX185_FUSE_ID_STR_SIZE,
181 static inline void imx185_get_frame_length_regs(imx185_reg *regs,
184 regs->addr = IMX185_FRAME_LENGTH_ADDR_MID;
185 regs->val = (frame_length >> 8) & 0xff;
187 (regs + 1)->addr = IMX185_FRAME_LENGTH_ADDR_LSB;
188 (regs + 1)->val = (frame_length) & 0xff;
191 static inline void imx185_get_coarse_time_regs_shs1(imx185_reg *regs,
194 regs->addr = IMX185_COARSE_TIME_SHS1_ADDR_MID;
195 regs->val = (coarse_time >> 8) & 0xff;
197 (regs + 1)->addr = IMX185_COARSE_TIME_SHS1_ADDR_LSB;
198 (regs + 1)->val = (coarse_time) & 0xff;
201 static inline void imx185_get_coarse_time_regs_shs2(imx185_reg *regs,
204 regs->addr = IMX185_COARSE_TIME_SHS2_ADDR_MID;
205 regs->val = (coarse_time >> 8) & 0xff;
207 (regs + 1)->addr = IMX185_COARSE_TIME_SHS2_ADDR_LSB;
208 (regs + 1)->val = (coarse_time) & 0xff;
211 static inline void imx185_get_gain_reg(imx185_reg *regs,
214 regs->addr = IMX185_GAIN_ADDR;
215 regs->val = (gain) & 0xff;
218 static int test_mode;
219 module_param(test_mode, int, 0644);
221 static inline int imx185_read_reg(struct camera_common_data *s_data,
224 struct imx185 *priv = (struct imx185 *)s_data->priv;
225 return regmap_read(priv->regmap, addr, (unsigned int *) val);
228 static int imx185_write_reg(struct camera_common_data *s_data,
232 struct imx185 *priv = (struct imx185 *)s_data->priv;
234 err = regmap_write(priv->regmap, addr, val);
236 pr_err("%s:i2c write failed, 0x%x = %x\n",
237 __func__, addr, val);
244 static int imx185_write_table(struct imx185 *priv,
245 const imx185_reg table[])
247 return regmap_util_write_table_8(priv->regmap,
250 IMX185_TABLE_WAIT_MS,
254 static int imx185_power_on(struct camera_common_data *s_data)
257 struct imx185 *priv = (struct imx185 *)s_data->priv;
258 struct camera_common_power_rail *pw = &priv->power;
260 dev_dbg(&priv->i2c_client->dev, "%s: power on\n", __func__);
261 if (priv->pdata && priv->pdata->power_on) {
262 err = priv->pdata->power_on(pw);
264 pr_err("%s failed.\n", __func__);
269 /*exit reset mode: XCLR */
270 if (pw->reset_gpio) {
271 gpio_set_value(pw->reset_gpio, 0);
272 usleep_range(30, 50);
273 gpio_set_value(pw->reset_gpio, 1);
274 usleep_range(30, 50);
277 pw->state = SWITCH_ON;
282 static int imx185_power_off(struct camera_common_data *s_data)
285 struct imx185 *priv = (struct imx185 *)s_data->priv;
286 struct camera_common_power_rail *pw = &priv->power;
288 dev_dbg(&priv->i2c_client->dev, "%s: power off\n", __func__);
289 if (priv->pdata && priv->pdata->power_off) {
290 err = priv->pdata->power_off(pw);
292 pr_err("%s failed.\n", __func__);
296 /* enter reset mode: XCLR */
299 gpio_set_value(pw->reset_gpio, 0);
301 pw->state = SWITCH_OFF;
306 static int imx185_power_put(struct imx185 *priv)
308 struct camera_common_power_rail *pw = &priv->power;
314 static int imx185_power_get(struct imx185 *priv)
316 struct camera_common_power_rail *pw = &priv->power;
317 struct camera_common_pdata *pdata = priv->pdata;
318 const char *mclk_name;
319 const char *parentclk_name;
323 mclk_name = priv->pdata->mclk_name ?
324 priv->pdata->mclk_name : "cam_mclk1";
325 pw->mclk = devm_clk_get(&priv->i2c_client->dev, mclk_name);
326 if (IS_ERR(pw->mclk)) {
327 dev_err(&priv->i2c_client->dev,
328 "unable to get clock %s\n", mclk_name);
329 return PTR_ERR(pw->mclk);
332 parentclk_name = priv->pdata->parentclk_name;
333 if (parentclk_name) {
334 parent = devm_clk_get(&priv->i2c_client->dev, parentclk_name);
335 if (IS_ERR(parent)) {
336 dev_err(&priv->i2c_client->dev,
337 "unable to get parent clcok %s",
340 clk_set_parent(pw->mclk, parent);
343 pw->reset_gpio = pdata->reset_gpio;
344 pw->state = SWITCH_OFF;
348 static int imx185_set_gain(struct imx185 *priv, s32 val);
349 static int imx185_set_frame_length(struct imx185 *priv, s32 val);
350 static int imx185_set_coarse_time(struct imx185 *priv, s32 val);
351 static int imx185_set_coarse_time_shs1(struct imx185 *priv, s32 val);
352 static int imx185_set_coarse_time_hdr_shs2(struct imx185 *priv, s32 val);
354 static int imx185_s_stream(struct v4l2_subdev *sd, int enable)
356 struct i2c_client *client = v4l2_get_subdevdata(sd);
357 struct camera_common_data *s_data = to_camera_common_data(client);
358 struct imx185 *priv = (struct imx185 *)s_data->priv;
359 struct v4l2_control control;
362 dev_dbg(&client->dev, "%s++ enable %d\n", __func__, enable);
364 err = imx185_write_table(priv, mode_table[IMX185_MODE_STOP_STREAM]);
370 err = imx185_write_table(priv, mode_table[s_data->mode]);
373 /* write list of override regs for the asking frame length, */
374 /* coarse integration time, and gain. Failures to write
375 * overrides are non-fatal */
376 control.id = V4L2_CID_GAIN;
377 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
378 err |= imx185_set_gain(priv, control.value);
380 dev_dbg(&client->dev, "%s: warning gain override failed\n",
383 control.id = V4L2_CID_FRAME_LENGTH;
384 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
385 err |= imx185_set_frame_length(priv, control.value);
387 dev_dbg(&client->dev,
388 "%s: warning frame length override failed\n", __func__);
390 control.id = V4L2_CID_COARSE_TIME;
391 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
392 err |= imx185_set_coarse_time(priv, control.value);
394 dev_dbg(&client->dev,
395 "%s: warning coarse time override failed\n", __func__);
397 control.id = V4L2_CID_COARSE_TIME_SHORT;
398 err = v4l2_g_ctrl(&priv->ctrl_handler, &control);
399 err |= imx185_set_coarse_time_shs1(priv, control.value);
401 dev_dbg(&client->dev,
402 "%s: warning coarse time short override failed\n",
405 err = imx185_write_table(priv,
406 mode_table[IMX185_MODE_TEST_PATTERN]);
408 err = imx185_write_table(priv, mode_table[IMX185_MODE_START_STREAM]);
414 dev_dbg(&client->dev, "%s: error setting stream\n", __func__);
418 static int imx185_g_input_status(struct v4l2_subdev *sd, u32 *status)
420 struct i2c_client *client = v4l2_get_subdevdata(sd);
421 struct camera_common_data *s_data = to_camera_common_data(client);
422 struct imx185 *priv = (struct imx185 *)s_data->priv;
423 struct camera_common_power_rail *pw = &priv->power;
425 *status = pw->state == SWITCH_ON;
429 static struct v4l2_subdev_video_ops imx185_subdev_video_ops = {
430 .s_stream = imx185_s_stream,
431 .s_mbus_fmt = camera_common_s_fmt,
432 .g_mbus_fmt = camera_common_g_fmt,
433 .try_mbus_fmt = camera_common_try_fmt,
434 .enum_mbus_fmt = camera_common_enum_fmt,
435 .g_mbus_config = camera_common_g_mbus_config,
436 .g_input_status = imx185_g_input_status,
437 .enum_framesizes = camera_common_enum_framesizes,
438 .enum_frameintervals = camera_common_enum_frameintervals,
441 static struct v4l2_subdev_core_ops imx185_subdev_core_ops = {
442 .s_power = camera_common_s_power,
445 static int imx185_get_fmt(struct v4l2_subdev *sd,
446 struct v4l2_subdev_fh *fh,
447 struct v4l2_subdev_format *format)
449 return camera_common_g_fmt(sd, &format->format);
452 static int imx185_set_fmt(struct v4l2_subdev *sd,
453 struct v4l2_subdev_fh *fh,
454 struct v4l2_subdev_format *format)
458 if (format->which == V4L2_SUBDEV_FORMAT_TRY)
459 ret = camera_common_try_fmt(sd, &format->format);
461 ret = camera_common_s_fmt(sd, &format->format);
466 static struct v4l2_subdev_pad_ops imx185_subdev_pad_ops = {
467 .enum_mbus_code = camera_common_enum_mbus_code,
468 .set_fmt = imx185_set_fmt,
469 .get_fmt = imx185_get_fmt,
472 static struct v4l2_subdev_ops imx185_subdev_ops = {
473 .core = &imx185_subdev_core_ops,
474 .video = &imx185_subdev_video_ops,
475 .pad = &imx185_subdev_pad_ops,
478 static struct of_device_id imx185_of_match[] = {
479 { .compatible = "nvidia,imx185", },
483 static struct camera_common_sensor_ops imx185_common_ops = {
484 .power_on = imx185_power_on,
485 .power_off = imx185_power_off,
486 .write_reg = imx185_write_reg,
487 .read_reg = imx185_read_reg,
490 static int imx185_set_group_hold(struct imx185 *priv, s32 val)
493 int gh_en = switch_ctrl_qmenu[val];
495 priv->group_hold_prev = val;
496 if (gh_en == SWITCH_ON) {
498 err = imx185_write_reg(priv->s_data,
499 IMX185_GROUP_HOLD_ADDR, 0x1);
502 } else if (gh_en == SWITCH_OFF) {
503 err = imx185_write_reg(priv->s_data,
504 IMX185_GROUP_HOLD_ADDR, 0x0);
510 dev_dbg(&priv->i2c_client->dev,
511 "%s: Group hold control error\n", __func__);
515 static int imx185_set_gain(struct imx185 *priv, s32 val)
517 imx185_reg reg_list[1];
521 /* translate value */
522 gain = (u8)(val * 160 / (1 << IMX185_GAIN_SHIFT) / 48);
524 dev_dbg(&priv->i2c_client->dev,
525 "%s: gain: %d\n", __func__, gain);
527 imx185_get_gain_reg(reg_list, gain);
529 err = imx185_write_table(priv, reg_list);
536 dev_dbg(&priv->i2c_client->dev,
537 "%s: GAIN control error\n", __func__);
541 static int imx185_set_frame_length(struct imx185 *priv, s32 val)
543 imx185_reg reg_list[2];
549 dev_dbg(&priv->i2c_client->dev,
550 "%s: val: %d\n", __func__, frame_length);
552 priv->frame_length = frame_length;
553 imx185_get_frame_length_regs(reg_list, frame_length);
554 err = imx185_write_table(priv, reg_list);
561 dev_dbg(&priv->i2c_client->dev,
562 "%s: FRAME_LENGTH control error\n", __func__);
566 static int imx185_set_coarse_time(struct imx185 *priv, s32 val)
569 struct v4l2_control control;
572 /* check hdr enable ctrl */
573 control.id = V4L2_CID_HDR_EN;
574 err = camera_common_g_ctrl(priv->s_data, &control);
576 dev_err(&priv->i2c_client->dev,
577 "could not find device ctrl.\n");
581 hdr_en = switch_ctrl_qmenu[control.value];
582 if (hdr_en == SWITCH_OFF) {
583 /*no WDR, update SHS1 as ET*/
584 err = imx185_set_coarse_time_shs1(priv, val);
586 dev_dbg(&priv->i2c_client->dev,
587 "%s: error coarse time SHS1 override\n", __func__);
588 } else if (hdr_en == SWITCH_ON) {
589 /*WDR, update SHS2 as long ET*/
590 err = imx185_set_coarse_time_hdr_shs2(priv, val);
592 dev_dbg(&priv->i2c_client->dev,
593 "%s: error coarse time SHS2 override\n", __func__);
598 static int imx185_set_coarse_time_shs1(struct imx185 *priv, s32 val)
600 imx185_reg reg_list[2];
603 struct v4l2_control control;
608 if (priv->frame_length == 0)
609 priv->frame_length = IMX185_MIN_FRAME_LENGTH;
611 /* check hdr enable ctrl */
612 control.id = V4L2_CID_HDR_EN;
613 err = camera_common_g_ctrl(priv->s_data, &control);
615 dev_err(&priv->i2c_client->dev,
616 "could not find device ctrl.\n");
620 hdr_en = switch_ctrl_qmenu[control.value];
621 if (hdr_en == SWITCH_ON) {
622 if (coarse_shs1 < IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS1)
623 coarse_shs1 = IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS1;
625 if (coarse_shs1 > IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS1)
626 coarse_shs1 = IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS1;
628 priv->frame_length = IMX185_MIN_FRAME_LENGTH;
631 dev_dbg(&priv->i2c_client->dev,
632 "%s: val: %d, shs1=%d, frame_length: %d\n", __func__,
634 priv->frame_length - coarse_shs1 - 1,
637 imx185_get_coarse_time_regs_shs1(reg_list,
638 priv->frame_length - coarse_shs1 - 1);
640 err = imx185_write_table(priv, reg_list);
647 dev_dbg(&priv->i2c_client->dev,
648 "%s: COARSE_TIME control error\n", __func__);
652 static int imx185_set_coarse_time_hdr_shs2(struct imx185 *priv, s32 val)
654 imx185_reg reg_list[2];
659 if (coarse_shs2 < IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS2)
660 coarse_shs2 = IMX185_MIN_EXPOSURE_COARSE_1080P_HDR_SHS2;
662 if (coarse_shs2 > IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS2)
663 coarse_shs2 = IMX185_MAX_EXPOSURE_COARSE_1080P_HDR_SHS2;
665 priv->frame_length = IMX185_MIN_FRAME_LENGTH;
667 dev_dbg(&priv->i2c_client->dev,
668 "%s: val: %d, shs2=%d, frame_length: %d\n", __func__,
670 priv->frame_length - coarse_shs2 - 1,
674 imx185_get_coarse_time_regs_shs2(reg_list,
675 priv->frame_length - coarse_shs2 - 1);
677 err = imx185_write_table(priv, reg_list);
684 dev_dbg(&priv->i2c_client->dev,
685 "%s: COARSE_TIME_SHORT control error\n", __func__);
689 static int imx185_fuse_id_setup(struct imx185 *priv)
693 struct i2c_client *client = v4l2_get_subdevdata(priv->subdev);
694 struct camera_common_data *s_data = to_camera_common_data(client);
695 struct camera_common_power_rail *pw = &priv->power;
697 struct v4l2_ctrl *ctrl;
698 u8 fuse_id[IMX185_FUSE_ID_SIZE];
701 err = camera_common_s_power(priv->subdev, true);
705 for (i = 0; i < IMX185_FUSE_ID_SIZE; i++) {
706 err |= imx185_read_reg(s_data,
707 IMX185_FUSE_ID_ADDR + i, (unsigned int *) &bak);
711 pr_err("%s: can not read fuse id\n", __func__);
716 ctrl = v4l2_ctrl_find(&priv->ctrl_handler, V4L2_CID_FUSE_ID);
718 dev_err(&priv->i2c_client->dev,
719 "could not find device ctrl.\n");
723 for (i = 0; i < IMX185_FUSE_ID_SIZE; i++)
724 sprintf(&ctrl->string[i*2], "%02x",
726 ctrl->cur.string = ctrl->string;
727 pr_info("%s, fuse id: %s\n", __func__, ctrl->cur.string);
729 err = camera_common_s_power(priv->subdev, false);
736 static int imx185_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
738 struct imx185 *priv =
739 container_of(ctrl->handler, struct imx185, ctrl_handler);
742 if (priv->power.state == SWITCH_OFF)
748 pr_err("%s: unknown ctrl id.\n", __func__);
755 static int imx185_s_ctrl(struct v4l2_ctrl *ctrl)
757 struct imx185 *priv =
758 container_of(ctrl->handler, struct imx185, ctrl_handler);
761 if (priv->power.state == SWITCH_OFF)
766 err = imx185_set_gain(priv, ctrl->val);
768 case V4L2_CID_FRAME_LENGTH:
769 err = imx185_set_frame_length(priv, ctrl->val);
771 case V4L2_CID_COARSE_TIME:
772 err = imx185_set_coarse_time(priv, ctrl->val);
774 case V4L2_CID_COARSE_TIME_SHORT:
775 err = imx185_set_coarse_time_shs1(priv, ctrl->val);
777 case V4L2_CID_GROUP_HOLD:
778 err = imx185_set_group_hold(priv, ctrl->val);
780 case V4L2_CID_HDR_EN:
784 pr_err("%s: unknown ctrl id.\n", __func__);
791 static int imx185_ctrls_init(struct imx185 *priv)
793 struct i2c_client *client = priv->i2c_client;
794 struct v4l2_ctrl *ctrl;
799 dev_dbg(&client->dev, "%s++\n", __func__);
801 num_ctrls = ARRAY_SIZE(ctrl_config_list);
802 v4l2_ctrl_handler_init(&priv->ctrl_handler, num_ctrls);
804 for (i = 0; i < num_ctrls; i++) {
805 ctrl = v4l2_ctrl_new_custom(&priv->ctrl_handler,
806 &ctrl_config_list[i], NULL);
808 dev_err(&client->dev, "Failed to init %s ctrl\n",
809 ctrl_config_list[i].name);
813 if (ctrl_config_list[i].type == V4L2_CTRL_TYPE_STRING &&
814 ctrl_config_list[i].flags & V4L2_CTRL_FLAG_READ_ONLY) {
815 ctrl->string = devm_kzalloc(&client->dev,
816 ctrl_config_list[i].max + 1, GFP_KERNEL);
818 dev_err(&client->dev,
819 "Failed to allocate otp data\n");
823 priv->ctrls[i] = ctrl;
826 priv->num_ctrls = num_ctrls;
827 priv->subdev->ctrl_handler = &priv->ctrl_handler;
828 if (priv->ctrl_handler.error) {
829 dev_err(&client->dev, "Error %d adding controls\n",
830 priv->ctrl_handler.error);
831 err = priv->ctrl_handler.error;
835 err = v4l2_ctrl_handler_setup(&priv->ctrl_handler);
837 dev_err(&client->dev,
838 "Error %d setting default controls\n", err);
842 err = imx185_fuse_id_setup(priv);
844 dev_err(&client->dev,
845 "Error %d reading fuse id data\n", err);
852 v4l2_ctrl_handler_free(&priv->ctrl_handler);
856 MODULE_DEVICE_TABLE(of, imx185_of_match);
858 static struct camera_common_pdata *imx185_parse_dt(struct imx185 *priv,
859 struct i2c_client *client)
861 struct device_node *np = client->dev.of_node;
862 struct camera_common_pdata *board_priv_pdata;
863 const struct of_device_id *match;
869 match = of_match_device(imx185_of_match, &client->dev);
871 dev_err(&client->dev, "Failed to find matching dt id\n");
875 board_priv_pdata = devm_kzalloc(&client->dev,
876 sizeof(*board_priv_pdata), GFP_KERNEL);
877 if (!board_priv_pdata) {
878 dev_err(&client->dev, "Failed to allocate pdata\n");
882 sts = camera_common_parse_clocks(client, board_priv_pdata);
884 dev_err(&client->dev, "Failed to find clocks\n");
886 sts = of_property_read_string(np, "mclk",
887 &board_priv_pdata->mclk_name);
889 dev_err(&client->dev, "mclk not in DT\n");
891 board_priv_pdata->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0);
893 dev_err(&client->dev, "reset-gpios not found %d\n", sts);
894 board_priv_pdata->reset_gpio = 0;
897 return board_priv_pdata;
900 static int imx185_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
902 struct i2c_client *client = v4l2_get_subdevdata(sd);
903 dev_dbg(&client->dev, "%s:\n", __func__);
908 static const struct v4l2_subdev_internal_ops imx185_subdev_internal_ops = {
912 static const struct media_entity_operations imx185_media_ops = {
913 .link_validate = v4l2_subdev_link_validate,
916 static int imx185_probe(struct i2c_client *client,
917 const struct i2c_device_id *id)
919 struct camera_common_data *common_data;
921 char debugfs_name[10];
924 pr_info("[IMX185]: probing v4l2 sensor at addr 0x%0x.\n", client->addr);
926 if (!IS_ENABLED(CONFIG_OF) || !client->dev.of_node)
929 common_data = devm_kzalloc(&client->dev,
930 sizeof(struct camera_common_data), GFP_KERNEL);
932 dev_err(&client->dev, "unable to allocate memory!\n");
936 priv = devm_kzalloc(&client->dev,
937 sizeof(struct imx185) + sizeof(struct v4l2_ctrl *) *
938 ARRAY_SIZE(ctrl_config_list),
941 dev_err(&client->dev, "unable to allocate memory!\n");
945 priv->regmap = devm_regmap_init_i2c(client, &sensor_regmap_config);
946 if (IS_ERR(priv->regmap)) {
947 dev_err(&client->dev,
948 "regmap init failed: %ld\n", PTR_ERR(priv->regmap));
952 if (client->dev.of_node)
953 priv->pdata = imx185_parse_dt(priv, client);
955 dev_err(&client->dev, "unable to get platform data\n");
959 common_data->ops = &imx185_common_ops;
960 common_data->ctrl_handler = &priv->ctrl_handler;
961 common_data->i2c_client = client;
962 common_data->frmfmt = &imx185_frmfmt[0];
963 common_data->colorfmt = camera_common_find_datafmt(
964 IMX185_DEFAULT_DATAFMT);
965 common_data->power = &priv->power;
966 common_data->ctrls = priv->ctrls;
967 common_data->priv = (void *)priv;
968 common_data->numctrls = ARRAY_SIZE(ctrl_config_list);
969 common_data->numfmts = ARRAY_SIZE(imx185_frmfmt);
970 common_data->def_mode = IMX185_DEFAULT_MODE;
971 common_data->def_width = IMX185_DEFAULT_WIDTH;
972 common_data->def_height = IMX185_DEFAULT_HEIGHT;
973 common_data->fmt_width = common_data->def_width;
974 common_data->fmt_height = common_data->def_height;
975 common_data->def_clk_freq = IMX185_DEFAULT_CLK_FREQ;
977 priv->i2c_client = client;
978 priv->s_data = common_data;
979 priv->subdev = &common_data->subdev;
980 priv->subdev->dev = &client->dev;
981 priv->s_data->dev = &client->dev;
983 err = imx185_power_get(priv);
987 err = camera_common_parse_ports(client, common_data);
989 dev_err(&client->dev, "Failed to find port info\n");
992 sprintf(debugfs_name, "imx185_%c", common_data->csi_port + 'a');
993 dev_dbg(&client->dev, "%s: name %s\n", __func__, debugfs_name);
995 camera_common_create_debugfs(common_data, debugfs_name);
997 v4l2_i2c_subdev_init(priv->subdev, client, &imx185_subdev_ops);
999 err = imx185_ctrls_init(priv);
1003 priv->subdev->internal_ops = &imx185_subdev_internal_ops;
1004 priv->subdev->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
1005 V4L2_SUBDEV_FL_HAS_EVENTS;
1007 #if defined(CONFIG_MEDIA_CONTROLLER)
1008 priv->pad.flags = MEDIA_PAD_FL_SOURCE;
1009 priv->subdev->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR;
1010 priv->subdev->entity.ops = &imx185_media_ops;
1011 err = media_entity_init(&priv->subdev->entity, 1, &priv->pad, 0);
1013 dev_err(&client->dev, "unable to init media entity\n");
1018 err = v4l2_async_register_subdev(priv->subdev);
1022 dev_info(&client->dev, "Detected IMX185 sensor\n");
1028 imx185_remove(struct i2c_client *client)
1030 struct camera_common_data *s_data = to_camera_common_data(client);
1031 struct imx185 *priv = (struct imx185 *)s_data->priv;
1033 v4l2_async_unregister_subdev(priv->subdev);
1034 #if defined(CONFIG_MEDIA_CONTROLLER)
1035 media_entity_cleanup(&priv->subdev->entity);
1038 v4l2_ctrl_handler_free(&priv->ctrl_handler);
1039 imx185_power_put(priv);
1040 camera_common_remove_debugfs(s_data);
1045 static const struct i2c_device_id imx185_id[] = {
1050 MODULE_DEVICE_TABLE(i2c, imx185_id);
1052 static struct i2c_driver imx185_i2c_driver = {
1055 .owner = THIS_MODULE,
1057 .probe = imx185_probe,
1058 .remove = imx185_remove,
1059 .id_table = imx185_id,
1062 module_i2c_driver(imx185_i2c_driver);
1064 MODULE_DESCRIPTION("Media Controller driver for Sony IMX185");
1065 MODULE_AUTHOR("NVIDIA Corporation");
1066 MODULE_LICENSE("GPL v2");