GNU Linux-libre 4.14.251-gnu1
[releases.git] / drivers / staging / media / atomisp / i2c / imx / imx219.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __IMX219_H__
3 #define __IMX219_H__
4 #include "common.h"
5
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
18
19 #define IMX219_DGC_LEN                                  4
20
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*/
68         {IMX_TOK_TERM, 0, 0}
69 };
70
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*/
117         {IMX_TOK_TERM, 0, 0}
118 };
119
120 static struct imx_reg const imx219_init_settings[] = {
121         {IMX_TOK_TERM, 0, 0}
122 };
123
124 struct imx_resolution imx219_res_preview[] = {
125         {
126                 .desc = "STILL_6M_30fps",
127                 .regs = imx219_STILL_6M_30fps,
128                 .width = 3280,
129                 .height = 1852,
130                 .bin_factor_x = 0,
131                 .bin_factor_y = 0,
132                 .used = 0,
133                 .fps_options = {
134                         {
135                                  .fps = 30,
136                                  .pixels_per_line = 0x0D78,
137                                  .lines_per_frame = 0x0764,
138                         },
139                         {
140                         }
141                 },
142                 .mipi_freq = 259000,
143         },
144         {
145                 .desc = "STILL_8M_30fps",
146                 .regs = imx219_STILL_8M_30fps,
147                 .width = 3280,
148                 .height = 2464,
149                 .bin_factor_x = 0,
150                 .bin_factor_y = 0,
151                 .used = 0,
152                 .fps_options = {
153                         {
154                                  .fps = 30,
155                                  .pixels_per_line = 0x0D78,
156                                  .lines_per_frame = 0x0A94,
157                         },
158                         {
159                         }
160                 },
161                 .mipi_freq = 365000,
162         },
163 };
164
165 struct imx_resolution imx219_res_still[] = {
166         {
167                 .desc = "STILL_6M_30fps",
168                 .regs = imx219_STILL_6M_30fps,
169                 .width = 3280,
170                 .height = 1852,
171                 .bin_factor_x = 0,
172                 .bin_factor_y = 0,
173                 .used = 0,
174                 .fps_options = {
175                         {
176                                  .fps = 30,
177                                  .pixels_per_line = 0x0D78,
178                                  .lines_per_frame = 0x0764,
179                         },
180                         {
181                         }
182                 },
183                 .mipi_freq = 259000,
184         },
185         {
186                 .desc = "STILL_8M_30fps",
187                 .regs = imx219_STILL_8M_30fps,
188                 .width = 3280,
189                 .height = 2464,
190                 .bin_factor_x = 0,
191                 .bin_factor_y = 0,
192                 .used = 0,
193                 .fps_options = {
194                         {
195                                  .fps = 30,
196                                  .pixels_per_line = 0x0D78,
197                                  .lines_per_frame = 0x0A94,
198                         },
199                         {
200                         }
201                 },
202                 .mipi_freq = 365000,
203         },
204 };
205
206 struct imx_resolution imx219_res_video[] = {
207         {
208                 .desc = "STILL_6M_30fps",
209                 .regs = imx219_STILL_6M_30fps,
210                 .width = 3280,
211                 .height = 1852,
212                 .bin_factor_x = 0,
213                 .bin_factor_y = 0,
214                 .used = 0,
215                 .fps_options = {
216                         {
217                                  .fps = 30,
218                                  .pixels_per_line = 0x0D78,
219                                  .lines_per_frame = 0x0764,
220                         },
221                         {
222                         }
223                 },
224                 .mipi_freq = 259000,
225         },
226 };
227
228 #endif