xref: /linux/drivers/media/i2c/et8ek8/et8ek8_mode.c (revision 44f57d78)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * et8ek8_mode.c
4  *
5  * Copyright (C) 2008 Nokia Corporation
6  *
7  * Contact: Sakari Ailus <sakari.ailus@iki.fi>
8  *          Tuukka Toivonen <tuukkat76@gmail.com>
9  */
10 
11 #include "et8ek8_reg.h"
12 
13 /*
14  * Stingray sensor mode settings for Scooby
15  */
16 
17 /* Mode1_poweron_Mode2_16VGA_2592x1968_12.07fps */
18 static struct et8ek8_reglist mode1_poweron_mode2_16vga_2592x1968_12_07fps = {
19 /* (without the +1)
20  * SPCK       = 80 MHz
21  * CCP2       = 640 MHz
22  * VCO        = 640 MHz
23  * VCOUNT     = 84 (2016)
24  * HCOUNT     = 137 (3288)
25  * CKREF_DIV  = 2
26  * CKVAR_DIV  = 200
27  * VCO_DIV    = 0
28  * SPCK_DIV   = 7
29  * MRCK_DIV   = 7
30  * LVDSCK_DIV = 0
31  */
32 	.type = ET8EK8_REGLIST_POWERON,
33 	.mode = {
34 		.sensor_width = 2592,
35 		.sensor_height = 1968,
36 		.sensor_window_origin_x = 0,
37 		.sensor_window_origin_y = 0,
38 		.sensor_window_width = 2592,
39 		.sensor_window_height = 1968,
40 		.width = 3288,
41 		.height = 2016,
42 		.window_origin_x = 0,
43 		.window_origin_y = 0,
44 		.window_width = 2592,
45 		.window_height = 1968,
46 		.pixel_clock = 80000000,
47 		.ext_clock = 9600000,
48 		.timeperframe = {
49 			.numerator = 100,
50 			.denominator = 1207
51 		},
52 		.max_exp = 2012,
53 		/* .max_gain = 0, */
54 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
55 		.sensitivity = 65536
56 	},
57 	.regs = {
58 		/* Need to set firstly */
59 		{ ET8EK8_REG_8BIT, 0x126C, 0xCC },
60 		/* Strobe and Data of CCP2 delay are minimized. */
61 		{ ET8EK8_REG_8BIT, 0x1269, 0x00 },
62 		/* Refined value of Min H_COUNT  */
63 		{ ET8EK8_REG_8BIT, 0x1220, 0x89 },
64 		/* Frequency of SPCK setting (SPCK=MRCK) */
65 		{ ET8EK8_REG_8BIT, 0x123A, 0x07 },
66 		{ ET8EK8_REG_8BIT, 0x1241, 0x94 },
67 		{ ET8EK8_REG_8BIT, 0x1242, 0x02 },
68 		{ ET8EK8_REG_8BIT, 0x124B, 0x00 },
69 		{ ET8EK8_REG_8BIT, 0x1255, 0xFF },
70 		{ ET8EK8_REG_8BIT, 0x1256, 0x9F },
71 		{ ET8EK8_REG_8BIT, 0x1258, 0x00 },
72 		/* From parallel out to serial out */
73 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 },
74 		/* From w/ embedded data to w/o embedded data */
75 		{ ET8EK8_REG_8BIT, 0x125E, 0xC0 },
76 		/* CCP2 out is from STOP to ACTIVE */
77 		{ ET8EK8_REG_8BIT, 0x1263, 0x98 },
78 		{ ET8EK8_REG_8BIT, 0x1268, 0xC6 },
79 		{ ET8EK8_REG_8BIT, 0x1434, 0x00 },
80 		{ ET8EK8_REG_8BIT, 0x1163, 0x44 },
81 		{ ET8EK8_REG_8BIT, 0x1166, 0x29 },
82 		{ ET8EK8_REG_8BIT, 0x1140, 0x02 },
83 		{ ET8EK8_REG_8BIT, 0x1011, 0x24 },
84 		{ ET8EK8_REG_8BIT, 0x1151, 0x80 },
85 		{ ET8EK8_REG_8BIT, 0x1152, 0x23 },
86 		/* Initial setting for improvement2 of lower frequency noise */
87 		{ ET8EK8_REG_8BIT, 0x1014, 0x05 },
88 		{ ET8EK8_REG_8BIT, 0x1033, 0x06 },
89 		{ ET8EK8_REG_8BIT, 0x1034, 0x79 },
90 		{ ET8EK8_REG_8BIT, 0x1423, 0x3F },
91 		{ ET8EK8_REG_8BIT, 0x1424, 0x3F },
92 		{ ET8EK8_REG_8BIT, 0x1426, 0x00 },
93 		/* Switch of Preset-White-balance (0d:disable / 1d:enable) */
94 		{ ET8EK8_REG_8BIT, 0x1439, 0x00 },
95 		/* Switch of blemish correction (0d:disable / 1d:enable) */
96 		{ ET8EK8_REG_8BIT, 0x161F, 0x60 },
97 		/* Switch of auto noise correction (0d:disable / 1d:enable) */
98 		{ ET8EK8_REG_8BIT, 0x1634, 0x00 },
99 		{ ET8EK8_REG_8BIT, 0x1646, 0x00 },
100 		{ ET8EK8_REG_8BIT, 0x1648, 0x00 },
101 		{ ET8EK8_REG_8BIT, 0x113E, 0x01 },
102 		{ ET8EK8_REG_8BIT, 0x113F, 0x22 },
103 		{ ET8EK8_REG_8BIT, 0x1239, 0x64 },
104 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
105 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
106 		{ ET8EK8_REG_8BIT, 0x123A, 0x07 },
107 		{ ET8EK8_REG_8BIT, 0x121B, 0x64 },
108 		{ ET8EK8_REG_8BIT, 0x121D, 0x64 },
109 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
110 		{ ET8EK8_REG_8BIT, 0x1220, 0x89 },
111 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
112 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
113 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/  */
114 		{ ET8EK8_REG_TERM, 0, 0}
115 	}
116 };
117 
118 /* Mode1_16VGA_2592x1968_13.12fps_DPCM10-8 */
119 static struct et8ek8_reglist mode1_16vga_2592x1968_13_12fps_dpcm10_8 = {
120 /* (without the +1)
121  * SPCK       = 80 MHz
122  * CCP2       = 560 MHz
123  * VCO        = 560 MHz
124  * VCOUNT     = 84 (2016)
125  * HCOUNT     = 128 (3072)
126  * CKREF_DIV  = 2
127  * CKVAR_DIV  = 175
128  * VCO_DIV    = 0
129  * SPCK_DIV   = 6
130  * MRCK_DIV   = 7
131  * LVDSCK_DIV = 0
132  */
133 	.type = ET8EK8_REGLIST_MODE,
134 	.mode = {
135 		.sensor_width = 2592,
136 		.sensor_height = 1968,
137 		.sensor_window_origin_x = 0,
138 		.sensor_window_origin_y = 0,
139 		.sensor_window_width = 2592,
140 		.sensor_window_height = 1968,
141 		.width = 3072,
142 		.height = 2016,
143 		.window_origin_x = 0,
144 		.window_origin_y = 0,
145 		.window_width = 2592,
146 		.window_height = 1968,
147 		.pixel_clock = 80000000,
148 		.ext_clock = 9600000,
149 		.timeperframe = {
150 			.numerator = 100,
151 			.denominator = 1292
152 		},
153 		.max_exp = 2012,
154 		/* .max_gain = 0, */
155 		.bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8,
156 		.sensitivity = 65536
157 	},
158 	.regs = {
159 		{ ET8EK8_REG_8BIT, 0x1239, 0x57 },
160 		{ ET8EK8_REG_8BIT, 0x1238, 0x82 },
161 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
162 		{ ET8EK8_REG_8BIT, 0x123A, 0x06 },
163 		{ ET8EK8_REG_8BIT, 0x121B, 0x64 },
164 		{ ET8EK8_REG_8BIT, 0x121D, 0x64 },
165 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
166 		{ ET8EK8_REG_8BIT, 0x1220, 0x80 }, /* <-changed to v14 7E->80 */
167 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
168 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
169 		{ ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/  */
170 		{ ET8EK8_REG_TERM, 0, 0}
171 	}
172 };
173 
174 /* Mode3_4VGA_1296x984_29.99fps_DPCM10-8 */
175 static struct et8ek8_reglist mode3_4vga_1296x984_29_99fps_dpcm10_8 = {
176 /* (without the +1)
177  * SPCK       = 96.5333333333333 MHz
178  * CCP2       = 579.2 MHz
179  * VCO        = 579.2 MHz
180  * VCOUNT     = 84 (2016)
181  * HCOUNT     = 133 (3192)
182  * CKREF_DIV  = 2
183  * CKVAR_DIV  = 181
184  * VCO_DIV    = 0
185  * SPCK_DIV   = 5
186  * MRCK_DIV   = 7
187  * LVDSCK_DIV = 0
188  */
189 	.type = ET8EK8_REGLIST_MODE,
190 	.mode = {
191 		.sensor_width = 2592,
192 		.sensor_height = 1968,
193 		.sensor_window_origin_x = 0,
194 		.sensor_window_origin_y = 0,
195 		.sensor_window_width = 2592,
196 		.sensor_window_height = 1968,
197 		.width = 3192,
198 		.height = 1008,
199 		.window_origin_x = 0,
200 		.window_origin_y = 0,
201 		.window_width = 1296,
202 		.window_height = 984,
203 		.pixel_clock = 96533333,
204 		.ext_clock = 9600000,
205 		.timeperframe = {
206 			.numerator = 100,
207 			.denominator = 3000
208 		},
209 		.max_exp = 1004,
210 		/* .max_gain = 0, */
211 		.bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8,
212 		.sensitivity = 65536
213 	},
214 	.regs = {
215 		{ ET8EK8_REG_8BIT, 0x1239, 0x5A },
216 		{ ET8EK8_REG_8BIT, 0x1238, 0x82 },
217 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
218 		{ ET8EK8_REG_8BIT, 0x123A, 0x05 },
219 		{ ET8EK8_REG_8BIT, 0x121B, 0x63 },
220 		{ ET8EK8_REG_8BIT, 0x1220, 0x85 },
221 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
222 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
223 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
224 		{ ET8EK8_REG_8BIT, 0x121D, 0x63 },
225 		{ ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/  */
226 		{ ET8EK8_REG_TERM, 0, 0}
227 	}
228 };
229 
230 /* Mode4_SVGA_864x656_29.88fps */
231 static struct et8ek8_reglist mode4_svga_864x656_29_88fps = {
232 /* (without the +1)
233  * SPCK       = 80 MHz
234  * CCP2       = 320 MHz
235  * VCO        = 640 MHz
236  * VCOUNT     = 84 (2016)
237  * HCOUNT     = 166 (3984)
238  * CKREF_DIV  = 2
239  * CKVAR_DIV  = 200
240  * VCO_DIV    = 0
241  * SPCK_DIV   = 7
242  * MRCK_DIV   = 7
243  * LVDSCK_DIV = 1
244  */
245 	.type = ET8EK8_REGLIST_MODE,
246 	.mode = {
247 		.sensor_width = 2592,
248 		.sensor_height = 1968,
249 		.sensor_window_origin_x = 0,
250 		.sensor_window_origin_y = 0,
251 		.sensor_window_width = 2592,
252 		.sensor_window_height = 1968,
253 		.width = 3984,
254 		.height = 672,
255 		.window_origin_x = 0,
256 		.window_origin_y = 0,
257 		.window_width = 864,
258 		.window_height = 656,
259 		.pixel_clock = 80000000,
260 		.ext_clock = 9600000,
261 		.timeperframe = {
262 			.numerator = 100,
263 			.denominator = 2988
264 		},
265 		.max_exp = 668,
266 		/* .max_gain = 0, */
267 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
268 		.sensitivity = 65536
269 	},
270 	.regs = {
271 		{ ET8EK8_REG_8BIT, 0x1239, 0x64 },
272 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
273 		{ ET8EK8_REG_8BIT, 0x123B, 0x71 },
274 		{ ET8EK8_REG_8BIT, 0x123A, 0x07 },
275 		{ ET8EK8_REG_8BIT, 0x121B, 0x62 },
276 		{ ET8EK8_REG_8BIT, 0x121D, 0x62 },
277 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
278 		{ ET8EK8_REG_8BIT, 0x1220, 0xA6 },
279 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
280 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
281 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/  */
282 		{ ET8EK8_REG_TERM, 0, 0}
283 	}
284 };
285 
286 /* Mode5_VGA_648x492_29.93fps */
287 static struct et8ek8_reglist mode5_vga_648x492_29_93fps = {
288 /* (without the +1)
289  * SPCK       = 80 MHz
290  * CCP2       = 320 MHz
291  * VCO        = 640 MHz
292  * VCOUNT     = 84 (2016)
293  * HCOUNT     = 221 (5304)
294  * CKREF_DIV  = 2
295  * CKVAR_DIV  = 200
296  * VCO_DIV    = 0
297  * SPCK_DIV   = 7
298  * MRCK_DIV   = 7
299  * LVDSCK_DIV = 1
300  */
301 	.type = ET8EK8_REGLIST_MODE,
302 	.mode = {
303 		.sensor_width = 2592,
304 		.sensor_height = 1968,
305 		.sensor_window_origin_x = 0,
306 		.sensor_window_origin_y = 0,
307 		.sensor_window_width = 2592,
308 		.sensor_window_height = 1968,
309 		.width = 5304,
310 		.height = 504,
311 		.window_origin_x = 0,
312 		.window_origin_y = 0,
313 		.window_width = 648,
314 		.window_height = 492,
315 		.pixel_clock = 80000000,
316 		.ext_clock = 9600000,
317 		.timeperframe = {
318 			.numerator = 100,
319 			.denominator = 2993
320 		},
321 		.max_exp = 500,
322 		/* .max_gain = 0, */
323 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
324 		.sensitivity = 65536
325 	},
326 	.regs = {
327 		{ ET8EK8_REG_8BIT, 0x1239, 0x64 },
328 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
329 		{ ET8EK8_REG_8BIT, 0x123B, 0x71 },
330 		{ ET8EK8_REG_8BIT, 0x123A, 0x07 },
331 		{ ET8EK8_REG_8BIT, 0x121B, 0x61 },
332 		{ ET8EK8_REG_8BIT, 0x121D, 0x61 },
333 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
334 		{ ET8EK8_REG_8BIT, 0x1220, 0xDD },
335 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
336 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
337 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/  */
338 		{ ET8EK8_REG_TERM, 0, 0}
339 	}
340 };
341 
342 /* Mode2_16VGA_2592x1968_3.99fps */
343 static struct et8ek8_reglist mode2_16vga_2592x1968_3_99fps = {
344 /* (without the +1)
345  * SPCK       = 80 MHz
346  * CCP2       = 640 MHz
347  * VCO        = 640 MHz
348  * VCOUNT     = 254 (6096)
349  * HCOUNT     = 137 (3288)
350  * CKREF_DIV  = 2
351  * CKVAR_DIV  = 200
352  * VCO_DIV    = 0
353  * SPCK_DIV   = 7
354  * MRCK_DIV   = 7
355  * LVDSCK_DIV = 0
356  */
357 	.type = ET8EK8_REGLIST_MODE,
358 	.mode = {
359 		.sensor_width = 2592,
360 		.sensor_height = 1968,
361 		.sensor_window_origin_x = 0,
362 		.sensor_window_origin_y = 0,
363 		.sensor_window_width = 2592,
364 		.sensor_window_height = 1968,
365 		.width = 3288,
366 		.height = 6096,
367 		.window_origin_x = 0,
368 		.window_origin_y = 0,
369 		.window_width = 2592,
370 		.window_height = 1968,
371 		.pixel_clock = 80000000,
372 		.ext_clock = 9600000,
373 		.timeperframe = {
374 			.numerator = 100,
375 			.denominator = 399
376 		},
377 		.max_exp = 6092,
378 		/* .max_gain = 0, */
379 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
380 		.sensitivity = 65536
381 	},
382 	.regs = {
383 		{ ET8EK8_REG_8BIT, 0x1239, 0x64 },
384 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
385 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
386 		{ ET8EK8_REG_8BIT, 0x123A, 0x07 },
387 		{ ET8EK8_REG_8BIT, 0x121B, 0x64 },
388 		{ ET8EK8_REG_8BIT, 0x121D, 0x64 },
389 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
390 		{ ET8EK8_REG_8BIT, 0x1220, 0x89 },
391 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
392 		{ ET8EK8_REG_8BIT, 0x1222, 0xFE },
393 		{ ET8EK8_REG_TERM, 0, 0}
394 	}
395 };
396 
397 /* Mode_648x492_5fps */
398 static struct et8ek8_reglist mode_648x492_5fps = {
399 /* (without the +1)
400  * SPCK       = 13.3333333333333 MHz
401  * CCP2       = 53.3333333333333 MHz
402  * VCO        = 640 MHz
403  * VCOUNT     = 84 (2016)
404  * HCOUNT     = 221 (5304)
405  * CKREF_DIV  = 2
406  * CKVAR_DIV  = 200
407  * VCO_DIV    = 5
408  * SPCK_DIV   = 7
409  * MRCK_DIV   = 7
410  * LVDSCK_DIV = 1
411  */
412 	.type = ET8EK8_REGLIST_MODE,
413 	.mode = {
414 		.sensor_width = 2592,
415 		.sensor_height = 1968,
416 		.sensor_window_origin_x = 0,
417 		.sensor_window_origin_y = 0,
418 		.sensor_window_width = 2592,
419 		.sensor_window_height = 1968,
420 		.width = 5304,
421 		.height = 504,
422 		.window_origin_x = 0,
423 		.window_origin_y = 0,
424 		.window_width = 648,
425 		.window_height = 492,
426 		.pixel_clock = 13333333,
427 		.ext_clock = 9600000,
428 		.timeperframe = {
429 			.numerator = 100,
430 			.denominator = 499
431 		},
432 		.max_exp = 500,
433 		/* .max_gain = 0, */
434 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
435 		.sensitivity = 65536
436 	},
437 	.regs = {
438 		{ ET8EK8_REG_8BIT, 0x1239, 0x64 },
439 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
440 		{ ET8EK8_REG_8BIT, 0x123B, 0x71 },
441 		{ ET8EK8_REG_8BIT, 0x123A, 0x57 },
442 		{ ET8EK8_REG_8BIT, 0x121B, 0x61 },
443 		{ ET8EK8_REG_8BIT, 0x121D, 0x61 },
444 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
445 		{ ET8EK8_REG_8BIT, 0x1220, 0xDD },
446 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
447 		{ ET8EK8_REG_8BIT, 0x1222, 0x54 },
448 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/  */
449 		{ ET8EK8_REG_TERM, 0, 0}
450 	}
451 };
452 
453 /* Mode3_4VGA_1296x984_5fps */
454 static struct et8ek8_reglist mode3_4vga_1296x984_5fps = {
455 /* (without the +1)
456  * SPCK       = 49.4 MHz
457  * CCP2       = 395.2 MHz
458  * VCO        = 790.4 MHz
459  * VCOUNT     = 250 (6000)
460  * HCOUNT     = 137 (3288)
461  * CKREF_DIV  = 2
462  * CKVAR_DIV  = 247
463  * VCO_DIV    = 1
464  * SPCK_DIV   = 7
465  * MRCK_DIV   = 7
466  * LVDSCK_DIV = 0
467  */
468 	.type = ET8EK8_REGLIST_MODE,
469 	.mode = {
470 		.sensor_width = 2592,
471 		.sensor_height = 1968,
472 		.sensor_window_origin_x = 0,
473 		.sensor_window_origin_y = 0,
474 		.sensor_window_width = 2592,
475 		.sensor_window_height = 1968,
476 		.width = 3288,
477 		.height = 3000,
478 		.window_origin_x = 0,
479 		.window_origin_y = 0,
480 		.window_width = 1296,
481 		.window_height = 984,
482 		.pixel_clock = 49400000,
483 		.ext_clock = 9600000,
484 		.timeperframe = {
485 			.numerator = 100,
486 			.denominator = 501
487 		},
488 		.max_exp = 2996,
489 		/* .max_gain = 0, */
490 		.bus_format = MEDIA_BUS_FMT_SGRBG10_1X10,
491 		.sensitivity = 65536
492 	},
493 	.regs = {
494 		{ ET8EK8_REG_8BIT, 0x1239, 0x7B },
495 		{ ET8EK8_REG_8BIT, 0x1238, 0x82 },
496 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
497 		{ ET8EK8_REG_8BIT, 0x123A, 0x17 },
498 		{ ET8EK8_REG_8BIT, 0x121B, 0x63 },
499 		{ ET8EK8_REG_8BIT, 0x121D, 0x63 },
500 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
501 		{ ET8EK8_REG_8BIT, 0x1220, 0x89 },
502 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
503 		{ ET8EK8_REG_8BIT, 0x1222, 0xFA },
504 		{ ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/  */
505 		{ ET8EK8_REG_TERM, 0, 0}
506 	}
507 };
508 
509 /* Mode_4VGA_1296x984_25fps_DPCM10-8 */
510 static struct et8ek8_reglist mode_4vga_1296x984_25fps_dpcm10_8 = {
511 /* (without the +1)
512  * SPCK       = 84.2666666666667 MHz
513  * CCP2       = 505.6 MHz
514  * VCO        = 505.6 MHz
515  * VCOUNT     = 88 (2112)
516  * HCOUNT     = 133 (3192)
517  * CKREF_DIV  = 2
518  * CKVAR_DIV  = 158
519  * VCO_DIV    = 0
520  * SPCK_DIV   = 5
521  * MRCK_DIV   = 7
522  * LVDSCK_DIV = 0
523  */
524 	.type = ET8EK8_REGLIST_MODE,
525 	.mode = {
526 		.sensor_width = 2592,
527 		.sensor_height = 1968,
528 		.sensor_window_origin_x = 0,
529 		.sensor_window_origin_y = 0,
530 		.sensor_window_width = 2592,
531 		.sensor_window_height = 1968,
532 		.width = 3192,
533 		.height = 1056,
534 		.window_origin_x = 0,
535 		.window_origin_y = 0,
536 		.window_width = 1296,
537 		.window_height = 984,
538 		.pixel_clock = 84266667,
539 		.ext_clock = 9600000,
540 		.timeperframe = {
541 			.numerator = 100,
542 			.denominator = 2500
543 		},
544 		.max_exp = 1052,
545 		/* .max_gain = 0, */
546 		.bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8,
547 		.sensitivity = 65536
548 	},
549 	.regs = {
550 		{ ET8EK8_REG_8BIT, 0x1239, 0x4F },
551 		{ ET8EK8_REG_8BIT, 0x1238, 0x02 },
552 		{ ET8EK8_REG_8BIT, 0x123B, 0x70 },
553 		{ ET8EK8_REG_8BIT, 0x123A, 0x05 },
554 		{ ET8EK8_REG_8BIT, 0x121B, 0x63 },
555 		{ ET8EK8_REG_8BIT, 0x1220, 0x85 },
556 		{ ET8EK8_REG_8BIT, 0x1221, 0x00 },
557 		{ ET8EK8_REG_8BIT, 0x1222, 0x58 },
558 		{ ET8EK8_REG_8BIT, 0x1223, 0x00 },
559 		{ ET8EK8_REG_8BIT, 0x121D, 0x63 },
560 		{ ET8EK8_REG_8BIT, 0x125D, 0x83 },
561 		{ ET8EK8_REG_TERM, 0, 0}
562 	}
563 };
564 
565 struct et8ek8_meta_reglist meta_reglist = {
566 	.version = "V14 03-June-2008",
567 	.reglist = {
568 		{ .ptr = &mode1_poweron_mode2_16vga_2592x1968_12_07fps },
569 		{ .ptr = &mode1_16vga_2592x1968_13_12fps_dpcm10_8 },
570 		{ .ptr = &mode3_4vga_1296x984_29_99fps_dpcm10_8 },
571 		{ .ptr = &mode4_svga_864x656_29_88fps },
572 		{ .ptr = &mode5_vga_648x492_29_93fps },
573 		{ .ptr = &mode2_16vga_2592x1968_3_99fps },
574 		{ .ptr = &mode_648x492_5fps },
575 		{ .ptr = &mode3_4vga_1296x984_5fps },
576 		{ .ptr = &mode_4vga_1296x984_25fps_dpcm10_8 },
577 		{ .ptr = NULL }
578 	}
579 };
580