162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * et8ek8_mode.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2008 Nokia Corporation 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Contact: Sakari Ailus <sakari.ailus@iki.fi> 862306a36Sopenharmony_ci * Tuukka Toivonen <tuukkat76@gmail.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "et8ek8_reg.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * Stingray sensor mode settings for Scooby 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/* Mode1_poweron_Mode2_16VGA_2592x1968_12.07fps */ 1862306a36Sopenharmony_cistatic struct et8ek8_reglist mode1_poweron_mode2_16vga_2592x1968_12_07fps = { 1962306a36Sopenharmony_ci/* (without the +1) 2062306a36Sopenharmony_ci * SPCK = 80 MHz 2162306a36Sopenharmony_ci * CCP2 = 640 MHz 2262306a36Sopenharmony_ci * VCO = 640 MHz 2362306a36Sopenharmony_ci * VCOUNT = 84 (2016) 2462306a36Sopenharmony_ci * HCOUNT = 137 (3288) 2562306a36Sopenharmony_ci * CKREF_DIV = 2 2662306a36Sopenharmony_ci * CKVAR_DIV = 200 2762306a36Sopenharmony_ci * VCO_DIV = 0 2862306a36Sopenharmony_ci * SPCK_DIV = 7 2962306a36Sopenharmony_ci * MRCK_DIV = 7 3062306a36Sopenharmony_ci * LVDSCK_DIV = 0 3162306a36Sopenharmony_ci */ 3262306a36Sopenharmony_ci .type = ET8EK8_REGLIST_POWERON, 3362306a36Sopenharmony_ci .mode = { 3462306a36Sopenharmony_ci .sensor_width = 2592, 3562306a36Sopenharmony_ci .sensor_height = 1968, 3662306a36Sopenharmony_ci .sensor_window_origin_x = 0, 3762306a36Sopenharmony_ci .sensor_window_origin_y = 0, 3862306a36Sopenharmony_ci .sensor_window_width = 2592, 3962306a36Sopenharmony_ci .sensor_window_height = 1968, 4062306a36Sopenharmony_ci .width = 3288, 4162306a36Sopenharmony_ci .height = 2016, 4262306a36Sopenharmony_ci .window_origin_x = 0, 4362306a36Sopenharmony_ci .window_origin_y = 0, 4462306a36Sopenharmony_ci .window_width = 2592, 4562306a36Sopenharmony_ci .window_height = 1968, 4662306a36Sopenharmony_ci .pixel_clock = 80000000, 4762306a36Sopenharmony_ci .ext_clock = 9600000, 4862306a36Sopenharmony_ci .timeperframe = { 4962306a36Sopenharmony_ci .numerator = 100, 5062306a36Sopenharmony_ci .denominator = 1207 5162306a36Sopenharmony_ci }, 5262306a36Sopenharmony_ci .max_exp = 2012, 5362306a36Sopenharmony_ci /* .max_gain = 0, */ 5462306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 5562306a36Sopenharmony_ci .sensitivity = 65536 5662306a36Sopenharmony_ci }, 5762306a36Sopenharmony_ci .regs = { 5862306a36Sopenharmony_ci /* Need to set firstly */ 5962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x126C, 0xCC }, 6062306a36Sopenharmony_ci /* Strobe and Data of CCP2 delay are minimized. */ 6162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1269, 0x00 }, 6262306a36Sopenharmony_ci /* Refined value of Min H_COUNT */ 6362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 6462306a36Sopenharmony_ci /* Frequency of SPCK setting (SPCK=MRCK) */ 6562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 6662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1241, 0x94 }, 6762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1242, 0x02 }, 6862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x124B, 0x00 }, 6962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1255, 0xFF }, 7062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1256, 0x9F }, 7162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1258, 0x00 }, 7262306a36Sopenharmony_ci /* From parallel out to serial out */ 7362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, 7462306a36Sopenharmony_ci /* From w/ embedded data to w/o embedded data */ 7562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125E, 0xC0 }, 7662306a36Sopenharmony_ci /* CCP2 out is from STOP to ACTIVE */ 7762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1263, 0x98 }, 7862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1268, 0xC6 }, 7962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1434, 0x00 }, 8062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1163, 0x44 }, 8162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1166, 0x29 }, 8262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1140, 0x02 }, 8362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1011, 0x24 }, 8462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1151, 0x80 }, 8562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1152, 0x23 }, 8662306a36Sopenharmony_ci /* Initial setting for improvement2 of lower frequency noise */ 8762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1014, 0x05 }, 8862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1033, 0x06 }, 8962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1034, 0x79 }, 9062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1423, 0x3F }, 9162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1424, 0x3F }, 9262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1426, 0x00 }, 9362306a36Sopenharmony_ci /* Switch of Preset-White-balance (0d:disable / 1d:enable) */ 9462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1439, 0x00 }, 9562306a36Sopenharmony_ci /* Switch of blemish correction (0d:disable / 1d:enable) */ 9662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x161F, 0x60 }, 9762306a36Sopenharmony_ci /* Switch of auto noise correction (0d:disable / 1d:enable) */ 9862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1634, 0x00 }, 9962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1646, 0x00 }, 10062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1648, 0x00 }, 10162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x113E, 0x01 }, 10262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x113F, 0x22 }, 10362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 10462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 10562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 10662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 10762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 10862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 10962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 11062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 11162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 11262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 11362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 11462306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 11562306a36Sopenharmony_ci } 11662306a36Sopenharmony_ci}; 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/* Mode1_16VGA_2592x1968_13.12fps_DPCM10-8 */ 11962306a36Sopenharmony_cistatic struct et8ek8_reglist mode1_16vga_2592x1968_13_12fps_dpcm10_8 = { 12062306a36Sopenharmony_ci/* (without the +1) 12162306a36Sopenharmony_ci * SPCK = 80 MHz 12262306a36Sopenharmony_ci * CCP2 = 560 MHz 12362306a36Sopenharmony_ci * VCO = 560 MHz 12462306a36Sopenharmony_ci * VCOUNT = 84 (2016) 12562306a36Sopenharmony_ci * HCOUNT = 128 (3072) 12662306a36Sopenharmony_ci * CKREF_DIV = 2 12762306a36Sopenharmony_ci * CKVAR_DIV = 175 12862306a36Sopenharmony_ci * VCO_DIV = 0 12962306a36Sopenharmony_ci * SPCK_DIV = 6 13062306a36Sopenharmony_ci * MRCK_DIV = 7 13162306a36Sopenharmony_ci * LVDSCK_DIV = 0 13262306a36Sopenharmony_ci */ 13362306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 13462306a36Sopenharmony_ci .mode = { 13562306a36Sopenharmony_ci .sensor_width = 2592, 13662306a36Sopenharmony_ci .sensor_height = 1968, 13762306a36Sopenharmony_ci .sensor_window_origin_x = 0, 13862306a36Sopenharmony_ci .sensor_window_origin_y = 0, 13962306a36Sopenharmony_ci .sensor_window_width = 2592, 14062306a36Sopenharmony_ci .sensor_window_height = 1968, 14162306a36Sopenharmony_ci .width = 3072, 14262306a36Sopenharmony_ci .height = 2016, 14362306a36Sopenharmony_ci .window_origin_x = 0, 14462306a36Sopenharmony_ci .window_origin_y = 0, 14562306a36Sopenharmony_ci .window_width = 2592, 14662306a36Sopenharmony_ci .window_height = 1968, 14762306a36Sopenharmony_ci .pixel_clock = 80000000, 14862306a36Sopenharmony_ci .ext_clock = 9600000, 14962306a36Sopenharmony_ci .timeperframe = { 15062306a36Sopenharmony_ci .numerator = 100, 15162306a36Sopenharmony_ci .denominator = 1292 15262306a36Sopenharmony_ci }, 15362306a36Sopenharmony_ci .max_exp = 2012, 15462306a36Sopenharmony_ci /* .max_gain = 0, */ 15562306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 15662306a36Sopenharmony_ci .sensitivity = 65536 15762306a36Sopenharmony_ci }, 15862306a36Sopenharmony_ci .regs = { 15962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x57 }, 16062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 16162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 16262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x06 }, 16362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 16462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 16562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 16662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x80 }, /* <-changed to v14 7E->80 */ 16762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 16862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 16962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/ */ 17062306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 17162306a36Sopenharmony_ci } 17262306a36Sopenharmony_ci}; 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci/* Mode3_4VGA_1296x984_29.99fps_DPCM10-8 */ 17562306a36Sopenharmony_cistatic struct et8ek8_reglist mode3_4vga_1296x984_29_99fps_dpcm10_8 = { 17662306a36Sopenharmony_ci/* (without the +1) 17762306a36Sopenharmony_ci * SPCK = 96.5333333333333 MHz 17862306a36Sopenharmony_ci * CCP2 = 579.2 MHz 17962306a36Sopenharmony_ci * VCO = 579.2 MHz 18062306a36Sopenharmony_ci * VCOUNT = 84 (2016) 18162306a36Sopenharmony_ci * HCOUNT = 133 (3192) 18262306a36Sopenharmony_ci * CKREF_DIV = 2 18362306a36Sopenharmony_ci * CKVAR_DIV = 181 18462306a36Sopenharmony_ci * VCO_DIV = 0 18562306a36Sopenharmony_ci * SPCK_DIV = 5 18662306a36Sopenharmony_ci * MRCK_DIV = 7 18762306a36Sopenharmony_ci * LVDSCK_DIV = 0 18862306a36Sopenharmony_ci */ 18962306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 19062306a36Sopenharmony_ci .mode = { 19162306a36Sopenharmony_ci .sensor_width = 2592, 19262306a36Sopenharmony_ci .sensor_height = 1968, 19362306a36Sopenharmony_ci .sensor_window_origin_x = 0, 19462306a36Sopenharmony_ci .sensor_window_origin_y = 0, 19562306a36Sopenharmony_ci .sensor_window_width = 2592, 19662306a36Sopenharmony_ci .sensor_window_height = 1968, 19762306a36Sopenharmony_ci .width = 3192, 19862306a36Sopenharmony_ci .height = 1008, 19962306a36Sopenharmony_ci .window_origin_x = 0, 20062306a36Sopenharmony_ci .window_origin_y = 0, 20162306a36Sopenharmony_ci .window_width = 1296, 20262306a36Sopenharmony_ci .window_height = 984, 20362306a36Sopenharmony_ci .pixel_clock = 96533333, 20462306a36Sopenharmony_ci .ext_clock = 9600000, 20562306a36Sopenharmony_ci .timeperframe = { 20662306a36Sopenharmony_ci .numerator = 100, 20762306a36Sopenharmony_ci .denominator = 3000 20862306a36Sopenharmony_ci }, 20962306a36Sopenharmony_ci .max_exp = 1004, 21062306a36Sopenharmony_ci /* .max_gain = 0, */ 21162306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 21262306a36Sopenharmony_ci .sensitivity = 65536 21362306a36Sopenharmony_ci }, 21462306a36Sopenharmony_ci .regs = { 21562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x5A }, 21662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 21762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 21862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x05 }, 21962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 22062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x85 }, 22162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 22262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 22362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 22462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 22562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/ */ 22662306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 22762306a36Sopenharmony_ci } 22862306a36Sopenharmony_ci}; 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci/* Mode4_SVGA_864x656_29.88fps */ 23162306a36Sopenharmony_cistatic struct et8ek8_reglist mode4_svga_864x656_29_88fps = { 23262306a36Sopenharmony_ci/* (without the +1) 23362306a36Sopenharmony_ci * SPCK = 80 MHz 23462306a36Sopenharmony_ci * CCP2 = 320 MHz 23562306a36Sopenharmony_ci * VCO = 640 MHz 23662306a36Sopenharmony_ci * VCOUNT = 84 (2016) 23762306a36Sopenharmony_ci * HCOUNT = 166 (3984) 23862306a36Sopenharmony_ci * CKREF_DIV = 2 23962306a36Sopenharmony_ci * CKVAR_DIV = 200 24062306a36Sopenharmony_ci * VCO_DIV = 0 24162306a36Sopenharmony_ci * SPCK_DIV = 7 24262306a36Sopenharmony_ci * MRCK_DIV = 7 24362306a36Sopenharmony_ci * LVDSCK_DIV = 1 24462306a36Sopenharmony_ci */ 24562306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 24662306a36Sopenharmony_ci .mode = { 24762306a36Sopenharmony_ci .sensor_width = 2592, 24862306a36Sopenharmony_ci .sensor_height = 1968, 24962306a36Sopenharmony_ci .sensor_window_origin_x = 0, 25062306a36Sopenharmony_ci .sensor_window_origin_y = 0, 25162306a36Sopenharmony_ci .sensor_window_width = 2592, 25262306a36Sopenharmony_ci .sensor_window_height = 1968, 25362306a36Sopenharmony_ci .width = 3984, 25462306a36Sopenharmony_ci .height = 672, 25562306a36Sopenharmony_ci .window_origin_x = 0, 25662306a36Sopenharmony_ci .window_origin_y = 0, 25762306a36Sopenharmony_ci .window_width = 864, 25862306a36Sopenharmony_ci .window_height = 656, 25962306a36Sopenharmony_ci .pixel_clock = 80000000, 26062306a36Sopenharmony_ci .ext_clock = 9600000, 26162306a36Sopenharmony_ci .timeperframe = { 26262306a36Sopenharmony_ci .numerator = 100, 26362306a36Sopenharmony_ci .denominator = 2988 26462306a36Sopenharmony_ci }, 26562306a36Sopenharmony_ci .max_exp = 668, 26662306a36Sopenharmony_ci /* .max_gain = 0, */ 26762306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 26862306a36Sopenharmony_ci .sensitivity = 65536 26962306a36Sopenharmony_ci }, 27062306a36Sopenharmony_ci .regs = { 27162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 27262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 27362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 27462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 27562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x62 }, 27662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x62 }, 27762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 27862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xA6 }, 27962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 28062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 28162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 28262306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 28362306a36Sopenharmony_ci } 28462306a36Sopenharmony_ci}; 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci/* Mode5_VGA_648x492_29.93fps */ 28762306a36Sopenharmony_cistatic struct et8ek8_reglist mode5_vga_648x492_29_93fps = { 28862306a36Sopenharmony_ci/* (without the +1) 28962306a36Sopenharmony_ci * SPCK = 80 MHz 29062306a36Sopenharmony_ci * CCP2 = 320 MHz 29162306a36Sopenharmony_ci * VCO = 640 MHz 29262306a36Sopenharmony_ci * VCOUNT = 84 (2016) 29362306a36Sopenharmony_ci * HCOUNT = 221 (5304) 29462306a36Sopenharmony_ci * CKREF_DIV = 2 29562306a36Sopenharmony_ci * CKVAR_DIV = 200 29662306a36Sopenharmony_ci * VCO_DIV = 0 29762306a36Sopenharmony_ci * SPCK_DIV = 7 29862306a36Sopenharmony_ci * MRCK_DIV = 7 29962306a36Sopenharmony_ci * LVDSCK_DIV = 1 30062306a36Sopenharmony_ci */ 30162306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 30262306a36Sopenharmony_ci .mode = { 30362306a36Sopenharmony_ci .sensor_width = 2592, 30462306a36Sopenharmony_ci .sensor_height = 1968, 30562306a36Sopenharmony_ci .sensor_window_origin_x = 0, 30662306a36Sopenharmony_ci .sensor_window_origin_y = 0, 30762306a36Sopenharmony_ci .sensor_window_width = 2592, 30862306a36Sopenharmony_ci .sensor_window_height = 1968, 30962306a36Sopenharmony_ci .width = 5304, 31062306a36Sopenharmony_ci .height = 504, 31162306a36Sopenharmony_ci .window_origin_x = 0, 31262306a36Sopenharmony_ci .window_origin_y = 0, 31362306a36Sopenharmony_ci .window_width = 648, 31462306a36Sopenharmony_ci .window_height = 492, 31562306a36Sopenharmony_ci .pixel_clock = 80000000, 31662306a36Sopenharmony_ci .ext_clock = 9600000, 31762306a36Sopenharmony_ci .timeperframe = { 31862306a36Sopenharmony_ci .numerator = 100, 31962306a36Sopenharmony_ci .denominator = 2993 32062306a36Sopenharmony_ci }, 32162306a36Sopenharmony_ci .max_exp = 500, 32262306a36Sopenharmony_ci /* .max_gain = 0, */ 32362306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 32462306a36Sopenharmony_ci .sensitivity = 65536 32562306a36Sopenharmony_ci }, 32662306a36Sopenharmony_ci .regs = { 32762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 32862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 32962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 33062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 33162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x61 }, 33262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x61 }, 33362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 33462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xDD }, 33562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 33662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 33762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 33862306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 33962306a36Sopenharmony_ci } 34062306a36Sopenharmony_ci}; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci/* Mode2_16VGA_2592x1968_3.99fps */ 34362306a36Sopenharmony_cistatic struct et8ek8_reglist mode2_16vga_2592x1968_3_99fps = { 34462306a36Sopenharmony_ci/* (without the +1) 34562306a36Sopenharmony_ci * SPCK = 80 MHz 34662306a36Sopenharmony_ci * CCP2 = 640 MHz 34762306a36Sopenharmony_ci * VCO = 640 MHz 34862306a36Sopenharmony_ci * VCOUNT = 254 (6096) 34962306a36Sopenharmony_ci * HCOUNT = 137 (3288) 35062306a36Sopenharmony_ci * CKREF_DIV = 2 35162306a36Sopenharmony_ci * CKVAR_DIV = 200 35262306a36Sopenharmony_ci * VCO_DIV = 0 35362306a36Sopenharmony_ci * SPCK_DIV = 7 35462306a36Sopenharmony_ci * MRCK_DIV = 7 35562306a36Sopenharmony_ci * LVDSCK_DIV = 0 35662306a36Sopenharmony_ci */ 35762306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 35862306a36Sopenharmony_ci .mode = { 35962306a36Sopenharmony_ci .sensor_width = 2592, 36062306a36Sopenharmony_ci .sensor_height = 1968, 36162306a36Sopenharmony_ci .sensor_window_origin_x = 0, 36262306a36Sopenharmony_ci .sensor_window_origin_y = 0, 36362306a36Sopenharmony_ci .sensor_window_width = 2592, 36462306a36Sopenharmony_ci .sensor_window_height = 1968, 36562306a36Sopenharmony_ci .width = 3288, 36662306a36Sopenharmony_ci .height = 6096, 36762306a36Sopenharmony_ci .window_origin_x = 0, 36862306a36Sopenharmony_ci .window_origin_y = 0, 36962306a36Sopenharmony_ci .window_width = 2592, 37062306a36Sopenharmony_ci .window_height = 1968, 37162306a36Sopenharmony_ci .pixel_clock = 80000000, 37262306a36Sopenharmony_ci .ext_clock = 9600000, 37362306a36Sopenharmony_ci .timeperframe = { 37462306a36Sopenharmony_ci .numerator = 100, 37562306a36Sopenharmony_ci .denominator = 399 37662306a36Sopenharmony_ci }, 37762306a36Sopenharmony_ci .max_exp = 6092, 37862306a36Sopenharmony_ci /* .max_gain = 0, */ 37962306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 38062306a36Sopenharmony_ci .sensitivity = 65536 38162306a36Sopenharmony_ci }, 38262306a36Sopenharmony_ci .regs = { 38362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 38462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 38562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 38662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 38762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 38862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 38962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 39062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 39162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 39262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0xFE }, 39362306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 39462306a36Sopenharmony_ci } 39562306a36Sopenharmony_ci}; 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci/* Mode_648x492_5fps */ 39862306a36Sopenharmony_cistatic struct et8ek8_reglist mode_648x492_5fps = { 39962306a36Sopenharmony_ci/* (without the +1) 40062306a36Sopenharmony_ci * SPCK = 13.3333333333333 MHz 40162306a36Sopenharmony_ci * CCP2 = 53.3333333333333 MHz 40262306a36Sopenharmony_ci * VCO = 640 MHz 40362306a36Sopenharmony_ci * VCOUNT = 84 (2016) 40462306a36Sopenharmony_ci * HCOUNT = 221 (5304) 40562306a36Sopenharmony_ci * CKREF_DIV = 2 40662306a36Sopenharmony_ci * CKVAR_DIV = 200 40762306a36Sopenharmony_ci * VCO_DIV = 5 40862306a36Sopenharmony_ci * SPCK_DIV = 7 40962306a36Sopenharmony_ci * MRCK_DIV = 7 41062306a36Sopenharmony_ci * LVDSCK_DIV = 1 41162306a36Sopenharmony_ci */ 41262306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 41362306a36Sopenharmony_ci .mode = { 41462306a36Sopenharmony_ci .sensor_width = 2592, 41562306a36Sopenharmony_ci .sensor_height = 1968, 41662306a36Sopenharmony_ci .sensor_window_origin_x = 0, 41762306a36Sopenharmony_ci .sensor_window_origin_y = 0, 41862306a36Sopenharmony_ci .sensor_window_width = 2592, 41962306a36Sopenharmony_ci .sensor_window_height = 1968, 42062306a36Sopenharmony_ci .width = 5304, 42162306a36Sopenharmony_ci .height = 504, 42262306a36Sopenharmony_ci .window_origin_x = 0, 42362306a36Sopenharmony_ci .window_origin_y = 0, 42462306a36Sopenharmony_ci .window_width = 648, 42562306a36Sopenharmony_ci .window_height = 492, 42662306a36Sopenharmony_ci .pixel_clock = 13333333, 42762306a36Sopenharmony_ci .ext_clock = 9600000, 42862306a36Sopenharmony_ci .timeperframe = { 42962306a36Sopenharmony_ci .numerator = 100, 43062306a36Sopenharmony_ci .denominator = 499 43162306a36Sopenharmony_ci }, 43262306a36Sopenharmony_ci .max_exp = 500, 43362306a36Sopenharmony_ci /* .max_gain = 0, */ 43462306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 43562306a36Sopenharmony_ci .sensitivity = 65536 43662306a36Sopenharmony_ci }, 43762306a36Sopenharmony_ci .regs = { 43862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 43962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 44062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 44162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x57 }, 44262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x61 }, 44362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x61 }, 44462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 44562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xDD }, 44662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 44762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 44862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 44962306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 45062306a36Sopenharmony_ci } 45162306a36Sopenharmony_ci}; 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci/* Mode3_4VGA_1296x984_5fps */ 45462306a36Sopenharmony_cistatic struct et8ek8_reglist mode3_4vga_1296x984_5fps = { 45562306a36Sopenharmony_ci/* (without the +1) 45662306a36Sopenharmony_ci * SPCK = 49.4 MHz 45762306a36Sopenharmony_ci * CCP2 = 395.2 MHz 45862306a36Sopenharmony_ci * VCO = 790.4 MHz 45962306a36Sopenharmony_ci * VCOUNT = 250 (6000) 46062306a36Sopenharmony_ci * HCOUNT = 137 (3288) 46162306a36Sopenharmony_ci * CKREF_DIV = 2 46262306a36Sopenharmony_ci * CKVAR_DIV = 247 46362306a36Sopenharmony_ci * VCO_DIV = 1 46462306a36Sopenharmony_ci * SPCK_DIV = 7 46562306a36Sopenharmony_ci * MRCK_DIV = 7 46662306a36Sopenharmony_ci * LVDSCK_DIV = 0 46762306a36Sopenharmony_ci */ 46862306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 46962306a36Sopenharmony_ci .mode = { 47062306a36Sopenharmony_ci .sensor_width = 2592, 47162306a36Sopenharmony_ci .sensor_height = 1968, 47262306a36Sopenharmony_ci .sensor_window_origin_x = 0, 47362306a36Sopenharmony_ci .sensor_window_origin_y = 0, 47462306a36Sopenharmony_ci .sensor_window_width = 2592, 47562306a36Sopenharmony_ci .sensor_window_height = 1968, 47662306a36Sopenharmony_ci .width = 3288, 47762306a36Sopenharmony_ci .height = 3000, 47862306a36Sopenharmony_ci .window_origin_x = 0, 47962306a36Sopenharmony_ci .window_origin_y = 0, 48062306a36Sopenharmony_ci .window_width = 1296, 48162306a36Sopenharmony_ci .window_height = 984, 48262306a36Sopenharmony_ci .pixel_clock = 49400000, 48362306a36Sopenharmony_ci .ext_clock = 9600000, 48462306a36Sopenharmony_ci .timeperframe = { 48562306a36Sopenharmony_ci .numerator = 100, 48662306a36Sopenharmony_ci .denominator = 501 48762306a36Sopenharmony_ci }, 48862306a36Sopenharmony_ci .max_exp = 2996, 48962306a36Sopenharmony_ci /* .max_gain = 0, */ 49062306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 49162306a36Sopenharmony_ci .sensitivity = 65536 49262306a36Sopenharmony_ci }, 49362306a36Sopenharmony_ci .regs = { 49462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x7B }, 49562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 49662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 49762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x17 }, 49862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 49962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 50062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 50162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 50262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 50362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0xFA }, 50462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 50562306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 50662306a36Sopenharmony_ci } 50762306a36Sopenharmony_ci}; 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ci/* Mode_4VGA_1296x984_25fps_DPCM10-8 */ 51062306a36Sopenharmony_cistatic struct et8ek8_reglist mode_4vga_1296x984_25fps_dpcm10_8 = { 51162306a36Sopenharmony_ci/* (without the +1) 51262306a36Sopenharmony_ci * SPCK = 84.2666666666667 MHz 51362306a36Sopenharmony_ci * CCP2 = 505.6 MHz 51462306a36Sopenharmony_ci * VCO = 505.6 MHz 51562306a36Sopenharmony_ci * VCOUNT = 88 (2112) 51662306a36Sopenharmony_ci * HCOUNT = 133 (3192) 51762306a36Sopenharmony_ci * CKREF_DIV = 2 51862306a36Sopenharmony_ci * CKVAR_DIV = 158 51962306a36Sopenharmony_ci * VCO_DIV = 0 52062306a36Sopenharmony_ci * SPCK_DIV = 5 52162306a36Sopenharmony_ci * MRCK_DIV = 7 52262306a36Sopenharmony_ci * LVDSCK_DIV = 0 52362306a36Sopenharmony_ci */ 52462306a36Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 52562306a36Sopenharmony_ci .mode = { 52662306a36Sopenharmony_ci .sensor_width = 2592, 52762306a36Sopenharmony_ci .sensor_height = 1968, 52862306a36Sopenharmony_ci .sensor_window_origin_x = 0, 52962306a36Sopenharmony_ci .sensor_window_origin_y = 0, 53062306a36Sopenharmony_ci .sensor_window_width = 2592, 53162306a36Sopenharmony_ci .sensor_window_height = 1968, 53262306a36Sopenharmony_ci .width = 3192, 53362306a36Sopenharmony_ci .height = 1056, 53462306a36Sopenharmony_ci .window_origin_x = 0, 53562306a36Sopenharmony_ci .window_origin_y = 0, 53662306a36Sopenharmony_ci .window_width = 1296, 53762306a36Sopenharmony_ci .window_height = 984, 53862306a36Sopenharmony_ci .pixel_clock = 84266667, 53962306a36Sopenharmony_ci .ext_clock = 9600000, 54062306a36Sopenharmony_ci .timeperframe = { 54162306a36Sopenharmony_ci .numerator = 100, 54262306a36Sopenharmony_ci .denominator = 2500 54362306a36Sopenharmony_ci }, 54462306a36Sopenharmony_ci .max_exp = 1052, 54562306a36Sopenharmony_ci /* .max_gain = 0, */ 54662306a36Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 54762306a36Sopenharmony_ci .sensitivity = 65536 54862306a36Sopenharmony_ci }, 54962306a36Sopenharmony_ci .regs = { 55062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x4F }, 55162306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 55262306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 55362306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x05 }, 55462306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 55562306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x85 }, 55662306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 55762306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x58 }, 55862306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 55962306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 56062306a36Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, 56162306a36Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 56262306a36Sopenharmony_ci } 56362306a36Sopenharmony_ci}; 56462306a36Sopenharmony_ci 56562306a36Sopenharmony_cistruct et8ek8_meta_reglist meta_reglist = { 56662306a36Sopenharmony_ci .version = "V14 03-June-2008", 56762306a36Sopenharmony_ci .reglist = { 56862306a36Sopenharmony_ci { .ptr = &mode1_poweron_mode2_16vga_2592x1968_12_07fps }, 56962306a36Sopenharmony_ci { .ptr = &mode1_16vga_2592x1968_13_12fps_dpcm10_8 }, 57062306a36Sopenharmony_ci { .ptr = &mode3_4vga_1296x984_29_99fps_dpcm10_8 }, 57162306a36Sopenharmony_ci { .ptr = &mode4_svga_864x656_29_88fps }, 57262306a36Sopenharmony_ci { .ptr = &mode5_vga_648x492_29_93fps }, 57362306a36Sopenharmony_ci { .ptr = &mode2_16vga_2592x1968_3_99fps }, 57462306a36Sopenharmony_ci { .ptr = &mode_648x492_5fps }, 57562306a36Sopenharmony_ci { .ptr = &mode3_4vga_1296x984_5fps }, 57662306a36Sopenharmony_ci { .ptr = &mode_4vga_1296x984_25fps_dpcm10_8 }, 57762306a36Sopenharmony_ci { .ptr = NULL } 57862306a36Sopenharmony_ci } 57962306a36Sopenharmony_ci}; 580