1 /* SPDX-License-Identifier: GPL-2.0 */
6 #define IMX219_FRAME_LENGTH_LINES 0x0160
7 #define IMX219_LINE_LENGTH_PIXELS 0x0162
8 #define IMX219_HORIZONTAL_START_H 0x0164
9 #define IMX219_VERTICAL_START_H 0x0168
10 #define IMX219_HORIZONTAL_END_H 0x0166
11 #define IMX219_VERTICAL_END_H 0x016A
12 #define IMX219_HORIZONTAL_OUTPUT_SIZE_H 0x016c
13 #define IMX219_VERTICAL_OUTPUT_SIZE_H 0x016E
14 #define IMX219_COARSE_INTEGRATION_TIME 0x015A
15 #define IMX219_IMG_ORIENTATION 0x0172
16 #define IMX219_GLOBAL_GAIN 0x0157
17 #define IMX219_DGC_ADJ 0x0158
19 #define IMX219_DGC_LEN 4
21 /************************** settings for imx *************************/
22 static struct imx_reg const imx219_STILL_8M_30fps[] = {
23 {IMX_8BIT, 0x30EB, 0x05}, /*Access Code for address over 0x3000*/
24 {IMX_8BIT, 0x30EB, 0x0C}, /*Access Code for address over 0x3000*/
25 {IMX_8BIT, 0x300A, 0xFF}, /*Access Code for address over 0x3000*/
26 {IMX_8BIT, 0x300B, 0xFF}, /*Access Code for address over 0x3000*/
27 {IMX_8BIT, 0x30EB, 0x05}, /*Access Code for address over 0x3000*/
28 {IMX_8BIT, 0x30EB, 0x09}, /*Access Code for address over 0x3000*/
29 {IMX_8BIT, 0x0114, 0x03}, /*CSI_LANE_MODE[1:0}*/
30 {IMX_8BIT, 0x0128, 0x00}, /*DPHY_CNTRL*/
31 {IMX_8BIT, 0x012A, 0x13}, /*EXCK_FREQ[15:8]*/
32 {IMX_8BIT, 0x012B, 0x34}, /*EXCK_FREQ[7:0]*/
33 {IMX_8BIT, 0x0160, 0x0A}, /*FRM_LENGTH_A[15:8]*/
34 {IMX_8BIT, 0x0161, 0x94}, /*FRM_LENGTH_A[7:0]*/
35 {IMX_8BIT, 0x0162, 0x0D}, /*LINE_LENGTH_A[15:8]*/
36 {IMX_8BIT, 0x0163, 0x78}, /*LINE_LENGTH_A[7:0]*/
37 {IMX_8BIT, 0x0164, 0x00}, /*X_ADD_STA_A[11:8]*/
38 {IMX_8BIT, 0x0165, 0x00}, /*X_ADD_STA_A[7:0]*/
39 {IMX_8BIT, 0x0166, 0x0C}, /*X_ADD_END_A[11:8]*/
40 {IMX_8BIT, 0x0167, 0xCF}, /*X_ADD_END_A[7:0]*/
41 {IMX_8BIT, 0x0168, 0x00}, /*Y_ADD_STA_A[11:8]*/
42 {IMX_8BIT, 0x0169, 0x00}, /*Y_ADD_STA_A[7:0]*/
43 {IMX_8BIT, 0x016A, 0x09}, /*Y_ADD_END_A[11:8]*/
44 {IMX_8BIT, 0x016B, 0x9F}, /*Y_ADD_END_A[7:0]*/
45 {IMX_8BIT, 0x016C, 0x0C}, /*X_OUTPUT_SIZE_A[11:8]*/
46 {IMX_8BIT, 0x016D, 0xD0}, /*X_OUTPUT_SIZE_A[7:0]*/
47 {IMX_8BIT, 0x016E, 0x09}, /*Y_OUTPUT_SIZE_A[11:8]*/
48 {IMX_8BIT, 0x016F, 0xA0}, /*Y_OUTPUT_SIZE_A[7:0]*/
49 {IMX_8BIT, 0x0170, 0x01}, /*X_ODD_INC_A[2:0]*/
50 {IMX_8BIT, 0x0171, 0x01}, /*Y_ODD_INC_A[2:0]*/
51 {IMX_8BIT, 0x0174, 0x00}, /*BINNING_MODE_H_A*/
52 {IMX_8BIT, 0x0175, 0x00}, /*BINNING_MODE_V_A*/
53 {IMX_8BIT, 0x018C, 0x0A}, /*CSI_DATA_FORMAT_A[15:8]*/
54 {IMX_8BIT, 0x018D, 0x0A}, /*CSI_DATA_FORMAT_A[7:0]*/
55 {IMX_8BIT, 0x0301, 0x05}, /*VTPXCK_DIV*/
56 {IMX_8BIT, 0x0303, 0x01}, /*VTSYCK_DIV*/
57 {IMX_8BIT, 0x0304, 0x02}, /*PREPLLCK_VT_DIV[3:0]*/
58 {IMX_8BIT, 0x0305, 0x02}, /*PREPLLCK_OP_DIV[3:0]*/
59 {IMX_8BIT, 0x0306, 0x00}, /*PLL_VT_MPY[10:8]*/
60 {IMX_8BIT, 0x0307, 0x49}, /*PLL_VT_MPY[7:0]*/
61 {IMX_8BIT, 0x0309, 0x0A}, /*OPPXCK_DIV[4:0]*/
62 {IMX_8BIT, 0x030B, 0x01}, /*OPSYCK_DIV*/
63 {IMX_8BIT, 0x030C, 0x00}, /*PLL_OP_MPY[10:8]*/
64 {IMX_8BIT, 0x030D, 0x4C}, /*PLL_OP_MPY[7:0]*/
65 {IMX_8BIT, 0x4767, 0x0F}, /*CIS Tuning*/
66 {IMX_8BIT, 0x4750, 0x14}, /*CIS Tuning*/
67 {IMX_8BIT, 0x47B4, 0x14}, /*CIS Tuning*/
71 static struct imx_reg const imx219_STILL_6M_30fps[] = {
72 {IMX_8BIT, 0x30EB, 0x05}, /*Access Code for address over 0x3000*/
73 {IMX_8BIT, 0x30EB, 0x0C}, /*Access Code for address over 0x3000*/
74 {IMX_8BIT, 0x300A, 0xFF}, /*Access Code for address over 0x3000*/
75 {IMX_8BIT, 0x300B, 0xFF}, /*Access Code for address over 0x3000*/
76 {IMX_8BIT, 0x30EB, 0x05}, /*Access Code for address over 0x3000*/
77 {IMX_8BIT, 0x30EB, 0x09}, /*Access Code for address over 0x3000*/
78 {IMX_8BIT, 0x0114, 0x03}, /*CSI_LANE_MODE[1:0}*/
79 {IMX_8BIT, 0x0128, 0x00}, /*DPHY_CNTRL*/
80 {IMX_8BIT, 0x012A, 0x13}, /*EXCK_FREQ[15:8]*/
81 {IMX_8BIT, 0x012B, 0x34}, /*EXCK_FREQ[7:0]*/
82 {IMX_8BIT, 0x0160, 0x07}, /*FRM_LENGTH_A[15:8]*/
83 {IMX_8BIT, 0x0161, 0x64}, /*FRM_LENGTH_A[7:0]*/
84 {IMX_8BIT, 0x0162, 0x0D}, /*LINE_LENGTH_A[15:8]*/
85 {IMX_8BIT, 0x0163, 0x78}, /*LINE_LENGTH_A[7:0]*/
86 {IMX_8BIT, 0x0164, 0x00}, /*X_ADD_STA_A[11:8]*/
87 {IMX_8BIT, 0x0165, 0x00}, /*X_ADD_STA_A[7:0]*/
88 {IMX_8BIT, 0x0166, 0x0C}, /*X_ADD_END_A[11:8]*/
89 {IMX_8BIT, 0x0167, 0xCF}, /*X_ADD_END_A[7:0]*/
90 {IMX_8BIT, 0x0168, 0x01}, /*Y_ADD_STA_A[11:8]*/
91 {IMX_8BIT, 0x0169, 0x32}, /*Y_ADD_STA_A[7:0]*/
92 {IMX_8BIT, 0x016A, 0x08}, /*Y_ADD_END_A[11:8]*/
93 {IMX_8BIT, 0x016B, 0x6D}, /*Y_ADD_END_A[7:0]*/
94 {IMX_8BIT, 0x016C, 0x0C}, /*X_OUTPUT_SIZE_A[11:8]*/
95 {IMX_8BIT, 0x016D, 0xD0}, /*X_OUTPUT_SIZE_A[7:0]*/
96 {IMX_8BIT, 0x016E, 0x07}, /*Y_OUTPUT_SIZE_A[11:8]*/
97 {IMX_8BIT, 0x016F, 0x3C}, /*Y_OUTPUT_SIZE_A[7:0]*/
98 {IMX_8BIT, 0x0170, 0x01}, /*X_ODD_INC_A[2:0]*/
99 {IMX_8BIT, 0x0171, 0x01}, /*Y_ODD_INC_A[2:0]*/
100 {IMX_8BIT, 0x0174, 0x00}, /*BINNING_MODE_H_A*/
101 {IMX_8BIT, 0x0175, 0x00}, /*BINNING_MODE_V_A*/
102 {IMX_8BIT, 0x018C, 0x0A}, /*CSI_DATA_FORMAT_A[15:8]*/
103 {IMX_8BIT, 0x018D, 0x0A}, /*CSI_DATA_FORMAT_A[7:0]*/
104 {IMX_8BIT, 0x0301, 0x05}, /*VTPXCK_DIV*/
105 {IMX_8BIT, 0x0303, 0x01}, /*VTSYCK_DIV*/
106 {IMX_8BIT, 0x0304, 0x02}, /*PREPLLCK_VT_DIV[3:0]*/
107 {IMX_8BIT, 0x0305, 0x02}, /*PREPLLCK_OP_DIV[3:0]*/
108 {IMX_8BIT, 0x0306, 0x00}, /*PLL_VT_MPY[10:8]*/
109 {IMX_8BIT, 0x0307, 0x33}, /*PLL_VT_MPY[7:0]*/
110 {IMX_8BIT, 0x0309, 0x0A}, /*OPPXCK_DIV[4:0]*/
111 {IMX_8BIT, 0x030B, 0x01}, /*OPSYCK_DIV*/
112 {IMX_8BIT, 0x030C, 0x00}, /*PLL_OP_MPY[10:8]*/
113 {IMX_8BIT, 0x030D, 0x36}, /*PLL_OP_MPY[7:0]*/
114 {IMX_8BIT, 0x4767, 0x0F}, /*CIS Tuning*/
115 {IMX_8BIT, 0x4750, 0x14}, /*CIS Tuning*/
116 {IMX_8BIT, 0x47B4, 0x14}, /*CIS Tuning*/
120 static struct imx_reg const imx219_init_settings[] = {
124 struct imx_resolution imx219_res_preview[] = {
126 .desc = "STILL_6M_30fps",
127 .regs = imx219_STILL_6M_30fps,
136 .pixels_per_line = 0x0D78,
137 .lines_per_frame = 0x0764,
145 .desc = "STILL_8M_30fps",
146 .regs = imx219_STILL_8M_30fps,
155 .pixels_per_line = 0x0D78,
156 .lines_per_frame = 0x0A94,
165 struct imx_resolution imx219_res_still[] = {
167 .desc = "STILL_6M_30fps",
168 .regs = imx219_STILL_6M_30fps,
177 .pixels_per_line = 0x0D78,
178 .lines_per_frame = 0x0764,
186 .desc = "STILL_8M_30fps",
187 .regs = imx219_STILL_8M_30fps,
196 .pixels_per_line = 0x0D78,
197 .lines_per_frame = 0x0A94,
206 struct imx_resolution imx219_res_video[] = {
208 .desc = "STILL_6M_30fps",
209 .regs = imx219_STILL_6M_30fps,
218 .pixels_per_line = 0x0D78,
219 .lines_per_frame = 0x0764,