2 * Copyright (C) 2008-2009 QUALCOMM Incorporated.
7 struct register_address_value_pair
8 preview_snapshot_mode_reg_settings_array[] = {
10 {0x3390, 800}, /* Output Width (P) = 640 */
12 {0x3390, 600}, /* Output Height (P) = 480 */
14 {0x3390, 0x0640}, /* Output Width (S) = 1600 */
16 {0x3390, 0x04B0}, /* Output Height (S) = 1200 */
18 {0x3390, 0x0000}, /* Row Start (P) = 0 */
20 {0x3390, 0x0000}, /* Column Start (P) = 0 */
22 {0x3390, 0x04BD}, /* Row End (P) = 1213 */
24 {0x3390, 0x064D}, /* Column End (P) = 1613 */
26 {0x3390, 0x0000}, /* Extra Delay (P) = 0 */
28 {0x3390, 0x2111}, /* Row Speed (P) = 8465 */
30 {0x3390, 0x046C}, /* Read Mode (P) = 1132 */
32 {0x3390, 0x024F}, /* Sensor_Sample_Time_pck(P) = 591 */
34 {0x3390, 0x0102}, /* Sensor_Fine_Correction(P) = 258 */
36 {0x3390, 0x0279}, /* Sensor_Fine_IT_min(P) = 633 */
38 {0x3390, 0x0155}, /* Sensor_Fine_IT_max_margin(P) = 341 */
40 {0x3390, 659}, /* Frame Lines (P) = 679 */
42 {0x3390, 0x0824}, /* Line Length (P) = 2084 */
52 {0x3390, 0x0004}, /* Row Start(S) = 4 */
54 {0x3390, 0x0004}, /* Column Start(S) = 4 */
56 {0x3390, 0x04BB}, /* Row End(S) = 1211 */
58 {0x3390, 0x064B}, /* Column End(S) = 1611 */
60 {0x3390, 0x04CE}, /* Extra Delay(S) = 1230 */
62 {0x3390, 0x2111}, /* Row Speed(S) = 8465 */
64 {0x3390, 0x0024}, /* Read Mode(S) = 36 */
66 {0x3390, 0x0120}, /* Sensor sample time pck(S) = 288 */
68 {0x3390, 0x0169}, /* Sensor_Fine_IT_min(P) = 361 */
70 {0x3390, 0x04FF}, /* Frame Lines(S) = 1279 */
72 {0x3390, 0x0824}, /* Line Length(S) = 2084 */
74 {0x3390, 0x0000}, /* Crop_X0(P) = 0 */
76 {0x3390, 0x0320}, /* Crop_X1(P) = 800 */
78 {0x3390, 0x0000}, /* Crop_Y0(P) = 0 */
80 {0x3390, 0x0258}, /* Crop_Y1(P) = 600 */
82 {0x3390, 0x0000}, /* Crop_X0(S) = 0 */
84 {0x3390, 0x0640}, /* Crop_X1(S) = 1600 */
86 {0x3390, 0x0000}, /* Crop_Y0(S) = 0 */
88 {0x3390, 0x04B0}, /* Crop_Y1(S) = 1200 */
90 {0x3390, 0x00A0}, /* R9 Step = 160 */
108 {0x3390, 0x6408}, /* MODE_SPEC_EFFECTS(P) */
110 {0x3390, 0x6408}, /* MODE_SPEC_EFFECTS(S) */
113 static struct register_address_value_pair
114 noise_reduction_reg_settings_array[] = {
197 static const struct mt9d112_i2c_reg_conf const lens_roll_off_tbl[] = {
198 { 0x34CE, 0x81A0, WORD_LEN, 0 },
199 { 0x34D0, 0x6331, WORD_LEN, 0 },
200 { 0x34D2, 0x3394, WORD_LEN, 0 },
201 { 0x34D4, 0x9966, WORD_LEN, 0 },
202 { 0x34D6, 0x4B25, WORD_LEN, 0 },
203 { 0x34D8, 0x2670, WORD_LEN, 0 },
204 { 0x34DA, 0x724C, WORD_LEN, 0 },
205 { 0x34DC, 0xFFFD, WORD_LEN, 0 },
206 { 0x34DE, 0x00CA, WORD_LEN, 0 },
207 { 0x34E6, 0x00AC, WORD_LEN, 0 },
208 { 0x34EE, 0x0EE1, WORD_LEN, 0 },
209 { 0x34F6, 0x0D87, WORD_LEN, 0 },
210 { 0x3500, 0xE1F7, WORD_LEN, 0 },
211 { 0x3508, 0x1CF4, WORD_LEN, 0 },
212 { 0x3510, 0x1D28, WORD_LEN, 0 },
213 { 0x3518, 0x1F26, WORD_LEN, 0 },
214 { 0x3520, 0x2220, WORD_LEN, 0 },
215 { 0x3528, 0x333D, WORD_LEN, 0 },
216 { 0x3530, 0x15D9, WORD_LEN, 0 },
217 { 0x3538, 0xCFB8, WORD_LEN, 0 },
218 { 0x354C, 0x05FE, WORD_LEN, 0 },
219 { 0x3544, 0x05F8, WORD_LEN, 0 },
220 { 0x355C, 0x0596, WORD_LEN, 0 },
221 { 0x3554, 0x0611, WORD_LEN, 0 },
222 { 0x34E0, 0x00F2, WORD_LEN, 0 },
223 { 0x34E8, 0x00A8, WORD_LEN, 0 },
224 { 0x34F0, 0x0F7B, WORD_LEN, 0 },
225 { 0x34F8, 0x0CD7, WORD_LEN, 0 },
226 { 0x3502, 0xFEDB, WORD_LEN, 0 },
227 { 0x350A, 0x13E4, WORD_LEN, 0 },
228 { 0x3512, 0x1F2C, WORD_LEN, 0 },
229 { 0x351A, 0x1D20, WORD_LEN, 0 },
230 { 0x3522, 0x2422, WORD_LEN, 0 },
231 { 0x352A, 0x2925, WORD_LEN, 0 },
232 { 0x3532, 0x1D04, WORD_LEN, 0 },
233 { 0x353A, 0xFBF2, WORD_LEN, 0 },
234 { 0x354E, 0x0616, WORD_LEN, 0 },
235 { 0x3546, 0x0597, WORD_LEN, 0 },
236 { 0x355E, 0x05CD, WORD_LEN, 0 },
237 { 0x3556, 0x0529, WORD_LEN, 0 },
238 { 0x34E4, 0x00B2, WORD_LEN, 0 },
239 { 0x34EC, 0x005E, WORD_LEN, 0 },
240 { 0x34F4, 0x0F43, WORD_LEN, 0 },
241 { 0x34FC, 0x0E2F, WORD_LEN, 0 },
242 { 0x3506, 0xF9FC, WORD_LEN, 0 },
243 { 0x350E, 0x0CE4, WORD_LEN, 0 },
244 { 0x3516, 0x1E1E, WORD_LEN, 0 },
245 { 0x351E, 0x1B19, WORD_LEN, 0 },
246 { 0x3526, 0x151B, WORD_LEN, 0 },
247 { 0x352E, 0x1416, WORD_LEN, 0 },
248 { 0x3536, 0x10FC, WORD_LEN, 0 },
249 { 0x353E, 0xC018, WORD_LEN, 0 },
250 { 0x3552, 0x06B4, WORD_LEN, 0 },
251 { 0x354A, 0x0506, WORD_LEN, 0 },
252 { 0x3562, 0x06AB, WORD_LEN, 0 },
253 { 0x355A, 0x063A, WORD_LEN, 0 },
254 { 0x34E2, 0x00E5, WORD_LEN, 0 },
255 { 0x34EA, 0x008B, WORD_LEN, 0 },
256 { 0x34F2, 0x0E4C, WORD_LEN, 0 },
257 { 0x34FA, 0x0CA3, WORD_LEN, 0 },
258 { 0x3504, 0x0907, WORD_LEN, 0 },
259 { 0x350C, 0x1DFD, WORD_LEN, 0 },
260 { 0x3514, 0x1E24, WORD_LEN, 0 },
261 { 0x351C, 0x2529, WORD_LEN, 0 },
262 { 0x3524, 0x1D20, WORD_LEN, 0 },
263 { 0x352C, 0x2332, WORD_LEN, 0 },
264 { 0x3534, 0x10E9, WORD_LEN, 0 },
265 { 0x353C, 0x0BCB, WORD_LEN, 0 },
266 { 0x3550, 0x04EF, WORD_LEN, 0 },
267 { 0x3548, 0x0609, WORD_LEN, 0 },
268 { 0x3560, 0x0580, WORD_LEN, 0 },
269 { 0x3558, 0x05DD, WORD_LEN, 0 },
270 { 0x3540, 0x0000, WORD_LEN, 0 },
271 { 0x3542, 0x0000, WORD_LEN, 0 }
274 static const struct mt9d112_i2c_reg_conf const pll_setup_tbl[] = {
275 { 0x341E, 0x8F09, WORD_LEN, 0 },
276 { 0x341C, 0x0250, WORD_LEN, 0 },
277 { 0x341E, 0x8F09, WORD_LEN, 5 },
278 { 0x341E, 0x8F08, WORD_LEN, 0 }
281 /* Refresh Sequencer */
282 static const struct mt9d112_i2c_reg_conf const sequencer_tbl[] = {
283 { 0x338C, 0x2799, WORD_LEN, 0},
284 { 0x3390, 0x6440, WORD_LEN, 5},
285 { 0x338C, 0x279B, WORD_LEN, 0},
286 { 0x3390, 0x6440, WORD_LEN, 5},
287 { 0x338C, 0xA103, WORD_LEN, 0},
288 { 0x3390, 0x0005, WORD_LEN, 5},
289 { 0x338C, 0xA103, WORD_LEN, 0},
290 { 0x3390, 0x0006, WORD_LEN, 5}
293 struct mt9d112_reg mt9d112_regs = {
294 .prev_snap_reg_settings = &preview_snapshot_mode_reg_settings_array[0],
295 .prev_snap_reg_settings_size = ARRAY_SIZE(preview_snapshot_mode_reg_settings_array),
296 .noise_reduction_reg_settings = &noise_reduction_reg_settings_array[0],
297 .noise_reduction_reg_settings_size = ARRAY_SIZE(noise_reduction_reg_settings_array),
298 .plltbl = pll_setup_tbl,
299 .plltbl_size = ARRAY_SIZE(pll_setup_tbl),
300 .stbl = sequencer_tbl,
301 .stbl_size = ARRAY_SIZE(sequencer_tbl),
302 .rftbl = lens_roll_off_tbl,
303 .rftbl_size = ARRAY_SIZE(lens_roll_off_tbl)