aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/arm/mach-exynos/Kconfig7
-rw-r--r--arch/arm/mach-exynos/mach-nuri.c3
-rw-r--r--arch/arm/mach-exynos/mach-origen.c39
-rw-r--r--arch/arm/mach-exynos/mach-smdk4x12.c83
-rw-r--r--arch/arm/mach-exynos/mach-smdkv310.c17
-rw-r--r--arch/arm/mach-exynos/mach-universal_c210.c3
-rw-r--r--arch/arm/mach-omap2/Makefile4
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c3
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c89
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c78
-rw-r--r--arch/arm/mach-omap2/board-omap4panda.c3
-rw-r--r--arch/arm/mach-omap2/common-board-devices.c11
-rw-r--r--arch/arm/mach-omap2/common-board-devices.h1
-rw-r--r--arch/arm/mach-omap2/drm.c61
-rw-r--r--arch/arm/mach-s3c64xx/include/mach/crag6410.h4
-rw-r--r--arch/arm/mach-s3c64xx/mach-crag6410-module.c11
-rw-r--r--arch/arm/mach-s3c64xx/mach-crag6410.c69
-rw-r--r--arch/arm/mach-s3c64xx/mach-smdk6410.c1
-rw-r--r--arch/arm/mach-s5pv210/Kconfig2
-rw-r--r--arch/arm/mach-s5pv210/mach-aquila.c7
-rw-r--r--arch/arm/mach-s5pv210/mach-goni.c11
-rw-r--r--arch/arm/mach-s5pv210/mach-smdkv210.c10
-rw-r--r--arch/arm/mach-tegra/Kconfig36
-rw-r--r--arch/arm/mach-tegra/Makefile13
-rw-r--r--arch/arm/mach-tegra/Makefile.boot10
-rw-r--r--arch/arm/mach-tegra/board-dt-tegra20.c74
-rw-r--r--arch/arm/mach-tegra/board-dt-tegra30.c8
-rw-r--r--arch/arm/mach-tegra/board-harmony-pcie.c15
-rw-r--r--arch/arm/mach-tegra/board-harmony-power.c25
-rw-r--r--arch/arm/mach-tegra/board-paz00.c7
-rw-r--r--arch/arm/mach-tegra/board-seaboard-pinmux.c197
-rw-r--r--arch/arm/mach-tegra/board-seaboard.c306
-rw-r--r--arch/arm/mach-tegra/board-seaboard.h47
-rw-r--r--arch/arm/mach-tegra/board.h9
35 files changed, 584 insertions, 681 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index b16396216896..dc3de407ce05 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -683,6 +683,7 @@ config ARCH_TEGRA
683 select MIGHT_HAVE_CACHE_L2X0 683 select MIGHT_HAVE_CACHE_L2X0
684 select NEED_MACH_IO_H if PCI 684 select NEED_MACH_IO_H if PCI
685 select ARCH_HAS_CPUFREQ 685 select ARCH_HAS_CPUFREQ
686 select USE_OF
686 help 687 help
687 This enables support for NVIDIA Tegra based systems (Tegra APX, 688 This enables support for NVIDIA Tegra based systems (Tegra APX,
688 Tegra 6xx and Tegra 2 series). 689 Tegra 6xx and Tegra 2 series).
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 6f6d13f91e4c..b5b4c8c9db11 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -207,6 +207,7 @@ config MACH_SMDKV310
207 select S3C_DEV_HSMMC1 207 select S3C_DEV_HSMMC1
208 select S3C_DEV_HSMMC2 208 select S3C_DEV_HSMMC2
209 select S3C_DEV_HSMMC3 209 select S3C_DEV_HSMMC3
210 select S3C_DEV_USB_HSOTG
210 select SAMSUNG_DEV_BACKLIGHT 211 select SAMSUNG_DEV_BACKLIGHT
211 select EXYNOS_DEV_DRM 212 select EXYNOS_DEV_DRM
212 select EXYNOS_DEV_SYSMMU 213 select EXYNOS_DEV_SYSMMU
@@ -326,6 +327,7 @@ config MACH_ORIGEN
326 select S3C_DEV_WDT 327 select S3C_DEV_WDT
327 select S3C_DEV_HSMMC 328 select S3C_DEV_HSMMC
328 select S3C_DEV_HSMMC2 329 select S3C_DEV_HSMMC2
330 select S3C_DEV_USB_HSOTG
329 select S5P_DEV_FIMC0 331 select S5P_DEV_FIMC0
330 select S5P_DEV_FIMC1 332 select S5P_DEV_FIMC1
331 select S5P_DEV_FIMC2 333 select S5P_DEV_FIMC2
@@ -360,22 +362,27 @@ config MACH_SMDK4212
360 select S3C_DEV_I2C3 362 select S3C_DEV_I2C3
361 select S3C_DEV_I2C7 363 select S3C_DEV_I2C7
362 select S3C_DEV_RTC 364 select S3C_DEV_RTC
365 select S3C_DEV_USB_HSOTG
363 select S3C_DEV_WDT 366 select S3C_DEV_WDT
364 select S5P_DEV_FIMC0 367 select S5P_DEV_FIMC0
365 select S5P_DEV_FIMC1 368 select S5P_DEV_FIMC1
366 select S5P_DEV_FIMC2 369 select S5P_DEV_FIMC2
367 select S5P_DEV_FIMC3 370 select S5P_DEV_FIMC3
371 select S5P_DEV_FIMD0
368 select S5P_DEV_MFC 372 select S5P_DEV_MFC
369 select SAMSUNG_DEV_BACKLIGHT 373 select SAMSUNG_DEV_BACKLIGHT
370 select SAMSUNG_DEV_KEYPAD 374 select SAMSUNG_DEV_KEYPAD
371 select SAMSUNG_DEV_PWM 375 select SAMSUNG_DEV_PWM
372 select EXYNOS_DEV_SYSMMU 376 select EXYNOS_DEV_SYSMMU
373 select EXYNOS_DEV_DMA 377 select EXYNOS_DEV_DMA
378 select EXYNOS_DEV_DRM
379 select EXYNOS4_SETUP_FIMD0
374 select EXYNOS4_SETUP_I2C1 380 select EXYNOS4_SETUP_I2C1
375 select EXYNOS4_SETUP_I2C3 381 select EXYNOS4_SETUP_I2C3
376 select EXYNOS4_SETUP_I2C7 382 select EXYNOS4_SETUP_I2C7
377 select EXYNOS4_SETUP_KEYPAD 383 select EXYNOS4_SETUP_KEYPAD
378 select EXYNOS4_SETUP_SDHCI 384 select EXYNOS4_SETUP_SDHCI
385 select EXYNOS4_SETUP_USB_PHY
379 help 386 help
380 Machine support for Samsung SMDK4212 387 Machine support for Samsung SMDK4212
381 388
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index f3b328d0aff6..f98a83a81ce7 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -1341,9 +1341,8 @@ static struct platform_device *nuri_devices[] __initdata = {
1341 1341
1342static void __init nuri_map_io(void) 1342static void __init nuri_map_io(void)
1343{ 1343{
1344 clk_xusbxti.rate = 24000000;
1345 exynos_init_io(NULL, 0); 1344 exynos_init_io(NULL, 0);
1346 s3c24xx_init_clocks(24000000); 1345 s3c24xx_init_clocks(clk_xusbxti.rate);
1347 s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs)); 1346 s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs));
1348} 1347}
1349 1348
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index 873c708fd340..5a12dc26f496 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -9,6 +9,7 @@
9*/ 9*/
10 10
11#include <linux/serial_core.h> 11#include <linux/serial_core.h>
12#include <linux/leds.h>
12#include <linux/gpio.h> 13#include <linux/gpio.h>
13#include <linux/mmc/host.h> 14#include <linux/mmc/host.h>
14#include <linux/platform_device.h> 15#include <linux/platform_device.h>
@@ -21,6 +22,7 @@
21#include <linux/mfd/max8997.h> 22#include <linux/mfd/max8997.h>
22#include <linux/lcd.h> 23#include <linux/lcd.h>
23#include <linux/rfkill-gpio.h> 24#include <linux/rfkill-gpio.h>
25#include <linux/platform_data/s3c-hsotg.h>
24 26
25#include <asm/mach/arch.h> 27#include <asm/mach/arch.h>
26#include <asm/hardware/gic.h> 28#include <asm/hardware/gic.h>
@@ -498,6 +500,37 @@ static void __init origen_ohci_init(void)
498 exynos4_ohci_set_platdata(pdata); 500 exynos4_ohci_set_platdata(pdata);
499} 501}
500 502
503/* USB OTG */
504static struct s3c_hsotg_plat origen_hsotg_pdata;
505
506static struct gpio_led origen_gpio_leds[] = {
507 {
508 .name = "origen::status1",
509 .default_trigger = "heartbeat",
510 .gpio = EXYNOS4_GPX1(3),
511 .active_low = 1,
512 },
513 {
514 .name = "origen::status2",
515 .default_trigger = "mmc0",
516 .gpio = EXYNOS4_GPX1(4),
517 .active_low = 1,
518 },
519};
520
521static struct gpio_led_platform_data origen_gpio_led_info = {
522 .leds = origen_gpio_leds,
523 .num_leds = ARRAY_SIZE(origen_gpio_leds),
524};
525
526static struct platform_device origen_leds_gpio = {
527 .name = "leds-gpio",
528 .id = -1,
529 .dev = {
530 .platform_data = &origen_gpio_led_info,
531 },
532};
533
501static struct gpio_keys_button origen_gpio_keys_table[] = { 534static struct gpio_keys_button origen_gpio_keys_table[] = {
502 { 535 {
503 .code = KEY_MENU, 536 .code = KEY_MENU,
@@ -654,6 +687,7 @@ static struct platform_device *origen_devices[] __initdata = {
654 &s3c_device_hsmmc0, 687 &s3c_device_hsmmc0,
655 &s3c_device_i2c0, 688 &s3c_device_i2c0,
656 &s3c_device_rtc, 689 &s3c_device_rtc,
690 &s3c_device_usb_hsotg,
657 &s3c_device_wdt, 691 &s3c_device_wdt,
658 &s5p_device_ehci, 692 &s5p_device_ehci,
659 &s5p_device_fimc0, 693 &s5p_device_fimc0,
@@ -676,6 +710,7 @@ static struct platform_device *origen_devices[] __initdata = {
676 &exynos4_device_ohci, 710 &exynos4_device_ohci,
677 &origen_device_gpiokeys, 711 &origen_device_gpiokeys,
678 &origen_lcd_hv070wsa, 712 &origen_lcd_hv070wsa,
713 &origen_leds_gpio,
679 &origen_device_bluetooth, 714 &origen_device_bluetooth,
680}; 715};
681 716
@@ -711,7 +746,7 @@ static void s5p_tv_setup(void)
711static void __init origen_map_io(void) 746static void __init origen_map_io(void)
712{ 747{
713 exynos_init_io(NULL, 0); 748 exynos_init_io(NULL, 0);
714 s3c24xx_init_clocks(24000000); 749 s3c24xx_init_clocks(clk_xusbxti.rate);
715 s3c24xx_init_uarts(origen_uartcfgs, ARRAY_SIZE(origen_uartcfgs)); 750 s3c24xx_init_uarts(origen_uartcfgs, ARRAY_SIZE(origen_uartcfgs));
716} 751}
717 752
@@ -743,7 +778,7 @@ static void __init origen_machine_init(void)
743 778
744 origen_ehci_init(); 779 origen_ehci_init();
745 origen_ohci_init(); 780 origen_ohci_init();
746 clk_xusbxti.rate = 24000000; 781 s3c_hsotg_set_platdata(&origen_hsotg_pdata);
747 782
748 s5p_tv_setup(); 783 s5p_tv_setup();
749 s5p_i2c_hdmiphy_set_platdata(NULL); 784 s5p_i2c_hdmiphy_set_platdata(NULL);
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c
index fb09c70e195a..b26beb13ebef 100644
--- a/arch/arm/mach-exynos/mach-smdk4x12.c
+++ b/arch/arm/mach-exynos/mach-smdk4x12.c
@@ -13,12 +13,14 @@
13#include <linux/i2c.h> 13#include <linux/i2c.h>
14#include <linux/input.h> 14#include <linux/input.h>
15#include <linux/io.h> 15#include <linux/io.h>
16#include <linux/lcd.h>
16#include <linux/mfd/max8997.h> 17#include <linux/mfd/max8997.h>
17#include <linux/mmc/host.h> 18#include <linux/mmc/host.h>
18#include <linux/platform_device.h> 19#include <linux/platform_device.h>
19#include <linux/pwm_backlight.h> 20#include <linux/pwm_backlight.h>
20#include <linux/regulator/machine.h> 21#include <linux/regulator/machine.h>
21#include <linux/serial_core.h> 22#include <linux/serial_core.h>
23#include <linux/platform_data/s3c-hsotg.h>
22 24
23#include <asm/mach/arch.h> 25#include <asm/mach/arch.h>
24#include <asm/hardware/gic.h> 26#include <asm/hardware/gic.h>
@@ -28,15 +30,18 @@
28#include <plat/clock.h> 30#include <plat/clock.h>
29#include <plat/cpu.h> 31#include <plat/cpu.h>
30#include <plat/devs.h> 32#include <plat/devs.h>
33#include <plat/fb.h>
31#include <plat/gpio-cfg.h> 34#include <plat/gpio-cfg.h>
32#include <plat/iic.h> 35#include <plat/iic.h>
33#include <plat/keypad.h> 36#include <plat/keypad.h>
34#include <plat/mfc.h> 37#include <plat/mfc.h>
38#include <plat/regs-fb.h>
35#include <plat/regs-serial.h> 39#include <plat/regs-serial.h>
36#include <plat/sdhci.h> 40#include <plat/sdhci.h>
37 41
38#include <mach/map.h> 42#include <mach/map.h>
39 43
44#include <drm/exynos_drm.h>
40#include "common.h" 45#include "common.h"
41 46
42/* Following are default values for UCON, ULCON and UFCON UART registers */ 47/* Following are default values for UCON, ULCON and UFCON UART registers */
@@ -219,8 +224,10 @@ static struct platform_pwm_backlight_data smdk4x12_bl_data = {
219 224
220static uint32_t smdk4x12_keymap[] __initdata = { 225static uint32_t smdk4x12_keymap[] __initdata = {
221 /* KEY(row, col, keycode) */ 226 /* KEY(row, col, keycode) */
222 KEY(1, 0, KEY_D), KEY(1, 1, KEY_A), KEY(1, 2, KEY_B), 227 KEY(1, 3, KEY_1), KEY(1, 4, KEY_2), KEY(1, 5, KEY_3),
223 KEY(1, 3, KEY_E), KEY(1, 4, KEY_C) 228 KEY(1, 6, KEY_4), KEY(1, 7, KEY_5),
229 KEY(2, 5, KEY_D), KEY(2, 6, KEY_A), KEY(2, 7, KEY_B),
230 KEY(0, 7, KEY_E), KEY(0, 5, KEY_C)
224}; 231};
225 232
226static struct matrix_keymap_data smdk4x12_keymap_data __initdata = { 233static struct matrix_keymap_data smdk4x12_keymap_data __initdata = {
@@ -230,10 +237,62 @@ static struct matrix_keymap_data smdk4x12_keymap_data __initdata = {
230 237
231static struct samsung_keypad_platdata smdk4x12_keypad_data __initdata = { 238static struct samsung_keypad_platdata smdk4x12_keypad_data __initdata = {
232 .keymap_data = &smdk4x12_keymap_data, 239 .keymap_data = &smdk4x12_keymap_data,
233 .rows = 2, 240 .rows = 3,
234 .cols = 5, 241 .cols = 8,
235}; 242};
236 243
244#ifdef CONFIG_DRM_EXYNOS
245static struct exynos_drm_fimd_pdata drm_fimd_pdata = {
246 .panel = {
247 .timing = {
248 .left_margin = 8,
249 .right_margin = 8,
250 .upper_margin = 6,
251 .lower_margin = 6,
252 .hsync_len = 6,
253 .vsync_len = 4,
254 .xres = 480,
255 .yres = 800,
256 },
257 },
258 .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
259 .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
260 .default_win = 0,
261 .bpp = 32,
262};
263#else
264static struct s3c_fb_pd_win smdk4x12_fb_win0 = {
265 .xres = 480,
266 .yres = 800,
267 .virtual_x = 480,
268 .virtual_y = 800 * 2,
269 .max_bpp = 32,
270 .default_bpp = 24,
271};
272
273static struct fb_videomode smdk4x12_lcd_timing = {
274 .left_margin = 8,
275 .right_margin = 8,
276 .upper_margin = 6,
277 .lower_margin = 6,
278 .hsync_len = 6,
279 .vsync_len = 4,
280 .xres = 480,
281 .yres = 800,
282};
283
284static struct s3c_fb_platdata smdk4x12_lcd_pdata __initdata = {
285 .win[0] = &smdk4x12_fb_win0,
286 .vtiming = &smdk4x12_lcd_timing,
287 .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
288 .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
289 .setup_gpio = exynos4_fimd0_gpio_setup_24bpp,
290};
291#endif
292
293/* USB OTG */
294static struct s3c_hsotg_plat smdk4x12_hsotg_pdata;
295
237static struct platform_device *smdk4x12_devices[] __initdata = { 296static struct platform_device *smdk4x12_devices[] __initdata = {
238 &s3c_device_hsmmc2, 297 &s3c_device_hsmmc2,
239 &s3c_device_hsmmc3, 298 &s3c_device_hsmmc3,
@@ -242,22 +301,25 @@ static struct platform_device *smdk4x12_devices[] __initdata = {
242 &s3c_device_i2c3, 301 &s3c_device_i2c3,
243 &s3c_device_i2c7, 302 &s3c_device_i2c7,
244 &s3c_device_rtc, 303 &s3c_device_rtc,
304 &s3c_device_usb_hsotg,
245 &s3c_device_wdt, 305 &s3c_device_wdt,
246 &s5p_device_fimc0, 306 &s5p_device_fimc0,
247 &s5p_device_fimc1, 307 &s5p_device_fimc1,
248 &s5p_device_fimc2, 308 &s5p_device_fimc2,
249 &s5p_device_fimc3, 309 &s5p_device_fimc3,
250 &s5p_device_fimc_md, 310 &s5p_device_fimc_md,
311 &s5p_device_fimd0,
251 &s5p_device_mfc, 312 &s5p_device_mfc,
252 &s5p_device_mfc_l, 313 &s5p_device_mfc_l,
253 &s5p_device_mfc_r, 314 &s5p_device_mfc_r,
315#ifdef CONFIG_DRM_EXYNOS
316 &exynos_device_drm,
317#endif
254 &samsung_device_keypad, 318 &samsung_device_keypad,
255}; 319};
256 320
257static void __init smdk4x12_map_io(void) 321static void __init smdk4x12_map_io(void)
258{ 322{
259 clk_xusbxti.rate = 24000000;
260
261 exynos_init_io(NULL, 0); 323 exynos_init_io(NULL, 0);
262 s3c24xx_init_clocks(clk_xusbxti.rate); 324 s3c24xx_init_clocks(clk_xusbxti.rate);
263 s3c24xx_init_uarts(smdk4x12_uartcfgs, ARRAY_SIZE(smdk4x12_uartcfgs)); 325 s3c24xx_init_uarts(smdk4x12_uartcfgs, ARRAY_SIZE(smdk4x12_uartcfgs));
@@ -293,6 +355,15 @@ static void __init smdk4x12_machine_init(void)
293 s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata); 355 s3c_sdhci2_set_platdata(&smdk4x12_hsmmc2_pdata);
294 s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata); 356 s3c_sdhci3_set_platdata(&smdk4x12_hsmmc3_pdata);
295 357
358 s3c_hsotg_set_platdata(&smdk4x12_hsotg_pdata);
359
360#ifdef CONFIG_DRM_EXYNOS
361 s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata;
362 exynos4_fimd0_gpio_setup_24bpp();
363#else
364 s5p_fimd0_set_platdata(&smdk4x12_lcd_pdata);
365#endif
366
296 platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices)); 367 platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));
297} 368}
298 369
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c
index 5fb209c4a594..3cfa688d274a 100644
--- a/arch/arm/mach-exynos/mach-smdkv310.c
+++ b/arch/arm/mach-exynos/mach-smdkv310.c
@@ -19,6 +19,7 @@
19#include <linux/i2c.h> 19#include <linux/i2c.h>
20#include <linux/input.h> 20#include <linux/input.h>
21#include <linux/pwm_backlight.h> 21#include <linux/pwm_backlight.h>
22#include <linux/platform_data/s3c-hsotg.h>
22 23
23#include <asm/mach/arch.h> 24#include <asm/mach/arch.h>
24#include <asm/hardware/gic.h> 25#include <asm/hardware/gic.h>
@@ -270,6 +271,15 @@ static void __init smdkv310_ohci_init(void)
270 exynos4_ohci_set_platdata(pdata); 271 exynos4_ohci_set_platdata(pdata);
271} 272}
272 273
274/* USB OTG */
275static struct s3c_hsotg_plat smdkv310_hsotg_pdata;
276
277/* Audio device */
278static struct platform_device smdkv310_device_audio = {
279 .name = "smdk-audio",
280 .id = -1,
281};
282
273static struct platform_device *smdkv310_devices[] __initdata = { 283static struct platform_device *smdkv310_devices[] __initdata = {
274 &s3c_device_hsmmc0, 284 &s3c_device_hsmmc0,
275 &s3c_device_hsmmc1, 285 &s3c_device_hsmmc1,
@@ -278,6 +288,7 @@ static struct platform_device *smdkv310_devices[] __initdata = {
278 &s3c_device_i2c1, 288 &s3c_device_i2c1,
279 &s5p_device_i2c_hdmiphy, 289 &s5p_device_i2c_hdmiphy,
280 &s3c_device_rtc, 290 &s3c_device_rtc,
291 &s3c_device_usb_hsotg,
281 &s3c_device_wdt, 292 &s3c_device_wdt,
282 &s5p_device_ehci, 293 &s5p_device_ehci,
283 &s5p_device_fimc0, 294 &s5p_device_fimc0,
@@ -301,6 +312,7 @@ static struct platform_device *smdkv310_devices[] __initdata = {
301 &samsung_asoc_dma, 312 &samsung_asoc_dma,
302 &samsung_asoc_idma, 313 &samsung_asoc_idma,
303 &s5p_device_fimd0, 314 &s5p_device_fimd0,
315 &smdkv310_device_audio,
304 &smdkv310_lcd_lte480wv, 316 &smdkv310_lcd_lte480wv,
305 &smdkv310_smsc911x, 317 &smdkv310_smsc911x,
306 &exynos4_device_ahci, 318 &exynos4_device_ahci,
@@ -353,7 +365,7 @@ static void s5p_tv_setup(void)
353static void __init smdkv310_map_io(void) 365static void __init smdkv310_map_io(void)
354{ 366{
355 exynos_init_io(NULL, 0); 367 exynos_init_io(NULL, 0);
356 s3c24xx_init_clocks(24000000); 368 s3c24xx_init_clocks(clk_xusbxti.rate);
357 s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs)); 369 s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs));
358} 370}
359 371
@@ -389,7 +401,7 @@ static void __init smdkv310_machine_init(void)
389 401
390 smdkv310_ehci_init(); 402 smdkv310_ehci_init();
391 smdkv310_ohci_init(); 403 smdkv310_ohci_init();
392 clk_xusbxti.rate = 24000000; 404 s3c_hsotg_set_platdata(&smdkv310_hsotg_pdata);
393 405
394 platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices)); 406 platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices));
395} 407}
@@ -416,5 +428,6 @@ MACHINE_START(SMDKC210, "SMDKC210")
416 .init_machine = smdkv310_machine_init, 428 .init_machine = smdkv310_machine_init,
417 .init_late = exynos_init_late, 429 .init_late = exynos_init_late,
418 .timer = &exynos4_timer, 430 .timer = &exynos4_timer,
431 .reserve = &smdkv310_reserve,
419 .restart = exynos4_restart, 432 .restart = exynos4_restart,
420MACHINE_END 433MACHINE_END
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
index 68719f57dcea..4d1f40d44ed1 100644
--- a/arch/arm/mach-exynos/mach-universal_c210.c
+++ b/arch/arm/mach-exynos/mach-universal_c210.c
@@ -1099,9 +1099,8 @@ static struct platform_device *universal_devices[] __initdata = {
1099 1099
1100static void __init universal_map_io(void) 1100static void __init universal_map_io(void)
1101{ 1101{
1102 clk_xusbxti.rate = 24000000;
1103 exynos_init_io(NULL, 0); 1102 exynos_init_io(NULL, 0);
1104 s3c24xx_init_clocks(24000000); 1103 s3c24xx_init_clocks(clk_xusbxti.rate);
1105 s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); 1104 s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
1106 s5p_set_timer_source(S5P_PWM2, S5P_PWM4); 1105 s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
1107} 1106}
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index b779ddd86faf..19b771d0c0d7 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -217,6 +217,10 @@ endif
217# OMAP2420 MSDI controller integration support ("MMC") 217# OMAP2420 MSDI controller integration support ("MMC")
218obj-$(CONFIG_SOC_OMAP2420) += msdi.o 218obj-$(CONFIG_SOC_OMAP2420) += msdi.o
219 219
220ifneq ($(CONFIG_DRM_OMAP),)
221obj-y += drm.o
222endif
223
220# Specific board support 224# Specific board support
221obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o 225obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o
222obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o 226obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 8e17284a803f..ad8a7d94afcd 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -821,6 +821,9 @@ static void __init omap_4430sdp_display_init(void)
821#ifdef CONFIG_OMAP_MUX 821#ifdef CONFIG_OMAP_MUX
822static struct omap_board_mux board_mux[] __initdata = { 822static struct omap_board_mux board_mux[] __initdata = {
823 OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), 823 OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
824 /* NIRQ2 for twl6040 */
825 OMAP4_MUX(SYS_NIRQ2, OMAP_MUX_MODE0 |
826 OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE),
824 { .reg_offset = OMAP_MUX_TERMINATOR }, 827 { .reg_offset = OMAP_MUX_TERMINATOR },
825}; 828};
826 829
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index ded100c80a91..97d719047af3 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -490,6 +490,71 @@ static struct twl4030_platform_data cm_t35_twldata = {
490 .power = &cm_t35_power_data, 490 .power = &cm_t35_power_data,
491}; 491};
492 492
493#if defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
494#include <media/omap3isp.h>
495#include "devices.h"
496
497static struct i2c_board_info cm_t35_isp_i2c_boardinfo[] = {
498 {
499 I2C_BOARD_INFO("mt9t001", 0x5d),
500 },
501 {
502 I2C_BOARD_INFO("tvp5150", 0x5c),
503 },
504};
505
506static struct isp_subdev_i2c_board_info cm_t35_isp_primary_subdevs[] = {
507 {
508 .board_info = &cm_t35_isp_i2c_boardinfo[0],
509 .i2c_adapter_id = 3,
510 },
511 { NULL, 0, },
512};
513
514static struct isp_subdev_i2c_board_info cm_t35_isp_secondary_subdevs[] = {
515 {
516 .board_info = &cm_t35_isp_i2c_boardinfo[1],
517 .i2c_adapter_id = 3,
518 },
519 { NULL, 0, },
520};
521
522static struct isp_v4l2_subdevs_group cm_t35_isp_subdevs[] = {
523 {
524 .subdevs = cm_t35_isp_primary_subdevs,
525 .interface = ISP_INTERFACE_PARALLEL,
526 .bus = {
527 .parallel = {
528 .clk_pol = 1,
529 },
530 },
531 },
532 {
533 .subdevs = cm_t35_isp_secondary_subdevs,
534 .interface = ISP_INTERFACE_PARALLEL,
535 .bus = {
536 .parallel = {
537 .clk_pol = 0,
538 },
539 },
540 },
541 { NULL, 0, },
542};
543
544static struct isp_platform_data cm_t35_isp_pdata = {
545 .subdevs = cm_t35_isp_subdevs,
546};
547
548static void __init cm_t35_init_camera(void)
549{
550 if (omap3_init_camera(&cm_t35_isp_pdata) < 0)
551 pr_warn("CM-T3x: Failed registering camera device!\n");
552}
553
554#else
555static inline void cm_t35_init_camera(void) {}
556#endif /* CONFIG_VIDEO_OMAP3 */
557
493static void __init cm_t35_init_i2c(void) 558static void __init cm_t35_init_i2c(void)
494{ 559{
495 omap3_pmic_get_config(&cm_t35_twldata, TWL_COMMON_PDATA_USB, 560 omap3_pmic_get_config(&cm_t35_twldata, TWL_COMMON_PDATA_USB,
@@ -497,6 +562,8 @@ static void __init cm_t35_init_i2c(void)
497 TWL_COMMON_PDATA_AUDIO); 562 TWL_COMMON_PDATA_AUDIO);
498 563
499 omap3_pmic_init("tps65930", &cm_t35_twldata); 564 omap3_pmic_init("tps65930", &cm_t35_twldata);
565
566 omap_register_i2c_bus(3, 400, NULL, 0);
500} 567}
501 568
502#ifdef CONFIG_OMAP_MUX 569#ifdef CONFIG_OMAP_MUX
@@ -574,6 +641,27 @@ static struct omap_board_mux board_mux[] __initdata = {
574 OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 641 OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
575 OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 642 OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
576 643
644 /* Camera */
645 OMAP3_MUX(CAM_HS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
646 OMAP3_MUX(CAM_VS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
647 OMAP3_MUX(CAM_XCLKA, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
648 OMAP3_MUX(CAM_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
649 OMAP3_MUX(CAM_FLD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
650 OMAP3_MUX(CAM_D0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
651 OMAP3_MUX(CAM_D1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
652 OMAP3_MUX(CAM_D2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
653 OMAP3_MUX(CAM_D3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
654 OMAP3_MUX(CAM_D4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
655 OMAP3_MUX(CAM_D5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
656 OMAP3_MUX(CAM_D6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
657 OMAP3_MUX(CAM_D7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
658 OMAP3_MUX(CAM_D8, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
659 OMAP3_MUX(CAM_D9, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
660 OMAP3_MUX(CAM_STROBE, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
661
662 OMAP3_MUX(CAM_D10, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),
663 OMAP3_MUX(CAM_D11, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),
664
577 /* display controls */ 665 /* display controls */
578 OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), 666 OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
579 OMAP3_MUX(GPMC_NCS7, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), 667 OMAP3_MUX(GPMC_NCS7, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
@@ -646,6 +734,7 @@ static void __init cm_t3x_common_init(void)
646 734
647 usb_musb_init(NULL); 735 usb_musb_init(NULL);
648 cm_t35_init_usbh(); 736 cm_t35_init_usbh();
737 cm_t35_init_camera();
649} 738}
650 739
651static void __init cm_t35_init(void) 740static void __init cm_t35_init(void)
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 639bd07ea38a..ef230a0eb5eb 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -24,6 +24,10 @@
24#include <linux/leds.h> 24#include <linux/leds.h>
25#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26 26
27#include <linux/mtd/mtd.h>
28#include <linux/mtd/partitions.h>
29#include <linux/mtd/nand.h>
30
27#include <linux/spi/spi.h> 31#include <linux/spi/spi.h>
28#include <linux/spi/ads7846.h> 32#include <linux/spi/ads7846.h>
29#include <linux/i2c/twl.h> 33#include <linux/i2c/twl.h>
@@ -43,6 +47,7 @@
43 47
44#include <plat/board.h> 48#include <plat/board.h>
45#include <plat/usb.h> 49#include <plat/usb.h>
50#include <plat/nand.h>
46#include "common.h" 51#include "common.h"
47#include <plat/mcspi.h> 52#include <plat/mcspi.h>
48#include <video/omapdss.h> 53#include <video/omapdss.h>
@@ -53,7 +58,6 @@
53#include "hsmmc.h" 58#include "hsmmc.h"
54#include "common-board-devices.h" 59#include "common-board-devices.h"
55 60
56#define OMAP3_EVM_TS_GPIO 175
57#define OMAP3_EVM_EHCI_VBUS 22 61#define OMAP3_EVM_EHCI_VBUS 22
58#define OMAP3_EVM_EHCI_SELECT 61 62#define OMAP3_EVM_EHCI_SELECT 61
59 63
@@ -355,6 +359,19 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
355 359
356 platform_device_register(&leds_gpio); 360 platform_device_register(&leds_gpio);
357 361
362 /* Enable VBUS switch by setting TWL4030.GPIO2DIR as output
363 * for starting USB tranceiver
364 */
365#ifdef CONFIG_TWL4030_CORE
366 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
367 u8 val;
368
369 twl_i2c_read_u8(TWL4030_MODULE_GPIO, &val, REG_GPIODATADIR1);
370 val |= 0x04; /* TWL4030.GPIO2DIR BIT at GPIODATADIR1(0x9B) */
371 twl_i2c_write_u8(TWL4030_MODULE_GPIO, val, REG_GPIODATADIR1);
372 }
373#endif
374
358 return 0; 375 return 0;
359} 376}
360 377
@@ -461,6 +478,28 @@ struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
461}; 478};
462#endif 479#endif
463 480
481/* VAUX2 for USB */
482static struct regulator_consumer_supply omap3evm_vaux2_supplies[] = {
483 REGULATOR_SUPPLY("VDD_CSIPHY1", "omap3isp"), /* OMAP ISP */
484 REGULATOR_SUPPLY("VDD_CSIPHY2", "omap3isp"), /* OMAP ISP */
485 REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"),
486 REGULATOR_SUPPLY("vaux2", NULL),
487};
488
489static struct regulator_init_data omap3evm_vaux2 = {
490 .constraints = {
491 .min_uV = 2800000,
492 .max_uV = 2800000,
493 .apply_uV = true,
494 .valid_modes_mask = REGULATOR_MODE_NORMAL
495 | REGULATOR_MODE_STANDBY,
496 .valid_ops_mask = REGULATOR_CHANGE_MODE
497 | REGULATOR_CHANGE_STATUS,
498 },
499 .num_consumer_supplies = ARRAY_SIZE(omap3evm_vaux2_supplies),
500 .consumer_supplies = omap3evm_vaux2_supplies,
501};
502
464static struct twl4030_platform_data omap3evm_twldata = { 503static struct twl4030_platform_data omap3evm_twldata = {
465 /* platform_data for children goes here */ 504 /* platform_data for children goes here */
466 .keypad = &omap3evm_kp_data, 505 .keypad = &omap3evm_kp_data,
@@ -607,6 +646,37 @@ static struct regulator_consumer_supply dummy_supplies[] = {
607 REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), 646 REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
608}; 647};
609 648
649static struct mtd_partition omap3evm_nand_partitions[] = {
650 /* All the partition sizes are listed in terms of NAND block size */
651 {
652 .name = "X-Loader",
653 .offset = 0,
654 .size = 4*(SZ_128K),
655 .mask_flags = MTD_WRITEABLE
656 },
657 {
658 .name = "U-Boot",
659 .offset = MTDPART_OFS_APPEND,
660 .size = 14*(SZ_128K),
661 .mask_flags = MTD_WRITEABLE
662 },
663 {
664 .name = "U-Boot Env",
665 .offset = MTDPART_OFS_APPEND,
666 .size = 2*(SZ_128K)
667 },
668 {
669 .name = "Kernel",
670 .offset = MTDPART_OFS_APPEND,
671 .size = 40*(SZ_128K)
672 },
673 {
674 .name = "File system",
675 .size = MTDPART_SIZ_FULL,
676 .offset = MTDPART_OFS_APPEND,
677 },
678};
679
610static void __init omap3_evm_init(void) 680static void __init omap3_evm_init(void)
611{ 681{
612 struct omap_board_mux *obm; 682 struct omap_board_mux *obm;
@@ -623,6 +693,9 @@ static void __init omap3_evm_init(void)
623 omap_mux_init_gpio(63, OMAP_PIN_INPUT); 693 omap_mux_init_gpio(63, OMAP_PIN_INPUT);
624 omap_hsmmc_init(mmc); 694 omap_hsmmc_init(mmc);
625 695
696 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
697 omap3evm_twldata.vaux2 = &omap3evm_vaux2;
698
626 omap3_evm_i2c_init(); 699 omap3_evm_i2c_init();
627 700
628 omap_display_init(&omap3_evm_dss_data); 701 omap_display_init(&omap3_evm_dss_data);
@@ -656,6 +729,9 @@ static void __init omap3_evm_init(void)
656 } 729 }
657 usb_musb_init(&musb_board_data); 730 usb_musb_init(&musb_board_data);
658 usbhs_init(&usbhs_bdata); 731 usbhs_init(&usbhs_bdata);
732 omap_nand_flash_init(NAND_BUSWIDTH_16, omap3evm_nand_partitions,
733 ARRAY_SIZE(omap3evm_nand_partitions));
734
659 omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL); 735 omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL);
660 omap3evm_init_smsc911x(); 736 omap3evm_init_smsc911x();
661 omap3_evm_display_init(); 737 omap3_evm_display_init();
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 982fb2622ab8..b627cdc12b84 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -379,6 +379,9 @@ static struct omap_board_mux board_mux[] __initdata = {
379 OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), 379 OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
380 /* dispc2_data0 */ 380 /* dispc2_data0 */
381 OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), 381 OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
382 /* NIRQ2 for twl6040 */
383 OMAP4_MUX(SYS_NIRQ2, OMAP_MUX_MODE0 |
384 OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE),
382 { .reg_offset = OMAP_MUX_TERMINATOR }, 385 { .reg_offset = OMAP_MUX_TERMINATOR },
383}; 386};
384 387
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
index c1875862679f..14734746457c 100644
--- a/arch/arm/mach-omap2/common-board-devices.c
+++ b/arch/arm/mach-omap2/common-board-devices.c
@@ -35,6 +35,16 @@ static struct omap2_mcspi_device_config ads7846_mcspi_config = {
35 .turbo_mode = 0, 35 .turbo_mode = 0,
36}; 36};
37 37
38/*
39 * ADS7846 driver maybe request a gpio according to the value
40 * of pdata->get_pendown_state, but we have done this. So set
41 * get_pendown_state to avoid twice gpio requesting.
42 */
43static int omap3_get_pendown_state(void)
44{
45 return !gpio_get_value(OMAP3_EVM_TS_GPIO);
46}
47
38static struct ads7846_platform_data ads7846_config = { 48static struct ads7846_platform_data ads7846_config = {
39 .x_max = 0x0fff, 49 .x_max = 0x0fff,
40 .y_max = 0x0fff, 50 .y_max = 0x0fff,
@@ -45,6 +55,7 @@ static struct ads7846_platform_data ads7846_config = {
45 .debounce_rep = 1, 55 .debounce_rep = 1,
46 .gpio_pendown = -EINVAL, 56 .gpio_pendown = -EINVAL,
47 .keep_vref_on = 1, 57 .keep_vref_on = 1,
58 .get_pendown_state = &omap3_get_pendown_state,
48}; 59};
49 60
50static struct spi_board_info ads7846_spi_board_info __initdata = { 61static struct spi_board_info ads7846_spi_board_info __initdata = {
diff --git a/arch/arm/mach-omap2/common-board-devices.h b/arch/arm/mach-omap2/common-board-devices.h
index a0b4a42836ab..4c4ef6a6166b 100644
--- a/arch/arm/mach-omap2/common-board-devices.h
+++ b/arch/arm/mach-omap2/common-board-devices.h
@@ -4,6 +4,7 @@
4#include "twl-common.h" 4#include "twl-common.h"
5 5
6#define NAND_BLOCK_SIZE SZ_128K 6#define NAND_BLOCK_SIZE SZ_128K
7#define OMAP3_EVM_TS_GPIO 175
7 8
8struct mtd_partition; 9struct mtd_partition;
9struct ads7846_platform_data; 10struct ads7846_platform_data;
diff --git a/arch/arm/mach-omap2/drm.c b/arch/arm/mach-omap2/drm.c
new file mode 100644
index 000000000000..72e0f01b715c
--- /dev/null
+++ b/arch/arm/mach-omap2/drm.c
@@ -0,0 +1,61 @@
1/*
2 * DRM/KMS device registration for TI OMAP platforms
3 *
4 * Copyright (C) 2012 Texas Instruments
5 * Author: Rob Clark <rob.clark@linaro.org>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published by
9 * the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <linux/module.h>
21#include <linux/kernel.h>
22#include <linux/mm.h>
23#include <linux/init.h>
24#include <linux/platform_device.h>
25#include <linux/dma-mapping.h>
26
27#include <plat/omap_device.h>
28#include <plat/omap_hwmod.h>
29
30#if defined(CONFIG_DRM_OMAP) || (CONFIG_DRM_OMAP_MODULE)
31
32static struct platform_device omap_drm_device = {
33 .dev = {
34 .coherent_dma_mask = DMA_BIT_MASK(32),
35 },
36 .name = "omapdrm",
37 .id = 0,
38};
39
40static int __init omap_init_drm(void)
41{
42 struct omap_hwmod *oh = NULL;
43 struct platform_device *pdev;
44
45 /* lookup and populate the DMM information, if present - OMAP4+ */
46 oh = omap_hwmod_lookup("dmm");
47
48 if (oh) {
49 pdev = omap_device_build(oh->name, -1, oh, NULL, 0, NULL, 0,
50 false);
51 WARN(IS_ERR(pdev), "Could not build omap_device for %s\n",
52 oh->name);
53 }
54
55 return platform_device_register(&omap_drm_device);
56
57}
58
59arch_initcall(omap_init_drm);
60
61#endif
diff --git a/arch/arm/mach-s3c64xx/include/mach/crag6410.h b/arch/arm/mach-s3c64xx/include/mach/crag6410.h
index 4cb2f951f1e9..4c3c9994fc2c 100644
--- a/arch/arm/mach-s3c64xx/include/mach/crag6410.h
+++ b/arch/arm/mach-s3c64xx/include/mach/crag6410.h
@@ -13,9 +13,7 @@
13 13
14#include <linux/gpio.h> 14#include <linux/gpio.h>
15 15
16#define BANFF_PMIC_IRQ_BASE IRQ_BOARD_START 16#define GLENFARCLAS_PMIC_IRQ_BASE IRQ_BOARD_START
17#define GLENFARCLAS_PMIC_IRQ_BASE (IRQ_BOARD_START + 64)
18#define CODEC_IRQ_BASE (IRQ_BOARD_START + 128)
19 17
20#define PCA935X_GPIO_BASE GPIO_BOARD_START 18#define PCA935X_GPIO_BASE GPIO_BOARD_START
21#define CODEC_GPIO_BASE (GPIO_BOARD_START + 8) 19#define CODEC_GPIO_BASE (GPIO_BOARD_START + 8)
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
index 7a27f5603c74..9e382e7c77cb 100644
--- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c
+++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
@@ -29,7 +29,6 @@
29#include <mach/crag6410.h> 29#include <mach/crag6410.h>
30 30
31static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = { 31static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = {
32 .set_level = gpio_set_value,
33 .line = S3C64XX_GPC(3), 32 .line = S3C64XX_GPC(3),
34}; 33};
35 34
@@ -39,6 +38,7 @@ static struct spi_board_info wm1253_devs[] = {
39 .bus_num = 0, 38 .bus_num = 0,
40 .chip_select = 0, 39 .chip_select = 0,
41 .mode = SPI_MODE_0, 40 .mode = SPI_MODE_0,
41 .irq = S3C_EINT(5),
42 .controller_data = &wm0010_spi_csinfo, 42 .controller_data = &wm0010_spi_csinfo,
43 }, 43 },
44}; 44};
@@ -168,7 +168,6 @@ static struct wm8994_pdata wm8994_pdata = {
168 .gpio_defaults = { 168 .gpio_defaults = {
169 0x3, /* IRQ out, active high, CMOS */ 169 0x3, /* IRQ out, active high, CMOS */
170 }, 170 },
171 .irq_base = CODEC_IRQ_BASE,
172 .ldo = { 171 .ldo = {
173 { .init_data = &wm8994_ldo1, }, 172 { .init_data = &wm8994_ldo1, },
174 { .init_data = &wm8994_ldo2, }, 173 { .init_data = &wm8994_ldo2, },
@@ -182,6 +181,11 @@ static const struct i2c_board_info wm1277_devs[] = {
182 }, 181 },
183}; 182};
184 183
184static const struct i2c_board_info wm5102_devs[] = {
185 { I2C_BOARD_INFO("wm5102", 0x1a),
186 .irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2, },
187};
188
185static const struct i2c_board_info wm6230_i2c_devs[] = { 189static const struct i2c_board_info wm6230_i2c_devs[] = {
186 { I2C_BOARD_INFO("wm9081", 0x6c), 190 { I2C_BOARD_INFO("wm9081", 0x6c),
187 .platform_data = &wm9081_pdata, }, 191 .platform_data = &wm9081_pdata, },
@@ -209,6 +213,7 @@ static __devinitdata const struct {
209 .spi_devs = wm1253_devs, .num_spi_devs = ARRAY_SIZE(wm1253_devs) }, 213 .spi_devs = wm1253_devs, .num_spi_devs = ARRAY_SIZE(wm1253_devs) },
210 { .id = 0x32, .name = "XXXX-EV1 Caol Illa" }, 214 { .id = 0x32, .name = "XXXX-EV1 Caol Illa" },
211 { .id = 0x33, .name = "XXXX-EV1 Oban" }, 215 { .id = 0x33, .name = "XXXX-EV1 Oban" },
216 { .id = 0x34, .name = "WM0010-6320-CS42 Balblair" },
212 { .id = 0x39, .name = "1254-EV1 Dallas Dhu", 217 { .id = 0x39, .name = "1254-EV1 Dallas Dhu",
213 .i2c_devs = wm1254_devs, .num_i2c_devs = ARRAY_SIZE(wm1254_devs) }, 218 .i2c_devs = wm1254_devs, .num_i2c_devs = ARRAY_SIZE(wm1254_devs) },
214 { .id = 0x3a, .name = "1259-EV1 Tobermory", 219 { .id = 0x3a, .name = "1259-EV1 Tobermory",
@@ -218,6 +223,8 @@ static __devinitdata const struct {
218 { .id = 0x3c, .name = "1273-EV1 Longmorn" }, 223 { .id = 0x3c, .name = "1273-EV1 Longmorn" },
219 { .id = 0x3d, .name = "1277-EV1 Littlemill", 224 { .id = 0x3d, .name = "1277-EV1 Littlemill",
220 .i2c_devs = wm1277_devs, .num_i2c_devs = ARRAY_SIZE(wm1277_devs) }, 225 .i2c_devs = wm1277_devs, .num_i2c_devs = ARRAY_SIZE(wm1277_devs) },
226 { .id = 0x3e, .name = "WM5102-6271-EV1-CS127",
227 .i2c_devs = wm5102_devs, .num_i2c_devs = ARRAY_SIZE(wm5102_devs) },
221}; 228};
222 229
223static __devinit int wlf_gf_module_probe(struct i2c_client *i2c, 230static __devinit int wlf_gf_module_probe(struct i2c_client *i2c,
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c
index 6dd4fae33a82..09cd81207a3f 100644
--- a/arch/arm/mach-s3c64xx/mach-crag6410.c
+++ b/arch/arm/mach-s3c64xx/mach-crag6410.c
@@ -171,7 +171,7 @@ static struct fb_videomode crag6410_lcd_timing = {
171}; 171};
172 172
173/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */ 173/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
174static struct s3c_fb_platdata crag6410_lcd_pdata __initdata = { 174static struct s3c_fb_platdata crag6410_lcd_pdata __devinitdata = {
175 .setup_gpio = s3c64xx_fb_gpio_setup_24bpp, 175 .setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
176 .vtiming = &crag6410_lcd_timing, 176 .vtiming = &crag6410_lcd_timing,
177 .win[0] = &crag6410_fb_win0, 177 .win[0] = &crag6410_fb_win0,
@@ -181,7 +181,7 @@ static struct s3c_fb_platdata crag6410_lcd_pdata __initdata = {
181 181
182/* 2x6 keypad */ 182/* 2x6 keypad */
183 183
184static uint32_t crag6410_keymap[] __initdata = { 184static uint32_t crag6410_keymap[] __devinitdata = {
185 /* KEY(row, col, keycode) */ 185 /* KEY(row, col, keycode) */
186 KEY(0, 0, KEY_VOLUMEUP), 186 KEY(0, 0, KEY_VOLUMEUP),
187 KEY(0, 1, KEY_HOME), 187 KEY(0, 1, KEY_HOME),
@@ -197,12 +197,12 @@ static uint32_t crag6410_keymap[] __initdata = {
197 KEY(1, 5, KEY_CAMERA), 197 KEY(1, 5, KEY_CAMERA),
198}; 198};
199 199
200static struct matrix_keymap_data crag6410_keymap_data __initdata = { 200static struct matrix_keymap_data crag6410_keymap_data __devinitdata = {
201 .keymap = crag6410_keymap, 201 .keymap = crag6410_keymap,
202 .keymap_size = ARRAY_SIZE(crag6410_keymap), 202 .keymap_size = ARRAY_SIZE(crag6410_keymap),
203}; 203};
204 204
205static struct samsung_keypad_platdata crag6410_keypad_data __initdata = { 205static struct samsung_keypad_platdata crag6410_keypad_data __devinitdata = {
206 .keymap_data = &crag6410_keymap_data, 206 .keymap_data = &crag6410_keymap_data,
207 .rows = 2, 207 .rows = 2,
208 .cols = 6, 208 .cols = 6,
@@ -373,11 +373,11 @@ static struct wm831x_buckv_pdata vddarm_pdata = {
373 .dvs_gpio = S3C64XX_GPK(0), 373 .dvs_gpio = S3C64XX_GPK(0),
374}; 374};
375 375
376static struct regulator_consumer_supply vddarm_consumers[] __initdata = { 376static struct regulator_consumer_supply vddarm_consumers[] __devinitdata = {
377 REGULATOR_SUPPLY("vddarm", NULL), 377 REGULATOR_SUPPLY("vddarm", NULL),
378}; 378};
379 379
380static struct regulator_init_data vddarm __initdata = { 380static struct regulator_init_data vddarm __devinitdata = {
381 .constraints = { 381 .constraints = {
382 .name = "VDDARM", 382 .name = "VDDARM",
383 .min_uV = 1000000, 383 .min_uV = 1000000,
@@ -391,11 +391,11 @@ static struct regulator_init_data vddarm __initdata = {
391 .driver_data = &vddarm_pdata, 391 .driver_data = &vddarm_pdata,
392}; 392};
393 393
394static struct regulator_consumer_supply vddint_consumers[] __initdata = { 394static struct regulator_consumer_supply vddint_consumers[] __devinitdata = {
395 REGULATOR_SUPPLY("vddint", NULL), 395 REGULATOR_SUPPLY("vddint", NULL),
396}; 396};
397 397
398static struct regulator_init_data vddint __initdata = { 398static struct regulator_init_data vddint __devinitdata = {
399 .constraints = { 399 .constraints = {
400 .name = "VDDINT", 400 .name = "VDDINT",
401 .min_uV = 1000000, 401 .min_uV = 1000000,
@@ -408,27 +408,27 @@ static struct regulator_init_data vddint __initdata = {
408 .supply_regulator = "WALLVDD", 408 .supply_regulator = "WALLVDD",
409}; 409};
410 410
411static struct regulator_init_data vddmem __initdata = { 411static struct regulator_init_data vddmem __devinitdata = {
412 .constraints = { 412 .constraints = {
413 .name = "VDDMEM", 413 .name = "VDDMEM",
414 .always_on = 1, 414 .always_on = 1,
415 }, 415 },
416}; 416};
417 417
418static struct regulator_init_data vddsys __initdata = { 418static struct regulator_init_data vddsys __devinitdata = {
419 .constraints = { 419 .constraints = {
420 .name = "VDDSYS,VDDEXT,VDDPCM,VDDSS", 420 .name = "VDDSYS,VDDEXT,VDDPCM,VDDSS",
421 .always_on = 1, 421 .always_on = 1,
422 }, 422 },
423}; 423};
424 424
425static struct regulator_consumer_supply vddmmc_consumers[] __initdata = { 425static struct regulator_consumer_supply vddmmc_consumers[] __devinitdata = {
426 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.0"), 426 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.0"),
427 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.1"), 427 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.1"),
428 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"), 428 REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"),
429}; 429};
430 430
431static struct regulator_init_data vddmmc __initdata = { 431static struct regulator_init_data vddmmc __devinitdata = {
432 .constraints = { 432 .constraints = {
433 .name = "VDDMMC,UH", 433 .name = "VDDMMC,UH",
434 .always_on = 1, 434 .always_on = 1,
@@ -438,7 +438,7 @@ static struct regulator_init_data vddmmc __initdata = {
438 .supply_regulator = "WALLVDD", 438 .supply_regulator = "WALLVDD",
439}; 439};
440 440
441static struct regulator_init_data vddotgi __initdata = { 441static struct regulator_init_data vddotgi __devinitdata = {
442 .constraints = { 442 .constraints = {
443 .name = "VDDOTGi", 443 .name = "VDDOTGi",
444 .always_on = 1, 444 .always_on = 1,
@@ -446,7 +446,7 @@ static struct regulator_init_data vddotgi __initdata = {
446 .supply_regulator = "WALLVDD", 446 .supply_regulator = "WALLVDD",
447}; 447};
448 448
449static struct regulator_init_data vddotg __initdata = { 449static struct regulator_init_data vddotg __devinitdata = {
450 .constraints = { 450 .constraints = {
451 .name = "VDDOTG", 451 .name = "VDDOTG",
452 .always_on = 1, 452 .always_on = 1,
@@ -454,7 +454,7 @@ static struct regulator_init_data vddotg __initdata = {
454 .supply_regulator = "WALLVDD", 454 .supply_regulator = "WALLVDD",
455}; 455};
456 456
457static struct regulator_init_data vddhi __initdata = { 457static struct regulator_init_data vddhi __devinitdata = {
458 .constraints = { 458 .constraints = {
459 .name = "VDDHI", 459 .name = "VDDHI",
460 .always_on = 1, 460 .always_on = 1,
@@ -462,7 +462,7 @@ static struct regulator_init_data vddhi __initdata = {
462 .supply_regulator = "WALLVDD", 462 .supply_regulator = "WALLVDD",
463}; 463};
464 464
465static struct regulator_init_data vddadc __initdata = { 465static struct regulator_init_data vddadc __devinitdata = {
466 .constraints = { 466 .constraints = {
467 .name = "VDDADC,VDDDAC", 467 .name = "VDDADC,VDDDAC",
468 .always_on = 1, 468 .always_on = 1,
@@ -470,7 +470,7 @@ static struct regulator_init_data vddadc __initdata = {
470 .supply_regulator = "WALLVDD", 470 .supply_regulator = "WALLVDD",
471}; 471};
472 472
473static struct regulator_init_data vddmem0 __initdata = { 473static struct regulator_init_data vddmem0 __devinitdata = {
474 .constraints = { 474 .constraints = {
475 .name = "VDDMEM0", 475 .name = "VDDMEM0",
476 .always_on = 1, 476 .always_on = 1,
@@ -478,7 +478,7 @@ static struct regulator_init_data vddmem0 __initdata = {
478 .supply_regulator = "WALLVDD", 478 .supply_regulator = "WALLVDD",
479}; 479};
480 480
481static struct regulator_init_data vddpll __initdata = { 481static struct regulator_init_data vddpll __devinitdata = {
482 .constraints = { 482 .constraints = {
483 .name = "VDDPLL", 483 .name = "VDDPLL",
484 .always_on = 1, 484 .always_on = 1,
@@ -486,7 +486,7 @@ static struct regulator_init_data vddpll __initdata = {
486 .supply_regulator = "WALLVDD", 486 .supply_regulator = "WALLVDD",
487}; 487};
488 488
489static struct regulator_init_data vddlcd __initdata = { 489static struct regulator_init_data vddlcd __devinitdata = {
490 .constraints = { 490 .constraints = {
491 .name = "VDDLCD", 491 .name = "VDDLCD",
492 .always_on = 1, 492 .always_on = 1,
@@ -494,7 +494,7 @@ static struct regulator_init_data vddlcd __initdata = {
494 .supply_regulator = "WALLVDD", 494 .supply_regulator = "WALLVDD",
495}; 495};
496 496
497static struct regulator_init_data vddalive __initdata = { 497static struct regulator_init_data vddalive __devinitdata = {
498 .constraints = { 498 .constraints = {
499 .name = "VDDALIVE", 499 .name = "VDDALIVE",
500 .always_on = 1, 500 .always_on = 1,
@@ -502,30 +502,29 @@ static struct regulator_init_data vddalive __initdata = {
502 .supply_regulator = "WALLVDD", 502 .supply_regulator = "WALLVDD",
503}; 503};
504 504
505static struct wm831x_backup_pdata banff_backup_pdata __initdata = { 505static struct wm831x_backup_pdata banff_backup_pdata __devinitdata = {
506 .charger_enable = 1, 506 .charger_enable = 1,
507 .vlim = 2500, /* mV */ 507 .vlim = 2500, /* mV */
508 .ilim = 200, /* uA */ 508 .ilim = 200, /* uA */
509}; 509};
510 510
511static struct wm831x_status_pdata banff_red_led __initdata = { 511static struct wm831x_status_pdata banff_red_led __devinitdata = {
512 .name = "banff:red:", 512 .name = "banff:red:",
513 .default_src = WM831X_STATUS_MANUAL, 513 .default_src = WM831X_STATUS_MANUAL,
514}; 514};
515 515
516static struct wm831x_status_pdata banff_green_led __initdata = { 516static struct wm831x_status_pdata banff_green_led __devinitdata = {
517 .name = "banff:green:", 517 .name = "banff:green:",
518 .default_src = WM831X_STATUS_MANUAL, 518 .default_src = WM831X_STATUS_MANUAL,
519}; 519};
520 520
521static struct wm831x_touch_pdata touch_pdata __initdata = { 521static struct wm831x_touch_pdata touch_pdata __devinitdata = {
522 .data_irq = S3C_EINT(26), 522 .data_irq = S3C_EINT(26),
523 .pd_irq = S3C_EINT(27), 523 .pd_irq = S3C_EINT(27),
524}; 524};
525 525
526static struct wm831x_pdata crag_pmic_pdata __initdata = { 526static struct wm831x_pdata crag_pmic_pdata __devinitdata = {
527 .wm831x_num = 1, 527 .wm831x_num = 1,
528 .irq_base = BANFF_PMIC_IRQ_BASE,
529 .gpio_base = BANFF_PMIC_GPIO_BASE, 528 .gpio_base = BANFF_PMIC_GPIO_BASE,
530 .soft_shutdown = true, 529 .soft_shutdown = true,
531 530
@@ -568,7 +567,7 @@ static struct wm831x_pdata crag_pmic_pdata __initdata = {
568 .touch = &touch_pdata, 567 .touch = &touch_pdata,
569}; 568};
570 569
571static struct i2c_board_info i2c_devs0[] __initdata = { 570static struct i2c_board_info i2c_devs0[] __devinitdata = {
572 { I2C_BOARD_INFO("24c08", 0x50), }, 571 { I2C_BOARD_INFO("24c08", 0x50), },
573 { I2C_BOARD_INFO("tca6408", 0x20), 572 { I2C_BOARD_INFO("tca6408", 0x20),
574 .platform_data = &crag6410_pca_data, 573 .platform_data = &crag6410_pca_data,
@@ -583,12 +582,12 @@ static struct s3c2410_platform_i2c i2c0_pdata = {
583 .frequency = 400000, 582 .frequency = 400000,
584}; 583};
585 584
586static struct regulator_consumer_supply pvdd_1v2_consumers[] __initdata = { 585static struct regulator_consumer_supply pvdd_1v2_consumers[] __devinitdata = {
587 REGULATOR_SUPPLY("DCVDD", "spi0.0"), 586 REGULATOR_SUPPLY("DCVDD", "spi0.0"),
588 REGULATOR_SUPPLY("AVDD", "spi0.0"), 587 REGULATOR_SUPPLY("AVDD", "spi0.0"),
589}; 588};
590 589
591static struct regulator_init_data pvdd_1v2 __initdata = { 590static struct regulator_init_data pvdd_1v2 __devinitdata = {
592 .constraints = { 591 .constraints = {
593 .name = "PVDD_1V2", 592 .name = "PVDD_1V2",
594 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 593 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
@@ -598,7 +597,7 @@ static struct regulator_init_data pvdd_1v2 __initdata = {
598 .num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers), 597 .num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers),
599}; 598};
600 599
601static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = { 600static struct regulator_consumer_supply pvdd_1v8_consumers[] __devinitdata = {
602 REGULATOR_SUPPLY("LDOVDD", "1-001a"), 601 REGULATOR_SUPPLY("LDOVDD", "1-001a"),
603 REGULATOR_SUPPLY("PLLVDD", "1-001a"), 602 REGULATOR_SUPPLY("PLLVDD", "1-001a"),
604 REGULATOR_SUPPLY("DBVDD", "1-001a"), 603 REGULATOR_SUPPLY("DBVDD", "1-001a"),
@@ -612,7 +611,7 @@ static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = {
612 REGULATOR_SUPPLY("DBVDD", "spi0.0"), 611 REGULATOR_SUPPLY("DBVDD", "spi0.0"),
613}; 612};
614 613
615static struct regulator_init_data pvdd_1v8 __initdata = { 614static struct regulator_init_data pvdd_1v8 __devinitdata = {
616 .constraints = { 615 .constraints = {
617 .name = "PVDD_1V8", 616 .name = "PVDD_1V8",
618 .always_on = 1, 617 .always_on = 1,
@@ -622,12 +621,12 @@ static struct regulator_init_data pvdd_1v8 __initdata = {
622 .num_consumer_supplies = ARRAY_SIZE(pvdd_1v8_consumers), 621 .num_consumer_supplies = ARRAY_SIZE(pvdd_1v8_consumers),
623}; 622};
624 623
625static struct regulator_consumer_supply pvdd_3v3_consumers[] __initdata = { 624static struct regulator_consumer_supply pvdd_3v3_consumers[] __devinitdata = {
626 REGULATOR_SUPPLY("MICVDD", "1-001a"), 625 REGULATOR_SUPPLY("MICVDD", "1-001a"),
627 REGULATOR_SUPPLY("AVDD1", "1-001a"), 626 REGULATOR_SUPPLY("AVDD1", "1-001a"),
628}; 627};
629 628
630static struct regulator_init_data pvdd_3v3 __initdata = { 629static struct regulator_init_data pvdd_3v3 __devinitdata = {
631 .constraints = { 630 .constraints = {
632 .name = "PVDD_3V3", 631 .name = "PVDD_3V3",
633 .always_on = 1, 632 .always_on = 1,
@@ -637,7 +636,7 @@ static struct regulator_init_data pvdd_3v3 __initdata = {
637 .num_consumer_supplies = ARRAY_SIZE(pvdd_3v3_consumers), 636 .num_consumer_supplies = ARRAY_SIZE(pvdd_3v3_consumers),
638}; 637};
639 638
640static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = { 639static struct wm831x_pdata glenfarclas_pmic_pdata __devinitdata = {
641 .wm831x_num = 2, 640 .wm831x_num = 2,
642 .irq_base = GLENFARCLAS_PMIC_IRQ_BASE, 641 .irq_base = GLENFARCLAS_PMIC_IRQ_BASE,
643 .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE, 642 .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE,
@@ -669,7 +668,7 @@ static struct wm1250_ev1_pdata wm1250_ev1_pdata = {
669 }, 668 },
670}; 669};
671 670
672static struct i2c_board_info i2c_devs1[] __initdata = { 671static struct i2c_board_info i2c_devs1[] __devinitdata = {
673 { I2C_BOARD_INFO("wm8311", 0x34), 672 { I2C_BOARD_INFO("wm8311", 0x34),
674 .irq = S3C_EINT(0), 673 .irq = S3C_EINT(0),
675 .platform_data = &glenfarclas_pmic_pdata }, 674 .platform_data = &glenfarclas_pmic_pdata },
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c
index df3103d450e2..0fe4f1503f4f 100644
--- a/arch/arm/mach-s3c64xx/mach-smdk6410.c
+++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c
@@ -566,7 +566,6 @@ static struct wm831x_status_pdata wm1192_led8_pdata = {
566 566
567static struct wm831x_pdata smdk6410_wm1192_pdata = { 567static struct wm831x_pdata smdk6410_wm1192_pdata = {
568 .pre_init = wm1192_pre_init, 568 .pre_init = wm1192_pre_init,
569 .irq_base = IRQ_BOARD_START,
570 569
571 .backlight = &wm1192_backlight_pdata, 570 .backlight = &wm1192_backlight_pdata,
572 .dcdc = { 571 .dcdc = {
diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
index 88e983b0c82e..77185c38188b 100644
--- a/arch/arm/mach-s5pv210/Kconfig
+++ b/arch/arm/mach-s5pv210/Kconfig
@@ -152,6 +152,7 @@ config MACH_SMDKV210
152 select S3C_DEV_I2C1 152 select S3C_DEV_I2C1
153 select S3C_DEV_I2C2 153 select S3C_DEV_I2C2
154 select S3C_DEV_RTC 154 select S3C_DEV_RTC
155 select S3C_DEV_USB_HSOTG
155 select S3C_DEV_WDT 156 select S3C_DEV_WDT
156 select S5P_DEV_FIMC0 157 select S5P_DEV_FIMC0
157 select S5P_DEV_FIMC1 158 select S5P_DEV_FIMC1
@@ -170,6 +171,7 @@ config MACH_SMDKV210
170 select S5PV210_SETUP_IDE 171 select S5PV210_SETUP_IDE
171 select S5PV210_SETUP_KEYPAD 172 select S5PV210_SETUP_KEYPAD
172 select S5PV210_SETUP_SDHCI 173 select S5PV210_SETUP_SDHCI
174 select S5PV210_SETUP_USB_PHY
173 help 175 help
174 Machine support for Samsung SMDKV210 176 Machine support for Samsung SMDKV210
175 177
diff --git a/arch/arm/mach-s5pv210/mach-aquila.c b/arch/arm/mach-s5pv210/mach-aquila.c
index af528f9e97f9..78028df86c5d 100644
--- a/arch/arm/mach-s5pv210/mach-aquila.c
+++ b/arch/arm/mach-s5pv210/mach-aquila.c
@@ -600,10 +600,17 @@ static void aquila_setup_sdhci(void)
600 s3c_sdhci2_set_platdata(&aquila_hsmmc2_data); 600 s3c_sdhci2_set_platdata(&aquila_hsmmc2_data);
601}; 601};
602 602
603/* Audio device */
604static struct platform_device aquila_device_audio = {
605 .name = "smdk-audio",
606 .id = -1,
607};
608
603static struct platform_device *aquila_devices[] __initdata = { 609static struct platform_device *aquila_devices[] __initdata = {
604 &aquila_i2c_gpio_pmic, 610 &aquila_i2c_gpio_pmic,
605 &aquila_i2c_gpio5, 611 &aquila_i2c_gpio5,
606 &aquila_device_gpiokeys, 612 &aquila_device_gpiokeys,
613 &aquila_device_audio,
607 &s3c_device_fb, 614 &s3c_device_fb,
608 &s5p_device_onenand, 615 &s5p_device_onenand,
609 &s3c_device_hsmmc0, 616 &s3c_device_hsmmc0,
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index bf5087c2b7fe..822a55950685 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -859,12 +859,19 @@ static struct s5p_platform_fimc goni_fimc_md_platdata __initdata = {
859 .num_clients = ARRAY_SIZE(goni_camera_sensors), 859 .num_clients = ARRAY_SIZE(goni_camera_sensors),
860}; 860};
861 861
862/* Audio device */
863static struct platform_device goni_device_audio = {
864 .name = "smdk-audio",
865 .id = -1,
866};
867
862static struct platform_device *goni_devices[] __initdata = { 868static struct platform_device *goni_devices[] __initdata = {
863 &s3c_device_fb, 869 &s3c_device_fb,
864 &s5p_device_onenand, 870 &s5p_device_onenand,
865 &goni_spi_gpio, 871 &goni_spi_gpio,
866 &goni_i2c_gpio_pmic, 872 &goni_i2c_gpio_pmic,
867 &goni_i2c_gpio5, 873 &goni_i2c_gpio5,
874 &goni_device_audio,
868 &mmc2_fixed_voltage, 875 &mmc2_fixed_voltage,
869 &goni_device_gpiokeys, 876 &goni_device_gpiokeys,
870 &s5p_device_mfc, 877 &s5p_device_mfc,
@@ -901,7 +908,7 @@ static void __init goni_sound_init(void)
901static void __init goni_map_io(void) 908static void __init goni_map_io(void)
902{ 909{
903 s5pv210_init_io(NULL, 0); 910 s5pv210_init_io(NULL, 0);
904 s3c24xx_init_clocks(24000000); 911 s3c24xx_init_clocks(clk_xusbxti.rate);
905 s3c24xx_init_uarts(goni_uartcfgs, ARRAY_SIZE(goni_uartcfgs)); 912 s3c24xx_init_uarts(goni_uartcfgs, ARRAY_SIZE(goni_uartcfgs));
906 s5p_set_timer_source(S5P_PWM3, S5P_PWM4); 913 s5p_set_timer_source(S5P_PWM3, S5P_PWM4);
907} 914}
@@ -959,8 +966,6 @@ static void __init goni_machine_init(void)
959 /* KEYPAD */ 966 /* KEYPAD */
960 samsung_keypad_set_platdata(&keypad_data); 967 samsung_keypad_set_platdata(&keypad_data);
961 968
962 clk_xusbxti.rate = 24000000;
963
964 platform_add_devices(goni_devices, ARRAY_SIZE(goni_devices)); 969 platform_add_devices(goni_devices, ARRAY_SIZE(goni_devices));
965} 970}
966 971
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c
index 0d7ddec88eb7..918b23d71fdf 100644
--- a/arch/arm/mach-s5pv210/mach-smdkv210.c
+++ b/arch/arm/mach-s5pv210/mach-smdkv210.c
@@ -19,6 +19,7 @@
19#include <linux/gpio.h> 19#include <linux/gpio.h>
20#include <linux/delay.h> 20#include <linux/delay.h>
21#include <linux/pwm_backlight.h> 21#include <linux/pwm_backlight.h>
22#include <linux/platform_data/s3c-hsotg.h>
22 23
23#include <asm/hardware/vic.h> 24#include <asm/hardware/vic.h>
24#include <asm/mach/arch.h> 25#include <asm/mach/arch.h>
@@ -47,6 +48,7 @@
47#include <plat/backlight.h> 48#include <plat/backlight.h>
48#include <plat/regs-fb-v4.h> 49#include <plat/regs-fb-v4.h>
49#include <plat/mfc.h> 50#include <plat/mfc.h>
51#include <plat/clock.h>
50 52
51#include "common.h" 53#include "common.h"
52 54
@@ -203,6 +205,9 @@ static struct s3c_fb_platdata smdkv210_lcd0_pdata __initdata = {
203 .setup_gpio = s5pv210_fb_gpio_setup_24bpp, 205 .setup_gpio = s5pv210_fb_gpio_setup_24bpp,
204}; 206};
205 207
208/* USB OTG */
209static struct s3c_hsotg_plat smdkv210_hsotg_pdata;
210
206static struct platform_device *smdkv210_devices[] __initdata = { 211static struct platform_device *smdkv210_devices[] __initdata = {
207 &s3c_device_adc, 212 &s3c_device_adc,
208 &s3c_device_cfcon, 213 &s3c_device_cfcon,
@@ -216,6 +221,7 @@ static struct platform_device *smdkv210_devices[] __initdata = {
216 &s3c_device_i2c2, 221 &s3c_device_i2c2,
217 &s3c_device_rtc, 222 &s3c_device_rtc,
218 &s3c_device_ts, 223 &s3c_device_ts,
224 &s3c_device_usb_hsotg,
219 &s3c_device_wdt, 225 &s3c_device_wdt,
220 &s5p_device_fimc0, 226 &s5p_device_fimc0,
221 &s5p_device_fimc1, 227 &s5p_device_fimc1,
@@ -279,7 +285,7 @@ static struct platform_pwm_backlight_data smdkv210_bl_data = {
279static void __init smdkv210_map_io(void) 285static void __init smdkv210_map_io(void)
280{ 286{
281 s5pv210_init_io(NULL, 0); 287 s5pv210_init_io(NULL, 0);
282 s3c24xx_init_clocks(24000000); 288 s3c24xx_init_clocks(clk_xusbxti.rate);
283 s3c24xx_init_uarts(smdkv210_uartcfgs, ARRAY_SIZE(smdkv210_uartcfgs)); 289 s3c24xx_init_uarts(smdkv210_uartcfgs, ARRAY_SIZE(smdkv210_uartcfgs));
284 s5p_set_timer_source(S5P_PWM2, S5P_PWM4); 290 s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
285} 291}
@@ -314,6 +320,8 @@ static void __init smdkv210_machine_init(void)
314 320
315 samsung_bl_set(&smdkv210_bl_gpio_info, &smdkv210_bl_data); 321 samsung_bl_set(&smdkv210_bl_gpio_info, &smdkv210_bl_data);
316 322
323 s3c_hsotg_set_platdata(&smdkv210_hsotg_pdata);
324
317 platform_add_devices(smdkv210_devices, ARRAY_SIZE(smdkv210_devices)); 325 platform_add_devices(smdkv210_devices, ARRAY_SIZE(smdkv210_devices));
318} 326}
319 327
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 7c407393cd07..9077aaa398d9 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -66,34 +66,12 @@ config MACH_HARMONY
66 help 66 help
67 Support for nVidia Harmony development platform 67 Support for nVidia Harmony development platform
68 68
69config MACH_KAEN
70 bool "Kaen board"
71 depends on ARCH_TEGRA_2x_SOC
72 select MACH_SEABOARD
73 help
74 Support for the Kaen version of Seaboard
75
76config MACH_PAZ00 69config MACH_PAZ00
77 bool "Paz00 board" 70 bool "Paz00 board"
78 depends on ARCH_TEGRA_2x_SOC 71 depends on ARCH_TEGRA_2x_SOC
79 help 72 help
80 Support for the Toshiba AC100/Dynabook AZ netbook 73 Support for the Toshiba AC100/Dynabook AZ netbook
81 74
82config MACH_SEABOARD
83 bool "Seaboard board"
84 depends on ARCH_TEGRA_2x_SOC
85 help
86 Support for nVidia Seaboard development platform. It will
87 also be included for some of the derivative boards that
88 have large similarities with the seaboard design.
89
90config MACH_TEGRA_DT
91 bool "Generic Tegra20 board (FDT support)"
92 depends on ARCH_TEGRA_2x_SOC
93 select USE_OF
94 help
95 Support for generic NVIDIA Tegra20 boards using Flattened Device Tree
96
97config MACH_TRIMSLICE 75config MACH_TRIMSLICE
98 bool "TrimSlice board" 76 bool "TrimSlice board"
99 depends on ARCH_TEGRA_2x_SOC 77 depends on ARCH_TEGRA_2x_SOC
@@ -101,20 +79,6 @@ config MACH_TRIMSLICE
101 help 79 help
102 Support for CompuLab TrimSlice platform 80 Support for CompuLab TrimSlice platform
103 81
104config MACH_WARIO
105 bool "Wario board"
106 depends on ARCH_TEGRA_2x_SOC
107 select MACH_SEABOARD
108 help
109 Support for the Wario version of Seaboard
110
111config MACH_VENTANA
112 bool "Ventana board"
113 depends on ARCH_TEGRA_2x_SOC
114 select MACH_TEGRA_DT
115 help
116 Support for the nVidia Ventana development platform
117
118choice 82choice
119 prompt "Default low-level debug console UART" 83 prompt "Default low-level debug console UART"
120 default TEGRA_DEBUG_UART_NONE 84 default TEGRA_DEBUG_UART_NONE
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile
index 90aae34245cd..c3d7303b9ac8 100644
--- a/arch/arm/mach-tegra/Makefile
+++ b/arch/arm/mach-tegra/Makefile
@@ -14,7 +14,6 @@ obj-$(CONFIG_CPU_IDLE) += cpuidle.o
14obj-$(CONFIG_CPU_IDLE) += sleep.o 14obj-$(CONFIG_CPU_IDLE) += sleep.o
15obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_clocks.o 15obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_clocks.o
16obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_emc.o 16obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_emc.o
17obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += board-dt-tegra30.o
18obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks.o 17obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks.o
19obj-$(CONFIG_SMP) += platsmp.o headsmp.o 18obj-$(CONFIG_SMP) += platsmp.o headsmp.o
20obj-$(CONFIG_SMP) += reset.o 19obj-$(CONFIG_SMP) += reset.o
@@ -24,6 +23,9 @@ obj-$(CONFIG_CPU_FREQ) += cpu-tegra.o
24obj-$(CONFIG_TEGRA_PCI) += pcie.o 23obj-$(CONFIG_TEGRA_PCI) += pcie.o
25obj-$(CONFIG_USB_SUPPORT) += usb_phy.o 24obj-$(CONFIG_USB_SUPPORT) += usb_phy.o
26 25
26obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += board-dt-tegra20.o
27obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += board-dt-tegra30.o
28
27obj-$(CONFIG_MACH_HARMONY) += board-harmony.o 29obj-$(CONFIG_MACH_HARMONY) += board-harmony.o
28obj-$(CONFIG_MACH_HARMONY) += board-harmony-pinmux.o 30obj-$(CONFIG_MACH_HARMONY) += board-harmony-pinmux.o
29obj-$(CONFIG_MACH_HARMONY) += board-harmony-pcie.o 31obj-$(CONFIG_MACH_HARMONY) += board-harmony-pcie.o
@@ -32,14 +34,5 @@ obj-$(CONFIG_MACH_HARMONY) += board-harmony-power.o
32obj-$(CONFIG_MACH_PAZ00) += board-paz00.o 34obj-$(CONFIG_MACH_PAZ00) += board-paz00.o
33obj-$(CONFIG_MACH_PAZ00) += board-paz00-pinmux.o 35obj-$(CONFIG_MACH_PAZ00) += board-paz00-pinmux.o
34 36
35obj-$(CONFIG_MACH_SEABOARD) += board-seaboard.o
36obj-$(CONFIG_MACH_SEABOARD) += board-seaboard-pinmux.o
37
38obj-$(CONFIG_MACH_TEGRA_DT) += board-dt-tegra20.o
39obj-$(CONFIG_MACH_TEGRA_DT) += board-harmony-pinmux.o
40obj-$(CONFIG_MACH_TEGRA_DT) += board-seaboard-pinmux.o
41obj-$(CONFIG_MACH_TEGRA_DT) += board-paz00-pinmux.o
42obj-$(CONFIG_MACH_TEGRA_DT) += board-trimslice-pinmux.o
43
44obj-$(CONFIG_MACH_TRIMSLICE) += board-trimslice.o 37obj-$(CONFIG_MACH_TRIMSLICE) += board-trimslice.o
45obj-$(CONFIG_MACH_TRIMSLICE) += board-trimslice-pinmux.o 38obj-$(CONFIG_MACH_TRIMSLICE) += board-trimslice-pinmux.o
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot
index 435f00ca3c58..7a1bb62ddcf0 100644
--- a/arch/arm/mach-tegra/Makefile.boot
+++ b/arch/arm/mach-tegra/Makefile.boot
@@ -2,10 +2,10 @@ zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) += 0x00008000
2params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 2params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100
3initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 3initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000
4 4
5dtb-$(CONFIG_MACH_HARMONY) += tegra20-harmony.dtb 5dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-harmony.dtb
6dtb-$(CONFIG_MACH_PAZ00) += tegra20-paz00.dtb 6dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-paz00.dtb
7dtb-$(CONFIG_MACH_SEABOARD) += tegra20-seaboard.dtb 7dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-seaboard.dtb
8dtb-$(CONFIG_MACH_TRIMSLICE) += tegra20-trimslice.dtb 8dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-trimslice.dtb
9dtb-$(CONFIG_MACH_VENTANA) += tegra20-ventana.dtb 9dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-ventana.dtb
10dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-whistler.dtb 10dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20-whistler.dtb
11dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30-cardhu.dtb 11dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30-cardhu.dtb
diff --git a/arch/arm/mach-tegra/board-dt-tegra20.c b/arch/arm/mach-tegra/board-dt-tegra20.c
index eb7249db50a5..d0de9c1192f7 100644
--- a/arch/arm/mach-tegra/board-dt-tegra20.c
+++ b/arch/arm/mach-tegra/board-dt-tegra20.c
@@ -64,6 +64,7 @@ struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
64 &tegra_ehci2_pdata), 64 &tegra_ehci2_pdata),
65 OF_DEV_AUXDATA("nvidia,tegra20-ehci", TEGRA_USB3_BASE, "tegra-ehci.2", 65 OF_DEV_AUXDATA("nvidia,tegra20-ehci", TEGRA_USB3_BASE, "tegra-ehci.2",
66 &tegra_ehci3_pdata), 66 &tegra_ehci3_pdata),
67 OF_DEV_AUXDATA("nvidia,tegra20-apbdma", 0x6000a000, "tegra-apbdma", NULL),
67 {} 68 {}
68}; 69};
69 70
@@ -81,11 +82,6 @@ static __initdata struct tegra_clk_init_table tegra_dt_clk_init_table[] = {
81 { NULL, NULL, 0, 0}, 82 { NULL, NULL, 0, 0},
82}; 83};
83 84
84static struct of_device_id tegra_dt_match_table[] __initdata = {
85 { .compatible = "simple-bus", },
86 {}
87};
88
89static void __init tegra_dt_init(void) 85static void __init tegra_dt_init(void)
90{ 86{
91 tegra_clk_init_from_table(tegra_dt_clk_init_table); 87 tegra_clk_init_from_table(tegra_dt_clk_init_table);
@@ -94,10 +90,74 @@ static void __init tegra_dt_init(void)
94 * Finished with the static registrations now; fill in the missing 90 * Finished with the static registrations now; fill in the missing
95 * devices 91 * devices
96 */ 92 */
97 of_platform_populate(NULL, tegra_dt_match_table, 93 of_platform_populate(NULL, of_default_bus_match_table,
98 tegra20_auxdata_lookup, NULL); 94 tegra20_auxdata_lookup, NULL);
99} 95}
100 96
97#ifdef CONFIG_MACH_TRIMSLICE
98static void __init trimslice_init(void)
99{
100 int ret;
101
102 ret = tegra_pcie_init(true, true);
103 if (ret)
104 pr_err("tegra_pci_init() failed: %d\n", ret);
105}
106#endif
107
108#ifdef CONFIG_MACH_HARMONY
109static void __init harmony_init(void)
110{
111 int ret;
112
113 ret = harmony_regulator_init();
114 if (ret) {
115 pr_err("harmony_regulator_init() failed: %d\n", ret);
116 return;
117 }
118
119 ret = harmony_pcie_init();
120 if (ret)
121 pr_err("harmony_pcie_init() failed: %d\n", ret);
122}
123#endif
124
125#ifdef CONFIG_MACH_PAZ00
126static void __init paz00_init(void)
127{
128 tegra_paz00_wifikill_init();
129}
130#endif
131
132static struct {
133 char *machine;
134 void (*init)(void);
135} board_init_funcs[] = {
136#ifdef CONFIG_MACH_TRIMSLICE
137 { "compulab,trimslice", trimslice_init },
138#endif
139#ifdef CONFIG_MACH_HARMONY
140 { "nvidia,harmony", harmony_init },
141#endif
142#ifdef CONFIG_MACH_PAZ00
143 { "compal,paz00", paz00_init },
144#endif
145};
146
147static void __init tegra_dt_init_late(void)
148{
149 int i;
150
151 tegra_init_late();
152
153 for (i = 0; i < ARRAY_SIZE(board_init_funcs); i++) {
154 if (of_machine_is_compatible(board_init_funcs[i].machine)) {
155 board_init_funcs[i].init();
156 break;
157 }
158 }
159}
160
101static const char *tegra20_dt_board_compat[] = { 161static const char *tegra20_dt_board_compat[] = {
102 "nvidia,tegra20", 162 "nvidia,tegra20",
103 NULL 163 NULL
@@ -110,7 +170,7 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
110 .handle_irq = gic_handle_irq, 170 .handle_irq = gic_handle_irq,
111 .timer = &tegra_timer, 171 .timer = &tegra_timer,
112 .init_machine = tegra_dt_init, 172 .init_machine = tegra_dt_init,
113 .init_late = tegra_init_late, 173 .init_late = tegra_dt_init_late,
114 .restart = tegra_assert_system_reset, 174 .restart = tegra_assert_system_reset,
115 .dt_compat = tegra20_dt_board_compat, 175 .dt_compat = tegra20_dt_board_compat,
116MACHINE_END 176MACHINE_END
diff --git a/arch/arm/mach-tegra/board-dt-tegra30.c b/arch/arm/mach-tegra/board-dt-tegra30.c
index 4f76fa7a5da3..ee48214bfd89 100644
--- a/arch/arm/mach-tegra/board-dt-tegra30.c
+++ b/arch/arm/mach-tegra/board-dt-tegra30.c
@@ -36,11 +36,6 @@
36#include "board.h" 36#include "board.h"
37#include "clock.h" 37#include "clock.h"
38 38
39static struct of_device_id tegra_dt_match_table[] __initdata = {
40 { .compatible = "simple-bus", },
41 {}
42};
43
44struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = { 39struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {
45 OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL), 40 OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL),
46 OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000200, "sdhci-tegra.1", NULL), 41 OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000200, "sdhci-tegra.1", NULL),
@@ -52,6 +47,7 @@ struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {
52 OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C700, "tegra-i2c.3", NULL), 47 OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C700, "tegra-i2c.3", NULL),
53 OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000D000, "tegra-i2c.4", NULL), 48 OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000D000, "tegra-i2c.4", NULL),
54 OF_DEV_AUXDATA("nvidia,tegra30-ahub", 0x70080000, "tegra30-ahub", NULL), 49 OF_DEV_AUXDATA("nvidia,tegra30-ahub", 0x70080000, "tegra30-ahub", NULL),
50 OF_DEV_AUXDATA("nvidia,tegra30-apbdma", 0x6000a000, "tegra-apbdma", NULL),
55 {} 51 {}
56}; 52};
57 53
@@ -74,7 +70,7 @@ static void __init tegra30_dt_init(void)
74{ 70{
75 tegra_clk_init_from_table(tegra_dt_clk_init_table); 71 tegra_clk_init_from_table(tegra_dt_clk_init_table);
76 72
77 of_platform_populate(NULL, tegra_dt_match_table, 73 of_platform_populate(NULL, of_default_bus_match_table,
78 tegra30_auxdata_lookup, NULL); 74 tegra30_auxdata_lookup, NULL);
79} 75}
80 76
diff --git a/arch/arm/mach-tegra/board-harmony-pcie.c b/arch/arm/mach-tegra/board-harmony-pcie.c
index 33c4fedab840..e8c3fda9bec2 100644
--- a/arch/arm/mach-tegra/board-harmony-pcie.c
+++ b/arch/arm/mach-tegra/board-harmony-pcie.c
@@ -27,14 +27,11 @@
27 27
28#ifdef CONFIG_TEGRA_PCI 28#ifdef CONFIG_TEGRA_PCI
29 29
30static int __init harmony_pcie_init(void) 30int __init harmony_pcie_init(void)
31{ 31{
32 struct regulator *regulator = NULL; 32 struct regulator *regulator = NULL;
33 int err; 33 int err;
34 34
35 if (!machine_is_harmony())
36 return 0;
37
38 err = gpio_request(TEGRA_GPIO_EN_VDD_1V05_GPIO, "EN_VDD_1V05"); 35 err = gpio_request(TEGRA_GPIO_EN_VDD_1V05_GPIO, "EN_VDD_1V05");
39 if (err) 36 if (err)
40 return err; 37 return err;
@@ -62,7 +59,15 @@ err_reg:
62 return err; 59 return err;
63} 60}
64 61
62static int __init harmony_pcie_initcall(void)
63{
64 if (!machine_is_harmony())
65 return 0;
66
67 return harmony_pcie_init();
68}
69
65/* PCI should be initialized after I2C, mfd and regulators */ 70/* PCI should be initialized after I2C, mfd and regulators */
66subsys_initcall_sync(harmony_pcie_init); 71subsys_initcall_sync(harmony_pcie_initcall);
67 72
68#endif 73#endif
diff --git a/arch/arm/mach-tegra/board-harmony-power.c b/arch/arm/mach-tegra/board-harmony-power.c
index 82f32300796c..44dcb2e869b5 100644
--- a/arch/arm/mach-tegra/board-harmony-power.c
+++ b/arch/arm/mach-tegra/board-harmony-power.c
@@ -20,6 +20,10 @@
20#include <linux/gpio.h> 20#include <linux/gpio.h>
21#include <linux/regulator/machine.h> 21#include <linux/regulator/machine.h>
22#include <linux/mfd/tps6586x.h> 22#include <linux/mfd/tps6586x.h>
23#include <linux/of.h>
24#include <linux/of_i2c.h>
25
26#include <asm/mach-types.h>
23 27
24#include <mach/irqs.h> 28#include <mach/irqs.h>
25 29
@@ -110,7 +114,26 @@ static struct i2c_board_info __initdata harmony_regulators[] = {
110 114
111int __init harmony_regulator_init(void) 115int __init harmony_regulator_init(void)
112{ 116{
113 i2c_register_board_info(3, harmony_regulators, 1); 117 if (machine_is_harmony()) {
118 i2c_register_board_info(3, harmony_regulators, 1);
119 } else { /* Harmony, booted using device tree */
120 struct device_node *np;
121 struct i2c_adapter *adapter;
122
123 np = of_find_node_by_path("/i2c@7000d000");
124 if (np == NULL) {
125 pr_err("Could not find device_node for DVC I2C\n");
126 return -ENODEV;
127 }
128
129 adapter = of_find_i2c_adapter_by_node(np);
130 if (!adapter) {
131 pr_err("Could not find i2c_adapter for DVC I2C\n");
132 return -ENODEV;
133 }
134
135 i2c_new_device(adapter, harmony_regulators);
136 }
114 137
115 return 0; 138 return 0;
116} 139}
diff --git a/arch/arm/mach-tegra/board-paz00.c b/arch/arm/mach-tegra/board-paz00.c
index bbc1907e98a6..4b64af5cab27 100644
--- a/arch/arm/mach-tegra/board-paz00.c
+++ b/arch/arm/mach-tegra/board-paz00.c
@@ -148,7 +148,6 @@ static struct platform_device *paz00_devices[] __initdata = {
148 &debug_uart, 148 &debug_uart,
149 &tegra_sdhci_device4, 149 &tegra_sdhci_device4,
150 &tegra_sdhci_device1, 150 &tegra_sdhci_device1,
151 &wifi_rfkill_device,
152 &leds_gpio, 151 &leds_gpio,
153 &gpio_keys_device, 152 &gpio_keys_device,
154}; 153};
@@ -201,6 +200,11 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = {
201 .is_8bit = 1, 200 .is_8bit = 1,
202}; 201};
203 202
203void __init tegra_paz00_wifikill_init(void)
204{
205 platform_device_register(&wifi_rfkill_device);
206}
207
204static void __init tegra_paz00_init(void) 208static void __init tegra_paz00_init(void)
205{ 209{
206 tegra_clk_init_from_table(paz00_clk_init_table); 210 tegra_clk_init_from_table(paz00_clk_init_table);
@@ -211,6 +215,7 @@ static void __init tegra_paz00_init(void)
211 tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; 215 tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;
212 216
213 platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices)); 217 platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices));
218 tegra_paz00_wifikill_init();
214 219
215 paz00_i2c_init(); 220 paz00_i2c_init();
216 paz00_usb_init(); 221 paz00_usb_init();
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c
deleted file mode 100644
index 11fc8a568c64..000000000000
--- a/arch/arm/mach-tegra/board-seaboard-pinmux.c
+++ /dev/null
@@ -1,197 +0,0 @@
1/*
2 * Copyright (C) 2010-2012 NVIDIA Corporation
3 * Copyright (C) 2011 Google, Inc.
4 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16#include <linux/kernel.h>
17
18#include "board-seaboard.h"
19#include "board-pinmux.h"
20
21static unsigned long seaboard_pincfg_drive_sdio1[] = {
22 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE, 0),
23 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_SCHMITT, 0),
24 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_LOW_POWER_MODE, 3),
25 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH, 31),
26 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH, 31),
27 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING, 3),
28 TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_SLEW_RATE_RISING, 3),
29};
30
31static struct pinctrl_map common_map[] = {
32 TEGRA_MAP_MUXCONF("ata", "ide", none, driven),
33 TEGRA_MAP_MUXCONF("atb", "sdio4", none, driven),
34 TEGRA_MAP_MUXCONF("atc", "nand", none, driven),
35 TEGRA_MAP_MUXCONF("atd", "gmi", none, driven),
36 TEGRA_MAP_MUXCONF("ate", "gmi", none, tristate),
37 TEGRA_MAP_MUXCONF("cdev1", "plla_out", none, driven),
38 TEGRA_MAP_MUXCONF("cdev2", "pllp_out4", none, driven),
39 TEGRA_MAP_MUXCONF("crtp", "crt", up, tristate),
40 TEGRA_MAP_MUXCONF("csus", "vi_sensor_clk", none, tristate),
41 TEGRA_MAP_MUXCONF("dap1", "dap1", none, driven),
42 TEGRA_MAP_MUXCONF("dap2", "dap2", none, driven),
43 TEGRA_MAP_MUXCONF("dap3", "dap3", none, tristate),
44 TEGRA_MAP_MUXCONF("dap4", "dap4", none, driven),
45 TEGRA_MAP_MUXCONF("dta", "vi", down, driven),
46 TEGRA_MAP_MUXCONF("dtb", "vi", down, driven),
47 TEGRA_MAP_MUXCONF("dtc", "vi", down, driven),
48 TEGRA_MAP_MUXCONF("dtd", "vi", down, driven),
49 TEGRA_MAP_MUXCONF("dte", "vi", down, tristate),
50 TEGRA_MAP_MUXCONF("dtf", "i2c3", none, driven),
51 TEGRA_MAP_MUXCONF("gma", "sdio4", none, driven),
52 TEGRA_MAP_MUXCONF("gmb", "gmi", up, tristate),
53 TEGRA_MAP_MUXCONF("gmc", "uartd", none, driven),
54 TEGRA_MAP_MUXCONF("gme", "sdio4", none, driven),
55 TEGRA_MAP_MUXCONF("gpu", "pwm", none, driven),
56 TEGRA_MAP_MUXCONF("gpu7", "rtck", none, driven),
57 TEGRA_MAP_MUXCONF("gpv", "pcie", none, tristate),
58 TEGRA_MAP_MUXCONF("hdint", "hdmi", na, tristate),
59 TEGRA_MAP_MUXCONF("i2cp", "i2cp", none, driven),
60 TEGRA_MAP_MUXCONF("irrx", "uartb", none, driven),
61 TEGRA_MAP_MUXCONF("irtx", "uartb", none, driven),
62 TEGRA_MAP_MUXCONF("kbca", "kbc", up, driven),
63 TEGRA_MAP_MUXCONF("kbcb", "kbc", up, driven),
64 TEGRA_MAP_MUXCONF("kbcc", "kbc", up, driven),
65 TEGRA_MAP_MUXCONF("kbcd", "kbc", up, driven),
66 TEGRA_MAP_MUXCONF("kbce", "kbc", up, driven),
67 TEGRA_MAP_MUXCONF("kbcf", "kbc", up, driven),
68 TEGRA_MAP_MUXCONF("lcsn", "rsvd4", na, tristate),
69 TEGRA_MAP_MUXCONF("ld0", "displaya", na, driven),
70 TEGRA_MAP_MUXCONF("ld1", "displaya", na, driven),
71 TEGRA_MAP_MUXCONF("ld10", "displaya", na, driven),
72 TEGRA_MAP_MUXCONF("ld11", "displaya", na, driven),
73 TEGRA_MAP_MUXCONF("ld12", "displaya", na, driven),
74 TEGRA_MAP_MUXCONF("ld13", "displaya", na, driven),
75 TEGRA_MAP_MUXCONF("ld14", "displaya", na, driven),
76 TEGRA_MAP_MUXCONF("ld15", "displaya", na, driven),
77 TEGRA_MAP_MUXCONF("ld16", "displaya", na, driven),
78 TEGRA_MAP_MUXCONF("ld17", "displaya", na, driven),
79 TEGRA_MAP_MUXCONF("ld2", "displaya", na, driven),
80 TEGRA_MAP_MUXCONF("ld3", "displaya", na, driven),
81 TEGRA_MAP_MUXCONF("ld4", "displaya", na, driven),
82 TEGRA_MAP_MUXCONF("ld5", "displaya", na, driven),
83 TEGRA_MAP_MUXCONF("ld6", "displaya", na, driven),
84 TEGRA_MAP_MUXCONF("ld7", "displaya", na, driven),
85 TEGRA_MAP_MUXCONF("ld8", "displaya", na, driven),
86 TEGRA_MAP_MUXCONF("ld9", "displaya", na, driven),
87 TEGRA_MAP_MUXCONF("ldc", "rsvd4", na, tristate),
88 TEGRA_MAP_MUXCONF("ldi", "displaya", na, driven),
89 TEGRA_MAP_MUXCONF("lhp0", "displaya", na, driven),
90 TEGRA_MAP_MUXCONF("lhp1", "displaya", na, driven),
91 TEGRA_MAP_MUXCONF("lhp2", "displaya", na, driven),
92 TEGRA_MAP_MUXCONF("lhs", "displaya", na, driven),
93 TEGRA_MAP_MUXCONF("lm0", "rsvd4", na, driven),
94 TEGRA_MAP_MUXCONF("lm1", "crt", na, tristate),
95 TEGRA_MAP_MUXCONF("lpp", "displaya", na, driven),
96 TEGRA_MAP_MUXCONF("lpw1", "rsvd4", na, tristate),
97 TEGRA_MAP_MUXCONF("lsc0", "displaya", na, driven),
98 TEGRA_MAP_MUXCONF("lsdi", "rsvd4", na, tristate),
99 TEGRA_MAP_MUXCONF("lspi", "displaya", na, driven),
100 TEGRA_MAP_MUXCONF("lvp0", "rsvd4", na, tristate),
101 TEGRA_MAP_MUXCONF("lvp1", "displaya", na, driven),
102 TEGRA_MAP_MUXCONF("lvs", "displaya", na, driven),
103 TEGRA_MAP_MUXCONF("owc", "rsvd2", none, tristate),
104 TEGRA_MAP_MUXCONF("pmc", "pwr_on", na, driven),
105 TEGRA_MAP_MUXCONF("pta", "hdmi", none, driven),
106 TEGRA_MAP_MUXCONF("rm", "i2c1", none, driven),
107 TEGRA_MAP_MUXCONF("sdb", "sdio3", na, driven),
108 TEGRA_MAP_MUXCONF("sdc", "sdio3", none, driven),
109 TEGRA_MAP_MUXCONF("sdd", "sdio3", none, driven),
110 TEGRA_MAP_MUXCONF("sdio1", "sdio1", up, driven),
111 TEGRA_MAP_MUXCONF("slxa", "pcie", up, tristate),
112 TEGRA_MAP_MUXCONF("slxd", "spdif", none, driven),
113 TEGRA_MAP_MUXCONF("slxk", "pcie", none, driven),
114 TEGRA_MAP_MUXCONF("spdi", "rsvd2", none, driven),
115 TEGRA_MAP_MUXCONF("spdo", "rsvd2", none, driven),
116 TEGRA_MAP_MUXCONF("spib", "gmi", none, tristate),
117 TEGRA_MAP_MUXCONF("spid", "spi1", none, tristate),
118 TEGRA_MAP_MUXCONF("spie", "spi1", none, tristate),
119 TEGRA_MAP_MUXCONF("spif", "spi1", down, tristate),
120 TEGRA_MAP_MUXCONF("spih", "spi2_alt", up, tristate),
121 TEGRA_MAP_MUXCONF("uaa", "ulpi", up, driven),
122 TEGRA_MAP_MUXCONF("uab", "ulpi", up, driven),
123 TEGRA_MAP_MUXCONF("uac", "rsvd2", none, driven),
124 TEGRA_MAP_MUXCONF("uad", "irda", none, driven),
125 TEGRA_MAP_MUXCONF("uca", "uartc", none, driven),
126 TEGRA_MAP_MUXCONF("ucb", "uartc", none, driven),
127 TEGRA_MAP_MUXCONF("uda", "ulpi", none, driven),
128 TEGRA_MAP_CONF("ck32", none, na),
129 TEGRA_MAP_CONF("ddrc", none, na),
130 TEGRA_MAP_CONF("pmca", none, na),
131 TEGRA_MAP_CONF("pmcb", none, na),
132 TEGRA_MAP_CONF("pmcc", none, na),
133 TEGRA_MAP_CONF("pmcd", none, na),
134 TEGRA_MAP_CONF("pmce", none, na),
135 TEGRA_MAP_CONF("xm2c", none, na),
136 TEGRA_MAP_CONF("xm2d", none, na),
137 TEGRA_MAP_CONF("ls", up, na),
138 TEGRA_MAP_CONF("lc", up, na),
139 TEGRA_MAP_CONF("ld17_0", down, na),
140 TEGRA_MAP_CONF("ld19_18", down, na),
141 TEGRA_MAP_CONF("ld21_20", down, na),
142 TEGRA_MAP_CONF("ld23_22", down, na),
143};
144
145static struct pinctrl_map seaboard_map[] = {
146 TEGRA_MAP_MUXCONF("ddc", "rsvd2", none, tristate),
147 TEGRA_MAP_MUXCONF("gmd", "sflash", none, driven),
148 TEGRA_MAP_MUXCONF("lpw0", "hdmi", na, driven),
149 TEGRA_MAP_MUXCONF("lpw2", "hdmi", na, driven),
150 TEGRA_MAP_MUXCONF("lsc1", "hdmi", na, tristate),
151 TEGRA_MAP_MUXCONF("lsck", "hdmi", na, tristate),
152 TEGRA_MAP_MUXCONF("lsda", "hdmi", na, tristate),
153 TEGRA_MAP_MUXCONF("slxc", "spdif", none, tristate),
154 TEGRA_MAP_MUXCONF("spia", "gmi", up, tristate),
155 TEGRA_MAP_MUXCONF("spic", "gmi", up, driven),
156 TEGRA_MAP_MUXCONF("spig", "spi2_alt", up, tristate),
157 PIN_MAP_CONFIGS_GROUP_HOG_DEFAULT(PINMUX_DEV, "drive_sdio1", seaboard_pincfg_drive_sdio1),
158};
159
160static struct pinctrl_map ventana_map[] = {
161 TEGRA_MAP_MUXCONF("ddc", "rsvd2", none, driven),
162 TEGRA_MAP_MUXCONF("gmd", "sflash", none, tristate),
163 TEGRA_MAP_MUXCONF("lpw0", "displaya", na, driven),
164 TEGRA_MAP_MUXCONF("lpw2", "displaya", na, driven),
165 TEGRA_MAP_MUXCONF("lsc1", "displaya", na, driven),
166 TEGRA_MAP_MUXCONF("lsck", "displaya", na, tristate),
167 TEGRA_MAP_MUXCONF("lsda", "displaya", na, tristate),
168 TEGRA_MAP_MUXCONF("slxc", "sdio3", none, driven),
169 TEGRA_MAP_MUXCONF("spia", "gmi", none, tristate),
170 TEGRA_MAP_MUXCONF("spic", "gmi", none, tristate),
171 TEGRA_MAP_MUXCONF("spig", "spi2_alt", none, tristate),
172};
173
174static struct tegra_board_pinmux_conf common_conf = {
175 .maps = common_map,
176 .map_count = ARRAY_SIZE(common_map),
177};
178
179static struct tegra_board_pinmux_conf seaboard_conf = {
180 .maps = seaboard_map,
181 .map_count = ARRAY_SIZE(seaboard_map),
182};
183
184static struct tegra_board_pinmux_conf ventana_conf = {
185 .maps = ventana_map,
186 .map_count = ARRAY_SIZE(ventana_map),
187};
188
189void seaboard_pinmux_init(void)
190{
191 tegra_board_pinmux_init(&common_conf, &seaboard_conf);
192}
193
194void ventana_pinmux_init(void)
195{
196 tegra_board_pinmux_init(&common_conf, &ventana_conf);
197}
diff --git a/arch/arm/mach-tegra/board-seaboard.c b/arch/arm/mach-tegra/board-seaboard.c
deleted file mode 100644
index 71e9f3fc7fba..000000000000
--- a/arch/arm/mach-tegra/board-seaboard.c
+++ /dev/null
@@ -1,306 +0,0 @@
1/*
2 * Copyright (c) 2010, 2011 NVIDIA Corporation.
3 * Copyright (C) 2010, 2011 Google, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 */
16
17#include <linux/kernel.h>
18#include <linux/init.h>
19#include <linux/platform_device.h>
20#include <linux/serial_8250.h>
21#include <linux/of_serial.h>
22#include <linux/i2c.h>
23#include <linux/delay.h>
24#include <linux/input.h>
25#include <linux/io.h>
26#include <linux/gpio.h>
27#include <linux/gpio_keys.h>
28#include <linux/platform_data/tegra_usb.h>
29
30#include <sound/wm8903.h>
31
32#include <mach/iomap.h>
33#include <mach/irqs.h>
34#include <mach/sdhci.h>
35#include <mach/tegra_wm8903_pdata.h>
36
37#include <asm/mach-types.h>
38#include <asm/mach/arch.h>
39#include <asm/hardware/gic.h>
40
41#include "board.h"
42#include "board-seaboard.h"
43#include "clock.h"
44#include "devices.h"
45#include "gpio-names.h"
46
47static struct plat_serial8250_port debug_uart_platform_data[] = {
48 {
49 /* Memory and IRQ filled in before registration */
50 .flags = UPF_BOOT_AUTOCONF | UPF_FIXED_TYPE,
51 .type = PORT_TEGRA,
52 .handle_break = tegra_serial_handle_break,
53 .iotype = UPIO_MEM,
54 .regshift = 2,
55 .uartclk = 216000000,
56 }, {
57 .flags = 0,
58 }
59};
60
61static struct platform_device debug_uart = {
62 .name = "serial8250",
63 .id = PLAT8250_DEV_PLATFORM,
64 .dev = {
65 .platform_data = debug_uart_platform_data,
66 },
67};
68
69static __initdata struct tegra_clk_init_table seaboard_clk_init_table[] = {
70 /* name parent rate enabled */
71 { "uartb", "pll_p", 216000000, true},
72 { "uartd", "pll_p", 216000000, true},
73 { "pll_a", "pll_p_out1", 56448000, true },
74 { "pll_a_out0", "pll_a", 11289600, true },
75 { "cdev1", NULL, 0, true },
76 { "i2s1", "pll_a_out0", 11289600, false},
77 { "usbd", "clk_m", 12000000, true},
78 { "usb3", "clk_m", 12000000, true},
79 { NULL, NULL, 0, 0},
80};
81
82static struct gpio_keys_button seaboard_gpio_keys_buttons[] = {
83 {
84 .code = SW_LID,
85 .gpio = TEGRA_GPIO_LIDSWITCH,
86 .active_low = 0,
87 .desc = "Lid",
88 .type = EV_SW,
89 .wakeup = 1,
90 .debounce_interval = 1,
91 },
92 {
93 .code = KEY_POWER,
94 .gpio = TEGRA_GPIO_POWERKEY,
95 .active_low = 1,
96 .desc = "Power",
97 .type = EV_KEY,
98 .wakeup = 1,
99 },
100};
101
102static struct gpio_keys_platform_data seaboard_gpio_keys = {
103 .buttons = seaboard_gpio_keys_buttons,
104 .nbuttons = ARRAY_SIZE(seaboard_gpio_keys_buttons),
105};
106
107static struct platform_device seaboard_gpio_keys_device = {
108 .name = "gpio-keys",
109 .id = -1,
110 .dev = {
111 .platform_data = &seaboard_gpio_keys,
112 }
113};
114
115static struct tegra_sdhci_platform_data sdhci_pdata1 = {
116 .cd_gpio = -1,
117 .wp_gpio = -1,
118 .power_gpio = -1,
119};
120
121static struct tegra_sdhci_platform_data sdhci_pdata3 = {
122 .cd_gpio = TEGRA_GPIO_SD2_CD,
123 .wp_gpio = TEGRA_GPIO_SD2_WP,
124 .power_gpio = TEGRA_GPIO_SD2_POWER,
125};
126
127static struct tegra_sdhci_platform_data sdhci_pdata4 = {
128 .cd_gpio = -1,
129 .wp_gpio = -1,
130 .power_gpio = -1,
131 .is_8bit = 1,
132};
133
134static struct tegra_wm8903_platform_data seaboard_audio_pdata = {
135 .gpio_spkr_en = TEGRA_GPIO_SPKR_EN,
136 .gpio_hp_det = TEGRA_GPIO_HP_DET,
137 .gpio_hp_mute = -1,
138 .gpio_int_mic_en = -1,
139 .gpio_ext_mic_en = -1,
140};
141
142static struct platform_device seaboard_audio_device = {
143 .name = "tegra-snd-wm8903",
144 .id = 0,
145 .dev = {
146 .platform_data = &seaboard_audio_pdata,
147 },
148};
149
150static struct platform_device *seaboard_devices[] __initdata = {
151 &debug_uart,
152 &tegra_pmu_device,
153 &tegra_sdhci_device4,
154 &tegra_sdhci_device3,
155 &tegra_sdhci_device1,
156 &seaboard_gpio_keys_device,
157 &tegra_i2s_device1,
158 &tegra_das_device,
159 &seaboard_audio_device,
160};
161
162static struct i2c_board_info __initdata isl29018_device = {
163 I2C_BOARD_INFO("isl29018", 0x44),
164};
165
166static struct i2c_board_info __initdata adt7461_device = {
167 I2C_BOARD_INFO("adt7461", 0x4c),
168};
169
170static struct wm8903_platform_data wm8903_pdata = {
171 .irq_active_low = 0,
172 .micdet_cfg = 0,
173 .micdet_delay = 100,
174 .gpio_base = SEABOARD_GPIO_WM8903(0),
175 .gpio_cfg = {
176 0,
177 0,
178 WM8903_GPIO_CONFIG_ZERO,
179 0,
180 0,
181 },
182};
183
184static struct i2c_board_info __initdata wm8903_device = {
185 I2C_BOARD_INFO("wm8903", 0x1a),
186 .platform_data = &wm8903_pdata,
187};
188
189static int seaboard_ehci_init(void)
190{
191 struct tegra_ehci_platform_data *pdata;
192
193 pdata = tegra_ehci1_device.dev.platform_data;
194 pdata->vbus_gpio = TEGRA_GPIO_USB1;
195
196 platform_device_register(&tegra_ehci1_device);
197 platform_device_register(&tegra_ehci3_device);
198
199 return 0;
200}
201
202static void __init seaboard_i2c_init(void)
203{
204 isl29018_device.irq = gpio_to_irq(TEGRA_GPIO_ISL29018_IRQ);
205 i2c_register_board_info(0, &isl29018_device, 1);
206
207 wm8903_device.irq = gpio_to_irq(TEGRA_GPIO_CDC_IRQ);
208 i2c_register_board_info(0, &wm8903_device, 1);
209
210 i2c_register_board_info(3, &adt7461_device, 1);
211
212 platform_device_register(&tegra_i2c_device1);
213 platform_device_register(&tegra_i2c_device2);
214 platform_device_register(&tegra_i2c_device3);
215 platform_device_register(&tegra_i2c_device4);
216}
217
218static void __init seaboard_common_init(void)
219{
220 seaboard_pinmux_init();
221
222 tegra_clk_init_from_table(seaboard_clk_init_table);
223
224 tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1;
225 tegra_sdhci_device3.dev.platform_data = &sdhci_pdata3;
226 tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;
227
228 platform_add_devices(seaboard_devices, ARRAY_SIZE(seaboard_devices));
229
230 seaboard_ehci_init();
231}
232
233static void __init tegra_seaboard_init(void)
234{
235 /* Seaboard uses UARTD for the debug port. */
236 debug_uart_platform_data[0].membase = IO_ADDRESS(TEGRA_UARTD_BASE);
237 debug_uart_platform_data[0].mapbase = TEGRA_UARTD_BASE;
238 debug_uart_platform_data[0].irq = INT_UARTD;
239
240 seaboard_common_init();
241
242 seaboard_i2c_init();
243}
244
245static void __init tegra_kaen_init(void)
246{
247 /* Kaen uses UARTB for the debug port. */
248 debug_uart_platform_data[0].membase = IO_ADDRESS(TEGRA_UARTB_BASE);
249 debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE;
250 debug_uart_platform_data[0].irq = INT_UARTB;
251
252 seaboard_audio_pdata.gpio_hp_mute = TEGRA_GPIO_KAEN_HP_MUTE;
253
254 seaboard_common_init();
255
256 seaboard_i2c_init();
257}
258
259static void __init tegra_wario_init(void)
260{
261 /* Wario uses UARTB for the debug port. */
262 debug_uart_platform_data[0].membase = IO_ADDRESS(TEGRA_UARTB_BASE);
263 debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE;
264 debug_uart_platform_data[0].irq = INT_UARTB;
265
266 seaboard_common_init();
267
268 seaboard_i2c_init();
269}
270
271
272MACHINE_START(SEABOARD, "seaboard")
273 .atag_offset = 0x100,
274 .map_io = tegra_map_common_io,
275 .init_early = tegra20_init_early,
276 .init_irq = tegra_init_irq,
277 .handle_irq = gic_handle_irq,
278 .timer = &tegra_timer,
279 .init_machine = tegra_seaboard_init,
280 .init_late = tegra_init_late,
281 .restart = tegra_assert_system_reset,
282MACHINE_END
283
284MACHINE_START(KAEN, "kaen")
285 .atag_offset = 0x100,
286 .map_io = tegra_map_common_io,
287 .init_early = tegra20_init_early,
288 .init_irq = tegra_init_irq,
289 .handle_irq = gic_handle_irq,
290 .timer = &tegra_timer,
291 .init_machine = tegra_kaen_init,
292 .init_late = tegra_init_late,
293 .restart = tegra_assert_system_reset,
294MACHINE_END
295
296MACHINE_START(WARIO, "wario")
297 .atag_offset = 0x100,
298 .map_io = tegra_map_common_io,
299 .init_early = tegra20_init_early,
300 .init_irq = tegra_init_irq,
301 .handle_irq = gic_handle_irq,
302 .timer = &tegra_timer,
303 .init_machine = tegra_wario_init,
304 .init_late = tegra_init_late,
305 .restart = tegra_assert_system_reset,
306MACHINE_END
diff --git a/arch/arm/mach-tegra/board-seaboard.h b/arch/arm/mach-tegra/board-seaboard.h
deleted file mode 100644
index 4c45d4ca3c49..000000000000
--- a/arch/arm/mach-tegra/board-seaboard.h
+++ /dev/null
@@ -1,47 +0,0 @@
1/*
2 * arch/arm/mach-tegra/board-seaboard.h
3 *
4 * Copyright (C) 2010 Google, Inc.
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef _MACH_TEGRA_BOARD_SEABOARD_H
18#define _MACH_TEGRA_BOARD_SEABOARD_H
19
20#include <mach/gpio-tegra.h>
21
22#define SEABOARD_GPIO_TPS6586X(_x_) (TEGRA_NR_GPIOS + (_x_))
23#define SEABOARD_GPIO_WM8903(_x_) (SEABOARD_GPIO_TPS6586X(4) + (_x_))
24
25#define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5
26#define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1
27#define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PI6
28#define TEGRA_GPIO_LIDSWITCH TEGRA_GPIO_PC7
29#define TEGRA_GPIO_USB1 TEGRA_GPIO_PD0
30#define TEGRA_GPIO_POWERKEY TEGRA_GPIO_PV2
31#define TEGRA_GPIO_BACKLIGHT TEGRA_GPIO_PD4
32#define TEGRA_GPIO_LVDS_SHUTDOWN TEGRA_GPIO_PB2
33#define TEGRA_GPIO_BACKLIGHT_PWM TEGRA_GPIO_PU5
34#define TEGRA_GPIO_BACKLIGHT_VDD TEGRA_GPIO_PW0
35#define TEGRA_GPIO_EN_VDD_PNL TEGRA_GPIO_PC6
36#define TEGRA_GPIO_MAGNETOMETER TEGRA_GPIO_PN5
37#define TEGRA_GPIO_ISL29018_IRQ TEGRA_GPIO_PZ2
38#define TEGRA_GPIO_AC_ONLINE TEGRA_GPIO_PV3
39#define TEGRA_GPIO_WWAN_PWR SEABOARD_GPIO_TPS6586X(2)
40#define TEGRA_GPIO_CDC_IRQ TEGRA_GPIO_PX3
41#define TEGRA_GPIO_SPKR_EN SEABOARD_GPIO_WM8903(2)
42#define TEGRA_GPIO_HP_DET TEGRA_GPIO_PX1
43#define TEGRA_GPIO_KAEN_HP_MUTE TEGRA_GPIO_PA5
44
45void seaboard_pinmux_init(void);
46
47#endif
diff --git a/arch/arm/mach-tegra/board.h b/arch/arm/mach-tegra/board.h
index 65014968fc6c..f88e5143c767 100644
--- a/arch/arm/mach-tegra/board.h
+++ b/arch/arm/mach-tegra/board.h
@@ -46,5 +46,14 @@ int __init tegra_powergate_debugfs_init(void);
46static inline int tegra_powergate_debugfs_init(void) { return 0; } 46static inline int tegra_powergate_debugfs_init(void) { return 0; }
47#endif 47#endif
48 48
49int __init harmony_regulator_init(void);
50#ifdef CONFIG_TEGRA_PCI
51int __init harmony_pcie_init(void);
52#else
53static inline int harmony_pcie_init(void) { return 0; }
54#endif
55
56void __init tegra_paz00_wifikill_init(void);
57
49extern struct sys_timer tegra_timer; 58extern struct sys_timer tegra_timer;
50#endif 59#endif