root/drivers/media/i2c/et8ek8/et8ek8_mode.c

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

/* [<][>][^][v][top][bottom][index][help] */