blob: 1a7e2e16d780b107cf14c1258879df92b6ea7547 [file] [log] [blame]
Suresh Vankadara8df2c752012-01-18 00:18:03 +05301/* Copyright (c) 2011-2012, Code Aurora Forum. 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>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080016#include <mach/board.h>
17#include <mach/msm_bus_board.h>
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080018#include <mach/gpiomux.h>
19#include "devices.h"
Stepan Moskovchenko5a83dba2011-12-05 17:30:17 -080020#include "board-8930.h"
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080021
22#if (defined(CONFIG_GPIO_SX150X) || defined(CONFIG_GPIO_SX150X_MODULE)) && \
23 defined(CONFIG_I2C)
24
25static struct i2c_board_info cam_expander_i2c_info[] = {
26 {
27 I2C_BOARD_INFO("sx1508q", 0x22),
28 .platform_data = &msm8930_sx150x_data[SX150X_CAM]
29 },
30};
31
32static struct msm_cam_expander_info cam_expander_info[] = {
33 {
34 cam_expander_i2c_info,
35 MSM_8930_GSBI4_QUP_I2C_BUS_ID,
36 },
37};
38#endif
39
40static struct gpiomux_setting cam_settings[] = {
41 {
42 .func = GPIOMUX_FUNC_GPIO, /*suspend*/
43 .drv = GPIOMUX_DRV_2MA,
44 .pull = GPIOMUX_PULL_DOWN,
45 },
46
47 {
48 .func = GPIOMUX_FUNC_1, /*active 1*/
49 .drv = GPIOMUX_DRV_2MA,
50 .pull = GPIOMUX_PULL_NONE,
51 },
52
53 {
54 .func = GPIOMUX_FUNC_GPIO, /*active 2*/
55 .drv = GPIOMUX_DRV_2MA,
56 .pull = GPIOMUX_PULL_NONE,
57 },
58
59 {
60 .func = GPIOMUX_FUNC_1, /*active 3*/
61 .drv = GPIOMUX_DRV_8MA,
62 .pull = GPIOMUX_PULL_NONE,
63 },
64
65 {
66 .func = GPIOMUX_FUNC_5, /*active 4*/
67 .drv = GPIOMUX_DRV_8MA,
68 .pull = GPIOMUX_PULL_UP,
69 },
70
71 {
72 .func = GPIOMUX_FUNC_6, /*active 5*/
73 .drv = GPIOMUX_DRV_8MA,
74 .pull = GPIOMUX_PULL_UP,
75 },
76
77 {
78 .func = GPIOMUX_FUNC_2, /*active 6*/
79 .drv = GPIOMUX_DRV_2MA,
80 .pull = GPIOMUX_PULL_UP,
81 },
82
83 {
84 .func = GPIOMUX_FUNC_3, /*active 7*/
85 .drv = GPIOMUX_DRV_8MA,
86 .pull = GPIOMUX_PULL_UP,
87 },
88
89 {
90 .func = GPIOMUX_FUNC_GPIO, /*i2c suspend*/
91 .drv = GPIOMUX_DRV_2MA,
92 .pull = GPIOMUX_PULL_KEEPER,
93 },
94
95};
96
97
Kevin Chaneb6b6072012-01-17 11:54:54 -080098static struct msm_gpiomux_config msm8930_cam_common_configs[] = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -080099 {
100 .gpio = 2,
101 .settings = {
102 [GPIOMUX_ACTIVE] = &cam_settings[2],
103 [GPIOMUX_SUSPENDED] = &cam_settings[0],
104 },
105 },
106 {
107 .gpio = 3,
108 .settings = {
109 [GPIOMUX_ACTIVE] = &cam_settings[1],
110 [GPIOMUX_SUSPENDED] = &cam_settings[0],
111 },
112 },
113 {
114 .gpio = 4,
115 .settings = {
116 [GPIOMUX_ACTIVE] = &cam_settings[1],
117 [GPIOMUX_SUSPENDED] = &cam_settings[0],
118 },
119 },
120 {
121 .gpio = 5,
122 .settings = {
123 [GPIOMUX_ACTIVE] = &cam_settings[1],
124 [GPIOMUX_SUSPENDED] = &cam_settings[0],
125 },
126 },
127 {
128 .gpio = 76,
129 .settings = {
130 [GPIOMUX_ACTIVE] = &cam_settings[2],
131 [GPIOMUX_SUSPENDED] = &cam_settings[0],
132 },
133 },
134 {
135 .gpio = 107,
136 .settings = {
137 [GPIOMUX_ACTIVE] = &cam_settings[2],
138 [GPIOMUX_SUSPENDED] = &cam_settings[0],
139 },
140 },
Hody Hung80a3da82012-04-19 12:18:47 -0700141 {
142 .gpio = 54,
143 .settings = {
144 [GPIOMUX_ACTIVE] = &cam_settings[2],
145 [GPIOMUX_SUSPENDED] = &cam_settings[0],
146 },
147 },
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800148};
149
Kevin Chaneb6b6072012-01-17 11:54:54 -0800150static struct msm_gpiomux_config msm8930_cam_2d_configs[] = {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800151 {
152 .gpio = 18,
153 .settings = {
154 [GPIOMUX_ACTIVE] = &cam_settings[3],
155 [GPIOMUX_SUSPENDED] = &cam_settings[8],
156 },
157 },
158 {
159 .gpio = 19,
160 .settings = {
161 [GPIOMUX_ACTIVE] = &cam_settings[3],
162 [GPIOMUX_SUSPENDED] = &cam_settings[8],
163 },
164 },
165 {
166 .gpio = 20,
167 .settings = {
168 [GPIOMUX_ACTIVE] = &cam_settings[3],
169 [GPIOMUX_SUSPENDED] = &cam_settings[8],
170 },
171 },
172 {
173 .gpio = 21,
174 .settings = {
175 [GPIOMUX_ACTIVE] = &cam_settings[3],
176 [GPIOMUX_SUSPENDED] = &cam_settings[8],
177 },
178 },
179};
180
181#ifdef CONFIG_MSM_CAMERA
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800182#define VFE_CAMIF_TIMER1_GPIO 2
183#define VFE_CAMIF_TIMER2_GPIO 3
184#define VFE_CAMIF_TIMER3_GPIO_INT 4
185static struct msm_camera_sensor_strobe_flash_data strobe_flash_xenon = {
186 .flash_trigger = VFE_CAMIF_TIMER2_GPIO,
187 .flash_charge = VFE_CAMIF_TIMER1_GPIO,
188 .flash_charge_done = VFE_CAMIF_TIMER3_GPIO_INT,
189 .flash_recharge_duration = 50000,
190 .irq = MSM_GPIO_TO_INT(VFE_CAMIF_TIMER3_GPIO_INT),
191};
192
193#ifdef CONFIG_MSM_CAMERA_FLASH
194static struct msm_camera_sensor_flash_src msm_flash_src = {
195 .flash_sr_type = MSM_CAMERA_FLASH_SRC_EXT,
196 ._fsrc.ext_driver_src.led_en = GPIO_CAM_GP_LED_EN1,
197 ._fsrc.ext_driver_src.led_flash_en = GPIO_CAM_GP_LED_EN2,
198#if defined(CONFIG_I2C) && (defined(CONFIG_GPIO_SX150X) || \
199 defined(CONFIG_GPIO_SX150X_MODULE))
200 ._fsrc.ext_driver_src.expander_info = cam_expander_info,
201#endif
202};
203#endif
204
205static struct msm_bus_vectors cam_init_vectors[] = {
206 {
207 .src = MSM_BUS_MASTER_VFE,
208 .dst = MSM_BUS_SLAVE_EBI_CH0,
209 .ab = 0,
210 .ib = 0,
211 },
212 {
213 .src = MSM_BUS_MASTER_VPE,
214 .dst = MSM_BUS_SLAVE_EBI_CH0,
215 .ab = 0,
216 .ib = 0,
217 },
218 {
219 .src = MSM_BUS_MASTER_JPEG_ENC,
220 .dst = MSM_BUS_SLAVE_EBI_CH0,
221 .ab = 0,
222 .ib = 0,
223 },
224};
225
226static struct msm_bus_vectors cam_preview_vectors[] = {
227 {
228 .src = MSM_BUS_MASTER_VFE,
229 .dst = MSM_BUS_SLAVE_EBI_CH0,
230 .ab = 27648000,
231 .ib = 110592000,
232 },
233 {
234 .src = MSM_BUS_MASTER_VPE,
235 .dst = MSM_BUS_SLAVE_EBI_CH0,
236 .ab = 0,
237 .ib = 0,
238 },
239 {
240 .src = MSM_BUS_MASTER_JPEG_ENC,
241 .dst = MSM_BUS_SLAVE_EBI_CH0,
242 .ab = 0,
243 .ib = 0,
244 },
245};
246
247static struct msm_bus_vectors cam_video_vectors[] = {
248 {
249 .src = MSM_BUS_MASTER_VFE,
250 .dst = MSM_BUS_SLAVE_EBI_CH0,
251 .ab = 140451840,
252 .ib = 561807360,
253 },
254 {
255 .src = MSM_BUS_MASTER_VPE,
256 .dst = MSM_BUS_SLAVE_EBI_CH0,
257 .ab = 206807040,
258 .ib = 488816640,
259 },
260 {
261 .src = MSM_BUS_MASTER_JPEG_ENC,
262 .dst = MSM_BUS_SLAVE_EBI_CH0,
263 .ab = 0,
264 .ib = 0,
265 },
266};
267
268static struct msm_bus_vectors cam_snapshot_vectors[] = {
269 {
270 .src = MSM_BUS_MASTER_VFE,
271 .dst = MSM_BUS_SLAVE_EBI_CH0,
272 .ab = 274423680,
273 .ib = 1097694720,
274 },
275 {
276 .src = MSM_BUS_MASTER_VPE,
277 .dst = MSM_BUS_SLAVE_EBI_CH0,
278 .ab = 0,
279 .ib = 0,
280 },
281 {
282 .src = MSM_BUS_MASTER_JPEG_ENC,
283 .dst = MSM_BUS_SLAVE_EBI_CH0,
284 .ab = 540000000,
285 .ib = 1350000000,
286 },
287};
288
289static struct msm_bus_vectors cam_zsl_vectors[] = {
290 {
291 .src = MSM_BUS_MASTER_VFE,
292 .dst = MSM_BUS_SLAVE_EBI_CH0,
293 .ab = 302071680,
294 .ib = 1208286720,
295 },
296 {
297 .src = MSM_BUS_MASTER_VPE,
298 .dst = MSM_BUS_SLAVE_EBI_CH0,
299 .ab = 0,
300 .ib = 0,
301 },
302 {
303 .src = MSM_BUS_MASTER_JPEG_ENC,
304 .dst = MSM_BUS_SLAVE_EBI_CH0,
305 .ab = 540000000,
306 .ib = 1350000000,
307 },
308};
309
310static struct msm_bus_paths cam_bus_client_config[] = {
311 {
312 ARRAY_SIZE(cam_init_vectors),
313 cam_init_vectors,
314 },
315 {
316 ARRAY_SIZE(cam_preview_vectors),
317 cam_preview_vectors,
318 },
319 {
320 ARRAY_SIZE(cam_video_vectors),
321 cam_video_vectors,
322 },
323 {
324 ARRAY_SIZE(cam_snapshot_vectors),
325 cam_snapshot_vectors,
326 },
327 {
328 ARRAY_SIZE(cam_zsl_vectors),
329 cam_zsl_vectors,
330 },
331};
332
333static struct msm_bus_scale_pdata cam_bus_client_pdata = {
334 cam_bus_client_config,
335 ARRAY_SIZE(cam_bus_client_config),
336 .name = "msm_camera",
337};
338
339static struct msm_camera_device_platform_data msm_camera_csi_device_data[] = {
340 {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800341 .csid_core = 0,
Suresh Vankadara8df2c752012-01-18 00:18:03 +0530342 .is_csiphy = 1,
343 .is_csid = 1,
344 .is_ispif = 1,
345 .is_vpe = 1,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800346 .cam_bus_scale_table = &cam_bus_client_pdata,
347 },
348 {
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800349 .csid_core = 1,
Suresh Vankadara8df2c752012-01-18 00:18:03 +0530350 .is_csiphy = 1,
351 .is_csid = 1,
352 .is_ispif = 1,
353 .is_vpe = 1,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800354 .cam_bus_scale_table = &cam_bus_client_pdata,
355 },
356};
357
Kevin Chaneb6b6072012-01-17 11:54:54 -0800358static struct camera_vreg_t msm_8930_back_cam_vreg[] = {
Kevin Chaneb6b6072012-01-17 11:54:54 -0800359 {"cam_vdig", REG_LDO, 1200000, 1200000, 105000},
David Collinsf4c3d642012-03-02 09:04:57 -0800360 {"cam_vio", REG_VS, 0, 0, 0},
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800361 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800362 {"cam_vaf", REG_LDO, 2800000, 2850000, 300000},
363};
364
365static struct camera_vreg_t msm_8930_front_cam_vreg[] = {
David Collinsf4c3d642012-03-02 09:04:57 -0800366 {"cam_vio", REG_VS, 0, 0, 0},
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800367 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800368 {"cam_vdig", REG_LDO, 1200000, 1200000, 105000},
369};
370
371static struct gpio msm8930_common_cam_gpio[] = {
372 {5, GPIOF_DIR_IN, "CAMIF_MCLK"},
373 {20, GPIOF_DIR_IN, "CAMIF_I2C_DATA"},
374 {21, GPIOF_DIR_IN, "CAMIF_I2C_CLK"},
375};
376
377static struct gpio msm8930_front_cam_gpio[] = {
378 {76, GPIOF_DIR_OUT, "CAM_RESET"},
379};
380
381static struct gpio msm8930_back_cam_gpio[] = {
382 {107, GPIOF_DIR_OUT, "CAM_RESET"},
Hody Hung80a3da82012-04-19 12:18:47 -0700383 {54, GPIOF_DIR_OUT, "CAM_STBY_N"},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800384};
385
386static struct msm_gpio_set_tbl msm8930_front_cam_gpio_set_tbl[] = {
387 {76, GPIOF_OUT_INIT_LOW, 1000},
388 {76, GPIOF_OUT_INIT_HIGH, 4000},
389};
390
391static struct msm_gpio_set_tbl msm8930_back_cam_gpio_set_tbl[] = {
Hody Hung80a3da82012-04-19 12:18:47 -0700392 {54, GPIOF_OUT_INIT_LOW, 1000},
393 {54, GPIOF_OUT_INIT_HIGH, 4000},
Kevin Chaneb6b6072012-01-17 11:54:54 -0800394 {107, GPIOF_OUT_INIT_LOW, 1000},
395 {107, GPIOF_OUT_INIT_HIGH, 4000},
396};
397
398static struct msm_camera_gpio_conf msm_8930_front_cam_gpio_conf = {
399 .cam_gpiomux_conf_tbl = msm8930_cam_2d_configs,
400 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_cam_2d_configs),
401 .cam_gpio_common_tbl = msm8930_common_cam_gpio,
402 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_common_cam_gpio),
403 .cam_gpio_req_tbl = msm8930_front_cam_gpio,
404 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_front_cam_gpio),
405 .cam_gpio_set_tbl = msm8930_front_cam_gpio_set_tbl,
406 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_front_cam_gpio_set_tbl),
407};
408
409static struct msm_camera_gpio_conf msm_8930_back_cam_gpio_conf = {
410 .cam_gpiomux_conf_tbl = msm8930_cam_2d_configs,
411 .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8930_cam_2d_configs),
412 .cam_gpio_common_tbl = msm8930_common_cam_gpio,
413 .cam_gpio_common_tbl_size = ARRAY_SIZE(msm8930_common_cam_gpio),
414 .cam_gpio_req_tbl = msm8930_back_cam_gpio,
415 .cam_gpio_req_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio),
416 .cam_gpio_set_tbl = msm8930_back_cam_gpio_set_tbl,
417 .cam_gpio_set_tbl_size = ARRAY_SIZE(msm8930_back_cam_gpio_set_tbl),
418};
419
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800420static struct i2c_board_info msm_act_main_cam_i2c_info = {
421 I2C_BOARD_INFO("msm_actuator", 0x11),
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800422};
423
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800424static struct msm_actuator_info msm_act_main_cam_0_info = {
425 .board_info = &msm_act_main_cam_i2c_info,
426 .cam_name = MSM_ACTUATOR_MAIN_CAM_0,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800427 .bus_id = MSM_8930_GSBI4_QUP_I2C_BUS_ID,
428 .vcm_pwd = 0,
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800429 .vcm_enable = 0,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800430};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800431
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800432static struct msm_camera_sensor_flash_data flash_imx074 = {
433 .flash_type = MSM_CAMERA_FLASH_LED,
434#ifdef CONFIG_MSM_CAMERA_FLASH
435 .flash_src = &msm_flash_src
436#endif
437};
438
Hody Hung9ba65cf2012-01-17 17:34:51 -0800439static struct msm_camera_csi_lane_params imx074_csi_lane_params = {
440 .csi_lane_assign = 0xE4,
441 .csi_lane_mask = 0xF,
442};
443
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800444static struct msm_camera_sensor_platform_info sensor_board_info_imx074 = {
445 .mount_angle = 90,
Kevin Chaneb6b6072012-01-17 11:54:54 -0800446 .cam_vreg = msm_8930_back_cam_vreg,
447 .num_vreg = ARRAY_SIZE(msm_8930_back_cam_vreg),
448 .gpio_conf = &msm_8930_back_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800449 .csi_lane_params = &imx074_csi_lane_params,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800450};
451
452static struct msm_camera_sensor_info msm_camera_sensor_imx074_data = {
453 .sensor_name = "imx074",
454 .pdata = &msm_camera_csi_device_data[0],
455 .flash_data = &flash_imx074,
456 .strobe_flash_data = &strobe_flash_xenon,
457 .sensor_platform_info = &sensor_board_info_imx074,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800458 .csi_if = 1,
459 .camera_type = BACK_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530460 .sensor_type = BAYER_SENSOR,
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800461 .actuator_info = &msm_act_main_cam_0_info,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800462};
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800463
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800464static struct camera_vreg_t msm_8930_mt9m114_vreg[] = {
David Collinsf4c3d642012-03-02 09:04:57 -0800465 {"cam_vio", REG_VS, 0, 0, 0},
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800466 {"cam_vdig", REG_LDO, 1200000, 1200000, 105000},
467 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
468 {"cam_vaf", REG_LDO, 2800000, 2850000, 300000},
469};
470
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800471static struct msm_camera_sensor_flash_data flash_mt9m114 = {
472 .flash_type = MSM_CAMERA_FLASH_NONE
473};
474
Hody Hung9ba65cf2012-01-17 17:34:51 -0800475static struct msm_camera_csi_lane_params mt9m114_csi_lane_params = {
476 .csi_lane_assign = 0xE4,
477 .csi_lane_mask = 0x1,
478};
479
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800480static struct msm_camera_sensor_platform_info sensor_board_info_mt9m114 = {
481 .mount_angle = 90,
Sreesudhan Ramakrish Ramkumarec27a6e2012-02-11 20:41:19 -0800482 .cam_vreg = msm_8930_mt9m114_vreg,
483 .num_vreg = ARRAY_SIZE(msm_8930_mt9m114_vreg),
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800484 .gpio_conf = &msm_8930_front_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800485 .csi_lane_params = &mt9m114_csi_lane_params,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800486};
487
488static struct msm_camera_sensor_info msm_camera_sensor_mt9m114_data = {
489 .sensor_name = "mt9m114",
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800490 .pdata = &msm_camera_csi_device_data[1],
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800491 .flash_data = &flash_mt9m114,
492 .sensor_platform_info = &sensor_board_info_mt9m114,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800493 .csi_if = 1,
Sreesudhan Ramakrish Ramkumar61c877d2012-02-23 22:22:19 -0800494 .camera_type = FRONT_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530495 .sensor_type = YUV_SENSOR,
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800496};
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800497
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800498static struct msm_camera_sensor_flash_data flash_ov2720 = {
499 .flash_type = MSM_CAMERA_FLASH_NONE,
500};
501
Hody Hung9ba65cf2012-01-17 17:34:51 -0800502static struct msm_camera_csi_lane_params ov2720_csi_lane_params = {
503 .csi_lane_assign = 0xE4,
504 .csi_lane_mask = 0x3,
505};
506
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800507static struct msm_camera_sensor_platform_info sensor_board_info_ov2720 = {
508 .mount_angle = 0,
Kevin Chaneb6b6072012-01-17 11:54:54 -0800509 .cam_vreg = msm_8930_front_cam_vreg,
510 .num_vreg = ARRAY_SIZE(msm_8930_front_cam_vreg),
511 .gpio_conf = &msm_8930_front_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800512 .csi_lane_params = &ov2720_csi_lane_params,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800513};
514
515static struct msm_camera_sensor_info msm_camera_sensor_ov2720_data = {
516 .sensor_name = "ov2720",
517 .pdata = &msm_camera_csi_device_data[1],
518 .flash_data = &flash_ov2720,
519 .sensor_platform_info = &sensor_board_info_ov2720,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800520 .csi_if = 1,
521 .camera_type = FRONT_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530522 .sensor_type = BAYER_SENSOR,
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800523};
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800524
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800525static struct camera_vreg_t msm_8930_s5k3l1yx_vreg[] = {
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800526 {"cam_vdig", REG_LDO, 1200000, 1200000, 105000},
527 {"cam_vana", REG_LDO, 2800000, 2850000, 85600},
David Collinsf4c3d642012-03-02 09:04:57 -0800528 {"cam_vio", REG_VS, 0, 0, 0},
Jeyaprakash Soundrapandian49eef5a2012-02-08 13:57:20 -0800529 {"cam_vaf", REG_LDO, 2800000, 2850000, 300000},
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800530};
531
532static struct msm_camera_sensor_flash_data flash_s5k3l1yx = {
533 .flash_type = MSM_CAMERA_FLASH_NONE,
534};
535
Hody Hung9ba65cf2012-01-17 17:34:51 -0800536static struct msm_camera_csi_lane_params s5k3l1yx_csi_lane_params = {
537 .csi_lane_assign = 0xE4,
538 .csi_lane_mask = 0xF,
539};
540
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800541static struct msm_camera_sensor_platform_info sensor_board_info_s5k3l1yx = {
542 .mount_angle = 0,
543 .cam_vreg = msm_8930_s5k3l1yx_vreg,
544 .num_vreg = ARRAY_SIZE(msm_8930_s5k3l1yx_vreg),
545 .gpio_conf = &msm_8930_back_cam_gpio_conf,
Hody Hung9ba65cf2012-01-17 17:34:51 -0800546 .csi_lane_params = &s5k3l1yx_csi_lane_params,
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800547};
548
549static struct msm_camera_sensor_info msm_camera_sensor_s5k3l1yx_data = {
550 .sensor_name = "s5k3l1yx",
551 .pdata = &msm_camera_csi_device_data[0],
552 .flash_data = &flash_s5k3l1yx,
553 .sensor_platform_info = &sensor_board_info_s5k3l1yx,
554 .csi_if = 1,
555 .camera_type = BACK_CAMERA_2D,
Raju P.L.S.S.S.N3f4b3022012-03-29 10:09:01 +0530556 .sensor_type = BAYER_SENSOR,
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800557};
558
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800559void __init msm8930_init_cam(void)
560{
Kevin Chaneb6b6072012-01-17 11:54:54 -0800561 msm_gpiomux_install(msm8930_cam_common_configs,
562 ARRAY_SIZE(msm8930_cam_common_configs));
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800563
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800564 platform_device_register(&msm8960_device_csiphy0);
565 platform_device_register(&msm8960_device_csiphy1);
566 platform_device_register(&msm8960_device_csid0);
567 platform_device_register(&msm8960_device_csid1);
568 platform_device_register(&msm8960_device_ispif);
569 platform_device_register(&msm8960_device_vfe);
570 platform_device_register(&msm8960_device_vpe);
571}
Kevin Chan09f4e662011-12-16 08:17:02 -0800572
573#ifdef CONFIG_I2C
574struct i2c_board_info msm8930_camera_i2c_boardinfo[] = {
Kevin Chan09f4e662011-12-16 08:17:02 -0800575 {
576 I2C_BOARD_INFO("imx074", 0x1A),
577 .platform_data = &msm_camera_sensor_imx074_data,
578 },
Kevin Chan09f4e662011-12-16 08:17:02 -0800579 {
580 I2C_BOARD_INFO("ov2720", 0x6C),
581 .platform_data = &msm_camera_sensor_ov2720_data,
582 },
Sreesudhan Ramakrish Ramkumarbc5f5b82011-12-28 17:10:30 -0800583 {
584 I2C_BOARD_INFO("mt9m114", 0x48),
585 .platform_data = &msm_camera_sensor_mt9m114_data,
586 },
Sreesudhan Ramakrish Ramkumar8f11b8b2012-01-04 17:09:05 -0800587 {
588 I2C_BOARD_INFO("s5k3l1yx", 0x20),
589 .platform_data = &msm_camera_sensor_s5k3l1yx_data,
590 },
Kevin Chan09f4e662011-12-16 08:17:02 -0800591#ifdef CONFIG_MSM_CAMERA_FLASH_SC628A
592 {
593 I2C_BOARD_INFO("sc628a", 0x6E),
594 },
595#endif
596};
597
598struct msm_camera_board_info msm8930_camera_board_info = {
599 .board_info = msm8930_camera_i2c_boardinfo,
600 .num_i2c_board_info = ARRAY_SIZE(msm8930_camera_i2c_boardinfo),
601};
602#endif
Stepan Moskovchenko39236d72011-11-30 17:42:23 -0800603#endif