blob: 7bc849e5f86c8001b02e77712ec4330d2542f1d0 [file] [log] [blame]
Duy Truonge833aca2013-02-12 13:35:08 -08001/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
Stepan Moskovchenko39236d72011-11-30 17:42:23 -08002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080014#include <asm/mach-types.h>
Kevin Chaneb6b6072012-01-17 11:54:54 -080015#include <linux/gpio.h>
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +053016#include <mach/socinfo.h>
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -080017#include <mach/camera.h>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080018#include <mach/msm_bus_board.h>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080019#include <mach/gpiomux.h>
20#include "devices.h"
Stepan Moskovchenko5a83dba2011-12-05 17:30:17 -080021#include "board-8930.h"
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080022
Steve Mucklef132c6c2012-06-06 18:30:57 -070023#ifdef CONFIG_MSM_CAMERA
24
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080025#if (defined(CONFIG_GPIO_SX150X) || defined(CONFIG_GPIO_SX150X_MODULE)) && \
26 defined(CONFIG_I2C)
27
28static struct i2c_board_info cam_expander_i2c_info[] = {
29 {
30 I2C_BOARD_INFO("sx1508q", 0x22),
31 .platform_data = &msm8930_sx150x_data[SX150X_CAM]
32 },
33};
34
35static struct msm_cam_expander_info cam_expander_info[] = {
36 {
37 cam_expander_i2c_info,
38 MSM_8930_GSBI4_QUP_I2C_BUS_ID,
39 },
40};
41#endif
42
43static struct gpiomux_setting cam_settings[] = {
44 {
45 .func = GPIOMUX_FUNC_GPIO, /*suspend*/
46 .drv = GPIOMUX_DRV_2MA,
47 .pull = GPIOMUX_PULL_DOWN,
48 },
49
50 {
51 .func = GPIOMUX_FUNC_1, /*active 1*/
52 .drv = GPIOMUX_DRV_2MA,
53 .pull = GPIOMUX_PULL_NONE,
54 },
55
56 {
57 .func = GPIOMUX_FUNC_GPIO, /*active 2*/
58 .drv = GPIOMUX_DRV_2MA,
59 .pull = GPIOMUX_PULL_NONE,
60 },
61
62 {
63 .func = GPIOMUX_FUNC_1, /*active 3*/
64 .drv = GPIOMUX_DRV_8MA,
65 .pull = GPIOMUX_PULL_NONE,
66 },
67
68 {
69 .func = GPIOMUX_FUNC_5, /*active 4*/
70 .drv = GPIOMUX_DRV_8MA,
71 .pull = GPIOMUX_PULL_UP,
72 },
73
74 {
75 .func = GPIOMUX_FUNC_6, /*active 5*/
76 .drv = GPIOMUX_DRV_8MA,
77 .pull = GPIOMUX_PULL_UP,
78 },
79
80 {
81 .func = GPIOMUX_FUNC_2, /*active 6*/
82 .drv = GPIOMUX_DRV_2MA,
83 .pull = GPIOMUX_PULL_UP,
84 },
85
86 {
87 .func = GPIOMUX_FUNC_3, /*active 7*/
88 .drv = GPIOMUX_DRV_8MA,
89 .pull = GPIOMUX_PULL_UP,
90 },
91
92 {
93 .func = GPIOMUX_FUNC_GPIO, /*i2c suspend*/
94 .drv = GPIOMUX_DRV_2MA,
95 .pull = GPIOMUX_PULL_KEEPER,
96 },
Hody Hung994f4622012-04-24 10:27:45 -070097 {
98 .func = GPIOMUX_FUNC_2, /*active 9*/
99 .drv = GPIOMUX_DRV_2MA,
100 .pull = GPIOMUX_PULL_NONE,
101 },
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800102
103};
104
105
Kevin Chaneb6b6072012-01-17 11:54:54 -0800106static struct msm_gpiomux_config msm8930_cam_common_configs[] = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800107 {
108 .gpio = 2,
109 .settings = {
110 [GPIOMUX_ACTIVE] = &cam_settings[2],
111 [GPIOMUX_SUSPENDED] = &cam_settings[0],
112 },
113 },
114 {
115 .gpio = 3,
116 .settings = {
117 [GPIOMUX_ACTIVE] = &cam_settings[1],
118 [GPIOMUX_SUSPENDED] = &cam_settings[0],
119 },
120 },
121 {
122 .gpio = 4,
123 .settings = {
Hody Hung994f4622012-04-24 10:27:45 -0700124 [GPIOMUX_ACTIVE] = &cam_settings[9],
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800125 [GPIOMUX_SUSPENDED] = &cam_settings[0],
126 },
127 },
128 {
129 .gpio = 5,
130 .settings = {
131 [GPIOMUX_ACTIVE] = &cam_settings[1],
132 [GPIOMUX_SUSPENDED] = &cam_settings[0],
133 },
134 },
135 {
136 .gpio = 76,
137 .settings = {
138 [GPIOMUX_ACTIVE] = &cam_settings[2],
139 [GPIOMUX_SUSPENDED] = &cam_settings[0],
140 },
141 },
142 {
143 .gpio = 107,
144 .settings = {
145 [GPIOMUX_ACTIVE] = &cam_settings[2],
146 [GPIOMUX_SUSPENDED] = &cam_settings[0],
147 },
148 },
Hody Hung80a3da82012-04-19 12:18:47 -0700149 {
150 .gpio = 54,
151 .settings = {
152 [GPIOMUX_ACTIVE] = &cam_settings[2],
153 [GPIOMUX_SUSPENDED] = &cam_settings[0],
154 },
155 },
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800156};
157
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530158static struct msm_gpiomux_config msm8930_evt_cam_configs[] = {
159 {
160 .gpio = 75,
161 .settings = {
162 [GPIOMUX_ACTIVE] = &cam_settings[2],
163 [GPIOMUX_SUSPENDED] = &cam_settings[0],
164 },
165 },
166};
167
Kevin Chaneb6b6072012-01-17 11:54:54 -0800168static struct msm_gpiomux_config msm8930_cam_2d_configs[] = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800169 {
170 .gpio = 18,
171 .settings = {
172 [GPIOMUX_ACTIVE] = &cam_settings[3],
173 [GPIOMUX_SUSPENDED] = &cam_settings[8],
174 },
175 },
176 {
177 .gpio = 19,
178 .settings = {
179 [GPIOMUX_ACTIVE] = &cam_settings[3],
180 [GPIOMUX_SUSPENDED] = &cam_settings[8],
181 },
182 },
183 {
184 .gpio = 20,
185 .settings = {
186 [GPIOMUX_ACTIVE] = &cam_settings[3],
187 [GPIOMUX_SUSPENDED] = &cam_settings[8],
188 },
189 },
190 {
191 .gpio = 21,
192 .settings = {
193 [GPIOMUX_ACTIVE] = &cam_settings[3],
194 [GPIOMUX_SUSPENDED] = &cam_settings[8],
195 },
196 },
197};
198
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530199static struct msm_gpiomux_config msm8930_evt_cam_2d_configs[] = {
200 {
201 .gpio = 36,
202 .settings = {
203 [GPIOMUX_ACTIVE] = &cam_settings[3],
204 [GPIOMUX_SUSPENDED] = &cam_settings[8],
205 },
206 },
207 {
208 .gpio = 37,
209 .settings = {
210 [GPIOMUX_ACTIVE] = &cam_settings[3],
211 [GPIOMUX_SUSPENDED] = &cam_settings[8],
212 },
213 },
214};
215
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800216#define VFE_CAMIF_TIMER1_GPIO 2
217#define VFE_CAMIF_TIMER2_GPIO 3
218#define VFE_CAMIF_TIMER3_GPIO_INT 4
219static struct msm_camera_sensor_strobe_flash_data strobe_flash_xenon = {
220 .flash_trigger = VFE_CAMIF_TIMER2_GPIO,
221 .flash_charge = VFE_CAMIF_TIMER1_GPIO,
222 .flash_charge_done = VFE_CAMIF_TIMER3_GPIO_INT,
223 .flash_recharge_duration = 50000,
224 .irq = MSM_GPIO_TO_INT(VFE_CAMIF_TIMER3_GPIO_INT),
225};
226
227#ifdef CONFIG_MSM_CAMERA_FLASH
228static struct msm_camera_sensor_flash_src msm_flash_src = {
229 .flash_sr_type = MSM_CAMERA_FLASH_SRC_EXT,
Jeyaprakash Soundrapandian85099fe2012-05-15 17:09:51 -0700230 ._fsrc.ext_driver_src.led_en = VFE_CAMIF_TIMER1_GPIO,
231 ._fsrc.ext_driver_src.led_flash_en = VFE_CAMIF_TIMER2_GPIO,
232 ._fsrc.ext_driver_src.flash_id = MAM_CAMERA_EXT_LED_FLASH_TPS61310,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800233};
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530234
235static struct msm_camera_sensor_flash_src msm_flash_src_led = {
236 .flash_sr_type = MSM_CAMERA_FLASH_SRC_LED1,
237 ._fsrc.ext_driver_src.led_en = VFE_CAMIF_TIMER1_GPIO,
238 ._fsrc.ext_driver_src.led_flash_en = VFE_CAMIF_TIMER2_GPIO,
239};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800240#endif
241
242static struct msm_bus_vectors cam_init_vectors[] = {
243 {
244 .src = MSM_BUS_MASTER_VFE,
245 .dst = MSM_BUS_SLAVE_EBI_CH0,
246 .ab = 0,
247 .ib = 0,
248 },
249 {
250 .src = MSM_BUS_MASTER_VPE,
251 .dst = MSM_BUS_SLAVE_EBI_CH0,
252 .ab = 0,
253 .ib = 0,
254 },
255 {
256 .src = MSM_BUS_MASTER_JPEG_ENC,
257 .dst = MSM_BUS_SLAVE_EBI_CH0,
258 .ab = 0,
259 .ib = 0,
260 },
261};
262
263static struct msm_bus_vectors cam_preview_vectors[] = {
264 {
265 .src = MSM_BUS_MASTER_VFE,
266 .dst = MSM_BUS_SLAVE_EBI_CH0,
267 .ab = 27648000,
Kiran Kumar H Nab2b9ac2013-01-18 22:09:03 -0800268 .ib = 2656000000UL,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800269 },
270 {
271 .src = MSM_BUS_MASTER_VPE,
272 .dst = MSM_BUS_SLAVE_EBI_CH0,
273 .ab = 0,
274 .ib = 0,
275 },
276 {
277 .src = MSM_BUS_MASTER_JPEG_ENC,
278 .dst = MSM_BUS_SLAVE_EBI_CH0,
279 .ab = 0,
280 .ib = 0,
281 },
282};
283
284static struct msm_bus_vectors cam_video_vectors[] = {
285 {
286 .src = MSM_BUS_MASTER_VFE,
287 .dst = MSM_BUS_SLAVE_EBI_CH0,
Nishant Pandit7331bd92013-04-16 05:59:22 +0530288 .ab = 800000000,
Kiran Kumar H Nab2b9ac2013-01-18 22:09:03 -0800289 .ib = 2656000000UL,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800290 },
291 {
292 .src = MSM_BUS_MASTER_VPE,
293 .dst = MSM_BUS_SLAVE_EBI_CH0,
294 .ab = 206807040,
295 .ib = 488816640,
296 },
297 {
298 .src = MSM_BUS_MASTER_JPEG_ENC,
299 .dst = MSM_BUS_SLAVE_EBI_CH0,
300 .ab = 0,
301 .ib = 0,
302 },
303};
304
305static struct msm_bus_vectors cam_snapshot_vectors[] = {
306 {
307 .src = MSM_BUS_MASTER_VFE,
308 .dst = MSM_BUS_SLAVE_EBI_CH0,
Kiran Kumar H Nab2b9ac2013-01-18 22:09:03 -0800309 .ab = 600000000,
310 .ib = 2656000000UL,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800311 },
312 {
313 .src = MSM_BUS_MASTER_VPE,
314 .dst = MSM_BUS_SLAVE_EBI_CH0,
315 .ab = 0,
316 .ib = 0,
317 },
318 {
319 .src = MSM_BUS_MASTER_JPEG_ENC,
320 .dst = MSM_BUS_SLAVE_EBI_CH0,
321 .ab = 540000000,
322 .ib = 1350000000,
323 },
324};
325
326static struct msm_bus_vectors cam_zsl_vectors[] = {
327 {
328 .src = MSM_BUS_MASTER_VFE,
329 .dst = MSM_BUS_SLAVE_EBI_CH0,
Nishant Pandit7331bd92013-04-16 05:59:22 +0530330 .ab = 800000000,
Kiran Kumar H Nab2b9ac2013-01-18 22:09:03 -0800331 .ib = 2656000000UL,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800332 },
333 {
334 .src = MSM_BUS_MASTER_VPE,
335 .dst = MSM_BUS_SLAVE_EBI_CH0,
336 .ab = 0,
337 .ib = 0,
338 },
339 {
340 .src = MSM_BUS_MASTER_JPEG_ENC,
341 .dst = MSM_BUS_SLAVE_EBI_CH0,
Nishant Pandit7331bd92013-04-16 05:59:22 +0530342 .ab = 0,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800343 .ib = 1350000000,
344 },
345};
346
Kiran Kumar H N1d1d3072012-07-05 13:40:13 -0700347static struct msm_bus_vectors cam_video_ls_vectors[] = {
348 {
349 .src = MSM_BUS_MASTER_VFE,
350 .dst = MSM_BUS_SLAVE_EBI_CH0,
Nishant Pandit7331bd92013-04-16 05:59:22 +0530351 .ab = 800000000,
352 .ib = 3522000000UL,
Kiran Kumar H N1d1d3072012-07-05 13:40:13 -0700353 },
354 {
355 .src = MSM_BUS_MASTER_VPE,
356 .dst = MSM_BUS_SLAVE_EBI_CH0,
357 .ab = 206807040,
358 .ib = 488816640,
359 },
360 {
361 .src = MSM_BUS_MASTER_JPEG_ENC,
362 .dst = MSM_BUS_SLAVE_EBI_CH0,
Nishant Pandit7331bd92013-04-16 05:59:22 +0530363 .ab = 0,
Kiran Kumar H N1d1d3072012-07-05 13:40:13 -0700364 .ib = 1350000000,
365 },
366};
367
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800368static struct msm_bus_vectors cam_dual_vectors[] = {
369 {
370 .src = MSM_BUS_MASTER_VFE,
371 .dst = MSM_BUS_SLAVE_EBI_CH0,
372 .ab = 302071680,
373 .ib = 1208286720,
374 },
375 {
376 .src = MSM_BUS_MASTER_VPE,
377 .dst = MSM_BUS_SLAVE_EBI_CH0,
378 .ab = 206807040,
379 .ib = 488816640,
380 },
381 {
382 .src = MSM_BUS_MASTER_JPEG_ENC,
383 .dst = MSM_BUS_SLAVE_EBI_CH0,
384 .ab = 540000000,
385 .ib = 1350000000,
386 },
387};
388
389
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800390static struct msm_bus_paths cam_bus_client_config[] = {
391 {
392 ARRAY_SIZE(cam_init_vectors),
393 cam_init_vectors,
394 },
395 {
396 ARRAY_SIZE(cam_preview_vectors),
397 cam_preview_vectors,
398 },
399 {
400 ARRAY_SIZE(cam_video_vectors),
401 cam_video_vectors,
402 },
403 {
404 ARRAY_SIZE(cam_snapshot_vectors),
405 cam_snapshot_vectors,
406 },
407 {
408 ARRAY_SIZE(cam_zsl_vectors),
409 cam_zsl_vectors,
410 },
Kiran Kumar H N1d1d3072012-07-05 13:40:13 -0700411 {
412 ARRAY_SIZE(cam_video_ls_vectors),
413 cam_video_ls_vectors,
414 },
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800415 {
416 ARRAY_SIZE(cam_dual_vectors),
417 cam_dual_vectors,
418 },
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800419};
420
421static struct msm_bus_scale_pdata cam_bus_client_pdata = {
422 cam_bus_client_config,
423 ARRAY_SIZE(cam_bus_client_config),
424 .name = "msm_camera",
425};
426
427static struct msm_camera_device_platform_data msm_camera_csi_device_data[] = {
428 {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800429 .csid_core = 0,
Suresh Vankadara8df2c752012-01-18 00:18:03 +0530430 .is_vpe = 1,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800431 .cam_bus_scale_table = &cam_bus_client_pdata,
432 },
433 {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800434 .csid_core = 1,
Suresh Vankadara8df2c752012-01-18 00:18:03 +0530435 .is_vpe = 1,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800436 .cam_bus_scale_table = &cam_bus_client_pdata,
437 },
438};
439
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800440static struct camera_vreg_t msm_8930_cam_vreg[] = {
Kevin Chaneb6b6072012-01-17 11:54:54 -0800441 {"cam_vdig", REG_LDO, 1200000, 1200000, 105000},
David Collinsf4c3d642012-03-02 09:04:57 -0800442 {"cam_vio", REG_VS, 0, 0, 0},
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800443 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800444 {"cam_vaf", REG_LDO, 2800000, 2850000, 300000},
445};
446
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530447static struct camera_vreg_t msm_8930_evt_cam_vreg[] = {
448 {"cam_vdig", REG_LDO, 1500000, 1500000, 105000},
449 {"cam_vio", REG_VS, 0, 0, 0},
450 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
451 {"cam_vaf", REG_LDO, 2800000, 2850000, 300000},
452};
453
Kevin Chaneb6b6072012-01-17 11:54:54 -0800454static struct gpio msm8930_common_cam_gpio[] = {
Kevin Chaneb6b6072012-01-17 11:54:54 -0800455 {20, GPIOF_DIR_IN, "CAMIF_I2C_DATA"},
456 {21, GPIOF_DIR_IN, "CAMIF_I2C_CLK"},
457};
458
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530459static struct gpio msm8930_evt_common_cam_gpio[] = {
460 {36, GPIOF_DIR_IN, "CAMIF_I2C_DATA"},
461 {37, GPIOF_DIR_IN, "CAMIF_I2C_CLK"},
462};
463
Kevin Chaneb6b6072012-01-17 11:54:54 -0800464static struct gpio msm8930_front_cam_gpio[] = {
Hody Hung994f4622012-04-24 10:27:45 -0700465 {4, GPIOF_DIR_IN, "CAMIF_MCLK"},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800466 {76, GPIOF_DIR_OUT, "CAM_RESET"},
467};
468
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530469static struct gpio msm8930_evt_front_cam_gpio[] = {
470 {4, GPIOF_DIR_IN, "CAMIF_MCLK"},
471 {76, GPIOF_DIR_OUT, "CAM_RESET"},
472 {75, GPIOF_DIR_OUT, "CAM_STBY_N"},
473};
474
Kevin Chaneb6b6072012-01-17 11:54:54 -0800475static struct gpio msm8930_back_cam_gpio[] = {
Hody Hung994f4622012-04-24 10:27:45 -0700476 {5, GPIOF_DIR_IN, "CAMIF_MCLK"},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800477 {107, GPIOF_DIR_OUT, "CAM_RESET"},
Hody Hung80a3da82012-04-19 12:18:47 -0700478 {54, GPIOF_DIR_OUT, "CAM_STBY_N"},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800479};
480
481static struct msm_gpio_set_tbl msm8930_front_cam_gpio_set_tbl[] = {
482 {76, GPIOF_OUT_INIT_LOW, 1000},
483 {76, GPIOF_OUT_INIT_HIGH, 4000},
484};
485
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530486static struct msm_gpio_set_tbl msm8930_evt_front_cam_gpio_set_tbl[] = {
487 {75, GPIOF_OUT_INIT_LOW, 1000},
488 {75, GPIOF_OUT_INIT_HIGH, 4000},
489 {76, GPIOF_OUT_INIT_LOW, 1000},
490 {76, GPIOF_OUT_INIT_HIGH, 4000},
491};
492
Kevin Chaneb6b6072012-01-17 11:54:54 -0800493static struct msm_gpio_set_tbl msm8930_back_cam_gpio_set_tbl[] = {
Hody Hung80a3da82012-04-19 12:18:47 -0700494 {54, GPIOF_OUT_INIT_LOW, 1000},
495 {54, GPIOF_OUT_INIT_HIGH, 4000},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800496 {107, GPIOF_OUT_INIT_LOW, 1000},
497 {107, GPIOF_OUT_INIT_HIGH, 4000},
498};
499
500static struct msm_camera_gpio_conf msm_8930_front_cam_gpio_conf = {
501 .cam_gpiomux_conf_tbl = msm8930_cam_2d_configs,
502 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_cam_2d_configs),
503 .cam_gpio_common_tbl = msm8930_common_cam_gpio,
504 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_common_cam_gpio),
505 .cam_gpio_req_tbl = msm8930_front_cam_gpio,
506 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_front_cam_gpio),
507 .cam_gpio_set_tbl = msm8930_front_cam_gpio_set_tbl,
508 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_front_cam_gpio_set_tbl),
509};
510
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530511static struct msm_camera_gpio_conf msm_8930_evt__front_cam_gpio_conf = {
512 .cam_gpiomux_conf_tbl = msm8930_evt_cam_2d_configs,
513 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_evt_cam_2d_configs),
514 .cam_gpio_common_tbl = msm8930_evt_common_cam_gpio,
515 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_evt_common_cam_gpio),
516 .cam_gpio_req_tbl = msm8930_evt_front_cam_gpio,
517 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_evt_front_cam_gpio),
518 .cam_gpio_set_tbl = msm8930_evt_front_cam_gpio_set_tbl,
519 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_evt_front_cam_gpio_set_tbl),
520};
521
Kevin Chaneb6b6072012-01-17 11:54:54 -0800522static struct msm_camera_gpio_conf msm_8930_back_cam_gpio_conf = {
523 .cam_gpiomux_conf_tbl = msm8930_cam_2d_configs,
524 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_cam_2d_configs),
525 .cam_gpio_common_tbl = msm8930_common_cam_gpio,
526 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_common_cam_gpio),
527 .cam_gpio_req_tbl = msm8930_back_cam_gpio,
528 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio),
529 .cam_gpio_set_tbl = msm8930_back_cam_gpio_set_tbl,
530 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio_set_tbl),
531};
532
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530533static struct msm_camera_gpio_conf msm_8930_evt_back_cam_gpio_conf = {
534 .cam_gpiomux_conf_tbl = msm8930_evt_cam_2d_configs,
535 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_evt_cam_2d_configs),
536 .cam_gpio_common_tbl = msm8930_evt_common_cam_gpio,
537 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_evt_common_cam_gpio),
538 .cam_gpio_req_tbl = msm8930_back_cam_gpio,
539 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio),
540 .cam_gpio_set_tbl = msm8930_back_cam_gpio_set_tbl,
541 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio_set_tbl),
542};
543
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800544static struct i2c_board_info msm_act_main_cam_i2c_info = {
545 I2C_BOARD_INFO("msm_actuator", 0x11),
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800546};
547
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530548static struct msm_actuator_info msm_act_main_cam_3_info = {
549 .board_info = &msm_act_main_cam_i2c_info,
550 .cam_name = MSM_ACTUATOR_MAIN_CAM_3,
551 /* bus_id GSBI8 is specific to 8930 sglte evt */
552 .bus_id = MSM_8930_GSBI8_QUP_I2C_BUS_ID,
553 .vcm_pwd = 0,
554 .vcm_enable = 0,
555};
556
557
558static struct msm_camera_sensor_flash_data flash_ov8825 = {
559 .flash_type = MSM_CAMERA_FLASH_LED,
560#ifdef CONFIG_MSM_CAMERA_FLASH
561 .flash_src = &msm_flash_src_led
562#endif
563};
564
565static struct msm_camera_csi_lane_params ov8825_csi_lane_params = {
566 .csi_lane_assign = 0xE4,
567 .csi_lane_mask = 0x3,
568};
569
570static struct msm_camera_sensor_platform_info sensor_board_info_ov8825 = {
571 .mount_angle = 90,
572 .cam_vreg = msm_8930_evt_cam_vreg,
573 .num_vreg = ARRAY_SIZE(msm_8930_evt_cam_vreg),
574 .gpio_conf = &msm_8930_evt_back_cam_gpio_conf,
575 .csi_lane_params = &ov8825_csi_lane_params,
576};
577
578static struct msm_camera_sensor_info msm_camera_sensor_ov8825_data = {
579 .sensor_name = "ov8825",
580 .pdata = &msm_camera_csi_device_data[0],
581 .flash_data = &flash_ov8825,
582 .sensor_platform_info = &sensor_board_info_ov8825,
583 .csi_if = 1,
584 .camera_type = BACK_CAMERA_2D,
585 .sensor_type = BAYER_SENSOR,
586 .actuator_info = &msm_act_main_cam_3_info,
587};
588
589static struct msm_camera_sensor_flash_data flash_ov9724 = {
590 .flash_type = MSM_CAMERA_FLASH_NONE
591};
592
593static struct msm_camera_csi_lane_params ov9724_csi_lane_params = {
594 .csi_lane_assign = 0xE4,
595 .csi_lane_mask = 0x1,
596};
597
598static struct msm_camera_sensor_platform_info sensor_board_info_ov9724 = {
599 .mount_angle = 90,
600 .cam_vreg = msm_8930_evt_cam_vreg,
601 .num_vreg = ARRAY_SIZE(msm_8930_evt_cam_vreg),
602 .gpio_conf = &msm_8930_evt__front_cam_gpio_conf,
603 .csi_lane_params = &ov9724_csi_lane_params,
604};
605
606static struct msm_camera_sensor_info msm_camera_sensor_ov9724_data = {
607 .sensor_name = "ov9724",
608 .pdata = &msm_camera_csi_device_data[1],
609 .flash_data = &flash_ov9724,
610 .sensor_platform_info = &sensor_board_info_ov9724,
611 .csi_if = 1,
612 .camera_type = FRONT_CAMERA_2D,
613 .sensor_type = BAYER_SENSOR,
614};
615
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800616static struct msm_actuator_info msm_act_main_cam_0_info = {
617 .board_info = &msm_act_main_cam_i2c_info,
618 .cam_name = MSM_ACTUATOR_MAIN_CAM_0,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800619 .bus_id = MSM_8930_GSBI4_QUP_I2C_BUS_ID,
620 .vcm_pwd = 0,
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800621 .vcm_enable = 0,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800622};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800623
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800624static struct msm_camera_sensor_flash_data flash_imx074 = {
625 .flash_type = MSM_CAMERA_FLASH_LED,
626#ifdef CONFIG_MSM_CAMERA_FLASH
627 .flash_src = &msm_flash_src
628#endif
629};
630
Hody Hung9ba65cf2012-01-17 17:34:51 -0800631static struct msm_camera_csi_lane_params imx074_csi_lane_params = {
632 .csi_lane_assign = 0xE4,
633 .csi_lane_mask = 0xF,
634};
635
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800636static struct msm_camera_sensor_platform_info sensor_board_info_imx074 = {
637 .mount_angle = 90,
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800638 .cam_vreg = msm_8930_cam_vreg,
639 .num_vreg = ARRAY_SIZE(msm_8930_cam_vreg),
Kevin Chaneb6b6072012-01-17 11:54:54 -0800640 .gpio_conf = &msm_8930_back_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800641 .csi_lane_params = &imx074_csi_lane_params,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800642};
643
644static struct msm_camera_sensor_info msm_camera_sensor_imx074_data = {
645 .sensor_name = "imx074",
646 .pdata = &msm_camera_csi_device_data[0],
647 .flash_data = &flash_imx074,
648 .strobe_flash_data = &strobe_flash_xenon,
649 .sensor_platform_info = &sensor_board_info_imx074,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800650 .csi_if = 1,
651 .camera_type = BACK_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530652 .sensor_type = BAYER_SENSOR,
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800653 .actuator_info = &msm_act_main_cam_0_info,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800654};
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800655
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800656static struct msm_camera_sensor_flash_data flash_mt9m114 = {
657 .flash_type = MSM_CAMERA_FLASH_NONE
658};
659
Hody Hung9ba65cf2012-01-17 17:34:51 -0800660static struct msm_camera_csi_lane_params mt9m114_csi_lane_params = {
661 .csi_lane_assign = 0xE4,
662 .csi_lane_mask = 0x1,
663};
664
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800665static struct msm_camera_sensor_platform_info sensor_board_info_mt9m114 = {
Sai Kumar Sanagavarapu5469a232013-03-04 14:07:41 +0530666 .mount_angle = 270,
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800667 .cam_vreg = msm_8930_cam_vreg,
668 .num_vreg = ARRAY_SIZE(msm_8930_cam_vreg),
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800669 .gpio_conf = &msm_8930_front_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800670 .csi_lane_params = &mt9m114_csi_lane_params,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800671};
672
673static struct msm_camera_sensor_info msm_camera_sensor_mt9m114_data = {
674 .sensor_name = "mt9m114",
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800675 .pdata = &msm_camera_csi_device_data[1],
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800676 .flash_data = &flash_mt9m114,
677 .sensor_platform_info = &sensor_board_info_mt9m114,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800678 .csi_if = 1,
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800679 .camera_type = FRONT_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530680 .sensor_type = YUV_SENSOR,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800681};
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800682
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800683static struct msm_camera_sensor_flash_data flash_ov2720 = {
684 .flash_type = MSM_CAMERA_FLASH_NONE,
685};
686
Hody Hung9ba65cf2012-01-17 17:34:51 -0800687static struct msm_camera_csi_lane_params ov2720_csi_lane_params = {
688 .csi_lane_assign = 0xE4,
689 .csi_lane_mask = 0x3,
690};
691
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800692static struct msm_camera_sensor_platform_info sensor_board_info_ov2720 = {
693 .mount_angle = 0,
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800694 .cam_vreg = msm_8930_cam_vreg,
695 .num_vreg = ARRAY_SIZE(msm_8930_cam_vreg),
Kevin Chaneb6b6072012-01-17 11:54:54 -0800696 .gpio_conf = &msm_8930_front_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800697 .csi_lane_params = &ov2720_csi_lane_params,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800698};
699
700static struct msm_camera_sensor_info msm_camera_sensor_ov2720_data = {
701 .sensor_name = "ov2720",
702 .pdata = &msm_camera_csi_device_data[1],
703 .flash_data = &flash_ov2720,
704 .sensor_platform_info = &sensor_board_info_ov2720,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800705 .csi_if = 1,
706 .camera_type = FRONT_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530707 .sensor_type = BAYER_SENSOR,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800708};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800709
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800710static struct msm_camera_sensor_flash_data flash_s5k3l1yx = {
Jeyaprakash Soundrapandian85099fe2012-05-15 17:09:51 -0700711 .flash_type = MSM_CAMERA_FLASH_LED,
712 .flash_src = &msm_flash_src
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800713};
714
Hody Hung9ba65cf2012-01-17 17:34:51 -0800715static struct msm_camera_csi_lane_params s5k3l1yx_csi_lane_params = {
716 .csi_lane_assign = 0xE4,
717 .csi_lane_mask = 0xF,
718};
719
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800720static struct msm_camera_sensor_platform_info sensor_board_info_s5k3l1yx = {
Bikas Gurung6d06af42012-04-23 15:06:04 -0700721 .mount_angle = 90,
Azam Sadiq Pasha Kapatrala Syed92fa99c2012-11-28 18:56:19 -0800722 .cam_vreg = msm_8930_cam_vreg,
723 .num_vreg = ARRAY_SIZE(msm_8930_cam_vreg),
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800724 .gpio_conf = &msm_8930_back_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800725 .csi_lane_params = &s5k3l1yx_csi_lane_params,
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800726};
727
Rajakumar Govindaram18ef38e2012-04-23 10:45:21 -0700728static struct msm_actuator_info msm_act_main_cam_2_info = {
729 .board_info = &msm_act_main_cam_i2c_info,
730 .cam_name = MSM_ACTUATOR_MAIN_CAM_2,
731 .bus_id = MSM_8930_GSBI4_QUP_I2C_BUS_ID,
732 .vcm_pwd = 0,
733 .vcm_enable = 0,
734};
735
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800736static struct msm_camera_sensor_info msm_camera_sensor_s5k3l1yx_data = {
737 .sensor_name = "s5k3l1yx",
738 .pdata = &msm_camera_csi_device_data[0],
739 .flash_data = &flash_s5k3l1yx,
740 .sensor_platform_info = &sensor_board_info_s5k3l1yx,
741 .csi_if = 1,
742 .camera_type = BACK_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530743 .sensor_type = BAYER_SENSOR,
Rajakumar Govindaram18ef38e2012-04-23 10:45:21 -0700744 .actuator_info = &msm_act_main_cam_2_info,
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800745};
746
Kevin Chan94b4c832012-03-02 21:27:16 -0800747static struct platform_device msm_camera_server = {
748 .name = "msm_cam_server",
749 .id = 0,
750};
751
Raju P.L.S.S.S.N3d901d22013-03-26 16:17:32 +0530752#ifdef CONFIG_I2C
753struct i2c_board_info msm8930_camera_i2c_boardinfo[] = {
754 {
755 I2C_BOARD_INFO("imx074", 0x1A),
756 .platform_data = &msm_camera_sensor_imx074_data,
757 },
758 {
759 I2C_BOARD_INFO("ov2720", 0x6C),
760 .platform_data = &msm_camera_sensor_ov2720_data,
761 },
762 {
763 I2C_BOARD_INFO("mt9m114", 0x48),
764 .platform_data = &msm_camera_sensor_mt9m114_data,
765 },
766 {
767 I2C_BOARD_INFO("s5k3l1yx", 0x20),
768 .platform_data = &msm_camera_sensor_s5k3l1yx_data,
769 },
770 {
771 I2C_BOARD_INFO("tps61310", 0x66),
772 },
773};
774
775/* 8930 SGLTE device */
776struct i2c_board_info msm8930_evt_camera_i2c_boardinfo[] = {
777 {
778 I2C_BOARD_INFO("ov8825", 0x6c>>1),
779 .platform_data = &msm_camera_sensor_ov8825_data,
780 },
781 {
782 I2C_BOARD_INFO("ov9724", 0x20>>1),
783 .platform_data = &msm_camera_sensor_ov9724_data,
784 },
785};
786
787struct msm_camera_board_info msm8930_camera_board_info = {
788 .board_info = msm8930_camera_i2c_boardinfo,
789 .num_i2c_board_info = ARRAY_SIZE(msm8930_camera_i2c_boardinfo),
790};
791#endif
792
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800793void __init msm8930_init_cam(void)
794{
Kevin Chaneb6b6072012-01-17 11:54:54 -0800795 msm_gpiomux_install(msm8930_cam_common_configs,
796 ARRAY_SIZE(msm8930_cam_common_configs));
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800797
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530798 if (machine_is_msm8930_evt() &&
799 (socinfo_get_platform_subtype() ==
800 PLATFORM_SUBTYPE_SGLTE)) {
801 msm_gpiomux_install(msm8930_evt_cam_configs,
802 ARRAY_SIZE(msm8930_evt_cam_configs));
Raju P.L.S.S.S.N3d901d22013-03-26 16:17:32 +0530803
804 /* Load ov8825 & ov9724 only for SGLTE device */
805 msm8930_camera_board_info.board_info =
806 msm8930_evt_camera_i2c_boardinfo;
807 msm8930_camera_board_info.num_i2c_board_info =
808 ARRAY_SIZE(msm8930_evt_camera_i2c_boardinfo);
Raju P.L.S.S.S.N98274022013-03-12 20:30:50 +0530809 }
810
Bikas Gurung6d06af42012-04-23 15:06:04 -0700811 if (machine_is_msm8930_cdp()) {
812 struct msm_camera_sensor_info *s_info;
813 s_info = &msm_camera_sensor_s5k3l1yx_data;
814 s_info->sensor_platform_info->mount_angle = 0;
Hanumant Singhbcd8ae72013-01-03 15:13:52 -0800815#if defined(CONFIG_I2C) && (defined(CONFIG_GPIO_SX150X) || \
816 defined(CONFIG_GPIO_SX150X_MODULE))
Jeyaprakash Soundrapandian85099fe2012-05-15 17:09:51 -0700817 msm_flash_src._fsrc.ext_driver_src.led_en =
818 GPIO_CAM_GP_LED_EN1;
819 msm_flash_src._fsrc.ext_driver_src.led_flash_en =
820 GPIO_CAM_GP_LED_EN2;
Hanumant Singhbcd8ae72013-01-03 15:13:52 -0800821
Jeyaprakash Soundrapandian85099fe2012-05-15 17:09:51 -0700822 msm_flash_src._fsrc.ext_driver_src.expander_info =
823 cam_expander_info;
824#endif
Bikas Gurung6d06af42012-04-23 15:06:04 -0700825 }
826
Kevin Chan94b4c832012-03-02 21:27:16 -0800827 platform_device_register(&msm_camera_server);
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800828 platform_device_register(&msm8960_device_csiphy0);
829 platform_device_register(&msm8960_device_csiphy1);
830 platform_device_register(&msm8960_device_csid0);
831 platform_device_register(&msm8960_device_csid1);
832 platform_device_register(&msm8960_device_ispif);
833 platform_device_register(&msm8960_device_vfe);
834 platform_device_register(&msm8960_device_vpe);
835}
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800836#endif