5c4ffd9d42f89b1c50f2c1e1a205e065ca2f5f40
[linux-2.6.git] / include / media / sh532u.h
1 /*
2  * Copyright (C) 2011 NVIDIA Corporation.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
16  * 02111-1307, USA
17  */
18
19 #ifndef __SH532U_H__
20 #define __SH532U_H__
21
22 #include <linux/ioctl.h> /* For IOCTL macros */
23
24 #define SH532U_IOCTL_GET_CONFIG         _IOR('o', 1, struct sh532u_config)
25 #define SH532U_IOCTL_SET_POSITION       _IOW('o', 2, u32)
26 #define SH532U_IOCTL_GET_MOVE_STATUS    _IOW('o', 3, unsigned char)
27
28 enum sh532u_move_status {
29         SH532U_STATE_UNKNOWN = 1,
30         SH532U_WAIT_FOR_MOVE_END,
31         SH532U_WAIT_FOR_SETTLE,
32         SH532U_LENS_SETTLED,
33         SH532U_Forced32 = 0x7FFFFFFF
34 };
35
36 struct sh532u_config {
37         __u32 settle_time;
38         __u32 focal_length;
39         __u32 fnumber;
40         s16 pos_low;
41         s16 pos_high;
42         s16 limit_low;
43         s16 limit_high;
44 };
45
46 struct sh532u_platform_data {
47         void *context_data;
48         int (*board_init)(void *context_data);
49         int (*board_deinit)(void *context_data);
50 };
51 /* Register Definition  : Sany Driver IC */
52 /* EEPROM addresses */
53 #define addrHallOffset          0x10
54 #define addrHallBias            0x11
55 #define addrInf1                0x12
56 #define addrMac1                0x13
57 #define addrLoopGainH           0x14
58 #define addrLoopGainL           0x15
59 #define addrInf2                0x16
60 #define addrMac2                0x17
61
62 #define addrInf1_H              0x20 /* bottom mechanical limit of HVCA */
63 #define addrInf1_L              0x21
64 #define addrMac1_H              0x22 /* top mechanical limit of HVCA */
65 #define addrMac1_L              0x23
66 #define addrInf2_H              0x24 /* lens position when object is ?120cm */
67 #define addrInf2_L              0x25
68 #define addrMac2_H              0x26 /* lens position when object is ?10cm */
69 #define addrMac2_L              0x27
70 #define addrDacDeltaUp_H        0x28 /* difference between face up and down */
71 #define addrDacDeltaUp_L        0x29
72 #define addrAFoffset_H          0x2A /* best focus position subtract value */
73 #define addrAFoffset_L          0x2B
74
75 /* Convergence Judgement */
76 #define INI_MSSET_211           0x00
77 #define CHTGOKN_TIME            0x80
78 #define CHTGOKN_WAIT            1
79 #define CHTGOKN_TIMEOUT         50
80 #define CHTGSTOKN_TOMEOUT       15
81
82 /* StepMove */
83 #define STMV_SIZE               0x0180
84
85 #define STMCHTG_ON              0x08
86 #define STMSV_ON                0x04
87 #define STMLFF_ON               0x02
88 #define STMVEN_ON               0x01
89 #define STMCHTG_OFF             0x00
90 #define STMSV_OFF               0x00
91 #define STMLFF_OFF              0x00
92 #define STMVEN_OFF              0x00
93
94 #define STMCHTG_SET             STMCHTG_ON
95 #define STMSV_SET               STMSV_ON
96 #define STMLFF_SET              STMLFF_OFF
97
98 #define CHTGST_ON               0x01
99 #define DEFAULT_DADAT           0x8040
100
101 /* Delay RAM 00h ~ 3Fh */
102 #define ADHXI_211H              0x00
103 #define ADHXI_211L              0x01
104 #define PIDZO_211H              0x02
105 #define PIDZO_211L              0x03
106 #define RZ_211H         0x04
107 #define RZ_211L         0x05
108 #define DZ1_211H                0x06
109 #define DZ1_211L                0x07
110 #define DZ2_211H                0x08
111 #define DZ2_211L                0x09
112 #define UZ1_211H                0x0A
113 #define UZ1_211L                0x0B
114 #define UZ2_211H                0x0C
115 #define UZ2_211L                0x0D
116 #define IZ1_211H                0x0E
117 #define IZ1_211L                0x0F
118 #define IZ2_211H                0x10
119 #define IZ2_211L                0x11
120 #define MS1Z01_211H             0x12
121 #define MS1Z01_211L             0x13
122 #define MS1Z11_211H             0x14
123 #define MS1Z11_211L             0x15
124 #define MS1Z12_211H             0x16
125 #define MS1Z12_211L             0x17
126 #define MS1Z22_211H             0x18
127 #define MS1Z22_211L             0x19
128 #define MS2Z01_211H             0x1A
129 #define MS2Z01_211L             0x1B
130 #define MS2Z11_211H             0x1C
131 #define MS2Z11_211L             0x1D
132 #define MS2Z12_211H             0x1E
133 #define MS2Z12_211L             0x1F
134 #define MS2Z22_211H             0x20
135 #define MS2Z22_211L             0x21
136 #define MS2Z23_211H             0x22
137 #define MS2Z23_211L             0x23
138 #define OZ1_211H                0x24
139 #define OZ1_211L                0x25
140 #define OZ2_211H                0x26
141 #define OZ2_211L                0x27
142 #define DAHLXO_211H             0x28
143 #define DAHLXO_211L             0x29
144 #define OZ3_211H                0x2A
145 #define OZ3_211L                0x2B
146 #define OZ4_211H                0x2C
147 #define OZ4_211L                0x2D
148 #define OZ5_211H                0x2E
149 #define OZ5_211L                0x2F
150 #define oe_211H         0x30
151 #define oe_211L         0x31
152 #define MSR1CMAX_211H           0x32
153 #define MSR1CMAX_211L           0x33
154 #define MSR1CMIN_211H           0x34
155 #define MSR1CMIN_211L           0x35
156 #define MSR2CMAX_211H           0x36
157 #define MSR2CMAX_211L           0x37
158 #define MSR2CMIN_211H           0x38
159 #define MSR2CMIN_211L           0x39
160 #define OFFSET_211H             0x3A
161 #define OFFSET_211L             0x3B
162 #define ADOFFSET_211H           0x3C
163 #define ADOFFSET_211L           0x3D
164 #define EZ_211H         0x3E
165 #define EZ_211L         0x3F
166
167 /* Coefficient RAM 40h ~ 7Fh */
168 #define ag_211H         0x40
169 #define ag_211L         0x41
170 #define da_211H         0x42
171 #define da_211L         0x43
172 #define db_211H         0x44
173 #define db_211L         0x45
174 #define dc_211H         0x46
175 #define dc_211L         0x47
176 #define dg_211H         0x48
177 #define dg_211L         0x49
178 #define pg_211H         0x4A
179 #define pg_211L         0x4B
180 #define gain1_211H              0x4C
181 #define gain1_211L              0x4D
182 #define gain2_211H              0x4E
183 #define gain2_211L              0x4F
184 #define ua_211H         0x50
185 #define ua_211L         0x51
186 #define uc_211H         0x52
187 #define uc_211L         0x53
188 #define ia_211H         0x54
189 #define ia_211L         0x55
190 #define ib_211H         0x56
191 #define ib_211L         0x57
192 #define i_c_211H                0x58
193 #define i_c_211L                0x59
194 #define ms11a_211H              0x5A
195 #define ms11a_211L              0x5B
196 #define ms11c_211H              0x5C
197 #define ms11c_211L              0x5D
198 #define ms12a_211H              0x5E
199 #define ms12a_211L              0x5F
200 #define ms12c_211H              0x60
201 #define ms12c_211L              0x61
202 #define ms21a_211H              0x62
203 #define ms21a_211L              0x63
204 #define ms21b_211H              0x64
205 #define ms21b_211L              0x65
206 #define ms21c_211H              0x66
207 #define ms21c_211L              0x67
208 #define ms22a_211H              0x68
209 #define ms22a_211L              0x69
210 #define ms22c_211H              0x6A
211 #define ms22c_211L              0x6B
212 #define ms22d_211H              0x6C
213 #define ms22d_211L              0x6D
214 #define ms22e_211H              0x6E
215 #define ms22e_211L              0x6F
216 #define ms23p_211H              0x70
217 #define ms23p_211L              0x71
218 #define oa_211H         0x72
219 #define oa_211L         0x73
220 #define oc_211H         0x74
221 #define oc_211L         0x75
222 #define PX12_211H               0x76
223 #define PX12_211L               0x77
224 #define PX3_211H                0x78
225 #define PX3_211L                0x79
226 #define MS2X_211H               0x7A
227 #define MS2X_211L               0x7B
228 #define CHTGX_211H              0x7C
229 #define CHTGX_211L              0x7D
230 #define CHTGN_211H              0x7E
231 #define CHTGN_211L              0x7F
232
233 /* Register 80h ~  9F */
234 #define CLKSEL_211              0x80
235 #define ADSET_211               0x81
236 #define PWMSEL_211              0x82
237 #define SWTCH_211               0x83
238 #define STBY_211                0x84
239 #define CLR_211         0x85
240 #define DSSEL_211               0x86
241 #define ENBL_211                0x87
242 #define ANA1_211                0x88
243 #define STMVEN_211              0x8A
244 #define STPT_211                0x8B
245 #define SWFC_211                0x8C
246 #define SWEN_211                0x8D
247 #define MSNUM_211               0x8E
248 #define MSSET_211               0x8F
249 #define DLYMON_211              0x90
250 #define MONA_211                0x91
251 #define PWMLIMIT_211            0x92
252 #define PINSEL_211              0x93
253 #define PWMSEL2_211             0x94
254 #define SFTRST_211              0x95
255 #define TEST_211                0x96
256 #define PWMZONE2_211            0x97
257 #define PWMZONE1_211            0x98
258 #define PWMZONE0_211            0x99
259 #define ZONE3_211               0x9A
260 #define ZONE2_211               0x9B
261 #define ZONE1_211               0x9C
262 #define ZONE0_211               0x9D
263 #define GCTIM_211               0x9E
264 #define GCTIM_211NU             0x9F
265 #define STMINT_211              0xA0
266 #define STMVENDH_211            0xA1
267 #define STMVENDL_211            0xA2
268 #define MSNUMR_211              0xA3
269 #define  ANA2_211               0xA4
270
271 /* Device ID of HVCA Drive IC */
272 #define HVCA_DEVICE_ID          0xE4
273
274 /* Device ID of E2P ROM */
275 #define EEP_DEVICE_ID           0xA0
276 #define EEP_PAGE0               0x00
277 #define EEP_PAGE1               0x02
278 #define EEP_PAGE2               0x04
279 #define EEP_PAGE3               0x06
280 /* E2P ROM has 1023 bytes. So there are 4 pages memory */
281 /* E2PROM Device ID = 1 0 1 0  0 P0 P1 0 */
282 /*
283 P0  P1
284 0   0   : Page 0
285 0   1   : Page 1
286 1   0   : Page 2
287 1   1   : Page 3
288 */
289 /* Page 0: address 0x000~0x0FF, E2PROM Device ID = E2P_DEVICE_ID|E2P_PAGE0 */
290 /* Page 1: address 0x100~0x1FF, E2PROM Device ID = E2P_DEVICE_ID|E2P_PAGE1 */
291 /* Page 2: address 0x200~0x2FF, E2PROM Device ID = E2P_DEVICE_ID|E2P_PAGE2 */
292 /* Page 3: address 0x300~0x3FF, E2PROM Device ID = E2P_DEVICE_ID|E2P_PAGE3 */
293 /*
294 */
295
296 /* E2P data type define of HVCA Initial Value Section */
297 #define DIRECT_MODE             0x00
298 #define INDIRECT_EEPROM 0x10
299 #define INDIRECT_HVCA           0x20
300 #define MASK_AND                0x70
301 #define MASK_OR         0x80
302
303 #define DATA_1BYTE              0x01
304 #define DATA_2BYTE              0x02
305
306 #define START_ADDR              0x0030
307 #define END_ADDR                0x01BF
308
309 /*Macro define*/
310 #if !defined(abs)
311 #define abs(a)          (((a) > 0) ? (a) : -(a))
312 #endif
313
314 #endif
315 /* __SH532U_H__ */
316