]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/staging/dream/camera/mt9d112_reg.c
c52e96f47141f8b9a977ff67b83f822d5be9f957
[net-next-2.6.git] / drivers / staging / dream / camera / mt9d112_reg.c
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