18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * et8ek8_mode.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2008 Nokia Corporation 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Contact: Sakari Ailus <sakari.ailus@iki.fi> 88c2ecf20Sopenharmony_ci * Tuukka Toivonen <tuukkat76@gmail.com> 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include "et8ek8_reg.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci/* 148c2ecf20Sopenharmony_ci * Stingray sensor mode settings for Scooby 158c2ecf20Sopenharmony_ci */ 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci/* Mode1_poweron_Mode2_16VGA_2592x1968_12.07fps */ 188c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode1_poweron_mode2_16vga_2592x1968_12_07fps = { 198c2ecf20Sopenharmony_ci/* (without the +1) 208c2ecf20Sopenharmony_ci * SPCK = 80 MHz 218c2ecf20Sopenharmony_ci * CCP2 = 640 MHz 228c2ecf20Sopenharmony_ci * VCO = 640 MHz 238c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 248c2ecf20Sopenharmony_ci * HCOUNT = 137 (3288) 258c2ecf20Sopenharmony_ci * CKREF_DIV = 2 268c2ecf20Sopenharmony_ci * CKVAR_DIV = 200 278c2ecf20Sopenharmony_ci * VCO_DIV = 0 288c2ecf20Sopenharmony_ci * SPCK_DIV = 7 298c2ecf20Sopenharmony_ci * MRCK_DIV = 7 308c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 318c2ecf20Sopenharmony_ci */ 328c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_POWERON, 338c2ecf20Sopenharmony_ci .mode = { 348c2ecf20Sopenharmony_ci .sensor_width = 2592, 358c2ecf20Sopenharmony_ci .sensor_height = 1968, 368c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 378c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 388c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 398c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 408c2ecf20Sopenharmony_ci .width = 3288, 418c2ecf20Sopenharmony_ci .height = 2016, 428c2ecf20Sopenharmony_ci .window_origin_x = 0, 438c2ecf20Sopenharmony_ci .window_origin_y = 0, 448c2ecf20Sopenharmony_ci .window_width = 2592, 458c2ecf20Sopenharmony_ci .window_height = 1968, 468c2ecf20Sopenharmony_ci .pixel_clock = 80000000, 478c2ecf20Sopenharmony_ci .ext_clock = 9600000, 488c2ecf20Sopenharmony_ci .timeperframe = { 498c2ecf20Sopenharmony_ci .numerator = 100, 508c2ecf20Sopenharmony_ci .denominator = 1207 518c2ecf20Sopenharmony_ci }, 528c2ecf20Sopenharmony_ci .max_exp = 2012, 538c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 548c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 558c2ecf20Sopenharmony_ci .sensitivity = 65536 568c2ecf20Sopenharmony_ci }, 578c2ecf20Sopenharmony_ci .regs = { 588c2ecf20Sopenharmony_ci /* Need to set firstly */ 598c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x126C, 0xCC }, 608c2ecf20Sopenharmony_ci /* Strobe and Data of CCP2 delay are minimized. */ 618c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1269, 0x00 }, 628c2ecf20Sopenharmony_ci /* Refined value of Min H_COUNT */ 638c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 648c2ecf20Sopenharmony_ci /* Frequency of SPCK setting (SPCK=MRCK) */ 658c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 668c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1241, 0x94 }, 678c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1242, 0x02 }, 688c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x124B, 0x00 }, 698c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1255, 0xFF }, 708c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1256, 0x9F }, 718c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1258, 0x00 }, 728c2ecf20Sopenharmony_ci /* From parallel out to serial out */ 738c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, 748c2ecf20Sopenharmony_ci /* From w/ embedded data to w/o embedded data */ 758c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125E, 0xC0 }, 768c2ecf20Sopenharmony_ci /* CCP2 out is from STOP to ACTIVE */ 778c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1263, 0x98 }, 788c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1268, 0xC6 }, 798c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1434, 0x00 }, 808c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1163, 0x44 }, 818c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1166, 0x29 }, 828c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1140, 0x02 }, 838c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1011, 0x24 }, 848c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1151, 0x80 }, 858c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1152, 0x23 }, 868c2ecf20Sopenharmony_ci /* Initial setting for improvement2 of lower frequency noise */ 878c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1014, 0x05 }, 888c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1033, 0x06 }, 898c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1034, 0x79 }, 908c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1423, 0x3F }, 918c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1424, 0x3F }, 928c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1426, 0x00 }, 938c2ecf20Sopenharmony_ci /* Switch of Preset-White-balance (0d:disable / 1d:enable) */ 948c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1439, 0x00 }, 958c2ecf20Sopenharmony_ci /* Switch of blemish correction (0d:disable / 1d:enable) */ 968c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x161F, 0x60 }, 978c2ecf20Sopenharmony_ci /* Switch of auto noise correction (0d:disable / 1d:enable) */ 988c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1634, 0x00 }, 998c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1646, 0x00 }, 1008c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1648, 0x00 }, 1018c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x113E, 0x01 }, 1028c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x113F, 0x22 }, 1038c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 1048c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 1058c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 1068c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 1078c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 1088c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 1098c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 1108c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 1118c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 1128c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 1138c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 1148c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 1158c2ecf20Sopenharmony_ci } 1168c2ecf20Sopenharmony_ci}; 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci/* Mode1_16VGA_2592x1968_13.12fps_DPCM10-8 */ 1198c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode1_16vga_2592x1968_13_12fps_dpcm10_8 = { 1208c2ecf20Sopenharmony_ci/* (without the +1) 1218c2ecf20Sopenharmony_ci * SPCK = 80 MHz 1228c2ecf20Sopenharmony_ci * CCP2 = 560 MHz 1238c2ecf20Sopenharmony_ci * VCO = 560 MHz 1248c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 1258c2ecf20Sopenharmony_ci * HCOUNT = 128 (3072) 1268c2ecf20Sopenharmony_ci * CKREF_DIV = 2 1278c2ecf20Sopenharmony_ci * CKVAR_DIV = 175 1288c2ecf20Sopenharmony_ci * VCO_DIV = 0 1298c2ecf20Sopenharmony_ci * SPCK_DIV = 6 1308c2ecf20Sopenharmony_ci * MRCK_DIV = 7 1318c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 1328c2ecf20Sopenharmony_ci */ 1338c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 1348c2ecf20Sopenharmony_ci .mode = { 1358c2ecf20Sopenharmony_ci .sensor_width = 2592, 1368c2ecf20Sopenharmony_ci .sensor_height = 1968, 1378c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 1388c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 1398c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 1408c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 1418c2ecf20Sopenharmony_ci .width = 3072, 1428c2ecf20Sopenharmony_ci .height = 2016, 1438c2ecf20Sopenharmony_ci .window_origin_x = 0, 1448c2ecf20Sopenharmony_ci .window_origin_y = 0, 1458c2ecf20Sopenharmony_ci .window_width = 2592, 1468c2ecf20Sopenharmony_ci .window_height = 1968, 1478c2ecf20Sopenharmony_ci .pixel_clock = 80000000, 1488c2ecf20Sopenharmony_ci .ext_clock = 9600000, 1498c2ecf20Sopenharmony_ci .timeperframe = { 1508c2ecf20Sopenharmony_ci .numerator = 100, 1518c2ecf20Sopenharmony_ci .denominator = 1292 1528c2ecf20Sopenharmony_ci }, 1538c2ecf20Sopenharmony_ci .max_exp = 2012, 1548c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 1558c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 1568c2ecf20Sopenharmony_ci .sensitivity = 65536 1578c2ecf20Sopenharmony_ci }, 1588c2ecf20Sopenharmony_ci .regs = { 1598c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x57 }, 1608c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 1618c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 1628c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x06 }, 1638c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 1648c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 1658c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 1668c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x80 }, /* <-changed to v14 7E->80 */ 1678c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 1688c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 1698c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/ */ 1708c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 1718c2ecf20Sopenharmony_ci } 1728c2ecf20Sopenharmony_ci}; 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci/* Mode3_4VGA_1296x984_29.99fps_DPCM10-8 */ 1758c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode3_4vga_1296x984_29_99fps_dpcm10_8 = { 1768c2ecf20Sopenharmony_ci/* (without the +1) 1778c2ecf20Sopenharmony_ci * SPCK = 96.5333333333333 MHz 1788c2ecf20Sopenharmony_ci * CCP2 = 579.2 MHz 1798c2ecf20Sopenharmony_ci * VCO = 579.2 MHz 1808c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 1818c2ecf20Sopenharmony_ci * HCOUNT = 133 (3192) 1828c2ecf20Sopenharmony_ci * CKREF_DIV = 2 1838c2ecf20Sopenharmony_ci * CKVAR_DIV = 181 1848c2ecf20Sopenharmony_ci * VCO_DIV = 0 1858c2ecf20Sopenharmony_ci * SPCK_DIV = 5 1868c2ecf20Sopenharmony_ci * MRCK_DIV = 7 1878c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 1888c2ecf20Sopenharmony_ci */ 1898c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 1908c2ecf20Sopenharmony_ci .mode = { 1918c2ecf20Sopenharmony_ci .sensor_width = 2592, 1928c2ecf20Sopenharmony_ci .sensor_height = 1968, 1938c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 1948c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 1958c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 1968c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 1978c2ecf20Sopenharmony_ci .width = 3192, 1988c2ecf20Sopenharmony_ci .height = 1008, 1998c2ecf20Sopenharmony_ci .window_origin_x = 0, 2008c2ecf20Sopenharmony_ci .window_origin_y = 0, 2018c2ecf20Sopenharmony_ci .window_width = 1296, 2028c2ecf20Sopenharmony_ci .window_height = 984, 2038c2ecf20Sopenharmony_ci .pixel_clock = 96533333, 2048c2ecf20Sopenharmony_ci .ext_clock = 9600000, 2058c2ecf20Sopenharmony_ci .timeperframe = { 2068c2ecf20Sopenharmony_ci .numerator = 100, 2078c2ecf20Sopenharmony_ci .denominator = 3000 2088c2ecf20Sopenharmony_ci }, 2098c2ecf20Sopenharmony_ci .max_exp = 1004, 2108c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 2118c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 2128c2ecf20Sopenharmony_ci .sensitivity = 65536 2138c2ecf20Sopenharmony_ci }, 2148c2ecf20Sopenharmony_ci .regs = { 2158c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x5A }, 2168c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 2178c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 2188c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x05 }, 2198c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 2208c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x85 }, 2218c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 2228c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 2238c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 2248c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 2258c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, /* CCP_LVDS_MODE/ */ 2268c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 2278c2ecf20Sopenharmony_ci } 2288c2ecf20Sopenharmony_ci}; 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci/* Mode4_SVGA_864x656_29.88fps */ 2318c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode4_svga_864x656_29_88fps = { 2328c2ecf20Sopenharmony_ci/* (without the +1) 2338c2ecf20Sopenharmony_ci * SPCK = 80 MHz 2348c2ecf20Sopenharmony_ci * CCP2 = 320 MHz 2358c2ecf20Sopenharmony_ci * VCO = 640 MHz 2368c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 2378c2ecf20Sopenharmony_ci * HCOUNT = 166 (3984) 2388c2ecf20Sopenharmony_ci * CKREF_DIV = 2 2398c2ecf20Sopenharmony_ci * CKVAR_DIV = 200 2408c2ecf20Sopenharmony_ci * VCO_DIV = 0 2418c2ecf20Sopenharmony_ci * SPCK_DIV = 7 2428c2ecf20Sopenharmony_ci * MRCK_DIV = 7 2438c2ecf20Sopenharmony_ci * LVDSCK_DIV = 1 2448c2ecf20Sopenharmony_ci */ 2458c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 2468c2ecf20Sopenharmony_ci .mode = { 2478c2ecf20Sopenharmony_ci .sensor_width = 2592, 2488c2ecf20Sopenharmony_ci .sensor_height = 1968, 2498c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 2508c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 2518c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 2528c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 2538c2ecf20Sopenharmony_ci .width = 3984, 2548c2ecf20Sopenharmony_ci .height = 672, 2558c2ecf20Sopenharmony_ci .window_origin_x = 0, 2568c2ecf20Sopenharmony_ci .window_origin_y = 0, 2578c2ecf20Sopenharmony_ci .window_width = 864, 2588c2ecf20Sopenharmony_ci .window_height = 656, 2598c2ecf20Sopenharmony_ci .pixel_clock = 80000000, 2608c2ecf20Sopenharmony_ci .ext_clock = 9600000, 2618c2ecf20Sopenharmony_ci .timeperframe = { 2628c2ecf20Sopenharmony_ci .numerator = 100, 2638c2ecf20Sopenharmony_ci .denominator = 2988 2648c2ecf20Sopenharmony_ci }, 2658c2ecf20Sopenharmony_ci .max_exp = 668, 2668c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 2678c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 2688c2ecf20Sopenharmony_ci .sensitivity = 65536 2698c2ecf20Sopenharmony_ci }, 2708c2ecf20Sopenharmony_ci .regs = { 2718c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 2728c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 2738c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 2748c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 2758c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x62 }, 2768c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x62 }, 2778c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 2788c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xA6 }, 2798c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 2808c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 2818c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 2828c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 2838c2ecf20Sopenharmony_ci } 2848c2ecf20Sopenharmony_ci}; 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_ci/* Mode5_VGA_648x492_29.93fps */ 2878c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode5_vga_648x492_29_93fps = { 2888c2ecf20Sopenharmony_ci/* (without the +1) 2898c2ecf20Sopenharmony_ci * SPCK = 80 MHz 2908c2ecf20Sopenharmony_ci * CCP2 = 320 MHz 2918c2ecf20Sopenharmony_ci * VCO = 640 MHz 2928c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 2938c2ecf20Sopenharmony_ci * HCOUNT = 221 (5304) 2948c2ecf20Sopenharmony_ci * CKREF_DIV = 2 2958c2ecf20Sopenharmony_ci * CKVAR_DIV = 200 2968c2ecf20Sopenharmony_ci * VCO_DIV = 0 2978c2ecf20Sopenharmony_ci * SPCK_DIV = 7 2988c2ecf20Sopenharmony_ci * MRCK_DIV = 7 2998c2ecf20Sopenharmony_ci * LVDSCK_DIV = 1 3008c2ecf20Sopenharmony_ci */ 3018c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 3028c2ecf20Sopenharmony_ci .mode = { 3038c2ecf20Sopenharmony_ci .sensor_width = 2592, 3048c2ecf20Sopenharmony_ci .sensor_height = 1968, 3058c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 3068c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 3078c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 3088c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 3098c2ecf20Sopenharmony_ci .width = 5304, 3108c2ecf20Sopenharmony_ci .height = 504, 3118c2ecf20Sopenharmony_ci .window_origin_x = 0, 3128c2ecf20Sopenharmony_ci .window_origin_y = 0, 3138c2ecf20Sopenharmony_ci .window_width = 648, 3148c2ecf20Sopenharmony_ci .window_height = 492, 3158c2ecf20Sopenharmony_ci .pixel_clock = 80000000, 3168c2ecf20Sopenharmony_ci .ext_clock = 9600000, 3178c2ecf20Sopenharmony_ci .timeperframe = { 3188c2ecf20Sopenharmony_ci .numerator = 100, 3198c2ecf20Sopenharmony_ci .denominator = 2993 3208c2ecf20Sopenharmony_ci }, 3218c2ecf20Sopenharmony_ci .max_exp = 500, 3228c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 3238c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 3248c2ecf20Sopenharmony_ci .sensitivity = 65536 3258c2ecf20Sopenharmony_ci }, 3268c2ecf20Sopenharmony_ci .regs = { 3278c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 3288c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 3298c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 3308c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 3318c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x61 }, 3328c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x61 }, 3338c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 3348c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xDD }, 3358c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 3368c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 3378c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 3388c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 3398c2ecf20Sopenharmony_ci } 3408c2ecf20Sopenharmony_ci}; 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_ci/* Mode2_16VGA_2592x1968_3.99fps */ 3438c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode2_16vga_2592x1968_3_99fps = { 3448c2ecf20Sopenharmony_ci/* (without the +1) 3458c2ecf20Sopenharmony_ci * SPCK = 80 MHz 3468c2ecf20Sopenharmony_ci * CCP2 = 640 MHz 3478c2ecf20Sopenharmony_ci * VCO = 640 MHz 3488c2ecf20Sopenharmony_ci * VCOUNT = 254 (6096) 3498c2ecf20Sopenharmony_ci * HCOUNT = 137 (3288) 3508c2ecf20Sopenharmony_ci * CKREF_DIV = 2 3518c2ecf20Sopenharmony_ci * CKVAR_DIV = 200 3528c2ecf20Sopenharmony_ci * VCO_DIV = 0 3538c2ecf20Sopenharmony_ci * SPCK_DIV = 7 3548c2ecf20Sopenharmony_ci * MRCK_DIV = 7 3558c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 3568c2ecf20Sopenharmony_ci */ 3578c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 3588c2ecf20Sopenharmony_ci .mode = { 3598c2ecf20Sopenharmony_ci .sensor_width = 2592, 3608c2ecf20Sopenharmony_ci .sensor_height = 1968, 3618c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 3628c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 3638c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 3648c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 3658c2ecf20Sopenharmony_ci .width = 3288, 3668c2ecf20Sopenharmony_ci .height = 6096, 3678c2ecf20Sopenharmony_ci .window_origin_x = 0, 3688c2ecf20Sopenharmony_ci .window_origin_y = 0, 3698c2ecf20Sopenharmony_ci .window_width = 2592, 3708c2ecf20Sopenharmony_ci .window_height = 1968, 3718c2ecf20Sopenharmony_ci .pixel_clock = 80000000, 3728c2ecf20Sopenharmony_ci .ext_clock = 9600000, 3738c2ecf20Sopenharmony_ci .timeperframe = { 3748c2ecf20Sopenharmony_ci .numerator = 100, 3758c2ecf20Sopenharmony_ci .denominator = 399 3768c2ecf20Sopenharmony_ci }, 3778c2ecf20Sopenharmony_ci .max_exp = 6092, 3788c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 3798c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 3808c2ecf20Sopenharmony_ci .sensitivity = 65536 3818c2ecf20Sopenharmony_ci }, 3828c2ecf20Sopenharmony_ci .regs = { 3838c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 3848c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 3858c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 3868c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x07 }, 3878c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x64 }, 3888c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x64 }, 3898c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 3908c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 3918c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 3928c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0xFE }, 3938c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 3948c2ecf20Sopenharmony_ci } 3958c2ecf20Sopenharmony_ci}; 3968c2ecf20Sopenharmony_ci 3978c2ecf20Sopenharmony_ci/* Mode_648x492_5fps */ 3988c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode_648x492_5fps = { 3998c2ecf20Sopenharmony_ci/* (without the +1) 4008c2ecf20Sopenharmony_ci * SPCK = 13.3333333333333 MHz 4018c2ecf20Sopenharmony_ci * CCP2 = 53.3333333333333 MHz 4028c2ecf20Sopenharmony_ci * VCO = 640 MHz 4038c2ecf20Sopenharmony_ci * VCOUNT = 84 (2016) 4048c2ecf20Sopenharmony_ci * HCOUNT = 221 (5304) 4058c2ecf20Sopenharmony_ci * CKREF_DIV = 2 4068c2ecf20Sopenharmony_ci * CKVAR_DIV = 200 4078c2ecf20Sopenharmony_ci * VCO_DIV = 5 4088c2ecf20Sopenharmony_ci * SPCK_DIV = 7 4098c2ecf20Sopenharmony_ci * MRCK_DIV = 7 4108c2ecf20Sopenharmony_ci * LVDSCK_DIV = 1 4118c2ecf20Sopenharmony_ci */ 4128c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 4138c2ecf20Sopenharmony_ci .mode = { 4148c2ecf20Sopenharmony_ci .sensor_width = 2592, 4158c2ecf20Sopenharmony_ci .sensor_height = 1968, 4168c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 4178c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 4188c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 4198c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 4208c2ecf20Sopenharmony_ci .width = 5304, 4218c2ecf20Sopenharmony_ci .height = 504, 4228c2ecf20Sopenharmony_ci .window_origin_x = 0, 4238c2ecf20Sopenharmony_ci .window_origin_y = 0, 4248c2ecf20Sopenharmony_ci .window_width = 648, 4258c2ecf20Sopenharmony_ci .window_height = 492, 4268c2ecf20Sopenharmony_ci .pixel_clock = 13333333, 4278c2ecf20Sopenharmony_ci .ext_clock = 9600000, 4288c2ecf20Sopenharmony_ci .timeperframe = { 4298c2ecf20Sopenharmony_ci .numerator = 100, 4308c2ecf20Sopenharmony_ci .denominator = 499 4318c2ecf20Sopenharmony_ci }, 4328c2ecf20Sopenharmony_ci .max_exp = 500, 4338c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 4348c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 4358c2ecf20Sopenharmony_ci .sensitivity = 65536 4368c2ecf20Sopenharmony_ci }, 4378c2ecf20Sopenharmony_ci .regs = { 4388c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x64 }, 4398c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 4408c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x71 }, 4418c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x57 }, 4428c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x61 }, 4438c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x61 }, 4448c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 4458c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0xDD }, 4468c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 4478c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x54 }, 4488c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 4498c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 4508c2ecf20Sopenharmony_ci } 4518c2ecf20Sopenharmony_ci}; 4528c2ecf20Sopenharmony_ci 4538c2ecf20Sopenharmony_ci/* Mode3_4VGA_1296x984_5fps */ 4548c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode3_4vga_1296x984_5fps = { 4558c2ecf20Sopenharmony_ci/* (without the +1) 4568c2ecf20Sopenharmony_ci * SPCK = 49.4 MHz 4578c2ecf20Sopenharmony_ci * CCP2 = 395.2 MHz 4588c2ecf20Sopenharmony_ci * VCO = 790.4 MHz 4598c2ecf20Sopenharmony_ci * VCOUNT = 250 (6000) 4608c2ecf20Sopenharmony_ci * HCOUNT = 137 (3288) 4618c2ecf20Sopenharmony_ci * CKREF_DIV = 2 4628c2ecf20Sopenharmony_ci * CKVAR_DIV = 247 4638c2ecf20Sopenharmony_ci * VCO_DIV = 1 4648c2ecf20Sopenharmony_ci * SPCK_DIV = 7 4658c2ecf20Sopenharmony_ci * MRCK_DIV = 7 4668c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 4678c2ecf20Sopenharmony_ci */ 4688c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 4698c2ecf20Sopenharmony_ci .mode = { 4708c2ecf20Sopenharmony_ci .sensor_width = 2592, 4718c2ecf20Sopenharmony_ci .sensor_height = 1968, 4728c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 4738c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 4748c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 4758c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 4768c2ecf20Sopenharmony_ci .width = 3288, 4778c2ecf20Sopenharmony_ci .height = 3000, 4788c2ecf20Sopenharmony_ci .window_origin_x = 0, 4798c2ecf20Sopenharmony_ci .window_origin_y = 0, 4808c2ecf20Sopenharmony_ci .window_width = 1296, 4818c2ecf20Sopenharmony_ci .window_height = 984, 4828c2ecf20Sopenharmony_ci .pixel_clock = 49400000, 4838c2ecf20Sopenharmony_ci .ext_clock = 9600000, 4848c2ecf20Sopenharmony_ci .timeperframe = { 4858c2ecf20Sopenharmony_ci .numerator = 100, 4868c2ecf20Sopenharmony_ci .denominator = 501 4878c2ecf20Sopenharmony_ci }, 4888c2ecf20Sopenharmony_ci .max_exp = 2996, 4898c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 4908c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_1X10, 4918c2ecf20Sopenharmony_ci .sensitivity = 65536 4928c2ecf20Sopenharmony_ci }, 4938c2ecf20Sopenharmony_ci .regs = { 4948c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x7B }, 4958c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x82 }, 4968c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 4978c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x17 }, 4988c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 4998c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 5008c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 5018c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x89 }, 5028c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 5038c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0xFA }, 5048c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x88 }, /* CCP_LVDS_MODE/ */ 5058c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 5068c2ecf20Sopenharmony_ci } 5078c2ecf20Sopenharmony_ci}; 5088c2ecf20Sopenharmony_ci 5098c2ecf20Sopenharmony_ci/* Mode_4VGA_1296x984_25fps_DPCM10-8 */ 5108c2ecf20Sopenharmony_cistatic struct et8ek8_reglist mode_4vga_1296x984_25fps_dpcm10_8 = { 5118c2ecf20Sopenharmony_ci/* (without the +1) 5128c2ecf20Sopenharmony_ci * SPCK = 84.2666666666667 MHz 5138c2ecf20Sopenharmony_ci * CCP2 = 505.6 MHz 5148c2ecf20Sopenharmony_ci * VCO = 505.6 MHz 5158c2ecf20Sopenharmony_ci * VCOUNT = 88 (2112) 5168c2ecf20Sopenharmony_ci * HCOUNT = 133 (3192) 5178c2ecf20Sopenharmony_ci * CKREF_DIV = 2 5188c2ecf20Sopenharmony_ci * CKVAR_DIV = 158 5198c2ecf20Sopenharmony_ci * VCO_DIV = 0 5208c2ecf20Sopenharmony_ci * SPCK_DIV = 5 5218c2ecf20Sopenharmony_ci * MRCK_DIV = 7 5228c2ecf20Sopenharmony_ci * LVDSCK_DIV = 0 5238c2ecf20Sopenharmony_ci */ 5248c2ecf20Sopenharmony_ci .type = ET8EK8_REGLIST_MODE, 5258c2ecf20Sopenharmony_ci .mode = { 5268c2ecf20Sopenharmony_ci .sensor_width = 2592, 5278c2ecf20Sopenharmony_ci .sensor_height = 1968, 5288c2ecf20Sopenharmony_ci .sensor_window_origin_x = 0, 5298c2ecf20Sopenharmony_ci .sensor_window_origin_y = 0, 5308c2ecf20Sopenharmony_ci .sensor_window_width = 2592, 5318c2ecf20Sopenharmony_ci .sensor_window_height = 1968, 5328c2ecf20Sopenharmony_ci .width = 3192, 5338c2ecf20Sopenharmony_ci .height = 1056, 5348c2ecf20Sopenharmony_ci .window_origin_x = 0, 5358c2ecf20Sopenharmony_ci .window_origin_y = 0, 5368c2ecf20Sopenharmony_ci .window_width = 1296, 5378c2ecf20Sopenharmony_ci .window_height = 984, 5388c2ecf20Sopenharmony_ci .pixel_clock = 84266667, 5398c2ecf20Sopenharmony_ci .ext_clock = 9600000, 5408c2ecf20Sopenharmony_ci .timeperframe = { 5418c2ecf20Sopenharmony_ci .numerator = 100, 5428c2ecf20Sopenharmony_ci .denominator = 2500 5438c2ecf20Sopenharmony_ci }, 5448c2ecf20Sopenharmony_ci .max_exp = 1052, 5458c2ecf20Sopenharmony_ci /* .max_gain = 0, */ 5468c2ecf20Sopenharmony_ci .bus_format = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, 5478c2ecf20Sopenharmony_ci .sensitivity = 65536 5488c2ecf20Sopenharmony_ci }, 5498c2ecf20Sopenharmony_ci .regs = { 5508c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1239, 0x4F }, 5518c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1238, 0x02 }, 5528c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123B, 0x70 }, 5538c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x123A, 0x05 }, 5548c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121B, 0x63 }, 5558c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1220, 0x85 }, 5568c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1221, 0x00 }, 5578c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1222, 0x58 }, 5588c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x1223, 0x00 }, 5598c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x121D, 0x63 }, 5608c2ecf20Sopenharmony_ci { ET8EK8_REG_8BIT, 0x125D, 0x83 }, 5618c2ecf20Sopenharmony_ci { ET8EK8_REG_TERM, 0, 0} 5628c2ecf20Sopenharmony_ci } 5638c2ecf20Sopenharmony_ci}; 5648c2ecf20Sopenharmony_ci 5658c2ecf20Sopenharmony_cistruct et8ek8_meta_reglist meta_reglist = { 5668c2ecf20Sopenharmony_ci .version = "V14 03-June-2008", 5678c2ecf20Sopenharmony_ci .reglist = { 5688c2ecf20Sopenharmony_ci { .ptr = &mode1_poweron_mode2_16vga_2592x1968_12_07fps }, 5698c2ecf20Sopenharmony_ci { .ptr = &mode1_16vga_2592x1968_13_12fps_dpcm10_8 }, 5708c2ecf20Sopenharmony_ci { .ptr = &mode3_4vga_1296x984_29_99fps_dpcm10_8 }, 5718c2ecf20Sopenharmony_ci { .ptr = &mode4_svga_864x656_29_88fps }, 5728c2ecf20Sopenharmony_ci { .ptr = &mode5_vga_648x492_29_93fps }, 5738c2ecf20Sopenharmony_ci { .ptr = &mode2_16vga_2592x1968_3_99fps }, 5748c2ecf20Sopenharmony_ci { .ptr = &mode_648x492_5fps }, 5758c2ecf20Sopenharmony_ci { .ptr = &mode3_4vga_1296x984_5fps }, 5768c2ecf20Sopenharmony_ci { .ptr = &mode_4vga_1296x984_25fps_dpcm10_8 }, 5778c2ecf20Sopenharmony_ci { .ptr = NULL } 5788c2ecf20Sopenharmony_ci } 5798c2ecf20Sopenharmony_ci}; 580