2 * imx185.c - imx185 sensor driver
4 * Copyright (c) 2014-2015, 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/delay.h>
21 #include <linux/i2c.h>
22 #include <linux/clk.h>
23 #include <linux/miscdevice.h>
24 #include <linux/slab.h>
25 #include <linux/uaccess.h>
26 #include <linux/regulator/consumer.h>
27 #include <linux/regmap.h>
28 #include <media/imx185.h>
29 #include <linux/gpio.h>
30 #include <linux/module.h>
32 #include <linux/kernel.h>
33 #include <linux/debugfs.h>
34 #include <linux/seq_file.h>
36 #include <linux/of_device.h>
37 #include <linux/of_gpio.h>
38 #include <mach/io_dpd.h>
40 #include "nvc_utilities.h"
48 struct miscdevice miscdev_info;
50 struct imx185_power_rail power;
51 struct imx185_sensordata sensor_data;
52 struct i2c_client *i2c_client;
53 struct imx185_platform_data *pdata;
55 struct regmap *regmap;
56 struct mutex imx185_camera_lock;
57 struct dentry *debugdir;
62 static const struct regmap_config sensor_regmap_config = {
65 .cache_type = REGCACHE_RBTREE,
68 #define IMX185_TABLE_WAIT_MS 0
69 #define IMX185_TABLE_END 1
70 #define IMX185_MAX_RETRIES 3
71 #define IMX185_WAIT_MS 3
73 #define MAX_BUFFER_SIZE 32
74 #define IMX185_FRAME_LENGTH_ADDR_MSB 0x3019
75 #define IMX185_FRAME_LENGTH_ADDR_LSB 0x3018
76 #define IMX185_COARSE_TIME_ADDR_MSB 0x3021
77 #define IMX185_COARSE_TIME_ADDR_LSB 0x3020
78 #define IMX185_GAIN_ADDR 0x3014
79 #define IMX185_REG_HOLD 0x3001
81 static struct imx185_reg mode_1920x1200[] = {
84 {IMX185_TABLE_WAIT_MS, IMX185_WAIT_MS},
86 {0x3002, 0x01}, /* master mode operation stop */
87 {0x3005, 0x01}, /* AD conversion 12 bits */
88 {0x3006, 0x00}, /* All-pixel scan mode */
89 {0x3007, 0x00}, /* WUXGA mode 1920x1200 */
90 {0x3009, 0x01}, /* frame rate 30fps */
91 {0x300A, 0xF0}, /* Black level */
105 {0x3018, 0x28}, /* VMAX=1320 */
108 {0x301B, 0x53}, /* HMAX=1875 */
113 {0x3044, 0xE1}, /* MIPI output mode */
118 {0x3063, 0x74}, /* INCLK */
217 {0x3303, 0x00}, /* REPETITION */
218 {0x3305, 0x03}, /* MIPI 4 Lanes */
223 {0x3318, 0xC1}, /* V effective pixel=1217 */
228 {0x333E, 0x0C}, /* CSI_DT_FMT RAM 12 */
230 {0x3340, 0x03}, /* CSI Lane 4 */
231 {0x3341, 0x20}, /* INCLK = 37.125MHz */
249 {IMX185_TABLE_WAIT_MS, 25},
250 /* Master mode start */
252 {0x3049, 0x0A}, /* XVS VSYNC and XHS HSYNC */
253 {IMX185_TABLE_WAIT_MS, 200},
254 {IMX185_TABLE_END, 0x00}
257 static struct imx185_reg mode_1920x1080[] = {
260 {IMX185_TABLE_WAIT_MS, IMX185_WAIT_MS},
262 {0x3002, 0x01}, /* master mode operation stop */
263 {0x3005, 0x01}, /* AD conversion 12 bits */
264 {0x3006, 0x00}, /* All-pixel scan mode */
265 {0x3007, 0x50}, /* 1080p-HD cropping mode 1920x1080 */
266 {0x3009, 0x02}, /* frame rate 30fps */
269 {0x300A, 0x00}, /* Black level */
274 {0x300A, 0xf0}, /* Black level */
289 {0x3018, 0x65}, /* VMAX=1125 */
292 {0x301B, 0x98}, /* HMAX=2200 */
296 {0x3038, 0x08}, /* WINPV=8 */
298 {0x303a, 0x40}, /* WINWV=1088 */
300 {0x303c, 0x0c}, /* WINPH=12 */
302 {0x303e, 0x7c}, /* WINWH=1916 */
305 {0x3044, 0xE1}, /* MIPI output mode */
310 {0x3063, 0x74}, /* INCLK */
409 {0x334E, 0xB4}, /*INCK_FREQ */
411 {0x3303, 0x10}, /* REPETITION */
412 {0x3305, 0x03}, /* MIPI 4 Lanes */
417 {0x3318, 0x38}, /* V effective pixel=1080 */
422 {0x333E, 0x0C}, /* CSI_DT_FMT RAM 10 */
424 {0x3340, 0x03}, /* CSI 4Lane */
425 {0x3341, 0x20}, /* INCLK = 37.125MHz */
428 {0x3343, 0x58}, /* TCLK_POST */
429 {0x3344, 0x10}, /* THS_PREPARE */
430 {0x3345, 0x30}, /* THS_ZERO_MIN */
431 {0x3346, 0x18}, /* THS_TRAIL */
432 {0x3347, 0x10}, /* TCLK_TRAIL_MIN */
433 {0x3348, 0x10}, /* TCLK_PREPARE */
434 {0x3349, 0x48}, /* TCLK_ZERO */
435 {0x334A, 0x28}, /* TLP_X */
436 {0x338C, 0x0C}, /* ADC 12bit */
442 {IMX185_TABLE_WAIT_MS, 25},
443 /* Master mode start */
445 {0x3049, 0x0A}, /* XVS VSYNC and XHS HSYNC */
446 {IMX185_TABLE_WAIT_MS, 210},
447 {IMX185_TABLE_END, 0x00}
451 IMX185_MODE_1920X1200,
452 IMX185_MODE_1920X1080,
455 static struct imx185_reg *mode_table[] = {
456 [IMX185_MODE_1920X1200] = mode_1920x1200,
457 [IMX185_MODE_1920X1080] = mode_1920x1080,
461 msleep_range(unsigned int delay_base)
463 usleep_range(delay_base*1000, delay_base*1000+500);
467 imx185_get_frame_length_regs(struct imx185_reg *regs, u32 frame_length)
469 /* vertical span setting */
470 regs->addr = IMX185_FRAME_LENGTH_ADDR_MSB;
471 regs->val = (frame_length >> 8) & 0xff;
472 (regs + 1)->addr = IMX185_FRAME_LENGTH_ADDR_LSB;
473 (regs + 1)->val = (frame_length) & 0xff;
477 imx185_get_coarse_time_regs(struct imx185_reg *regs, u32 coarse_time)
479 /* storage time adjustment */
480 regs->addr = IMX185_COARSE_TIME_ADDR_MSB;
481 regs->val = (coarse_time >> 8) & 0xff;
482 (regs + 1)->addr = IMX185_COARSE_TIME_ADDR_LSB;
483 (regs + 1)->val = (coarse_time) & 0xff;
487 imx185_get_gain_reg(struct imx185_reg *regs, u16 gain)
489 regs->addr = IMX185_GAIN_ADDR;
493 static int imx185_read_reg(struct imx185_info *info, u16 addr, u8 *val)
496 struct i2c_msg msg[2];
497 unsigned char data[3];
498 struct i2c_client *client = info->i2c_client;
499 if (!client->adapter)
502 msg[0].addr = client->addr;
507 /* high byte goes out first */
508 data[0] = (u8) (addr >> 8);
509 data[1] = (u8) (addr & 0xff);
511 msg[1].addr = client->addr;
512 msg[1].flags = I2C_M_RD;
514 msg[1].buf = data + 2;
516 err = i2c_transfer(client->adapter, msg, 2);
526 imx185_write_reg(struct imx185_info *info, u16 addr, u8 val)
530 unsigned char data[3];
531 struct i2c_client *client = info->i2c_client;
532 if (!client->adapter)
535 pr_debug("imx185_write_reg: %x,%x\n", addr, val);
537 data[0] = (u8) (addr >> 8);
538 data[1] = (u8) (addr & 0xff);
539 data[2] = (u8) (val & 0xff);
541 msg.addr = client->addr;
546 err = i2c_transfer(client->adapter, &msg, 1);
550 pr_err("%s:i2c write failed, client->addr = 0x%x %x = %x\n",
551 __func__, client->addr, addr, val);
556 imx185_write_table(struct imx185_info *info,
557 const struct imx185_reg table[],
558 const struct imx185_reg override_list[],
559 int num_override_regs)
562 const struct imx185_reg *next;
566 for (next = table; next->addr != IMX185_TABLE_END; next++) {
567 if (next->addr == IMX185_TABLE_WAIT_MS) {
568 msleep_range(next->val);
574 /* When an override list is passed in, replace the reg */
575 /* value to write if the reg is in the list */
577 for (i = 0; i < num_override_regs; i++) {
578 if (next->addr == override_list[i].addr) {
579 val = override_list[i].val;
585 err = imx185_write_reg(info, next->addr, val);
587 pr_err("%s:imx185_write_table:%d", __func__, err);
594 static int imx185_power_on(struct imx185_power_rail *pw)
597 struct imx185_info *info = container_of(pw, struct imx185_info, power);
599 if (info->pdata->cam1_gpio > 0)
600 gpio_set_value(info->pdata->cam1_gpio, 0);
601 usleep_range(10, 20);
603 err = regulator_enable(pw->avdd);
605 goto imx185_avdd_fail;
607 err = regulator_enable(pw->iovdd);
609 goto imx185_iovdd_fail;
612 if (info->pdata->cam1_gpio > 0)
613 gpio_set_value(info->pdata->cam1_gpio, 1);
615 usleep_range(300, 310);
621 regulator_disable(pw->avdd);
624 gpio_set_value(info->pdata->af_gpio, 0);
626 pr_err("%s failed.\n", __func__);
630 static int imx185_power_off(struct imx185_power_rail *pw)
632 struct imx185_info *info = container_of(pw, struct imx185_info, power);
634 gpio_set_value(info->pdata->cam1_gpio, 0);
637 regulator_disable(pw->iovdd);
638 regulator_disable(pw->avdd);
643 static int imx185_get_flash_cap(struct imx185_info *info)
648 static inline int imx185_set_flash_control(
649 struct imx185_info *info, struct imx185_flash_control *fc)
655 imx185_set_mode(struct imx185_info *info, struct imx185_mode *mode)
659 struct imx185_reg reg_list[8];
661 pr_info("%s: xres %u yres %u framelength %u coarsetime %u gain %u\n",
662 __func__, mode->xres, mode->yres, mode->frame_length,
663 mode->coarse_time, mode->gain);
665 if (mode->xres == 1920 && mode->yres == 1200) {
666 sensor_mode = IMX185_MODE_1920X1200;
667 } else if (mode->xres == 1920 && mode->yres == 1080) {
668 sensor_mode = IMX185_MODE_1920X1080;
670 pr_err("%s: invalid resolution supplied to set mode %d %d\n",
671 __func__, mode->xres, mode->yres);
675 /* get a list of override regs for the asking frame length, */
676 /* coarse integration time, and gain. */
677 imx185_get_frame_length_regs(reg_list, mode->frame_length);
678 imx185_get_coarse_time_regs(reg_list + 2,
679 mode->frame_length - mode->coarse_time - 1);
680 imx185_get_gain_reg(reg_list + 4, mode->gain);
682 err = imx185_write_table(info,
683 mode_table[sensor_mode],
687 info->mode = sensor_mode;
688 info->frame_length = mode->frame_length;
689 pr_info("[IMX185]: stream on.\n");
695 imx185_get_status(struct imx185_info *info, u8 *dev_status)
702 imx185_set_frame_length(struct imx185_info *info, u32 frame_length,
705 struct imx185_reg reg_list[2];
709 pr_debug("%s: framelength %d\n", __func__, frame_length);
711 imx185_get_frame_length_regs(reg_list, frame_length);
714 ret = imx185_write_reg(info, 0x0104, 0x01);
719 for (i = 0; i < 2; i++) {
720 ret = imx185_write_reg(info, reg_list[i].addr,
727 ret = imx185_write_reg(info, 0x0104, 0x0);
731 info->frame_length = frame_length;
737 imx185_set_coarse_time(struct imx185_info *info, u32 coarse_time,
742 struct imx185_reg reg_list[2];
745 pr_debug("%s: coarsetime %d\n", __func__, coarse_time);
747 imx185_get_coarse_time_regs(reg_list,
748 info->frame_length - coarse_time - 1);
751 ret = imx185_write_reg(info, 0x104, 0x01);
756 for (i = 0; i < 2; i++) {
757 ret = imx185_write_reg(info, reg_list[i].addr,
764 ret = imx185_write_reg(info, 0x104, 0x0);
772 imx185_set_gain(struct imx185_info *info, u16 gain, bool group_hold)
775 struct imx185_reg reg_list;
777 pr_debug("%s: gain %d\n", __func__, gain);
779 imx185_get_gain_reg(®_list, gain);
782 ret = imx185_write_reg(info, 0x104, 0x1);
787 ret = imx185_write_reg(info, reg_list.addr, reg_list.val);
792 ret = imx185_write_reg(info, 0x104, 0x0);
800 imx185_set_group_hold(struct imx185_info *info, struct imx185_ae *ae)
804 bool group_hold_enabled = false;
808 if (ae->coarse_time_enable)
810 if (ae->frame_length_enable)
813 group_hold_enabled = true;
815 if (group_hold_enabled) {
816 ret = imx185_write_reg(info, IMX185_REG_HOLD, 0x1);
822 imx185_set_gain(info, ae->gain, false);
823 if (ae->frame_length_enable)
824 imx185_set_frame_length(info, ae->frame_length, false);
825 if (ae->coarse_time_enable)
826 imx185_set_coarse_time(info, ae->coarse_time, false);
828 if (group_hold_enabled) {
829 ret = imx185_write_reg(info, IMX185_REG_HOLD, 0x0);
837 static int imx185_get_sensor_id(struct imx185_info *info)
842 pr_debug("%s\n", __func__);
843 if (info->sensor_data.fuse_id_size)
846 for (i = 0; i < 9; i++) {
847 info->sensor_data.fuse_id[i] = 0xaa;
851 info->sensor_data.fuse_id_size = i;
856 static void imx185_mclk_disable(struct imx185_info *info)
858 dev_err(&info->i2c_client->dev, "%s: disable MCLK\n", __func__);
859 clk_disable_unprepare(info->mclk);
862 static int imx185_mclk_enable(struct imx185_info *info)
865 unsigned long mclk_init_rate = 37125000;
867 dev_err(&info->i2c_client->dev, "%s: enable MCLK with %lu Hz\n",
868 __func__, mclk_init_rate);
870 err = clk_set_rate(info->mclk, mclk_init_rate);
872 err = clk_prepare_enable(info->mclk);
877 imx185_ioctl(struct file *file,
878 unsigned int cmd, unsigned long arg)
881 struct imx185_info *info = file->private_data;
884 case IMX185_IOCTL_SET_POWER:
887 if (arg && info->pdata->power_on) {
888 err = imx185_mclk_enable(info);
890 err = info->pdata->power_on(&info->power);
892 imx185_mclk_disable(info);
895 info->pdata->power_off(&info->power);
896 imx185_mclk_disable(info);
899 case IMX185_IOCTL_SET_MODE:
901 struct imx185_mode mode;
902 if (copy_from_user(&mode, (const void __user *)arg,
903 sizeof(struct imx185_mode))) {
904 pr_err("%s:Failed to get mode from user.\n", __func__);
907 return imx185_set_mode(info, &mode);
909 case IMX185_IOCTL_SET_FRAME_LENGTH:
910 return imx185_set_frame_length(info, (u32)arg, true);
911 case IMX185_IOCTL_SET_COARSE_TIME:
912 return imx185_set_coarse_time(info, (u32)arg, true);
913 case IMX185_IOCTL_SET_GAIN:
914 return imx185_set_gain(info, (u16)arg, true);
915 case IMX185_IOCTL_GET_STATUS:
919 err = imx185_get_status(info, &status);
922 if (copy_to_user((void __user *)arg, &status, 1)) {
923 pr_err("%s:Failed to copy status to user\n", __func__);
928 case IMX185_IOCTL_GET_SENSORDATA:
930 err = imx185_get_sensor_id(info);
933 pr_err("%s:Failed to get fuse id info.\n", __func__);
936 if (copy_to_user((void __user *)arg, &info->sensor_data,
937 sizeof(struct imx185_sensordata))) {
938 pr_info("%s:Failed to copy fuse id to user space\n",
944 case IMX185_IOCTL_SET_GROUP_HOLD:
947 if (copy_from_user(&ae, (const void __user *)arg,
948 sizeof(struct imx185_ae))) {
949 pr_info("%s:fail group hold\n", __func__);
952 return imx185_set_group_hold(info, &ae);
954 case IMX185_IOCTL_SET_FLASH_MODE:
956 struct imx185_flash_control values;
958 dev_dbg(&info->i2c_client->dev,
959 "IMX185_IOCTL_SET_FLASH_MODE\n");
960 if (copy_from_user(&values,
961 (const void __user *)arg,
962 sizeof(struct imx185_flash_control))) {
966 err = imx185_set_flash_control(info, &values);
969 case IMX185_IOCTL_GET_FLASH_CAP:
970 err = imx185_get_flash_cap(info);
973 pr_err("%s:unknown cmd.\n", __func__);
980 static int imx185_debugfs_show(struct seq_file *s, void *unused)
982 struct imx185_info *dev = s->private;
984 dev_dbg(&dev->i2c_client->dev, "%s: ++\n", __func__);
986 mutex_lock(&dev->imx185_camera_lock);
987 mutex_unlock(&dev->imx185_camera_lock);
992 static ssize_t imx185_debugfs_write(
994 char const __user *buf,
998 struct imx185_info *dev =
999 ((struct seq_file *)file->private_data)->private;
1000 struct i2c_client *i2c_client = dev->i2c_client;
1002 char buffer[MAX_BUFFER_SIZE];
1006 dev_dbg(&i2c_client->dev, "%s: ++\n", __func__);
1008 if (copy_from_user(&buffer, buf, sizeof(buffer)))
1009 goto debugfs_write_fail;
1011 if (sscanf(buf, "0x%x 0x%x", &address, &data) == 2)
1013 if (sscanf(buf, "0X%x 0X%x", &address, &data) == 2)
1015 if (sscanf(buf, "%d %d", &address, &data) == 2)
1018 if (sscanf(buf, "0x%x 0x%x", &address, &data) == 1)
1020 if (sscanf(buf, "0X%x 0X%x", &address, &data) == 1)
1022 if (sscanf(buf, "%d %d", &address, &data) == 1)
1025 dev_err(&i2c_client->dev, "SYNTAX ERROR: %s\n", buf);
1029 dev_info(&i2c_client->dev,
1030 "new address = %x, data = %x\n", address, data);
1031 ret |= imx185_write_reg(dev, address, data);
1033 ret |= imx185_read_reg(dev, address, &readback);
1034 dev_dbg(&i2c_client->dev,
1035 "wrote to address 0x%x with value 0x%x\n",
1039 goto debugfs_write_fail;
1044 dev_err(&i2c_client->dev,
1045 "%s: test pattern write failed\n", __func__);
1049 static int imx185_debugfs_open(struct inode *inode, struct file *file)
1051 struct imx185_info *dev = inode->i_private;
1052 struct i2c_client *i2c_client = dev->i2c_client;
1054 dev_dbg(&i2c_client->dev, "%s: ++\n", __func__);
1056 return single_open(file, imx185_debugfs_show, inode->i_private);
1059 static const struct file_operations imx185_debugfs_fops = {
1060 .open = imx185_debugfs_open,
1062 .write = imx185_debugfs_write,
1063 .llseek = seq_lseek,
1064 .release = single_release,
1067 static void imx185_remove_debugfs(struct imx185_info *dev)
1069 struct i2c_client *i2c_client = dev->i2c_client;
1071 dev_dbg(&i2c_client->dev, "%s: ++\n", __func__);
1073 debugfs_remove_recursive(dev->debugdir);
1074 dev->debugdir = NULL;
1077 static void imx185_create_debugfs(struct imx185_info *dev)
1080 struct i2c_client *i2c_client = dev->i2c_client;
1082 dev_dbg(&i2c_client->dev, "%s\n", __func__);
1085 debugfs_create_dir(dev->miscdev_info.this_device->kobj.name,
1088 goto remove_debugfs;
1090 ret = debugfs_create_file("d",
1093 &imx185_debugfs_fops);
1095 goto remove_debugfs;
1099 dev_err(&i2c_client->dev, "couldn't create debugfs\n");
1100 imx185_remove_debugfs(dev);
1105 imx185_open(struct inode *inode, struct file *file)
1107 struct miscdevice *miscdev = file->private_data;
1108 struct imx185_info *info;
1110 info = container_of(miscdev, struct imx185_info, miscdev_info);
1111 /* check if the device is in use */
1112 if (atomic_xchg(&info->in_use, 1)) {
1113 pr_info("%s:BUSY!\n", __func__);
1117 file->private_data = info;
1123 imx185_release(struct inode *inode, struct file *file)
1125 struct imx185_info *info = file->private_data;
1127 file->private_data = NULL;
1129 /* warn if device is already released */
1130 WARN_ON(!atomic_xchg(&info->in_use, 0));
1134 static int imx185_power_put(struct imx185_power_rail *pw)
1139 if (likely(pw->avdd))
1140 regulator_put(pw->avdd);
1142 if (likely(pw->iovdd))
1143 regulator_put(pw->iovdd);
1145 if (likely(pw->dvdd))
1146 regulator_put(pw->dvdd);
1148 if (likely(pw->ext_reg1))
1149 regulator_put(pw->ext_reg1);
1151 if (likely(pw->ext_reg2))
1152 regulator_put(pw->ext_reg2);
1157 pw->ext_reg1 = NULL;
1158 pw->ext_reg2 = NULL;
1163 static int imx185_regulator_get(struct imx185_info *info,
1164 struct regulator **vreg, char vreg_name[])
1166 struct regulator *reg = NULL;
1169 reg = regulator_get(&info->i2c_client->dev, vreg_name);
1170 if (unlikely(IS_ERR(reg))) {
1171 dev_err(&info->i2c_client->dev, "%s %s ERR: %d\n",
1172 __func__, vreg_name, (int)reg);
1176 dev_dbg(&info->i2c_client->dev, "%s: %s\n",
1177 __func__, vreg_name);
1183 static int imx185_power_get(struct imx185_info *info)
1185 struct imx185_power_rail *pw = &info->power;
1188 err |= imx185_regulator_get(info, &pw->dvdd, "vdig"); /* digital 1.2v */
1189 err |= imx185_regulator_get(info, &pw->iovdd, "vif"); /* IO 1.8v */
1190 err |= imx185_regulator_get(info, &pw->avdd, "vana"); /* analog 2.7v */
1195 static const struct file_operations imx185_fileops = {
1196 .owner = THIS_MODULE,
1197 .open = imx185_open,
1198 .unlocked_ioctl = imx185_ioctl,
1199 .release = imx185_release,
1202 static struct miscdevice imx185_device = {
1203 .minor = MISC_DYNAMIC_MINOR,
1205 .fops = &imx185_fileops,
1208 static struct of_device_id imx185_of_match[] = {
1209 { .compatible = "nvidia,imx185", },
1213 MODULE_DEVICE_TABLE(of, imx185_of_match);
1215 static struct imx185_platform_data *imx185_parse_dt(struct i2c_client *client)
1217 struct device_node *np = client->dev.of_node;
1218 struct imx185_platform_data *board_info_pdata;
1220 board_info_pdata = devm_kzalloc(&client->dev, sizeof(*board_info_pdata),
1222 if (!board_info_pdata) {
1223 dev_err(&client->dev, "Failed to allocate pdata\n");
1227 of_property_read_string(np, "clocks", &board_info_pdata->mclk_name);
1228 board_info_pdata->cam1_gpio = of_get_named_gpio(np, "cam1-gpios", 0);
1229 board_info_pdata->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0);
1230 board_info_pdata->af_gpio = of_get_named_gpio(np, "af-gpios", 0);
1232 board_info_pdata->ext_reg = of_property_read_bool(np, "nvidia,ext_reg");
1234 board_info_pdata->power_on = imx185_power_on;
1235 board_info_pdata->power_off = imx185_power_off;
1237 return board_info_pdata;
1241 imx185_probe(struct i2c_client *client,
1242 const struct i2c_device_id *id)
1244 struct imx185_info *info;
1246 const char *mclk_name;
1248 pr_info("[IMX185]: probing sensor.\n");
1250 info = devm_kzalloc(&client->dev,
1251 sizeof(struct imx185_info), GFP_KERNEL);
1253 pr_err("%s:Unable to allocate memory!\n", __func__);
1257 info->regmap = devm_regmap_init_i2c(client, &sensor_regmap_config);
1258 if (IS_ERR(info->regmap)) {
1259 dev_err(&client->dev,
1260 "regmap init failed: %ld\n", PTR_ERR(info->regmap));
1264 if (client->dev.of_node) {
1265 info->pdata = imx185_parse_dt(client);
1267 info->pdata = client->dev.platform_data;
1271 pr_err("[IMX185]:%s:Unable to get platform data\n", __func__);
1275 info->i2c_client = client;
1276 atomic_set(&info->in_use, 0);
1279 mclk_name = info->pdata->mclk_name ?
1280 info->pdata->mclk_name : "default_mclk";
1281 info->mclk = devm_clk_get(&client->dev, mclk_name);
1282 if (IS_ERR(info->mclk)) {
1283 dev_err(&client->dev, "%s: unable to get clock %s\n",
1284 __func__, mclk_name);
1285 return PTR_ERR(info->mclk);
1288 imx185_power_get(info);
1290 memcpy(&info->miscdev_info,
1292 sizeof(struct miscdevice));
1294 err = misc_register(&info->miscdev_info);
1296 pr_err("%s:Unable to register misc device!\n", __func__);
1297 goto imx185_probe_fail;
1300 i2c_set_clientdata(client, info);
1301 /* create debugfs interface */
1302 imx185_create_debugfs(info);
1303 pr_err("[IMX185]: end of probing sensor.\n");
1307 imx185_power_put(&info->power);
1313 imx185_remove(struct i2c_client *client)
1315 struct imx185_info *info;
1316 info = i2c_get_clientdata(client);
1317 misc_deregister(&imx185_device);
1319 imx185_power_put(&info->power);
1321 imx185_remove_debugfs(info);
1325 static const struct i2c_device_id imx185_id[] = {
1330 MODULE_DEVICE_TABLE(i2c, imx185_id);
1332 static struct i2c_driver imx185_i2c_driver = {
1335 .owner = THIS_MODULE,
1336 .of_match_table = imx185_of_match,
1338 .probe = imx185_probe,
1339 .remove = imx185_remove,
1340 .id_table = imx185_id,
1343 static int __init imx185_init(void)
1345 pr_info("[IMX185] sensor driver loading\n");
1346 return i2c_add_driver(&imx185_i2c_driver);
1349 static void __exit imx185_exit(void)
1351 i2c_del_driver(&imx185_i2c_driver);
1354 module_init(imx185_init);
1355 module_exit(imx185_exit);