8950ecc9b9403220efa8e27858062971023f2ed5
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-omap2 / board-3430sdp.c
1 /*
2  * linux/arch/arm/mach-omap2/board-3430sdp.c
3  *
4  * Copyright (C) 2007 Texas Instruments
5  *
6  * Modified from mach-omap2/board-generic.c
7  *
8  * Initial code: Syed Mohammed Khasim
9  *
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.
13  */
14
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/input/matrix_keypad.h>
21 #include <linux/spi/spi.h>
22 #include <linux/spi/ads7846.h>
23 #include <linux/i2c/twl.h>
24 #include <linux/regulator/machine.h>
25 #include <linux/io.h>
26 #include <linux/gpio.h>
27 #include <linux/mmc/host.h>
28
29 #include <mach/hardware.h>
30 #include <asm/mach-types.h>
31 #include <asm/mach/arch.h>
32 #include <asm/mach/map.h>
33
34 #include <plat/mcspi.h>
35 #include <plat/board.h>
36 #include <plat/usb.h>
37 #include <plat/common.h>
38 #include <plat/dma.h>
39 #include <plat/gpmc.h>
40 #include <plat/display.h>
41 #include <plat/panel-generic-dpi.h>
42
43 #include <plat/gpmc-smc91x.h>
44
45 #include "board-flash.h"
46 #include "mux.h"
47 #include "sdram-qimonda-hyb18m512160af-6.h"
48 #include "hsmmc.h"
49 #include "pm.h"
50 #include "control.h"
51
52 #define CONFIG_DISABLE_HFCLK 1
53
54 #define SDP3430_TS_GPIO_IRQ_SDPV1       3
55 #define SDP3430_TS_GPIO_IRQ_SDPV2       2
56
57 #define ENABLE_VAUX3_DEDICATED  0x03
58 #define ENABLE_VAUX3_DEV_GRP    0x20
59
60 #define TWL4030_MSECURE_GPIO 22
61
62 /* FIXME: These values need to be updated based on more profiling on 3430sdp*/
63 static struct cpuidle_params omap3_cpuidle_params_table[] = {
64         /* C1 */
65         {1, 2, 2, 5},
66         /* C2 */
67         {1, 10, 10, 30},
68         /* C3 */
69         {1, 50, 50, 300},
70         /* C4 */
71         {1, 1500, 1800, 4000},
72         /* C5 */
73         {1, 2500, 7500, 12000},
74         /* C6 */
75         {1, 3000, 8500, 15000},
76         /* C7 */
77         {1, 10000, 30000, 300000},
78 };
79
80 static uint32_t board_keymap[] = {
81         KEY(0, 0, KEY_LEFT),
82         KEY(0, 1, KEY_RIGHT),
83         KEY(0, 2, KEY_A),
84         KEY(0, 3, KEY_B),
85         KEY(0, 4, KEY_C),
86         KEY(1, 0, KEY_DOWN),
87         KEY(1, 1, KEY_UP),
88         KEY(1, 2, KEY_E),
89         KEY(1, 3, KEY_F),
90         KEY(1, 4, KEY_G),
91         KEY(2, 0, KEY_ENTER),
92         KEY(2, 1, KEY_I),
93         KEY(2, 2, KEY_J),
94         KEY(2, 3, KEY_K),
95         KEY(2, 4, KEY_3),
96         KEY(3, 0, KEY_M),
97         KEY(3, 1, KEY_N),
98         KEY(3, 2, KEY_O),
99         KEY(3, 3, KEY_P),
100         KEY(3, 4, KEY_Q),
101         KEY(4, 0, KEY_R),
102         KEY(4, 1, KEY_4),
103         KEY(4, 2, KEY_T),
104         KEY(4, 3, KEY_U),
105         KEY(4, 4, KEY_D),
106         KEY(5, 0, KEY_V),
107         KEY(5, 1, KEY_W),
108         KEY(5, 2, KEY_L),
109         KEY(5, 3, KEY_S),
110         KEY(5, 4, KEY_H),
111         0
112 };
113
114 static struct matrix_keymap_data board_map_data = {
115         .keymap                 = board_keymap,
116         .keymap_size            = ARRAY_SIZE(board_keymap),
117 };
118
119 static struct twl4030_keypad_data sdp3430_kp_data = {
120         .keymap_data    = &board_map_data,
121         .rows           = 5,
122         .cols           = 6,
123         .rep            = 1,
124 };
125
126 static int ts_gpio;     /* Needed for ads7846_get_pendown_state */
127
128 /**
129  * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
130  *
131  * @return - void. If request gpio fails then Flag KERN_ERR.
132  */
133 static void ads7846_dev_init(void)
134 {
135         if (gpio_request(ts_gpio, "ADS7846 pendown") < 0) {
136                 printk(KERN_ERR "can't get ads746 pen down GPIO\n");
137                 return;
138         }
139
140         gpio_direction_input(ts_gpio);
141         gpio_set_debounce(ts_gpio, 310);
142 }
143
144 static int ads7846_get_pendown_state(void)
145 {
146         return !gpio_get_value(ts_gpio);
147 }
148
149 static struct ads7846_platform_data tsc2046_config __initdata = {
150         .get_pendown_state      = ads7846_get_pendown_state,
151         .keep_vref_on           = 1,
152         .wakeup                         = true,
153 };
154
155
156 static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
157         .turbo_mode     = 0,
158         .single_channel = 1,    /* 0: slave, 1: master */
159 };
160
161 static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
162         [0] = {
163                 /*
164                  * TSC2046 operates at a max freqency of 2MHz, so
165                  * operate slightly below at 1.5MHz
166                  */
167                 .modalias               = "ads7846",
168                 .bus_num                = 1,
169                 .chip_select            = 0,
170                 .max_speed_hz           = 1500000,
171                 .controller_data        = &tsc2046_mcspi_config,
172                 .irq                    = 0,
173                 .platform_data          = &tsc2046_config,
174         },
175 };
176
177
178 #define SDP3430_LCD_PANEL_BACKLIGHT_GPIO        8
179 #define SDP3430_LCD_PANEL_ENABLE_GPIO           5
180
181 static unsigned backlight_gpio;
182 static unsigned enable_gpio;
183 static int lcd_enabled;
184 static int dvi_enabled;
185
186 static void __init sdp3430_display_init(void)
187 {
188         int r;
189
190         enable_gpio    = SDP3430_LCD_PANEL_ENABLE_GPIO;
191         backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
192
193         r = gpio_request(enable_gpio, "LCD reset");
194         if (r) {
195                 printk(KERN_ERR "failed to get LCD reset GPIO\n");
196                 goto err0;
197         }
198
199         r = gpio_request(backlight_gpio, "LCD Backlight");
200         if (r) {
201                 printk(KERN_ERR "failed to get LCD backlight GPIO\n");
202                 goto err1;
203         }
204
205         gpio_direction_output(enable_gpio, 0);
206         gpio_direction_output(backlight_gpio, 0);
207
208         return;
209 err1:
210         gpio_free(enable_gpio);
211 err0:
212         return;
213 }
214
215 static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
216 {
217         if (dvi_enabled) {
218                 printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
219                 return -EINVAL;
220         }
221
222         gpio_direction_output(enable_gpio, 1);
223         gpio_direction_output(backlight_gpio, 1);
224
225         lcd_enabled = 1;
226
227         return 0;
228 }
229
230 static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
231 {
232         lcd_enabled = 0;
233
234         gpio_direction_output(enable_gpio, 0);
235         gpio_direction_output(backlight_gpio, 0);
236 }
237
238 static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
239 {
240         if (lcd_enabled) {
241                 printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
242                 return -EINVAL;
243         }
244
245         dvi_enabled = 1;
246
247         return 0;
248 }
249
250 static void sdp3430_panel_disable_dvi(struct omap_dss_device *dssdev)
251 {
252         dvi_enabled = 0;
253 }
254
255 static int sdp3430_panel_enable_tv(struct omap_dss_device *dssdev)
256 {
257         return 0;
258 }
259
260 static void sdp3430_panel_disable_tv(struct omap_dss_device *dssdev)
261 {
262 }
263
264
265 static struct omap_dss_device sdp3430_lcd_device = {
266         .name                   = "lcd",
267         .driver_name            = "sharp_ls_panel",
268         .type                   = OMAP_DISPLAY_TYPE_DPI,
269         .phy.dpi.data_lines     = 16,
270         .platform_enable        = sdp3430_panel_enable_lcd,
271         .platform_disable       = sdp3430_panel_disable_lcd,
272 };
273
274 static struct panel_generic_dpi_data dvi_panel = {
275         .name                   = "generic",
276         .platform_enable        = sdp3430_panel_enable_dvi,
277         .platform_disable       = sdp3430_panel_disable_dvi,
278 };
279
280 static struct omap_dss_device sdp3430_dvi_device = {
281         .name                   = "dvi",
282         .type                   = OMAP_DISPLAY_TYPE_DPI,
283         .driver_name            = "generic_dpi_panel",
284         .data                   = &dvi_panel,
285         .phy.dpi.data_lines     = 24,
286 };
287
288 static struct omap_dss_device sdp3430_tv_device = {
289         .name                   = "tv",
290         .driver_name            = "venc",
291         .type                   = OMAP_DISPLAY_TYPE_VENC,
292         .phy.venc.type          = OMAP_DSS_VENC_TYPE_SVIDEO,
293         .platform_enable        = sdp3430_panel_enable_tv,
294         .platform_disable       = sdp3430_panel_disable_tv,
295 };
296
297
298 static struct omap_dss_device *sdp3430_dss_devices[] = {
299         &sdp3430_lcd_device,
300         &sdp3430_dvi_device,
301         &sdp3430_tv_device,
302 };
303
304 static struct omap_dss_board_info sdp3430_dss_data = {
305         .num_devices    = ARRAY_SIZE(sdp3430_dss_devices),
306         .devices        = sdp3430_dss_devices,
307         .default_device = &sdp3430_lcd_device,
308 };
309
310 static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
311         REGULATOR_SUPPLY("vdda_dac", "omapdss");
312
313 static struct omap_board_config_kernel sdp3430_config[] __initdata = {
314 };
315
316 static void __init omap_3430sdp_init_early(void)
317 {
318         omap_board_config = sdp3430_config;
319         omap_board_config_size = ARRAY_SIZE(sdp3430_config);
320         omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
321         omap2_init_common_infrastructure();
322         omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
323 }
324
325 static int sdp3430_batt_table[] = {
326 /* 0 C*/
327 30800, 29500, 28300, 27100,
328 26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
329 17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
330 11600, 11200, 10800, 10400, 10000, 9630,   9280,   8950,   8620,   8310,
331 8020,   7730,   7460,   7200,   6950,   6710,   6470,   6250,   6040,   5830,
332 5640,   5450,   5260,   5090,   4920,   4760,   4600,   4450,   4310,   4170,
333 4040,   3910,   3790,   3670,   3550
334 };
335
336 static struct twl4030_bci_platform_data sdp3430_bci_data = {
337         .battery_tmp_tbl        = sdp3430_batt_table,
338         .tblsize                = ARRAY_SIZE(sdp3430_batt_table),
339 };
340
341 static struct omap2_hsmmc_info mmc[] = {
342         {
343                 .mmc            = 1,
344                 /* 8 bits (default) requires S6.3 == ON,
345                  * so the SIM card isn't used; else 4 bits.
346                  */
347                 .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
348                 .gpio_wp        = 4,
349         },
350         {
351                 .mmc            = 2,
352                 .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
353                 .gpio_wp        = 7,
354         },
355         {}      /* Terminator */
356 };
357
358 static int sdp3430_twl_gpio_setup(struct device *dev,
359                 unsigned gpio, unsigned ngpio)
360 {
361         /* gpio + 0 is "mmc0_cd" (input/IRQ),
362          * gpio + 1 is "mmc1_cd" (input/IRQ)
363          */
364         mmc[0].gpio_cd = gpio + 0;
365         mmc[1].gpio_cd = gpio + 1;
366         omap2_hsmmc_init(mmc);
367
368         /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
369         gpio_request(gpio + 7, "sub_lcd_en_bkl");
370         gpio_direction_output(gpio + 7, 0);
371
372         /* gpio + 15 is "sub_lcd_nRST" (output) */
373         gpio_request(gpio + 15, "sub_lcd_nRST");
374         gpio_direction_output(gpio + 15, 0);
375
376         return 0;
377 }
378
379 static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
380         .gpio_base      = OMAP_MAX_GPIO_LINES,
381         .irq_base       = TWL4030_GPIO_IRQ_BASE,
382         .irq_end        = TWL4030_GPIO_IRQ_END,
383         .pulldowns      = BIT(2) | BIT(6) | BIT(8) | BIT(13)
384                                 | BIT(16) | BIT(17),
385         .setup          = sdp3430_twl_gpio_setup,
386 };
387
388 static struct twl4030_usb_data sdp3430_usb_data = {
389         .usb_mode       = T2_USB_MODE_ULPI,
390 };
391
392 static struct twl4030_madc_platform_data sdp3430_madc_data = {
393         .irq_line       = 1,
394 };
395
396 /* regulator consumer mappings */
397
398 /* ads7846 on SPI */
399 static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
400         REGULATOR_SUPPLY("vcc", "spi1.0"),
401 };
402
403 static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
404         REGULATOR_SUPPLY("vdda_dac", "omapdss"),
405 };
406
407 /* VPLL2 for digital video outputs */
408 static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
409         REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
410 };
411
412 static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = {
413         REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"),
414 };
415
416 static struct regulator_consumer_supply sdp3430_vsim_supplies[] = {
417         REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.0"),
418 };
419
420 static struct regulator_consumer_supply sdp3430_vmmc2_supplies[] = {
421         REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"),
422 };
423
424 /*
425  * Apply all the fixed voltages since most versions of U-Boot
426  * don't bother with that initialization.
427  */
428
429 /* VAUX1 for mainboard (irda and sub-lcd) */
430 static struct regulator_init_data sdp3430_vaux1 = {
431         .constraints = {
432                 .min_uV                 = 2800000,
433                 .max_uV                 = 2800000,
434                 .apply_uV               = true,
435                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
436                                         | REGULATOR_MODE_STANDBY,
437                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
438                                         | REGULATOR_CHANGE_STATUS,
439         },
440 };
441
442 /* VAUX2 for camera module */
443 static struct regulator_init_data sdp3430_vaux2 = {
444         .constraints = {
445                 .min_uV                 = 2800000,
446                 .max_uV                 = 2800000,
447                 .apply_uV               = true,
448                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
449                                         | REGULATOR_MODE_STANDBY,
450                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
451                                         | REGULATOR_CHANGE_STATUS,
452         },
453 };
454
455 /* VAUX3 for LCD board */
456 static struct regulator_init_data sdp3430_vaux3 = {
457         .constraints = {
458                 .min_uV                 = 2800000,
459                 .max_uV                 = 2800000,
460                 .apply_uV               = true,
461                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
462                                         | REGULATOR_MODE_STANDBY,
463                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
464                                         | REGULATOR_CHANGE_STATUS,
465         },
466         .num_consumer_supplies          = ARRAY_SIZE(sdp3430_vaux3_supplies),
467         .consumer_supplies              = sdp3430_vaux3_supplies,
468 };
469
470 /* VAUX4 for OMAP VDD_CSI2 (camera) */
471 static struct regulator_init_data sdp3430_vaux4 = {
472         .constraints = {
473                 .min_uV                 = 1800000,
474                 .max_uV                 = 1800000,
475                 .apply_uV               = true,
476                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
477                                         | REGULATOR_MODE_STANDBY,
478                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
479                                         | REGULATOR_CHANGE_STATUS,
480         },
481 };
482
483 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
484 static struct regulator_init_data sdp3430_vmmc1 = {
485         .constraints = {
486                 .min_uV                 = 1850000,
487                 .max_uV                 = 3150000,
488                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
489                                         | REGULATOR_MODE_STANDBY,
490                 .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
491                                         | REGULATOR_CHANGE_MODE
492                                         | REGULATOR_CHANGE_STATUS,
493         },
494         .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vmmc1_supplies),
495         .consumer_supplies      = sdp3430_vmmc1_supplies,
496 };
497
498 /* VMMC2 for MMC2 card */
499 static struct regulator_init_data sdp3430_vmmc2 = {
500         .constraints = {
501                 .min_uV                 = 1850000,
502                 .max_uV                 = 1850000,
503                 .apply_uV               = true,
504                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
505                                         | REGULATOR_MODE_STANDBY,
506                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
507                                         | REGULATOR_CHANGE_STATUS,
508         },
509         .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vmmc2_supplies),
510         .consumer_supplies      = sdp3430_vmmc2_supplies,
511 };
512
513 /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
514 static struct regulator_init_data sdp3430_vsim = {
515         .constraints = {
516                 .min_uV                 = 1800000,
517                 .max_uV                 = 3000000,
518                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
519                                         | REGULATOR_MODE_STANDBY,
520                 .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
521                                         | REGULATOR_CHANGE_MODE
522                                         | REGULATOR_CHANGE_STATUS,
523         },
524         .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vsim_supplies),
525         .consumer_supplies      = sdp3430_vsim_supplies,
526 };
527
528 /* VDAC for DSS driving S-Video */
529 static struct regulator_init_data sdp3430_vdac = {
530         .constraints = {
531                 .min_uV                 = 1800000,
532                 .max_uV                 = 1800000,
533                 .apply_uV               = true,
534                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
535                                         | REGULATOR_MODE_STANDBY,
536                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
537                                         | REGULATOR_CHANGE_STATUS,
538         },
539         .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vdda_dac_supplies),
540         .consumer_supplies      = sdp3430_vdda_dac_supplies,
541 };
542
543 static struct regulator_init_data sdp3430_vpll2 = {
544         .constraints = {
545                 .name                   = "VDVI",
546                 .min_uV                 = 1800000,
547                 .max_uV                 = 1800000,
548                 .apply_uV               = true,
549                 .valid_modes_mask       = REGULATOR_MODE_NORMAL
550                                         | REGULATOR_MODE_STANDBY,
551                 .valid_ops_mask         = REGULATOR_CHANGE_MODE
552                                         | REGULATOR_CHANGE_STATUS,
553         },
554         .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vpll2_supplies),
555         .consumer_supplies      = sdp3430_vpll2_supplies,
556 };
557
558 static struct twl4030_codec_audio_data sdp3430_audio = {
559         .audio_mclk = 26000000,
560 };
561
562 static struct twl4030_codec_data sdp3430_codec = {
563         .audio_mclk = 26000000,
564         .audio = &sdp3430_audio,
565 };
566
567 static struct twl4030_platform_data sdp3430_twldata = {
568         .irq_base       = TWL4030_IRQ_BASE,
569         .irq_end        = TWL4030_IRQ_END,
570
571         /* platform_data for children goes here */
572         .bci            = &sdp3430_bci_data,
573         .gpio           = &sdp3430_gpio_data,
574         .madc           = &sdp3430_madc_data,
575         .keypad         = &sdp3430_kp_data,
576         .usb            = &sdp3430_usb_data,
577         .codec          = &sdp3430_codec,
578
579         .vaux1          = &sdp3430_vaux1,
580         .vaux2          = &sdp3430_vaux2,
581         .vaux3          = &sdp3430_vaux3,
582         .vaux4          = &sdp3430_vaux4,
583         .vmmc1          = &sdp3430_vmmc1,
584         .vmmc2          = &sdp3430_vmmc2,
585         .vsim           = &sdp3430_vsim,
586         .vdac           = &sdp3430_vdac,
587         .vpll2          = &sdp3430_vpll2,
588 };
589
590 static struct i2c_board_info __initdata sdp3430_i2c_boardinfo[] = {
591         {
592                 I2C_BOARD_INFO("twl4030", 0x48),
593                 .flags = I2C_CLIENT_WAKE,
594                 .irq = INT_34XX_SYS_NIRQ,
595                 .platform_data = &sdp3430_twldata,
596         },
597 };
598
599 static int __init omap3430_i2c_init(void)
600 {
601         /* i2c1 for PMIC only */
602         omap_register_i2c_bus(1, 2600, sdp3430_i2c_boardinfo,
603                         ARRAY_SIZE(sdp3430_i2c_boardinfo));
604         /* i2c2 on camera connector (for sensor control) and optional isp1301 */
605         omap_register_i2c_bus(2, 400, NULL, 0);
606         /* i2c3 on display connector (for DVI, tfp410) */
607         omap_register_i2c_bus(3, 400, NULL, 0);
608         return 0;
609 }
610
611 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
612
613 static struct omap_smc91x_platform_data board_smc91x_data = {
614         .cs             = 3,
615         .flags          = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
616                                 IORESOURCE_IRQ_LOWLEVEL,
617 };
618
619 static void __init board_smc91x_init(void)
620 {
621         if (omap_rev() > OMAP3430_REV_ES1_0)
622                 board_smc91x_data.gpio_irq = 6;
623         else
624                 board_smc91x_data.gpio_irq = 29;
625
626         gpmc_smc91x_init(&board_smc91x_data);
627 }
628
629 #else
630
631 static inline void board_smc91x_init(void)
632 {
633 }
634
635 #endif
636
637 static void enable_board_wakeup_source(void)
638 {
639         /* T2 interrupt line (keypad) */
640         omap_mux_init_signal("sys_nirq",
641                 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
642 }
643
644 static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
645
646         .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
647         .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
648         .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
649
650         .phy_reset  = true,
651         .reset_gpio_port[0]  = 57,
652         .reset_gpio_port[1]  = 61,
653         .reset_gpio_port[2]  = -EINVAL
654 };
655
656 #ifdef CONFIG_OMAP_MUX
657 static struct omap_board_mux board_mux[] __initdata = {
658         { .reg_offset = OMAP_MUX_TERMINATOR },
659 };
660 #endif
661
662 /*
663  * SDP3430 V2 Board CS organization
664  * Different from SDP3430 V1. Now 4 switches used to specify CS
665  *
666  * See also the Switch S8 settings in the comments.
667  */
668 static char chip_sel_3430[][GPMC_CS_NUM] = {
669         {PDC_NOR, PDC_NAND, PDC_ONENAND, DBG_MPDB, 0, 0, 0, 0}, /* S8:1111 */
670         {PDC_ONENAND, PDC_NAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1110 */
671         {PDC_NAND, PDC_ONENAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1101 */
672 };
673
674 static struct mtd_partition sdp_nor_partitions[] = {
675         /* bootloader (U-Boot, etc) in first sector */
676         {
677                 .name           = "Bootloader-NOR",
678                 .offset         = 0,
679                 .size           = SZ_256K,
680                 .mask_flags     = MTD_WRITEABLE, /* force read-only */
681         },
682         /* bootloader params in the next sector */
683         {
684                 .name           = "Params-NOR",
685                 .offset         = MTDPART_OFS_APPEND,
686                 .size           = SZ_256K,
687                 .mask_flags     = 0,
688         },
689         /* kernel */
690         {
691                 .name           = "Kernel-NOR",
692                 .offset         = MTDPART_OFS_APPEND,
693                 .size           = SZ_2M,
694                 .mask_flags     = 0
695         },
696         /* file system */
697         {
698                 .name           = "Filesystem-NOR",
699                 .offset         = MTDPART_OFS_APPEND,
700                 .size           = MTDPART_SIZ_FULL,
701                 .mask_flags     = 0
702         }
703 };
704
705 static struct mtd_partition sdp_onenand_partitions[] = {
706         {
707                 .name           = "X-Loader-OneNAND",
708                 .offset         = 0,
709                 .size           = 4 * (64 * 2048),
710                 .mask_flags     = MTD_WRITEABLE  /* force read-only */
711         },
712         {
713                 .name           = "U-Boot-OneNAND",
714                 .offset         = MTDPART_OFS_APPEND,
715                 .size           = 2 * (64 * 2048),
716                 .mask_flags     = MTD_WRITEABLE  /* force read-only */
717         },
718         {
719                 .name           = "U-Boot Environment-OneNAND",
720                 .offset         = MTDPART_OFS_APPEND,
721                 .size           = 1 * (64 * 2048),
722         },
723         {
724                 .name           = "Kernel-OneNAND",
725                 .offset         = MTDPART_OFS_APPEND,
726                 .size           = 16 * (64 * 2048),
727         },
728         {
729                 .name           = "File System-OneNAND",
730                 .offset         = MTDPART_OFS_APPEND,
731                 .size           = MTDPART_SIZ_FULL,
732         },
733 };
734
735 static struct mtd_partition sdp_nand_partitions[] = {
736         /* All the partition sizes are listed in terms of NAND block size */
737         {
738                 .name           = "X-Loader-NAND",
739                 .offset         = 0,
740                 .size           = 4 * (64 * 2048),
741                 .mask_flags     = MTD_WRITEABLE,        /* force read-only */
742         },
743         {
744                 .name           = "U-Boot-NAND",
745                 .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x80000 */
746                 .size           = 10 * (64 * 2048),
747                 .mask_flags     = MTD_WRITEABLE,        /* force read-only */
748         },
749         {
750                 .name           = "Boot Env-NAND",
751
752                 .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x1c0000 */
753                 .size           = 6 * (64 * 2048),
754         },
755         {
756                 .name           = "Kernel-NAND",
757                 .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x280000 */
758                 .size           = 40 * (64 * 2048),
759         },
760         {
761                 .name           = "File System - NAND",
762                 .size           = MTDPART_SIZ_FULL,
763                 .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x780000 */
764         },
765 };
766
767 static struct flash_partitions sdp_flash_partitions[] = {
768         {
769                 .parts = sdp_nor_partitions,
770                 .nr_parts = ARRAY_SIZE(sdp_nor_partitions),
771         },
772         {
773                 .parts = sdp_onenand_partitions,
774                 .nr_parts = ARRAY_SIZE(sdp_onenand_partitions),
775         },
776         {
777                 .parts = sdp_nand_partitions,
778                 .nr_parts = ARRAY_SIZE(sdp_nand_partitions),
779         },
780 };
781
782 static struct omap_musb_board_data musb_board_data = {
783         .interface_type         = MUSB_INTERFACE_ULPI,
784         .mode                   = MUSB_OTG,
785         .power                  = 100,
786 };
787
788 static void __init omap_3430sdp_init(void)
789 {
790         omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
791         omap3430_i2c_init();
792         omap_display_init(&sdp3430_dss_data);
793         if (omap_rev() > OMAP3430_REV_ES1_0)
794                 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
795         else
796                 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV1;
797         sdp3430_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
798         spi_register_board_info(sdp3430_spi_board_info,
799                                 ARRAY_SIZE(sdp3430_spi_board_info));
800         ads7846_dev_init();
801         omap_serial_init();
802         usb_musb_init(&musb_board_data);
803         board_smc91x_init();
804         board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
805         sdp3430_display_init();
806         enable_board_wakeup_source();
807         usb_ehci_init(&ehci_pdata);
808 }
809
810 MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
811         /* Maintainer: Syed Khasim - Texas Instruments Inc */
812         .boot_params    = 0x80000100,
813         .reserve        = omap_reserve,
814         .map_io         = omap3_map_io,
815         .init_early     = omap_3430sdp_init_early,
816         .init_irq       = omap_init_irq,
817         .init_machine   = omap_3430sdp_init,
818         .timer          = &omap_timer,
819 MACHINE_END