1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __OV2680_H__
20#define __OV2680_H__
21#include <linux/kernel.h>
22#include <linux/types.h>
23#include <linux/i2c.h>
24#include <linux/delay.h>
25#include <linux/videodev2.h>
26#include <linux/spinlock.h>
27#include <media/v4l2-subdev.h>
28#include <media/v4l2-device.h>
29#include <media/v4l2-ctrls.h>
30#include <linux/v4l2-mediabus.h>
31#include <media/media-entity.h>
32
33#include "../include/linux/atomisp_platform.h"
34
35
36#define I2C_MSG_LENGTH 0x2
37#define I2C_RETRY_COUNT 5
38
39#define OV2680_FOCAL_LENGTH_NUM 334
40#define OV2680_FOCAL_LENGTH_DEM 100
41#define OV2680_F_NUMBER_DEFAULT_NUM 24
42#define OV2680_F_NUMBER_DEM 10
43
44#define OV2680_BIN_FACTOR_MAX 4
45
46#define MAX_FMTS 1
47
48
49#define OV2680_READ_MODE_BINNING_ON 0x0400
50#define OV2680_READ_MODE_BINNING_OFF 0x00
51#define OV2680_INTEGRATION_TIME_MARGIN 8
52
53#define OV2680_MAX_EXPOSURE_VALUE 0xFFF1
54#define OV2680_MAX_GAIN_VALUE 0xFF
55
56
57
58
59
60#define OV2680_FOCAL_LENGTH_DEFAULT 0x1B70064
61
62
63
64
65
66#define OV2680_F_NUMBER_DEFAULT 0x18000a
67
68
69
70
71
72
73
74
75#define OV2680_F_NUMBER_RANGE 0x180a180a
76#define OV2680_ID 0x2680
77
78#define OV2680_FINE_INTG_TIME_MIN 0
79#define OV2680_FINE_INTG_TIME_MAX_MARGIN 0
80#define OV2680_COARSE_INTG_TIME_MIN 1
81#define OV2680_COARSE_INTG_TIME_MAX_MARGIN 6
82
83
84
85
86#define OV2680_SW_SLEEP 0x0100
87#define OV2680_SW_RESET 0x0103
88#define OV2680_SW_STREAM 0x0100
89
90#define OV2680_SC_CMMN_CHIP_ID_H 0x300A
91#define OV2680_SC_CMMN_CHIP_ID_L 0x300B
92#define OV2680_SC_CMMN_SCCB_ID 0x302B
93#define OV2680_SC_CMMN_SUB_ID 0x302A
94
95#define OV2680_GROUP_ACCESS 0x3208
96
97#define OV2680_EXPOSURE_H 0x3500
98#define OV2680_EXPOSURE_M 0x3501
99#define OV2680_EXPOSURE_L 0x3502
100#define OV2680_AGC_H 0x350A
101#define OV2680_AGC_L 0x350B
102
103#define OV2680_HORIZONTAL_START_H 0x3800
104#define OV2680_HORIZONTAL_START_L 0x3801
105#define OV2680_VERTICAL_START_H 0x3802
106#define OV2680_VERTICAL_START_L 0x3803
107#define OV2680_HORIZONTAL_END_H 0x3804
108#define OV2680_HORIZONTAL_END_L 0x3805
109#define OV2680_VERTICAL_END_H 0x3806
110#define OV2680_VERTICAL_END_L 0x3807
111#define OV2680_HORIZONTAL_OUTPUT_SIZE_H 0x3808
112#define OV2680_HORIZONTAL_OUTPUT_SIZE_L 0x3809
113#define OV2680_VERTICAL_OUTPUT_SIZE_H 0x380a
114#define OV2680_VERTICAL_OUTPUT_SIZE_L 0x380b
115#define OV2680_TIMING_HTS_H 0x380C
116#define OV2680_TIMING_HTS_L 0x380D
117#define OV2680_TIMING_VTS_H 0x380e
118#define OV2680_TIMING_VTS_L 0x380f
119#define OV2680_FRAME_OFF_NUM 0x4202
120
121
122#define OV2680_FLIP_REG 0x3820
123#define OV2680_MIRROR_REG 0x3821
124#define OV2680_FLIP_BIT 1
125#define OV2680_MIRROR_BIT 2
126#define OV2680_FLIP_MIRROR_BIT_ENABLE 4
127
128#define OV2680_MWB_RED_GAIN_H 0x5004
129#define OV2680_MWB_GREEN_GAIN_H 0x5006
130#define OV2680_MWB_BLUE_GAIN_H 0x5008
131#define OV2680_MWB_GAIN_MAX 0x0fff
132
133#define OV2680_START_STREAMING 0x01
134#define OV2680_STOP_STREAMING 0x00
135
136#define OV2680_INVALID_CONFIG 0xffffffff
137
138struct regval_list {
139 u16 reg_num;
140 u8 value;
141};
142
143struct ov2680_resolution {
144 u8 *desc;
145 const struct ov2680_reg *regs;
146 int res;
147 int width;
148 int height;
149 int fps;
150 int pix_clk_freq;
151 u32 skip_frames;
152 u16 pixels_per_line;
153 u16 lines_per_frame;
154 u8 bin_factor_x;
155 u8 bin_factor_y;
156 u8 bin_mode;
157 bool used;
158};
159
160struct ov2680_format {
161 u8 *desc;
162 u32 pixelformat;
163 struct ov2680_reg *regs;
164};
165
166
167
168
169struct ov2680_device {
170 struct v4l2_subdev sd;
171 struct media_pad pad;
172 struct v4l2_mbus_framefmt format;
173 struct mutex input_lock;
174 struct v4l2_ctrl_handler ctrl_handler;
175 struct camera_sensor_platform_data *platform_data;
176 int vt_pix_clk_freq_mhz;
177 int fmt_idx;
178 int run_mode;
179 u8 res;
180 u8 type;
181};
182
183
184
185
186
187
188
189
190
191struct ov2680_reg {
192 u16 reg;
193 u32 val;
194};
195
196#define to_ov2680_sensor(x) container_of(x, struct ov2680_device, sd)
197
198#define OV2680_MAX_WRITE_BUF_SIZE 30
199
200struct ov2680_write_buffer {
201 u16 addr;
202 u8 data[OV2680_MAX_WRITE_BUF_SIZE];
203};
204
205struct ov2680_write_ctrl {
206 int index;
207 struct ov2680_write_buffer buffer;
208};
209
210static struct ov2680_reg const ov2680_global_setting[] = {
211 {0x0103, 0x01},
212 {0x3002, 0x00},
213 {0x3016, 0x1c},
214 {0x3018, 0x44},
215 {0x3020, 0x00},
216 {0x3080, 0x02},
217 {0x3082, 0x45},
218 {0x3084, 0x09},
219 {0x3085, 0x04},
220 {0x3503, 0x03},
221 {0x350b, 0x36},
222 {0x3600, 0xb4},
223 {0x3603, 0x39},
224 {0x3604, 0x24},
225 {0x3605, 0x00},
226 {0x3620, 0x26},
227 {0x3621, 0x37},
228 {0x3622, 0x04},
229 {0x3628, 0x00},
230 {0x3705, 0x3c},
231 {0x370c, 0x50},
232 {0x370d, 0xc0},
233 {0x3718, 0x88},
234 {0x3720, 0x00},
235 {0x3721, 0x00},
236 {0x3722, 0x00},
237 {0x3723, 0x00},
238 {0x3738, 0x00},
239 {0x3717, 0x58},
240 {0x3781, 0x80},
241 {0x3789, 0x60},
242 {0x3800, 0x00},
243 {0x3819, 0x04},
244 {0x4000, 0x81},
245 {0x4001, 0x40},
246 {0x4602, 0x02},
247 {0x481f, 0x36},
248 {0x4825, 0x36},
249 {0x4837, 0x18},
250 {0x5002, 0x30},
251 {0x5004, 0x04},
252 {0x5005, 0x00},
253 {0x5006, 0x04},
254 {0x5007, 0x00},
255 {0x5008, 0x04},
256 {0x5009, 0x00},
257 {0x5080, 0x00},
258 {0x3701, 0x64},
259 {0x3784, 0x0c},
260 {0x5780, 0x3e},
261 {0x5781, 0x0f},
262 {0x5782, 0x04},
263 {0x5783, 0x02},
264 {0x5784, 0x01},
265 {0x5785, 0x01},
266 {0x5786, 0x00},
267 {0x5787, 0x04},
268 {0x5788, 0x02},
269 {0x5789, 0x00},
270 {0x578a, 0x01},
271 {0x578b, 0x02},
272 {0x578c, 0x03},
273 {0x578d, 0x03},
274 {0x578e, 0x08},
275 {0x578f, 0x0c},
276 {0x5790, 0x08},
277 {0x5791, 0x04},
278 {0x5792, 0x00},
279 {0x5793, 0x00},
280 {0x5794, 0x03},
281 {0x0100, 0x00},
282
283 {}
284};
285
286#if 0
287
288
289
290static struct ov2680_reg const ov2680_QCIF_30fps[] = {
291 {0x3086, 0x01},
292 {0x3501, 0x24},
293 {0x3502, 0x40},
294 {0x370a, 0x23},
295 {0x3801, 0xa0},
296 {0x3802, 0x00},
297 {0x3803, 0x78},
298 {0x3804, 0x05},
299 {0x3805, 0xaf},
300 {0x3806, 0x04},
301 {0x3807, 0x47},
302 {0x3808, 0x00},
303 {0x3809, 0xC0},
304 {0x380a, 0x00},
305 {0x380b, 0xa0},
306 {0x380c, 0x06},
307 {0x380d, 0xb0},
308 {0x380e, 0x02},
309 {0x380f, 0x84},
310 {0x3810, 0x00},
311 {0x3811, 0x04},
312 {0x3812, 0x00},
313 {0x3813, 0x04},
314 {0x3814, 0x31},
315 {0x3815, 0x31},
316 {0x4000, 0x81},
317 {0x4001, 0x40},
318 {0x4008, 0x00},
319 {0x4009, 0x03},
320 {0x5081, 0x41},
321 {0x5708, 0x00},
322 {0x5704, 0x10},
323 {0x5705, 0xa0},
324 {0x5706, 0x0c},
325 {0x5707, 0x78},
326 {0x3820, 0xc2},
327 {0x3821, 0x01},
328
329 {}
330};
331
332
333
334
335static struct ov2680_reg const ov2680_CIF_30fps[] = {
336 {0x3086, 0x01},
337 {0x3501, 0x24},
338 {0x3502, 0x40},
339 {0x370a, 0x23},
340 {0x3801, 0xa0},
341 {0x3802, 0x00},
342 {0x3803, 0x78},
343 {0x3804, 0x03},
344 {0x3805, 0x8f},
345 {0x3806, 0x02},
346 {0x3807, 0xe7},
347 {0x3808, 0x01},
348 {0x3809, 0x70},
349 {0x380a, 0x01},
350 {0x380b, 0x30},
351 {0x380c, 0x06},
352 {0x380d, 0xb0},
353 {0x380e, 0x02},
354 {0x380f, 0x84},
355 {0x3810, 0x00},
356 {0x3811, 0x04},
357 {0x3812, 0x00},
358 {0x3813, 0x04},
359 {0x3814, 0x31},
360 {0x3815, 0x31},
361 {0x4008, 0x00},
362 {0x4009, 0x03},
363 {0x5081, 0x41},
364 {0x5708, 0x00},
365 {0x5704, 0x10},
366 {0x5705, 0xa0},
367 {0x5706, 0x0c},
368 {0x5707, 0x78},
369 {0x3820, 0xc2},
370 {0x3821, 0x01},
371
372 {}
373};
374
375
376
377
378static struct ov2680_reg const ov2680_QVGA_30fps[] = {
379 {0x3086, 0x01},
380 {0x3501, 0x24},
381 {0x3502, 0x40},
382 {0x370a, 0x23},
383 {0x3801, 0xa0},
384 {0x3802, 0x00},
385 {0x3803, 0x78},
386 {0x3804, 0x03},
387 {0x3805, 0x4f},
388 {0x3806, 0x02},
389 {0x3807, 0x87},
390 {0x3808, 0x01},
391 {0x3809, 0x50},
392 {0x380a, 0x01},
393 {0x380b, 0x00},
394 {0x380c, 0x06},
395 {0x380d, 0xb0},
396 {0x380e, 0x02},
397 {0x380f, 0x84},
398 {0x3810, 0x00},
399 {0x3811, 0x04},
400 {0x3812, 0x00},
401 {0x3813, 0x04},
402 {0x3814, 0x31},
403 {0x3815, 0x31},
404 {0x4008, 0x00},
405 {0x4009, 0x03},
406 {0x5081, 0x41},
407 {0x5708, 0x00},
408 {0x5704, 0x10},
409 {0x5705, 0xa0},
410 {0x5706, 0x0c},
411 {0x5707, 0x78},
412 {0x3820, 0xc2},
413 {0x3821, 0x01},
414
415 {}
416};
417
418
419
420
421static struct ov2680_reg const ov2680_656x496_30fps[] = {
422 {0x3086, 0x01},
423 {0x3501, 0x24},
424 {0x3502, 0x40},
425 {0x370a, 0x23},
426 {0x3801, 0xa0},
427 {0x3802, 0x00},
428 {0x3803, 0x78},
429 {0x3804, 0x05},
430 {0x3805, 0xcf},
431 {0x3806, 0x04},
432 {0x3807, 0x67},
433 {0x3808, 0x02},
434 {0x3809, 0x90},
435 {0x380a, 0x01},
436 {0x380b, 0xf0},
437 {0x380c, 0x06},
438 {0x380d, 0xb0},
439 {0x380e, 0x02},
440 {0x380f, 0x84},
441 {0x3810, 0x00},
442 {0x3811, 0x04},
443 {0x3812, 0x00},
444 {0x3813, 0x04},
445 {0x3814, 0x31},
446 {0x3815, 0x31},
447 {0x4008, 0x00},
448 {0x4009, 0x03},
449 {0x5081, 0x41},
450 {0x5708, 0x00},
451 {0x5704, 0x10},
452 {0x5705, 0xa0},
453 {0x5706, 0x0c},
454 {0x5707, 0x78},
455 {0x3820, 0xc2},
456 {0x3821, 0x01},
457
458 {}
459};
460
461
462
463
464static struct ov2680_reg const ov2680_720x592_30fps[] = {
465 {0x3086, 0x01},
466 {0x3501, 0x26},
467 {0x3502, 0x40},
468 {0x370a, 0x23},
469 {0x3801, 0x00},
470 {0x3802, 0x00},
471 {0x3803, 0x00},
472 {0x3804, 0x05},
473 {0x3805, 0xaf},
474 {0x3806, 0x04},
475 {0x3807, 0xaf},
476 {0x3808, 0x02},
477 {0x3809, 0xd0},
478 {0x380a, 0x02},
479 {0x380b, 0x50},
480 {0x380c, 0x06},
481 {0x380d, 0xac},
482 {0x380e, 0x02},
483 {0x380f, 0x84},
484 {0x3810, 0x00},
485 {0x3811, 0x00},
486 {0x3812, 0x00},
487 {0x3813, 0x00},
488 {0x3814, 0x31},
489 {0x3815, 0x31},
490 {0x4008, 0x00},
491 {0x4009, 0x03},
492 {0x5708, 0x00},
493 {0x5704, 0x02},
494 {0x5705, 0xd0},
495 {0x5706, 0x02},
496 {0x5707, 0x50},
497 {0x3820, 0xc2},
498 {0x3821, 0x01},
499 {0x5090, 0x00},
500
501
502 {0x5081, 0x41},
503 {}
504};
505
506
507
508
509static struct ov2680_reg const ov2680_800x600_30fps[] = {
510 {0x3086, 0x01},
511 {0x3501, 0x26},
512 {0x3502, 0x40},
513 {0x370a, 0x23},
514 {0x3801, 0x00},
515 {0x3802, 0x00},
516 {0x3803, 0x00},
517 {0x3804, 0x06},
518 {0x3805, 0x4f},
519 {0x3806, 0x04},
520 {0x3807, 0xbf},
521 {0x3808, 0x03},
522 {0x3809, 0x20},
523 {0x380a, 0x02},
524 {0x380b, 0x58},
525 {0x380c, 0x06},
526 {0x380d, 0xac},
527 {0x380e, 0x02},
528 {0x380f, 0x84},
529 {0x3810, 0x00},
530 {0x3811, 0x00},
531 {0x3812, 0x00},
532 {0x3813, 0x00},
533 {0x3814, 0x31},
534 {0x3815, 0x31},
535 {0x5708, 0x00},
536 {0x5704, 0x03},
537 {0x5705, 0x20},
538 {0x5706, 0x02},
539 {0x5707, 0x58},
540 {0x3820, 0xc2},
541 {0x3821, 0x01},
542 {0x5090, 0x00},
543 {0x4008, 0x00},
544 {0x4009, 0x03},
545 {0x5081, 0x41},
546 {}
547};
548
549
550
551
552static struct ov2680_reg const ov2680_720p_30fps[] = {
553 {0x3086, 0x00},
554 {0x3501, 0x48},
555 {0x3502, 0xe0},
556 {0x370a, 0x21},
557 {0x3801, 0xa0},
558 {0x3802, 0x00},
559 {0x3803, 0xf2},
560 {0x3804, 0x05},
561 {0x3805, 0xbf},
562 {0x3806, 0x03},
563 {0x3807, 0xdd},
564 {0x3808, 0x05},
565 {0x3809, 0x10},
566 {0x380a, 0x02},
567 {0x380b, 0xe0},
568 {0x380c, 0x06},
569 {0x380d, 0xa8},
570 {0x380e, 0x05},
571 {0x380f, 0x0e},
572 {0x3810, 0x00},
573 {0x3811, 0x08},
574 {0x3812, 0x00},
575 {0x3813, 0x06},
576 {0x3814, 0x11},
577 {0x3815, 0x11},
578 {0x4008, 0x02},
579 {0x4009, 0x09},
580 {0x5081, 0x41},
581 {0x5708, 0x00},
582 {0x5704, 0x10},
583 {0x5705, 0xa0},
584 {0x5706, 0x0c},
585 {0x5707, 0x78},
586 {0x3820, 0xc0},
587 {0x3821, 0x00},
588
589 {}
590};
591
592
593
594
595static struct ov2680_reg const ov2680_1296x976_30fps[] = {
596 {0x3086, 0x00},
597 {0x3501, 0x48},
598 {0x3502, 0xe0},
599 {0x370a, 0x21},
600 {0x3801, 0xa0},
601 {0x3802, 0x00},
602 {0x3803, 0x78},
603 {0x3804, 0x05},
604 {0x3805, 0xbf},
605 {0x3806, 0x04},
606 {0x3807, 0x57},
607 {0x3808, 0x05},
608 {0x3809, 0x10},
609 {0x380a, 0x03},
610 {0x380b, 0xd0},
611 {0x380c, 0x06},
612 {0x380d, 0xa8},
613 {0x380e, 0x05},
614 {0x380f, 0x0e},
615 {0x3810, 0x00},
616 {0x3811, 0x08},
617 {0x3812, 0x00},
618 {0x3813, 0x08},
619 {0x3814, 0x11},
620 {0x3815, 0x11},
621 {0x4008, 0x02},
622 {0x4009, 0x09},
623 {0x5081, 0x41},
624 {0x5708, 0x00},
625 {0x5704, 0x10},
626 {0x5705, 0xa0},
627 {0x5706, 0x0c},
628 {0x5707, 0x78},
629 {0x3820, 0xc0},
630 {0x3821, 0x00},
631
632 {}
633};
634
635
636
637
638static struct ov2680_reg const ov2680_1456x1096_30fps[] = {
639 {0x3086, 0x00},
640 {0x3501, 0x48},
641 {0x3502, 0xe0},
642 {0x370a, 0x21},
643 {0x3801, 0x90},
644 {0x3802, 0x00},
645 {0x3803, 0x78},
646 {0x3804, 0x06},
647 {0x3805, 0x4f},
648 {0x3806, 0x04},
649 {0x3807, 0xC0},
650 {0x3808, 0x05},
651 {0x3809, 0xb0},
652 {0x380a, 0x04},
653 {0x380b, 0x48},
654 {0x380c, 0x06},
655 {0x380d, 0xa8},
656 {0x380e, 0x05},
657 {0x380f, 0x0e},
658 {0x3810, 0x00},
659 {0x3811, 0x08},
660 {0x3812, 0x00},
661 {0x3813, 0x00},
662 {0x3814, 0x11},
663 {0x3815, 0x11},
664 {0x4008, 0x02},
665 {0x4009, 0x09},
666 {0x5081, 0x41},
667 {0x5708, 0x00},
668 {0x5704, 0x10},
669 {0x5705, 0xa0},
670 {0x5706, 0x0c},
671 {0x5707, 0x78},
672 {0x3820, 0xc0},
673 {0x3821, 0x00},
674
675 {}
676};
677#endif
678
679
680
681
682
683static struct ov2680_reg const ov2680_1616x916_30fps[] = {
684 {0x3086, 0x00},
685 {0x3501, 0x48},
686 {0x3502, 0xe0},
687 {0x370a, 0x21},
688 {0x3801, 0x00},
689 {0x3802, 0x00},
690 {0x3803, 0x96},
691 {0x3804, 0x06},
692 {0x3805, 0x4f},
693 {0x3806, 0x04},
694 {0x3807, 0x39},
695 {0x3808, 0x06},
696 {0x3809, 0x50},
697 {0x380a, 0x03},
698 {0x380b, 0x94},
699 {0x380c, 0x06},
700 {0x380d, 0xa8},
701 {0x380e, 0x05},
702 {0x380f, 0x0e},
703 {0x3810, 0x00},
704 {0x3811, 0x00},
705 {0x3812, 0x00},
706 {0x3813, 0x08},
707 {0x3814, 0x11},
708 {0x3815, 0x11},
709 {0x4008, 0x02},
710 {0x4009, 0x09},
711 {0x5081, 0x41},
712 {0x5708, 0x01},
713 {0x5704, 0x06},
714 {0x5705, 0x50},
715 {0x5706, 0x03},
716 {0x5707, 0x94},
717 {0x3820, 0xc0},
718 {0x3821, 0x00},
719
720 {}
721};
722
723
724
725
726#if 0
727static struct ov2680_reg const ov2680_1616x1082_30fps[] = {
728 {0x3086, 0x00},
729 {0x3501, 0x48},
730 {0x3502, 0xe0},
731 {0x370a, 0x21},
732 {0x3801, 0x00},
733 {0x3802, 0x00},
734 {0x3803, 0x86},
735 {0x3804, 0x06},
736 {0x3805, 0x4f},
737 {0x3806, 0x04},
738 {0x3807, 0xbf},
739 {0x3808, 0x06},
740 {0x3809, 0x50},
741 {0x380a, 0x04},
742 {0x380b, 0x3a},
743 {0x380c, 0x06},
744 {0x380d, 0xa8},
745 {0x380e, 0x05},
746 {0x380f, 0x0e},
747 {0x3810, 0x00},
748 {0x3811, 0x00},
749 {0x3812, 0x00},
750 {0x3813, 0x00},
751 {0x3814, 0x11},
752 {0x3815, 0x11},
753 {0x5708, 0x01},
754 {0x5704, 0x06},
755 {0x5705, 0x50},
756 {0x5706, 0x04},
757 {0x5707, 0x3a},
758 {0x3820, 0xc0},
759 {0x3821, 0x00},
760
761 {0x4008, 0x02},
762 {0x4009, 0x09},
763 {0x5081, 0x41},
764 {}
765};
766#endif
767
768
769
770static struct ov2680_reg const ov2680_1616x1216_30fps[] = {
771 {0x3086, 0x00},
772 {0x3501, 0x48},
773 {0x3502, 0xe0},
774 {0x370a, 0x21},
775 {0x3801, 0x00},
776 {0x3802, 0x00},
777 {0x3803, 0x00},
778 {0x3804, 0x06},
779 {0x3805, 0x4f},
780 {0x3806, 0x04},
781 {0x3807, 0xbf},
782 {0x3808, 0x06},
783 {0x3809, 0x50},
784 {0x380a, 0x04},
785 {0x380b, 0xc0},
786 {0x380c, 0x06},
787 {0x380d, 0xa8},
788 {0x380e, 0x05},
789 {0x380f, 0x0e},
790 {0x3810, 0x00},
791 {0x3811, 0x00},
792 {0x3812, 0x00},
793 {0x3813, 0x00},
794 {0x3814, 0x11},
795 {0x3815, 0x11},
796 {0x4008, 0x00},
797 {0x4009, 0x0b},
798 {0x5081, 0x01},
799 {0x5708, 0x01},
800 {0x5704, 0x06},
801 {0x5705, 0x50},
802 {0x5706, 0x04},
803 {0x5707, 0xcc},
804 {0x3820, 0xc0},
805 {0x3821, 0x00},
806
807 {}
808};
809
810static struct ov2680_resolution ov2680_res_preview[] = {
811 {
812 .desc = "ov2680_1616x1216_30fps",
813 .width = 1616,
814 .height = 1216,
815 .pix_clk_freq = 66,
816 .fps = 30,
817 .used = 0,
818 .pixels_per_line = 1698,
819 .lines_per_frame = 1294,
820 .bin_factor_x = 0,
821 .bin_factor_y = 0,
822 .bin_mode = 0,
823 .skip_frames = 3,
824 .regs = ov2680_1616x1216_30fps,
825 },
826 {
827 .desc = "ov2680_1616x916_30fps",
828 .width = 1616,
829 .height = 916,
830 .fps = 30,
831 .pix_clk_freq = 66,
832 .used = 0,
833 .pixels_per_line = 1698,
834 .lines_per_frame = 1294,
835 .bin_factor_x = 0,
836 .bin_factor_y = 0,
837 .bin_mode = 0,
838 .skip_frames = 3,
839 .regs = ov2680_1616x916_30fps,
840 },
841};
842
843#define N_RES_PREVIEW (ARRAY_SIZE(ov2680_res_preview))
844
845static struct ov2680_resolution *ov2680_res = ov2680_res_preview;
846static unsigned long N_RES = N_RES_PREVIEW;
847
848#endif
849