1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __OV5693_H__
20#define __OV5693_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
37
38#define ENABLE_NON_PREVIEW 0
39
40#define OV5693_POWER_UP_RETRY_NUM 5
41
42
43#define I2C_MSG_LENGTH 0x2
44#define I2C_RETRY_COUNT 5
45
46#define OV5693_FOCAL_LENGTH_NUM 334
47#define OV5693_FOCAL_LENGTH_DEM 100
48#define OV5693_F_NUMBER_DEFAULT_NUM 24
49#define OV5693_F_NUMBER_DEM 10
50
51#define MAX_FMTS 1
52
53
54#define OV5693_READ_MODE_BINNING_ON 0x0400
55#define OV5693_READ_MODE_BINNING_OFF 0x00
56#define OV5693_INTEGRATION_TIME_MARGIN 8
57
58#define OV5693_MAX_EXPOSURE_VALUE 0xFFF1
59#define OV5693_MAX_GAIN_VALUE 0xFF
60
61
62
63
64
65#define OV5693_FOCAL_LENGTH_DEFAULT 0x1B70064
66
67
68
69
70
71#define OV5693_F_NUMBER_DEFAULT 0x18000a
72
73
74
75
76
77
78
79
80#define OV5693_F_NUMBER_RANGE 0x180a180a
81#define OV5693_ID 0x5690
82
83#define OV5693_FINE_INTG_TIME_MIN 0
84#define OV5693_FINE_INTG_TIME_MAX_MARGIN 0
85#define OV5693_COARSE_INTG_TIME_MIN 1
86#define OV5693_COARSE_INTG_TIME_MAX_MARGIN 6
87
88#define OV5693_BIN_FACTOR_MAX 4
89
90
91
92#define OV5693_SW_SLEEP 0x0100
93#define OV5693_SW_RESET 0x0103
94#define OV5693_SW_STREAM 0x0100
95
96#define OV5693_SC_CMMN_CHIP_ID_H 0x300A
97#define OV5693_SC_CMMN_CHIP_ID_L 0x300B
98#define OV5693_SC_CMMN_SCCB_ID 0x300C
99#define OV5693_SC_CMMN_SUB_ID 0x302A
100
101#define OV5693_GROUP_ACCESS 0x3208
102
103
104
105
106#define OV5693_EXPOSURE_H 0x3500
107#define OV5693_EXPOSURE_M 0x3501
108#define OV5693_EXPOSURE_L 0x3502
109
110#define OV5693_AGC_H 0x350A
111#define OV5693_AGC_L 0x350B
112
113#define OV5693_HORIZONTAL_START_H 0x3800
114#define OV5693_HORIZONTAL_START_L 0x3801
115#define OV5693_VERTICAL_START_H 0x3802
116#define OV5693_VERTICAL_START_L 0x3803
117#define OV5693_HORIZONTAL_END_H 0x3804
118#define OV5693_HORIZONTAL_END_L 0x3805
119#define OV5693_VERTICAL_END_H 0x3806
120#define OV5693_VERTICAL_END_L 0x3807
121#define OV5693_HORIZONTAL_OUTPUT_SIZE_H 0x3808
122#define OV5693_HORIZONTAL_OUTPUT_SIZE_L 0x3809
123#define OV5693_VERTICAL_OUTPUT_SIZE_H 0x380a
124#define OV5693_VERTICAL_OUTPUT_SIZE_L 0x380b
125
126#define OV5693_TIMING_HTS_H 0x380C
127
128#define OV5693_TIMING_HTS_L 0x380D
129
130#define OV5693_TIMING_VTS_H 0x380e
131
132#define OV5693_TIMING_VTS_L 0x380f
133
134#define OV5693_MWB_RED_GAIN_H 0x3400
135#define OV5693_MWB_GREEN_GAIN_H 0x3402
136#define OV5693_MWB_BLUE_GAIN_H 0x3404
137#define OV5693_MWB_GAIN_MAX 0x0fff
138
139#define OV5693_START_STREAMING 0x01
140#define OV5693_STOP_STREAMING 0x00
141
142#define VCM_ADDR 0x0c
143#define VCM_CODE_MSB 0x04
144
145#define OV5693_INVALID_CONFIG 0xffffffff
146
147#define OV5693_VCM_SLEW_STEP 0x30F0
148#define OV5693_VCM_SLEW_STEP_MAX 0x7
149#define OV5693_VCM_SLEW_STEP_MASK 0x7
150#define OV5693_VCM_CODE 0x30F2
151#define OV5693_VCM_SLEW_TIME 0x30F4
152#define OV5693_VCM_SLEW_TIME_MAX 0xffff
153#define OV5693_VCM_ENABLE 0x8000
154
155#define OV5693_VCM_MAX_FOCUS_NEG -1023
156#define OV5693_VCM_MAX_FOCUS_POS 1023
157
158#define DLC_ENABLE 1
159#define DLC_DISABLE 0
160#define VCM_PROTECTION_OFF 0xeca3
161#define VCM_PROTECTION_ON 0xdc51
162#define VCM_DEFAULT_S 0x0
163#define vcm_step_s(a) (u8)(a & 0xf)
164#define vcm_step_mclk(a) (u8)((a >> 4) & 0x3)
165#define vcm_dlc_mclk(dlc, mclk) (u16)((dlc << 3) | mclk | 0xa104)
166#define vcm_tsrc(tsrc) (u16)(tsrc << 3 | 0xf200)
167#define vcm_val(data, s) (u16)(data << 4 | s)
168#define DIRECT_VCM vcm_dlc_mclk(0, 0)
169
170
171#define OV5693_FRAME_OFF_NUM 0x4202
172#define OV5693_OTP_BYTE_MAX 32
173#define OV5693_OTP_SHORT_MAX 16
174#define OV5693_OTP_START_ADDR 0x3D00
175#define OV5693_OTP_END_ADDR 0x3D0F
176#define OV5693_OTP_DATA_SIZE 320
177#define OV5693_OTP_PROGRAM_REG 0x3D80
178#define OV5693_OTP_READ_REG 0x3D81
179#define OV5693_OTP_BANK_REG 0x3D84
180#define OV5693_OTP_READY_REG_DONE 1
181#define OV5693_OTP_BANK_MAX 28
182#define OV5693_OTP_BANK_SIZE 16
183#define OV5693_OTP_READ_ONETIME 16
184#define OV5693_OTP_MODE_READ 1
185
186struct regval_list {
187 u16 reg_num;
188 u8 value;
189};
190
191struct ov5693_resolution {
192 u8 *desc;
193 const struct ov5693_reg *regs;
194 int res;
195 int width;
196 int height;
197 int fps;
198 int pix_clk_freq;
199 u16 pixels_per_line;
200 u16 lines_per_frame;
201 u8 bin_factor_x;
202 u8 bin_factor_y;
203 u8 bin_mode;
204 bool used;
205};
206
207struct ov5693_format {
208 u8 *desc;
209 u32 pixelformat;
210 struct ov5693_reg *regs;
211};
212
213enum vcm_type {
214 VCM_UNKNOWN,
215 VCM_AD5823,
216 VCM_DW9714,
217};
218
219
220
221
222struct ov5693_device {
223 struct v4l2_subdev sd;
224 struct media_pad pad;
225 struct v4l2_mbus_framefmt format;
226 struct mutex input_lock;
227 struct v4l2_ctrl_handler ctrl_handler;
228
229 struct camera_sensor_platform_data *platform_data;
230 ktime_t timestamp_t_focus_abs;
231 int vt_pix_clk_freq_mhz;
232 int fmt_idx;
233 int run_mode;
234 int otp_size;
235 u8 *otp_data;
236 u32 focus;
237 s16 number_of_steps;
238 u8 res;
239 u8 type;
240 bool vcm_update;
241 enum vcm_type vcm;
242};
243
244enum ov5693_tok_type {
245 OV5693_8BIT = 0x0001,
246 OV5693_16BIT = 0x0002,
247 OV5693_32BIT = 0x0004,
248 OV5693_TOK_TERM = 0xf000,
249 OV5693_TOK_DELAY = 0xfe00,
250 OV5693_TOK_MASK = 0xfff0
251};
252
253
254
255
256
257
258
259
260
261struct ov5693_reg {
262 enum ov5693_tok_type type;
263 u16 reg;
264 u32 val;
265};
266
267#define to_ov5693_sensor(x) container_of(x, struct ov5693_device, sd)
268
269#define OV5693_MAX_WRITE_BUF_SIZE 30
270
271struct ov5693_write_buffer {
272 u16 addr;
273 u8 data[OV5693_MAX_WRITE_BUF_SIZE];
274};
275
276struct ov5693_write_ctrl {
277 int index;
278 struct ov5693_write_buffer buffer;
279};
280
281static struct ov5693_reg const ov5693_global_setting[] = {
282 {OV5693_8BIT, 0x0103, 0x01},
283 {OV5693_8BIT, 0x3001, 0x0a},
284 {OV5693_8BIT, 0x3002, 0x80},
285 {OV5693_8BIT, 0x3006, 0x00},
286 {OV5693_8BIT, 0x3011, 0x21},
287 {OV5693_8BIT, 0x3012, 0x09},
288 {OV5693_8BIT, 0x3013, 0x10},
289 {OV5693_8BIT, 0x3014, 0x00},
290 {OV5693_8BIT, 0x3015, 0x08},
291 {OV5693_8BIT, 0x3016, 0xf0},
292 {OV5693_8BIT, 0x3017, 0xf0},
293 {OV5693_8BIT, 0x3018, 0xf0},
294 {OV5693_8BIT, 0x301b, 0xb4},
295 {OV5693_8BIT, 0x301d, 0x02},
296 {OV5693_8BIT, 0x3021, 0x00},
297 {OV5693_8BIT, 0x3022, 0x01},
298 {OV5693_8BIT, 0x3028, 0x44},
299 {OV5693_8BIT, 0x3098, 0x02},
300 {OV5693_8BIT, 0x3099, 0x19},
301 {OV5693_8BIT, 0x309a, 0x02},
302 {OV5693_8BIT, 0x309b, 0x01},
303 {OV5693_8BIT, 0x309c, 0x00},
304 {OV5693_8BIT, 0x30a0, 0xd2},
305 {OV5693_8BIT, 0x30a2, 0x01},
306 {OV5693_8BIT, 0x30b2, 0x00},
307 {OV5693_8BIT, 0x30b3, 0x7d},
308 {OV5693_8BIT, 0x30b4, 0x03},
309 {OV5693_8BIT, 0x30b5, 0x04},
310 {OV5693_8BIT, 0x30b6, 0x01},
311 {OV5693_8BIT, 0x3104, 0x21},
312 {OV5693_8BIT, 0x3106, 0x00},
313 {OV5693_8BIT, 0x3400, 0x04},
314 {OV5693_8BIT, 0x3401, 0x00},
315 {OV5693_8BIT, 0x3402, 0x04},
316 {OV5693_8BIT, 0x3403, 0x00},
317 {OV5693_8BIT, 0x3404, 0x04},
318 {OV5693_8BIT, 0x3405, 0x00},
319 {OV5693_8BIT, 0x3406, 0x01},
320 {OV5693_8BIT, 0x3500, 0x00},
321 {OV5693_8BIT, 0x3503, 0x07},
322 {OV5693_8BIT, 0x3504, 0x00},
323 {OV5693_8BIT, 0x3505, 0x00},
324 {OV5693_8BIT, 0x3506, 0x00},
325 {OV5693_8BIT, 0x3507, 0x02},
326 {OV5693_8BIT, 0x3508, 0x00},
327 {OV5693_8BIT, 0x3509, 0x10},
328 {OV5693_8BIT, 0x350a, 0x00},
329 {OV5693_8BIT, 0x350b, 0x40},
330 {OV5693_8BIT, 0x3601, 0x0a},
331 {OV5693_8BIT, 0x3602, 0x38},
332 {OV5693_8BIT, 0x3612, 0x80},
333 {OV5693_8BIT, 0x3620, 0x54},
334 {OV5693_8BIT, 0x3621, 0xc7},
335 {OV5693_8BIT, 0x3622, 0x0f},
336 {OV5693_8BIT, 0x3625, 0x10},
337 {OV5693_8BIT, 0x3630, 0x55},
338 {OV5693_8BIT, 0x3631, 0xf4},
339 {OV5693_8BIT, 0x3632, 0x00},
340 {OV5693_8BIT, 0x3633, 0x34},
341 {OV5693_8BIT, 0x3634, 0x02},
342 {OV5693_8BIT, 0x364d, 0x0d},
343 {OV5693_8BIT, 0x364f, 0xdd},
344 {OV5693_8BIT, 0x3660, 0x04},
345 {OV5693_8BIT, 0x3662, 0x10},
346 {OV5693_8BIT, 0x3663, 0xf1},
347 {OV5693_8BIT, 0x3665, 0x00},
348 {OV5693_8BIT, 0x3666, 0x20},
349 {OV5693_8BIT, 0x3667, 0x00},
350 {OV5693_8BIT, 0x366a, 0x80},
351 {OV5693_8BIT, 0x3680, 0xe0},
352 {OV5693_8BIT, 0x3681, 0x00},
353 {OV5693_8BIT, 0x3700, 0x42},
354 {OV5693_8BIT, 0x3701, 0x14},
355 {OV5693_8BIT, 0x3702, 0xa0},
356 {OV5693_8BIT, 0x3703, 0xd8},
357 {OV5693_8BIT, 0x3704, 0x78},
358 {OV5693_8BIT, 0x3705, 0x02},
359 {OV5693_8BIT, 0x370a, 0x00},
360 {OV5693_8BIT, 0x370b, 0x20},
361 {OV5693_8BIT, 0x370c, 0x0c},
362 {OV5693_8BIT, 0x370d, 0x11},
363 {OV5693_8BIT, 0x370e, 0x00},
364 {OV5693_8BIT, 0x370f, 0x40},
365 {OV5693_8BIT, 0x3710, 0x00},
366 {OV5693_8BIT, 0x371a, 0x1c},
367 {OV5693_8BIT, 0x371b, 0x05},
368 {OV5693_8BIT, 0x371c, 0x01},
369 {OV5693_8BIT, 0x371e, 0xa1},
370 {OV5693_8BIT, 0x371f, 0x0c},
371 {OV5693_8BIT, 0x3721, 0x00},
372 {OV5693_8BIT, 0x3724, 0x10},
373 {OV5693_8BIT, 0x3726, 0x00},
374 {OV5693_8BIT, 0x372a, 0x01},
375 {OV5693_8BIT, 0x3730, 0x10},
376 {OV5693_8BIT, 0x3738, 0x22},
377 {OV5693_8BIT, 0x3739, 0xe5},
378 {OV5693_8BIT, 0x373a, 0x50},
379 {OV5693_8BIT, 0x373b, 0x02},
380 {OV5693_8BIT, 0x373c, 0x41},
381 {OV5693_8BIT, 0x373f, 0x02},
382 {OV5693_8BIT, 0x3740, 0x42},
383 {OV5693_8BIT, 0x3741, 0x02},
384 {OV5693_8BIT, 0x3742, 0x18},
385 {OV5693_8BIT, 0x3743, 0x01},
386 {OV5693_8BIT, 0x3744, 0x02},
387 {OV5693_8BIT, 0x3747, 0x10},
388 {OV5693_8BIT, 0x374c, 0x04},
389 {OV5693_8BIT, 0x3751, 0xf0},
390 {OV5693_8BIT, 0x3752, 0x00},
391 {OV5693_8BIT, 0x3753, 0x00},
392 {OV5693_8BIT, 0x3754, 0xc0},
393 {OV5693_8BIT, 0x3755, 0x00},
394 {OV5693_8BIT, 0x3756, 0x1a},
395 {OV5693_8BIT, 0x3758, 0x00},
396 {OV5693_8BIT, 0x3759, 0x0f},
397 {OV5693_8BIT, 0x376b, 0x44},
398 {OV5693_8BIT, 0x375c, 0x04},
399 {OV5693_8BIT, 0x3774, 0x10},
400 {OV5693_8BIT, 0x3776, 0x00},
401 {OV5693_8BIT, 0x377f, 0x08},
402 {OV5693_8BIT, 0x3780, 0x22},
403 {OV5693_8BIT, 0x3781, 0x0c},
404 {OV5693_8BIT, 0x3784, 0x2c},
405 {OV5693_8BIT, 0x3785, 0x1e},
406 {OV5693_8BIT, 0x378f, 0xf5},
407 {OV5693_8BIT, 0x3791, 0xb0},
408 {OV5693_8BIT, 0x3795, 0x00},
409 {OV5693_8BIT, 0x3796, 0x64},
410 {OV5693_8BIT, 0x3797, 0x11},
411 {OV5693_8BIT, 0x3798, 0x30},
412 {OV5693_8BIT, 0x3799, 0x41},
413 {OV5693_8BIT, 0x379a, 0x07},
414 {OV5693_8BIT, 0x379b, 0xb0},
415 {OV5693_8BIT, 0x379c, 0x0c},
416 {OV5693_8BIT, 0x37c5, 0x00},
417 {OV5693_8BIT, 0x37c6, 0x00},
418 {OV5693_8BIT, 0x37c7, 0x00},
419 {OV5693_8BIT, 0x37c9, 0x00},
420 {OV5693_8BIT, 0x37ca, 0x00},
421 {OV5693_8BIT, 0x37cb, 0x00},
422 {OV5693_8BIT, 0x37de, 0x00},
423 {OV5693_8BIT, 0x37df, 0x00},
424 {OV5693_8BIT, 0x3800, 0x00},
425 {OV5693_8BIT, 0x3801, 0x00},
426 {OV5693_8BIT, 0x3802, 0x00},
427 {OV5693_8BIT, 0x3804, 0x0a},
428 {OV5693_8BIT, 0x3805, 0x3f},
429 {OV5693_8BIT, 0x3810, 0x00},
430 {OV5693_8BIT, 0x3812, 0x00},
431 {OV5693_8BIT, 0x3823, 0x00},
432 {OV5693_8BIT, 0x3824, 0x00},
433 {OV5693_8BIT, 0x3825, 0x00},
434 {OV5693_8BIT, 0x3826, 0x00},
435 {OV5693_8BIT, 0x3827, 0x00},
436 {OV5693_8BIT, 0x382a, 0x04},
437 {OV5693_8BIT, 0x3a04, 0x06},
438 {OV5693_8BIT, 0x3a05, 0x14},
439 {OV5693_8BIT, 0x3a06, 0x00},
440 {OV5693_8BIT, 0x3a07, 0xfe},
441 {OV5693_8BIT, 0x3b00, 0x00},
442 {OV5693_8BIT, 0x3b02, 0x00},
443 {OV5693_8BIT, 0x3b03, 0x00},
444 {OV5693_8BIT, 0x3b04, 0x00},
445 {OV5693_8BIT, 0x3b05, 0x00},
446 {OV5693_8BIT, 0x3e07, 0x20},
447 {OV5693_8BIT, 0x4000, 0x08},
448 {OV5693_8BIT, 0x4001, 0x04},
449 {OV5693_8BIT, 0x4002, 0x45},
450 {OV5693_8BIT, 0x4004, 0x08},
451 {OV5693_8BIT, 0x4005, 0x18},
452 {OV5693_8BIT, 0x4006, 0x20},
453 {OV5693_8BIT, 0x4008, 0x24},
454 {OV5693_8BIT, 0x4009, 0x10},
455 {OV5693_8BIT, 0x400c, 0x00},
456 {OV5693_8BIT, 0x400d, 0x00},
457 {OV5693_8BIT, 0x4058, 0x00},
458 {OV5693_8BIT, 0x404e, 0x37},
459 {OV5693_8BIT, 0x404f, 0x8f},
460 {OV5693_8BIT, 0x4058, 0x00},
461 {OV5693_8BIT, 0x4101, 0xb2},
462 {OV5693_8BIT, 0x4303, 0x00},
463 {OV5693_8BIT, 0x4304, 0x08},
464 {OV5693_8BIT, 0x4307, 0x31},
465 {OV5693_8BIT, 0x4311, 0x04},
466 {OV5693_8BIT, 0x4315, 0x01},
467 {OV5693_8BIT, 0x4511, 0x05},
468 {OV5693_8BIT, 0x4512, 0x01},
469 {OV5693_8BIT, 0x4806, 0x00},
470 {OV5693_8BIT, 0x4816, 0x52},
471 {OV5693_8BIT, 0x481f, 0x30},
472 {OV5693_8BIT, 0x4826, 0x2c},
473 {OV5693_8BIT, 0x4831, 0x64},
474 {OV5693_8BIT, 0x4d00, 0x04},
475 {OV5693_8BIT, 0x4d01, 0x71},
476 {OV5693_8BIT, 0x4d02, 0xfd},
477 {OV5693_8BIT, 0x4d03, 0xf5},
478 {OV5693_8BIT, 0x4d04, 0x0c},
479 {OV5693_8BIT, 0x4d05, 0xcc},
480 {OV5693_8BIT, 0x4837, 0x0a},
481 {OV5693_8BIT, 0x5000, 0x06},
482 {OV5693_8BIT, 0x5001, 0x01},
483 {OV5693_8BIT, 0x5003, 0x20},
484 {OV5693_8BIT, 0x5046, 0x0a},
485 {OV5693_8BIT, 0x5013, 0x00},
486 {OV5693_8BIT, 0x5046, 0x0a},
487 {OV5693_8BIT, 0x5780, 0x1c},
488 {OV5693_8BIT, 0x5786, 0x20},
489 {OV5693_8BIT, 0x5787, 0x10},
490 {OV5693_8BIT, 0x5788, 0x18},
491 {OV5693_8BIT, 0x578a, 0x04},
492 {OV5693_8BIT, 0x578b, 0x02},
493 {OV5693_8BIT, 0x578c, 0x02},
494 {OV5693_8BIT, 0x578e, 0x06},
495 {OV5693_8BIT, 0x578f, 0x02},
496 {OV5693_8BIT, 0x5790, 0x02},
497 {OV5693_8BIT, 0x5791, 0xff},
498 {OV5693_8BIT, 0x5842, 0x01},
499 {OV5693_8BIT, 0x5843, 0x2b},
500 {OV5693_8BIT, 0x5844, 0x01},
501 {OV5693_8BIT, 0x5845, 0x92},
502 {OV5693_8BIT, 0x5846, 0x01},
503 {OV5693_8BIT, 0x5847, 0x8f},
504 {OV5693_8BIT, 0x5848, 0x01},
505 {OV5693_8BIT, 0x5849, 0x0c},
506 {OV5693_8BIT, 0x5e00, 0x00},
507 {OV5693_8BIT, 0x5e10, 0x0c},
508 {OV5693_8BIT, 0x0100, 0x00},
509 {OV5693_TOK_TERM, 0, 0}
510};
511
512#if ENABLE_NON_PREVIEW
513
514
515
516static struct ov5693_reg const ov5693_654x496[] = {
517 {OV5693_8BIT, 0x3501, 0x3d},
518 {OV5693_8BIT, 0x3502, 0x00},
519 {OV5693_8BIT, 0x3708, 0xe6},
520 {OV5693_8BIT, 0x3709, 0xc7},
521 {OV5693_8BIT, 0x3803, 0x00},
522 {OV5693_8BIT, 0x3806, 0x07},
523 {OV5693_8BIT, 0x3807, 0xa3},
524 {OV5693_8BIT, 0x3808, 0x02},
525 {OV5693_8BIT, 0x3809, 0x90},
526 {OV5693_8BIT, 0x380a, 0x01},
527 {OV5693_8BIT, 0x380b, 0xf0},
528 {OV5693_8BIT, 0x380c, 0x0a},
529 {OV5693_8BIT, 0x380d, 0x80},
530 {OV5693_8BIT, 0x380e, 0x07},
531 {OV5693_8BIT, 0x380f, 0xc0},
532 {OV5693_8BIT, 0x3811, 0x08},
533 {OV5693_8BIT, 0x3813, 0x02},
534 {OV5693_8BIT, 0x3814, 0x31},
535 {OV5693_8BIT, 0x3815, 0x31},
536 {OV5693_8BIT, 0x3820, 0x04},
537 {OV5693_8BIT, 0x3821, 0x1f},
538 {OV5693_8BIT, 0x5002, 0x80},
539 {OV5693_8BIT, 0x0100, 0x01},
540 {OV5693_TOK_TERM, 0, 0}
541};
542
543
544
545
546
547static struct ov5693_reg const ov5693_1296x976[] = {
548 {OV5693_8BIT, 0x3501, 0x7b},
549 {OV5693_8BIT, 0x3502, 0x00},
550 {OV5693_8BIT, 0x3708, 0xe2},
551 {OV5693_8BIT, 0x3709, 0xc3},
552
553 {OV5693_8BIT, 0x3800, 0x00},
554 {OV5693_8BIT, 0x3801, 0x00},
555 {OV5693_8BIT, 0x3802, 0x00},
556 {OV5693_8BIT, 0x3803, 0x00},
557
558 {OV5693_8BIT, 0x3804, 0x0a},
559 {OV5693_8BIT, 0x3805, 0x3f},
560 {OV5693_8BIT, 0x3806, 0x07},
561 {OV5693_8BIT, 0x3807, 0xA3},
562
563 {OV5693_8BIT, 0x3808, 0x05},
564 {OV5693_8BIT, 0x3809, 0x10},
565 {OV5693_8BIT, 0x380a, 0x03},
566 {OV5693_8BIT, 0x380b, 0xD0},
567
568 {OV5693_8BIT, 0x380c, 0x0a},
569 {OV5693_8BIT, 0x380d, 0x80},
570 {OV5693_8BIT, 0x380e, 0x07},
571 {OV5693_8BIT, 0x380f, 0xc0},
572
573 {OV5693_8BIT, 0x3810, 0x00},
574 {OV5693_8BIT, 0x3811, 0x10},
575 {OV5693_8BIT, 0x3812, 0x00},
576 {OV5693_8BIT, 0x3813, 0x02},
577
578 {OV5693_8BIT, 0x3814, 0x11},
579 {OV5693_8BIT, 0x3815, 0x11},
580 {OV5693_8BIT, 0x3820, 0x00},
581 {OV5693_8BIT, 0x3821, 0x1e},
582 {OV5693_8BIT, 0x5002, 0x00},
583 {OV5693_8BIT, 0x5041, 0x84},
584 {OV5693_8BIT, 0x0100, 0x01},
585 {OV5693_TOK_TERM, 0, 0}
586
587};
588
589
590
591
592
593static struct ov5693_reg const ov5693_336x256[] = {
594 {OV5693_8BIT, 0x3501, 0x3d},
595 {OV5693_8BIT, 0x3502, 0x00},
596 {OV5693_8BIT, 0x3708, 0xe6},
597 {OV5693_8BIT, 0x3709, 0xc7},
598 {OV5693_8BIT, 0x3806, 0x07},
599 {OV5693_8BIT, 0x3807, 0xa3},
600 {OV5693_8BIT, 0x3808, 0x01},
601 {OV5693_8BIT, 0x3809, 0x50},
602 {OV5693_8BIT, 0x380a, 0x01},
603 {OV5693_8BIT, 0x380b, 0x00},
604 {OV5693_8BIT, 0x380c, 0x0a},
605 {OV5693_8BIT, 0x380d, 0x80},
606 {OV5693_8BIT, 0x380e, 0x07},
607 {OV5693_8BIT, 0x380f, 0xc0},
608 {OV5693_8BIT, 0x3811, 0x1E},
609 {OV5693_8BIT, 0x3814, 0x31},
610 {OV5693_8BIT, 0x3815, 0x31},
611 {OV5693_8BIT, 0x3820, 0x04},
612 {OV5693_8BIT, 0x3821, 0x1f},
613 {OV5693_8BIT, 0x5002, 0x80},
614 {OV5693_8BIT, 0x0100, 0x01},
615 {OV5693_TOK_TERM, 0, 0}
616};
617
618
619
620
621
622static struct ov5693_reg const ov5693_368x304[] = {
623 {OV5693_8BIT, 0x3501, 0x3d},
624 {OV5693_8BIT, 0x3502, 0x00},
625 {OV5693_8BIT, 0x3708, 0xe6},
626 {OV5693_8BIT, 0x3709, 0xc7},
627 {OV5693_8BIT, 0x3808, 0x01},
628 {OV5693_8BIT, 0x3809, 0x70},
629 {OV5693_8BIT, 0x380a, 0x01},
630 {OV5693_8BIT, 0x380b, 0x30},
631 {OV5693_8BIT, 0x380c, 0x0a},
632 {OV5693_8BIT, 0x380d, 0x80},
633 {OV5693_8BIT, 0x380e, 0x07},
634 {OV5693_8BIT, 0x380f, 0xc0},
635 {OV5693_8BIT, 0x3811, 0x80},
636 {OV5693_8BIT, 0x3814, 0x31},
637 {OV5693_8BIT, 0x3815, 0x31},
638 {OV5693_8BIT, 0x3820, 0x04},
639 {OV5693_8BIT, 0x3821, 0x1f},
640 {OV5693_8BIT, 0x5002, 0x80},
641 {OV5693_8BIT, 0x0100, 0x01},
642 {OV5693_TOK_TERM, 0, 0}
643};
644
645
646
647
648
649static struct ov5693_reg const ov5693_192x160[] = {
650 {OV5693_8BIT, 0x3501, 0x7b},
651 {OV5693_8BIT, 0x3502, 0x80},
652 {OV5693_8BIT, 0x3708, 0xe2},
653 {OV5693_8BIT, 0x3709, 0xc3},
654 {OV5693_8BIT, 0x3804, 0x0a},
655 {OV5693_8BIT, 0x3805, 0x3f},
656 {OV5693_8BIT, 0x3806, 0x07},
657 {OV5693_8BIT, 0x3807, 0xA3},
658 {OV5693_8BIT, 0x3808, 0x00},
659 {OV5693_8BIT, 0x3809, 0xC0},
660 {OV5693_8BIT, 0x380a, 0x00},
661 {OV5693_8BIT, 0x380b, 0xA0},
662 {OV5693_8BIT, 0x380c, 0x0a},
663 {OV5693_8BIT, 0x380d, 0x80},
664 {OV5693_8BIT, 0x380e, 0x07},
665 {OV5693_8BIT, 0x380f, 0xc0},
666 {OV5693_8BIT, 0x3811, 0x40},
667 {OV5693_8BIT, 0x3813, 0x00},
668 {OV5693_8BIT, 0x3814, 0x31},
669 {OV5693_8BIT, 0x3815, 0x31},
670 {OV5693_8BIT, 0x3820, 0x04},
671 {OV5693_8BIT, 0x3821, 0x1f},
672 {OV5693_8BIT, 0x5002, 0x80},
673 {OV5693_8BIT, 0x0100, 0x01},
674 {OV5693_TOK_TERM, 0, 0}
675};
676
677static struct ov5693_reg const ov5693_736x496[] = {
678 {OV5693_8BIT, 0x3501, 0x3d},
679 {OV5693_8BIT, 0x3502, 0x00},
680 {OV5693_8BIT, 0x3708, 0xe6},
681 {OV5693_8BIT, 0x3709, 0xc7},
682 {OV5693_8BIT, 0x3803, 0x68},
683 {OV5693_8BIT, 0x3806, 0x07},
684 {OV5693_8BIT, 0x3807, 0x3b},
685 {OV5693_8BIT, 0x3808, 0x02},
686 {OV5693_8BIT, 0x3809, 0xe0},
687 {OV5693_8BIT, 0x380a, 0x01},
688 {OV5693_8BIT, 0x380b, 0xf0},
689 {OV5693_8BIT, 0x380c, 0x0a},
690 {OV5693_8BIT, 0x380d, 0x80},
691 {OV5693_8BIT, 0x380e, 0x07},
692 {OV5693_8BIT, 0x380f, 0xc0},
693 {OV5693_8BIT, 0x3811, 0x08},
694 {OV5693_8BIT, 0x3813, 0x02},
695 {OV5693_8BIT, 0x3814, 0x31},
696 {OV5693_8BIT, 0x3815, 0x31},
697 {OV5693_8BIT, 0x3820, 0x04},
698 {OV5693_8BIT, 0x3821, 0x1f},
699 {OV5693_8BIT, 0x5002, 0x80},
700 {OV5693_8BIT, 0x0100, 0x01},
701 {OV5693_TOK_TERM, 0, 0}
702};
703#endif
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736#if ENABLE_NON_PREVIEW
737static struct ov5693_reg const ov5693_976x556[] = {
738 {OV5693_8BIT, 0x3501, 0x7b},
739 {OV5693_8BIT, 0x3502, 0x00},
740 {OV5693_8BIT, 0x3708, 0xe2},
741 {OV5693_8BIT, 0x3709, 0xc3},
742 {OV5693_8BIT, 0x3803, 0xf0},
743 {OV5693_8BIT, 0x3806, 0x06},
744 {OV5693_8BIT, 0x3807, 0xa7},
745 {OV5693_8BIT, 0x3808, 0x03},
746 {OV5693_8BIT, 0x3809, 0xd0},
747 {OV5693_8BIT, 0x380a, 0x02},
748 {OV5693_8BIT, 0x380b, 0x2C},
749 {OV5693_8BIT, 0x380c, 0x0a},
750 {OV5693_8BIT, 0x380d, 0x80},
751 {OV5693_8BIT, 0x380e, 0x07},
752 {OV5693_8BIT, 0x380f, 0xc0},
753 {OV5693_8BIT, 0x3811, 0x10},
754 {OV5693_8BIT, 0x3813, 0x02},
755 {OV5693_8BIT, 0x3814, 0x11},
756 {OV5693_8BIT, 0x3815, 0x11},
757 {OV5693_8BIT, 0x3820, 0x00},
758 {OV5693_8BIT, 0x3821, 0x1e},
759 {OV5693_8BIT, 0x5002, 0x80},
760 {OV5693_8BIT, 0x0100, 0x01},
761 {OV5693_TOK_TERM, 0, 0}
762};
763
764
765static struct ov5693_reg const ov5693_1296x736[] = {
766 {OV5693_8BIT, 0x3501, 0x7b},
767 {OV5693_8BIT, 0x3502, 0x00},
768 {OV5693_8BIT, 0x3708, 0xe2},
769 {OV5693_8BIT, 0x3709, 0xc3},
770
771 {OV5693_8BIT, 0x3800, 0x00},
772 {OV5693_8BIT, 0x3801, 0x00},
773 {OV5693_8BIT, 0x3802, 0x00},
774 {OV5693_8BIT, 0x3803, 0x00},
775
776 {OV5693_8BIT, 0x3804, 0x0a},
777 {OV5693_8BIT, 0x3805, 0x3f},
778 {OV5693_8BIT, 0x3806, 0x07},
779 {OV5693_8BIT, 0x3807, 0xA3},
780
781 {OV5693_8BIT, 0x3808, 0x05},
782 {OV5693_8BIT, 0x3809, 0x10},
783 {OV5693_8BIT, 0x380a, 0x02},
784 {OV5693_8BIT, 0x380b, 0xe0},
785
786 {OV5693_8BIT, 0x380c, 0x0a},
787 {OV5693_8BIT, 0x380d, 0x80},
788 {OV5693_8BIT, 0x380e, 0x07},
789 {OV5693_8BIT, 0x380f, 0xc0},
790
791 {OV5693_8BIT, 0x3813, 0xE8},
792
793 {OV5693_8BIT, 0x3814, 0x11},
794 {OV5693_8BIT, 0x3815, 0x11},
795 {OV5693_8BIT, 0x3820, 0x00},
796 {OV5693_8BIT, 0x3821, 0x1e},
797 {OV5693_8BIT, 0x5002, 0x00},
798 {OV5693_8BIT, 0x5041, 0x84},
799 {OV5693_8BIT, 0x0100, 0x01},
800 {OV5693_TOK_TERM, 0, 0}
801};
802
803static struct ov5693_reg const ov5693_1636p_30fps[] = {
804 {OV5693_8BIT, 0x3501, 0x7b},
805 {OV5693_8BIT, 0x3502, 0x00},
806 {OV5693_8BIT, 0x3708, 0xe2},
807 {OV5693_8BIT, 0x3709, 0xc3},
808 {OV5693_8BIT, 0x3803, 0xf0},
809 {OV5693_8BIT, 0x3806, 0x06},
810 {OV5693_8BIT, 0x3807, 0xa7},
811 {OV5693_8BIT, 0x3808, 0x06},
812 {OV5693_8BIT, 0x3809, 0x64},
813 {OV5693_8BIT, 0x380a, 0x04},
814 {OV5693_8BIT, 0x380b, 0x48},
815 {OV5693_8BIT, 0x380c, 0x0a},
816 {OV5693_8BIT, 0x380d, 0x80},
817 {OV5693_8BIT, 0x380e, 0x07},
818 {OV5693_8BIT, 0x380f, 0xc0},
819 {OV5693_8BIT, 0x3811, 0x02},
820 {OV5693_8BIT, 0x3813, 0x02},
821 {OV5693_8BIT, 0x3814, 0x11},
822 {OV5693_8BIT, 0x3815, 0x11},
823 {OV5693_8BIT, 0x3820, 0x00},
824 {OV5693_8BIT, 0x3821, 0x1e},
825 {OV5693_8BIT, 0x5002, 0x80},
826 {OV5693_8BIT, 0x0100, 0x01},
827 {OV5693_TOK_TERM, 0, 0}
828};
829#endif
830
831static struct ov5693_reg const ov5693_1616x1216_30fps[] = {
832 {OV5693_8BIT, 0x3501, 0x7b},
833 {OV5693_8BIT, 0x3502, 0x80},
834 {OV5693_8BIT, 0x3708, 0xe2},
835 {OV5693_8BIT, 0x3709, 0xc3},
836 {OV5693_8BIT, 0x3800, 0x00},
837 {OV5693_8BIT, 0x3801, 0x08},
838 {OV5693_8BIT, 0x3802, 0x00},
839 {OV5693_8BIT, 0x3803, 0x04},
840 {OV5693_8BIT, 0x3804, 0x0a},
841 {OV5693_8BIT, 0x3805, 0x37},
842 {OV5693_8BIT, 0x3806, 0x07},
843 {OV5693_8BIT, 0x3807, 0x9f},
844 {OV5693_8BIT, 0x3808, 0x06},
845 {OV5693_8BIT, 0x3809, 0x50},
846 {OV5693_8BIT, 0x380a, 0x04},
847 {OV5693_8BIT, 0x380b, 0xc0},
848 {OV5693_8BIT, 0x380c, 0x0a},
849 {OV5693_8BIT, 0x380d, 0x80},
850 {OV5693_8BIT, 0x380e, 0x07},
851 {OV5693_8BIT, 0x380f, 0xc0},
852 {OV5693_8BIT, 0x3810, 0x00},
853 {OV5693_8BIT, 0x3811, 0x10},
854 {OV5693_8BIT, 0x3812, 0x00},
855 {OV5693_8BIT, 0x3813, 0x06},
856 {OV5693_8BIT, 0x3814, 0x11},
857 {OV5693_8BIT, 0x3815, 0x11},
858 {OV5693_8BIT, 0x3820, 0x00},
859 {OV5693_8BIT, 0x3821, 0x1e},
860 {OV5693_8BIT, 0x5002, 0x00},
861 {OV5693_8BIT, 0x5041, 0x84},
862 {OV5693_8BIT, 0x0100, 0x01},
863 {OV5693_TOK_TERM, 0, 0}
864};
865
866
867
868
869#if ENABLE_NON_PREVIEW
870static struct ov5693_reg const ov5693_1940x1096[] = {
871 {OV5693_8BIT, 0x3501, 0x7b},
872 {OV5693_8BIT, 0x3502, 0x00},
873 {OV5693_8BIT, 0x3708, 0xe2},
874 {OV5693_8BIT, 0x3709, 0xc3},
875 {OV5693_8BIT, 0x3803, 0xf0},
876 {OV5693_8BIT, 0x3806, 0x06},
877 {OV5693_8BIT, 0x3807, 0xa7},
878 {OV5693_8BIT, 0x3808, 0x07},
879 {OV5693_8BIT, 0x3809, 0x94},
880 {OV5693_8BIT, 0x380a, 0x04},
881 {OV5693_8BIT, 0x380b, 0x48},
882 {OV5693_8BIT, 0x380c, 0x0a},
883 {OV5693_8BIT, 0x380d, 0x80},
884 {OV5693_8BIT, 0x380e, 0x07},
885 {OV5693_8BIT, 0x380f, 0xc0},
886 {OV5693_8BIT, 0x3811, 0x02},
887 {OV5693_8BIT, 0x3813, 0x02},
888 {OV5693_8BIT, 0x3814, 0x11},
889 {OV5693_8BIT, 0x3815, 0x11},
890 {OV5693_8BIT, 0x3820, 0x00},
891 {OV5693_8BIT, 0x3821, 0x1e},
892 {OV5693_8BIT, 0x5002, 0x80},
893 {OV5693_8BIT, 0x0100, 0x01},
894 {OV5693_TOK_TERM, 0, 0}
895};
896
897static struct ov5693_reg const ov5693_2592x1456_30fps[] = {
898 {OV5693_8BIT, 0x3501, 0x7b},
899 {OV5693_8BIT, 0x3502, 0x00},
900 {OV5693_8BIT, 0x3708, 0xe2},
901 {OV5693_8BIT, 0x3709, 0xc3},
902 {OV5693_8BIT, 0x3800, 0x00},
903 {OV5693_8BIT, 0x3801, 0x00},
904 {OV5693_8BIT, 0x3802, 0x00},
905 {OV5693_8BIT, 0x3803, 0xf0},
906 {OV5693_8BIT, 0x3804, 0x0a},
907 {OV5693_8BIT, 0x3805, 0x3f},
908 {OV5693_8BIT, 0x3806, 0x06},
909 {OV5693_8BIT, 0x3807, 0xa4},
910 {OV5693_8BIT, 0x3808, 0x0a},
911 {OV5693_8BIT, 0x3809, 0x20},
912 {OV5693_8BIT, 0x380a, 0x05},
913 {OV5693_8BIT, 0x380b, 0xb0},
914 {OV5693_8BIT, 0x380c, 0x0a},
915 {OV5693_8BIT, 0x380d, 0x80},
916 {OV5693_8BIT, 0x380e, 0x07},
917 {OV5693_8BIT, 0x380f, 0xc0},
918 {OV5693_8BIT, 0x3811, 0x10},
919 {OV5693_8BIT, 0x3813, 0x00},
920 {OV5693_8BIT, 0x3814, 0x11},
921 {OV5693_8BIT, 0x3815, 0x11},
922 {OV5693_8BIT, 0x3820, 0x00},
923 {OV5693_8BIT, 0x3821, 0x1e},
924 {OV5693_8BIT, 0x5002, 0x00},
925 {OV5693_TOK_TERM, 0, 0}
926};
927#endif
928
929static struct ov5693_reg const ov5693_2576x1456_30fps[] = {
930 {OV5693_8BIT, 0x3501, 0x7b},
931 {OV5693_8BIT, 0x3502, 0x00},
932 {OV5693_8BIT, 0x3708, 0xe2},
933 {OV5693_8BIT, 0x3709, 0xc3},
934 {OV5693_8BIT, 0x3800, 0x00},
935 {OV5693_8BIT, 0x3801, 0x00},
936 {OV5693_8BIT, 0x3802, 0x00},
937 {OV5693_8BIT, 0x3803, 0xf0},
938 {OV5693_8BIT, 0x3804, 0x0a},
939 {OV5693_8BIT, 0x3805, 0x3f},
940 {OV5693_8BIT, 0x3806, 0x06},
941 {OV5693_8BIT, 0x3807, 0xa4},
942 {OV5693_8BIT, 0x3808, 0x0a},
943 {OV5693_8BIT, 0x3809, 0x10},
944 {OV5693_8BIT, 0x380a, 0x05},
945 {OV5693_8BIT, 0x380b, 0xb0},
946 {OV5693_8BIT, 0x380c, 0x0a},
947 {OV5693_8BIT, 0x380d, 0x80},
948 {OV5693_8BIT, 0x380e, 0x07},
949 {OV5693_8BIT, 0x380f, 0xc0},
950 {OV5693_8BIT, 0x3811, 0x18},
951 {OV5693_8BIT, 0x3813, 0x00},
952 {OV5693_8BIT, 0x3814, 0x11},
953 {OV5693_8BIT, 0x3815, 0x11},
954 {OV5693_8BIT, 0x3820, 0x00},
955 {OV5693_8BIT, 0x3821, 0x1e},
956 {OV5693_8BIT, 0x5002, 0x00},
957 {OV5693_TOK_TERM, 0, 0}
958};
959
960
961
962
963#if ENABLE_NON_PREVIEW
964static struct ov5693_reg const ov5693_2592x1944_30fps[] = {
965 {OV5693_8BIT, 0x3501, 0x7b},
966 {OV5693_8BIT, 0x3502, 0x00},
967 {OV5693_8BIT, 0x3708, 0xe2},
968 {OV5693_8BIT, 0x3709, 0xc3},
969 {OV5693_8BIT, 0x3803, 0x00},
970 {OV5693_8BIT, 0x3806, 0x07},
971 {OV5693_8BIT, 0x3807, 0xa3},
972 {OV5693_8BIT, 0x3808, 0x0a},
973 {OV5693_8BIT, 0x3809, 0x20},
974 {OV5693_8BIT, 0x380a, 0x07},
975 {OV5693_8BIT, 0x380b, 0x98},
976 {OV5693_8BIT, 0x380c, 0x0a},
977 {OV5693_8BIT, 0x380d, 0x80},
978 {OV5693_8BIT, 0x380e, 0x07},
979 {OV5693_8BIT, 0x380f, 0xc0},
980 {OV5693_8BIT, 0x3811, 0x10},
981 {OV5693_8BIT, 0x3813, 0x00},
982 {OV5693_8BIT, 0x3814, 0x11},
983 {OV5693_8BIT, 0x3815, 0x11},
984 {OV5693_8BIT, 0x3820, 0x00},
985 {OV5693_8BIT, 0x3821, 0x1e},
986 {OV5693_8BIT, 0x5002, 0x00},
987 {OV5693_8BIT, 0x0100, 0x01},
988 {OV5693_TOK_TERM, 0, 0}
989};
990#endif
991
992
993
994
995
996
997
998
999#if ENABLE_NON_PREVIEW
1000static struct ov5693_reg const ov5693_1424x1168_30fps[] = {
1001 {OV5693_8BIT, 0x3501, 0x3b},
1002 {OV5693_8BIT, 0x3502, 0x80},
1003 {OV5693_8BIT, 0x3708, 0xe2},
1004 {OV5693_8BIT, 0x3709, 0xc3},
1005 {OV5693_8BIT, 0x3800, 0x00},
1006 {OV5693_8BIT, 0x3801, 0x50},
1007 {OV5693_8BIT, 0x3802, 0x00},
1008 {OV5693_8BIT, 0x3803, 0x02},
1009 {OV5693_8BIT, 0x3804, 0x09},
1010 {OV5693_8BIT, 0x3805, 0xdd},
1011 {OV5693_8BIT, 0x3806, 0x07},
1012 {OV5693_8BIT, 0x3807, 0xa1},
1013 {OV5693_8BIT, 0x3808, 0x05},
1014 {OV5693_8BIT, 0x3809, 0x90},
1015 {OV5693_8BIT, 0x380a, 0x04},
1016 {OV5693_8BIT, 0x380b, 0x90},
1017 {OV5693_8BIT, 0x380c, 0x0a},
1018 {OV5693_8BIT, 0x380d, 0x80},
1019 {OV5693_8BIT, 0x380e, 0x07},
1020 {OV5693_8BIT, 0x380f, 0xc0},
1021 {OV5693_8BIT, 0x3810, 0x00},
1022 {OV5693_8BIT, 0x3811, 0x02},
1023 {OV5693_8BIT, 0x3812, 0x00},
1024 {OV5693_8BIT, 0x3813, 0x00},
1025 {OV5693_8BIT, 0x3814, 0x11},
1026 {OV5693_8BIT, 0x3815, 0x11},
1027 {OV5693_8BIT, 0x3820, 0x00},
1028 {OV5693_8BIT, 0x3821, 0x1e},
1029 {OV5693_8BIT, 0x5002, 0x00},
1030 {OV5693_8BIT, 0x5041, 0x84},
1031 {OV5693_8BIT, 0x0100, 0x01},
1032 {OV5693_TOK_TERM, 0, 0}
1033};
1034#endif
1035
1036
1037
1038
1039
1040
1041static struct ov5693_reg const ov5693_736x496_30fps[] = {
1042 {OV5693_8BIT, 0x3501, 0x3b},
1043 {OV5693_8BIT, 0x3502, 0x80},
1044 {OV5693_8BIT, 0x3708, 0xe2},
1045 {OV5693_8BIT, 0x3709, 0xc3},
1046 {OV5693_8BIT, 0x3800, 0x00},
1047 {OV5693_8BIT, 0x3801, 0x02},
1048 {OV5693_8BIT, 0x3802, 0x00},
1049 {OV5693_8BIT, 0x3803, 0x62},
1050 {OV5693_8BIT, 0x3804, 0x0a},
1051 {OV5693_8BIT, 0x3805, 0x3b},
1052 {OV5693_8BIT, 0x3806, 0x07},
1053 {OV5693_8BIT, 0x3807, 0x43},
1054 {OV5693_8BIT, 0x3808, 0x02},
1055 {OV5693_8BIT, 0x3809, 0xe0},
1056 {OV5693_8BIT, 0x380a, 0x01},
1057 {OV5693_8BIT, 0x380b, 0xf0},
1058 {OV5693_8BIT, 0x380c, 0x0a},
1059 {OV5693_8BIT, 0x380d, 0x80},
1060 {OV5693_8BIT, 0x380e, 0x07},
1061 {OV5693_8BIT, 0x380f, 0xc0},
1062 {OV5693_8BIT, 0x3810, 0x00},
1063 {OV5693_8BIT, 0x3811, 0x02},
1064 {OV5693_8BIT, 0x3812, 0x00},
1065 {OV5693_8BIT, 0x3813, 0x00},
1066 {OV5693_8BIT, 0x3814, 0x11},
1067 {OV5693_8BIT, 0x3815, 0x11},
1068 {OV5693_8BIT, 0x3820, 0x00},
1069 {OV5693_8BIT, 0x3821, 0x1e},
1070 {OV5693_8BIT, 0x5002, 0x00},
1071 {OV5693_8BIT, 0x5041, 0x84},
1072 {OV5693_8BIT, 0x0100, 0x01},
1073 {OV5693_TOK_TERM, 0, 0}
1074};
1075
1076static struct ov5693_reg const ov5693_2576x1936_30fps[] = {
1077 {OV5693_8BIT, 0x3501, 0x7b},
1078 {OV5693_8BIT, 0x3502, 0x00},
1079 {OV5693_8BIT, 0x3708, 0xe2},
1080 {OV5693_8BIT, 0x3709, 0xc3},
1081 {OV5693_8BIT, 0x3803, 0x00},
1082 {OV5693_8BIT, 0x3806, 0x07},
1083 {OV5693_8BIT, 0x3807, 0xa3},
1084 {OV5693_8BIT, 0x3808, 0x0a},
1085 {OV5693_8BIT, 0x3809, 0x10},
1086 {OV5693_8BIT, 0x380a, 0x07},
1087 {OV5693_8BIT, 0x380b, 0x90},
1088 {OV5693_8BIT, 0x380c, 0x0a},
1089 {OV5693_8BIT, 0x380d, 0x80},
1090 {OV5693_8BIT, 0x380e, 0x07},
1091 {OV5693_8BIT, 0x380f, 0xc0},
1092 {OV5693_8BIT, 0x3811, 0x18},
1093 {OV5693_8BIT, 0x3813, 0x00},
1094 {OV5693_8BIT, 0x3814, 0x11},
1095 {OV5693_8BIT, 0x3815, 0x11},
1096 {OV5693_8BIT, 0x3820, 0x00},
1097 {OV5693_8BIT, 0x3821, 0x1e},
1098 {OV5693_8BIT, 0x5002, 0x00},
1099 {OV5693_8BIT, 0x0100, 0x01},
1100 {OV5693_TOK_TERM, 0, 0}
1101};
1102
1103static struct ov5693_resolution ov5693_res_preview[] = {
1104 {
1105 .desc = "ov5693_736x496_30fps",
1106 .width = 736,
1107 .height = 496,
1108 .pix_clk_freq = 160,
1109 .fps = 30,
1110 .used = 0,
1111 .pixels_per_line = 2688,
1112 .lines_per_frame = 1984,
1113 .bin_factor_x = 1,
1114 .bin_factor_y = 1,
1115 .bin_mode = 0,
1116 .regs = ov5693_736x496_30fps,
1117 },
1118 {
1119 .desc = "ov5693_1616x1216_30fps",
1120 .width = 1616,
1121 .height = 1216,
1122 .pix_clk_freq = 160,
1123 .fps = 30,
1124 .used = 0,
1125 .pixels_per_line = 2688,
1126 .lines_per_frame = 1984,
1127 .bin_factor_x = 1,
1128 .bin_factor_y = 1,
1129 .bin_mode = 0,
1130 .regs = ov5693_1616x1216_30fps,
1131 },
1132 {
1133 .desc = "ov5693_5M_30fps",
1134 .width = 2576,
1135 .height = 1456,
1136 .pix_clk_freq = 160,
1137 .fps = 30,
1138 .used = 0,
1139 .pixels_per_line = 2688,
1140 .lines_per_frame = 1984,
1141 .bin_factor_x = 1,
1142 .bin_factor_y = 1,
1143 .bin_mode = 0,
1144 .regs = ov5693_2576x1456_30fps,
1145 },
1146 {
1147 .desc = "ov5693_5M_30fps",
1148 .width = 2576,
1149 .height = 1936,
1150 .pix_clk_freq = 160,
1151 .fps = 30,
1152 .used = 0,
1153 .pixels_per_line = 2688,
1154 .lines_per_frame = 1984,
1155 .bin_factor_x = 1,
1156 .bin_factor_y = 1,
1157 .bin_mode = 0,
1158 .regs = ov5693_2576x1936_30fps,
1159 },
1160};
1161
1162#define N_RES_PREVIEW (ARRAY_SIZE(ov5693_res_preview))
1163
1164
1165
1166
1167
1168#if ENABLE_NON_PREVIEW
1169struct ov5693_resolution ov5693_res_still[] = {
1170 {
1171 .desc = "ov5693_736x496_30fps",
1172 .width = 736,
1173 .height = 496,
1174 .pix_clk_freq = 160,
1175 .fps = 30,
1176 .used = 0,
1177 .pixels_per_line = 2688,
1178 .lines_per_frame = 1984,
1179 .bin_factor_x = 1,
1180 .bin_factor_y = 1,
1181 .bin_mode = 0,
1182 .regs = ov5693_736x496_30fps,
1183 },
1184 {
1185 .desc = "ov5693_1424x1168_30fps",
1186 .width = 1424,
1187 .height = 1168,
1188 .pix_clk_freq = 160,
1189 .fps = 30,
1190 .used = 0,
1191 .pixels_per_line = 2688,
1192 .lines_per_frame = 1984,
1193 .bin_factor_x = 1,
1194 .bin_factor_y = 1,
1195 .bin_mode = 0,
1196 .regs = ov5693_1424x1168_30fps,
1197 },
1198 {
1199 .desc = "ov5693_1616x1216_30fps",
1200 .width = 1616,
1201 .height = 1216,
1202 .pix_clk_freq = 160,
1203 .fps = 30,
1204 .used = 0,
1205 .pixels_per_line = 2688,
1206 .lines_per_frame = 1984,
1207 .bin_factor_x = 1,
1208 .bin_factor_y = 1,
1209 .bin_mode = 0,
1210 .regs = ov5693_1616x1216_30fps,
1211 },
1212 {
1213 .desc = "ov5693_5M_30fps",
1214 .width = 2592,
1215 .height = 1456,
1216 .pix_clk_freq = 160,
1217 .fps = 30,
1218 .used = 0,
1219 .pixels_per_line = 2688,
1220 .lines_per_frame = 1984,
1221 .bin_factor_x = 1,
1222 .bin_factor_y = 1,
1223 .bin_mode = 0,
1224 .regs = ov5693_2592x1456_30fps,
1225 },
1226 {
1227 .desc = "ov5693_5M_30fps",
1228 .width = 2592,
1229 .height = 1944,
1230 .pix_clk_freq = 160,
1231 .fps = 30,
1232 .used = 0,
1233 .pixels_per_line = 2688,
1234 .lines_per_frame = 1984,
1235 .bin_factor_x = 1,
1236 .bin_factor_y = 1,
1237 .bin_mode = 0,
1238 .regs = ov5693_2592x1944_30fps,
1239 },
1240};
1241
1242#define N_RES_STILL (ARRAY_SIZE(ov5693_res_still))
1243
1244struct ov5693_resolution ov5693_res_video[] = {
1245 {
1246 .desc = "ov5693_736x496_30fps",
1247 .width = 736,
1248 .height = 496,
1249 .fps = 30,
1250 .pix_clk_freq = 160,
1251 .used = 0,
1252 .pixels_per_line = 2688,
1253 .lines_per_frame = 1984,
1254 .bin_factor_x = 2,
1255 .bin_factor_y = 2,
1256 .bin_mode = 1,
1257 .regs = ov5693_736x496,
1258 },
1259 {
1260 .desc = "ov5693_336x256_30fps",
1261 .width = 336,
1262 .height = 256,
1263 .fps = 30,
1264 .pix_clk_freq = 160,
1265 .used = 0,
1266 .pixels_per_line = 2688,
1267 .lines_per_frame = 1984,
1268 .bin_factor_x = 2,
1269 .bin_factor_y = 2,
1270 .bin_mode = 1,
1271 .regs = ov5693_336x256,
1272 },
1273 {
1274 .desc = "ov5693_368x304_30fps",
1275 .width = 368,
1276 .height = 304,
1277 .fps = 30,
1278 .pix_clk_freq = 160,
1279 .used = 0,
1280 .pixels_per_line = 2688,
1281 .lines_per_frame = 1984,
1282 .bin_factor_x = 2,
1283 .bin_factor_y = 2,
1284 .bin_mode = 1,
1285 .regs = ov5693_368x304,
1286 },
1287 {
1288 .desc = "ov5693_192x160_30fps",
1289 .width = 192,
1290 .height = 160,
1291 .fps = 30,
1292 .pix_clk_freq = 160,
1293 .used = 0,
1294 .pixels_per_line = 2688,
1295 .lines_per_frame = 1984,
1296 .bin_factor_x = 2,
1297 .bin_factor_y = 2,
1298 .bin_mode = 1,
1299 .regs = ov5693_192x160,
1300 },
1301 {
1302 .desc = "ov5693_1296x736_30fps",
1303 .width = 1296,
1304 .height = 736,
1305 .fps = 30,
1306 .pix_clk_freq = 160,
1307 .used = 0,
1308 .pixels_per_line = 2688,
1309 .lines_per_frame = 1984,
1310 .bin_factor_x = 2,
1311 .bin_factor_y = 2,
1312 .bin_mode = 0,
1313 .regs = ov5693_1296x736,
1314 },
1315 {
1316 .desc = "ov5693_1296x976_30fps",
1317 .width = 1296,
1318 .height = 976,
1319 .fps = 30,
1320 .pix_clk_freq = 160,
1321 .used = 0,
1322 .pixels_per_line = 2688,
1323 .lines_per_frame = 1984,
1324 .bin_factor_x = 2,
1325 .bin_factor_y = 2,
1326 .bin_mode = 0,
1327 .regs = ov5693_1296x976,
1328 },
1329 {
1330 .desc = "ov5693_1636P_30fps",
1331 .width = 1636,
1332 .height = 1096,
1333 .fps = 30,
1334 .pix_clk_freq = 160,
1335 .used = 0,
1336 .pixels_per_line = 2688,
1337 .lines_per_frame = 1984,
1338 .bin_factor_x = 1,
1339 .bin_factor_y = 1,
1340 .bin_mode = 0,
1341 .regs = ov5693_1636p_30fps,
1342 },
1343 {
1344 .desc = "ov5693_1080P_30fps",
1345 .width = 1940,
1346 .height = 1096,
1347 .fps = 30,
1348 .pix_clk_freq = 160,
1349 .used = 0,
1350 .pixels_per_line = 2688,
1351 .lines_per_frame = 1984,
1352 .bin_factor_x = 1,
1353 .bin_factor_y = 1,
1354 .bin_mode = 0,
1355 .regs = ov5693_1940x1096,
1356 },
1357 {
1358 .desc = "ov5693_5M_30fps",
1359 .width = 2592,
1360 .height = 1456,
1361 .pix_clk_freq = 160,
1362 .fps = 30,
1363 .used = 0,
1364 .pixels_per_line = 2688,
1365 .lines_per_frame = 1984,
1366 .bin_factor_x = 1,
1367 .bin_factor_y = 1,
1368 .bin_mode = 0,
1369 .regs = ov5693_2592x1456_30fps,
1370 },
1371 {
1372 .desc = "ov5693_5M_30fps",
1373 .width = 2592,
1374 .height = 1944,
1375 .pix_clk_freq = 160,
1376 .fps = 30,
1377 .used = 0,
1378 .pixels_per_line = 2688,
1379 .lines_per_frame = 1984,
1380 .bin_factor_x = 1,
1381 .bin_factor_y = 1,
1382 .bin_mode = 0,
1383 .regs = ov5693_2592x1944_30fps,
1384 },
1385};
1386
1387#define N_RES_VIDEO (ARRAY_SIZE(ov5693_res_video))
1388#endif
1389
1390static struct ov5693_resolution *ov5693_res = ov5693_res_preview;
1391static unsigned long N_RES = N_RES_PREVIEW;
1392#endif
1393