blob: 3f6afa5e5b3e0404a83018c4fa034e7a840a0c37 [file] [log] [blame]
Russell Kinga09e64f2008-08-05 16:14:15 +01001/* arch/arm/mach-msm/include/mach/board.h
2 *
3 * Copyright (C) 2007 Google, Inc.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07004 * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved.
Russell Kinga09e64f2008-08-05 16:14:15 +01005 * Author: Brian Swetland <swetland@google.com>
6 *
7 * This software is licensed under the terms of the GNU General Public
8 * License version 2, as published by the Free Software Foundation, and
9 * may be copied, distributed, and modified under those terms.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 */
17
18#ifndef __ASM_ARCH_MSM_BOARD_H
19#define __ASM_ARCH_MSM_BOARD_H
20
21#include <linux/types.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070022#include <linux/input.h>
23#include <linux/usb.h>
24#include <linux/leds-pmic8058.h>
25#include <linux/clkdev.h>
26#include <linux/msm_ssbi.h>
27#ifdef CONFIG_MSM_BUS_SCALING
28#include <mach/msm_bus.h>
29#endif
Russell Kinga09e64f2008-08-05 16:14:15 +010030
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070031struct msm_camera_io_ext {
32 uint32_t mdcphy;
33 uint32_t mdcsz;
34 uint32_t appphy;
35 uint32_t appsz;
36 uint32_t camifpadphy;
37 uint32_t camifpadsz;
38 uint32_t csiphy;
39 uint32_t csisz;
40 uint32_t csiirq;
41 uint32_t csiphyphy;
42 uint32_t csiphysz;
43 uint32_t csiphyirq;
44 uint32_t ispifphy;
45 uint32_t ispifsz;
46 uint32_t ispifirq;
47};
48
49struct msm_camera_io_clk {
50 uint32_t mclk_clk_rate;
51 uint32_t vfe_clk_rate;
52};
53
Nishant Pandit474f2252011-07-23 23:17:56 +053054struct msm_cam_expander_info {
55 struct i2c_board_info const *board_info;
56 int bus_id;
57};
58
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070059struct msm_camera_device_platform_data {
60 int (*camera_gpio_on) (void);
61 void (*camera_gpio_off)(void);
62 struct msm_camera_io_ext ioext;
63 struct msm_camera_io_clk ioclk;
64 uint8_t csid_core;
65#ifdef CONFIG_MSM_BUS_SCALING
66 struct msm_bus_scale_pdata *cam_bus_scale_table;
67#endif
68};
69enum msm_camera_csi_data_format {
70 CSI_8BIT,
71 CSI_10BIT,
72 CSI_12BIT,
73};
74struct msm_camera_csi_params {
75 enum msm_camera_csi_data_format data_format;
76 uint8_t lane_cnt;
77 uint8_t lane_assign;
78 uint8_t settle_cnt;
79 uint8_t dpcm_scheme;
80};
81
82#ifdef CONFIG_SENSORS_MT9T013
83struct msm_camera_legacy_device_platform_data {
84 int sensor_reset;
85 int sensor_pwd;
86 int vcm_pwd;
87 void (*config_gpio_on) (void);
88 void (*config_gpio_off)(void);
89};
90#endif
91
92#define MSM_CAMERA_FLASH_NONE 0
93#define MSM_CAMERA_FLASH_LED 1
94
95#define MSM_CAMERA_FLASH_SRC_PMIC (0x00000001<<0)
96#define MSM_CAMERA_FLASH_SRC_PWM (0x00000001<<1)
97#define MSM_CAMERA_FLASH_SRC_CURRENT_DRIVER (0x00000001<<2)
Nishant Pandit474f2252011-07-23 23:17:56 +053098#define MSM_CAMERA_FLASH_SRC_EXT (0x00000001<<3)
99
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700100
101struct msm_camera_sensor_flash_pmic {
102 uint8_t num_of_src;
103 uint32_t low_current;
104 uint32_t high_current;
105 enum pmic8058_leds led_src_1;
106 enum pmic8058_leds led_src_2;
107 int (*pmic_set_current)(enum pmic8058_leds id, unsigned mA);
108};
109
110struct msm_camera_sensor_flash_pwm {
111 uint32_t freq;
112 uint32_t max_load;
113 uint32_t low_load;
114 uint32_t high_load;
115 uint32_t channel;
116};
117
118struct pmic8058_leds_platform_data;
119struct msm_camera_sensor_flash_current_driver {
120 uint32_t low_current;
121 uint32_t high_current;
122 const struct pmic8058_leds_platform_data *driver_channel;
Nishant Pandit474f2252011-07-23 23:17:56 +0530123};
124
125struct msm_camera_sensor_flash_external {
126 uint32_t led_en;
127 uint32_t led_flash_en;
128 struct msm_cam_expander_info *expander_info;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700129};
130
131struct msm_camera_sensor_flash_src {
132 int flash_sr_type;
133
134 union {
135 struct msm_camera_sensor_flash_pmic pmic_src;
136 struct msm_camera_sensor_flash_pwm pwm_src;
137 struct msm_camera_sensor_flash_current_driver
138 current_driver_src;
Nishant Pandit474f2252011-07-23 23:17:56 +0530139 struct msm_camera_sensor_flash_external
140 ext_driver_src;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700141 } _fsrc;
142};
143
144struct msm_camera_sensor_flash_data {
145 int flash_type;
146 struct msm_camera_sensor_flash_src *flash_src;
147};
148
149struct msm_camera_sensor_strobe_flash_data {
150 uint8_t flash_trigger;
151 uint8_t flash_charge; /* pin for charge */
152 uint8_t flash_charge_done;
153 uint32_t flash_recharge_duration;
154 uint32_t irq;
155 spinlock_t spin_lock;
156 spinlock_t timer_lock;
157 int state;
158};
159
Nishant Pandit24153d82011-08-27 16:05:13 +0530160enum msm_camera_type {
161 BACK_CAMERA_2D,
162 FRONT_CAMERA_2D,
163 BACK_CAMERA_3D,
164 BACK_CAMERA_INT_3D,
165};
166
Kevin Chan8b0d2322011-09-10 21:06:31 -0700167struct msm8960_privacy_light_cfg {
168 unsigned mpp;
169};
170
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700171struct msm_camera_sensor_platform_info {
172 int mount_angle;
Nishant Pandit24153d82011-08-27 16:05:13 +0530173 int sensor_reset_enable;
174 int sensor_reset;
175 int sensor_pwd;
176 int vcm_pwd;
177 int vcm_enable;
Kevin Chan8b0d2322011-09-10 21:06:31 -0700178 int privacy_light;
179 void *privacy_light_info;
Nishant Pandit24153d82011-08-27 16:05:13 +0530180};
181
182struct msm_camera_gpio_conf {
183 void *cam_gpiomux_conf_tbl;
184 uint8_t cam_gpiomux_conf_tbl_size;
185 uint16_t *cam_gpio_tbl;
186 uint8_t cam_gpio_tbl_size;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700187};
188
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -0700189struct msm_actuator_info {
190 struct i2c_board_info const *board_info;
191 int bus_id;
192 int vcm_pwd;
193 int vcm_enable;
194};
195
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700196struct msm_camera_sensor_info {
197 const char *sensor_name;
198 int sensor_reset_enable;
199 int sensor_reset;
200 int sensor_pwd;
201 int vcm_pwd;
202 int vcm_enable;
203 int mclk;
204 int flash_type;
205 struct msm_camera_sensor_platform_info *sensor_platform_info;
206 struct msm_camera_device_platform_data *pdata;
207 struct resource *resource;
208 uint8_t num_resources;
209 struct msm_camera_sensor_flash_data *flash_data;
210 int csi_if;
211 struct msm_camera_csi_params csi_params;
212 struct msm_camera_sensor_strobe_flash_data *strobe_flash_data;
213 char *eeprom_data;
Nishant Pandit24153d82011-08-27 16:05:13 +0530214 struct msm_camera_gpio_conf *gpio_conf;
215 enum msm_camera_type camera_type;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -0700216 struct msm_actuator_info *actuator_info;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700217};
218
219int __init msm_get_cam_resources(struct msm_camera_sensor_info *);
220
Stephen Boydbd323442011-02-23 09:37:42 -0800221struct clk_lookup;
Daniel Walker5e96da52010-05-12 13:43:28 -0700222
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700223struct snd_endpoint {
224 int id;
225 const char *name;
226};
Steve Mucklea55df6e2010-01-07 12:43:24 -0800227
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700228struct msm_snd_endpoints {
229 struct snd_endpoint *endpoints;
230 unsigned num;
231};
232
233#define MSM_MAX_DEC_CNT 14
234/* 7k target ADSP information */
235/* Bit 23:0, for codec identification like mp3, wav etc *
236 * Bit 27:24, for mode identification like tunnel, non tunnel*
237 * bit 31:28, for operation support like DM, DMA */
238enum msm_adspdec_concurrency {
239 MSM_ADSP_CODEC_WAV = 0,
240 MSM_ADSP_CODEC_ADPCM = 1,
241 MSM_ADSP_CODEC_MP3 = 2,
242 MSM_ADSP_CODEC_REALAUDIO = 3,
243 MSM_ADSP_CODEC_WMA = 4,
244 MSM_ADSP_CODEC_AAC = 5,
245 MSM_ADSP_CODEC_RESERVED = 6,
246 MSM_ADSP_CODEC_MIDI = 7,
247 MSM_ADSP_CODEC_YADPCM = 8,
248 MSM_ADSP_CODEC_QCELP = 9,
249 MSM_ADSP_CODEC_AMRNB = 10,
250 MSM_ADSP_CODEC_AMRWB = 11,
251 MSM_ADSP_CODEC_EVRC = 12,
252 MSM_ADSP_CODEC_WMAPRO = 13,
253 MSM_ADSP_MODE_TUNNEL = 24,
254 MSM_ADSP_MODE_NONTUNNEL = 25,
255 MSM_ADSP_MODE_LP = 26,
256 MSM_ADSP_OP_DMA = 28,
257 MSM_ADSP_OP_DM = 29,
258};
259
260struct msm_adspdec_info {
261 const char *module_name;
262 unsigned module_queueid;
263 int module_decid; /* objid */
264 unsigned nr_codec_support;
265};
266
267/* Carries information about number codec
268 * supported if same codec or different codecs
269 */
270struct dec_instance_table {
271 uint8_t max_instances_same_dec;
272 uint8_t max_instances_diff_dec;
273};
274
275struct msm_adspdec_database {
276 unsigned num_dec;
277 unsigned num_concurrency_support;
278 unsigned int *dec_concurrency_table; /* Bit masked entry to *
279 * represents codec, mode etc */
280 struct msm_adspdec_info *dec_info_list;
281 struct dec_instance_table *dec_instance_list;
282};
283
284enum msm_mdp_hw_revision {
285 MDP_REV_20 = 1,
286 MDP_REV_22,
287 MDP_REV_30,
288 MDP_REV_303,
289 MDP_REV_31,
290 MDP_REV_40,
291 MDP_REV_41,
292 MDP_REV_42,
293};
294
295struct msm_panel_common_pdata {
296 uintptr_t hw_revision_addr;
297 int gpio;
298 int (*backlight_level)(int level, int max, int min);
299 int (*pmic_backlight)(int level);
300 int (*panel_num)(void);
301 void (*panel_config_gpio)(int);
302 int (*vga_switch)(int select_vga);
303 int *gpio_num;
304 int mdp_core_clk_rate;
305 unsigned num_mdp_clk;
306 int *mdp_core_clk_table;
307#ifdef CONFIG_MSM_BUS_SCALING
308 struct msm_bus_scale_pdata *mdp_bus_scale_table;
309#endif
310 int mdp_rev;
311};
312
313struct lcdc_platform_data {
314 int (*lcdc_gpio_config)(int on);
315 int (*lcdc_power_save)(int);
316 unsigned int (*lcdc_get_clk)(void);
317#ifdef CONFIG_MSM_BUS_SCALING
318 struct msm_bus_scale_pdata *bus_scale_table;
319#endif
320};
321
322struct tvenc_platform_data {
323 int poll;
324 int (*pm_vid_en)(int on);
325#ifdef CONFIG_MSM_BUS_SCALING
326 struct msm_bus_scale_pdata *bus_scale_table;
327#endif
328};
329
330struct mddi_platform_data {
331 int (*mddi_power_save)(int on);
332 int (*mddi_sel_clk)(u32 *clk_rate);
333 int (*mddi_client_power)(u32 client_id);
334};
335
336struct mipi_dsi_platform_data {
337 int vsync_gpio;
338 int (*dsi_power_save)(int on);
339 int (*dsi_client_reset)(void);
340 int (*get_lane_config)(void);
341 int target_type;
342};
343
Chandan Uddaraju83eac3c2011-09-11 18:32:23 -0700344enum mipi_dsi_3d_ctrl {
345 FPGA_EBI2_INTF,
346 FPGA_SPI_INTF,
347};
348
349/* DSI PHY configuration */
350struct mipi_dsi_phy_ctrl {
351 uint32_t regulator[5];
352 uint32_t timing[12];
353 uint32_t ctrl[4];
354 uint32_t strength[4];
355 uint32_t pll[21];
356};
357
Nagamalleswararao Ganjieac5dfa2011-07-23 17:31:16 -0700358struct mipi_dsi_panel_platform_data {
Chandan Uddaraju83eac3c2011-09-11 18:32:23 -0700359 int fpga_ctrl_mode;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700360 int fpga_3d_config_addr;
Nagamalleswararao Ganjieac5dfa2011-07-23 17:31:16 -0700361 int *gpio;
Chandan Uddaraju83eac3c2011-09-11 18:32:23 -0700362 struct mipi_dsi_phy_ctrl *phy_ctrl_settings;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700363};
364
365struct msm_fb_platform_data {
366 int (*detect_client)(const char *name);
367 int mddi_prescan;
368 int (*allow_set_offset)(void);
369};
370
371struct msm_hdmi_platform_data {
372 int irq;
373 int (*cable_detect)(int insert);
374 int (*comm_power)(int on, int show);
375 int (*enable_5v)(int on);
376 int (*core_power)(int on, int show);
377 int (*cec_power)(int on);
378 int (*init_irq)(void);
379 bool (*check_hdcp_hw_support)(void);
380};
381
382struct msm_i2c_platform_data {
383 int clk_freq;
384 uint32_t rmutex;
385 const char *rsl_id;
386 uint32_t pm_lat;
387 int pri_clk;
388 int pri_dat;
389 int aux_clk;
390 int aux_dat;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700391 int src_clk_rate;
392 int use_gsbi_shared_mode;
393 void (*msm_i2c_config_gpio)(int iface, int config_type);
394};
395
396struct msm_i2c_ssbi_platform_data {
397 const char *rsl_id;
398 enum msm_ssbi_controller_type controller_type;
399};
400
401struct msm_vidc_platform_data {
402 int memtype;
403#ifdef CONFIG_MSM_BUS_SCALING
404 struct msm_bus_scale_pdata *vidc_bus_client_pdata;
405#endif
406};
407
408#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
409struct isp1763_platform_data {
410 unsigned reset_gpio;
411 int (*setup_gpio)(int enable);
412};
413#endif
Russell Kinga09e64f2008-08-05 16:14:15 +0100414/* common init routines for use by arch/arm/mach-msm/board-*.c */
415
416void __init msm_add_devices(void);
417void __init msm_map_common_io(void);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700418void __init msm_map_qsd8x50_io(void);
419void __init msm_map_msm8x60_io(void);
420void __init msm_map_msm8960_io(void);
421void __init msm_map_apq8064_io(void);
422void __init msm_map_msm7x30_io(void);
423void __init msm_map_fsm9xxx_io(void);
Russell Kinga09e64f2008-08-05 16:14:15 +0100424void __init msm_init_irq(void);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700425
426struct mmc_platform_data;
Sahitya Tummalab5d643d2010-07-29 16:55:34 +0530427int __init msm_add_sdcc(unsigned int controller,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700428 struct mmc_platform_data *plat);
429
430struct msm_usb_host_platform_data;
431int __init msm_add_host(unsigned int host,
432 struct msm_usb_host_platform_data *plat);
433#if defined(CONFIG_USB_FUNCTION_MSM_HSUSB) \
434 || defined(CONFIG_USB_MSM_72K) || defined(CONFIG_USB_MSM_72K_MODULE)
435void msm_hsusb_set_vbus_state(int online);
436#else
437static inline void msm_hsusb_set_vbus_state(int online) {}
438#endif
439
440void __init msm_snddev_init(void);
441void __init msm_snddev_init_timpani(void);
442void msm_snddev_poweramp_on(void);
443void msm_snddev_poweramp_off(void);
444void msm_snddev_hsed_voltage_on(void);
445void msm_snddev_hsed_voltage_off(void);
446void msm_snddev_tx_route_config(void);
447void msm_snddev_tx_route_deconfig(void);
448
449extern unsigned int msm_shared_ram_phys; /* defined in arch/arm/mach-msm/io.c */
450
Russell Kinga09e64f2008-08-05 16:14:15 +0100451
452#endif