linux/drivers/staging/media/atomisp/i2c/ov5693/ov5693.h
<<
>>
Prefs
   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
 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 * ov5693 device structure.
 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,     /* 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 */
 261struct 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
 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 * 654x496 30fps 17ms VBlanking 2lane 10Bit (Scaling)
 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 * 1296x976 30fps 17ms VBlanking 2lane 10Bit (Scaling)
 545*DS from 2592x1952
 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},    /*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 */
 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 * 336x256 30fps 17ms VBlanking 2lane 10Bit (Scaling)
 620 DS from 2368x1956
 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 * ov5693_192x160 30fps 17ms VBlanking 2lane 10Bit (Scaling)
 647 DS from 2460x1956
 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}, /*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/*
 706static 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
 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/*DS from 2624x1492*/
 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},    /*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
 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}, /*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
 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},    /*{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/Binnning 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
 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 * 2592x1944 30fps 0.6ms VBlanking 2lane 10Bit
 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 * 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
1000static 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 */
1041static 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
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 * Disable non-preview configurations until the configuration selection is
1166 * improved.
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