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.
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>
30 #include <mach/board-zoom.h>
34 #include "common-board-devices.h"
36 #define OMAP_ZOOM_WLAN_PMENA_GPIO (101)
37 #define OMAP_ZOOM_WLAN_IRQ_GPIO (162)
39 #define LCD_PANEL_ENABLE_GPIO (7 + OMAP_MAX_GPIO_LINES)
41 /* Zoom2 has Qwerty keyboard*/
42 static uint32_t board_keymap[] = {
48 KEY(0, 7, KEY_LEFTSHIFT),
60 KEY(2, 7, KEY_CAPSLOCK),
62 KEY(3, 1, KEY_KPPLUS),
71 KEY(4, 4, KEY_VOLUMEUP),
78 KEY(5, 4, KEY_UNKNOWN),
79 KEY(5, 5, KEY_VOLUMEDOWN),
85 KEY(6, 3, KEY_BACKSPACE),
88 KEY(7, 0, KEY_PROG1), /*MACRO 1 <User defined> */
89 KEY(7, 1, KEY_PROG2), /*MACRO 2 <User defined> */
90 KEY(7, 2, KEY_PROG3), /*MACRO 3 <User defined> */
91 KEY(7, 3, KEY_PROG4), /*MACRO 4 <User defined> */
92 KEY(7, 6, KEY_SELECT),
96 static struct matrix_keymap_data board_map_data = {
97 .keymap = board_keymap,
98 .keymap_size = ARRAY_SIZE(board_keymap),
101 static struct twl4030_keypad_data zoom_kp_twl4030_data = {
102 .keymap_data = &board_map_data,
108 static struct regulator_consumer_supply zoom_vmmc1_supply = {
112 static struct regulator_consumer_supply zoom_vsim_supply = {
113 .supply = "vmmc_aux",
116 static struct regulator_consumer_supply zoom_vmmc2_supply = {
120 static struct regulator_consumer_supply zoom_vmmc3_supply = {
122 .dev_name = "omap_hsmmc.2",
125 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
126 static struct regulator_init_data zoom_vmmc1 = {
130 .valid_modes_mask = REGULATOR_MODE_NORMAL
131 | REGULATOR_MODE_STANDBY,
132 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
133 | REGULATOR_CHANGE_MODE
134 | REGULATOR_CHANGE_STATUS,
136 .num_consumer_supplies = 1,
137 .consumer_supplies = &zoom_vmmc1_supply,
140 /* VMMC2 for MMC2 card */
141 static struct regulator_init_data zoom_vmmc2 = {
146 .valid_modes_mask = REGULATOR_MODE_NORMAL
147 | REGULATOR_MODE_STANDBY,
148 .valid_ops_mask = REGULATOR_CHANGE_MODE
149 | REGULATOR_CHANGE_STATUS,
151 .num_consumer_supplies = 1,
152 .consumer_supplies = &zoom_vmmc2_supply,
155 /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
156 static struct regulator_init_data zoom_vsim = {
160 .valid_modes_mask = REGULATOR_MODE_NORMAL
161 | REGULATOR_MODE_STANDBY,
162 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
163 | REGULATOR_CHANGE_MODE
164 | REGULATOR_CHANGE_STATUS,
166 .num_consumer_supplies = 1,
167 .consumer_supplies = &zoom_vsim_supply,
170 static struct regulator_init_data zoom_vmmc3 = {
172 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
174 .num_consumer_supplies = 1,
175 .consumer_supplies = &zoom_vmmc3_supply,
178 static struct fixed_voltage_config zoom_vwlan = {
179 .supply_name = "vwl1271",
180 .microvolts = 1800000, /* 1.8V */
181 .gpio = OMAP_ZOOM_WLAN_PMENA_GPIO,
182 .startup_delay = 70000, /* 70msec */
184 .enabled_at_boot = 0,
185 .init_data = &zoom_vmmc3,
188 static struct platform_device omap_vwlan_device = {
189 .name = "reg-fixed-voltage",
192 .platform_data = &zoom_vwlan,
196 static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = {
197 .irq = OMAP_GPIO_IRQ(OMAP_ZOOM_WLAN_IRQ_GPIO),
198 /* ZOOM ref clock is 26 MHz */
199 .board_ref_clock = 1,
202 static struct omap2_hsmmc_info mmc[] = {
206 .caps = MMC_CAP_4_BIT_DATA,
208 .power_saving = true,
213 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
216 .nonremovable = true,
217 .power_saving = true,
222 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
225 .nonremovable = true,
230 static struct regulator_consumer_supply zoom_vpll2_supplies[] = {
231 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
232 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
235 static struct regulator_consumer_supply zoom_vdda_dac_supply =
236 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
238 static struct regulator_init_data zoom_vpll2 = {
242 .valid_modes_mask = REGULATOR_MODE_NORMAL
243 | REGULATOR_MODE_STANDBY,
244 .valid_ops_mask = REGULATOR_CHANGE_MODE
245 | REGULATOR_CHANGE_STATUS,
247 .num_consumer_supplies = ARRAY_SIZE(zoom_vpll2_supplies),
248 .consumer_supplies = zoom_vpll2_supplies,
251 static struct regulator_init_data zoom_vdac = {
255 .valid_modes_mask = REGULATOR_MODE_NORMAL
256 | REGULATOR_MODE_STANDBY,
257 .valid_ops_mask = REGULATOR_CHANGE_MODE
258 | REGULATOR_CHANGE_STATUS,
260 .num_consumer_supplies = 1,
261 .consumer_supplies = &zoom_vdda_dac_supply,
264 static int zoom_twl_gpio_setup(struct device *dev,
265 unsigned gpio, unsigned ngpio)
269 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
270 mmc[0].gpio_cd = gpio + 0;
271 omap2_hsmmc_init(mmc);
273 /* link regulators to MMC adapters ... we "know" the
274 * regulators will be set up only *after* we return.
276 zoom_vmmc1_supply.dev = mmc[0].dev;
277 zoom_vsim_supply.dev = mmc[0].dev;
278 zoom_vmmc2_supply.dev = mmc[1].dev;
280 ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
283 pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
284 LCD_PANEL_ENABLE_GPIO);
289 /* EXTMUTE callback function */
290 static void zoom2_set_hs_extmute(int mute)
292 gpio_set_value(ZOOM2_HEADSET_EXTMUTE_GPIO, mute);
295 static int zoom_batt_table[] = {
297 30800, 29500, 28300, 27100,
298 26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
299 17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
300 11600, 11200, 10800, 10400, 10000, 9630, 9280, 8950, 8620, 8310,
301 8020, 7730, 7460, 7200, 6950, 6710, 6470, 6250, 6040, 5830,
302 5640, 5450, 5260, 5090, 4920, 4760, 4600, 4450, 4310, 4170,
303 4040, 3910, 3790, 3670, 3550
306 static struct twl4030_bci_platform_data zoom_bci_data = {
307 .battery_tmp_tbl = zoom_batt_table,
308 .tblsize = ARRAY_SIZE(zoom_batt_table),
311 static struct twl4030_usb_data zoom_usb_data = {
312 .usb_mode = T2_USB_MODE_ULPI,
315 static struct twl4030_gpio_platform_data zoom_gpio_data = {
316 .gpio_base = OMAP_MAX_GPIO_LINES,
317 .irq_base = TWL4030_GPIO_IRQ_BASE,
318 .irq_end = TWL4030_GPIO_IRQ_END,
319 .setup = zoom_twl_gpio_setup,
322 static struct twl4030_madc_platform_data zoom_madc_data = {
326 static struct twl4030_codec_audio_data zoom_audio_data;
328 static struct twl4030_codec_data zoom_codec_data = {
329 .audio_mclk = 26000000,
330 .audio = &zoom_audio_data,
333 static struct twl4030_platform_data zoom_twldata = {
334 .irq_base = TWL4030_IRQ_BASE,
335 .irq_end = TWL4030_IRQ_END,
337 /* platform_data for children goes here */
338 .bci = &zoom_bci_data,
339 .madc = &zoom_madc_data,
340 .usb = &zoom_usb_data,
341 .gpio = &zoom_gpio_data,
342 .keypad = &zoom_kp_twl4030_data,
343 .codec = &zoom_codec_data,
344 .vmmc1 = &zoom_vmmc1,
345 .vmmc2 = &zoom_vmmc2,
347 .vpll2 = &zoom_vpll2,
351 static int __init omap_i2c_init(void)
353 if (machine_is_omap_zoom2()) {
354 zoom_audio_data.ramp_delay_value = 3; /* 161 ms */
355 zoom_audio_data.hs_extmute = 1;
356 zoom_audio_data.set_hs_extmute = zoom2_set_hs_extmute;
358 omap_pmic_init(1, 2400, "twl5030", INT_34XX_SYS_NIRQ, &zoom_twldata);
359 omap_register_i2c_bus(2, 400, NULL, 0);
360 omap_register_i2c_bus(3, 400, NULL, 0);
364 static void enable_board_wakeup_source(void)
366 /* T2 interrupt line (keypad) */
367 omap_mux_init_signal("sys_nirq",
368 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
371 void __init zoom_peripherals_init(void)
373 if (wl12xx_set_platform_data(&omap_zoom_wlan_data))
374 pr_err("error setting wl12xx data\n");
377 platform_device_register(&omap_vwlan_device);
379 enable_board_wakeup_source();