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