1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd.
9 #include <linux/device.h>
10 #include <linux/delay.h>
11 #include <linux/gpio/consumer.h>
12 #include <linux/i2c.h>
13 #include <linux/module.h>
14 #include <linux/pm_runtime.h>
15 #include <linux/regulator/consumer.h>
16 #include <linux/sysfs.h>
17 #include <media/media-entity.h>
18 #include <media/v4l2-async.h>
19 #include <media/v4l2-ctrls.h>
20 #include <media/v4l2-subdev.h>
22 #ifndef V4L2_CID_DIGITAL_GAIN
23 #define V4L2_CID_DIGITAL_GAIN V4L2_CID_GAIN
26 /* 45Mhz * 4 Binning */
27 #define OV5695_PIXEL_RATE (45 * 1000 * 1000 * 4)
28 #define OV5695_XVCLK_FREQ 24000000
30 #define CHIP_ID 0x005695
31 #define OV5695_REG_CHIP_ID 0x300a
33 #define OV5695_REG_CTRL_MODE 0x0100
34 #define OV5695_MODE_SW_STANDBY 0x0
35 #define OV5695_MODE_STREAMING BIT(0)
37 #define OV5695_REG_EXPOSURE 0x3500
38 #define OV5695_EXPOSURE_MIN 4
39 #define OV5695_EXPOSURE_STEP 1
40 #define OV5695_VTS_MAX 0x7fff
42 #define OV5695_REG_ANALOG_GAIN 0x3509
43 #define ANALOG_GAIN_MIN 0x10
44 #define ANALOG_GAIN_MAX 0xf8
45 #define ANALOG_GAIN_STEP 1
46 #define ANALOG_GAIN_DEFAULT 0xf8
48 #define OV5695_REG_DIGI_GAIN_H 0x350a
49 #define OV5695_REG_DIGI_GAIN_L 0x350b
50 #define OV5695_DIGI_GAIN_L_MASK 0x3f
51 #define OV5695_DIGI_GAIN_H_SHIFT 6
52 #define OV5695_DIGI_GAIN_MIN 0
53 #define OV5695_DIGI_GAIN_MAX (0x4000 - 1)
54 #define OV5695_DIGI_GAIN_STEP 1
55 #define OV5695_DIGI_GAIN_DEFAULT 1024
57 #define OV5695_REG_TEST_PATTERN 0x4503
58 #define OV5695_TEST_PATTERN_ENABLE 0x80
59 #define OV5695_TEST_PATTERN_DISABLE 0x0
61 #define OV5695_REG_VTS 0x380e
63 #define REG_NULL 0xFFFF
65 #define OV5695_REG_VALUE_08BIT 1
66 #define OV5695_REG_VALUE_16BIT 2
67 #define OV5695_REG_VALUE_24BIT 3
69 #define OV5695_LANES 2
70 #define OV5695_BITS_PER_SAMPLE 10
72 static const char * const ov5695_supply_names
[] = {
73 "avdd", /* Analog power */
74 "dovdd", /* Digital I/O power */
75 "dvdd", /* Digital core power */
78 #define OV5695_NUM_SUPPLIES ARRAY_SIZE(ov5695_supply_names)
92 const struct regval
*reg_list
;
96 struct i2c_client
*client
;
98 struct gpio_desc
*reset_gpio
;
99 struct regulator_bulk_data supplies
[OV5695_NUM_SUPPLIES
];
101 struct v4l2_subdev subdev
;
102 struct media_pad pad
;
103 struct v4l2_ctrl_handler ctrl_handler
;
104 struct v4l2_ctrl
*exposure
;
105 struct v4l2_ctrl
*anal_gain
;
106 struct v4l2_ctrl
*digi_gain
;
107 struct v4l2_ctrl
*hblank
;
108 struct v4l2_ctrl
*vblank
;
109 struct v4l2_ctrl
*test_pattern
;
112 const struct ov5695_mode
*cur_mode
;
115 #define to_ov5695(sd) container_of(sd, struct ov5695, subdev)
120 * linelength 672(0x2a0)
121 * framelength 2232(0x8b8)
122 * grabwindow_width 1296
123 * grabwindow_height 972
124 * max_framerate 30fps
125 * mipi_datarate per lane 840Mbps
127 static const struct regval ov5695_global_regs
[] = {
295 * linelength 740(0x2e4)
296 * framelength 2024(0x7e8)
297 * grabwindow_width 2592
298 * grabwindow_height 1944
299 * max_framerate 30fps
300 * mipi_datarate per lane 840Mbps
302 static const struct regval ov5695_2592x1944_regs
[] = {
337 * linelength 672(0x2a0)
338 * framelength 2232(0x8b8)
339 * grabwindow_width 1920
340 * grabwindow_height 1080
341 * max_framerate 30fps
342 * mipi_datarate per lane 840Mbps
344 static const struct regval ov5695_1920x1080_regs
[] = {
379 * linelength 740(0x02e4)
380 * framelength 1012(0x03f4)
381 * grabwindow_width 1296
382 * grabwindow_height 972
383 * max_framerate 60fps
384 * mipi_datarate per lane 840Mbps
386 static const struct regval ov5695_1296x972_regs
[] = {
562 * linelength 672(0x2a0)
563 * framelength 2232(0x8b8)
564 * grabwindow_width 1280
565 * grabwindow_height 720
566 * max_framerate 30fps
567 * mipi_datarate per lane 840Mbps
569 static const struct regval ov5695_1280x720_regs
[] = {
604 * linelength 672(0x2a0)
605 * framelength 558(0x22e)
606 * grabwindow_width 640
607 * grabwindow_height 480
608 * max_framerate 120fps
609 * mipi_datarate per lane 840Mbps
611 static const struct regval ov5695_640x480_regs
[] = {
643 static const struct ov5695_mode supported_modes
[] = {
649 .hts_def
= 0x02e4 * 4,
651 .reg_list
= ov5695_2592x1944_regs
,
658 .hts_def
= 0x02a0 * 4,
660 .reg_list
= ov5695_1920x1080_regs
,
667 .hts_def
= 0x02e4 * 4,
669 .reg_list
= ov5695_1296x972_regs
,
676 .hts_def
= 0x02a0 * 4,
678 .reg_list
= ov5695_1280x720_regs
,
685 .hts_def
= 0x02a0 * 4,
687 .reg_list
= ov5695_640x480_regs
,
691 #define OV5695_LINK_FREQ_420MHZ 420000000
692 static const s64 link_freq_menu_items
[] = {
693 OV5695_LINK_FREQ_420MHZ
696 static const char * const ov5695_test_pattern_menu
[] = {
698 "Vertical Color Bar Type 1",
699 "Vertical Color Bar Type 2",
700 "Vertical Color Bar Type 3",
701 "Vertical Color Bar Type 4"
704 /* Write registers up to 4 at a time */
705 static int ov5695_write_reg(struct i2c_client
*client
, u16 reg
,
719 val_be
= cpu_to_be32(val
);
720 val_p
= (u8
*)&val_be
;
725 buf
[buf_i
++] = val_p
[val_i
++];
727 if (i2c_master_send(client
, buf
, len
+ 2) != len
+ 2)
733 static int ov5695_write_array(struct i2c_client
*client
,
734 const struct regval
*regs
)
739 for (i
= 0; ret
== 0 && regs
[i
].addr
!= REG_NULL
; i
++)
740 ret
= ov5695_write_reg(client
, regs
[i
].addr
,
741 OV5695_REG_VALUE_08BIT
, regs
[i
].val
);
746 /* Read registers up to 4 at a time */
747 static int ov5695_read_reg(struct i2c_client
*client
, u16 reg
, unsigned int len
,
750 struct i2c_msg msgs
[2];
753 __be16 reg_addr_be
= cpu_to_be16(reg
);
759 data_be_p
= (u8
*)&data_be
;
760 /* Write register address */
761 msgs
[0].addr
= client
->addr
;
764 msgs
[0].buf
= (u8
*)®_addr_be
;
766 /* Read data from register */
767 msgs
[1].addr
= client
->addr
;
768 msgs
[1].flags
= I2C_M_RD
;
770 msgs
[1].buf
= &data_be_p
[4 - len
];
772 ret
= i2c_transfer(client
->adapter
, msgs
, ARRAY_SIZE(msgs
));
773 if (ret
!= ARRAY_SIZE(msgs
))
776 *val
= be32_to_cpu(data_be
);
781 static int ov5695_get_reso_dist(const struct ov5695_mode
*mode
,
782 struct v4l2_mbus_framefmt
*framefmt
)
784 return abs(mode
->width
- framefmt
->width
) +
785 abs(mode
->height
- framefmt
->height
);
788 static const struct ov5695_mode
*
789 ov5695_find_best_fit(struct v4l2_subdev_format
*fmt
)
791 struct v4l2_mbus_framefmt
*framefmt
= &fmt
->format
;
793 int cur_best_fit
= 0;
794 int cur_best_fit_dist
= -1;
797 for (i
= 0; i
< ARRAY_SIZE(supported_modes
); i
++) {
798 dist
= ov5695_get_reso_dist(&supported_modes
[i
], framefmt
);
799 if (cur_best_fit_dist
== -1 || dist
< cur_best_fit_dist
) {
800 cur_best_fit_dist
= dist
;
805 return &supported_modes
[cur_best_fit
];
808 static int ov5695_set_fmt(struct v4l2_subdev
*sd
,
809 struct v4l2_subdev_pad_config
*cfg
,
810 struct v4l2_subdev_format
*fmt
)
812 struct ov5695
*ov5695
= to_ov5695(sd
);
813 const struct ov5695_mode
*mode
;
814 s64 h_blank
, vblank_def
;
816 mutex_lock(&ov5695
->mutex
);
818 mode
= ov5695_find_best_fit(fmt
);
819 fmt
->format
.code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
820 fmt
->format
.width
= mode
->width
;
821 fmt
->format
.height
= mode
->height
;
822 fmt
->format
.field
= V4L2_FIELD_NONE
;
823 if (fmt
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
824 #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
825 *v4l2_subdev_get_try_format(sd
, cfg
, fmt
->pad
) = fmt
->format
;
828 ov5695
->cur_mode
= mode
;
829 h_blank
= mode
->hts_def
- mode
->width
;
830 __v4l2_ctrl_modify_range(ov5695
->hblank
, h_blank
,
831 h_blank
, 1, h_blank
);
832 vblank_def
= mode
->vts_def
- mode
->height
;
833 __v4l2_ctrl_modify_range(ov5695
->vblank
, vblank_def
,
834 OV5695_VTS_MAX
- mode
->height
,
838 mutex_unlock(&ov5695
->mutex
);
843 static int ov5695_get_fmt(struct v4l2_subdev
*sd
,
844 struct v4l2_subdev_pad_config
*cfg
,
845 struct v4l2_subdev_format
*fmt
)
847 struct ov5695
*ov5695
= to_ov5695(sd
);
848 const struct ov5695_mode
*mode
= ov5695
->cur_mode
;
850 mutex_lock(&ov5695
->mutex
);
851 if (fmt
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
852 #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
853 fmt
->format
= *v4l2_subdev_get_try_format(sd
, cfg
, fmt
->pad
);
855 mutex_unlock(&ov5695
->mutex
);
859 fmt
->format
.width
= mode
->width
;
860 fmt
->format
.height
= mode
->height
;
861 fmt
->format
.code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
862 fmt
->format
.field
= V4L2_FIELD_NONE
;
864 mutex_unlock(&ov5695
->mutex
);
869 static int ov5695_enum_mbus_code(struct v4l2_subdev
*sd
,
870 struct v4l2_subdev_pad_config
*cfg
,
871 struct v4l2_subdev_mbus_code_enum
*code
)
873 if (code
->index
!= 0)
875 code
->code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
880 static int ov5695_enum_frame_sizes(struct v4l2_subdev
*sd
,
881 struct v4l2_subdev_pad_config
*cfg
,
882 struct v4l2_subdev_frame_size_enum
*fse
)
884 if (fse
->index
>= ARRAY_SIZE(supported_modes
))
887 if (fse
->code
!= MEDIA_BUS_FMT_SBGGR10_1X10
)
890 fse
->min_width
= supported_modes
[fse
->index
].width
;
891 fse
->max_width
= supported_modes
[fse
->index
].width
;
892 fse
->max_height
= supported_modes
[fse
->index
].height
;
893 fse
->min_height
= supported_modes
[fse
->index
].height
;
898 static int ov5695_enable_test_pattern(struct ov5695
*ov5695
, u32 pattern
)
903 val
= (pattern
- 1) | OV5695_TEST_PATTERN_ENABLE
;
905 val
= OV5695_TEST_PATTERN_DISABLE
;
907 return ov5695_write_reg(ov5695
->client
, OV5695_REG_TEST_PATTERN
,
908 OV5695_REG_VALUE_08BIT
, val
);
911 static int __ov5695_start_stream(struct ov5695
*ov5695
)
915 ret
= ov5695_write_array(ov5695
->client
, ov5695_global_regs
);
918 ret
= ov5695_write_array(ov5695
->client
, ov5695
->cur_mode
->reg_list
);
922 /* In case these controls are set before streaming */
923 ret
= __v4l2_ctrl_handler_setup(&ov5695
->ctrl_handler
);
927 return ov5695_write_reg(ov5695
->client
, OV5695_REG_CTRL_MODE
,
928 OV5695_REG_VALUE_08BIT
, OV5695_MODE_STREAMING
);
931 static int __ov5695_stop_stream(struct ov5695
*ov5695
)
933 return ov5695_write_reg(ov5695
->client
, OV5695_REG_CTRL_MODE
,
934 OV5695_REG_VALUE_08BIT
, OV5695_MODE_SW_STANDBY
);
937 static int ov5695_s_stream(struct v4l2_subdev
*sd
, int on
)
939 struct ov5695
*ov5695
= to_ov5695(sd
);
940 struct i2c_client
*client
= ov5695
->client
;
943 mutex_lock(&ov5695
->mutex
);
945 if (on
== ov5695
->streaming
)
946 goto unlock_and_return
;
949 ret
= pm_runtime_get_sync(&client
->dev
);
951 pm_runtime_put_noidle(&client
->dev
);
952 goto unlock_and_return
;
955 ret
= __ov5695_start_stream(ov5695
);
957 v4l2_err(sd
, "start stream failed while write regs\n");
958 pm_runtime_put(&client
->dev
);
959 goto unlock_and_return
;
962 __ov5695_stop_stream(ov5695
);
963 pm_runtime_put(&client
->dev
);
966 ov5695
->streaming
= on
;
969 mutex_unlock(&ov5695
->mutex
);
974 /* Calculate the delay in us by clock rate and clock cycles */
975 static inline u32
ov5695_cal_delay(u32 cycles
)
977 return DIV_ROUND_UP(cycles
, OV5695_XVCLK_FREQ
/ 1000 / 1000);
980 static int __ov5695_power_on(struct ov5695
*ov5695
)
984 struct device
*dev
= &ov5695
->client
->dev
;
986 ret
= clk_prepare_enable(ov5695
->xvclk
);
988 dev_err(dev
, "Failed to enable xvclk\n");
992 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 1);
994 ret
= regulator_bulk_enable(OV5695_NUM_SUPPLIES
, ov5695
->supplies
);
996 dev_err(dev
, "Failed to enable regulators\n");
1000 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 0);
1002 /* 8192 cycles prior to first SCCB transaction */
1003 delay_us
= ov5695_cal_delay(8192);
1004 usleep_range(delay_us
, delay_us
* 2);
1009 clk_disable_unprepare(ov5695
->xvclk
);
1014 static void __ov5695_power_off(struct ov5695
*ov5695
)
1016 clk_disable_unprepare(ov5695
->xvclk
);
1017 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 1);
1018 regulator_bulk_disable(OV5695_NUM_SUPPLIES
, ov5695
->supplies
);
1021 static int __maybe_unused
ov5695_runtime_resume(struct device
*dev
)
1023 struct i2c_client
*client
= to_i2c_client(dev
);
1024 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
1025 struct ov5695
*ov5695
= to_ov5695(sd
);
1027 return __ov5695_power_on(ov5695
);
1030 static int __maybe_unused
ov5695_runtime_suspend(struct device
*dev
)
1032 struct i2c_client
*client
= to_i2c_client(dev
);
1033 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
1034 struct ov5695
*ov5695
= to_ov5695(sd
);
1036 __ov5695_power_off(ov5695
);
1041 #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
1042 static int ov5695_open(struct v4l2_subdev
*sd
, struct v4l2_subdev_fh
*fh
)
1044 struct ov5695
*ov5695
= to_ov5695(sd
);
1045 struct v4l2_mbus_framefmt
*try_fmt
=
1046 v4l2_subdev_get_try_format(sd
, fh
->pad
, 0);
1047 const struct ov5695_mode
*def_mode
= &supported_modes
[0];
1049 mutex_lock(&ov5695
->mutex
);
1050 /* Initialize try_fmt */
1051 try_fmt
->width
= def_mode
->width
;
1052 try_fmt
->height
= def_mode
->height
;
1053 try_fmt
->code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
1054 try_fmt
->field
= V4L2_FIELD_NONE
;
1056 mutex_unlock(&ov5695
->mutex
);
1057 /* No crop or compose */
1063 static const struct dev_pm_ops ov5695_pm_ops
= {
1064 SET_RUNTIME_PM_OPS(ov5695_runtime_suspend
,
1065 ov5695_runtime_resume
, NULL
)
1068 #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
1069 static const struct v4l2_subdev_internal_ops ov5695_internal_ops
= {
1070 .open
= ov5695_open
,
1074 static const struct v4l2_subdev_video_ops ov5695_video_ops
= {
1075 .s_stream
= ov5695_s_stream
,
1078 static const struct v4l2_subdev_pad_ops ov5695_pad_ops
= {
1079 .enum_mbus_code
= ov5695_enum_mbus_code
,
1080 .enum_frame_size
= ov5695_enum_frame_sizes
,
1081 .get_fmt
= ov5695_get_fmt
,
1082 .set_fmt
= ov5695_set_fmt
,
1085 static const struct v4l2_subdev_ops ov5695_subdev_ops
= {
1086 .video
= &ov5695_video_ops
,
1087 .pad
= &ov5695_pad_ops
,
1090 static int ov5695_set_ctrl(struct v4l2_ctrl
*ctrl
)
1092 struct ov5695
*ov5695
= container_of(ctrl
->handler
,
1093 struct ov5695
, ctrl_handler
);
1094 struct i2c_client
*client
= ov5695
->client
;
1098 /* Propagate change of current control to all related controls */
1100 case V4L2_CID_VBLANK
:
1101 /* Update max exposure while meeting expected vblanking */
1102 max
= ov5695
->cur_mode
->height
+ ctrl
->val
- 4;
1103 __v4l2_ctrl_modify_range(ov5695
->exposure
,
1104 ov5695
->exposure
->minimum
, max
,
1105 ov5695
->exposure
->step
,
1106 ov5695
->exposure
->default_value
);
1110 if (!pm_runtime_get_if_in_use(&client
->dev
))
1114 case V4L2_CID_EXPOSURE
:
1115 /* 4 least significant bits of expsoure are fractional part */
1116 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_EXPOSURE
,
1117 OV5695_REG_VALUE_24BIT
, ctrl
->val
<< 4);
1119 case V4L2_CID_ANALOGUE_GAIN
:
1120 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_ANALOG_GAIN
,
1121 OV5695_REG_VALUE_08BIT
, ctrl
->val
);
1123 case V4L2_CID_DIGITAL_GAIN
:
1124 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_DIGI_GAIN_L
,
1125 OV5695_REG_VALUE_08BIT
,
1126 ctrl
->val
& OV5695_DIGI_GAIN_L_MASK
);
1127 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_DIGI_GAIN_H
,
1128 OV5695_REG_VALUE_08BIT
,
1129 ctrl
->val
>> OV5695_DIGI_GAIN_H_SHIFT
);
1131 case V4L2_CID_VBLANK
:
1132 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_VTS
,
1133 OV5695_REG_VALUE_16BIT
,
1134 ctrl
->val
+ ov5695
->cur_mode
->height
);
1136 case V4L2_CID_TEST_PATTERN
:
1137 ret
= ov5695_enable_test_pattern(ov5695
, ctrl
->val
);
1140 dev_warn(&client
->dev
, "%s Unhandled id:0x%x, val:0x%x\n",
1141 __func__
, ctrl
->id
, ctrl
->val
);
1145 pm_runtime_put(&client
->dev
);
1150 static const struct v4l2_ctrl_ops ov5695_ctrl_ops
= {
1151 .s_ctrl
= ov5695_set_ctrl
,
1154 static int ov5695_initialize_controls(struct ov5695
*ov5695
)
1156 const struct ov5695_mode
*mode
;
1157 struct v4l2_ctrl_handler
*handler
;
1158 struct v4l2_ctrl
*ctrl
;
1159 s64 exposure_max
, vblank_def
;
1163 handler
= &ov5695
->ctrl_handler
;
1164 mode
= ov5695
->cur_mode
;
1165 ret
= v4l2_ctrl_handler_init(handler
, 8);
1168 handler
->lock
= &ov5695
->mutex
;
1170 ctrl
= v4l2_ctrl_new_int_menu(handler
, NULL
, V4L2_CID_LINK_FREQ
,
1171 0, 0, link_freq_menu_items
);
1173 ctrl
->flags
|= V4L2_CTRL_FLAG_READ_ONLY
;
1175 v4l2_ctrl_new_std(handler
, NULL
, V4L2_CID_PIXEL_RATE
,
1176 0, OV5695_PIXEL_RATE
, 1, OV5695_PIXEL_RATE
);
1178 h_blank
= mode
->hts_def
- mode
->width
;
1179 ov5695
->hblank
= v4l2_ctrl_new_std(handler
, NULL
, V4L2_CID_HBLANK
,
1180 h_blank
, h_blank
, 1, h_blank
);
1182 ov5695
->hblank
->flags
|= V4L2_CTRL_FLAG_READ_ONLY
;
1184 vblank_def
= mode
->vts_def
- mode
->height
;
1185 ov5695
->vblank
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1186 V4L2_CID_VBLANK
, vblank_def
,
1187 OV5695_VTS_MAX
- mode
->height
,
1190 exposure_max
= mode
->vts_def
- 4;
1191 ov5695
->exposure
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1192 V4L2_CID_EXPOSURE
, OV5695_EXPOSURE_MIN
,
1193 exposure_max
, OV5695_EXPOSURE_STEP
,
1196 ov5695
->anal_gain
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1197 V4L2_CID_ANALOGUE_GAIN
, ANALOG_GAIN_MIN
,
1198 ANALOG_GAIN_MAX
, ANALOG_GAIN_STEP
,
1199 ANALOG_GAIN_DEFAULT
);
1202 ov5695
->digi_gain
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1203 V4L2_CID_DIGITAL_GAIN
, OV5695_DIGI_GAIN_MIN
,
1204 OV5695_DIGI_GAIN_MAX
, OV5695_DIGI_GAIN_STEP
,
1205 OV5695_DIGI_GAIN_DEFAULT
);
1207 ov5695
->test_pattern
= v4l2_ctrl_new_std_menu_items(handler
,
1208 &ov5695_ctrl_ops
, V4L2_CID_TEST_PATTERN
,
1209 ARRAY_SIZE(ov5695_test_pattern_menu
) - 1,
1210 0, 0, ov5695_test_pattern_menu
);
1212 if (handler
->error
) {
1213 ret
= handler
->error
;
1214 dev_err(&ov5695
->client
->dev
,
1215 "Failed to init controls(%d)\n", ret
);
1216 goto err_free_handler
;
1219 ov5695
->subdev
.ctrl_handler
= handler
;
1224 v4l2_ctrl_handler_free(handler
);
1229 static int ov5695_check_sensor_id(struct ov5695
*ov5695
,
1230 struct i2c_client
*client
)
1232 struct device
*dev
= &ov5695
->client
->dev
;
1236 ret
= ov5695_read_reg(client
, OV5695_REG_CHIP_ID
,
1237 OV5695_REG_VALUE_24BIT
, &id
);
1238 if (id
!= CHIP_ID
) {
1239 dev_err(dev
, "Unexpected sensor id(%06x), ret(%d)\n", id
, ret
);
1243 dev_info(dev
, "Detected OV%06x sensor\n", CHIP_ID
);
1248 static int ov5695_configure_regulators(struct ov5695
*ov5695
)
1252 for (i
= 0; i
< OV5695_NUM_SUPPLIES
; i
++)
1253 ov5695
->supplies
[i
].supply
= ov5695_supply_names
[i
];
1255 return devm_regulator_bulk_get(&ov5695
->client
->dev
,
1256 OV5695_NUM_SUPPLIES
,
1260 static int ov5695_probe(struct i2c_client
*client
,
1261 const struct i2c_device_id
*id
)
1263 struct device
*dev
= &client
->dev
;
1264 struct ov5695
*ov5695
;
1265 struct v4l2_subdev
*sd
;
1268 ov5695
= devm_kzalloc(dev
, sizeof(*ov5695
), GFP_KERNEL
);
1272 ov5695
->client
= client
;
1273 ov5695
->cur_mode
= &supported_modes
[0];
1275 ov5695
->xvclk
= devm_clk_get(dev
, "xvclk");
1276 if (IS_ERR(ov5695
->xvclk
)) {
1277 dev_err(dev
, "Failed to get xvclk\n");
1280 ret
= clk_set_rate(ov5695
->xvclk
, OV5695_XVCLK_FREQ
);
1282 dev_err(dev
, "Failed to set xvclk rate (24MHz)\n");
1285 if (clk_get_rate(ov5695
->xvclk
) != OV5695_XVCLK_FREQ
)
1286 dev_warn(dev
, "xvclk mismatched, modes are based on 24MHz\n");
1288 ov5695
->reset_gpio
= devm_gpiod_get(dev
, "reset", GPIOD_OUT_LOW
);
1289 if (IS_ERR(ov5695
->reset_gpio
)) {
1290 dev_err(dev
, "Failed to get reset-gpios\n");
1294 ret
= ov5695_configure_regulators(ov5695
);
1296 dev_err(dev
, "Failed to get power regulators\n");
1300 mutex_init(&ov5695
->mutex
);
1302 sd
= &ov5695
->subdev
;
1303 v4l2_i2c_subdev_init(sd
, client
, &ov5695_subdev_ops
);
1304 ret
= ov5695_initialize_controls(ov5695
);
1306 goto err_destroy_mutex
;
1308 ret
= __ov5695_power_on(ov5695
);
1310 goto err_free_handler
;
1312 ret
= ov5695_check_sensor_id(ov5695
, client
);
1316 #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
1317 sd
->internal_ops
= &ov5695_internal_ops
;
1318 sd
->flags
|= V4L2_SUBDEV_FL_HAS_DEVNODE
;
1320 #if defined(CONFIG_MEDIA_CONTROLLER)
1321 ov5695
->pad
.flags
= MEDIA_PAD_FL_SOURCE
;
1322 sd
->entity
.function
= MEDIA_ENT_F_CAM_SENSOR
;
1323 ret
= media_entity_pads_init(&sd
->entity
, 1, &ov5695
->pad
);
1328 ret
= v4l2_async_register_subdev_sensor_common(sd
);
1330 dev_err(dev
, "v4l2 async register subdev failed\n");
1331 goto err_clean_entity
;
1334 pm_runtime_set_active(dev
);
1335 pm_runtime_enable(dev
);
1336 pm_runtime_idle(dev
);
1341 #if defined(CONFIG_MEDIA_CONTROLLER)
1342 media_entity_cleanup(&sd
->entity
);
1345 __ov5695_power_off(ov5695
);
1347 v4l2_ctrl_handler_free(&ov5695
->ctrl_handler
);
1349 mutex_destroy(&ov5695
->mutex
);
1354 static int ov5695_remove(struct i2c_client
*client
)
1356 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
1357 struct ov5695
*ov5695
= to_ov5695(sd
);
1359 v4l2_async_unregister_subdev(sd
);
1360 #if defined(CONFIG_MEDIA_CONTROLLER)
1361 media_entity_cleanup(&sd
->entity
);
1363 v4l2_ctrl_handler_free(&ov5695
->ctrl_handler
);
1364 mutex_destroy(&ov5695
->mutex
);
1366 pm_runtime_disable(&client
->dev
);
1367 if (!pm_runtime_status_suspended(&client
->dev
))
1368 __ov5695_power_off(ov5695
);
1369 pm_runtime_set_suspended(&client
->dev
);
1374 #if IS_ENABLED(CONFIG_OF)
1375 static const struct of_device_id ov5695_of_match
[] = {
1376 { .compatible
= "ovti,ov5695" },
1379 MODULE_DEVICE_TABLE(of
, ov5695_of_match
);
1382 static struct i2c_driver ov5695_i2c_driver
= {
1385 .pm
= &ov5695_pm_ops
,
1386 .of_match_table
= of_match_ptr(ov5695_of_match
),
1388 .probe
= &ov5695_probe
,
1389 .remove
= &ov5695_remove
,
1392 module_i2c_driver(ov5695_i2c_driver
);
1394 MODULE_DESCRIPTION("OmniVision ov5695 sensor driver");
1395 MODULE_LICENSE("GPL v2");