Merge branch 'for-2.6.40' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / arm / mach-omap2 / board-zoom-peripherals.c
blob8dee7549fbdf5330553859c0df43bfed335fcf66
1 /*
2 * Copyright (C) 2009 Texas Instruments Inc.
4 * Modified from mach-omap2/board-zoom2.c
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/platform_device.h>
14 #include <linux/input.h>
15 #include <linux/input/matrix_keypad.h>
16 #include <linux/gpio.h>
17 #include <linux/i2c/twl.h>
18 #include <linux/regulator/machine.h>
19 #include <linux/regulator/fixed.h>
20 #include <linux/wl12xx.h>
21 #include <linux/mmc/host.h>
23 #include <asm/mach-types.h>
24 #include <asm/mach/arch.h>
25 #include <asm/mach/map.h>
27 #include <plat/common.h>
28 #include <plat/usb.h>
30 #include <mach/board-zoom.h>
32 #include "mux.h"
33 #include "hsmmc.h"
35 #define OMAP_ZOOM_WLAN_PMENA_GPIO (101)
36 #define OMAP_ZOOM_WLAN_IRQ_GPIO (162)
38 #define LCD_PANEL_ENABLE_GPIO (7 + OMAP_MAX_GPIO_LINES)
40 /* Zoom2 has Qwerty keyboard*/
41 static uint32_t board_keymap[] = {
42 KEY(0, 0, KEY_E),
43 KEY(0, 1, KEY_R),
44 KEY(0, 2, KEY_T),
45 KEY(0, 3, KEY_HOME),
46 KEY(0, 6, KEY_I),
47 KEY(0, 7, KEY_LEFTSHIFT),
48 KEY(1, 0, KEY_D),
49 KEY(1, 1, KEY_F),
50 KEY(1, 2, KEY_G),
51 KEY(1, 3, KEY_SEND),
52 KEY(1, 6, KEY_K),
53 KEY(1, 7, KEY_ENTER),
54 KEY(2, 0, KEY_X),
55 KEY(2, 1, KEY_C),
56 KEY(2, 2, KEY_V),
57 KEY(2, 3, KEY_END),
58 KEY(2, 6, KEY_DOT),
59 KEY(2, 7, KEY_CAPSLOCK),
60 KEY(3, 0, KEY_Z),
61 KEY(3, 1, KEY_KPPLUS),
62 KEY(3, 2, KEY_B),
63 KEY(3, 3, KEY_F1),
64 KEY(3, 6, KEY_O),
65 KEY(3, 7, KEY_SPACE),
66 KEY(4, 0, KEY_W),
67 KEY(4, 1, KEY_Y),
68 KEY(4, 2, KEY_U),
69 KEY(4, 3, KEY_F2),
70 KEY(4, 4, KEY_VOLUMEUP),
71 KEY(4, 6, KEY_L),
72 KEY(4, 7, KEY_LEFT),
73 KEY(5, 0, KEY_S),
74 KEY(5, 1, KEY_H),
75 KEY(5, 2, KEY_J),
76 KEY(5, 3, KEY_F3),
77 KEY(5, 4, KEY_UNKNOWN),
78 KEY(5, 5, KEY_VOLUMEDOWN),
79 KEY(5, 6, KEY_M),
80 KEY(5, 7, KEY_RIGHT),
81 KEY(6, 0, KEY_Q),
82 KEY(6, 1, KEY_A),
83 KEY(6, 2, KEY_N),
84 KEY(6, 3, KEY_BACKSPACE),
85 KEY(6, 6, KEY_P),
86 KEY(6, 7, KEY_UP),
87 KEY(7, 0, KEY_PROG1), /*MACRO 1 <User defined> */
88 KEY(7, 1, KEY_PROG2), /*MACRO 2 <User defined> */
89 KEY(7, 2, KEY_PROG3), /*MACRO 3 <User defined> */
90 KEY(7, 3, KEY_PROG4), /*MACRO 4 <User defined> */
91 KEY(7, 6, KEY_SELECT),
92 KEY(7, 7, KEY_DOWN)
95 static struct matrix_keymap_data board_map_data = {
96 .keymap = board_keymap,
97 .keymap_size = ARRAY_SIZE(board_keymap),
100 static struct twl4030_keypad_data zoom_kp_twl4030_data = {
101 .keymap_data = &board_map_data,
102 .rows = 8,
103 .cols = 8,
104 .rep = 1,
107 static struct regulator_consumer_supply zoom_vmmc1_supply = {
108 .supply = "vmmc",
111 static struct regulator_consumer_supply zoom_vsim_supply = {
112 .supply = "vmmc_aux",
115 static struct regulator_consumer_supply zoom_vmmc2_supply = {
116 .supply = "vmmc",
119 static struct regulator_consumer_supply zoom_vmmc3_supply = {
120 .supply = "vmmc",
121 .dev_name = "omap_hsmmc.2",
124 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
125 static struct regulator_init_data zoom_vmmc1 = {
126 .constraints = {
127 .min_uV = 1850000,
128 .max_uV = 3150000,
129 .valid_modes_mask = REGULATOR_MODE_NORMAL
130 | REGULATOR_MODE_STANDBY,
131 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
132 | REGULATOR_CHANGE_MODE
133 | REGULATOR_CHANGE_STATUS,
135 .num_consumer_supplies = 1,
136 .consumer_supplies = &zoom_vmmc1_supply,
139 /* VMMC2 for MMC2 card */
140 static struct regulator_init_data zoom_vmmc2 = {
141 .constraints = {
142 .min_uV = 1850000,
143 .max_uV = 1850000,
144 .apply_uV = true,
145 .valid_modes_mask = REGULATOR_MODE_NORMAL
146 | REGULATOR_MODE_STANDBY,
147 .valid_ops_mask = REGULATOR_CHANGE_MODE
148 | REGULATOR_CHANGE_STATUS,
150 .num_consumer_supplies = 1,
151 .consumer_supplies = &zoom_vmmc2_supply,
154 /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
155 static struct regulator_init_data zoom_vsim = {
156 .constraints = {
157 .min_uV = 1800000,
158 .max_uV = 3000000,
159 .valid_modes_mask = REGULATOR_MODE_NORMAL
160 | REGULATOR_MODE_STANDBY,
161 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
162 | REGULATOR_CHANGE_MODE
163 | REGULATOR_CHANGE_STATUS,
165 .num_consumer_supplies = 1,
166 .consumer_supplies = &zoom_vsim_supply,
169 static struct regulator_init_data zoom_vmmc3 = {
170 .constraints = {
171 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
173 .num_consumer_supplies = 1,
174 .consumer_supplies = &zoom_vmmc3_supply,
177 static struct fixed_voltage_config zoom_vwlan = {
178 .supply_name = "vwl1271",
179 .microvolts = 1800000, /* 1.8V */
180 .gpio = OMAP_ZOOM_WLAN_PMENA_GPIO,
181 .startup_delay = 70000, /* 70msec */
182 .enable_high = 1,
183 .enabled_at_boot = 0,
184 .init_data = &zoom_vmmc3,
187 static struct platform_device omap_vwlan_device = {
188 .name = "reg-fixed-voltage",
189 .id = 1,
190 .dev = {
191 .platform_data = &zoom_vwlan,
195 static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = {
196 .irq = OMAP_GPIO_IRQ(OMAP_ZOOM_WLAN_IRQ_GPIO),
197 /* ZOOM ref clock is 26 MHz */
198 .board_ref_clock = 1,
201 static struct omap2_hsmmc_info mmc[] = {
203 .name = "external",
204 .mmc = 1,
205 .caps = MMC_CAP_4_BIT_DATA,
206 .gpio_wp = -EINVAL,
207 .power_saving = true,
210 .name = "internal",
211 .mmc = 2,
212 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
213 .gpio_cd = -EINVAL,
214 .gpio_wp = -EINVAL,
215 .nonremovable = true,
216 .power_saving = true,
219 .name = "wl1271",
220 .mmc = 3,
221 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
222 .gpio_wp = -EINVAL,
223 .gpio_cd = -EINVAL,
224 .nonremovable = true,
226 {} /* Terminator */
229 static struct regulator_consumer_supply zoom_vpll2_supplies[] = {
230 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
231 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
234 static struct regulator_consumer_supply zoom_vdda_dac_supply =
235 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
237 static struct regulator_init_data zoom_vpll2 = {
238 .constraints = {
239 .min_uV = 1800000,
240 .max_uV = 1800000,
241 .valid_modes_mask = REGULATOR_MODE_NORMAL
242 | REGULATOR_MODE_STANDBY,
243 .valid_ops_mask = REGULATOR_CHANGE_MODE
244 | REGULATOR_CHANGE_STATUS,
246 .num_consumer_supplies = ARRAY_SIZE(zoom_vpll2_supplies),
247 .consumer_supplies = zoom_vpll2_supplies,
250 static struct regulator_init_data zoom_vdac = {
251 .constraints = {
252 .min_uV = 1800000,
253 .max_uV = 1800000,
254 .valid_modes_mask = REGULATOR_MODE_NORMAL
255 | REGULATOR_MODE_STANDBY,
256 .valid_ops_mask = REGULATOR_CHANGE_MODE
257 | REGULATOR_CHANGE_STATUS,
259 .num_consumer_supplies = 1,
260 .consumer_supplies = &zoom_vdda_dac_supply,
263 static int zoom_twl_gpio_setup(struct device *dev,
264 unsigned gpio, unsigned ngpio)
266 int ret;
268 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
269 mmc[0].gpio_cd = gpio + 0;
270 omap2_hsmmc_init(mmc);
272 /* link regulators to MMC adapters ... we "know" the
273 * regulators will be set up only *after* we return.
275 zoom_vmmc1_supply.dev = mmc[0].dev;
276 zoom_vsim_supply.dev = mmc[0].dev;
277 zoom_vmmc2_supply.dev = mmc[1].dev;
279 ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable");
280 if (ret) {
281 pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
282 LCD_PANEL_ENABLE_GPIO);
283 return ret;
285 gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
287 return ret;
290 /* EXTMUTE callback function */
291 static void zoom2_set_hs_extmute(int mute)
293 gpio_set_value(ZOOM2_HEADSET_EXTMUTE_GPIO, mute);
296 static int zoom_batt_table[] = {
297 /* 0 C*/
298 30800, 29500, 28300, 27100,
299 26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
300 17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
301 11600, 11200, 10800, 10400, 10000, 9630, 9280, 8950, 8620, 8310,
302 8020, 7730, 7460, 7200, 6950, 6710, 6470, 6250, 6040, 5830,
303 5640, 5450, 5260, 5090, 4920, 4760, 4600, 4450, 4310, 4170,
304 4040, 3910, 3790, 3670, 3550
307 static struct twl4030_bci_platform_data zoom_bci_data = {
308 .battery_tmp_tbl = zoom_batt_table,
309 .tblsize = ARRAY_SIZE(zoom_batt_table),
312 static struct twl4030_usb_data zoom_usb_data = {
313 .usb_mode = T2_USB_MODE_ULPI,
316 static struct twl4030_gpio_platform_data zoom_gpio_data = {
317 .gpio_base = OMAP_MAX_GPIO_LINES,
318 .irq_base = TWL4030_GPIO_IRQ_BASE,
319 .irq_end = TWL4030_GPIO_IRQ_END,
320 .setup = zoom_twl_gpio_setup,
323 static struct twl4030_madc_platform_data zoom_madc_data = {
324 .irq_line = 1,
327 static struct twl4030_codec_audio_data zoom_audio_data;
329 static struct twl4030_codec_data zoom_codec_data = {
330 .audio_mclk = 26000000,
331 .audio = &zoom_audio_data,
334 static struct twl4030_platform_data zoom_twldata = {
335 .irq_base = TWL4030_IRQ_BASE,
336 .irq_end = TWL4030_IRQ_END,
338 /* platform_data for children goes here */
339 .bci = &zoom_bci_data,
340 .madc = &zoom_madc_data,
341 .usb = &zoom_usb_data,
342 .gpio = &zoom_gpio_data,
343 .keypad = &zoom_kp_twl4030_data,
344 .codec = &zoom_codec_data,
345 .vmmc1 = &zoom_vmmc1,
346 .vmmc2 = &zoom_vmmc2,
347 .vsim = &zoom_vsim,
348 .vpll2 = &zoom_vpll2,
349 .vdac = &zoom_vdac,
352 static struct i2c_board_info __initdata zoom_i2c_boardinfo[] = {
354 I2C_BOARD_INFO("twl5030", 0x48),
355 .flags = I2C_CLIENT_WAKE,
356 .irq = INT_34XX_SYS_NIRQ,
357 .platform_data = &zoom_twldata,
361 static int __init omap_i2c_init(void)
363 if (machine_is_omap_zoom2()) {
364 zoom_audio_data.ramp_delay_value = 3; /* 161 ms */
365 zoom_audio_data.hs_extmute = 1;
366 zoom_audio_data.set_hs_extmute = zoom2_set_hs_extmute;
368 omap_register_i2c_bus(1, 2400, zoom_i2c_boardinfo,
369 ARRAY_SIZE(zoom_i2c_boardinfo));
370 omap_register_i2c_bus(2, 400, NULL, 0);
371 omap_register_i2c_bus(3, 400, NULL, 0);
372 return 0;
375 static struct omap_musb_board_data musb_board_data = {
376 .interface_type = MUSB_INTERFACE_ULPI,
377 .mode = MUSB_OTG,
378 .power = 100,
381 static void enable_board_wakeup_source(void)
383 /* T2 interrupt line (keypad) */
384 omap_mux_init_signal("sys_nirq",
385 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
388 void __init zoom_peripherals_init(void)
390 if (wl12xx_set_platform_data(&omap_zoom_wlan_data))
391 pr_err("error setting wl12xx data\n");
393 omap_i2c_init();
394 platform_device_register(&omap_vwlan_device);
395 usb_musb_init(&musb_board_data);
396 enable_board_wakeup_source();
397 omap_serial_init();