OMAP2/3 board-*.c files: read bootloader configuration earlier
[safe/jmp/linux-2.6] / arch / arm / mach-omap2 / board-zoom2.c
1 /*
2  * Copyright (C) 2009 Texas Instruments Inc.
3  * Mikkel Christensen <mlc@ti.com>
4  *
5  * Modified from mach-omap2/board-ldp.c
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11
12 #include <linux/kernel.h>
13 #include <linux/init.h>
14 #include <linux/platform_device.h>
15 #include <linux/input.h>
16 #include <linux/gpio.h>
17 #include <linux/i2c/twl4030.h>
18 #include <linux/regulator/machine.h>
19
20 #include <asm/mach-types.h>
21 #include <asm/mach/arch.h>
22
23 #include <mach/common.h>
24 #include <mach/usb.h>
25 #include <mach/keypad.h>
26
27 #include "mmc-twl4030.h"
28
29 /* Zoom2 has Qwerty keyboard*/
30 static int zoom2_twl4030_keymap[] = {
31         KEY(0, 0, KEY_E),
32         KEY(1, 0, KEY_R),
33         KEY(2, 0, KEY_T),
34         KEY(3, 0, KEY_HOME),
35         KEY(6, 0, KEY_I),
36         KEY(7, 0, KEY_LEFTSHIFT),
37         KEY(0, 1, KEY_D),
38         KEY(1, 1, KEY_F),
39         KEY(2, 1, KEY_G),
40         KEY(3, 1, KEY_SEND),
41         KEY(6, 1, KEY_K),
42         KEY(7, 1, KEY_ENTER),
43         KEY(0, 2, KEY_X),
44         KEY(1, 2, KEY_C),
45         KEY(2, 2, KEY_V),
46         KEY(3, 2, KEY_END),
47         KEY(6, 2, KEY_DOT),
48         KEY(7, 2, KEY_CAPSLOCK),
49         KEY(0, 3, KEY_Z),
50         KEY(1, 3, KEY_KPPLUS),
51         KEY(2, 3, KEY_B),
52         KEY(3, 3, KEY_F1),
53         KEY(6, 3, KEY_O),
54         KEY(7, 3, KEY_SPACE),
55         KEY(0, 4, KEY_W),
56         KEY(1, 4, KEY_Y),
57         KEY(2, 4, KEY_U),
58         KEY(3, 4, KEY_F2),
59         KEY(4, 4, KEY_VOLUMEUP),
60         KEY(6, 4, KEY_L),
61         KEY(7, 4, KEY_LEFT),
62         KEY(0, 5, KEY_S),
63         KEY(1, 5, KEY_H),
64         KEY(2, 5, KEY_J),
65         KEY(3, 5, KEY_F3),
66         KEY(5, 5, KEY_VOLUMEDOWN),
67         KEY(6, 5, KEY_M),
68         KEY(4, 5, KEY_ENTER),
69         KEY(7, 5, KEY_RIGHT),
70         KEY(0, 6, KEY_Q),
71         KEY(1, 6, KEY_A),
72         KEY(2, 6, KEY_N),
73         KEY(3, 6, KEY_BACKSPACE),
74         KEY(6, 6, KEY_P),
75         KEY(7, 6, KEY_UP),
76         KEY(6, 7, KEY_SELECT),
77         KEY(7, 7, KEY_DOWN),
78         KEY(0, 7, KEY_PROG1),   /*MACRO 1 <User defined> */
79         KEY(1, 7, KEY_PROG2),   /*MACRO 2 <User defined> */
80         KEY(2, 7, KEY_PROG3),   /*MACRO 3 <User defined> */
81         KEY(3, 7, KEY_PROG4),   /*MACRO 4 <User defined> */
82         0
83 };
84
85 static struct twl4030_keypad_data zoom2_kp_twl4030_data = {
86         .rows           = 8,
87         .cols           = 8,
88         .keymap         = zoom2_twl4030_keymap,
89         .keymapsize     = ARRAY_SIZE(zoom2_twl4030_keymap),
90         .rep            = 1,
91 };
92
93 static struct omap_board_config_kernel zoom2_config[] __initdata = {
94 };
95
96 static struct regulator_consumer_supply zoom2_vmmc1_supply = {
97         .supply         = "vmmc",
98 };
99
100 static struct regulator_consumer_supply zoom2_vsim_supply = {
101         .supply         = "vmmc_aux",
102 };
103
104 static struct regulator_consumer_supply zoom2_vmmc2_supply = {
105         .supply         = "vmmc",
106 };
107
108 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
109 static struct regulator_init_data zoom2_vmmc1 = {
110         .constraints = {
111                 .min_uV                 = 1850000,
112                 .max_uV                 = 3150000,
113                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
114                                         | REGULATOR_MODE_STANDBY,
115                 .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
116                                         | REGULATOR_CHANGE_MODE
117                                         | REGULATOR_CHANGE_STATUS,
118         },
119         .num_consumer_supplies  = 1,
120         .consumer_supplies      = &zoom2_vmmc1_supply,
121 };
122
123 /* VMMC2 for MMC2 card */
124 static struct regulator_init_data zoom2_vmmc2 = {
125         .constraints = {
126                 .min_uV                 = 1850000,
127                 .max_uV                 = 1850000,
128                 .apply_uV               = true,
129                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
130                                         | REGULATOR_MODE_STANDBY,
131                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
132                                         | REGULATOR_CHANGE_STATUS,
133         },
134         .num_consumer_supplies  = 1,
135         .consumer_supplies      = &zoom2_vmmc2_supply,
136 };
137
138 /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
139 static struct regulator_init_data zoom2_vsim = {
140         .constraints = {
141                 .min_uV                 = 1800000,
142                 .max_uV                 = 3000000,
143                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
144                                         | REGULATOR_MODE_STANDBY,
145                 .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
146                                         | REGULATOR_CHANGE_MODE
147                                         | REGULATOR_CHANGE_STATUS,
148         },
149         .num_consumer_supplies  = 1,
150         .consumer_supplies      = &zoom2_vsim_supply,
151 };
152
153 static struct twl4030_hsmmc_info mmc[] __initdata = {
154         {
155                 .mmc            = 1,
156                 .wires          = 4,
157                 .gpio_wp        = -EINVAL,
158         },
159         {
160                 .mmc            = 2,
161                 .wires          = 4,
162                 .gpio_wp        = -EINVAL,
163         },
164         {}      /* Terminator */
165 };
166
167 static int zoom2_twl_gpio_setup(struct device *dev,
168                 unsigned gpio, unsigned ngpio)
169 {
170         /* gpio + 0 is "mmc0_cd" (input/IRQ),
171          * gpio + 1 is "mmc1_cd" (input/IRQ)
172          */
173         mmc[0].gpio_cd = gpio + 0;
174         mmc[1].gpio_cd = gpio + 1;
175         twl4030_mmc_init(mmc);
176
177         /* link regulators to MMC adapters ... we "know" the
178          * regulators will be set up only *after* we return.
179         */
180         zoom2_vmmc1_supply.dev = mmc[0].dev;
181         zoom2_vsim_supply.dev = mmc[0].dev;
182         zoom2_vmmc2_supply.dev = mmc[1].dev;
183
184         return 0;
185 }
186
187
188 static int zoom2_batt_table[] = {
189 /* 0 C*/
190 30800, 29500, 28300, 27100,
191 26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
192 17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
193 11600, 11200, 10800, 10400, 10000, 9630,  9280,  8950,  8620,  8310,
194 8020,  7730,  7460,  7200,  6950,  6710,  6470,  6250,  6040,  5830,
195 5640,  5450,  5260,  5090,  4920,  4760,  4600,  4450,  4310,  4170,
196 4040,  3910,  3790,  3670,  3550
197 };
198
199 static struct twl4030_bci_platform_data zoom2_bci_data = {
200         .battery_tmp_tbl        = zoom2_batt_table,
201         .tblsize                = ARRAY_SIZE(zoom2_batt_table),
202 };
203
204 static struct twl4030_usb_data zoom2_usb_data = {
205         .usb_mode       = T2_USB_MODE_ULPI,
206 };
207
208 static void __init omap_zoom2_init_irq(void)
209 {
210         omap_board_config = zoom2_config;
211         omap_board_config_size = ARRAY_SIZE(zoom2_config);
212         omap2_init_common_hw(NULL, NULL);
213         omap_init_irq();
214         omap_gpio_init();
215 }
216
217 static struct twl4030_gpio_platform_data zoom2_gpio_data = {
218         .gpio_base      = OMAP_MAX_GPIO_LINES,
219         .irq_base       = TWL4030_GPIO_IRQ_BASE,
220         .irq_end        = TWL4030_GPIO_IRQ_END,
221         .setup          = zoom2_twl_gpio_setup,
222 };
223
224 static struct twl4030_madc_platform_data zoom2_madc_data = {
225         .irq_line       = 1,
226 };
227
228 static struct twl4030_platform_data zoom2_twldata = {
229         .irq_base       = TWL4030_IRQ_BASE,
230         .irq_end        = TWL4030_IRQ_END,
231
232         /* platform_data for children goes here */
233         .bci            = &zoom2_bci_data,
234         .madc           = &zoom2_madc_data,
235         .usb            = &zoom2_usb_data,
236         .gpio           = &zoom2_gpio_data,
237         .keypad         = &zoom2_kp_twl4030_data,
238         .vmmc1          = &zoom2_vmmc1,
239         .vmmc2          = &zoom2_vmmc2,
240         .vsim           = &zoom2_vsim,
241
242 };
243
244 static struct i2c_board_info __initdata zoom2_i2c_boardinfo[] = {
245         {
246                 I2C_BOARD_INFO("twl4030", 0x48),
247                 .flags          = I2C_CLIENT_WAKE,
248                 .irq            = INT_34XX_SYS_NIRQ,
249                 .platform_data  = &zoom2_twldata,
250         },
251 };
252
253 static int __init omap_i2c_init(void)
254 {
255         omap_register_i2c_bus(1, 2600, zoom2_i2c_boardinfo,
256                         ARRAY_SIZE(zoom2_i2c_boardinfo));
257         omap_register_i2c_bus(2, 400, NULL, 0);
258         omap_register_i2c_bus(3, 400, NULL, 0);
259         return 0;
260 }
261
262 extern int __init omap_zoom2_debugboard_init(void);
263
264 static void __init omap_zoom2_init(void)
265 {
266         omap_i2c_init();
267         omap_serial_init();
268         omap_zoom2_debugboard_init();
269         usb_musb_init();
270 }
271
272 static void __init omap_zoom2_map_io(void)
273 {
274         omap2_set_globals_343x();
275         omap2_map_common_io();
276 }
277
278 MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
279         .phys_io        = 0x48000000,
280         .io_pg_offst    = ((0xd8000000) >> 18) & 0xfffc,
281         .boot_params    = 0x80000100,
282         .map_io         = omap_zoom2_map_io,
283         .init_irq       = omap_zoom2_init_irq,
284         .init_machine   = omap_zoom2_init,
285         .timer          = &omap_timer,
286 MACHINE_END