camera: delete compile warning
[firefly-linux-kernel-4.4.55.git] / arch / arm / plat-rk / rk_camera.c
1 #include <plat/rk_camera.h> \r
2 \r
3 #ifndef PMEM_CAM_SIZE\r
4 #ifdef CONFIG_VIDEO_RK29 \r
5 /*---------------- Camera Sensor Fixed Macro Begin  ------------------------*/\r
6 // Below Macro is fixed, programer don't change it!!!!!!\r
7 \r
8 #if defined (CONFIG_SENSOR_IIC_ADDR_0) && (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
9 #define PMEM_SENSOR_FULL_RESOLUTION_0  CONS(CONFIG_SENSOR_0,_FULL_RESOLUTION)\r
10 \r
11     #ifdef CONFIG_SENSOR_CIF_INDEX_0\r
12     #define SENSOR_CIF_BUSID_0             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_0)\r
13     #else\r
14     #define SENSOR_CIF_BUSID_0             RK29_CAM_PLATFORM_DEV_ID\r
15     #endif\r
16     \r
17     #if !(PMEM_SENSOR_FULL_RESOLUTION_0)\r
18     #undef PMEM_SENSOR_FULL_RESOLUTION_0\r
19     #define PMEM_SENSOR_FULL_RESOLUTION_0  RK_CAM_SUPPORT_RESOLUTION\r
20     #endif\r
21     \r
22     #if(SENSOR_CIF_BUSID_0 == RK_CAM_PLATFORM_DEV_ID_0)\r
23     #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_0\r
24     #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0\r
25     #else\r
26     #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_0\r
27     #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0\r
28     #endif\r
29 #else\r
30 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0x00\r
31 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0x00\r
32 #endif\r
33  \r
34 #if defined (CONFIG_SENSOR_IIC_ADDR_1) && (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
35 #define PMEM_SENSOR_FULL_RESOLUTION_1  CONS(CONFIG_SENSOR_1,_FULL_RESOLUTION)\r
36 \r
37     #ifdef CONFIG_SENSOR_CIF_INDEX_1\r
38     #define SENSOR_CIF_BUSID_1             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_1)\r
39     #else\r
40     #define SENSOR_CIF_BUSID_1             RK29_CAM_PLATFORM_DEV_ID\r
41     #endif\r
42     \r
43     #if !(PMEM_SENSOR_FULL_RESOLUTION_1)\r
44     #undef PMEM_SENSOR_FULL_RESOLUTION_1\r
45     #define PMEM_SENSOR_FULL_RESOLUTION_1  RK_CAM_SUPPORT_RESOLUTION\r
46     #endif\r
47     #if (SENSOR_CIF_BUSID_1 == RK_CAM_PLATFORM_DEV_ID_0)\r
48            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_1)\r
49            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
50            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_1\r
51            #endif\r
52     #else\r
53            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_1)\r
54            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
55            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_1\r
56            #endif\r
57     #endif\r
58 #endif\r
59 \r
60 #if  defined (CONFIG_SENSOR_IIC_ADDR_01) && (CONFIG_SENSOR_IIC_ADDR_01!=0x00)\r
61 #define PMEM_SENSOR_FULL_RESOLUTION_01  CONS(CONFIG_SENSOR_01,_FULL_RESOLUTION)\r
62 \r
63     #ifdef CONFIG_SENSOR_CIF_INDEX_01\r
64     #define SENSOR_CIF_BUSID_01             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_01)\r
65     #else\r
66     #define SENSOR_CIF_BUSID_01             RK29_CAM_PLATFORM_DEV_ID\r
67     #endif\r
68     \r
69     #if !(PMEM_SENSOR_FULL_RESOLUTION_01)\r
70     #undef PMEM_SENSOR_FULL_RESOLUTION_01\r
71     #define PMEM_SENSOR_FULL_RESOLUTION_01  RK_CAM_SUPPORT_RESOLUTION\r
72     #endif\r
73     #if (SENSOR_CIF_BUSID_01 == RK_CAM_PLATFORM_DEV_ID_0)\r
74            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_01)\r
75            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
76            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_01\r
77            #endif\r
78     #else\r
79            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_01)\r
80            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
81            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_01\r
82            #endif\r
83     #endif\r
84 #endif\r
85 \r
86 #if defined (CONFIG_SENSOR_IIC_ADDR_02) && (CONFIG_SENSOR_IIC_ADDR_02!=0x00)\r
87 #define PMEM_SENSOR_FULL_RESOLUTION_02  CONS(CONFIG_SENSOR_02,_FULL_RESOLUTION)\r
88 \r
89     #ifdef CONFIG_SENSOR_CIF_INDEX_02\r
90     #define SENSOR_CIF_BUSID_02             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_02)\r
91     #else\r
92     #define SENSOR_CIF_BUSID_02             RK29_CAM_PLATFORM_DEV_ID\r
93     #endif\r
94     \r
95     #if !(PMEM_SENSOR_FULL_RESOLUTION_02)\r
96     #undef PMEM_SENSOR_FULL_RESOLUTION_02\r
97     #define PMEM_SENSOR_FULL_RESOLUTION_02  RK_CAM_SUPPORT_RESOLUTION\r
98     #endif\r
99     #if (SENSOR_CIF_BUSID_02 == RK_CAM_PLATFORM_DEV_ID_0)\r
100            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_02)\r
101            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
102            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_02\r
103            #endif\r
104     #else\r
105            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_02)\r
106            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
107            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_02\r
108            #endif\r
109     #endif\r
110 #endif\r
111 \r
112 #ifdef CONFIG_SENSOR_IIC_ADDR_11\r
113 #if (CONFIG_SENSOR_IIC_ADDR_11 != 0x00)\r
114 #define PMEM_SENSOR_FULL_RESOLUTION_11  CONS(CONFIG_SENSOR_11,_FULL_RESOLUTION)\r
115 \r
116     #ifdef CONFIG_SENSOR_CIF_INDEX_11\r
117     #define SENSOR_CIF_BUSID_11             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_11)\r
118     #else\r
119     #define SENSOR_CIF_BUSID_11             RK29_CAM_PLATFORM_DEV_ID\r
120     #endif\r
121     \r
122     #if !(PMEM_SENSOR_FULL_RESOLUTION_11)\r
123     #undef PMEM_SENSOR_FULL_RESOLUTION_11\r
124     #define PMEM_SENSOR_FULL_RESOLUTION_11  RK_CAM_SUPPORT_RESOLUTION\r
125     #endif\r
126     #if (SENSOR_CIF_BUSID_11 == RK_CAM_PLATFORM_DEV_ID_0)\r
127            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_11)\r
128            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
129            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_11\r
130            #endif\r
131     #else\r
132            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_11)\r
133            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
134            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_11\r
135            #endif\r
136     #endif\r
137 #endif\r
138 #endif\r
139 \r
140 \r
141 #ifdef CONFIG_SENSOR_IIC_ADDR_12\r
142 #if (CONFIG_SENSOR_IIC_ADDR_12 != 0x00)\r
143 #define PMEM_SENSOR_FULL_RESOLUTION_12  CONS(CONFIG_SENSOR_12,_FULL_RESOLUTION)\r
144 \r
145     #ifdef CONFIG_SENSOR_CIF_INDEX_12\r
146     #define SENSOR_CIF_BUSID_12             CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_12)\r
147     #else\r
148     #define SENSOR_CIF_BUSID_12             RK29_CAM_PLATFORM_DEV_ID\r
149     #endif\r
150     \r
151     #if !(PMEM_SENSOR_FULL_RESOLUTION_12)\r
152     #undef PMEM_SENSOR_FULL_RESOLUTION_12\r
153     #define PMEM_SENSOR_FULL_RESOLUTION_12  RK_CAM_SUPPORT_RESOLUTION\r
154     #endif\r
155     #if (SENSOR_CIF_BUSID_12 == RK_CAM_PLATFORM_DEV_ID_0)\r
156            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_12)\r
157            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
158            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_12\r
159            #endif\r
160     #else\r
161            #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_12)\r
162            #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
163            #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_12\r
164            #endif\r
165     #endif\r
166 #endif\r
167 #endif\r
168 \r
169 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 > RK_CAM_SUPPORT_RESOLUTION)\r
170     #error "PMEM_SENSOR_FULL_RESOLUTION_CIF_0 is larger than 5Meag"\r
171 #endif\r
172 \r
173 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 > RK_CAM_SUPPORT_RESOLUTION)\r
174     #error "PMEM_SENSOR_FULL_RESOLUTION_CIF_1 is larger than 5Meag"\r
175 #endif\r
176 \r
177 //CIF 0\r
178 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x800000)   /* ddl@rock-chips.com : It is only support 5Mega interplate to 8Mega */\r
179 #define PMEM_CAM_NECESSARY_CIF_0   0x1900000       /* 1280*720*1.5*4(preview) + 12M(capture raw) + 7M(jpeg encode output) */\r
180 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x800000\r
181 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x500000)\r
182 #define PMEM_CAM_NECESSARY_CIF_0   0x1400000       /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
183 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x800000\r
184 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x300000)\r
185 #define PMEM_CAM_NECESSARY_CIF_0   0xf00000        /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
186 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x600000\r
187 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
188 #define PMEM_CAM_NECESSARY_CIF_0   0xc00000\r
189 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x600000\r
190 #elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x130000))\r
191 #define PMEM_CAM_NECESSARY_CIF_0   0xa00000        /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
192 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x600000\r
193 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x30000)\r
194 #define PMEM_CAM_NECESSARY_CIF_0   0x600000        /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
195 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x600000\r
196 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x00)\r
197 #define PMEM_CAM_NECESSARY_CIF_0   0x00\r
198 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x00\r
199 #else\r
200 #define PMEM_CAM_NECESSARY_CIF_0   0x1400000\r
201 #define PMEM_CAMIPP_NECESSARY_CIF_0    0x800000\r
202 #endif\r
203 \r
204 //CIF 1\r
205 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x800000)   /* ddl@rock-chips.com : It is only support 5Mega interplate to 8Mega */\r
206 #define PMEM_CAM_NECESSARY_CIF_1   0x1900000       /* 1280*720*1.5*4(preview) + 12M(capture raw) + 7M(jpeg encode output) */\r
207 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x800000\r
208 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x500000)\r
209 #define PMEM_CAM_NECESSARY_CIF_1         0x1400000               /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
210 #define PMEM_CAMIPP_NECESSARY_CIF_1       0x800000\r
211 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x300000)\r
212 #define PMEM_CAM_NECESSARY_CIF_1         0xf00000                /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
213 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x600000\r
214 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1== 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
215 #define PMEM_CAM_NECESSARY_CIF_1         0xc00000\r
216 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x600000\r
217 #elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x130000))\r
218 #define PMEM_CAM_NECESSARY_CIF_1         0xa00000                /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
219 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x600000\r
220 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x30000)\r
221 #define PMEM_CAM_NECESSARY_CIF_1         0x600000                /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
222 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x600000\r
223 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x00)\r
224 #define PMEM_CAM_NECESSARY_CIF_1   0x00\r
225 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x00\r
226 #else\r
227 #define PMEM_CAM_NECESSARY_CIF_1         0x1400000\r
228 #define PMEM_CAMIPP_NECESSARY_CIF_1    0x800000\r
229 #endif\r
230 \r
231 \r
232 #ifdef CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF\r
233     #if (PMEM_CAM_NECESSARY_CIF_0 > PMEM_CAM_NECESSARY_CIF_1)\r
234     #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_0\r
235     #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_0\r
236     #else\r
237     #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_1\r
238     #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_1\r
239     #endif\r
240 #endif\r
241 \r
242 #if (!defined(CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF) && !defined(CONFIG_VIDEO_RKCIF_WORK_SIMUL_ON))\r
243     #if PMEM_CAM_NECESSARY_CIF_0\r
244     #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_0\r
245     #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_0  \r
246     #else\r
247     #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_1\r
248     #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_1  \r
249     #endif\r
250 #endif\r
251 \r
252 #ifdef CONFIG_VIDEO_RK29_CAMMEM_ION\r
253     #undef PMEM_CAM_NECESSARY\r
254     #define PMEM_CAM_NECESSARY 0x00000000\r
255 #endif\r
256 \r
257 \r
258 /*---------------- Camera Sensor Fixed Macro End  ------------------------*/\r
259 #else   //#ifdef CONFIG_VIDEO_RK \r
260 #define PMEM_CAM_NECESSARY       0x00000000\r
261 #endif\r
262 \r
263 #else   // #ifndef PMEM_CAM_SIZE\r
264 /*\r
265 *      Driver Version Note\r
266 *v0.0.1: this driver is compatible with generic_sensor\r
267 */\r
268 static int camio_version = KERNEL_VERSION(0,1,0);\r
269 module_param(camio_version, int, S_IRUGO);\r
270 \r
271 \r
272 static int camera_debug;\r
273 module_param(camera_debug, int, S_IRUGO|S_IWUSR);    \r
274 \r
275 #undef  CAMMODULE_NAME\r
276 #define CAMMODULE_NAME   "rk_cam_io"\r
277 \r
278 #define ddprintk(level, fmt, arg...) do {                       \\r
279         if (camera_debug >= level)                                      \\r
280             printk(KERN_WARNING"%s(%d):" fmt"\n", CAMMODULE_NAME,__LINE__,## arg); } while (0)\r
281 \r
282 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)  \r
283 #define eprintk(format, ...) printk(KERN_ERR "%s(%d):" format"\n",CAMMODULE_NAME,__LINE__,## __VA_ARGS__)  \r
284 \r
285 #define SENSOR_NAME_0 STR(CONFIG_SENSOR_0)                      /* back camera sensor 0 */\r
286 #define SENSOR_NAME_1 STR(CONFIG_SENSOR_1)                      /* front camera sensor 0 */\r
287 #define SENSOR_DEVICE_NAME_0  STR(CONS(CONFIG_SENSOR_0, _back))\r
288 #define SENSOR_DEVICE_NAME_1  STR(CONS(CONFIG_SENSOR_1, _front))\r
289 #ifdef CONFIG_SENSOR_01\r
290 #define SENSOR_NAME_01 STR(CONFIG_SENSOR_01)                    /* back camera sensor 1 */\r
291 #define SENSOR_DEVICE_NAME_01  STR(CONS(CONFIG_SENSOR_01, _back_1))\r
292 #endif\r
293 #ifdef CONFIG_SENSOR_02\r
294 #define SENSOR_NAME_02 STR(CONFIG_SENSOR_02)                    /* back camera sensor 2 */\r
295 #define SENSOR_DEVICE_NAME_02  STR(CONS(CONFIG_SENSOR_02, _back_2))\r
296 #endif\r
297 #ifdef CONFIG_SENSOR_11\r
298 #define SENSOR_NAME_11 STR(CONFIG_SENSOR_11)                    /* front camera sensor 1 */\r
299 #define SENSOR_DEVICE_NAME_11  STR(CONS(CONFIG_SENSOR_11, _front_1))\r
300 #endif\r
301 #ifdef CONFIG_SENSOR_12\r
302 #define SENSOR_NAME_12 STR(CONFIG_SENSOR_12)                    /* front camera sensor 2 */\r
303 #define SENSOR_DEVICE_NAME_12  STR(CONS(CONFIG_SENSOR_12, _front_2))\r
304 #endif\r
305 \r
306 static int rk_sensor_io_init(void);\r
307 static int rk_sensor_io_deinit(int sensor);\r
308 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on);\r
309 static int rk_sensor_power(struct device *dev, int on);\r
310 static int rk_sensor_register(void);\r
311 //static int rk_sensor_reset(struct device *dev);\r
312 \r
313 static int rk_sensor_powerdown(struct device *dev, int on);\r
314 \r
315 static struct rk29camera_platform_data rk_camera_platform_data = {\r
316     .io_init = rk_sensor_io_init,\r
317     .io_deinit = rk_sensor_io_deinit,\r
318     .iomux = rk_sensor_iomux,\r
319     .sensor_ioctrl = rk_sensor_ioctrl,\r
320     .sensor_register = rk_sensor_register,\r
321     .gpio_res = {\r
322         {\r
323     #if defined CONFIG_SENSOR_IIC_ADDR_0 && CONFIG_SENSOR_IIC_ADDR_0            \r
324             .gpio_reset = CONFIG_SENSOR_RESET_PIN_0,\r
325             .gpio_power = CONFIG_SENSOR_POWER_PIN_0,\r
326             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0,\r
327             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0,\r
328             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0),\r
329             .gpio_init = 0,            \r
330             .dev_name = SENSOR_DEVICE_NAME_0,\r
331    #else\r
332             .gpio_reset = INVALID_GPIO,\r
333             .gpio_power = INVALID_GPIO,\r
334             .gpio_powerdown = INVALID_GPIO,\r
335             .gpio_flash = INVALID_GPIO,\r
336             .gpio_flag = 0,\r
337             .gpio_init = 0,            \r
338             .dev_name = NULL,\r
339    #endif\r
340         }, {\r
341    #if defined CONFIG_SENSOR_IIC_ADDR_1 && CONFIG_SENSOR_IIC_ADDR_1  \r
342             .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,\r
343             .gpio_power = CONFIG_SENSOR_POWER_PIN_1,\r
344             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,\r
345             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,\r
346             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),\r
347             .gpio_init = 0,\r
348             .dev_name = SENSOR_DEVICE_NAME_1,\r
349    #else\r
350             .gpio_reset = INVALID_GPIO,\r
351             .gpio_power = INVALID_GPIO,\r
352             .gpio_powerdown = INVALID_GPIO,\r
353             .gpio_flash = INVALID_GPIO,\r
354             .gpio_flag = 0,\r
355             .gpio_init = 0,            \r
356             .dev_name = NULL,\r
357    #endif\r
358         }, \r
359         #ifdef CONFIG_SENSOR_01\r
360         {\r
361         #if CONFIG_SENSOR_IIC_ADDR_01\r
362             .gpio_reset = CONFIG_SENSOR_RESET_PIN_01,\r
363             .gpio_power = CONFIG_SENSOR_POWER_PIN_01,\r
364             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_01,\r
365             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_01,\r
366             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_01|CONFIG_SENSOR_RESETACTIVE_LEVEL_01|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_01|CONFIG_SENSOR_FLASHACTIVE_LEVEL_01),\r
367             .gpio_init = 0,            \r
368             .dev_name = SENSOR_DEVICE_NAME_01,\r
369         #else\r
370             .gpio_reset = INVALID_GPIO,\r
371             .gpio_power = INVALID_GPIO,\r
372             .gpio_powerdown = INVALID_GPIO,\r
373             .gpio_flash = INVALID_GPIO,\r
374             .gpio_flag = 0,\r
375             .gpio_init = 0,            \r
376             .dev_name = NULL,\r
377         #endif\r
378         }, \r
379         #endif\r
380         #ifdef CONFIG_SENSOR_02\r
381         {\r
382         #if CONFIG_SENSOR_IIC_ADDR_02\r
383             .gpio_reset = CONFIG_SENSOR_RESET_PIN_02,\r
384             .gpio_power = CONFIG_SENSOR_POWER_PIN_02,\r
385             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_02,\r
386             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_02,\r
387             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_02|CONFIG_SENSOR_RESETACTIVE_LEVEL_02|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_02|CONFIG_SENSOR_FLASHACTIVE_LEVEL_02),\r
388             .gpio_init = 0,            \r
389             .dev_name = SENSOR_DEVICE_NAME_02, \r
390         #else\r
391             .gpio_reset = INVALID_GPIO,\r
392             .gpio_power = INVALID_GPIO,\r
393             .gpio_powerdown = INVALID_GPIO,\r
394             .gpio_flash = INVALID_GPIO,\r
395             .gpio_flag = 0,\r
396             .gpio_init = 0,            \r
397             .dev_name = NULL,\r
398         #endif        \r
399         },\r
400         #endif\r
401         #ifdef CONFIG_SENSOR_11\r
402         {\r
403         #if CONFIG_SENSOR_IIC_ADDR_11\r
404             .gpio_reset = CONFIG_SENSOR_RESET_PIN_11,\r
405             .gpio_power = CONFIG_SENSOR_POWER_PIN_11,\r
406             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_11,\r
407             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_11,\r
408             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_11|CONFIG_SENSOR_RESETACTIVE_LEVEL_11|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_11|CONFIG_SENSOR_FLASHACTIVE_LEVEL_11),\r
409             .gpio_init = 0,\r
410             .dev_name = SENSOR_DEVICE_NAME_11,\r
411         #else\r
412             .gpio_reset = INVALID_GPIO,\r
413             .gpio_power = INVALID_GPIO,\r
414             .gpio_powerdown = INVALID_GPIO,\r
415             .gpio_flash = INVALID_GPIO,\r
416             .gpio_flag = 0,\r
417             .gpio_init = 0,            \r
418             .dev_name = NULL,\r
419         #endif        \r
420         }, \r
421         #endif\r
422         #ifdef CONFIG_SENSOR_12\r
423         {\r
424         #if CONFIG_SENSOR_IIC_ADDR_12\r
425             .gpio_reset = CONFIG_SENSOR_RESET_PIN_12,\r
426             .gpio_power = CONFIG_SENSOR_POWER_PIN_12,\r
427             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_12,\r
428             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_12,\r
429             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_12|CONFIG_SENSOR_RESETACTIVE_LEVEL_12|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_12|CONFIG_SENSOR_FLASHACTIVE_LEVEL_12),\r
430             .gpio_init = 0,\r
431             .dev_name = SENSOR_DEVICE_NAME_12,\r
432         #else\r
433             .gpio_reset = INVALID_GPIO,\r
434             .gpio_power = INVALID_GPIO,\r
435             .gpio_powerdown = INVALID_GPIO,\r
436             .gpio_flash = INVALID_GPIO,\r
437             .gpio_flag = 0,\r
438             .gpio_init = 0,            \r
439             .dev_name = NULL,\r
440         #endif\r
441         }\r
442         #endif\r
443     },\r
444     \r
445     #ifdef CONFIG_VIDEO_RK29_WORK_IPP\r
446     #ifdef MEM_CAMIPP_BASE\r
447         .meminfo = {\r
448             .name  = "camera_ipp_mem",\r
449                 .start = MEM_CAMIPP_BASE,\r
450                 .size   = MEM_CAMIPP_SIZE,\r
451         },\r
452         #endif\r
453         #endif\r
454     \r
455     .info = {\r
456         {\r
457         #ifdef CONFIG_SENSOR_0             \r
458             .dev_name = SENSOR_DEVICE_NAME_0,\r
459             .orientation = CONFIG_SENSOR_ORIENTATION_0,  \r
460         #else\r
461             .dev_name = NULL,\r
462             .orientation = 0x00, \r
463         #endif\r
464         },{\r
465         #ifdef CONFIG_SENSOR_1\r
466             .dev_name = SENSOR_DEVICE_NAME_1,\r
467             .orientation = CONFIG_SENSOR_ORIENTATION_1,\r
468         #else\r
469             .dev_name = NULL,\r
470             .orientation = 0x00, \r
471         #endif\r
472         #ifdef CONFIG_SENSOR_01\r
473             },{\r
474                 .dev_name = SENSOR_DEVICE_NAME_01,\r
475             .orientation = CONFIG_SENSOR_ORIENTATION_01, \r
476         #else\r
477         },{\r
478                 .dev_name = NULL,\r
479             .orientation = 0x00, \r
480         #endif\r
481         #ifdef CONFIG_SENSOR_02\r
482             },{\r
483                 .dev_name = SENSOR_DEVICE_NAME_02,\r
484             .orientation = CONFIG_SENSOR_ORIENTATION_02, \r
485         #else\r
486         },{\r
487                 .dev_name = NULL,\r
488             .orientation = 0x00, \r
489         #endif\r
490         \r
491         #ifdef CONFIG_SENSOR_11 \r
492         },{\r
493             .dev_name = SENSOR_DEVICE_NAME_11,\r
494             .orientation = CONFIG_SENSOR_ORIENTATION_11, \r
495         #else\r
496         },{\r
497                 .dev_name = NULL,\r
498             .orientation = 0x00, \r
499         #endif\r
500         #ifdef CONFIG_SENSOR_12\r
501             },{\r
502                 .dev_name = SENSOR_DEVICE_NAME_12,\r
503             .orientation = CONFIG_SENSOR_ORIENTATION_12, \r
504         #else\r
505         },{\r
506                 .dev_name = NULL,\r
507             .orientation = 0x00, \r
508         #endif\r
509             },\r
510         },\r
511     \r
512     .register_dev = {\r
513         #ifdef CONFIG_SENSOR_0\r
514         {\r
515         #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
516             .i2c_cam_info = {\r
517                 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1),\r
518             },\r
519             .link_info = {\r
520                 #ifdef SENSOR_CIF_BUSID_0\r
521                 .bus_id= SENSOR_CIF_BUSID_0,\r
522                 #else\r
523                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
524                 #endif\r
525                 .power          = rk_sensor_power,\r
526                 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)\r
527                 .reset          = rk_sensor_reset,\r
528                 #endif    \r
529                 .powerdown      = rk_sensor_powerdown,\r
530                 //.board_info = &rk_i2c_cam_info_0[0],\r
531                 \r
532                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,\r
533                 .module_name    = SENSOR_NAME_0,\r
534             },\r
535             .device_info = {\r
536                 .name   = "soc-camera-pdrv",\r
537                 //.id = 0,\r
538                 .dev    = {\r
539                         .init_name = SENSOR_DEVICE_NAME_0,\r
540                         //.platform_data = &rk_iclink_0,\r
541                 }\r
542             }\r
543         #endif\r
544             },\r
545         #endif\r
546         #ifdef CONFIG_SENSOR_1\r
547         {\r
548             #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
549             .i2c_cam_info = {\r
550                 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)\r
551             },\r
552             .link_info = {\r
553                 #ifdef SENSOR_CIF_BUSID_1\r
554                 .bus_id= SENSOR_CIF_BUSID_1,\r
555                 #else\r
556                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
557                 #endif\r
558                 .power          = rk_sensor_power,\r
559                 #if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
560                 .reset          = rk_sensor_reset,\r
561                 #endif    \r
562                 .powerdown      = rk_sensor_powerdown,\r
563                 //.board_info = &rk_i2c_cam_info_0[0],\r
564                 \r
565                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,\r
566                 .module_name    = SENSOR_NAME_1,\r
567             },\r
568             .device_info = {\r
569                 .name   = "soc-camera-pdrv",\r
570                 //.id = 1,\r
571                 .dev    = {\r
572                         .init_name = SENSOR_DEVICE_NAME_1,\r
573                         //.platform_data = &rk_iclink_0,\r
574                 }\r
575             }\r
576         #endif\r
577             },\r
578             #endif\r
579         #ifdef CONFIG_SENSOR_01\r
580         {\r
581         #if (CONFIG_SENSOR_IIC_ADDR_01 != 0x00)\r
582             .i2c_cam_info = {\r
583                 I2C_BOARD_INFO(SENSOR_NAME_01, CONFIG_SENSOR_IIC_ADDR_01>>1)\r
584             },\r
585             .link_info = {\r
586                 #ifdef SENSOR_CIF_BUSID_01\r
587                 .bus_id= SENSOR_CIF_BUSID_01,\r
588                 #else\r
589                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
590                 #endif\r
591                 .power          = rk_sensor_power,\r
592                 #if (CONFIG_SENSOR_RESET_PIN_01 != INVALID_GPIO)\r
593                 .reset          = rk_sensor_reset,\r
594                 #endif    \r
595                 .powerdown      = rk_sensor_powerdown,\r
596                 //.board_info = &rk_i2c_cam_info_0[0],\r
597                 \r
598                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_01,\r
599                 .module_name    = SENSOR_NAME_01,\r
600             },\r
601             .device_info = {\r
602                 .name   = "soc-camera-pdrv",\r
603                 //.id = 1,\r
604                 .dev    = {\r
605                         .init_name = SENSOR_DEVICE_NAME_01,\r
606                         //.platform_data = &rk_iclink_0,\r
607                 }\r
608             }\r
609         #endif\r
610             },\r
611         #endif\r
612         #ifdef CONFIG_SENSOR_02 \r
613         {\r
614             #if (CONFIG_SENSOR_IIC_ADDR_02 != 0x00)\r
615             .i2c_cam_info = {\r
616                 I2C_BOARD_INFO(SENSOR_NAME_02, CONFIG_SENSOR_IIC_ADDR_02>>1)\r
617             },\r
618             .link_info = {\r
619                 #ifdef SENSOR_CIF_BUSID_02\r
620                 .bus_id= SENSOR_CIF_BUSID_02,\r
621                 #else\r
622                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
623                 #endif\r
624                 .power          = rk_sensor_power,\r
625                 #if (CONFIG_SENSOR_RESET_PIN_02 != INVALID_GPIO)\r
626                 .reset          = rk_sensor_reset,\r
627                 #endif    \r
628                 .powerdown      = rk_sensor_powerdown,\r
629                 //.board_info = &rk_i2c_cam_info_0[0],\r
630                 \r
631                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_02,\r
632                 .module_name    = SENSOR_NAME_02,\r
633             },\r
634             .device_info = {\r
635                 .name   = "soc-camera-pdrv",\r
636                 //.id = 1,\r
637                 .dev    = {\r
638                         .init_name = SENSOR_DEVICE_NAME_02,\r
639                         //.platform_data = &rk_iclink_0,\r
640                 }\r
641             }\r
642         #endif\r
643             },\r
644         #endif\r
645         #ifdef CONFIG_SENSOR_11\r
646         {           \r
647         #if (CONFIG_SENSOR_IIC_ADDR_11 != 0x00)\r
648             .i2c_cam_info = {\r
649                 I2C_BOARD_INFO(SENSOR_NAME_11, CONFIG_SENSOR_IIC_ADDR_11>>1)\r
650             },\r
651             .link_info = {\r
652                 #ifdef SENSOR_CIF_BUSID_11\r
653                 .bus_id= SENSOR_CIF_BUSID_11,\r
654                 #else\r
655                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
656                 #endif\r
657                 .power          = rk_sensor_power,\r
658                 #if (CONFIG_SENSOR_RESET_PIN_11 != INVALID_GPIO)\r
659                 .reset          = rk_sensor_reset,\r
660                 #endif    \r
661                 .powerdown      = rk_sensor_powerdown,\r
662                 //.board_info = &rk_i2c_cam_info_0[0],\r
663                 \r
664                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_11,\r
665                 .module_name    = SENSOR_NAME_11,\r
666             },\r
667             .device_info = {\r
668                 .name   = "soc-camera-pdrv",\r
669                 //.id = 1,\r
670                 .dev    = {\r
671                         .init_name = SENSOR_DEVICE_NAME_11,\r
672                         //.platform_data = &rk_iclink_0,\r
673                 }\r
674             }\r
675         #endif        \r
676             },\r
677         #endif\r
678         #ifdef CONFIG_SENSOR_12\r
679         {           \r
680             #if (CONFIG_SENSOR_IIC_ADDR_12 != 0x00)\r
681             .i2c_cam_info = {\r
682                 I2C_BOARD_INFO(SENSOR_NAME_12, CONFIG_SENSOR_IIC_ADDR_12>>1)\r
683             },\r
684             .link_info = {\r
685                 #ifdef SENSOR_CIF_BUSID_12\r
686                 .bus_id= SENSOR_CIF_BUSID_12,\r
687                 #else\r
688                 .bus_id= RK29_CAM_PLATFORM_DEV_ID,\r
689                 #endif\r
690                 .power          = rk_sensor_power,\r
691                 #if (CONFIG_SENSOR_RESET_PIN_12 != INVALID_GPIO)\r
692                 .reset          = rk_sensor_reset,\r
693                 #endif    \r
694                 .powerdown      = rk_sensor_powerdown,\r
695                 //.board_info = &rk_i2c_cam_info_0[0],\r
696                 \r
697                 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_12,\r
698                 .module_name    = SENSOR_NAME_12,\r
699             },\r
700             .device_info = {\r
701                 .name   = "soc-camera-pdrv",\r
702                 //.id = 1,\r
703                 .dev    = {\r
704                         .init_name = SENSOR_DEVICE_NAME_12,\r
705                         //.platform_data = &rk_iclink_0,\r
706                 }\r
707             }\r
708         #endif        \r
709             },\r
710         #endif\r
711         },\r
712     .register_dev_new = new_camera,\r
713 };\r
714 \r
715 \r
716 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)\r
717 {\r
718     int camera_power = res->gpio_power;\r
719     int camera_ioflag = res->gpio_flag;\r
720     int camera_io_init = res->gpio_init;\r
721     int ret = 0;\r
722     \r
723     if (camera_power != INVALID_GPIO)  {\r
724                 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {\r
725             if (on) {\r
726                 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
727                         dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
728                         msleep(10);\r
729                 } else {\r
730                         gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
731                         dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
732                 }\r
733                 } else {\r
734                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
735                         eprintk("%s PowerPin=%d request failed!", res->dev_name,camera_power);\r
736             }        \r
737     } else {\r
738                 ret = RK29_CAM_EIO_INVALID;\r
739     } \r
740 \r
741     return ret;\r
742 }\r
743 \r
744 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)\r
745 {\r
746     int camera_reset = res->gpio_reset;\r
747     int camera_ioflag = res->gpio_flag;\r
748     int camera_io_init = res->gpio_init;  \r
749     int ret = 0;\r
750     \r
751     if (camera_reset != INVALID_GPIO) {\r
752                 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {\r
753                         if (on) {\r
754                         gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
755                         dprintk("%s ResetPin=%d ..PinLevel = %x",res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
756                         } else {\r
757                                 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
758                         dprintk("%s ResetPin= %d..PinLevel = %x",res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
759                 }\r
760                 } else {\r
761                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
762                         eprintk("%s ResetPin=%d request failed!", res->dev_name,camera_reset);\r
763                 }\r
764     } else {\r
765                 ret = RK29_CAM_EIO_INVALID;\r
766     }\r
767 \r
768     return ret;\r
769 }\r
770 \r
771 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)\r
772 {\r
773     int camera_powerdown = res->gpio_powerdown;\r
774     int camera_ioflag = res->gpio_flag;\r
775     int camera_io_init = res->gpio_init;  \r
776     int ret = 0;    \r
777 \r
778     if (camera_powerdown != INVALID_GPIO) {\r
779                 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
780                         if (on) {\r
781                         gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
782                         dprintk("%s PowerDownPin=%d ..PinLevel = %x" ,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
783                         } else {\r
784                                 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
785                         dprintk("%s PowerDownPin= %d..PinLevel = %x" ,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
786                 }\r
787                 } else {\r
788                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
789                         dprintk("%s PowerDownPin=%d request failed!", res->dev_name,camera_powerdown);\r
790                 }\r
791     } else {\r
792                 ret = RK29_CAM_EIO_INVALID;\r
793     }\r
794     return ret;\r
795 }\r
796 \r
797 \r
798 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)\r
799 {\r
800     int camera_flash = res->gpio_flash;\r
801     int camera_ioflag = res->gpio_flag;\r
802     int camera_io_init = res->gpio_init;  \r
803     int ret = 0;    \r
804 \r
805     if (camera_flash != INVALID_GPIO) {\r
806                 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {\r
807             switch (on)\r
808             {\r
809                 case Flash_Off:\r
810                 {\r
811                     gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
812                             dprintk("%s FlashPin= %d..PinLevel = %x", res->dev_name, camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); \r
813                             break;\r
814                 }\r
815 \r
816                 case Flash_On:\r
817                 {\r
818                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
819                             dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
820                             break;\r
821                 }\r
822 \r
823                 case Flash_Torch:\r
824                 {\r
825                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
826                             dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
827                             break;\r
828                 }\r
829 \r
830                 default:\r
831                 {\r
832                     eprintk("%s Flash command(%d) is invalidate", res->dev_name,on);\r
833                     break;\r
834                 }\r
835             }\r
836                 } else {\r
837                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
838                         eprintk("%s FlashPin=%d request failed!", res->dev_name,camera_flash);\r
839                 }\r
840     } else {\r
841                 ret = RK29_CAM_EIO_INVALID;\r
842     }\r
843     return ret;\r
844 }\r
845 static void rk29_sensor_fps_get(int idx, unsigned int *val, int w, int h)\r
846 {\r
847     switch (idx)\r
848     {\r
849         #ifdef CONFIG_SENSOR_0\r
850         case 0:\r
851         {\r
852             if ((w==176) && (h==144)) {\r
853                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_0;\r
854             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_0\r
855             } else if ((w==240) && (h==160)) {\r
856                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_0;\r
857             #endif\r
858             } else if ((w==320) && (h==240)) {\r
859                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_0;\r
860             } else if ((w==352) && (h==288)) {\r
861                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_0;\r
862             } else if ((w==640) && (h==480)) {\r
863                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_0;\r
864             } else if ((w==720) && (h==480)) {\r
865                 *val = CONFIG_SENSOR_480P_FPS_FIXED_0;\r
866             } else if ((w==800) && (h==600)) {\r
867                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_0;\r
868             } else if ((w==1280) && (h==720)) {\r
869                 *val = CONFIG_SENSOR_720P_FPS_FIXED_0;\r
870             }\r
871             break;\r
872         }\r
873         #endif\r
874         #ifdef CONFIG_SENSOR_1\r
875         case 1:\r
876         {\r
877             if ((w==176) && (h==144)) {\r
878                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
879             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_1\r
880             } else if ((w==240) && (h==160)) {\r
881                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_1;\r
882             #endif\r
883             } else if ((w==320) && (h==240)) {\r
884                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
885             } else if ((w==352) && (h==288)) {\r
886                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
887             } else if ((w==640) && (h==480)) {\r
888                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
889             } else if ((w==720) && (h==480)) {\r
890                 *val = CONFIG_SENSOR_480P_FPS_FIXED_1;\r
891             } else if ((w==800) && (h==600)) {\r
892                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_1;\r
893             } else if ((w==1280) && (h==720)) {\r
894                 *val = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
895             }\r
896             break;\r
897         }\r
898         #endif\r
899         #ifdef CONFIG_SENSOR_01\r
900         case 2:\r
901         {\r
902             if ((w==176) && (h==144)) {\r
903                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_01;\r
904             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_01\r
905             } else if ((w==240) && (h==160)) {\r
906                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_01;\r
907             #endif\r
908             } else if ((w==320) && (h==240)) {\r
909                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_01;\r
910             } else if ((w==352) && (h==288)) {\r
911                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_01;\r
912             } else if ((w==640) && (h==480)) {\r
913                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_01;\r
914             } else if ((w==720) && (h==480)) {\r
915                 *val = CONFIG_SENSOR_480P_FPS_FIXED_01;\r
916             } else if ((w==800) && (h==600)) {\r
917                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_01;\r
918             } else if ((w==1280) && (h==720)) {\r
919                 *val = CONFIG_SENSOR_720P_FPS_FIXED_01;\r
920             }\r
921             break;\r
922         }\r
923         #endif\r
924         #ifdef CONFIG_SENSOR_02\r
925         case 3:\r
926         {\r
927             if ((w==176) && (h==144)) {\r
928                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_02;\r
929             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_02\r
930             } else if ((w==240) && (h==160)) {\r
931                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_02;\r
932             #endif\r
933             } else if ((w==320) && (h==240)) {\r
934                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_02;\r
935             } else if ((w==352) && (h==288)) {\r
936                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_02;\r
937             } else if ((w==640) && (h==480)) {\r
938                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_02;\r
939             } else if ((w==720) && (h==480)) {\r
940                 *val = CONFIG_SENSOR_480P_FPS_FIXED_02;\r
941             } else if ((w==800) && (h==600)) {\r
942                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_02;\r
943             } else if ((w==1280) && (h==720)) {\r
944                 *val = CONFIG_SENSOR_720P_FPS_FIXED_02;\r
945             }\r
946             break;\r
947         }\r
948         #endif\r
949         \r
950         #ifdef CONFIG_SENSOR_11\r
951         case 4:\r
952         {\r
953             if ((w==176) && (h==144)) {\r
954                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_11;\r
955             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_11\r
956             } else if ((w==240) && (h==160)) {\r
957                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_11;\r
958             #endif\r
959             } else if ((w==320) && (h==240)) {\r
960                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_11;\r
961             } else if ((w==352) && (h==288)) {\r
962                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_11;\r
963             } else if ((w==640) && (h==480)) {\r
964                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_11;\r
965             } else if ((w==720) && (h==480)) {\r
966                 *val = CONFIG_SENSOR_480P_FPS_FIXED_11;\r
967             } else if ((w==800) && (h==600)) {\r
968                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_11;\r
969             } else if ((w==1280) && (h==720)) {\r
970                 *val = CONFIG_SENSOR_720P_FPS_FIXED_11;\r
971             }\r
972             break;\r
973         }\r
974         #endif\r
975         #ifdef CONFIG_SENSOR_12\r
976         case 5:\r
977         {\r
978             if ((w==176) && (h==144)) {\r
979                 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_12;\r
980             #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_12\r
981             } else if ((w==240) && (h==160)) {\r
982                 *val = CONFIG_SENSOR_240X160_FPS_FIXED_12;\r
983             #endif\r
984             } else if ((w==320) && (h==240)) {\r
985                 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_12;\r
986             } else if ((w==352) && (h==288)) {\r
987                 *val = CONFIG_SENSOR_CIF_FPS_FIXED_12;\r
988             } else if ((w==640) && (h==480)) {\r
989                 *val = CONFIG_SENSOR_VGA_FPS_FIXED_12;\r
990             } else if ((w==720) && (h==480)) {\r
991                 *val = CONFIG_SENSOR_480P_FPS_FIXED_12;\r
992             } else if ((w==800) && (h==600)) {\r
993                 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_12;\r
994             } else if ((w==1280) && (h==720)) {\r
995                 *val = CONFIG_SENSOR_720P_FPS_FIXED_12;\r
996             }\r
997             break;\r
998         }\r
999         #endif\r
1000         default:\r
1001             eprintk(" sensor-%d have not been define in board file!",idx);\r
1002     }\r
1003 }\r
1004 static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res)\r
1005 {\r
1006     int ret = 0, i;\r
1007     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1008         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1009         unsigned int camera_ioflag;\r
1010     struct rk29camera_gpio_res *io_res;\r
1011     bool io_requested_in_camera;\r
1012 \r
1013     camera_reset = gpio_res->gpio_reset;\r
1014         camera_power = gpio_res->gpio_power;\r
1015         camera_powerdown = gpio_res->gpio_powerdown;\r
1016         camera_flash = gpio_res->gpio_flash;\r
1017         camera_ioflag = gpio_res->gpio_flag;\r
1018         gpio_res->gpio_init = 0;\r
1019 \r
1020     if (camera_power != INVALID_GPIO) {\r
1021         ret = gpio_request(camera_power, "camera power");\r
1022         if (ret) {\r
1023             io_requested_in_camera = false;\r
1024             for (i=0; i<RK_CAM_NUM; i++) {\r
1025                 io_res = &rk_camera_platform_data.gpio_res[i];\r
1026                 if (io_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
1027                     if (io_res->gpio_power == camera_power)\r
1028                         io_requested_in_camera = true;    \r
1029                 }\r
1030             }\r
1031 \r
1032             if (io_requested_in_camera==false) {\r
1033                 i=0;\r
1034                 while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1035                     io_res = &new_camera[i].io;\r
1036                     if (io_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
1037                         if (io_res->gpio_power == camera_power)\r
1038                             io_requested_in_camera = true;    \r
1039                     }\r
1040                     i++;\r
1041                 }\r
1042             }\r
1043             \r
1044             if (io_requested_in_camera==false) {\r
1045                 printk( "%s power pin(%d) init failed\n", gpio_res->dev_name,camera_power);\r
1046                 goto _rk_sensor_io_init_end_;\r
1047             } else {\r
1048                 ret =0;\r
1049             }\r
1050         }\r
1051 \r
1052         if (rk_camera_platform_data.iomux(camera_power) < 0) {\r
1053             ret = -1;\r
1054             eprintk("%s power pin(%d) iomux init failed",gpio_res->dev_name,camera_power);\r
1055             goto _rk_sensor_io_init_end_;\r
1056         }\r
1057         \r
1058                 gpio_res->gpio_init |= RK29_CAM_POWERACTIVE_MASK;\r
1059         gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1060         gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1061 \r
1062                 dprintk("%s power pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1063 \r
1064     }\r
1065 \r
1066     if (camera_reset != INVALID_GPIO) {\r
1067         ret = gpio_request(camera_reset, "camera reset");\r
1068         if (ret) {\r
1069             io_requested_in_camera = false;\r
1070             for (i=0; i<RK_CAM_NUM; i++) {\r
1071                 io_res = &rk_camera_platform_data.gpio_res[i];\r
1072                 if (io_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
1073                     if (io_res->gpio_reset == camera_reset)\r
1074                         io_requested_in_camera = true;    \r
1075                 }\r
1076             }\r
1077 \r
1078             if (io_requested_in_camera==false) {\r
1079                 i=0;\r
1080                 while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1081                     io_res = &new_camera[i].io;\r
1082                     if (io_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
1083                         if (io_res->gpio_reset == camera_reset)\r
1084                             io_requested_in_camera = true;    \r
1085                     }\r
1086                     i++;\r
1087                 }\r
1088             }\r
1089             \r
1090             if (io_requested_in_camera==false) {\r
1091                 eprintk("%s reset pin(%d) init failed" ,gpio_res->dev_name,camera_reset);\r
1092                 goto _rk_sensor_io_init_end_;\r
1093             } else {\r
1094                 ret =0;\r
1095             }\r
1096         }\r
1097 \r
1098         if (rk_camera_platform_data.iomux(camera_reset) < 0) {\r
1099             ret = -1;\r
1100             eprintk("%s reset pin(%d) iomux init failed", gpio_res->dev_name,camera_reset);\r
1101             goto _rk_sensor_io_init_end_;\r
1102         }\r
1103         \r
1104                 gpio_res->gpio_init |= RK29_CAM_RESETACTIVE_MASK;\r
1105         gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1106         gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1107 \r
1108                 dprintk("%s reset pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1109 \r
1110     }\r
1111 \r
1112         if (camera_powerdown != INVALID_GPIO) {\r
1113         ret = gpio_request(camera_powerdown, "camera powerdown");\r
1114         if (ret) {\r
1115             io_requested_in_camera = false;\r
1116             for (i=0; i<RK_CAM_NUM; i++) {\r
1117                 io_res = &rk_camera_platform_data.gpio_res[i];\r
1118                 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1119                     if (io_res->gpio_powerdown == camera_powerdown)\r
1120                         io_requested_in_camera = true;    \r
1121                 }\r
1122             }\r
1123 \r
1124             if (io_requested_in_camera==false) {\r
1125                 i=0;\r
1126                 while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1127                     io_res = &new_camera[i].io;\r
1128                     if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1129                         if (io_res->gpio_powerdown == camera_powerdown)\r
1130                             io_requested_in_camera = true;    \r
1131                     }\r
1132                     i++;\r
1133                 }\r
1134             }\r
1135             \r
1136             if (io_requested_in_camera==false) {\r
1137                 eprintk("%s powerdown pin(%d) init failed",gpio_res->dev_name,camera_powerdown);\r
1138                 goto _rk_sensor_io_init_end_;\r
1139             } else {\r
1140                 ret =0;\r
1141             }\r
1142         }\r
1143 \r
1144         if (rk_camera_platform_data.iomux(camera_powerdown) < 0) {\r
1145             ret = -1;\r
1146             eprintk("%s powerdown pin(%d) iomux init failed",gpio_res->dev_name,camera_powerdown);\r
1147             goto _rk_sensor_io_init_end_;\r
1148         }\r
1149         \r
1150                 gpio_res->gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;\r
1151         gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1152         gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1153 \r
1154                 dprintk("%s powerdown pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1155 \r
1156     }\r
1157 \r
1158         if (camera_flash != INVALID_GPIO) {\r
1159         ret = gpio_request(camera_flash, "camera flash");\r
1160         if (ret) {\r
1161             io_requested_in_camera = false;\r
1162             for (i=0; i<RK_CAM_NUM; i++) {\r
1163                 io_res = &rk_camera_platform_data.gpio_res[i];\r
1164                 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1165                     if (io_res->gpio_powerdown == camera_powerdown)\r
1166                         io_requested_in_camera = true;    \r
1167                 }\r
1168             }\r
1169 \r
1170             if (io_requested_in_camera==false) {\r
1171                 i=0;\r
1172                 while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1173                     io_res = &new_camera[i].io;\r
1174                     if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1175                         if (io_res->gpio_powerdown == camera_powerdown)\r
1176                             io_requested_in_camera = true;    \r
1177                     }\r
1178                     i++;\r
1179                 }\r
1180             }\r
1181             \r
1182             ret = 0;        //ddl@rock-chips.com : flash is only a function, sensor is also run;\r
1183             if (io_requested_in_camera==false) {\r
1184                 eprintk("%s flash pin(%d) init failed",gpio_res->dev_name,camera_flash);\r
1185                 goto _rk_sensor_io_init_end_;\r
1186             }\r
1187         }\r
1188 \r
1189         if (rk_camera_platform_data.iomux(camera_flash) < 0) {\r
1190             printk("%s flash pin(%d) iomux init failed\n",gpio_res->dev_name,camera_flash);                            \r
1191         }\r
1192         \r
1193                 gpio_res->gpio_init |= RK29_CAM_FLASHACTIVE_MASK;\r
1194         gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));    /* falsh off */\r
1195         gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1196 \r
1197                 dprintk("%s flash pin(%d) init success(0x%x)",gpio_res->dev_name, camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1198 \r
1199     }  \r
1200 _rk_sensor_io_init_end_:\r
1201     return ret;\r
1202 \r
1203 }\r
1204 \r
1205 static int _rk_sensor_io_deinit_(struct rk29camera_gpio_res *gpio_res)\r
1206 {\r
1207     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1208         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1209     \r
1210     camera_reset = gpio_res->gpio_reset;\r
1211     camera_power = gpio_res->gpio_power;\r
1212         camera_powerdown = gpio_res->gpio_powerdown;\r
1213     camera_flash = gpio_res->gpio_flash;\r
1214 \r
1215         if (gpio_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
1216             if (camera_power != INVALID_GPIO) {\r
1217                 gpio_direction_input(camera_power);\r
1218                 gpio_free(camera_power);\r
1219             }\r
1220         }\r
1221 \r
1222         if (gpio_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
1223             if (camera_reset != INVALID_GPIO)  {\r
1224                 gpio_direction_input(camera_reset);\r
1225                 gpio_free(camera_reset);\r
1226             }\r
1227         }\r
1228 \r
1229         if (gpio_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1230             if (camera_powerdown != INVALID_GPIO)  {\r
1231                 gpio_direction_input(camera_powerdown);\r
1232                 gpio_free(camera_powerdown);\r
1233             }\r
1234         }\r
1235 \r
1236         if (gpio_res->gpio_init & RK29_CAM_FLASHACTIVE_MASK) {\r
1237             if (camera_flash != INVALID_GPIO)  {\r
1238                 gpio_direction_input(camera_flash);\r
1239                 gpio_free(camera_flash);\r
1240             }\r
1241         }\r
1242         gpio_res->gpio_init = 0;\r
1243         \r
1244     return 0;\r
1245 }\r
1246 \r
1247 static int rk_sensor_io_init(void)\r
1248 {\r
1249     int i,j;\r
1250         static bool is_init = false;\r
1251         struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;\r
1252 \r
1253     if(is_init) {               \r
1254                 return 0;\r
1255         } else {\r
1256                 is_init = true;\r
1257         }\r
1258     \r
1259     if (sensor_ioctl_cb.sensor_power_cb == NULL)\r
1260         sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;\r
1261     if (sensor_ioctl_cb.sensor_reset_cb == NULL)\r
1262         sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;\r
1263     if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)\r
1264         sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;\r
1265     if (sensor_ioctl_cb.sensor_flash_cb == NULL)\r
1266         sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;\r
1267     \r
1268         for(i = 0;i < RK_CAM_NUM; i++) {\r
1269         if (plat_data->gpio_res[i].dev_name == NULL)\r
1270             continue;\r
1271         \r
1272                 if (_rk_sensor_io_init_(&plat_data->gpio_res[i])<0)\r
1273             goto sensor_io_init_erro;\r
1274         \r
1275         for (j=0; j<10; j++) {\r
1276             memset(&plat_data->info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));\r
1277 \r
1278             if (j==0) {\r
1279                 plat_data->info[i].fival[j].width = 176;\r
1280                 plat_data->info[i].fival[j].height = 144;\r
1281             } else if (j==1) {\r
1282                 plat_data->info[i].fival[j].width = 320;\r
1283                 plat_data->info[i].fival[j].height = 240;\r
1284             } else if (j==2) {\r
1285                 plat_data->info[i].fival[j].width = 352;\r
1286                 plat_data->info[i].fival[j].height = 288;\r
1287             } else if (j==3) {\r
1288                 plat_data->info[i].fival[j].width = 640;\r
1289                 plat_data->info[i].fival[j].height = 480;\r
1290             } else if (j==4) {\r
1291                 plat_data->info[i].fival[j].width = 720;\r
1292                 plat_data->info[i].fival[j].height = 480;\r
1293             } else if (j==5) {\r
1294                 plat_data->info[i].fival[j].width = 1280;\r
1295                 plat_data->info[i].fival[j].height = 720;\r
1296             } else if (j==6) {\r
1297                 plat_data->info[i].fival[j].width = 240;\r
1298                 plat_data->info[i].fival[j].height = 160;\r
1299             } else if (j==7) {\r
1300                 plat_data->info[i].fival[j].width = 800;\r
1301                 plat_data->info[i].fival[j].height = 600;\r
1302             } \r
1303             if (plat_data->info[i].fival[j].width && plat_data->info[i].fival[j].height) {\r
1304                 rk29_sensor_fps_get(i,&plat_data->info[i].fival[j].discrete.denominator,\r
1305                     plat_data->info[i].fival[j].width,plat_data->info[i].fival[j].height);\r
1306                 plat_data->info[i].fival[j].discrete.numerator= 1000;\r
1307                 plat_data->info[i].fival[j].index = 0;\r
1308                 plat_data->info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1309                 plat_data->info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1310             }\r
1311         }\r
1312         \r
1313         continue;\r
1314 sensor_io_init_erro:\r
1315                 _rk_sensor_io_deinit_(&plat_data->gpio_res[i]);\r
1316         }\r
1317     \r
1318     i = 0;\r
1319     while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1320         if (_rk_sensor_io_init_(&new_camera[i].io)<0)\r
1321             _rk_sensor_io_deinit_(&new_camera[i].io);\r
1322 \r
1323         i++;\r
1324     }\r
1325         return 0;\r
1326 }\r
1327 \r
1328 static int rk_sensor_io_deinit(int sensor)\r
1329 {\r
1330     int i;\r
1331         struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;\r
1332     \r
1333     for(i = 0;i < RK_CAM_NUM; i++) {\r
1334         if (plat_data->gpio_res[i].dev_name == NULL)\r
1335             continue;\r
1336         \r
1337                 _rk_sensor_io_deinit_(&plat_data->gpio_res[i]);\r
1338     }\r
1339 \r
1340     i = 0;\r
1341     while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1342         _rk_sensor_io_deinit_(&new_camera[i].io);\r
1343 \r
1344         i++;\r
1345     }\r
1346     \r
1347     return 0;\r
1348 }\r
1349 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)\r
1350 {\r
1351     struct rk29camera_gpio_res *res = NULL;\r
1352     struct rkcamera_platform_data *new_cam_dev = NULL;\r
1353         struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;\r
1354     int ret = RK29_CAM_IO_SUCCESS,i = 0;\r
1355     struct soc_camera_link *dev_icl = NULL;\r
1356 \r
1357     //for test reg\r
1358         for(i = 0;i < RK_CAM_NUM;i++){\r
1359                 if(plat_data->gpio_res[i].dev_name &&  (strcmp(plat_data->gpio_res[i].dev_name, dev_name(dev)) == 0)) {\r
1360                         res = (struct rk29camera_gpio_res *)&plat_data->gpio_res[i];\r
1361             dev_icl = &plat_data->register_dev[i].link_info;\r
1362                         break;\r
1363             } \r
1364     }\r
1365 \r
1366     if (res == NULL) {\r
1367         i = 0;\r
1368         while (strstr(new_camera[i].dev_name,"end")==NULL) {\r
1369             if (strcmp(new_camera[i].dev_name, dev_name(dev)) == 0) {\r
1370                 res = (struct rk29camera_gpio_res *)&new_camera[i].io; \r
1371                 new_cam_dev = &new_camera[i];\r
1372                 dev_icl = &new_camera[i].dev.link_info;\r
1373                 break;\r
1374             }\r
1375             i++;\r
1376         }\r
1377     }\r
1378     \r
1379     if (res == NULL) {\r
1380         eprintk("%s is not regisiterd in rk29_camera_platform_data!!",dev_name(dev));\r
1381         ret = RK29_CAM_EIO_INVALID;\r
1382         goto rk_sensor_ioctrl_end;\r
1383     }\r
1384         \r
1385         switch (cmd)\r
1386         {\r
1387                 case Cam_Power:\r
1388                 {\r
1389                         if (sensor_ioctl_cb.sensor_power_cb) {\r
1390                 ret = sensor_ioctl_cb.sensor_power_cb(res, on);                \r
1391                         } else {\r
1392                 eprintk("sensor_ioctl_cb.sensor_power_cb is NULL");\r
1393                 WARN_ON(1);\r
1394                         }\r
1395                         break;\r
1396                 }\r
1397                 case Cam_Reset:\r
1398                 {\r
1399                         if (sensor_ioctl_cb.sensor_reset_cb) {\r
1400                 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);\r
1401 \r
1402                 ret = (ret != RK29_CAM_EIO_INVALID)?ret:0;\r
1403                         } else {\r
1404                 eprintk( "sensor_ioctl_cb.sensor_reset_cb is NULL");\r
1405                 WARN_ON(1);\r
1406                         }\r
1407                         break;\r
1408                 }\r
1409 \r
1410                 case Cam_PowerDown:\r
1411                 {\r
1412                         if (sensor_ioctl_cb.sensor_powerdown_cb) {\r
1413                 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);\r
1414                         } else {\r
1415                 eprintk( "sensor_ioctl_cb.sensor_powerdown_cb is NULL");\r
1416                 WARN_ON(1);\r
1417                         }\r
1418                         break;\r
1419                 }\r
1420 \r
1421                 case Cam_Flash:\r
1422                 {\r
1423                         if (sensor_ioctl_cb.sensor_flash_cb) {\r
1424                 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);\r
1425                         } else {\r
1426                 eprintk( "sensor_ioctl_cb.sensor_flash_cb is NULL!");\r
1427                 WARN_ON(1);\r
1428                         }\r
1429                         break;\r
1430                 }\r
1431 \r
1432         case Cam_Mclk:\r
1433         {\r
1434             if (plat_data->sensor_mclk && dev_icl) {\r
1435                 plat_data->sensor_mclk(dev_icl->bus_id,(on!=0)?1:0,on);\r
1436             } else { \r
1437                 eprintk( "%s(%d): sensor_mclk(%p) or dev_icl(%p) is NULL",\r
1438                     __FUNCTION__,__LINE__,plat_data->sensor_mclk,dev_icl);\r
1439             }\r
1440             break;\r
1441         }\r
1442         \r
1443                 default:\r
1444                 {\r
1445                         eprintk("%s cmd(0x%x) is unknown!",__FUNCTION__, cmd);\r
1446                         break;\r
1447                 }\r
1448         }\r
1449 rk_sensor_ioctrl_end:\r
1450     return ret;\r
1451 }\r
1452 \r
1453 static int rk_sensor_pwrseq(struct device *dev,int powerup_sequence, int on, int mclk_rate)\r
1454 {\r
1455     int ret =0;\r
1456     int i,powerup_type;\r
1457     \r
1458     for (i=0; i<8; i++) {\r
1459 \r
1460         if (on == 1)\r
1461             powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,i);\r
1462         else\r
1463             powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,(7-i));\r
1464         \r
1465         switch (powerup_type)\r
1466         {\r
1467             case SENSOR_PWRSEQ_AVDD:\r
1468             case SENSOR_PWRSEQ_DOVDD:\r
1469             case SENSOR_PWRSEQ_DVDD:\r
1470             case SENSOR_PWRSEQ_PWR:\r
1471             {  \r
1472                 ret = rk_sensor_ioctrl(dev,Cam_Power, on);\r
1473                 if (ret<0) {\r
1474                     eprintk("SENSOR_PWRSEQ_PWR failed");\r
1475                 } else { \r
1476                     msleep(10);\r
1477                     dprintk("SensorPwrSeq-power: %d",on);\r
1478                 }\r
1479                 break;\r
1480             }\r
1481 \r
1482             case SENSOR_PWRSEQ_HWRST:\r
1483             {\r
1484                 ret = rk_sensor_ioctrl(dev,Cam_Reset, 1);\r
1485                 msleep(2);\r
1486                 ret |= rk_sensor_ioctrl(dev,Cam_Reset, 0); \r
1487                 if (ret<0) {\r
1488                     eprintk("SENSOR_PWRSEQ_HWRST failed");\r
1489                 } else {\r
1490                     dprintk("SensorPwrSeq-reset: %d",on);\r
1491                 }\r
1492                 break;\r
1493             }\r
1494 \r
1495             case SENSOR_PWRSEQ_PWRDN:\r
1496             {     \r
1497                 ret = rk_sensor_ioctrl(dev,Cam_PowerDown, !on);\r
1498                 if (ret<0) {\r
1499                     eprintk("SENSOR_PWRSEQ_PWRDN failed");\r
1500                 } else {\r
1501                     dprintk("SensorPwrSeq-power down: %d",!on);\r
1502                 }\r
1503                 break;\r
1504             }\r
1505 \r
1506             case SENSOR_PWRSEQ_CLKIN:\r
1507             {\r
1508                 ret = rk_sensor_ioctrl(dev,Cam_Mclk, (on?mclk_rate:on));\r
1509                 if (ret<0) {\r
1510                     eprintk("SENSOR_PWRSEQ_CLKIN failed");\r
1511                 } else {\r
1512                     dprintk("SensorPwrSeq-clock: %d",on);\r
1513                 }\r
1514                 break;\r
1515             }\r
1516 \r
1517             default:\r
1518                 break;\r
1519         }\r
1520         \r
1521     } \r
1522 \r
1523     return ret;\r
1524 }\r
1525 \r
1526 static int rk_sensor_power(struct device *dev, int on)\r
1527 {\r
1528     int i, powerup_sequence,mclk_rate;\r
1529     \r
1530     struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;\r
1531     struct rk29camera_gpio_res *dev_io = NULL;\r
1532     struct rkcamera_platform_data *new_camera=NULL, *new_device=NULL;\r
1533     bool real_pwroff = true;\r
1534     int ret = 0;\r
1535     \r
1536     //ddl@rock-chips.com: other sensor must switch into standby before turn on power;\r
1537     for(i = 0;i < RK_CAM_NUM; i++) {\r
1538         if (plat_data->gpio_res[i].dev_name == NULL)\r
1539             continue;\r
1540 \r
1541         if (plat_data->gpio_res[i].gpio_powerdown != INVALID_GPIO) {\r
1542             gpio_direction_output(plat_data->gpio_res[i].gpio_powerdown,\r
1543                 ((plat_data->gpio_res[i].gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));            \r
1544         }\r
1545         \r
1546         if (strcmp(plat_data->gpio_res[i].dev_name,dev_name(dev))) {\r
1547             if (sensor_ioctl_cb.sensor_powerdown_cb && on)\r
1548                 sensor_ioctl_cb.sensor_powerdown_cb(&plat_data->gpio_res[i],1);\r
1549         } else {            \r
1550             dev_io = &plat_data->gpio_res[i];\r
1551             real_pwroff = true;\r
1552         }\r
1553     }\r
1554 \r
1555     new_camera = plat_data->register_dev_new;\r
1556     while (strstr(new_camera->dev_name,"end")==NULL) {\r
1557 \r
1558         if (new_camera->io.gpio_powerdown != INVALID_GPIO) {\r
1559             gpio_direction_output(new_camera->io.gpio_powerdown,\r
1560                 ((new_camera->io.gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));            \r
1561         }\r
1562         \r
1563         if (strcmp(new_camera->dev_name,dev_name(dev))) {\r
1564             if (sensor_ioctl_cb.sensor_powerdown_cb && on)\r
1565                 sensor_ioctl_cb.sensor_powerdown_cb(&new_camera->io,1);\r
1566         } else {\r
1567             new_device = new_camera;\r
1568             dev_io = &new_camera->io;\r
1569             \r
1570             if (!Sensor_Support_DirectResume(new_camera->pwdn_info))\r
1571                 real_pwroff = true;\r
1572             else\r
1573                 real_pwroff = false;\r
1574         }\r
1575         new_camera++;\r
1576     }\r
1577 \r
1578     if (new_device != NULL) {\r
1579         powerup_sequence = new_device->powerup_sequence;\r
1580         if ((new_device->mclk_rate == 24) || (new_device->mclk_rate == 48))\r
1581             mclk_rate = new_device->mclk_rate*1000000;\r
1582         else \r
1583             mclk_rate = 24000000;\r
1584     } else {\r
1585         powerup_sequence = sensor_PWRSEQ_DEFAULT;\r
1586         mclk_rate = 24000000;\r
1587     }\r
1588         \r
1589     if (on) {\r
1590         rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate);  \r
1591     } else {\r
1592         if (real_pwroff) {\r
1593             rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate);\r
1594             \r
1595             /*ddl@rock-chips.com: all power down switch to Hi-Z after power off*/\r
1596             for(i = 0;i < RK_CAM_NUM; i++) {\r
1597                 if (plat_data->gpio_res[i].dev_name == NULL)\r
1598                     continue;\r
1599                 if (plat_data->gpio_res[i].gpio_powerdown != INVALID_GPIO) {\r
1600                     gpio_direction_input(plat_data->gpio_res[i].gpio_powerdown);            \r
1601                 }\r
1602             }\r
1603             \r
1604             new_camera = plat_data->register_dev_new;\r
1605             while (strstr(new_camera->dev_name,"end")==NULL) {\r
1606                 if (new_camera->io.gpio_powerdown != INVALID_GPIO) {\r
1607                     gpio_direction_input(new_camera->io.gpio_powerdown);            \r
1608                 }\r
1609                 new_camera->pwdn_info |= 0x01;\r
1610                 new_camera++;\r
1611             }\r
1612         } else {            \r
1613             rk_sensor_ioctrl(dev,Cam_PowerDown, !on);\r
1614 \r
1615             rk_sensor_ioctrl(dev,Cam_Mclk, 0);\r
1616         }\r
1617 \r
1618         msleep(500);\r
1619     }\r
1620     return ret;\r
1621 }\r
1622 #if 0\r
1623 static int rk_sensor_reset(struct device *dev)\r
1624 {\r
1625 #if 0\r
1626         rk_sensor_ioctrl(dev,Cam_Reset,1);\r
1627         msleep(2);\r
1628         rk_sensor_ioctrl(dev,Cam_Reset,0);\r
1629 #else\r
1630     /*\r
1631     *ddl@rock-chips.com : the rest function invalidate, because this operate is put together in rk_sensor_power;\r
1632     */\r
1633 #endif\r
1634         return 0;\r
1635 }\r
1636 #endif\r
1637 static int rk_sensor_powerdown(struct device *dev, int on)\r
1638 {\r
1639         return rk_sensor_ioctrl(dev,Cam_PowerDown,on);\r
1640 }\r
1641 #if ((defined PMEM_CAM_NECESSARY)&&(defined CONFIG_VIDEO_RK29_CAMMEM_PMEM))\r
1642 static struct android_pmem_platform_data android_pmem_cam_pdata = {\r
1643         .name           = "pmem_cam",\r
1644         .start          = PMEM_CAM_BASE,\r
1645         .size           = PMEM_CAM_SIZE,\r
1646         .no_allocator   = 1,\r
1647         .cached         = 1,\r
1648 };\r
1649 \r
1650 static struct platform_device android_pmem_cam_device = {\r
1651         .name           = "android_pmem",\r
1652         .id             = 1,\r
1653         .dev            = {\r
1654                 .platform_data = &android_pmem_cam_pdata,\r
1655         },\r
1656 };\r
1657 #endif\r
1658 #ifdef CONFIG_RK_CONFIG\r
1659 int camera_set_platform_param(int id, int i2c, int gpio)\r
1660 {\r
1661         int i;\r
1662         char *dev_name[] = {\r
1663                 SENSOR_DEVICE_NAME_0, \r
1664                 SENSOR_DEVICE_NAME_01, \r
1665                 SENSOR_DEVICE_NAME_02, \r
1666                 SENSOR_DEVICE_NAME_1, \r
1667                 SENSOR_DEVICE_NAME_11, \r
1668                 SENSOR_DEVICE_NAME_12\r
1669         };\r
1670         char *module_name[] = {\r
1671                 SENSOR_NAME_0,\r
1672                 SENSOR_NAME_01,\r
1673                 SENSOR_NAME_02,\r
1674                 SENSOR_NAME_1,\r
1675                 SENSOR_NAME_11,\r
1676                 SENSOR_NAME_12\r
1677         };\r
1678 \r
1679         if(id < 0 || id >= 6)\r
1680                 return -EINVAL;\r
1681         for(i = 0; i < 6; i++){\r
1682             if(i == id){\r
1683                 printk("%s: id = %d, i2c = %d, gpio = %d\n", __func__, id, i2c, gpio);\r
1684             }\r
1685             if(rk_camera_platform_data.gpio_res[i].dev_name &&\r
1686                strcmp(rk_camera_platform_data.gpio_res[i].dev_name, dev_name[id]) == 0)\r
1687                     rk_camera_platform_data.gpio_res[i].gpio_powerdown = gpio;\r
1688             if(rk_camera_platform_data.register_dev[i].link_info.module_name &&\r
1689                strcmp(rk_camera_platform_data.register_dev[i].link_info.module_name, module_name[id]) == 0)\r
1690                     rk_camera_platform_data.register_dev[i].link_info.i2c_adapter_id = i2c;\r
1691         }\r
1692 \r
1693         return 0;\r
1694 }\r
1695 #else\r
1696 int camera_set_platform_param(int id, int i2c, int gpio)\r
1697 {\r
1698         return 0;\r
1699 }\r
1700 #endif\r
1701 \r
1702 int rk_sensor_register(void)\r
1703 {\r
1704     int i;\r
1705     \r
1706     i = 0;\r
1707     while (strstr(new_camera[i].dev.device_info.dev.init_name,"end")==NULL) {\r
1708 \r
1709         if (new_camera[i].dev.i2c_cam_info.addr == INVALID_VALUE) {\r
1710             WARN(1, \r
1711                 KERN_ERR "%s(%d): new_camera[%d] i2c addr is invalidate!",\r
1712                 __FUNCTION__,__LINE__,i);\r
1713             continue;\r
1714         }\r
1715         \r
1716         sprintf(new_camera[i].dev_name,"%s_%d",new_camera[i].dev.device_info.dev.init_name,i+3);\r
1717         new_camera[i].dev.device_info.dev.init_name =(const char*)&new_camera[i].dev_name[0];\r
1718         new_camera[i].io.dev_name =(const char*)&new_camera[i].dev_name[0];\r
1719         \r
1720         if (new_camera[i].orientation == INVALID_VALUE) {\r
1721             if (strstr(new_camera[i].dev_name,"back")) {\r
1722                 new_camera[i].orientation = 90;\r
1723             } else {\r
1724                 new_camera[i].orientation = 270;\r
1725             }\r
1726         }\r
1727 \r
1728         new_camera[i].dev.link_info.power = rk_sensor_power;\r
1729         new_camera[i].dev.link_info.powerdown = rk_sensor_powerdown; \r
1730 \r
1731         new_camera[i].dev.link_info.board_info =&new_camera[i].dev.i2c_cam_info;\r
1732         new_camera[i].dev.device_info.id = i+6;\r
1733         new_camera[i].dev.device_info.dev.platform_data = &new_camera[i].dev.link_info;\r
1734 \r
1735         if (new_camera[i].flash == true) {\r
1736             if (CONFIG_SENSOR_FLASH_IOCTL_USR == 0) {\r
1737                 eprintk("new_camera[%d] have been configed as attach flash, but CONFIG_SENSOR_FLASH_IOCTL_USR isn't turn on!",i);\r
1738 \r
1739                 new_camera[i].flash = false;    \r
1740             }\r
1741         }\r
1742 \r
1743         new_camera[i].dev.link_info.priv_usr = &rk_camera_platform_data;\r
1744         platform_device_register(&new_camera[i].dev.device_info);\r
1745         i++;\r
1746     }\r
1747     \r
1748     sprintf(new_camera[i].dev_name,"%s",new_camera[i].dev.device_info.dev.init_name);\r
1749 \r
1750     return 0;\r
1751 }\r
1752 #endif\r
1753 \r