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
;
111 const struct ov5695_mode
*cur_mode
;
114 #define to_ov5695(sd) container_of(sd, struct ov5695, subdev)
119 * linelength 672(0x2a0)
120 * framelength 2232(0x8b8)
121 * grabwindow_width 1296
122 * grabwindow_height 972
123 * max_framerate 30fps
124 * mipi_datarate per lane 840Mbps
126 static const struct regval ov5695_global_regs
[] = {
294 * linelength 740(0x2e4)
295 * framelength 2024(0x7e8)
296 * grabwindow_width 2592
297 * grabwindow_height 1944
298 * max_framerate 30fps
299 * mipi_datarate per lane 840Mbps
301 static const struct regval ov5695_2592x1944_regs
[] = {
336 * linelength 672(0x2a0)
337 * framelength 2232(0x8b8)
338 * grabwindow_width 1920
339 * grabwindow_height 1080
340 * max_framerate 30fps
341 * mipi_datarate per lane 840Mbps
343 static const struct regval ov5695_1920x1080_regs
[] = {
378 * linelength 740(0x02e4)
379 * framelength 1012(0x03f4)
380 * grabwindow_width 1296
381 * grabwindow_height 972
382 * max_framerate 60fps
383 * mipi_datarate per lane 840Mbps
385 static const struct regval ov5695_1296x972_regs
[] = {
561 * linelength 672(0x2a0)
562 * framelength 2232(0x8b8)
563 * grabwindow_width 1280
564 * grabwindow_height 720
565 * max_framerate 30fps
566 * mipi_datarate per lane 840Mbps
568 static const struct regval ov5695_1280x720_regs
[] = {
603 * linelength 672(0x2a0)
604 * framelength 558(0x22e)
605 * grabwindow_width 640
606 * grabwindow_height 480
607 * max_framerate 120fps
608 * mipi_datarate per lane 840Mbps
610 static const struct regval ov5695_640x480_regs
[] = {
642 static const struct ov5695_mode supported_modes
[] = {
648 .hts_def
= 0x02e4 * 4,
650 .reg_list
= ov5695_2592x1944_regs
,
657 .hts_def
= 0x02a0 * 4,
659 .reg_list
= ov5695_1920x1080_regs
,
666 .hts_def
= 0x02e4 * 4,
668 .reg_list
= ov5695_1296x972_regs
,
675 .hts_def
= 0x02a0 * 4,
677 .reg_list
= ov5695_1280x720_regs
,
684 .hts_def
= 0x02a0 * 4,
686 .reg_list
= ov5695_640x480_regs
,
690 #define OV5695_LINK_FREQ_420MHZ 420000000
691 static const s64 link_freq_menu_items
[] = {
692 OV5695_LINK_FREQ_420MHZ
695 static const char * const ov5695_test_pattern_menu
[] = {
697 "Vertical Color Bar Type 1",
698 "Vertical Color Bar Type 2",
699 "Vertical Color Bar Type 3",
700 "Vertical Color Bar Type 4"
703 /* Write registers up to 4 at a time */
704 static int ov5695_write_reg(struct i2c_client
*client
, u16 reg
,
718 val_be
= cpu_to_be32(val
);
719 val_p
= (u8
*)&val_be
;
724 buf
[buf_i
++] = val_p
[val_i
++];
726 if (i2c_master_send(client
, buf
, len
+ 2) != len
+ 2)
732 static int ov5695_write_array(struct i2c_client
*client
,
733 const struct regval
*regs
)
738 for (i
= 0; ret
== 0 && regs
[i
].addr
!= REG_NULL
; i
++)
739 ret
= ov5695_write_reg(client
, regs
[i
].addr
,
740 OV5695_REG_VALUE_08BIT
, regs
[i
].val
);
745 /* Read registers up to 4 at a time */
746 static int ov5695_read_reg(struct i2c_client
*client
, u16 reg
, unsigned int len
,
749 struct i2c_msg msgs
[2];
752 __be16 reg_addr_be
= cpu_to_be16(reg
);
758 data_be_p
= (u8
*)&data_be
;
759 /* Write register address */
760 msgs
[0].addr
= client
->addr
;
763 msgs
[0].buf
= (u8
*)®_addr_be
;
765 /* Read data from register */
766 msgs
[1].addr
= client
->addr
;
767 msgs
[1].flags
= I2C_M_RD
;
769 msgs
[1].buf
= &data_be_p
[4 - len
];
771 ret
= i2c_transfer(client
->adapter
, msgs
, ARRAY_SIZE(msgs
));
772 if (ret
!= ARRAY_SIZE(msgs
))
775 *val
= be32_to_cpu(data_be
);
780 static int ov5695_get_reso_dist(const struct ov5695_mode
*mode
,
781 struct v4l2_mbus_framefmt
*framefmt
)
783 return abs(mode
->width
- framefmt
->width
) +
784 abs(mode
->height
- framefmt
->height
);
787 static const struct ov5695_mode
*
788 ov5695_find_best_fit(struct v4l2_subdev_format
*fmt
)
790 struct v4l2_mbus_framefmt
*framefmt
= &fmt
->format
;
792 int cur_best_fit
= 0;
793 int cur_best_fit_dist
= -1;
796 for (i
= 0; i
< ARRAY_SIZE(supported_modes
); i
++) {
797 dist
= ov5695_get_reso_dist(&supported_modes
[i
], framefmt
);
798 if (cur_best_fit_dist
== -1 || dist
< cur_best_fit_dist
) {
799 cur_best_fit_dist
= dist
;
804 return &supported_modes
[cur_best_fit
];
807 static int ov5695_set_fmt(struct v4l2_subdev
*sd
,
808 struct v4l2_subdev_state
*sd_state
,
809 struct v4l2_subdev_format
*fmt
)
811 struct ov5695
*ov5695
= to_ov5695(sd
);
812 const struct ov5695_mode
*mode
;
813 s64 h_blank
, vblank_def
;
815 mutex_lock(&ov5695
->mutex
);
817 mode
= ov5695_find_best_fit(fmt
);
818 fmt
->format
.code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
819 fmt
->format
.width
= mode
->width
;
820 fmt
->format
.height
= mode
->height
;
821 fmt
->format
.field
= V4L2_FIELD_NONE
;
822 if (fmt
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
823 *v4l2_subdev_state_get_format(sd_state
, fmt
->pad
) = fmt
->format
;
825 ov5695
->cur_mode
= mode
;
826 h_blank
= mode
->hts_def
- mode
->width
;
827 __v4l2_ctrl_modify_range(ov5695
->hblank
, h_blank
,
828 h_blank
, 1, h_blank
);
829 vblank_def
= mode
->vts_def
- mode
->height
;
830 __v4l2_ctrl_modify_range(ov5695
->vblank
, vblank_def
,
831 OV5695_VTS_MAX
- mode
->height
,
835 mutex_unlock(&ov5695
->mutex
);
840 static int ov5695_get_fmt(struct v4l2_subdev
*sd
,
841 struct v4l2_subdev_state
*sd_state
,
842 struct v4l2_subdev_format
*fmt
)
844 struct ov5695
*ov5695
= to_ov5695(sd
);
845 const struct ov5695_mode
*mode
= ov5695
->cur_mode
;
847 mutex_lock(&ov5695
->mutex
);
848 if (fmt
->which
== V4L2_SUBDEV_FORMAT_TRY
) {
849 fmt
->format
= *v4l2_subdev_state_get_format(sd_state
,
852 fmt
->format
.width
= mode
->width
;
853 fmt
->format
.height
= mode
->height
;
854 fmt
->format
.code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
855 fmt
->format
.field
= V4L2_FIELD_NONE
;
857 mutex_unlock(&ov5695
->mutex
);
862 static int ov5695_enum_mbus_code(struct v4l2_subdev
*sd
,
863 struct v4l2_subdev_state
*sd_state
,
864 struct v4l2_subdev_mbus_code_enum
*code
)
866 if (code
->index
!= 0)
868 code
->code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
873 static int ov5695_enum_frame_sizes(struct v4l2_subdev
*sd
,
874 struct v4l2_subdev_state
*sd_state
,
875 struct v4l2_subdev_frame_size_enum
*fse
)
877 if (fse
->index
>= ARRAY_SIZE(supported_modes
))
880 if (fse
->code
!= MEDIA_BUS_FMT_SBGGR10_1X10
)
883 fse
->min_width
= supported_modes
[fse
->index
].width
;
884 fse
->max_width
= supported_modes
[fse
->index
].width
;
885 fse
->max_height
= supported_modes
[fse
->index
].height
;
886 fse
->min_height
= supported_modes
[fse
->index
].height
;
891 static int ov5695_enable_test_pattern(struct ov5695
*ov5695
, u32 pattern
)
896 val
= (pattern
- 1) | OV5695_TEST_PATTERN_ENABLE
;
898 val
= OV5695_TEST_PATTERN_DISABLE
;
900 return ov5695_write_reg(ov5695
->client
, OV5695_REG_TEST_PATTERN
,
901 OV5695_REG_VALUE_08BIT
, val
);
904 static int __ov5695_start_stream(struct ov5695
*ov5695
)
908 ret
= ov5695_write_array(ov5695
->client
, ov5695_global_regs
);
911 ret
= ov5695_write_array(ov5695
->client
, ov5695
->cur_mode
->reg_list
);
915 /* In case these controls are set before streaming */
916 ret
= __v4l2_ctrl_handler_setup(&ov5695
->ctrl_handler
);
920 return ov5695_write_reg(ov5695
->client
, OV5695_REG_CTRL_MODE
,
921 OV5695_REG_VALUE_08BIT
, OV5695_MODE_STREAMING
);
924 static int __ov5695_stop_stream(struct ov5695
*ov5695
)
926 return ov5695_write_reg(ov5695
->client
, OV5695_REG_CTRL_MODE
,
927 OV5695_REG_VALUE_08BIT
, OV5695_MODE_SW_STANDBY
);
930 static int ov5695_s_stream(struct v4l2_subdev
*sd
, int on
)
932 struct ov5695
*ov5695
= to_ov5695(sd
);
933 struct i2c_client
*client
= ov5695
->client
;
936 mutex_lock(&ov5695
->mutex
);
939 ret
= pm_runtime_resume_and_get(&client
->dev
);
941 goto unlock_and_return
;
943 ret
= __ov5695_start_stream(ov5695
);
945 v4l2_err(sd
, "start stream failed while write regs\n");
946 pm_runtime_put(&client
->dev
);
947 goto unlock_and_return
;
950 __ov5695_stop_stream(ov5695
);
951 pm_runtime_put(&client
->dev
);
955 mutex_unlock(&ov5695
->mutex
);
960 static int __ov5695_power_on(struct ov5695
*ov5695
)
963 struct device
*dev
= &ov5695
->client
->dev
;
965 ret
= clk_prepare_enable(ov5695
->xvclk
);
967 dev_err(dev
, "Failed to enable xvclk\n");
971 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 1);
974 * The hardware requires the regulators to be powered on in order,
975 * so enable them one by one.
977 for (i
= 0; i
< OV5695_NUM_SUPPLIES
; i
++) {
978 ret
= regulator_enable(ov5695
->supplies
[i
].consumer
);
980 dev_err(dev
, "Failed to enable %s: %d\n",
981 ov5695
->supplies
[i
].supply
, ret
);
982 goto disable_reg_clk
;
986 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 0);
988 usleep_range(1000, 1200);
993 for (--i
; i
>= 0; i
--)
994 regulator_disable(ov5695
->supplies
[i
].consumer
);
995 clk_disable_unprepare(ov5695
->xvclk
);
1000 static void __ov5695_power_off(struct ov5695
*ov5695
)
1002 struct device
*dev
= &ov5695
->client
->dev
;
1005 clk_disable_unprepare(ov5695
->xvclk
);
1006 gpiod_set_value_cansleep(ov5695
->reset_gpio
, 1);
1009 * The hardware requires the regulators to be powered off in order,
1010 * so disable them one by one.
1012 for (i
= OV5695_NUM_SUPPLIES
- 1; i
>= 0; i
--) {
1013 ret
= regulator_disable(ov5695
->supplies
[i
].consumer
);
1015 dev_err(dev
, "Failed to disable %s: %d\n",
1016 ov5695
->supplies
[i
].supply
, ret
);
1020 static int __maybe_unused
ov5695_runtime_resume(struct device
*dev
)
1022 struct v4l2_subdev
*sd
= dev_get_drvdata(dev
);
1023 struct ov5695
*ov5695
= to_ov5695(sd
);
1025 return __ov5695_power_on(ov5695
);
1028 static int __maybe_unused
ov5695_runtime_suspend(struct device
*dev
)
1030 struct v4l2_subdev
*sd
= dev_get_drvdata(dev
);
1031 struct ov5695
*ov5695
= to_ov5695(sd
);
1033 __ov5695_power_off(ov5695
);
1038 static int ov5695_open(struct v4l2_subdev
*sd
, struct v4l2_subdev_fh
*fh
)
1040 struct ov5695
*ov5695
= to_ov5695(sd
);
1041 struct v4l2_mbus_framefmt
*try_fmt
=
1042 v4l2_subdev_state_get_format(fh
->state
, 0);
1043 const struct ov5695_mode
*def_mode
= &supported_modes
[0];
1045 mutex_lock(&ov5695
->mutex
);
1046 /* Initialize try_fmt */
1047 try_fmt
->width
= def_mode
->width
;
1048 try_fmt
->height
= def_mode
->height
;
1049 try_fmt
->code
= MEDIA_BUS_FMT_SBGGR10_1X10
;
1050 try_fmt
->field
= V4L2_FIELD_NONE
;
1052 mutex_unlock(&ov5695
->mutex
);
1053 /* No crop or compose */
1058 static const struct dev_pm_ops ov5695_pm_ops
= {
1059 SET_RUNTIME_PM_OPS(ov5695_runtime_suspend
,
1060 ov5695_runtime_resume
, NULL
)
1063 static const struct v4l2_subdev_internal_ops ov5695_internal_ops
= {
1064 .open
= ov5695_open
,
1067 static const struct v4l2_subdev_video_ops ov5695_video_ops
= {
1068 .s_stream
= ov5695_s_stream
,
1071 static const struct v4l2_subdev_pad_ops ov5695_pad_ops
= {
1072 .enum_mbus_code
= ov5695_enum_mbus_code
,
1073 .enum_frame_size
= ov5695_enum_frame_sizes
,
1074 .get_fmt
= ov5695_get_fmt
,
1075 .set_fmt
= ov5695_set_fmt
,
1078 static const struct v4l2_subdev_ops ov5695_subdev_ops
= {
1079 .video
= &ov5695_video_ops
,
1080 .pad
= &ov5695_pad_ops
,
1083 static int ov5695_set_ctrl(struct v4l2_ctrl
*ctrl
)
1085 struct ov5695
*ov5695
= container_of(ctrl
->handler
,
1086 struct ov5695
, ctrl_handler
);
1087 struct i2c_client
*client
= ov5695
->client
;
1091 /* Propagate change of current control to all related controls */
1093 case V4L2_CID_VBLANK
:
1094 /* Update max exposure while meeting expected vblanking */
1095 max
= ov5695
->cur_mode
->height
+ ctrl
->val
- 4;
1096 __v4l2_ctrl_modify_range(ov5695
->exposure
,
1097 ov5695
->exposure
->minimum
, max
,
1098 ov5695
->exposure
->step
,
1099 ov5695
->exposure
->default_value
);
1103 if (!pm_runtime_get_if_in_use(&client
->dev
))
1107 case V4L2_CID_EXPOSURE
:
1108 /* 4 least significant bits of exposure are fractional part */
1109 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_EXPOSURE
,
1110 OV5695_REG_VALUE_24BIT
, ctrl
->val
<< 4);
1112 case V4L2_CID_ANALOGUE_GAIN
:
1113 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_ANALOG_GAIN
,
1114 OV5695_REG_VALUE_08BIT
, ctrl
->val
);
1116 case V4L2_CID_DIGITAL_GAIN
:
1117 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_DIGI_GAIN_L
,
1118 OV5695_REG_VALUE_08BIT
,
1119 ctrl
->val
& OV5695_DIGI_GAIN_L_MASK
);
1120 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_DIGI_GAIN_H
,
1121 OV5695_REG_VALUE_08BIT
,
1122 ctrl
->val
>> OV5695_DIGI_GAIN_H_SHIFT
);
1124 case V4L2_CID_VBLANK
:
1125 ret
= ov5695_write_reg(ov5695
->client
, OV5695_REG_VTS
,
1126 OV5695_REG_VALUE_16BIT
,
1127 ctrl
->val
+ ov5695
->cur_mode
->height
);
1129 case V4L2_CID_TEST_PATTERN
:
1130 ret
= ov5695_enable_test_pattern(ov5695
, ctrl
->val
);
1133 dev_warn(&client
->dev
, "%s Unhandled id:0x%x, val:0x%x\n",
1134 __func__
, ctrl
->id
, ctrl
->val
);
1138 pm_runtime_put(&client
->dev
);
1143 static const struct v4l2_ctrl_ops ov5695_ctrl_ops
= {
1144 .s_ctrl
= ov5695_set_ctrl
,
1147 static int ov5695_initialize_controls(struct ov5695
*ov5695
)
1149 const struct ov5695_mode
*mode
;
1150 struct v4l2_ctrl_handler
*handler
;
1151 struct v4l2_ctrl
*ctrl
;
1152 s64 exposure_max
, vblank_def
;
1156 handler
= &ov5695
->ctrl_handler
;
1157 mode
= ov5695
->cur_mode
;
1158 ret
= v4l2_ctrl_handler_init(handler
, 8);
1161 handler
->lock
= &ov5695
->mutex
;
1163 ctrl
= v4l2_ctrl_new_int_menu(handler
, NULL
, V4L2_CID_LINK_FREQ
,
1164 0, 0, link_freq_menu_items
);
1166 ctrl
->flags
|= V4L2_CTRL_FLAG_READ_ONLY
;
1168 v4l2_ctrl_new_std(handler
, NULL
, V4L2_CID_PIXEL_RATE
,
1169 0, OV5695_PIXEL_RATE
, 1, OV5695_PIXEL_RATE
);
1171 h_blank
= mode
->hts_def
- mode
->width
;
1172 ov5695
->hblank
= v4l2_ctrl_new_std(handler
, NULL
, V4L2_CID_HBLANK
,
1173 h_blank
, h_blank
, 1, h_blank
);
1175 ov5695
->hblank
->flags
|= V4L2_CTRL_FLAG_READ_ONLY
;
1177 vblank_def
= mode
->vts_def
- mode
->height
;
1178 ov5695
->vblank
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1179 V4L2_CID_VBLANK
, vblank_def
,
1180 OV5695_VTS_MAX
- mode
->height
,
1183 exposure_max
= mode
->vts_def
- 4;
1184 ov5695
->exposure
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1185 V4L2_CID_EXPOSURE
, OV5695_EXPOSURE_MIN
,
1186 exposure_max
, OV5695_EXPOSURE_STEP
,
1189 ov5695
->anal_gain
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1190 V4L2_CID_ANALOGUE_GAIN
, ANALOG_GAIN_MIN
,
1191 ANALOG_GAIN_MAX
, ANALOG_GAIN_STEP
,
1192 ANALOG_GAIN_DEFAULT
);
1195 ov5695
->digi_gain
= v4l2_ctrl_new_std(handler
, &ov5695_ctrl_ops
,
1196 V4L2_CID_DIGITAL_GAIN
, OV5695_DIGI_GAIN_MIN
,
1197 OV5695_DIGI_GAIN_MAX
, OV5695_DIGI_GAIN_STEP
,
1198 OV5695_DIGI_GAIN_DEFAULT
);
1200 ov5695
->test_pattern
= v4l2_ctrl_new_std_menu_items(handler
,
1201 &ov5695_ctrl_ops
, V4L2_CID_TEST_PATTERN
,
1202 ARRAY_SIZE(ov5695_test_pattern_menu
) - 1,
1203 0, 0, ov5695_test_pattern_menu
);
1205 if (handler
->error
) {
1206 ret
= handler
->error
;
1207 dev_err(&ov5695
->client
->dev
,
1208 "Failed to init controls(%d)\n", ret
);
1209 goto err_free_handler
;
1212 ov5695
->subdev
.ctrl_handler
= handler
;
1217 v4l2_ctrl_handler_free(handler
);
1222 static int ov5695_check_sensor_id(struct ov5695
*ov5695
,
1223 struct i2c_client
*client
)
1225 struct device
*dev
= &ov5695
->client
->dev
;
1229 ret
= ov5695_read_reg(client
, OV5695_REG_CHIP_ID
,
1230 OV5695_REG_VALUE_24BIT
, &id
);
1231 if (id
!= CHIP_ID
) {
1232 dev_err(dev
, "Unexpected sensor id(%06x), ret(%d)\n", id
, ret
);
1236 dev_info(dev
, "Detected OV%06x sensor\n", CHIP_ID
);
1241 static int ov5695_configure_regulators(struct ov5695
*ov5695
)
1245 for (i
= 0; i
< OV5695_NUM_SUPPLIES
; i
++)
1246 ov5695
->supplies
[i
].supply
= ov5695_supply_names
[i
];
1248 return devm_regulator_bulk_get(&ov5695
->client
->dev
,
1249 OV5695_NUM_SUPPLIES
,
1253 static int ov5695_probe(struct i2c_client
*client
)
1255 struct device
*dev
= &client
->dev
;
1256 struct ov5695
*ov5695
;
1257 struct v4l2_subdev
*sd
;
1260 ov5695
= devm_kzalloc(dev
, sizeof(*ov5695
), GFP_KERNEL
);
1264 ov5695
->client
= client
;
1265 ov5695
->cur_mode
= &supported_modes
[0];
1267 ov5695
->xvclk
= devm_clk_get(dev
, "xvclk");
1268 if (IS_ERR(ov5695
->xvclk
)) {
1269 dev_err(dev
, "Failed to get xvclk\n");
1272 ret
= clk_set_rate(ov5695
->xvclk
, OV5695_XVCLK_FREQ
);
1274 dev_err(dev
, "Failed to set xvclk rate (24MHz)\n");
1277 if (clk_get_rate(ov5695
->xvclk
) != OV5695_XVCLK_FREQ
)
1278 dev_warn(dev
, "xvclk mismatched, modes are based on 24MHz\n");
1280 ov5695
->reset_gpio
= devm_gpiod_get(dev
, "reset", GPIOD_OUT_HIGH
);
1281 if (IS_ERR(ov5695
->reset_gpio
)) {
1282 dev_err(dev
, "Failed to get reset-gpios\n");
1286 ret
= ov5695_configure_regulators(ov5695
);
1288 dev_err(dev
, "Failed to get power regulators\n");
1292 mutex_init(&ov5695
->mutex
);
1294 sd
= &ov5695
->subdev
;
1295 v4l2_i2c_subdev_init(sd
, client
, &ov5695_subdev_ops
);
1296 ret
= ov5695_initialize_controls(ov5695
);
1298 goto err_destroy_mutex
;
1300 ret
= __ov5695_power_on(ov5695
);
1302 goto err_free_handler
;
1304 ret
= ov5695_check_sensor_id(ov5695
, client
);
1308 sd
->internal_ops
= &ov5695_internal_ops
;
1309 sd
->flags
|= V4L2_SUBDEV_FL_HAS_DEVNODE
;
1310 ov5695
->pad
.flags
= MEDIA_PAD_FL_SOURCE
;
1311 sd
->entity
.function
= MEDIA_ENT_F_CAM_SENSOR
;
1312 ret
= media_entity_pads_init(&sd
->entity
, 1, &ov5695
->pad
);
1316 ret
= v4l2_async_register_subdev_sensor(sd
);
1318 dev_err(dev
, "v4l2 async register subdev failed\n");
1319 goto err_clean_entity
;
1322 pm_runtime_set_active(dev
);
1323 pm_runtime_enable(dev
);
1324 pm_runtime_idle(dev
);
1329 media_entity_cleanup(&sd
->entity
);
1331 __ov5695_power_off(ov5695
);
1333 v4l2_ctrl_handler_free(&ov5695
->ctrl_handler
);
1335 mutex_destroy(&ov5695
->mutex
);
1340 static void ov5695_remove(struct i2c_client
*client
)
1342 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
1343 struct ov5695
*ov5695
= to_ov5695(sd
);
1345 v4l2_async_unregister_subdev(sd
);
1346 media_entity_cleanup(&sd
->entity
);
1347 v4l2_ctrl_handler_free(&ov5695
->ctrl_handler
);
1348 mutex_destroy(&ov5695
->mutex
);
1350 pm_runtime_disable(&client
->dev
);
1351 if (!pm_runtime_status_suspended(&client
->dev
))
1352 __ov5695_power_off(ov5695
);
1353 pm_runtime_set_suspended(&client
->dev
);
1356 #if IS_ENABLED(CONFIG_OF)
1357 static const struct of_device_id ov5695_of_match
[] = {
1358 { .compatible
= "ovti,ov5695" },
1361 MODULE_DEVICE_TABLE(of
, ov5695_of_match
);
1364 static struct i2c_driver ov5695_i2c_driver
= {
1367 .pm
= &ov5695_pm_ops
,
1368 .of_match_table
= of_match_ptr(ov5695_of_match
),
1370 .probe
= ov5695_probe
,
1371 .remove
= ov5695_remove
,
1374 module_i2c_driver(ov5695_i2c_driver
);
1376 MODULE_DESCRIPTION("OmniVision ov5695 sensor driver");
1377 MODULE_LICENSE("GPL v2");