1 /* SPDX-License-Identifier: GPL-2.0 */
7 #define IMX227_EMBEDDED_DATA_LINE_NUM 2
8 #define IMX227_OUTPUT_DATA_FORMAT_REG 0x0112
9 #define IMX227_OUTPUT_FORMAT_RAW10 0x0a0a
11 /* AE Bracketing Registers */
12 #define IMX227_BRACKETING_LUT_MODE_BIT_CONTINUE_STREAMING 0x1
13 #define IMX227_BRACKETING_LUT_MODE_BIT_LOOP_MODE 0x2
15 #define IMX227_BRACKETING_LUT_CONTROL 0x0E00
16 #define IMX227_BRACKETING_LUT_MODE 0x0E01
17 #define IMX227_BRACKETING_LUT_ENTRY_CONTROL 0x0E02
20 * The imx135 embedded data info:
21 * embedded data line num: 2
22 * line 0 effective data size(byte): 76
23 * line 1 effective data size(byte): 113
26 imx227_embedded_effective_size[IMX227_EMBEDDED_DATA_LINE_NUM] = {160, 62};
28 /************************** settings for imx *************************/
29 /* Full Output Mode */
30 static struct imx_reg const imx_STILL_6_5M_25fps[] = {
31 GROUPED_PARAMETER_HOLD_ENABLE,
32 {IMX_8BIT, 0x6259, 0x06}, /* latency ctrl */
33 {IMX_8BIT, 0x9004, 0xd0}, /* preset_sel */
34 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
35 {IMX_8BIT, 0x0136, 0x13},
36 {IMX_8BIT, 0x0137, 0x33},
41 static struct imx_reg const imx_STILL_5_5M_3X4_30fps[] = {
42 GROUPED_PARAMETER_HOLD_ENABLE,
43 {IMX_8BIT, 0x0344, 0x00},
44 {IMX_8BIT, 0x0345, 0xb0},
45 {IMX_8BIT, 0x0346, 0x00},
46 {IMX_8BIT, 0x0347, 0x00},
47 {IMX_8BIT, 0x0348, 0x08},
48 {IMX_8BIT, 0x0349, 0xaf},
49 {IMX_8BIT, 0x034a, 0x0a},
50 {IMX_8BIT, 0x034b, 0x9f},
51 {IMX_8BIT, 0x034c, 0x08},
52 {IMX_8BIT, 0x034d, 0x00},
53 {IMX_8BIT, 0x034e, 0x0a},
54 {IMX_8BIT, 0x034f, 0xa0},
56 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
57 {IMX_8BIT, 0x9004, 0xd8}, /* preset_sel */
58 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
59 {IMX_8BIT, 0x0136, 0x13},
60 {IMX_8BIT, 0x0137, 0x33},
64 /* Square Output Mode */
65 static struct imx_reg const imx_STILL_5_7M_1X1_30fps[] = {
66 GROUPED_PARAMETER_HOLD_ENABLE,
67 {IMX_8BIT, 0x0344, 0x00},
68 {IMX_8BIT, 0x0345, 0x00},
69 {IMX_8BIT, 0x0346, 0x00},
70 {IMX_8BIT, 0x0347, 0xa0},
71 {IMX_8BIT, 0x0348, 0x09},
72 {IMX_8BIT, 0x0349, 0x5f},
73 {IMX_8BIT, 0x034a, 0x09},
74 {IMX_8BIT, 0x034b, 0xff},
75 {IMX_8BIT, 0x034c, 0x09},
76 {IMX_8BIT, 0x034d, 0x60},
77 {IMX_8BIT, 0x034e, 0x09},
78 {IMX_8BIT, 0x034f, 0x60},
80 {IMX_8BIT, 0x6259, 0x06}, /* latency ctrl */
81 {IMX_8BIT, 0x9004, 0xd4}, /* preset_sel */
82 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
83 {IMX_8BIT, 0x0136, 0x13},
84 {IMX_8BIT, 0x0137, 0x33},
88 /* Full Frame 1080P Mode (use ISP scaler)*/
89 static struct imx_reg const imx_VIDEO_4M_9X16_30fps[] = {
90 GROUPED_PARAMETER_HOLD_ENABLE,
91 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
92 {IMX_8BIT, 0x9004, 0xdc}, /* preset_sel */
93 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
94 {IMX_8BIT, 0x0136, 0x13},
95 {IMX_8BIT, 0x0137, 0x33},
99 /* Cropped 1080P Mode */
100 static struct imx_reg const imx_VIDEO_2M_9X16_45fps[] = {
101 GROUPED_PARAMETER_HOLD_ENABLE,
102 {IMX_8BIT, 0x0112, 0x0a},
103 {IMX_8BIT, 0x0113, 0x0a},
104 {IMX_8BIT, 0x0344, 0x02},
105 {IMX_8BIT, 0x0345, 0x8a},
106 {IMX_8BIT, 0x0346, 0x01},
107 {IMX_8BIT, 0x0347, 0x88},
108 {IMX_8BIT, 0x0348, 0x06},
109 {IMX_8BIT, 0x0349, 0xd1},
110 {IMX_8BIT, 0x034a, 0x09},
111 {IMX_8BIT, 0x034b, 0x17},
112 {IMX_8BIT, 0x034c, 0x04},
113 {IMX_8BIT, 0x034d, 0x48},
114 {IMX_8BIT, 0x034e, 0x07},
115 {IMX_8BIT, 0x034f, 0x90},
117 {IMX_8BIT, 0x0380, 0x00},
118 {IMX_8BIT, 0x0381, 0x01},
119 {IMX_8BIT, 0x0382, 0x00},
120 {IMX_8BIT, 0x0383, 0x01},
121 {IMX_8BIT, 0x0384, 0x00},
122 {IMX_8BIT, 0x0385, 0x01},
123 {IMX_8BIT, 0x0386, 0x00},
124 {IMX_8BIT, 0x0387, 0x01},
126 {IMX_8BIT, 0x0408, 0x00},
127 {IMX_8BIT, 0x0409, 0x00},
128 {IMX_8BIT, 0x040a, 0x00},
129 {IMX_8BIT, 0x040b, 0x00},
130 {IMX_8BIT, 0x040c, 0x04},
131 {IMX_8BIT, 0x040d, 0x48},
132 {IMX_8BIT, 0x040e, 0x07},
133 {IMX_8BIT, 0x040f, 0x90},
135 {IMX_8BIT, 0x0900, 0x00},
136 {IMX_8BIT, 0x0901, 0x00},
138 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
139 {IMX_8BIT, 0x9004, 0xdc}, /* preset_sel */
140 {IMX_8BIT, 0x9005, 0x3c}, /* preset_en */
142 {IMX_8BIT, 0x0136, 0x13},
143 {IMX_8BIT, 0x0137, 0x33},
148 static struct imx_reg const imx_VIDEO_1_3M_3X4_60fps[] = {
149 GROUPED_PARAMETER_HOLD_ENABLE,
150 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
151 {IMX_8BIT, 0x9004, 0xd9}, /* preset_sel */
152 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
153 {IMX_8BIT, 0x0136, 0x13},
154 {IMX_8BIT, 0x0137, 0x33},
158 /* High Speed 3:4 mode */
159 static struct imx_reg const imx_VIDEO_VGA_3X4_120fps[] = {
160 GROUPED_PARAMETER_HOLD_ENABLE,
161 {IMX_8BIT, 0x9004, 0xca}, /* preset_sel */
162 {IMX_8BIT, 0x9005, 0x3f}, /* preset_en */
163 {IMX_8BIT, 0x0136, 0x13},
164 {IMX_8BIT, 0x0137, 0x33},
169 /* Binned 720P mode */
170 static struct imx_reg const imx_VIDEO_1M_9X16_60fps[] = {
171 GROUPED_PARAMETER_HOLD_ENABLE,
172 {IMX_8BIT, 0x0112, 0x0a},
173 {IMX_8BIT, 0x0113, 0x0a},
174 {IMX_8BIT, 0x0344, 0x01},
175 {IMX_8BIT, 0x0345, 0xd0},
176 {IMX_8BIT, 0x0346, 0x00},
177 {IMX_8BIT, 0x0347, 0x40},
178 {IMX_8BIT, 0x0348, 0x07},
179 {IMX_8BIT, 0x0349, 0x8f},
180 {IMX_8BIT, 0x034a, 0x0a},
181 {IMX_8BIT, 0x034b, 0x5f},
182 {IMX_8BIT, 0x034c, 0x02},
183 {IMX_8BIT, 0x034d, 0xe0},
184 {IMX_8BIT, 0x034e, 0x05},
185 {IMX_8BIT, 0x034f, 0x10},
187 {IMX_8BIT, 0x0380, 0x00},
188 {IMX_8BIT, 0x0381, 0x01},
189 {IMX_8BIT, 0x0382, 0x00},
190 {IMX_8BIT, 0x0383, 0x01},
191 {IMX_8BIT, 0x0384, 0x00},
192 {IMX_8BIT, 0x0385, 0x01},
193 {IMX_8BIT, 0x0386, 0x00},
194 {IMX_8BIT, 0x0387, 0x01},
196 {IMX_8BIT, 0x0408, 0x00},
197 {IMX_8BIT, 0x0409, 0x00},
198 {IMX_8BIT, 0x040a, 0x00},
199 {IMX_8BIT, 0x040b, 0x00},
200 {IMX_8BIT, 0x040c, 0x02},
201 {IMX_8BIT, 0x040d, 0xe0},
202 {IMX_8BIT, 0x040e, 0x05},
203 {IMX_8BIT, 0x040f, 0x10},
205 {IMX_8BIT, 0x0900, 0x01},
206 {IMX_8BIT, 0x0901, 0x22},
208 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
209 {IMX_8BIT, 0x9004, 0xdd}, /* preset_sel */
210 {IMX_8BIT, 0x9005, 0x3c}, /* preset_en */
211 {IMX_8BIT, 0x0136, 0x13},
212 {IMX_8BIT, 0x0137, 0x33},
216 /* Binned 496x868 mode */
217 static struct imx_reg const imx_VIDEO_496x868_30fps[] = {
218 GROUPED_PARAMETER_HOLD_ENABLE,
219 {IMX_8BIT, 0x0112, 0x0a},
220 {IMX_8BIT, 0x0113, 0x0a},
221 {IMX_8BIT, 0x0344, 0x02},
222 {IMX_8BIT, 0x0345, 0xc0},
223 {IMX_8BIT, 0x0346, 0x01},
224 {IMX_8BIT, 0x0347, 0xec},
225 {IMX_8BIT, 0x0348, 0x06},
226 {IMX_8BIT, 0x0349, 0x9f},
227 {IMX_8BIT, 0x034a, 0x08},
228 {IMX_8BIT, 0x034b, 0xb3},
229 {IMX_8BIT, 0x034c, 0x01},
230 {IMX_8BIT, 0x034d, 0xf0},
231 {IMX_8BIT, 0x034e, 0x03},
232 {IMX_8BIT, 0x034f, 0x64},
234 {IMX_8BIT, 0x0380, 0x00},
235 {IMX_8BIT, 0x0381, 0x01},
236 {IMX_8BIT, 0x0382, 0x00},
237 {IMX_8BIT, 0x0383, 0x01},
238 {IMX_8BIT, 0x0384, 0x00},
239 {IMX_8BIT, 0x0385, 0x01},
240 {IMX_8BIT, 0x0386, 0x00},
241 {IMX_8BIT, 0x0387, 0x01},
243 {IMX_8BIT, 0x0408, 0x00},
244 {IMX_8BIT, 0x0409, 0x00},
245 {IMX_8BIT, 0x040a, 0x00},
246 {IMX_8BIT, 0x040b, 0x00},
247 {IMX_8BIT, 0x040c, 0x01},
248 {IMX_8BIT, 0x040d, 0xf0},
249 {IMX_8BIT, 0x040e, 0x03},
250 {IMX_8BIT, 0x040f, 0x64},
252 {IMX_8BIT, 0x0900, 0x01},
253 {IMX_8BIT, 0x0901, 0x22},
255 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
256 {IMX_8BIT, 0x9004, 0xdd}, /* preset_sel */
257 {IMX_8BIT, 0x9005, 0x3c}, /* preset_en */
258 {IMX_8BIT, 0x0136, 0x13},
259 {IMX_8BIT, 0x0137, 0x33},
265 static struct imx_reg const imx_PREVIEW_374X652_30fps[] = {
266 GROUPED_PARAMETER_HOLD_ENABLE,
267 {IMX_8BIT, 0x0112, 0x0a},
268 {IMX_8BIT, 0x0113, 0x0a},
269 {IMX_8BIT, 0x0344, 0x01},
270 {IMX_8BIT, 0x0345, 0xc0},
271 {IMX_8BIT, 0x0346, 0x00},
272 {IMX_8BIT, 0x0347, 0x30},
273 {IMX_8BIT, 0x0348, 0x07},
274 {IMX_8BIT, 0x0349, 0x9f},
275 {IMX_8BIT, 0x034a, 0x0a},
276 {IMX_8BIT, 0x034b, 0x6f},
277 {IMX_8BIT, 0x034c, 0x01},
278 {IMX_8BIT, 0x034d, 0x78},
279 {IMX_8BIT, 0x034e, 0x02},
280 {IMX_8BIT, 0x034f, 0x90},
282 {IMX_8BIT, 0x0380, 0x00},
283 {IMX_8BIT, 0x0381, 0x01},
284 {IMX_8BIT, 0x0382, 0x00},
285 {IMX_8BIT, 0x0383, 0x03},
286 {IMX_8BIT, 0x0384, 0x00},
287 {IMX_8BIT, 0x0385, 0x01},
288 {IMX_8BIT, 0x0386, 0x00},
289 {IMX_8BIT, 0x0387, 0x03},
291 {IMX_8BIT, 0x0408, 0x00},
292 {IMX_8BIT, 0x0409, 0x00},
293 {IMX_8BIT, 0x040a, 0x00},
294 {IMX_8BIT, 0x040b, 0x02},
295 {IMX_8BIT, 0x040c, 0x01},
296 {IMX_8BIT, 0x040d, 0x76},
297 {IMX_8BIT, 0x040e, 0x02},
298 {IMX_8BIT, 0x040f, 0x8c},
300 {IMX_8BIT, 0x0900, 0x01},
301 {IMX_8BIT, 0x0901, 0x22},
303 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
304 {IMX_8BIT, 0x9004, 0xde}, /* preset_sel */
305 {IMX_8BIT, 0x9005, 0x3c}, /* preset_en */
306 {IMX_8BIT, 0x0136, 0x13},
307 {IMX_8BIT, 0x0137, 0x33},
311 static struct imx_reg const imx_VIDEO_NHD_9X16_30fps[] = {
312 GROUPED_PARAMETER_HOLD_ENABLE,
313 {IMX_8BIT, 0x0112, 0x0a},
314 {IMX_8BIT, 0x0113, 0x0a},
315 {IMX_8BIT, 0x0344, 0x01},
316 {IMX_8BIT, 0x0345, 0xc0},
317 {IMX_8BIT, 0x0346, 0x00},
318 {IMX_8BIT, 0x0347, 0x30},
319 {IMX_8BIT, 0x0348, 0x07},
320 {IMX_8BIT, 0x0349, 0x9f},
321 {IMX_8BIT, 0x034a, 0x0a},
322 {IMX_8BIT, 0x034b, 0x6f},
323 {IMX_8BIT, 0x034c, 0x01},
324 {IMX_8BIT, 0x034d, 0x78},
325 {IMX_8BIT, 0x034e, 0x02},
326 {IMX_8BIT, 0x034f, 0x90},
328 {IMX_8BIT, 0x0380, 0x00},
329 {IMX_8BIT, 0x0381, 0x01},
330 {IMX_8BIT, 0x0382, 0x00},
331 {IMX_8BIT, 0x0383, 0x03},
332 {IMX_8BIT, 0x0384, 0x00},
333 {IMX_8BIT, 0x0385, 0x01},
334 {IMX_8BIT, 0x0386, 0x00},
335 {IMX_8BIT, 0x0387, 0x03},
337 {IMX_8BIT, 0x0408, 0x00},
338 {IMX_8BIT, 0x0409, 0x00},
339 {IMX_8BIT, 0x040a, 0x00},
340 {IMX_8BIT, 0x040b, 0x00},
341 {IMX_8BIT, 0x040c, 0x01},
342 {IMX_8BIT, 0x040d, 0x78},
343 {IMX_8BIT, 0x040e, 0x02},
344 {IMX_8BIT, 0x040f, 0x90},
346 {IMX_8BIT, 0x0900, 0x01},
347 {IMX_8BIT, 0x0901, 0x22},
349 {IMX_8BIT, 0x6259, 0x05}, /* latency ctrl */
350 {IMX_8BIT, 0x9004, 0xde}, /* preset_sel */
351 {IMX_8BIT, 0x9005, 0x3c}, /* preset_en */
352 {IMX_8BIT, 0x0136, 0x13},
353 {IMX_8BIT, 0x0137, 0x33},
358 static struct imx_reg const imx227_init_settings[] = {
359 {IMX_8BIT, 0x0100, 0x00}, /* mode_select */
360 GROUPED_PARAMETER_HOLD_ENABLE,
361 {IMX_8BIT, 0x0306, 0x00},
362 {IMX_8BIT, 0x0307, 0xBB},
363 {IMX_8BIT, 0x030E, 0x03},
364 {IMX_8BIT, 0x030F, 0x0D},
365 {IMX_8BIT, 0x463b, 0x30},
366 {IMX_8BIT, 0x463e, 0x05},
367 {IMX_8BIT, 0x4612, 0x66},
368 {IMX_8BIT, 0x4815, 0x65},
369 {IMX_8BIT, 0x4991, 0x00},
370 {IMX_8BIT, 0x4992, 0x01},
371 {IMX_8BIT, 0x4993, 0xff},
372 {IMX_8BIT, 0x458b, 0x00},
373 {IMX_8BIT, 0x452a, 0x02},
374 {IMX_8BIT, 0x4a7c, 0x00},
375 {IMX_8BIT, 0x4a7d, 0x1c},
376 {IMX_8BIT, 0x4a7e, 0x00},
377 {IMX_8BIT, 0x4a7f, 0x17},
378 {IMX_8BIT, 0x462C, 0x2E},
379 {IMX_8BIT, 0x461B, 0x28},
380 {IMX_8BIT, 0x4663, 0x29},
381 {IMX_8BIT, 0x461A, 0x7C},
382 {IMX_8BIT, 0x4619, 0x28},
383 {IMX_8BIT, 0x4667, 0x22},
384 {IMX_8BIT, 0x466B, 0x23},
385 {IMX_8BIT, 0x40AD, 0xFF},
386 {IMX_8BIT, 0x40BE, 0x00},
387 {IMX_8BIT, 0x40BF, 0x6E},
388 {IMX_8BIT, 0x40CE, 0x00},
389 {IMX_8BIT, 0x40CF, 0x0A},
390 {IMX_8BIT, 0x40CA, 0x00},
391 {IMX_8BIT, 0x40CB, 0x1F},
392 {IMX_8BIT, 0x4D16, 0x00},
393 {IMX_8BIT, 0x6204, 0x01},
394 {IMX_8BIT, 0x6209, 0x00},
395 {IMX_8BIT, 0x621F, 0x01},
396 {IMX_8BIT, 0x621E, 0x10},
397 GROUPED_PARAMETER_HOLD_DISABLE,
401 /* TODO settings of preview/still/video will be updated with new use case */
402 struct imx_resolution imx227_res_preview[] = {
404 .desc = "imx_PREVIEW_374X652_30fps",
405 .regs = imx_PREVIEW_374X652_30fps,
415 .pixels_per_line = 0x0E70,
416 .lines_per_frame = 0x0C0A,
423 .desc = "imx_VIDEO_496x868_30fps",
424 .regs = imx_VIDEO_496x868_30fps,
434 .pixels_per_line = 0x0E70,
435 .lines_per_frame = 0x0C08,
442 .desc = "imx_STILL_5_5M_3X4_30fps",
443 .regs = imx_STILL_5_5M_3X4_30fps,
453 .pixels_per_line = 0x0ED8,
454 .lines_per_frame = 0x0BB8,
462 .desc = "imx_STILL_5_7M_1X1_30fps",
463 .regs = imx_STILL_5_7M_1X1_30fps,
473 .pixels_per_line = 0x1130,
474 .lines_per_frame = 0x0A1E,
482 .desc = "imx_STILL_6_5M_25fps",
483 .regs = imx_STILL_6_5M_25fps,
493 .pixels_per_line = 0x1130,
494 .lines_per_frame = 0x0C24,
502 struct imx_resolution imx227_res_still[] = {
504 .desc = "imx_STILL_5_5M_3X4_30fps",
505 .regs = imx_STILL_5_5M_3X4_30fps,
515 .pixels_per_line = 0x2130,
516 .lines_per_frame = 0x1A22,
520 .pixels_per_line = 0x0ED8,
521 .lines_per_frame = 0x0BB8,
529 .desc = "imx_STILL_5_7M_1X1_30fps",
530 .regs = imx_STILL_5_7M_1X1_30fps,
540 .pixels_per_line = 0x266E,
541 .lines_per_frame = 0x1704,
545 .pixels_per_line = 0x1130,
546 .lines_per_frame = 0x0A1E,
554 .desc = "imx_STILL_6_5M_25fps",
555 .regs = imx_STILL_6_5M_25fps,
565 .pixels_per_line = 0x1130,
566 .lines_per_frame = 0x0C24,
574 struct imx_resolution imx227_res_video[] = {
576 .desc = "imx_VIDEO_4M_9X16_30fps",
577 .regs = imx_VIDEO_4M_9X16_30fps,
587 .pixels_per_line = 0x0E70,
588 .lines_per_frame = 0x0C08,
596 .desc = "imx_VIDEO_2M_9X16_45fps",
597 .regs = imx_VIDEO_2M_9X16_45fps,
607 .pixels_per_line = 0x0E70,
608 .lines_per_frame = 0x0C08,
612 .pixels_per_line = 0x0E70,
613 .lines_per_frame = 0x0800,
621 .desc = "imx_VIDEO_1_3M_3X4_60fps",
622 .regs = imx_VIDEO_1_3M_3X4_60fps,
632 .pixels_per_line = 0x0E70,
633 .lines_per_frame = 0x0604,
640 .desc = "imx_VIDEO_496x868_30fps",
641 .regs = imx_VIDEO_496x868_30fps,
651 .pixels_per_line = 0x0E70,
652 .lines_per_frame = 0x0C08,
659 .desc = "imx_VIDEO_1M_9X16_60fps",
660 .regs = imx_VIDEO_1M_9X16_60fps,
670 .pixels_per_line = 0x0E70,
671 .lines_per_frame = 0x0604,
675 .pixels_per_line = 0x0E70,
676 .lines_per_frame = 0x0C10,
683 .desc = "imx_VIDEO_VGA_3X4_120fps",
684 .regs = imx_VIDEO_VGA_3X4_120fps,
694 .pixels_per_line = 0x0E70,
695 .lines_per_frame = 0x0302,
699 .pixels_per_line = 0x0E70,
700 .lines_per_frame = 0x0C08,
707 .desc = "imx_VIDEO_NHD_9X16_30fps",
708 .regs = imx_VIDEO_NHD_9X16_30fps,
718 .pixels_per_line = 0x0E70,
719 .lines_per_frame = 0x0C0A,
727 #endif /* __IMX227_H__ */