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