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