]>
Commit | Line | Data |
---|---|---|
eb7b797b BS |
1 | /* |
2 | * Copyright (C) 2008-2009 QUALCOMM Incorporated. | |
3 | */ | |
4 | ||
5 | #include "mt9d112.h" | |
6 | ||
7 | struct register_address_value_pair | |
8 | preview_snapshot_mode_reg_settings_array[] = { | |
9 | {0x338C, 0x2703}, | |
10 | {0x3390, 800}, /* Output Width (P) = 640 */ | |
11 | {0x338C, 0x2705}, | |
12 | {0x3390, 600}, /* Output Height (P) = 480 */ | |
13 | {0x338C, 0x2707}, | |
14 | {0x3390, 0x0640}, /* Output Width (S) = 1600 */ | |
15 | {0x338C, 0x2709}, | |
16 | {0x3390, 0x04B0}, /* Output Height (S) = 1200 */ | |
17 | {0x338C, 0x270D}, | |
18 | {0x3390, 0x0000}, /* Row Start (P) = 0 */ | |
19 | {0x338C, 0x270F}, | |
20 | {0x3390, 0x0000}, /* Column Start (P) = 0 */ | |
21 | {0x338C, 0x2711}, | |
22 | {0x3390, 0x04BD}, /* Row End (P) = 1213 */ | |
23 | {0x338C, 0x2713}, | |
24 | {0x3390, 0x064D}, /* Column End (P) = 1613 */ | |
25 | {0x338C, 0x2715}, | |
26 | {0x3390, 0x0000}, /* Extra Delay (P) = 0 */ | |
27 | {0x338C, 0x2717}, | |
28 | {0x3390, 0x2111}, /* Row Speed (P) = 8465 */ | |
29 | {0x338C, 0x2719}, | |
30 | {0x3390, 0x046C}, /* Read Mode (P) = 1132 */ | |
31 | {0x338C, 0x271B}, | |
32 | {0x3390, 0x024F}, /* Sensor_Sample_Time_pck(P) = 591 */ | |
33 | {0x338C, 0x271D}, | |
34 | {0x3390, 0x0102}, /* Sensor_Fine_Correction(P) = 258 */ | |
35 | {0x338C, 0x271F}, | |
36 | {0x3390, 0x0279}, /* Sensor_Fine_IT_min(P) = 633 */ | |
37 | {0x338C, 0x2721}, | |
38 | {0x3390, 0x0155}, /* Sensor_Fine_IT_max_margin(P) = 341 */ | |
39 | {0x338C, 0x2723}, | |
40 | {0x3390, 659}, /* Frame Lines (P) = 679 */ | |
41 | {0x338C, 0x2725}, | |
42 | {0x3390, 0x0824}, /* Line Length (P) = 2084 */ | |
43 | {0x338C, 0x2727}, | |
44 | {0x3390, 0x2020}, | |
45 | {0x338C, 0x2729}, | |
46 | {0x3390, 0x2020}, | |
47 | {0x338C, 0x272B}, | |
48 | {0x3390, 0x1020}, | |
49 | {0x338C, 0x272D}, | |
50 | {0x3390, 0x2007}, | |
51 | {0x338C, 0x272F}, | |
52 | {0x3390, 0x0004}, /* Row Start(S) = 4 */ | |
53 | {0x338C, 0x2731}, | |
54 | {0x3390, 0x0004}, /* Column Start(S) = 4 */ | |
55 | {0x338C, 0x2733}, | |
56 | {0x3390, 0x04BB}, /* Row End(S) = 1211 */ | |
57 | {0x338C, 0x2735}, | |
58 | {0x3390, 0x064B}, /* Column End(S) = 1611 */ | |
59 | {0x338C, 0x2737}, | |
60 | {0x3390, 0x04CE}, /* Extra Delay(S) = 1230 */ | |
61 | {0x338C, 0x2739}, | |
62 | {0x3390, 0x2111}, /* Row Speed(S) = 8465 */ | |
63 | {0x338C, 0x273B}, | |
64 | {0x3390, 0x0024}, /* Read Mode(S) = 36 */ | |
65 | {0x338C, 0x273D}, | |
66 | {0x3390, 0x0120}, /* Sensor sample time pck(S) = 288 */ | |
67 | {0x338C, 0x2741}, | |
68 | {0x3390, 0x0169}, /* Sensor_Fine_IT_min(P) = 361 */ | |
69 | {0x338C, 0x2745}, | |
70 | {0x3390, 0x04FF}, /* Frame Lines(S) = 1279 */ | |
71 | {0x338C, 0x2747}, | |
72 | {0x3390, 0x0824}, /* Line Length(S) = 2084 */ | |
73 | {0x338C, 0x2751}, | |
74 | {0x3390, 0x0000}, /* Crop_X0(P) = 0 */ | |
75 | {0x338C, 0x2753}, | |
76 | {0x3390, 0x0320}, /* Crop_X1(P) = 800 */ | |
77 | {0x338C, 0x2755}, | |
78 | {0x3390, 0x0000}, /* Crop_Y0(P) = 0 */ | |
79 | {0x338C, 0x2757}, | |
80 | {0x3390, 0x0258}, /* Crop_Y1(P) = 600 */ | |
81 | {0x338C, 0x275F}, | |
82 | {0x3390, 0x0000}, /* Crop_X0(S) = 0 */ | |
83 | {0x338C, 0x2761}, | |
84 | {0x3390, 0x0640}, /* Crop_X1(S) = 1600 */ | |
85 | {0x338C, 0x2763}, | |
86 | {0x3390, 0x0000}, /* Crop_Y0(S) = 0 */ | |
87 | {0x338C, 0x2765}, | |
88 | {0x3390, 0x04B0}, /* Crop_Y1(S) = 1200 */ | |
89 | {0x338C, 0x222E}, | |
90 | {0x3390, 0x00A0}, /* R9 Step = 160 */ | |
91 | {0x338C, 0xA408}, | |
92 | {0x3390, 0x001F}, | |
93 | {0x338C, 0xA409}, | |
94 | {0x3390, 0x0021}, | |
95 | {0x338C, 0xA40A}, | |
96 | {0x3390, 0x0025}, | |
97 | {0x338C, 0xA40B}, | |
98 | {0x3390, 0x0027}, | |
99 | {0x338C, 0x2411}, | |
100 | {0x3390, 0x00A0}, | |
101 | {0x338C, 0x2413}, | |
102 | {0x3390, 0x00C0}, | |
103 | {0x338C, 0x2415}, | |
104 | {0x3390, 0x00A0}, | |
105 | {0x338C, 0x2417}, | |
106 | {0x3390, 0x00C0}, | |
107 | {0x338C, 0x2799}, | |
108 | {0x3390, 0x6408}, /* MODE_SPEC_EFFECTS(P) */ | |
109 | {0x338C, 0x279B}, | |
110 | {0x3390, 0x6408}, /* MODE_SPEC_EFFECTS(S) */ | |
111 | }; | |
112 | ||
113 | static struct register_address_value_pair | |
114 | noise_reduction_reg_settings_array[] = { | |
115 | {0x338C, 0xA76D}, | |
116 | {0x3390, 0x0003}, | |
117 | {0x338C, 0xA76E}, | |
118 | {0x3390, 0x0003}, | |
119 | {0x338C, 0xA76F}, | |
120 | {0x3390, 0}, | |
121 | {0x338C, 0xA770}, | |
122 | {0x3390, 21}, | |
123 | {0x338C, 0xA771}, | |
124 | {0x3390, 37}, | |
125 | {0x338C, 0xA772}, | |
126 | {0x3390, 63}, | |
127 | {0x338C, 0xA773}, | |
128 | {0x3390, 100}, | |
129 | {0x338C, 0xA774}, | |
130 | {0x3390, 128}, | |
131 | {0x338C, 0xA775}, | |
132 | {0x3390, 151}, | |
133 | {0x338C, 0xA776}, | |
134 | {0x3390, 169}, | |
135 | {0x338C, 0xA777}, | |
136 | {0x3390, 186}, | |
137 | {0x338C, 0xA778}, | |
138 | {0x3390, 199}, | |
139 | {0x338C, 0xA779}, | |
140 | {0x3390, 210}, | |
141 | {0x338C, 0xA77A}, | |
142 | {0x3390, 220}, | |
143 | {0x338C, 0xA77B}, | |
144 | {0x3390, 228}, | |
145 | {0x338C, 0xA77C}, | |
146 | {0x3390, 234}, | |
147 | {0x338C, 0xA77D}, | |
148 | {0x3390, 240}, | |
149 | {0x338C, 0xA77E}, | |
150 | {0x3390, 244}, | |
151 | {0x338C, 0xA77F}, | |
152 | {0x3390, 248}, | |
153 | {0x338C, 0xA780}, | |
154 | {0x3390, 252}, | |
155 | {0x338C, 0xA781}, | |
156 | {0x3390, 255}, | |
157 | {0x338C, 0xA782}, | |
158 | {0x3390, 0}, | |
159 | {0x338C, 0xA783}, | |
160 | {0x3390, 21}, | |
161 | {0x338C, 0xA784}, | |
162 | {0x3390, 37}, | |
163 | {0x338C, 0xA785}, | |
164 | {0x3390, 63}, | |
165 | {0x338C, 0xA786}, | |
166 | {0x3390, 100}, | |
167 | {0x338C, 0xA787}, | |
168 | {0x3390, 128}, | |
169 | {0x338C, 0xA788}, | |
170 | {0x3390, 151}, | |
171 | {0x338C, 0xA789}, | |
172 | {0x3390, 169}, | |
173 | {0x338C, 0xA78A}, | |
174 | {0x3390, 186}, | |
175 | {0x338C, 0xA78B}, | |
176 | {0x3390, 199}, | |
177 | {0x338C, 0xA78C}, | |
178 | {0x3390, 210}, | |
179 | {0x338C, 0xA78D}, | |
180 | {0x3390, 220}, | |
181 | {0x338C, 0xA78E}, | |
182 | {0x3390, 228}, | |
183 | {0x338C, 0xA78F}, | |
184 | {0x3390, 234}, | |
185 | {0x338C, 0xA790}, | |
186 | {0x3390, 240}, | |
187 | {0x338C, 0xA791}, | |
188 | {0x3390, 244}, | |
189 | {0x338C, 0xA793}, | |
190 | {0x3390, 252}, | |
191 | {0x338C, 0xA794}, | |
192 | {0x3390, 255}, | |
193 | {0x338C, 0xA103}, | |
194 | {0x3390, 6}, | |
195 | }; | |
196 | ||
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 } | |
272 | }; | |
273 | ||
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 } | |
279 | }; | |
280 | ||
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} | |
291 | }; | |
292 | ||
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) | |
304 | }; | |
305 | ||
306 | ||
307 |