omap: Fix DEBUG_LL UART io address
[linux-2.6.git] / arch / arm / mach-omap2 / board-3430sdp.c
blob364ce7e4c7c3a508b99e028b253cdb1377a86a72
1 /*
2 * linux/arch/arm/mach-omap2/board-3430sdp.c
4 * Copyright (C) 2007 Texas Instruments
6 * Modified from mach-omap2/board-generic.c
8 * Initial code: Syed Mohammed Khasim
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
15 #include <linux/kernel.h>
16 #include <linux/init.h>
17 #include <linux/platform_device.h>
18 #include <linux/delay.h>
19 #include <linux/input.h>
20 #include <linux/spi/spi.h>
21 #include <linux/spi/ads7846.h>
22 #include <linux/i2c/twl4030.h>
23 #include <linux/regulator/machine.h>
24 #include <linux/io.h>
25 #include <linux/gpio.h>
27 #include <mach/hardware.h>
28 #include <asm/mach-types.h>
29 #include <asm/mach/arch.h>
30 #include <asm/mach/map.h>
32 #include <mach/mcspi.h>
33 #include <mach/mux.h>
34 #include <mach/board.h>
35 #include <mach/usb.h>
36 #include <mach/common.h>
37 #include <mach/dma.h>
38 #include <mach/gpmc.h>
40 #include <mach/control.h>
41 #include <mach/keypad.h>
42 #include <mach/gpmc-smc91x.h>
44 #include "sdram-qimonda-hyb18m512160af-6.h"
45 #include "mmc-twl4030.h"
47 #define CONFIG_DISABLE_HFCLK 1
49 #define SDP3430_TS_GPIO_IRQ_SDPV1 3
50 #define SDP3430_TS_GPIO_IRQ_SDPV2 2
52 #define ENABLE_VAUX3_DEDICATED 0x03
53 #define ENABLE_VAUX3_DEV_GRP 0x20
55 #define TWL4030_MSECURE_GPIO 22
57 static int board_keymap[] = {
58 KEY(0, 0, KEY_LEFT),
59 KEY(0, 1, KEY_RIGHT),
60 KEY(0, 2, KEY_A),
61 KEY(0, 3, KEY_B),
62 KEY(0, 4, KEY_C),
63 KEY(1, 0, KEY_DOWN),
64 KEY(1, 1, KEY_UP),
65 KEY(1, 2, KEY_E),
66 KEY(1, 3, KEY_F),
67 KEY(1, 4, KEY_G),
68 KEY(2, 0, KEY_ENTER),
69 KEY(2, 1, KEY_I),
70 KEY(2, 2, KEY_J),
71 KEY(2, 3, KEY_K),
72 KEY(2, 4, KEY_3),
73 KEY(3, 0, KEY_M),
74 KEY(3, 1, KEY_N),
75 KEY(3, 2, KEY_O),
76 KEY(3, 3, KEY_P),
77 KEY(3, 4, KEY_Q),
78 KEY(4, 0, KEY_R),
79 KEY(4, 1, KEY_4),
80 KEY(4, 2, KEY_T),
81 KEY(4, 3, KEY_U),
82 KEY(4, 4, KEY_D),
83 KEY(5, 0, KEY_V),
84 KEY(5, 1, KEY_W),
85 KEY(5, 2, KEY_L),
86 KEY(5, 3, KEY_S),
87 KEY(5, 4, KEY_H),
91 static struct matrix_keymap_data board_map_data = {
92 .keymap = board_keymap,
93 .keymap_size = ARRAY_SIZE(board_keymap),
96 static struct twl4030_keypad_data sdp3430_kp_data = {
97 .keymap_data = &board_map_data,
98 .rows = 5,
99 .cols = 6,
100 .rep = 1,
103 static int ts_gpio; /* Needed for ads7846_get_pendown_state */
106 * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
108 * @return - void. If request gpio fails then Flag KERN_ERR.
110 static void ads7846_dev_init(void)
112 if (gpio_request(ts_gpio, "ADS7846 pendown") < 0) {
113 printk(KERN_ERR "can't get ads746 pen down GPIO\n");
114 return;
117 gpio_direction_input(ts_gpio);
119 omap_set_gpio_debounce(ts_gpio, 1);
120 omap_set_gpio_debounce_time(ts_gpio, 0xa);
123 static int ads7846_get_pendown_state(void)
125 return !gpio_get_value(ts_gpio);
128 static struct ads7846_platform_data tsc2046_config __initdata = {
129 .get_pendown_state = ads7846_get_pendown_state,
130 .keep_vref_on = 1,
134 static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
135 .turbo_mode = 0,
136 .single_channel = 1, /* 0: slave, 1: master */
139 static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
140 [0] = {
142 * TSC2046 operates at a max freqency of 2MHz, so
143 * operate slightly below at 1.5MHz
145 .modalias = "ads7846",
146 .bus_num = 1,
147 .chip_select = 0,
148 .max_speed_hz = 1500000,
149 .controller_data = &tsc2046_mcspi_config,
150 .irq = 0,
151 .platform_data = &tsc2046_config,
155 static struct platform_device sdp3430_lcd_device = {
156 .name = "sdp2430_lcd",
157 .id = -1,
160 static struct regulator_consumer_supply sdp3430_vdac_supply = {
161 .supply = "vdac",
162 .dev = &sdp3430_lcd_device.dev,
165 static struct regulator_consumer_supply sdp3430_vdvi_supply = {
166 .supply = "vdvi",
167 .dev = &sdp3430_lcd_device.dev,
170 static struct platform_device *sdp3430_devices[] __initdata = {
171 &sdp3430_lcd_device,
174 static struct omap_lcd_config sdp3430_lcd_config __initdata = {
175 .ctrl_name = "internal",
178 static struct omap_board_config_kernel sdp3430_config[] __initdata = {
179 { OMAP_TAG_LCD, &sdp3430_lcd_config },
182 static void __init omap_3430sdp_init_irq(void)
184 omap_board_config = sdp3430_config;
185 omap_board_config_size = ARRAY_SIZE(sdp3430_config);
186 omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL);
187 omap_init_irq();
188 omap_gpio_init();
191 static int sdp3430_batt_table[] = {
192 /* 0 C*/
193 30800, 29500, 28300, 27100,
194 26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
195 17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
196 11600, 11200, 10800, 10400, 10000, 9630, 9280, 8950, 8620, 8310,
197 8020, 7730, 7460, 7200, 6950, 6710, 6470, 6250, 6040, 5830,
198 5640, 5450, 5260, 5090, 4920, 4760, 4600, 4450, 4310, 4170,
199 4040, 3910, 3790, 3670, 3550
202 static struct twl4030_bci_platform_data sdp3430_bci_data = {
203 .battery_tmp_tbl = sdp3430_batt_table,
204 .tblsize = ARRAY_SIZE(sdp3430_batt_table),
207 static struct twl4030_hsmmc_info mmc[] = {
209 .mmc = 1,
210 /* 8 bits (default) requires S6.3 == ON,
211 * so the SIM card isn't used; else 4 bits.
213 .wires = 8,
214 .gpio_wp = 4,
217 .mmc = 2,
218 .wires = 8,
219 .gpio_wp = 7,
221 {} /* Terminator */
224 static struct regulator_consumer_supply sdp3430_vmmc1_supply = {
225 .supply = "vmmc",
228 static struct regulator_consumer_supply sdp3430_vsim_supply = {
229 .supply = "vmmc_aux",
232 static struct regulator_consumer_supply sdp3430_vmmc2_supply = {
233 .supply = "vmmc",
236 static int sdp3430_twl_gpio_setup(struct device *dev,
237 unsigned gpio, unsigned ngpio)
239 /* gpio + 0 is "mmc0_cd" (input/IRQ),
240 * gpio + 1 is "mmc1_cd" (input/IRQ)
242 mmc[0].gpio_cd = gpio + 0;
243 mmc[1].gpio_cd = gpio + 1;
244 twl4030_mmc_init(mmc);
246 /* link regulators to MMC adapters ... we "know" the
247 * regulators will be set up only *after* we return.
249 sdp3430_vmmc1_supply.dev = mmc[0].dev;
250 sdp3430_vsim_supply.dev = mmc[0].dev;
251 sdp3430_vmmc2_supply.dev = mmc[1].dev;
253 /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
254 gpio_request(gpio + 7, "sub_lcd_en_bkl");
255 gpio_direction_output(gpio + 7, 0);
257 /* gpio + 15 is "sub_lcd_nRST" (output) */
258 gpio_request(gpio + 15, "sub_lcd_nRST");
259 gpio_direction_output(gpio + 15, 0);
261 return 0;
264 static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
265 .gpio_base = OMAP_MAX_GPIO_LINES,
266 .irq_base = TWL4030_GPIO_IRQ_BASE,
267 .irq_end = TWL4030_GPIO_IRQ_END,
268 .pulldowns = BIT(2) | BIT(6) | BIT(8) | BIT(13)
269 | BIT(16) | BIT(17),
270 .setup = sdp3430_twl_gpio_setup,
273 static struct twl4030_usb_data sdp3430_usb_data = {
274 .usb_mode = T2_USB_MODE_ULPI,
277 static struct twl4030_madc_platform_data sdp3430_madc_data = {
278 .irq_line = 1,
282 * Apply all the fixed voltages since most versions of U-Boot
283 * don't bother with that initialization.
286 /* VAUX1 for mainboard (irda and sub-lcd) */
287 static struct regulator_init_data sdp3430_vaux1 = {
288 .constraints = {
289 .min_uV = 2800000,
290 .max_uV = 2800000,
291 .apply_uV = true,
292 .valid_modes_mask = REGULATOR_MODE_NORMAL
293 | REGULATOR_MODE_STANDBY,
294 .valid_ops_mask = REGULATOR_CHANGE_MODE
295 | REGULATOR_CHANGE_STATUS,
299 /* VAUX2 for camera module */
300 static struct regulator_init_data sdp3430_vaux2 = {
301 .constraints = {
302 .min_uV = 2800000,
303 .max_uV = 2800000,
304 .apply_uV = true,
305 .valid_modes_mask = REGULATOR_MODE_NORMAL
306 | REGULATOR_MODE_STANDBY,
307 .valid_ops_mask = REGULATOR_CHANGE_MODE
308 | REGULATOR_CHANGE_STATUS,
312 /* VAUX3 for LCD board */
313 static struct regulator_init_data sdp3430_vaux3 = {
314 .constraints = {
315 .min_uV = 2800000,
316 .max_uV = 2800000,
317 .apply_uV = true,
318 .valid_modes_mask = REGULATOR_MODE_NORMAL
319 | REGULATOR_MODE_STANDBY,
320 .valid_ops_mask = REGULATOR_CHANGE_MODE
321 | REGULATOR_CHANGE_STATUS,
325 /* VAUX4 for OMAP VDD_CSI2 (camera) */
326 static struct regulator_init_data sdp3430_vaux4 = {
327 .constraints = {
328 .min_uV = 1800000,
329 .max_uV = 1800000,
330 .apply_uV = true,
331 .valid_modes_mask = REGULATOR_MODE_NORMAL
332 | REGULATOR_MODE_STANDBY,
333 .valid_ops_mask = REGULATOR_CHANGE_MODE
334 | REGULATOR_CHANGE_STATUS,
338 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
339 static struct regulator_init_data sdp3430_vmmc1 = {
340 .constraints = {
341 .min_uV = 1850000,
342 .max_uV = 3150000,
343 .valid_modes_mask = REGULATOR_MODE_NORMAL
344 | REGULATOR_MODE_STANDBY,
345 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
346 | REGULATOR_CHANGE_MODE
347 | REGULATOR_CHANGE_STATUS,
349 .num_consumer_supplies = 1,
350 .consumer_supplies = &sdp3430_vmmc1_supply,
353 /* VMMC2 for MMC2 card */
354 static struct regulator_init_data sdp3430_vmmc2 = {
355 .constraints = {
356 .min_uV = 1850000,
357 .max_uV = 1850000,
358 .apply_uV = true,
359 .valid_modes_mask = REGULATOR_MODE_NORMAL
360 | REGULATOR_MODE_STANDBY,
361 .valid_ops_mask = REGULATOR_CHANGE_MODE
362 | REGULATOR_CHANGE_STATUS,
364 .num_consumer_supplies = 1,
365 .consumer_supplies = &sdp3430_vmmc2_supply,
368 /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
369 static struct regulator_init_data sdp3430_vsim = {
370 .constraints = {
371 .min_uV = 1800000,
372 .max_uV = 3000000,
373 .valid_modes_mask = REGULATOR_MODE_NORMAL
374 | REGULATOR_MODE_STANDBY,
375 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
376 | REGULATOR_CHANGE_MODE
377 | REGULATOR_CHANGE_STATUS,
379 .num_consumer_supplies = 1,
380 .consumer_supplies = &sdp3430_vsim_supply,
383 /* VDAC for DSS driving S-Video */
384 static struct regulator_init_data sdp3430_vdac = {
385 .constraints = {
386 .min_uV = 1800000,
387 .max_uV = 1800000,
388 .apply_uV = true,
389 .valid_modes_mask = REGULATOR_MODE_NORMAL
390 | REGULATOR_MODE_STANDBY,
391 .valid_ops_mask = REGULATOR_CHANGE_MODE
392 | REGULATOR_CHANGE_STATUS,
394 .num_consumer_supplies = 1,
395 .consumer_supplies = &sdp3430_vdac_supply,
398 /* VPLL2 for digital video outputs */
399 static struct regulator_init_data sdp3430_vpll2 = {
400 .constraints = {
401 .name = "VDVI",
402 .min_uV = 1800000,
403 .max_uV = 1800000,
404 .valid_modes_mask = REGULATOR_MODE_NORMAL
405 | REGULATOR_MODE_STANDBY,
406 .valid_ops_mask = REGULATOR_CHANGE_MODE
407 | REGULATOR_CHANGE_STATUS,
409 .num_consumer_supplies = 1,
410 .consumer_supplies = &sdp3430_vdvi_supply,
413 static struct twl4030_platform_data sdp3430_twldata = {
414 .irq_base = TWL4030_IRQ_BASE,
415 .irq_end = TWL4030_IRQ_END,
417 /* platform_data for children goes here */
418 .bci = &sdp3430_bci_data,
419 .gpio = &sdp3430_gpio_data,
420 .madc = &sdp3430_madc_data,
421 .keypad = &sdp3430_kp_data,
422 .usb = &sdp3430_usb_data,
424 .vaux1 = &sdp3430_vaux1,
425 .vaux2 = &sdp3430_vaux2,
426 .vaux3 = &sdp3430_vaux3,
427 .vaux4 = &sdp3430_vaux4,
428 .vmmc1 = &sdp3430_vmmc1,
429 .vmmc2 = &sdp3430_vmmc2,
430 .vsim = &sdp3430_vsim,
431 .vdac = &sdp3430_vdac,
432 .vpll2 = &sdp3430_vpll2,
435 static struct i2c_board_info __initdata sdp3430_i2c_boardinfo[] = {
437 I2C_BOARD_INFO("twl4030", 0x48),
438 .flags = I2C_CLIENT_WAKE,
439 .irq = INT_34XX_SYS_NIRQ,
440 .platform_data = &sdp3430_twldata,
444 static int __init omap3430_i2c_init(void)
446 /* i2c1 for PMIC only */
447 omap_register_i2c_bus(1, 2600, sdp3430_i2c_boardinfo,
448 ARRAY_SIZE(sdp3430_i2c_boardinfo));
449 /* i2c2 on camera connector (for sensor control) and optional isp1301 */
450 omap_register_i2c_bus(2, 400, NULL, 0);
451 /* i2c3 on display connector (for DVI, tfp410) */
452 omap_register_i2c_bus(3, 400, NULL, 0);
453 return 0;
456 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
458 static struct omap_smc91x_platform_data board_smc91x_data = {
459 .cs = 3,
460 .flags = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
461 IORESOURCE_IRQ_LOWLEVEL,
464 static void __init board_smc91x_init(void)
466 if (omap_rev() > OMAP3430_REV_ES1_0)
467 board_smc91x_data.gpio_irq = 6;
468 else
469 board_smc91x_data.gpio_irq = 29;
471 gpmc_smc91x_init(&board_smc91x_data);
474 #else
476 static inline void board_smc91x_init(void)
480 #endif
482 static void enable_board_wakeup_source(void)
484 omap_cfg_reg(AF26_34XX_SYS_NIRQ); /* T2 interrupt line (keypad) */
487 static void __init omap_3430sdp_init(void)
489 omap3430_i2c_init();
490 platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
491 if (omap_rev() > OMAP3430_REV_ES1_0)
492 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
493 else
494 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV1;
495 sdp3430_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
496 spi_register_board_info(sdp3430_spi_board_info,
497 ARRAY_SIZE(sdp3430_spi_board_info));
498 ads7846_dev_init();
499 omap_serial_init();
500 usb_musb_init();
501 board_smc91x_init();
502 enable_board_wakeup_source();
505 static void __init omap_3430sdp_map_io(void)
507 omap2_set_globals_343x();
508 omap2_map_common_io();
511 MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
512 /* Maintainer: Syed Khasim - Texas Instruments Inc */
513 .phys_io = 0x48000000,
514 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
515 .boot_params = 0x80000100,
516 .map_io = omap_3430sdp_map_io,
517 .init_irq = omap_3430sdp_init_irq,
518 .init_machine = omap_3430sdp_init,
519 .timer = &omap_timer,
520 MACHINE_END