1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for OmniVision OV5693 5M camera sensor. 4 * 5 * Copyright (c) 2013 Intel Corporation. All Rights Reserved. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License version 9 * 2 as published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 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 * FIXME: non-preview resolutions are currently broken 37 */ 38 #define ENABLE_NON_PREVIEW 0 39 40 #define OV5693_POWER_UP_RETRY_NUM 5 41 42 /* Defines for register writes and register array processing */ 43 #define I2C_MSG_LENGTH 0x2 44 #define I2C_RETRY_COUNT 5 45 46 #define OV5693_FOCAL_LENGTH_NUM 334 /*3.34mm*/ 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 /* sensor_mode_data read_mode adaptation */ 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 * focal length bits definition: 63 * bits 31-16: numerator, bits 15-0: denominator 64 */ 65 #define OV5693_FOCAL_LENGTH_DEFAULT 0x1B70064 66 67 /* 68 * current f-number bits definition: 69 * bits 31-16: numerator, bits 15-0: denominator 70 */ 71 #define OV5693_F_NUMBER_DEFAULT 0x18000a 72 73 /* 74 * f-number range bits definition: 75 * bits 31-24: max f-number numerator 76 * bits 23-16: max f-number denominator 77 * bits 15-8: min f-number numerator 78 * bits 7-0: min f-number denominator 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 * OV5693 System control registers 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 /* process, version*/ 100 /*Bit[7:4] Group control, Bit[3:0] Group ID*/ 101 #define OV5693_GROUP_ACCESS 0x3208 102 /* 103 *Bit[3:0] Bit[19:16] of exposure, 104 *remaining 16 bits lies in Reg0x3501&Reg0x3502 105 */ 106 #define OV5693_EXPOSURE_H 0x3500 107 #define OV5693_EXPOSURE_M 0x3501 108 #define OV5693_EXPOSURE_L 0x3502 109 /*Bit[1:0] means Bit[9:8] of gain*/ 110 #define OV5693_AGC_H 0x350A 111 #define OV5693_AGC_L 0x350B /*Bit[7:0] of gain*/ 112 113 #define OV5693_HORIZONTAL_START_H 0x3800 /*Bit[11:8]*/ 114 #define OV5693_HORIZONTAL_START_L 0x3801 /*Bit[7:0]*/ 115 #define OV5693_VERTICAL_START_H 0x3802 /*Bit[11:8]*/ 116 #define OV5693_VERTICAL_START_L 0x3803 /*Bit[7:0]*/ 117 #define OV5693_HORIZONTAL_END_H 0x3804 /*Bit[11:8]*/ 118 #define OV5693_HORIZONTAL_END_L 0x3805 /*Bit[7:0]*/ 119 #define OV5693_VERTICAL_END_H 0x3806 /*Bit[11:8]*/ 120 #define OV5693_VERTICAL_END_L 0x3807 /*Bit[7:0]*/ 121 #define OV5693_HORIZONTAL_OUTPUT_SIZE_H 0x3808 /*Bit[3:0]*/ 122 #define OV5693_HORIZONTAL_OUTPUT_SIZE_L 0x3809 /*Bit[7:0]*/ 123 #define OV5693_VERTICAL_OUTPUT_SIZE_H 0x380a /*Bit[3:0]*/ 124 #define OV5693_VERTICAL_OUTPUT_SIZE_L 0x380b /*Bit[7:0]*/ 125 /*High 8-bit, and low 8-bit HTS address is 0x380d*/ 126 #define OV5693_TIMING_HTS_H 0x380C 127 /*High 8-bit, and low 8-bit HTS address is 0x380d*/ 128 #define OV5693_TIMING_HTS_L 0x380D 129 /*High 8-bit, and low 8-bit HTS address is 0x380f*/ 130 #define OV5693_TIMING_VTS_H 0x380e 131 /*High 8-bit, and low 8-bit HTS address is 0x380f*/ 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 /* Defines for OTP Data Registers */ 171 #define OV5693_FRAME_OFF_NUM 0x4202 172 #define OV5693_OTP_BYTE_MAX 32 //change to 32 as needed by otpdata 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 // 1:Enable 0:disable 179 #define OV5693_OTP_BANK_REG 0x3D84 //otp bank and mode 180 #define OV5693_OTP_READY_REG_DONE 1 181 #define OV5693_OTP_BANK_MAX 28 182 #define OV5693_OTP_BANK_SIZE 16 //16 bytes per bank 183 #define OV5693_OTP_READ_ONETIME 16 184 #define OV5693_OTP_MODE_READ 1 185 186 struct regval_list { 187 u16 reg_num; 188 u8 value; 189 }; 190 191 struct 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 207 struct ov5693_format { 208 u8 *desc; 209 u32 pixelformat; 210 struct ov5693_reg *regs; 211 }; 212 213 enum vcm_type { 214 VCM_UNKNOWN, 215 VCM_AD5823, 216 VCM_DW9714, 217 }; 218 219 /* 220 * ov5693 device structure. 221 */ 222 struct 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 244 enum ov5693_tok_type { 245 OV5693_8BIT = 0x0001, 246 OV5693_16BIT = 0x0002, 247 OV5693_32BIT = 0x0004, 248 OV5693_TOK_TERM = 0xf000, /* terminating token for reg list */ 249 OV5693_TOK_DELAY = 0xfe00, /* delay token for reg list */ 250 OV5693_TOK_MASK = 0xfff0 251 }; 252 253 /** 254 * struct ov5693_reg - MI sensor register format 255 * @type: type of the register 256 * @reg: 16-bit offset to register 257 * @val: 8/16/32-bit register value 258 * 259 * Define a structure for sensor register initialization values 260 */ 261 struct ov5693_reg { 262 enum ov5693_tok_type type; 263 u16 reg; 264 u32 val; /* @set value for read/mod/write, @mask */ 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 271 struct ov5693_write_buffer { 272 u16 addr; 273 u8 data[OV5693_MAX_WRITE_BUF_SIZE]; 274 }; 275 276 struct ov5693_write_ctrl { 277 int index; 278 struct ov5693_write_buffer buffer; 279 }; 280 281 static 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 * 654x496 30fps 17ms VBlanking 2lane 10Bit (Scaling) 515 */ 516 static 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 * 1296x976 30fps 17ms VBlanking 2lane 10Bit (Scaling) 545 *DS from 2592x1952 546 */ 547 static 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}, /*X subsample control*/ 579 {OV5693_8BIT, 0x3815, 0x11}, /*Y subsample control*/ 580 {OV5693_8BIT, 0x3820, 0x00}, 581 {OV5693_8BIT, 0x3821, 0x1e}, 582 {OV5693_8BIT, 0x5002, 0x00}, 583 {OV5693_8BIT, 0x5041, 0x84}, /* scale is auto enabled */ 584 {OV5693_8BIT, 0x0100, 0x01}, 585 {OV5693_TOK_TERM, 0, 0} 586 587 }; 588 589 /* 590 * 336x256 30fps 17ms VBlanking 2lane 10Bit (Scaling) 591 DS from 2564x1956 592 */ 593 static 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 * 336x256 30fps 17ms VBlanking 2lane 10Bit (Scaling) 620 DS from 2368x1956 621 */ 622 static 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 * ov5693_192x160 30fps 17ms VBlanking 2lane 10Bit (Scaling) 647 DS from 2460x1956 648 */ 649 static 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 677 static 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}, /*hts*/ 690 {OV5693_8BIT, 0x380d, 0x80}, 691 {OV5693_8BIT, 0x380e, 0x07}, /*vts*/ 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 static struct ov5693_reg const ov5693_736x496[] = { 707 {OV5693_8BIT, 0x3501, 0x7b}, 708 {OV5693_8BIT, 0x3502, 0x00}, 709 {OV5693_8BIT, 0x3708, 0xe6}, 710 {OV5693_8BIT, 0x3709, 0xc3}, 711 {OV5693_8BIT, 0x3803, 0x00}, 712 {OV5693_8BIT, 0x3806, 0x07}, 713 {OV5693_8BIT, 0x3807, 0xa3}, 714 {OV5693_8BIT, 0x3808, 0x02}, 715 {OV5693_8BIT, 0x3809, 0xe0}, 716 {OV5693_8BIT, 0x380a, 0x01}, 717 {OV5693_8BIT, 0x380b, 0xf0}, 718 {OV5693_8BIT, 0x380c, 0x0d}, 719 {OV5693_8BIT, 0x380d, 0xb0}, 720 {OV5693_8BIT, 0x380e, 0x05}, 721 {OV5693_8BIT, 0x380f, 0xf2}, 722 {OV5693_8BIT, 0x3811, 0x08}, 723 {OV5693_8BIT, 0x3813, 0x02}, 724 {OV5693_8BIT, 0x3814, 0x31}, 725 {OV5693_8BIT, 0x3815, 0x31}, 726 {OV5693_8BIT, 0x3820, 0x01}, 727 {OV5693_8BIT, 0x3821, 0x1f}, 728 {OV5693_8BIT, 0x5002, 0x00}, 729 {OV5693_8BIT, 0x0100, 0x01}, 730 {OV5693_TOK_TERM, 0, 0} 731 }; 732 */ 733 /* 734 * 976x556 30fps 8.8ms VBlanking 2lane 10Bit (Scaling) 735 */ 736 #if ENABLE_NON_PREVIEW 737 static 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 /*DS from 2624x1492*/ 765 static 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}, /*X subsample control*/ 794 {OV5693_8BIT, 0x3815, 0x11}, /*Y subsample control*/ 795 {OV5693_8BIT, 0x3820, 0x00}, 796 {OV5693_8BIT, 0x3821, 0x1e}, 797 {OV5693_8BIT, 0x5002, 0x00}, 798 {OV5693_8BIT, 0x5041, 0x84}, /* scale is auto enabled */ 799 {OV5693_8BIT, 0x0100, 0x01}, 800 {OV5693_TOK_TERM, 0, 0} 801 }; 802 803 static 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}, /*hts*/ 816 {OV5693_8BIT, 0x380d, 0x80}, 817 {OV5693_8BIT, 0x380e, 0x07}, /*vts*/ 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 831 static 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}, /*{3800,3801} Array X start*/ 837 {OV5693_8BIT, 0x3801, 0x08}, /* 04 //{3800,3801} Array X start*/ 838 {OV5693_8BIT, 0x3802, 0x00}, /*{3802,3803} Array Y start*/ 839 {OV5693_8BIT, 0x3803, 0x04}, /* 00 //{3802,3803} Array Y start*/ 840 {OV5693_8BIT, 0x3804, 0x0a}, /*{3804,3805} Array X end*/ 841 {OV5693_8BIT, 0x3805, 0x37}, /* 3b //{3804,3805} Array X end*/ 842 {OV5693_8BIT, 0x3806, 0x07}, /*{3806,3807} Array Y end*/ 843 {OV5693_8BIT, 0x3807, 0x9f}, /* a3 //{3806,3807} Array Y end*/ 844 {OV5693_8BIT, 0x3808, 0x06}, /*{3808,3809} Final output H size*/ 845 {OV5693_8BIT, 0x3809, 0x50}, /*{3808,3809} Final output H size*/ 846 {OV5693_8BIT, 0x380a, 0x04}, /*{380a,380b} Final output V size*/ 847 {OV5693_8BIT, 0x380b, 0xc0}, /*{380a,380b} Final output V size*/ 848 {OV5693_8BIT, 0x380c, 0x0a}, /*{380c,380d} HTS*/ 849 {OV5693_8BIT, 0x380d, 0x80}, /*{380c,380d} HTS*/ 850 {OV5693_8BIT, 0x380e, 0x07}, /*{380e,380f} VTS*/ 851 {OV5693_8BIT, 0x380f, 0xc0}, /* bc //{380e,380f} VTS*/ 852 {OV5693_8BIT, 0x3810, 0x00}, /*{3810,3811} windowing X offset*/ 853 {OV5693_8BIT, 0x3811, 0x10}, /*{3810,3811} windowing X offset*/ 854 {OV5693_8BIT, 0x3812, 0x00}, /*{3812,3813} windowing Y offset*/ 855 {OV5693_8BIT, 0x3813, 0x06}, /*{3812,3813} windowing Y offset*/ 856 {OV5693_8BIT, 0x3814, 0x11}, /*X subsample control*/ 857 {OV5693_8BIT, 0x3815, 0x11}, /*Y subsample control*/ 858 {OV5693_8BIT, 0x3820, 0x00}, /*FLIP/Binning control*/ 859 {OV5693_8BIT, 0x3821, 0x1e}, /*MIRROR control*/ 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 * 1940x1096 30fps 8.8ms VBlanking 2lane 10bit (Scaling) 868 */ 869 #if ENABLE_NON_PREVIEW 870 static 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 897 static 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 929 static 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 * 2592x1944 30fps 0.6ms VBlanking 2lane 10Bit 962 */ 963 #if ENABLE_NON_PREVIEW 964 static 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 * 11:9 Full FOV Output, expected FOV Res: 2346x1920 994 * ISP Effect Res: 1408x1152 995 * Sensor out: 1424x1168, DS From: 2380x1952 996 * 997 * WA: Left Offset: 8, Hor scal: 64 998 */ 999 #if ENABLE_NON_PREVIEW 1000 static struct ov5693_reg const ov5693_1424x1168_30fps[] = { 1001 {OV5693_8BIT, 0x3501, 0x3b}, /* long exposure[15:8] */ 1002 {OV5693_8BIT, 0x3502, 0x80}, /* long exposure[7:0] */ 1003 {OV5693_8BIT, 0x3708, 0xe2}, 1004 {OV5693_8BIT, 0x3709, 0xc3}, 1005 {OV5693_8BIT, 0x3800, 0x00}, /* TIMING_X_ADDR_START */ 1006 {OV5693_8BIT, 0x3801, 0x50}, /* 80 */ 1007 {OV5693_8BIT, 0x3802, 0x00}, /* TIMING_Y_ADDR_START */ 1008 {OV5693_8BIT, 0x3803, 0x02}, /* 2 */ 1009 {OV5693_8BIT, 0x3804, 0x09}, /* TIMING_X_ADDR_END */ 1010 {OV5693_8BIT, 0x3805, 0xdd}, /* 2525 */ 1011 {OV5693_8BIT, 0x3806, 0x07}, /* TIMING_Y_ADDR_END */ 1012 {OV5693_8BIT, 0x3807, 0xa1}, /* 1953 */ 1013 {OV5693_8BIT, 0x3808, 0x05}, /* TIMING_X_OUTPUT_SIZE */ 1014 {OV5693_8BIT, 0x3809, 0x90}, /* 1424 */ 1015 {OV5693_8BIT, 0x380a, 0x04}, /* TIMING_Y_OUTPUT_SIZE */ 1016 {OV5693_8BIT, 0x380b, 0x90}, /* 1168 */ 1017 {OV5693_8BIT, 0x380c, 0x0a}, /* TIMING_HTS */ 1018 {OV5693_8BIT, 0x380d, 0x80}, 1019 {OV5693_8BIT, 0x380e, 0x07}, /* TIMING_VTS */ 1020 {OV5693_8BIT, 0x380f, 0xc0}, 1021 {OV5693_8BIT, 0x3810, 0x00}, /* TIMING_ISP_X_WIN */ 1022 {OV5693_8BIT, 0x3811, 0x02}, /* 2 */ 1023 {OV5693_8BIT, 0x3812, 0x00}, /* TIMING_ISP_Y_WIN */ 1024 {OV5693_8BIT, 0x3813, 0x00}, /* 0 */ 1025 {OV5693_8BIT, 0x3814, 0x11}, /* TIME_X_INC */ 1026 {OV5693_8BIT, 0x3815, 0x11}, /* TIME_Y_INC */ 1027 {OV5693_8BIT, 0x3820, 0x00}, 1028 {OV5693_8BIT, 0x3821, 0x1e}, 1029 {OV5693_8BIT, 0x5002, 0x00}, 1030 {OV5693_8BIT, 0x5041, 0x84}, /* scale is auto enabled */ 1031 {OV5693_8BIT, 0x0100, 0x01}, 1032 {OV5693_TOK_TERM, 0, 0} 1033 }; 1034 #endif 1035 1036 /* 1037 * 3:2 Full FOV Output, expected FOV Res: 2560x1706 1038 * ISP Effect Res: 720x480 1039 * Sensor out: 736x496, DS From 2616x1764 1040 */ 1041 static struct ov5693_reg const ov5693_736x496_30fps[] = { 1042 {OV5693_8BIT, 0x3501, 0x3b}, /* long exposure[15:8] */ 1043 {OV5693_8BIT, 0x3502, 0x80}, /* long exposure[7:0] */ 1044 {OV5693_8BIT, 0x3708, 0xe2}, 1045 {OV5693_8BIT, 0x3709, 0xc3}, 1046 {OV5693_8BIT, 0x3800, 0x00}, /* TIMING_X_ADDR_START */ 1047 {OV5693_8BIT, 0x3801, 0x02}, /* 2 */ 1048 {OV5693_8BIT, 0x3802, 0x00}, /* TIMING_Y_ADDR_START */ 1049 {OV5693_8BIT, 0x3803, 0x62}, /* 98 */ 1050 {OV5693_8BIT, 0x3804, 0x0a}, /* TIMING_X_ADDR_END */ 1051 {OV5693_8BIT, 0x3805, 0x3b}, /* 2619 */ 1052 {OV5693_8BIT, 0x3806, 0x07}, /* TIMING_Y_ADDR_END */ 1053 {OV5693_8BIT, 0x3807, 0x43}, /* 1859 */ 1054 {OV5693_8BIT, 0x3808, 0x02}, /* TIMING_X_OUTPUT_SIZE */ 1055 {OV5693_8BIT, 0x3809, 0xe0}, /* 736 */ 1056 {OV5693_8BIT, 0x380a, 0x01}, /* TIMING_Y_OUTPUT_SIZE */ 1057 {OV5693_8BIT, 0x380b, 0xf0}, /* 496 */ 1058 {OV5693_8BIT, 0x380c, 0x0a}, /* TIMING_HTS */ 1059 {OV5693_8BIT, 0x380d, 0x80}, 1060 {OV5693_8BIT, 0x380e, 0x07}, /* TIMING_VTS */ 1061 {OV5693_8BIT, 0x380f, 0xc0}, 1062 {OV5693_8BIT, 0x3810, 0x00}, /* TIMING_ISP_X_WIN */ 1063 {OV5693_8BIT, 0x3811, 0x02}, /* 2 */ 1064 {OV5693_8BIT, 0x3812, 0x00}, /* TIMING_ISP_Y_WIN */ 1065 {OV5693_8BIT, 0x3813, 0x00}, /* 0 */ 1066 {OV5693_8BIT, 0x3814, 0x11}, /* TIME_X_INC */ 1067 {OV5693_8BIT, 0x3815, 0x11}, /* TIME_Y_INC */ 1068 {OV5693_8BIT, 0x3820, 0x00}, 1069 {OV5693_8BIT, 0x3821, 0x1e}, 1070 {OV5693_8BIT, 0x5002, 0x00}, 1071 {OV5693_8BIT, 0x5041, 0x84}, /* scale is auto enabled */ 1072 {OV5693_8BIT, 0x0100, 0x01}, 1073 {OV5693_TOK_TERM, 0, 0} 1074 }; 1075 1076 static 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 1103 static 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 * Disable non-preview configurations until the configuration selection is 1166 * improved. 1167 */ 1168 #if ENABLE_NON_PREVIEW 1169 struct 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 1244 struct 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 1390 static struct ov5693_resolution *ov5693_res = ov5693_res_preview; 1391 static unsigned long N_RES = N_RES_PREVIEW; 1392 #endif 1393