aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig81
-rw-r--r--arch/arm/boot/compressed/decompress.c1
-rw-r--r--arch/arm/boot/compressed/head.S2
-rw-r--r--arch/arm/boot/compressed/misc.c1
-rw-r--r--arch/arm/configs/cm_t35_defconfig2
-rw-r--r--arch/arm/configs/n770_defconfig1
-rw-r--r--arch/arm/configs/n8x0_defconfig160
-rw-r--r--arch/arm/configs/omap3_beagle_defconfig1
-rw-r--r--arch/arm/configs/omap3_defconfig2
-rw-r--r--arch/arm/configs/omap3_evm_defconfig1
-rw-r--r--arch/arm/configs/omap3_touchbook_defconfig2
-rw-r--r--arch/arm/configs/omap_3430sdp_defconfig1
-rw-r--r--arch/arm/configs/omap_3630sdp_defconfig2
-rw-r--r--arch/arm/configs/omap_h2_1610_defconfig1
-rw-r--r--arch/arm/configs/omap_zoom2_defconfig1
-rw-r--r--arch/arm/configs/omap_zoom3_defconfig2
-rw-r--r--arch/arm/configs/rx51_defconfig1
-rw-r--r--arch/arm/include/asm/elf.h1
-rw-r--r--arch/arm/include/asm/pgtable-nommu.h1
-rw-r--r--arch/arm/kernel/entry-header.S2
-rw-r--r--arch/arm/kernel/kgdb.c13
-rw-r--r--arch/arm/kernel/perf_event.c5
-rw-r--r--arch/arm/kernel/smp.c4
-rw-r--r--arch/arm/mach-at91/board-sam9g20ek.c10
-rw-r--r--arch/arm/mach-mx3/Kconfig9
-rw-r--r--arch/arm/mach-mx3/clock-imx31.c5
-rw-r--r--arch/arm/mach-mx3/mach-mx31_3ds.c116
-rw-r--r--arch/arm/mach-omap2/Makefile3
-rw-r--r--arch/arm/mach-omap2/board-3430sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-3630sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c26
-rw-r--r--arch/arm/mach-omap2/board-am3517evm.c2
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c2
-rw-r--r--arch/arm/mach-omap2/board-devkit8000.c2
-rw-r--r--arch/arm/mach-omap2/board-igep0020.c56
-rw-r--r--arch/arm/mach-omap2/board-n8x0.c98
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3pandora.c12
-rw-r--r--arch/arm/mach-omap2/board-omap3touchbook.c12
-rw-r--r--arch/arm/mach-omap2/board-overo.c2
-rw-r--r--arch/arm/mach-omap2/board-zoom3.c2
-rw-r--r--arch/arm/mach-omap2/clock2420_data.c1
-rw-r--r--arch/arm/mach-omap2/io.c21
-rw-r--r--arch/arm/mach-omap2/mailbox.c12
-rw-r--r--arch/arm/mach-omap2/omap44xx-smc.S32
-rw-r--r--arch/arm/mach-omap2/prcm.c4
-rw-r--r--arch/arm/mach-omap2/serial.c15
-rw-r--r--arch/arm/mach-omap2/usb-ehci.c6
-rw-r--r--arch/arm/mach-rpc/include/mach/uncompress.h2
-rw-r--r--arch/arm/mach-s3c2440/s3c2440-cpufreq.c (renamed from arch/arm/plat-s3c24xx/s3c2440-cpufreq.c)0
-rw-r--r--arch/arm/mach-s3c64xx/include/mach/debug-macro.S2
-rw-r--r--arch/arm/mach-s5p6440/include/mach/debug-macro.S2
-rw-r--r--arch/arm/mach-s5p6442/include/mach/debug-macro.S2
-rw-r--r--arch/arm/mach-shmobile/board-ap4evb.c32
-rw-r--r--arch/arm/mach-shmobile/board-g3evm.c122
-rw-r--r--arch/arm/mach-shmobile/board-g4evm.c57
-rw-r--r--arch/arm/mach-shmobile/clock-sh7367.c7
-rw-r--r--arch/arm/mach-shmobile/intc-sh7367.c46
-rw-r--r--arch/arm/mach-shmobile/intc-sh7372.c46
-rw-r--r--arch/arm/mach-shmobile/intc-sh7377.c36
-rw-r--r--arch/arm/plat-mxc/include/mach/board-mx31_3ds.h (renamed from arch/arm/plat-mxc/include/mach/board-mx31pdk.h)6
-rw-r--r--arch/arm/plat-omap/gpio.c10
-rw-r--r--arch/arm/plat-omap/include/plat/blizzard.h2
-rw-r--r--arch/arm/plat-omap/include/plat/cpu.h8
-rw-r--r--arch/arm/plat-omap/include/plat/prcm.h2
-rw-r--r--arch/arm/plat-omap/include/plat/system.h6
-rw-r--r--arch/arm/plat-omap/include/plat/usb.h2
-rw-r--r--arch/arm/plat-omap/mcbsp.c12
-rw-r--r--arch/arm/plat-samsung/include/plat/uncompress.h2
-rw-r--r--arch/arm/plat-samsung/pwm.c35
71 files changed, 912 insertions, 271 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index cadfe2ee66a5..c5408bf1bf43 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -218,6 +218,10 @@ config MMU
218 Select if you want MMU-based virtualised addressing space 218 Select if you want MMU-based virtualised addressing space
219 support by paged memory management. If unsure, say 'Y'. 219 support by paged memory management. If unsure, say 'Y'.
220 220
221#
222# The "ARM system type" choice list is ordered alphabetically by option
223# text. Please add new entries in the option alphabetic order.
224#
221choice 225choice
222 prompt "ARM system type" 226 prompt "ARM system type"
223 default ARCH_VERSATILE 227 default ARCH_VERSATILE
@@ -274,6 +278,18 @@ config ARCH_AT91
274 This enables support for systems based on the Atmel AT91RM9200, 278 This enables support for systems based on the Atmel AT91RM9200,
275 AT91SAM9 and AT91CAP9 processors. 279 AT91SAM9 and AT91CAP9 processors.
276 280
281config ARCH_BCMRING
282 bool "Broadcom BCMRING"
283 depends on MMU
284 select CPU_V6
285 select ARM_AMBA
286 select COMMON_CLKDEV
287 select GENERIC_TIME
288 select GENERIC_CLOCKEVENTS
289 select ARCH_WANT_OPTIONAL_GPIOLIB
290 help
291 Support for Broadcom's BCMRing platform.
292
277config ARCH_CLPS711X 293config ARCH_CLPS711X
278 bool "Cirrus Logic CLPS711x/EP721x-based" 294 bool "Cirrus Logic CLPS711x/EP721x-based"
279 select CPU_ARM720T 295 select CPU_ARM720T
@@ -359,20 +375,6 @@ config ARCH_H720X
359 help 375 help
360 This enables support for systems based on the Hynix HMS720x 376 This enables support for systems based on the Hynix HMS720x
361 377
362config ARCH_NOMADIK
363 bool "STMicroelectronics Nomadik"
364 select ARM_AMBA
365 select ARM_VIC
366 select CPU_ARM926T
367 select HAVE_CLK
368 select COMMON_CLKDEV
369 select GENERIC_TIME
370 select GENERIC_CLOCKEVENTS
371 select GENERIC_GPIO
372 select ARCH_REQUIRE_GPIOLIB
373 help
374 Support for the Nomadik platform by ST-Ericsson
375
376config ARCH_IOP13XX 378config ARCH_IOP13XX
377 bool "IOP13xx-based" 379 bool "IOP13xx-based"
378 depends on MMU 380 depends on MMU
@@ -747,6 +749,30 @@ config ARCH_U300
747 help 749 help
748 Support for ST-Ericsson U300 series mobile platforms. 750 Support for ST-Ericsson U300 series mobile platforms.
749 751
752config ARCH_U8500
753 bool "ST-Ericsson U8500 Series"
754 select CPU_V7
755 select ARM_AMBA
756 select GENERIC_TIME
757 select GENERIC_CLOCKEVENTS
758 select COMMON_CLKDEV
759 help
760 Support for ST-Ericsson's Ux500 architecture
761
762config ARCH_NOMADIK
763 bool "STMicroelectronics Nomadik"
764 select ARM_AMBA
765 select ARM_VIC
766 select CPU_ARM926T
767 select HAVE_CLK
768 select COMMON_CLKDEV
769 select GENERIC_TIME
770 select GENERIC_CLOCKEVENTS
771 select GENERIC_GPIO
772 select ARCH_REQUIRE_GPIOLIB
773 help
774 Support for the Nomadik platform by ST-Ericsson
775
750config ARCH_DAVINCI 776config ARCH_DAVINCI
751 bool "TI DaVinci" 777 bool "TI DaVinci"
752 select CPU_ARM926T 778 select CPU_ARM926T
@@ -775,30 +801,13 @@ config ARCH_OMAP
775 help 801 help
776 Support for TI's OMAP platform (OMAP1 and OMAP2). 802 Support for TI's OMAP platform (OMAP1 and OMAP2).
777 803
778config ARCH_BCMRING
779 bool "Broadcom BCMRING"
780 depends on MMU
781 select CPU_V6
782 select ARM_AMBA
783 select COMMON_CLKDEV
784 select GENERIC_TIME
785 select GENERIC_CLOCKEVENTS
786 select ARCH_WANT_OPTIONAL_GPIOLIB
787 help
788 Support for Broadcom's BCMRing platform.
789
790config ARCH_U8500
791 bool "ST-Ericsson U8500 Series"
792 select CPU_V7
793 select ARM_AMBA
794 select GENERIC_TIME
795 select GENERIC_CLOCKEVENTS
796 select COMMON_CLKDEV
797 help
798 Support for ST-Ericsson's Ux500 architecture
799
800endchoice 804endchoice
801 805
806#
807# This is sorted alphabetically by mach-* pathname. However, plat-*
808# Kconfigs may be included either alphabetically (according to the
809# plat- suffix) or along side the corresponding mach-* source.
810#
802source "arch/arm/mach-aaec2000/Kconfig" 811source "arch/arm/mach-aaec2000/Kconfig"
803 812
804source "arch/arm/mach-at91/Kconfig" 813source "arch/arm/mach-at91/Kconfig"
diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
index 0da382f33157..9c097073ce4c 100644
--- a/arch/arm/boot/compressed/decompress.c
+++ b/arch/arm/boot/compressed/decompress.c
@@ -11,6 +11,7 @@ extern unsigned long free_mem_end_ptr;
11extern void error(char *); 11extern void error(char *);
12 12
13#define STATIC static 13#define STATIC static
14#define STATIC_RW_DATA /* non-static please */
14 15
15#define ARCH_HAS_DECOMP_WDOG 16#define ARCH_HAS_DECOMP_WDOG
16 17
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 535a91daaa53..0f23009170a1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -742,7 +742,7 @@ proc_types:
742 .word 0x000f0000 742 .word 0x000f0000
743 W(b) __armv4_mmu_cache_on 743 W(b) __armv4_mmu_cache_on
744 W(b) __armv4_mmu_cache_off 744 W(b) __armv4_mmu_cache_off
745 W(b) __armv4_mmu_cache_flush 745 W(b) __armv5tej_mmu_cache_flush
746 746
747 .word 0x0007b000 @ ARMv6 747 .word 0x0007b000 @ ARMv6
748 .word 0x000ff000 748 .word 0x000ff000
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c
index d32bc71c1f78..d2b2ef41cd4f 100644
--- a/arch/arm/boot/compressed/misc.c
+++ b/arch/arm/boot/compressed/misc.c
@@ -33,6 +33,7 @@ unsigned int __machine_arch_type;
33#else 33#else
34 34
35static void putstr(const char *ptr); 35static void putstr(const char *ptr);
36extern void error(char *x);
36 37
37#include <mach/uncompress.h> 38#include <mach/uncompress.h>
38 39
diff --git a/arch/arm/configs/cm_t35_defconfig b/arch/arm/configs/cm_t35_defconfig
index 893cd267e075..032b49bad91f 100644
--- a/arch/arm/configs/cm_t35_defconfig
+++ b/arch/arm/configs/cm_t35_defconfig
@@ -358,7 +358,7 @@ CONFIG_PM_SLEEP=y
358CONFIG_SUSPEND=y 358CONFIG_SUSPEND=y
359CONFIG_SUSPEND_FREEZER=y 359CONFIG_SUSPEND_FREEZER=y
360# CONFIG_APM_EMULATION is not set 360# CONFIG_APM_EMULATION is not set
361# CONFIG_PM_RUNTIME is not set 361CONFIG_PM_RUNTIME=y
362CONFIG_ARCH_SUSPEND_POSSIBLE=y 362CONFIG_ARCH_SUSPEND_POSSIBLE=y
363CONFIG_NET=y 363CONFIG_NET=y
364 364
diff --git a/arch/arm/configs/n770_defconfig b/arch/arm/configs/n770_defconfig
index 75cae18fbcb6..de0c28aa43e7 100644
--- a/arch/arm/configs/n770_defconfig
+++ b/arch/arm/configs/n770_defconfig
@@ -308,6 +308,7 @@ CONFIG_PM_SLEEP=y
308CONFIG_SUSPEND_UP_POSSIBLE=y 308CONFIG_SUSPEND_UP_POSSIBLE=y
309CONFIG_SUSPEND=y 309CONFIG_SUSPEND=y
310# CONFIG_APM_EMULATION is not set 310# CONFIG_APM_EMULATION is not set
311CONFIG_PM_RUNTIME=y
311 312
312# 313#
313# Networking 314# Networking
diff --git a/arch/arm/configs/n8x0_defconfig b/arch/arm/configs/n8x0_defconfig
index e6f667c5e58a..216ad00948af 100644
--- a/arch/arm/configs/n8x0_defconfig
+++ b/arch/arm/configs/n8x0_defconfig
@@ -191,6 +191,7 @@ CONFIG_ARCH_OMAP=y
191# 191#
192CONFIG_ARCH_OMAP_OTG=y 192CONFIG_ARCH_OMAP_OTG=y
193# CONFIG_ARCH_OMAP1 is not set 193# CONFIG_ARCH_OMAP1 is not set
194CONFIG_ARCH_OMAP2PLUS=y
194CONFIG_ARCH_OMAP2=y 195CONFIG_ARCH_OMAP2=y
195# CONFIG_ARCH_OMAP3 is not set 196# CONFIG_ARCH_OMAP3 is not set
196# CONFIG_ARCH_OMAP4 is not set 197# CONFIG_ARCH_OMAP4 is not set
@@ -198,8 +199,6 @@ CONFIG_ARCH_OMAP2=y
198# 199#
199# OMAP Feature Selections 200# OMAP Feature Selections
200# 201#
201# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
202# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
203CONFIG_OMAP_RESET_CLOCKS=y 202CONFIG_OMAP_RESET_CLOCKS=y
204# CONFIG_OMAP_MUX is not set 203# CONFIG_OMAP_MUX is not set
205# CONFIG_OMAP_MCBSP is not set 204# CONFIG_OMAP_MCBSP is not set
@@ -208,15 +207,13 @@ CONFIG_OMAP_MBOX_FWK=y
208CONFIG_OMAP_32K_TIMER=y 207CONFIG_OMAP_32K_TIMER=y
209CONFIG_OMAP_32K_TIMER_HZ=128 208CONFIG_OMAP_32K_TIMER_HZ=128
210CONFIG_OMAP_DM_TIMER=y 209CONFIG_OMAP_DM_TIMER=y
211# CONFIG_OMAP_LL_DEBUG_UART1 is not set 210# CONFIG_OMAP_PM_NONE is not set
212# CONFIG_OMAP_LL_DEBUG_UART2 is not set 211CONFIG_OMAP_PM_NOOP=y
213CONFIG_OMAP_LL_DEBUG_UART3=y
214# CONFIG_MACH_OMAP_GENERIC is not set 212# CONFIG_MACH_OMAP_GENERIC is not set
215 213
216# 214#
217# OMAP Core Type 215# OMAP Core Type
218# 216#
219CONFIG_ARCH_OMAP24XX=y
220CONFIG_ARCH_OMAP2420=y 217CONFIG_ARCH_OMAP2420=y
221# CONFIG_ARCH_OMAP2430 is not set 218# CONFIG_ARCH_OMAP2430 is not set
222 219
@@ -227,6 +224,9 @@ CONFIG_MACH_OMAP2_TUSB6010=y
227# CONFIG_MACH_OMAP_H4 is not set 224# CONFIG_MACH_OMAP_H4 is not set
228# CONFIG_MACH_OMAP_APOLLON is not set 225# CONFIG_MACH_OMAP_APOLLON is not set
229# CONFIG_MACH_OMAP_2430SDP is not set 226# CONFIG_MACH_OMAP_2430SDP is not set
227CONFIG_MACH_NOKIA_N800=y
228CONFIG_MACH_NOKIA_N810=y
229CONFIG_MACH_NOKIA_N810_WIMAX=y
230CONFIG_MACH_NOKIA_N8X0=y 230CONFIG_MACH_NOKIA_N8X0=y
231 231
232# 232#
@@ -303,7 +303,7 @@ CONFIG_ALIGNMENT_TRAP=y
303CONFIG_ZBOOT_ROM_TEXT=0x10C08000 303CONFIG_ZBOOT_ROM_TEXT=0x10C08000
304CONFIG_ZBOOT_ROM_BSS=0x10200000 304CONFIG_ZBOOT_ROM_BSS=0x10200000
305# CONFIG_ZBOOT_ROM is not set 305# CONFIG_ZBOOT_ROM is not set
306CONFIG_CMDLINE="root=1f03 rootfstype=jffs2 console=ttyS2,115200n8" 306CONFIG_CMDLINE="root=/dev/mmcblk0p2 console=ttyS2,115200n8 debug earlyprintk rootwait"
307# CONFIG_XIP_KERNEL is not set 307# CONFIG_XIP_KERNEL is not set
308# CONFIG_KEXEC is not set 308# CONFIG_KEXEC is not set
309 309
@@ -337,7 +337,14 @@ CONFIG_HAVE_AOUT=y
337# 337#
338# Power management options 338# Power management options
339# 339#
340# CONFIG_PM is not set 340CONFIG_PM=y
341# CONFIG_PM_DEBUG is not set
342CONFIG_PM_SLEEP=y
343CONFIG_SUSPEND=y
344CONFIG_SUSPEND_FREEZER=y
345# CONFIG_APM_EMULATION is not set
346CONFIG_PM_RUNTIME=y
347CONFIG_PM_OPS=y
341CONFIG_ARCH_SUSPEND_POSSIBLE=y 348CONFIG_ARCH_SUSPEND_POSSIBLE=y
342CONFIG_NET=y 349CONFIG_NET=y
343 350
@@ -617,7 +624,55 @@ CONFIG_UNIX98_PTYS=y
617# CONFIG_R3964 is not set 624# CONFIG_R3964 is not set
618# CONFIG_RAW_DRIVER is not set 625# CONFIG_RAW_DRIVER is not set
619# CONFIG_TCG_TPM is not set 626# CONFIG_TCG_TPM is not set
620# CONFIG_I2C is not set 627CONFIG_I2C=y
628CONFIG_I2C_BOARDINFO=y
629# CONFIG_I2C_COMPAT is not set
630# CONFIG_I2C_CHARDEV is not set
631# CONFIG_I2C_HELPER_AUTO is not set
632# CONFIG_I2C_SMBUS is not set
633
634#
635# I2C Algorithms
636#
637# CONFIG_I2C_ALGOBIT is not set
638# CONFIG_I2C_ALGOPCF is not set
639# CONFIG_I2C_ALGOPCA is not set
640
641#
642# I2C Hardware Bus support
643#
644
645#
646# I2C system bus drivers (mostly embedded / system-on-chip)
647#
648# CONFIG_I2C_DESIGNWARE is not set
649# CONFIG_I2C_GPIO is not set
650# CONFIG_I2C_OCORES is not set
651CONFIG_I2C_OMAP=y
652# CONFIG_I2C_SIMTEC is not set
653# CONFIG_I2C_XILINX is not set
654
655#
656# External I2C/SMBus adapter drivers
657#
658# CONFIG_I2C_PARPORT_LIGHT is not set
659# CONFIG_I2C_TAOS_EVM is not set
660# CONFIG_I2C_TINY_USB is not set
661
662#
663# Other I2C/SMBus bus drivers
664#
665# CONFIG_I2C_PCA_PLATFORM is not set
666# CONFIG_I2C_STUB is not set
667
668#
669# Miscellaneous I2C Chip support
670#
671# CONFIG_SENSORS_TSL2550 is not set
672# CONFIG_I2C_DEBUG_CORE is not set
673# CONFIG_I2C_DEBUG_ALGO is not set
674# CONFIG_I2C_DEBUG_BUS is not set
675# CONFIG_I2C_DEBUG_CHIP is not set
621CONFIG_SPI=y 676CONFIG_SPI=y
622# CONFIG_SPI_DEBUG is not set 677# CONFIG_SPI_DEBUG is not set
623CONFIG_SPI_MASTER=y 678CONFIG_SPI_MASTER=y
@@ -673,15 +728,44 @@ CONFIG_SSB_POSSIBLE=y
673# Multifunction device drivers 728# Multifunction device drivers
674# 729#
675# CONFIG_MFD_CORE is not set 730# CONFIG_MFD_CORE is not set
731# CONFIG_MFD_88PM860X is not set
676# CONFIG_MFD_SM501 is not set 732# CONFIG_MFD_SM501 is not set
677# CONFIG_MFD_ASIC3 is not set 733# CONFIG_MFD_ASIC3 is not set
678# CONFIG_HTC_EGPIO is not set 734# CONFIG_HTC_EGPIO is not set
679# CONFIG_HTC_PASIC3 is not set 735# CONFIG_HTC_PASIC3 is not set
736# CONFIG_HTC_I2CPLD is not set
737# CONFIG_TPS65010 is not set
738CONFIG_MENELAUS=y
739# CONFIG_TWL4030_CORE is not set
680# CONFIG_MFD_TMIO is not set 740# CONFIG_MFD_TMIO is not set
681# CONFIG_MFD_T7L66XB is not set 741# CONFIG_MFD_T7L66XB is not set
682# CONFIG_MFD_TC6387XB is not set 742# CONFIG_MFD_TC6387XB is not set
683# CONFIG_MFD_TC6393XB is not set 743# CONFIG_MFD_TC6393XB is not set
744# CONFIG_PMIC_DA903X is not set
745# CONFIG_PMIC_ADP5520 is not set
746# CONFIG_MFD_MAX8925 is not set
747# CONFIG_MFD_WM8400 is not set
748# CONFIG_MFD_WM831X is not set
749# CONFIG_MFD_WM8350_I2C is not set
750# CONFIG_MFD_WM8994 is not set
751# CONFIG_MFD_PCF50633 is not set
752# CONFIG_MFD_MC13783 is not set
753# CONFIG_AB3100_CORE is not set
684# CONFIG_EZX_PCAP is not set 754# CONFIG_EZX_PCAP is not set
755# CONFIG_AB4500_CORE is not set
756CONFIG_REGULATOR=y
757# CONFIG_REGULATOR_DEBUG is not set
758# CONFIG_REGULATOR_DUMMY is not set
759# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
760# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
761# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
762# CONFIG_REGULATOR_BQ24022 is not set
763# CONFIG_REGULATOR_MAX1586 is not set
764# CONFIG_REGULATOR_MAX8649 is not set
765# CONFIG_REGULATOR_MAX8660 is not set
766# CONFIG_REGULATOR_LP3971 is not set
767# CONFIG_REGULATOR_TPS65023 is not set
768# CONFIG_REGULATOR_TPS6507X is not set
685# CONFIG_MEDIA_SUPPORT is not set 769# CONFIG_MEDIA_SUPPORT is not set
686 770
687# 771#
@@ -718,7 +802,10 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
718CONFIG_USB_DEVICEFS=y 802CONFIG_USB_DEVICEFS=y
719CONFIG_USB_DEVICE_CLASS=y 803CONFIG_USB_DEVICE_CLASS=y
720# CONFIG_USB_DYNAMIC_MINORS is not set 804# CONFIG_USB_DYNAMIC_MINORS is not set
721# CONFIG_USB_OTG is not set 805CONFIG_USB_SUSPEND=y
806CONFIG_USB_OTG=y
807# CONFIG_USB_OTG_WHITELIST is not set
808# CONFIG_USB_OTG_BLACKLIST_HUB is not set
722# CONFIG_USB_MON is not set 809# CONFIG_USB_MON is not set
723# CONFIG_USB_WUSB is not set 810# CONFIG_USB_WUSB is not set
724# CONFIG_USB_WUSB_CBAF is not set 811# CONFIG_USB_WUSB_CBAF is not set
@@ -737,9 +824,10 @@ CONFIG_USB_DEVICE_CLASS=y
737CONFIG_USB_MUSB_HDRC=y 824CONFIG_USB_MUSB_HDRC=y
738CONFIG_USB_TUSB6010=y 825CONFIG_USB_TUSB6010=y
739# CONFIG_USB_MUSB_HOST is not set 826# CONFIG_USB_MUSB_HOST is not set
740CONFIG_USB_MUSB_PERIPHERAL=y 827# CONFIG_USB_MUSB_PERIPHERAL is not set
741# CONFIG_USB_MUSB_OTG is not set 828CONFIG_USB_MUSB_OTG=y
742CONFIG_USB_GADGET_MUSB_HDRC=y 829CONFIG_USB_GADGET_MUSB_HDRC=y
830CONFIG_USB_MUSB_HDRC_HCD=y
743# CONFIG_MUSB_PIO_ONLY is not set 831# CONFIG_MUSB_PIO_ONLY is not set
744# CONFIG_USB_INVENTRA_DMA is not set 832# CONFIG_USB_INVENTRA_DMA is not set
745# CONFIG_USB_TI_CPPI_DMA is not set 833# CONFIG_USB_TI_CPPI_DMA is not set
@@ -824,44 +912,77 @@ CONFIG_USB_GADGET_DUALSPEED=y
824# CONFIG_USB_ZERO is not set 912# CONFIG_USB_ZERO is not set
825# CONFIG_USB_AUDIO is not set 913# CONFIG_USB_AUDIO is not set
826CONFIG_USB_ETH=y 914CONFIG_USB_ETH=y
827# CONFIG_USB_ETH_RNDIS is not set 915CONFIG_USB_ETH_RNDIS=y
916CONFIG_USB_ETH_EEM=y
828# CONFIG_USB_GADGETFS is not set 917# CONFIG_USB_GADGETFS is not set
829# CONFIG_USB_FILE_STORAGE is not set 918# CONFIG_USB_FILE_STORAGE is not set
919# CONFIG_USB_MASS_STORAGE is not set
830# CONFIG_USB_G_SERIAL is not set 920# CONFIG_USB_G_SERIAL is not set
831# CONFIG_USB_MIDI_GADGET is not set 921# CONFIG_USB_MIDI_GADGET is not set
832# CONFIG_USB_G_PRINTER is not set 922# CONFIG_USB_G_PRINTER is not set
833# CONFIG_USB_CDC_COMPOSITE is not set 923# CONFIG_USB_CDC_COMPOSITE is not set
924# CONFIG_USB_G_NOKIA is not set
925# CONFIG_USB_G_MULTI is not set
834 926
835# 927#
836# OTG and related infrastructure 928# OTG and related infrastructure
837# 929#
838CONFIG_USB_OTG_UTILS=y 930CONFIG_USB_OTG_UTILS=y
839# CONFIG_USB_GPIO_VBUS is not set 931# CONFIG_USB_GPIO_VBUS is not set
932# CONFIG_ISP1301_OMAP is not set
933# CONFIG_USB_ULPI is not set
840CONFIG_NOP_USB_XCEIV=y 934CONFIG_NOP_USB_XCEIV=y
841# CONFIG_MMC is not set 935CONFIG_MMC=y
936# CONFIG_MMC_DEBUG is not set
937# CONFIG_MMC_UNSAFE_RESUME is not set
938
939#
940# MMC/SD/SDIO Card Drivers
941#
942CONFIG_MMC_BLOCK=y
943CONFIG_MMC_BLOCK_BOUNCE=y
944# CONFIG_SDIO_UART is not set
945# CONFIG_MMC_TEST is not set
946
947#
948# MMC/SD/SDIO Host Controller Drivers
949#
950# CONFIG_MMC_SDHCI is not set
951CONFIG_MMC_OMAP=y
952# CONFIG_MMC_SPI is not set
842# CONFIG_MEMSTICK is not set 953# CONFIG_MEMSTICK is not set
843# CONFIG_ACCESSIBILITY is not set
844# CONFIG_NEW_LEDS is not set 954# CONFIG_NEW_LEDS is not set
955# CONFIG_ACCESSIBILITY is not set
845CONFIG_RTC_LIB=y 956CONFIG_RTC_LIB=y
846# CONFIG_RTC_CLASS is not set 957# CONFIG_RTC_CLASS is not set
847# CONFIG_DMADEVICES is not set 958# CONFIG_DMADEVICES is not set
848# CONFIG_AUXDISPLAY is not set 959# CONFIG_AUXDISPLAY is not set
849# CONFIG_REGULATOR is not set
850# CONFIG_UIO is not set 960# CONFIG_UIO is not set
961
962#
963# TI VLYNQ
964#
851# CONFIG_STAGING is not set 965# CONFIG_STAGING is not set
852 966
853# 967#
854# File systems 968# File systems
855# 969#
856# CONFIG_EXT2_FS is not set 970# CONFIG_EXT2_FS is not set
857# CONFIG_EXT3_FS is not set 971CONFIG_EXT3_FS=y
972# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
973CONFIG_EXT3_FS_XATTR=y
974# CONFIG_EXT3_FS_POSIX_ACL is not set
975# CONFIG_EXT3_FS_SECURITY is not set
858# CONFIG_EXT4_FS is not set 976# CONFIG_EXT4_FS is not set
977CONFIG_JBD=y
978CONFIG_FS_MBCACHE=y
859# CONFIG_REISERFS_FS is not set 979# CONFIG_REISERFS_FS is not set
860# CONFIG_JFS_FS is not set 980# CONFIG_JFS_FS is not set
861# CONFIG_FS_POSIX_ACL is not set 981# CONFIG_FS_POSIX_ACL is not set
862# CONFIG_XFS_FS is not set 982# CONFIG_XFS_FS is not set
863# CONFIG_OCFS2_FS is not set 983# CONFIG_OCFS2_FS is not set
864# CONFIG_BTRFS_FS is not set 984# CONFIG_BTRFS_FS is not set
985# CONFIG_NILFS2_FS is not set
865CONFIG_FILE_LOCKING=y 986CONFIG_FILE_LOCKING=y
866CONFIG_FSNOTIFY=y 987CONFIG_FSNOTIFY=y
867CONFIG_DNOTIFY=y 988CONFIG_DNOTIFY=y
@@ -886,8 +1007,11 @@ CONFIG_INOTIFY_USER=y
886# 1007#
887# DOS/FAT/NT Filesystems 1008# DOS/FAT/NT Filesystems
888# 1009#
1010CONFIG_FAT_FS=y
889# CONFIG_MSDOS_FS is not set 1011# CONFIG_MSDOS_FS is not set
890# CONFIG_VFAT_FS is not set 1012CONFIG_VFAT_FS=y
1013CONFIG_FAT_DEFAULT_CODEPAGE=437
1014CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
891# CONFIG_NTFS_FS is not set 1015# CONFIG_NTFS_FS is not set
892 1016
893# 1017#
diff --git a/arch/arm/configs/omap3_beagle_defconfig b/arch/arm/configs/omap3_beagle_defconfig
index c7999f5b1c9a..5a9e95fa728b 100644
--- a/arch/arm/configs/omap3_beagle_defconfig
+++ b/arch/arm/configs/omap3_beagle_defconfig
@@ -324,6 +324,7 @@ CONFIG_PM_SLEEP=y
324CONFIG_SUSPEND=y 324CONFIG_SUSPEND=y
325CONFIG_SUSPEND_FREEZER=y 325CONFIG_SUSPEND_FREEZER=y
326# CONFIG_APM_EMULATION is not set 326# CONFIG_APM_EMULATION is not set
327CONFIG_PM_RUNTIME=y
327CONFIG_ARCH_SUSPEND_POSSIBLE=y 328CONFIG_ARCH_SUSPEND_POSSIBLE=y
328CONFIG_NET=y 329CONFIG_NET=y
329 330
diff --git a/arch/arm/configs/omap3_defconfig b/arch/arm/configs/omap3_defconfig
index 714835e5ebec..d6ad92177324 100644
--- a/arch/arm/configs/omap3_defconfig
+++ b/arch/arm/configs/omap3_defconfig
@@ -450,7 +450,7 @@ CONFIG_SUSPEND=y
450# CONFIG_PM_TEST_SUSPEND is not set 450# CONFIG_PM_TEST_SUSPEND is not set
451CONFIG_SUSPEND_FREEZER=y 451CONFIG_SUSPEND_FREEZER=y
452# CONFIG_APM_EMULATION is not set 452# CONFIG_APM_EMULATION is not set
453# CONFIG_PM_RUNTIME is not set 453CONFIG_PM_RUNTIME=y
454CONFIG_ARCH_SUSPEND_POSSIBLE=y 454CONFIG_ARCH_SUSPEND_POSSIBLE=y
455CONFIG_NET=y 455CONFIG_NET=y
456 456
diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig
index e2ad859fbec6..a6dd6d1af806 100644
--- a/arch/arm/configs/omap3_evm_defconfig
+++ b/arch/arm/configs/omap3_evm_defconfig
@@ -340,6 +340,7 @@ CONFIG_PM_SLEEP=y
340CONFIG_SUSPEND=y 340CONFIG_SUSPEND=y
341CONFIG_SUSPEND_FREEZER=y 341CONFIG_SUSPEND_FREEZER=y
342# CONFIG_APM_EMULATION is not set 342# CONFIG_APM_EMULATION is not set
343CONFIG_PM_RUNTIME=y
343CONFIG_ARCH_SUSPEND_POSSIBLE=y 344CONFIG_ARCH_SUSPEND_POSSIBLE=y
344CONFIG_NET=y 345CONFIG_NET=y
345 346
diff --git a/arch/arm/configs/omap3_touchbook_defconfig b/arch/arm/configs/omap3_touchbook_defconfig
index 74fe6be9c5ec..968fbaa8f04d 100644
--- a/arch/arm/configs/omap3_touchbook_defconfig
+++ b/arch/arm/configs/omap3_touchbook_defconfig
@@ -368,7 +368,7 @@ CONFIG_SUSPEND=y
368# CONFIG_PM_TEST_SUSPEND is not set 368# CONFIG_PM_TEST_SUSPEND is not set
369CONFIG_SUSPEND_FREEZER=y 369CONFIG_SUSPEND_FREEZER=y
370# CONFIG_APM_EMULATION is not set 370# CONFIG_APM_EMULATION is not set
371# CONFIG_PM_RUNTIME is not set 371CONFIG_PM_RUNTIME=y
372CONFIG_ARCH_SUSPEND_POSSIBLE=y 372CONFIG_ARCH_SUSPEND_POSSIBLE=y
373CONFIG_NET=y 373CONFIG_NET=y
374 374
diff --git a/arch/arm/configs/omap_3430sdp_defconfig b/arch/arm/configs/omap_3430sdp_defconfig
index bb2917e5cb47..ddde429a7d9b 100644
--- a/arch/arm/configs/omap_3430sdp_defconfig
+++ b/arch/arm/configs/omap_3430sdp_defconfig
@@ -363,6 +363,7 @@ CONFIG_PM_SLEEP=y
363CONFIG_SUSPEND=y 363CONFIG_SUSPEND=y
364CONFIG_SUSPEND_FREEZER=y 364CONFIG_SUSPEND_FREEZER=y
365# CONFIG_APM_EMULATION is not set 365# CONFIG_APM_EMULATION is not set
366CONFIG_PM_RUNTIME=y
366CONFIG_ARCH_SUSPEND_POSSIBLE=y 367CONFIG_ARCH_SUSPEND_POSSIBLE=y
367CONFIG_NET=y 368CONFIG_NET=y
368 369
diff --git a/arch/arm/configs/omap_3630sdp_defconfig b/arch/arm/configs/omap_3630sdp_defconfig
index d25c3d4424ca..609f348b1055 100644
--- a/arch/arm/configs/omap_3630sdp_defconfig
+++ b/arch/arm/configs/omap_3630sdp_defconfig
@@ -361,7 +361,7 @@ CONFIG_SUSPEND=y
361# CONFIG_PM_TEST_SUSPEND is not set 361# CONFIG_PM_TEST_SUSPEND is not set
362CONFIG_SUSPEND_FREEZER=y 362CONFIG_SUSPEND_FREEZER=y
363# CONFIG_APM_EMULATION is not set 363# CONFIG_APM_EMULATION is not set
364# CONFIG_PM_RUNTIME is not set 364CONFIG_PM_RUNTIME=y
365CONFIG_ARCH_SUSPEND_POSSIBLE=y 365CONFIG_ARCH_SUSPEND_POSSIBLE=y
366CONFIG_NET=y 366CONFIG_NET=y
367 367
diff --git a/arch/arm/configs/omap_h2_1610_defconfig b/arch/arm/configs/omap_h2_1610_defconfig
index 523189586a4b..91ef2ed0f80a 100644
--- a/arch/arm/configs/omap_h2_1610_defconfig
+++ b/arch/arm/configs/omap_h2_1610_defconfig
@@ -331,6 +331,7 @@ CONFIG_PM_SLEEP=y
331CONFIG_SUSPEND=y 331CONFIG_SUSPEND=y
332CONFIG_SUSPEND_FREEZER=y 332CONFIG_SUSPEND_FREEZER=y
333# CONFIG_APM_EMULATION is not set 333# CONFIG_APM_EMULATION is not set
334CONFIG_PM_RUNTIME=y
334CONFIG_ARCH_SUSPEND_POSSIBLE=y 335CONFIG_ARCH_SUSPEND_POSSIBLE=y
335 336
336# 337#
diff --git a/arch/arm/configs/omap_zoom2_defconfig b/arch/arm/configs/omap_zoom2_defconfig
index a82e81332a03..f5c6e11cf189 100644
--- a/arch/arm/configs/omap_zoom2_defconfig
+++ b/arch/arm/configs/omap_zoom2_defconfig
@@ -343,6 +343,7 @@ CONFIG_SUSPEND=y
343# CONFIG_PM_TEST_SUSPEND is not set 343# CONFIG_PM_TEST_SUSPEND is not set
344CONFIG_SUSPEND_FREEZER=y 344CONFIG_SUSPEND_FREEZER=y
345# CONFIG_APM_EMULATION is not set 345# CONFIG_APM_EMULATION is not set
346CONFIG_PM_RUNTIME=y
346CONFIG_ARCH_SUSPEND_POSSIBLE=y 347CONFIG_ARCH_SUSPEND_POSSIBLE=y
347CONFIG_NET=y 348CONFIG_NET=y
348 349
diff --git a/arch/arm/configs/omap_zoom3_defconfig b/arch/arm/configs/omap_zoom3_defconfig
index ff8ac3dcc31d..ea9a5012d332 100644
--- a/arch/arm/configs/omap_zoom3_defconfig
+++ b/arch/arm/configs/omap_zoom3_defconfig
@@ -361,7 +361,7 @@ CONFIG_SUSPEND=y
361# CONFIG_PM_TEST_SUSPEND is not set 361# CONFIG_PM_TEST_SUSPEND is not set
362CONFIG_SUSPEND_FREEZER=y 362CONFIG_SUSPEND_FREEZER=y
363# CONFIG_APM_EMULATION is not set 363# CONFIG_APM_EMULATION is not set
364# CONFIG_PM_RUNTIME is not set 364CONFIG_PM_RUNTIME=y
365CONFIG_ARCH_SUSPEND_POSSIBLE=y 365CONFIG_ARCH_SUSPEND_POSSIBLE=y
366CONFIG_NET=y 366CONFIG_NET=y
367 367
diff --git a/arch/arm/configs/rx51_defconfig b/arch/arm/configs/rx51_defconfig
index 193bd334fbbf..45135ffadc57 100644
--- a/arch/arm/configs/rx51_defconfig
+++ b/arch/arm/configs/rx51_defconfig
@@ -322,6 +322,7 @@ CONFIG_PM_SLEEP=y
322CONFIG_SUSPEND=y 322CONFIG_SUSPEND=y
323CONFIG_SUSPEND_FREEZER=y 323CONFIG_SUSPEND_FREEZER=y
324# CONFIG_APM_EMULATION is not set 324# CONFIG_APM_EMULATION is not set
325CONFIG_PM_RUNTIME=y
325CONFIG_ARCH_SUSPEND_POSSIBLE=y 326CONFIG_ARCH_SUSPEND_POSSIBLE=y
326CONFIG_NET=y 327CONFIG_NET=y
327 328
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index a399bb5730f1..bff056489cc1 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -98,6 +98,7 @@ extern int elf_check_arch(const struct elf32_hdr *);
98extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int); 98extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int);
99#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk) 99#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk)
100 100
101struct task_struct;
101int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs); 102int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
102#define ELF_CORE_COPY_TASK_REGS dump_task_regs 103#define ELF_CORE_COPY_TASK_REGS dump_task_regs
103 104
diff --git a/arch/arm/include/asm/pgtable-nommu.h b/arch/arm/include/asm/pgtable-nommu.h
index 013cfcdc4839..ffc0e85775b4 100644
--- a/arch/arm/include/asm/pgtable-nommu.h
+++ b/arch/arm/include/asm/pgtable-nommu.h
@@ -67,6 +67,7 @@ static inline int pte_file(pte_t pte) { return 0; }
67 */ 67 */
68#define pgprot_noncached(prot) __pgprot(0) 68#define pgprot_noncached(prot) __pgprot(0)
69#define pgprot_writecombine(prot) __pgprot(0) 69#define pgprot_writecombine(prot) __pgprot(0)
70#define pgprot_dmacoherent(prot) __pgprot(0)
70 71
71 72
72/* 73/*
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 7e9ed1eea40a..d93f976fb389 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -102,6 +102,8 @@
102 .else 102 .else
103 ldmdb sp, {r0 - lr}^ @ get calling r0 - lr 103 ldmdb sp, {r0 - lr}^ @ get calling r0 - lr
104 .endif 104 .endif
105 mov r0, r0 @ ARMv5T and earlier require a nop
106 @ after ldm {}^
105 add sp, sp, #S_FRAME_SIZE - S_PC 107 add sp, sp, #S_FRAME_SIZE - S_PC
106 movs pc, lr @ return & move spsr_svc into cpsr 108 movs pc, lr @ return & move spsr_svc into cpsr
107 .endm 109 .endm
diff --git a/arch/arm/kernel/kgdb.c b/arch/arm/kernel/kgdb.c
index ba8ccfede964..a5b846b9895d 100644
--- a/arch/arm/kernel/kgdb.c
+++ b/arch/arm/kernel/kgdb.c
@@ -9,6 +9,7 @@
9 * Authors: George Davis <davis_g@mvista.com> 9 * Authors: George Davis <davis_g@mvista.com>
10 * Deepak Saxena <dsaxena@plexity.net> 10 * Deepak Saxena <dsaxena@plexity.net>
11 */ 11 */
12#include <linux/irq.h>
12#include <linux/kgdb.h> 13#include <linux/kgdb.h>
13#include <asm/traps.h> 14#include <asm/traps.h>
14 15
@@ -158,6 +159,18 @@ static struct undef_hook kgdb_compiled_brkpt_hook = {
158 .fn = kgdb_compiled_brk_fn 159 .fn = kgdb_compiled_brk_fn
159}; 160};
160 161
162static void kgdb_call_nmi_hook(void *ignored)
163{
164 kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
165}
166
167void kgdb_roundup_cpus(unsigned long flags)
168{
169 local_irq_enable();
170 smp_call_function(kgdb_call_nmi_hook, NULL, 0);
171 local_irq_disable();
172}
173
161/** 174/**
162 * kgdb_arch_init - Perform any architecture specific initalization. 175 * kgdb_arch_init - Perform any architecture specific initalization.
163 * 176 *
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index 3875d99cc40f..9e70f2053f9a 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -332,7 +332,8 @@ armpmu_reserve_hardware(void)
332 332
333 for (i = 0; i < pmu_irqs->num_irqs; ++i) { 333 for (i = 0; i < pmu_irqs->num_irqs; ++i) {
334 err = request_irq(pmu_irqs->irqs[i], armpmu->handle_irq, 334 err = request_irq(pmu_irqs->irqs[i], armpmu->handle_irq,
335 IRQF_DISABLED, "armpmu", NULL); 335 IRQF_DISABLED | IRQF_NOBALANCING,
336 "armpmu", NULL);
336 if (err) { 337 if (err) {
337 pr_warning("unable to request IRQ%d for ARM " 338 pr_warning("unable to request IRQ%d for ARM "
338 "perf counters\n", pmu_irqs->irqs[i]); 339 "perf counters\n", pmu_irqs->irqs[i]);
@@ -1624,7 +1625,7 @@ enum armv7_counters {
1624/* 1625/*
1625 * EVTSEL: Event selection reg 1626 * EVTSEL: Event selection reg
1626 */ 1627 */
1627#define ARMV7_EVTSEL_MASK 0x7f /* Mask for writable bits */ 1628#define ARMV7_EVTSEL_MASK 0xff /* Mask for writable bits */
1628 1629
1629/* 1630/*
1630 * SELECT: Counter selection reg 1631 * SELECT: Counter selection reg
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 57162af53dc9..577543f3857f 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -99,6 +99,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
99 *pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) | 99 *pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) |
100 PMD_TYPE_SECT | PMD_SECT_AP_WRITE); 100 PMD_TYPE_SECT | PMD_SECT_AP_WRITE);
101 flush_pmd_entry(pmd); 101 flush_pmd_entry(pmd);
102 outer_clean_range(__pa(pmd), __pa(pmd + 1));
102 103
103 /* 104 /*
104 * We need to tell the secondary core where to find 105 * We need to tell the secondary core where to find
@@ -106,7 +107,8 @@ int __cpuinit __cpu_up(unsigned int cpu)
106 */ 107 */
107 secondary_data.stack = task_stack_page(idle) + THREAD_START_SP; 108 secondary_data.stack = task_stack_page(idle) + THREAD_START_SP;
108 secondary_data.pgdir = virt_to_phys(pgd); 109 secondary_data.pgdir = virt_to_phys(pgd);
109 wmb(); 110 __cpuc_flush_dcache_area(&secondary_data, sizeof(secondary_data));
111 outer_clean_range(__pa(&secondary_data), __pa(&secondary_data + 1));
110 112
111 /* 113 /*
112 * Now bring the CPU into our world. 114 * Now bring the CPU into our world.
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c
index 29cf83177484..c11fd47aec5d 100644
--- a/arch/arm/mach-at91/board-sam9g20ek.c
+++ b/arch/arm/mach-at91/board-sam9g20ek.c
@@ -271,10 +271,12 @@ static void __init ek_add_device_buttons(void) {}
271 271
272 272
273static struct i2c_board_info __initdata ek_i2c_devices[] = { 273static struct i2c_board_info __initdata ek_i2c_devices[] = {
274 { 274 {
275 I2C_BOARD_INFO("24c512", 0x50), 275 I2C_BOARD_INFO("24c512", 0x50)
276 I2C_BOARD_INFO("wm8731", 0x1b), 276 },
277 }, 277 {
278 I2C_BOARD_INFO("wm8731", 0x1b)
279 },
278}; 280};
279 281
280 282
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
index 3872af1cf2c3..9a2911e004a3 100644
--- a/arch/arm/mach-mx3/Kconfig
+++ b/arch/arm/mach-mx3/Kconfig
@@ -62,6 +62,15 @@ config MACH_MX31_3DS
62 Include support for MX31PDK (3DS) platform. This includes specific 62 Include support for MX31PDK (3DS) platform. This includes specific
63 configurations for the board and its peripherals. 63 configurations for the board and its peripherals.
64 64
65config MACH_MX31_3DS_MXC_NAND_USE_BBT
66 bool "Make the MXC NAND driver use the in flash Bad Block Table"
67 depends on MACH_MX31_3DS
68 depends on MTD_NAND_MXC
69 help
70 Enable this if you want that the MXC NAND driver uses the in flash
71 Bad Block Table to know what blocks are bad instead of scanning the
72 entire flash looking for bad block markers.
73
65config MACH_MX31MOBOARD 74config MACH_MX31MOBOARD
66 bool "Support mx31moboard platforms (EPFL Mobots group)" 75 bool "Support mx31moboard platforms (EPFL Mobots group)"
67 select ARCH_MX31 76 select ARCH_MX31
diff --git a/arch/arm/mach-mx3/clock-imx31.c b/arch/arm/mach-mx3/clock-imx31.c
index 80dba9966b5e..9a9eb6de6127 100644
--- a/arch/arm/mach-mx3/clock-imx31.c
+++ b/arch/arm/mach-mx3/clock-imx31.c
@@ -468,6 +468,7 @@ static struct clk ahb_clk = {
468 } 468 }
469 469
470DEFINE_CLOCK(perclk_clk, 0, NULL, 0, NULL, NULL, &ipg_clk); 470DEFINE_CLOCK(perclk_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
471DEFINE_CLOCK(ckil_clk, 0, NULL, 0, clk_ckil_get_rate, NULL, NULL);
471 472
472DEFINE_CLOCK(sdhc1_clk, 0, MXC_CCM_CGR0, 0, NULL, NULL, &perclk_clk); 473DEFINE_CLOCK(sdhc1_clk, 0, MXC_CCM_CGR0, 0, NULL, NULL, &perclk_clk);
473DEFINE_CLOCK(sdhc2_clk, 1, MXC_CCM_CGR0, 2, NULL, NULL, &perclk_clk); 474DEFINE_CLOCK(sdhc2_clk, 1, MXC_CCM_CGR0, 2, NULL, NULL, &perclk_clk);
@@ -490,7 +491,7 @@ DEFINE_CLOCK(mpeg4_clk, 0, MXC_CCM_CGR1, 0, NULL, NULL, &ahb_clk);
490DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk); 491DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk);
491DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk); 492DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk);
492DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &serial_pll_clk); 493DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &serial_pll_clk);
493DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ipg_clk); 494DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ckil_clk);
494DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk); 495DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk);
495DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk); 496DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk);
496DEFINE_CLOCK(usb_clk2, 0, MXC_CCM_CGR1, 18, usb_get_rate, NULL, &ahb_clk); 497DEFINE_CLOCK(usb_clk2, 0, MXC_CCM_CGR1, 18, usb_get_rate, NULL, &ahb_clk);
@@ -514,7 +515,6 @@ DEFINE_CLOCK(usb_clk1, 0, NULL, 0, usb_get_rate, NULL, &usb_pll_clk)
514DEFINE_CLOCK(nfc_clk, 0, NULL, 0, nfc_get_rate, NULL, &ahb_clk); 515DEFINE_CLOCK(nfc_clk, 0, NULL, 0, nfc_get_rate, NULL, &ahb_clk);
515DEFINE_CLOCK(scc_clk, 0, NULL, 0, NULL, NULL, &ipg_clk); 516DEFINE_CLOCK(scc_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
516DEFINE_CLOCK(ipg_clk, 0, NULL, 0, ipg_get_rate, NULL, &ahb_clk); 517DEFINE_CLOCK(ipg_clk, 0, NULL, 0, ipg_get_rate, NULL, &ahb_clk);
517DEFINE_CLOCK(ckil_clk, 0, NULL, 0, clk_ckil_get_rate, NULL, NULL);
518 518
519#define _REGISTER_CLOCK(d, n, c) \ 519#define _REGISTER_CLOCK(d, n, c) \
520 { \ 520 { \
@@ -572,7 +572,6 @@ static struct clk_lookup lookups[] = {
572 _REGISTER_CLOCK(NULL, "iim", iim_clk) 572 _REGISTER_CLOCK(NULL, "iim", iim_clk)
573 _REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk) 573 _REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk)
574 _REGISTER_CLOCK(NULL, "mbx", mbx_clk) 574 _REGISTER_CLOCK(NULL, "mbx", mbx_clk)
575 _REGISTER_CLOCK("mxc_rtc", NULL, ckil_clk)
576}; 575};
577 576
578int __init mx31_clocks_init(unsigned long fref) 577int __init mx31_clocks_init(unsigned long fref)
diff --git a/arch/arm/mach-mx3/mach-mx31_3ds.c b/arch/arm/mach-mx3/mach-mx31_3ds.c
index b88c18ad7698..f54af1e29ca4 100644
--- a/arch/arm/mach-mx3/mach-mx31_3ds.c
+++ b/arch/arm/mach-mx3/mach-mx31_3ds.c
@@ -23,6 +23,9 @@
23#include <linux/gpio.h> 23#include <linux/gpio.h>
24#include <linux/smsc911x.h> 24#include <linux/smsc911x.h>
25#include <linux/platform_device.h> 25#include <linux/platform_device.h>
26#include <linux/mfd/mc13783.h>
27#include <linux/spi/spi.h>
28#include <linux/regulator/machine.h>
26 29
27#include <mach/hardware.h> 30#include <mach/hardware.h>
28#include <asm/mach-types.h> 31#include <asm/mach-types.h>
@@ -31,26 +34,96 @@
31#include <asm/memory.h> 34#include <asm/memory.h>
32#include <asm/mach/map.h> 35#include <asm/mach/map.h>
33#include <mach/common.h> 36#include <mach/common.h>
34#include <mach/board-mx31pdk.h> 37#include <mach/board-mx31_3ds.h>
35#include <mach/imx-uart.h> 38#include <mach/imx-uart.h>
36#include <mach/iomux-mx3.h> 39#include <mach/iomux-mx3.h>
40#include <mach/mxc_nand.h>
41#include <mach/spi.h>
37#include "devices.h" 42#include "devices.h"
38 43
39/*! 44/*!
40 * @file mx31pdk.c 45 * @file mx31_3ds.c
41 * 46 *
42 * @brief This file contains the board-specific initialization routines. 47 * @brief This file contains the board-specific initialization routines.
43 * 48 *
44 * @ingroup System 49 * @ingroup System
45 */ 50 */
46 51
47static int mx31pdk_pins[] = { 52static int mx31_3ds_pins[] = {
48 /* UART1 */ 53 /* UART1 */
49 MX31_PIN_CTS1__CTS1, 54 MX31_PIN_CTS1__CTS1,
50 MX31_PIN_RTS1__RTS1, 55 MX31_PIN_RTS1__RTS1,
51 MX31_PIN_TXD1__TXD1, 56 MX31_PIN_TXD1__TXD1,
52 MX31_PIN_RXD1__RXD1, 57 MX31_PIN_RXD1__RXD1,
53 IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO), 58 IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO),
59 /* SPI 1 */
60 MX31_PIN_CSPI2_SCLK__SCLK,
61 MX31_PIN_CSPI2_MOSI__MOSI,
62 MX31_PIN_CSPI2_MISO__MISO,
63 MX31_PIN_CSPI2_SPI_RDY__SPI_RDY,
64 MX31_PIN_CSPI2_SS0__SS0,
65 MX31_PIN_CSPI2_SS2__SS2, /*CS for MC13783 */
66 /* MC13783 IRQ */
67 IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO),
68};
69
70/* Regulators */
71static struct regulator_init_data pwgtx_init = {
72 .constraints = {
73 .boot_on = 1,
74 .always_on = 1,
75 },
76};
77
78static struct mc13783_regulator_init_data mx31_3ds_regulators[] = {
79 {
80 .id = MC13783_REGU_PWGT1SPI, /* Power Gate for ARM core. */
81 .init_data = &pwgtx_init,
82 }, {
83 .id = MC13783_REGU_PWGT2SPI, /* Power Gate for L2 Cache. */
84 .init_data = &pwgtx_init,
85 },
86};
87
88/* MC13783 */
89static struct mc13783_platform_data mc13783_pdata __initdata = {
90 .regulators = mx31_3ds_regulators,
91 .num_regulators = ARRAY_SIZE(mx31_3ds_regulators),
92 .flags = MC13783_USE_REGULATOR,
93};
94
95/* SPI */
96static int spi1_internal_chipselect[] = {
97 MXC_SPI_CS(0),
98 MXC_SPI_CS(2),
99};
100
101static struct spi_imx_master spi1_pdata = {
102 .chipselect = spi1_internal_chipselect,
103 .num_chipselect = ARRAY_SIZE(spi1_internal_chipselect),
104};
105
106static struct spi_board_info mx31_3ds_spi_devs[] __initdata = {
107 {
108 .modalias = "mc13783",
109 .max_speed_hz = 1000000,
110 .bus_num = 1,
111 .chip_select = 1, /* SS2 */
112 .platform_data = &mc13783_pdata,
113 .irq = IOMUX_TO_IRQ(MX31_PIN_GPIO1_3),
114 .mode = SPI_CS_HIGH,
115 },
116};
117
118/*
119 * NAND Flash
120 */
121static struct mxc_nand_platform_data imx31_3ds_nand_flash_pdata = {
122 .width = 1,
123 .hw_ecc = 1,
124#ifdef MACH_MX31_3DS_MXC_NAND_USE_BBT
125 .flash_bbt = 1,
126#endif
54}; 127};
55 128
56static struct imxuart_platform_data uart_pdata = { 129static struct imxuart_platform_data uart_pdata = {
@@ -95,7 +168,7 @@ static struct platform_device smsc911x_device = {
95 * LEDs, switches, interrupts for Ethernet. 168 * LEDs, switches, interrupts for Ethernet.
96 */ 169 */
97 170
98static void mx31pdk_expio_irq_handler(uint32_t irq, struct irq_desc *desc) 171static void mx31_3ds_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
99{ 172{
100 uint32_t imr_val; 173 uint32_t imr_val;
101 uint32_t int_valid; 174 uint32_t int_valid;
@@ -163,7 +236,7 @@ static struct irq_chip expio_irq_chip = {
163 .unmask = expio_unmask_irq, 236 .unmask = expio_unmask_irq,
164}; 237};
165 238
166static int __init mx31pdk_init_expio(void) 239static int __init mx31_3ds_init_expio(void)
167{ 240{
168 int i; 241 int i;
169 int ret; 242 int ret;
@@ -176,7 +249,7 @@ static int __init mx31pdk_init_expio(void)
176 return -ENODEV; 249 return -ENODEV;
177 } 250 }
178 251
179 pr_info("i.MX31PDK Debug board detected, rev = 0x%04X\n", 252 pr_info("i.MX31 3DS Debug board detected, rev = 0x%04X\n",
180 __raw_readw(CPLD_CODE_VER_REG)); 253 __raw_readw(CPLD_CODE_VER_REG));
181 254
182 /* 255 /*
@@ -201,7 +274,7 @@ static int __init mx31pdk_init_expio(void)
201 set_irq_flags(i, IRQF_VALID); 274 set_irq_flags(i, IRQF_VALID);
202 } 275 }
203 set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW); 276 set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
204 set_irq_chained_handler(EXPIO_PARENT_INT, mx31pdk_expio_irq_handler); 277 set_irq_chained_handler(EXPIO_PARENT_INT, mx31_3ds_expio_irq_handler);
205 278
206 return 0; 279 return 0;
207} 280}
@@ -209,7 +282,7 @@ static int __init mx31pdk_init_expio(void)
209/* 282/*
210 * This structure defines the MX31 memory map. 283 * This structure defines the MX31 memory map.
211 */ 284 */
212static struct map_desc mx31pdk_io_desc[] __initdata = { 285static struct map_desc mx31_3ds_io_desc[] __initdata = {
213 { 286 {
214 .virtual = MX31_CS5_BASE_ADDR_VIRT, 287 .virtual = MX31_CS5_BASE_ADDR_VIRT,
215 .pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR), 288 .pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
@@ -221,10 +294,10 @@ static struct map_desc mx31pdk_io_desc[] __initdata = {
221/* 294/*
222 * Set up static virtual mappings. 295 * Set up static virtual mappings.
223 */ 296 */
224static void __init mx31pdk_map_io(void) 297static void __init mx31_3ds_map_io(void)
225{ 298{
226 mx31_map_io(); 299 mx31_map_io();
227 iotable_init(mx31pdk_io_desc, ARRAY_SIZE(mx31pdk_io_desc)); 300 iotable_init(mx31_3ds_io_desc, ARRAY_SIZE(mx31_3ds_io_desc));
228} 301}
229 302
230/*! 303/*!
@@ -232,35 +305,40 @@ static void __init mx31pdk_map_io(void)
232 */ 305 */
233static void __init mxc_board_init(void) 306static void __init mxc_board_init(void)
234{ 307{
235 mxc_iomux_setup_multiple_pins(mx31pdk_pins, ARRAY_SIZE(mx31pdk_pins), 308 mxc_iomux_setup_multiple_pins(mx31_3ds_pins, ARRAY_SIZE(mx31_3ds_pins),
236 "mx31pdk"); 309 "mx31_3ds");
237 310
238 mxc_register_device(&mxc_uart_device0, &uart_pdata); 311 mxc_register_device(&mxc_uart_device0, &uart_pdata);
312 mxc_register_device(&mxc_nand_device, &imx31_3ds_nand_flash_pdata);
313
314 mxc_register_device(&mxc_spi_device1, &spi1_pdata);
315 spi_register_board_info(mx31_3ds_spi_devs,
316 ARRAY_SIZE(mx31_3ds_spi_devs));
239 317
240 if (!mx31pdk_init_expio()) 318 if (!mx31_3ds_init_expio())
241 platform_device_register(&smsc911x_device); 319 platform_device_register(&smsc911x_device);
242} 320}
243 321
244static void __init mx31pdk_timer_init(void) 322static void __init mx31_3ds_timer_init(void)
245{ 323{
246 mx31_clocks_init(26000000); 324 mx31_clocks_init(26000000);
247} 325}
248 326
249static struct sys_timer mx31pdk_timer = { 327static struct sys_timer mx31_3ds_timer = {
250 .init = mx31pdk_timer_init, 328 .init = mx31_3ds_timer_init,
251}; 329};
252 330
253/* 331/*
254 * The following uses standard kernel macros defined in arch.h in order to 332 * The following uses standard kernel macros defined in arch.h in order to
255 * initialize __mach_desc_MX31PDK data structure. 333 * initialize __mach_desc_MX31_3DS data structure.
256 */ 334 */
257MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)") 335MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")
258 /* Maintainer: Freescale Semiconductor, Inc. */ 336 /* Maintainer: Freescale Semiconductor, Inc. */
259 .phys_io = MX31_AIPS1_BASE_ADDR, 337 .phys_io = MX31_AIPS1_BASE_ADDR,
260 .io_pg_offst = (MX31_AIPS1_BASE_ADDR_VIRT >> 18) & 0xfffc, 338 .io_pg_offst = (MX31_AIPS1_BASE_ADDR_VIRT >> 18) & 0xfffc,
261 .boot_params = MX3x_PHYS_OFFSET + 0x100, 339 .boot_params = MX3x_PHYS_OFFSET + 0x100,
262 .map_io = mx31pdk_map_io, 340 .map_io = mx31_3ds_map_io,
263 .init_irq = mx31_init_irq, 341 .init_irq = mx31_init_irq,
264 .init_machine = mxc_board_init, 342 .init_machine = mxc_board_init,
265 .timer = &mx31pdk_timer, 343 .timer = &mx31_3ds_timer,
266MACHINE_END 344MACHINE_END
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 2069fb33baaa..4b9fc57770db 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -22,6 +22,9 @@ obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
22# SMP support ONLY available for OMAP4 22# SMP support ONLY available for OMAP4
23obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o 23obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
24obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o 24obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o
25obj-$(CONFIG_ARCH_OMAP4) += omap44xx-smc.o
26
27AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a
25 28
26# Functions loaded to SRAM 29# Functions loaded to SRAM
27obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o 30obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index a101029ceb6f..5822bcf7b15f 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -648,7 +648,7 @@ static void enable_board_wakeup_source(void)
648 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); 648 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
649} 649}
650 650
651static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 651static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
652 652
653 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 653 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
654 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 654 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c
index 4386d2b4a785..a0a2a113465c 100644
--- a/arch/arm/mach-omap2/board-3630sdp.c
+++ b/arch/arm/mach-omap2/board-3630sdp.c
@@ -54,7 +54,7 @@ static void enable_board_wakeup_source(void)
54 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); 54 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
55} 55}
56 56
57static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 57static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
58 58
59 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 59 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
60 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 60 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 180ac112e527..b88f28c5814b 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -50,33 +50,9 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = {
50}; 50};
51 51
52#ifdef CONFIG_CACHE_L2X0 52#ifdef CONFIG_CACHE_L2X0
53noinline void omap_smc1(u32 fn, u32 arg)
54{
55 register u32 r12 asm("r12") = fn;
56 register u32 r0 asm("r0") = arg;
57
58 /* This is common routine cache secure monitor API used to
59 * modify the PL310 secure registers.
60 * r0 contains the value to be modified and "r12" contains
61 * the monitor API number. It uses few CPU registers
62 * internally and hence they need be backed up including
63 * link register "lr".
64 * Explicitly save r11 and r12 the compiler generated code
65 * won't save it.
66 */
67 asm volatile(
68 "stmfd r13!, {r11,r12}\n"
69 "dsb\n"
70 "smc\n"
71 "ldmfd r13!, {r11,r12}\n"
72 : "+r" (r0), "+r" (r12)
73 :
74 : "r4", "r5", "r10", "lr", "cc");
75}
76EXPORT_SYMBOL(omap_smc1);
77
78static int __init omap_l2_cache_init(void) 53static int __init omap_l2_cache_init(void)
79{ 54{
55 extern void omap_smc1(u32 fn, u32 arg);
80 void __iomem *l2cache_base; 56 void __iomem *l2cache_base;
81 57
82 /* To avoid code running on other OMAPs in 58 /* To avoid code running on other OMAPs in
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index 70c18614773c..6ae880585d54 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -273,7 +273,7 @@ static void __init am3517_evm_init_irq(void)
273 omap_gpio_init(); 273 omap_gpio_init();
274} 274}
275 275
276static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = { 276static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
277 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 277 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
278 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 278 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
279 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 279 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index afa77caaff4d..2de4f79f03a0 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -612,7 +612,7 @@ static struct omap2_hsmmc_info mmc[] = {
612 {} /* Terminator */ 612 {} /* Terminator */
613}; 613};
614 614
615static struct ehci_hcd_omap_platform_data ehci_pdata = { 615static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
616 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 616 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
617 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 617 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
618 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 618 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 371019054b49..5bfc13b3176c 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -636,7 +636,7 @@ static struct omap_musb_board_data musb_board_data = {
636 .power = 100, 636 .power = 100,
637}; 637};
638 638
639static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 639static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
640 640
641 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 641 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
642 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 642 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 9958987a3d0a..3c7789d45051 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -16,7 +16,6 @@
16#include <linux/clk.h> 16#include <linux/clk.h>
17#include <linux/io.h> 17#include <linux/io.h>
18#include <linux/gpio.h> 18#include <linux/gpio.h>
19#include <linux/leds.h>
20#include <linux/interrupt.h> 19#include <linux/interrupt.h>
21 20
22#include <linux/regulator/machine.h> 21#include <linux/regulator/machine.h>
@@ -39,8 +38,8 @@
39#define IGEP2_SMSC911X_CS 5 38#define IGEP2_SMSC911X_CS 5
40#define IGEP2_SMSC911X_GPIO 176 39#define IGEP2_SMSC911X_GPIO 176
41#define IGEP2_GPIO_USBH_NRESET 24 40#define IGEP2_GPIO_USBH_NRESET 24
42#define IGEP2_GPIO_LED0_RED 26 41#define IGEP2_GPIO_LED0_GREEN 26
43#define IGEP2_GPIO_LED0_GREEN 27 42#define IGEP2_GPIO_LED0_RED 27
44#define IGEP2_GPIO_LED1_RED 28 43#define IGEP2_GPIO_LED1_RED 28
45#define IGEP2_GPIO_DVI_PUP 170 44#define IGEP2_GPIO_DVI_PUP 170
46#define IGEP2_GPIO_WIFI_NPD 94 45#define IGEP2_GPIO_WIFI_NPD 94
@@ -355,34 +354,50 @@ static void __init igep2_display_init(void)
355 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1)) 354 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1))
356 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n"); 355 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
357} 356}
358#ifdef CONFIG_LEDS_TRIGGERS 357
359static struct gpio_led gpio_leds[] = { 358#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
359#include <linux/leds.h>
360
361static struct gpio_led igep2_gpio_leds[] = {
360 { 362 {
361 .name = "GPIO_LED1_RED", 363 .name = "led0:red",
364 .gpio = IGEP2_GPIO_LED0_RED,
365 },
366 {
367 .name = "led0:green",
362 .default_trigger = "heartbeat", 368 .default_trigger = "heartbeat",
369 .gpio = IGEP2_GPIO_LED0_GREEN,
370 },
371 {
372 .name = "led1:red",
363 .gpio = IGEP2_GPIO_LED1_RED, 373 .gpio = IGEP2_GPIO_LED1_RED,
364 }, 374 },
365}; 375};
366 376
367static struct gpio_led_platform_data gpio_leds_info = { 377static struct gpio_led_platform_data igep2_led_pdata = {
368 .leds = gpio_leds, 378 .leds = igep2_gpio_leds,
369 .num_leds = ARRAY_SIZE(gpio_leds), 379 .num_leds = ARRAY_SIZE(igep2_gpio_leds),
370}; 380};
371 381
372static struct platform_device leds_gpio = { 382static struct platform_device igep2_led_device = {
373 .name = "leds-gpio", 383 .name = "leds-gpio",
374 .id = -1, 384 .id = -1,
375 .dev = { 385 .dev = {
376 .platform_data = &gpio_leds_info, 386 .platform_data = &igep2_led_pdata,
377 }, 387 },
378}; 388};
389
390static void __init igep2_init_led(void)
391{
392 platform_device_register(&igep2_led_device);
393}
394
395#else
396static inline void igep2_init_led(void) {}
379#endif 397#endif
380 398
381static struct platform_device *igep2_devices[] __initdata = { 399static struct platform_device *igep2_devices[] __initdata = {
382 &igep2_dss_device, 400 &igep2_dss_device,
383#ifdef CONFIG_LEDS_TRIGGERS
384 &leds_gpio,
385#endif
386}; 401};
387 402
388static void __init igep2_init_irq(void) 403static void __init igep2_init_irq(void)
@@ -442,7 +457,7 @@ static struct omap_musb_board_data musb_board_data = {
442 .power = 100, 457 .power = 100,
443}; 458};
444 459
445static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 460static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
446 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 461 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
447 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 462 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
448 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 463 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
@@ -471,31 +486,34 @@ static void __init igep2_init(void)
471 usb_ehci_init(&ehci_pdata); 486 usb_ehci_init(&ehci_pdata);
472 487
473 igep2_flash_init(); 488 igep2_flash_init();
489 igep2_init_led();
474 igep2_display_init(); 490 igep2_display_init();
475 igep2_init_smsc911x(); 491 igep2_init_smsc911x();
476 492
477 /* GPIO userspace leds */ 493 /* GPIO userspace leds */
478 if ((gpio_request(IGEP2_GPIO_LED0_RED, "GPIO_LED0_RED") == 0) && 494#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
495 if ((gpio_request(IGEP2_GPIO_LED0_RED, "led0:red") == 0) &&
479 (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) { 496 (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
480 gpio_export(IGEP2_GPIO_LED0_RED, 0); 497 gpio_export(IGEP2_GPIO_LED0_RED, 0);
481 gpio_set_value(IGEP2_GPIO_LED0_RED, 0); 498 gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
482 } else 499 } else
483 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n"); 500 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
484 501
485 if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "GPIO_LED0_GREEN") == 0) && 502 if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "led0:green") == 0) &&
486 (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) { 503 (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) {
487 gpio_export(IGEP2_GPIO_LED0_GREEN, 0); 504 gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
488 gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0); 505 gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
489 } else 506 } else
490 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n"); 507 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
491#ifndef CONFIG_LEDS_TRIGGERS 508
492 if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_LED1_RED") == 0) && 509 if ((gpio_request(IGEP2_GPIO_LED1_RED, "led1:red") == 0) &&
493 (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) { 510 (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) {
494 gpio_export(IGEP2_GPIO_LED1_RED, 0); 511 gpio_export(IGEP2_GPIO_LED1_RED, 0);
495 gpio_set_value(IGEP2_GPIO_LED1_RED, 0); 512 gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
496 } else 513 } else
497 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n"); 514 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
498#endif 515#endif
516
499 /* GPIO W-LAN + Bluetooth combo module */ 517 /* GPIO W-LAN + Bluetooth combo module */
500 if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) && 518 if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
501 (gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) { 519 (gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) {
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index 4cab0522d7ce..da9bcb898991 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
+++ b/arch/arm/mach-omap2/board-n8x0.c
@@ -37,6 +37,103 @@ static int slot1_cover_open;
37static int slot2_cover_open; 37static int slot2_cover_open;
38static struct device *mmc_device; 38static struct device *mmc_device;
39 39
40#define TUSB6010_ASYNC_CS 1
41#define TUSB6010_SYNC_CS 4
42#define TUSB6010_GPIO_INT 58
43#define TUSB6010_GPIO_ENABLE 0
44#define TUSB6010_DMACHAN 0x3f
45
46#if defined(CONFIG_USB_TUSB6010) || \
47 defined(CONFIG_USB_TUSB6010_MODULE)
48/*
49 * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and
50 * 1.5 V voltage regulators of PM companion chip. Companion chip will then
51 * provide then PGOOD signal to TUSB6010 which will release it from reset.
52 */
53static int tusb_set_power(int state)
54{
55 int i, retval = 0;
56
57 if (state) {
58 gpio_set_value(TUSB6010_GPIO_ENABLE, 1);
59 msleep(1);
60
61 /* Wait until TUSB6010 pulls INT pin down */
62 i = 100;
63 while (i && gpio_get_value(TUSB6010_GPIO_INT)) {
64 msleep(1);
65 i--;
66 }
67
68 if (!i) {
69 printk(KERN_ERR "tusb: powerup failed\n");
70 retval = -ENODEV;
71 }
72 } else {
73 gpio_set_value(TUSB6010_GPIO_ENABLE, 0);
74 msleep(10);
75 }
76
77 return retval;
78}
79
80static struct musb_hdrc_config musb_config = {
81 .multipoint = 1,
82 .dyn_fifo = 1,
83 .num_eps = 16,
84 .ram_bits = 12,
85};
86
87static struct musb_hdrc_platform_data tusb_data = {
88#if defined(CONFIG_USB_MUSB_OTG)
89 .mode = MUSB_OTG,
90#elif defined(CONFIG_USB_MUSB_PERIPHERAL)
91 .mode = MUSB_PERIPHERAL,
92#else /* defined(CONFIG_USB_MUSB_HOST) */
93 .mode = MUSB_HOST,
94#endif
95 .set_power = tusb_set_power,
96 .min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */
97 .power = 100, /* Max 100 mA VBUS for host mode */
98 .config = &musb_config,
99};
100
101static void __init n8x0_usb_init(void)
102{
103 int ret = 0;
104 static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
105
106 /* PM companion chip power control pin */
107 ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable");
108 if (ret != 0) {
109 printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
110 TUSB6010_GPIO_ENABLE);
111 return;
112 }
113 gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
114
115 tusb_set_power(0);
116
117 ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
118 TUSB6010_ASYNC_CS, TUSB6010_SYNC_CS,
119 TUSB6010_GPIO_INT, TUSB6010_DMACHAN);
120 if (ret != 0)
121 goto err;
122
123 printk(announce);
124
125 return;
126
127err:
128 gpio_free(TUSB6010_GPIO_ENABLE);
129}
130#else
131
132static void __init n8x0_usb_init(void) {}
133
134#endif /*CONFIG_USB_TUSB6010 */
135
136
40static struct omap2_mcspi_device_config p54spi_mcspi_config = { 137static struct omap2_mcspi_device_config p54spi_mcspi_config = {
41 .turbo_mode = 0, 138 .turbo_mode = 0,
42 .single_channel = 1, 139 .single_channel = 1,
@@ -562,6 +659,7 @@ static void __init n8x0_init_machine(void)
562 n8x0_menelaus_init(); 659 n8x0_menelaus_init();
563 n8x0_onenand_init(); 660 n8x0_onenand_init();
564 n8x0_mmc_init(); 661 n8x0_mmc_init();
662 n8x0_usb_init();
565} 663}
566 664
567MACHINE_START(NOKIA_N800, "Nokia N800") 665MACHINE_START(NOKIA_N800, "Nokia N800")
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 6eb77e1f7c82..962d377970e9 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -410,7 +410,7 @@ static void __init omap3beagle_flash_init(void)
410 } 410 }
411} 411}
412 412
413static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 413static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
414 414
415 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 415 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
416 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 416 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index d6bc88c426b5..017bb2f4f7d2 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -635,7 +635,7 @@ static struct platform_device *omap3_evm_devices[] __initdata = {
635 &omap3_evm_dss_device, 635 &omap3_evm_dss_device,
636}; 636};
637 637
638static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 638static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
639 639
640 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 640 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
641 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 641 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index 4827f4658df3..395d049bf010 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -459,12 +459,20 @@ static struct i2c_board_info __initdata omap3pandora_i2c_boardinfo[] = {
459 }, 459 },
460}; 460};
461 461
462static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
463 {
464 I2C_BOARD_INFO("bq27500", 0x55),
465 .flags = I2C_CLIENT_WAKE,
466 },
467};
468
462static int __init omap3pandora_i2c_init(void) 469static int __init omap3pandora_i2c_init(void)
463{ 470{
464 omap_register_i2c_bus(1, 2600, omap3pandora_i2c_boardinfo, 471 omap_register_i2c_bus(1, 2600, omap3pandora_i2c_boardinfo,
465 ARRAY_SIZE(omap3pandora_i2c_boardinfo)); 472 ARRAY_SIZE(omap3pandora_i2c_boardinfo));
466 /* i2c2 pins are not connected */ 473 /* i2c2 pins are not connected */
467 omap_register_i2c_bus(3, 100, NULL, 0); 474 omap_register_i2c_bus(3, 100, omap3pandora_i2c3_boardinfo,
475 ARRAY_SIZE(omap3pandora_i2c3_boardinfo));
468 return 0; 476 return 0;
469} 477}
470 478
@@ -537,7 +545,7 @@ static struct platform_device *omap3pandora_devices[] __initdata = {
537 &pandora_dss_device, 545 &pandora_dss_device,
538}; 546};
539 547
540static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 548static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
541 549
542 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 550 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
543 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN, 551 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 3943d0f8322c..2504d41f923e 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -493,7 +493,7 @@ static void __init omap3touchbook_flash_init(void)
493 } 493 }
494} 494}
495 495
496static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 496static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
497 497
498 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 498 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
499 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 499 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
@@ -518,14 +518,14 @@ static void omap3_touchbook_poweroff(void)
518 gpio_direction_output(TB_KILL_POWER_GPIO, 0); 518 gpio_direction_output(TB_KILL_POWER_GPIO, 0);
519} 519}
520 520
521static void __init early_touchbook_revision(char **p) 521static int __init early_touchbook_revision(char *p)
522{ 522{
523 if (!*p) 523 if (!p)
524 return; 524 return 0;
525 525
526 strict_strtoul(*p, 10, &touchbook_revision); 526 return strict_strtoul(p, 10, &touchbook_revision);
527} 527}
528__early_param("tbr=", early_touchbook_revision); 528early_param("tbr", early_touchbook_revision);
529 529
530static struct omap_musb_board_data musb_board_data = { 530static struct omap_musb_board_data musb_board_data = {
531 .interface_type = MUSB_INTERFACE_ULPI, 531 .interface_type = MUSB_INTERFACE_ULPI,
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index 50872a42bec7..8848c7c5ce48 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -394,7 +394,7 @@ static struct platform_device *overo_devices[] __initdata = {
394 &overo_lcd_device, 394 &overo_lcd_device,
395}; 395};
396 396
397static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 397static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
398 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 398 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
399 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 399 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
400 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 400 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
diff --git a/arch/arm/mach-omap2/board-zoom3.c b/arch/arm/mach-omap2/board-zoom3.c
index d3e3cd5170d1..cd3e40cf3ac1 100644
--- a/arch/arm/mach-omap2/board-zoom3.c
+++ b/arch/arm/mach-omap2/board-zoom3.c
@@ -52,7 +52,7 @@ static struct omap_board_mux board_mux[] __initdata = {
52#define board_mux NULL 52#define board_mux NULL
53#endif 53#endif
54 54
55static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 55static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
56 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 56 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
57 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 57 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
58 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 58 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index f12af95ead45..d932b142d0b6 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1841,6 +1841,7 @@ static struct omap_clk omap2420_clks[] = {
1841 CLK(NULL, "aes_ick", &aes_ick, CK_242X), 1841 CLK(NULL, "aes_ick", &aes_ick, CK_242X),
1842 CLK(NULL, "pka_ick", &pka_ick, CK_242X), 1842 CLK(NULL, "pka_ick", &pka_ick, CK_242X),
1843 CLK(NULL, "usb_fck", &usb_fck, CK_242X), 1843 CLK(NULL, "usb_fck", &usb_fck, CK_242X),
1844 CLK("musb_hdrc", "fck", &osc_ck, CK_242X),
1844}; 1845};
1845 1846
1846/* 1847/*
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 402e8f0d0f21..87f676acf61d 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -237,7 +237,7 @@ static void __init _omap2_map_common_io(void)
237} 237}
238 238
239#ifdef CONFIG_ARCH_OMAP2420 239#ifdef CONFIG_ARCH_OMAP2420
240void __init omap242x_map_common_io() 240void __init omap242x_map_common_io(void)
241{ 241{
242 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); 242 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
243 iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc)); 243 iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc));
@@ -246,7 +246,7 @@ void __init omap242x_map_common_io()
246#endif 246#endif
247 247
248#ifdef CONFIG_ARCH_OMAP2430 248#ifdef CONFIG_ARCH_OMAP2430
249void __init omap243x_map_common_io() 249void __init omap243x_map_common_io(void)
250{ 250{
251 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); 251 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
252 iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc)); 252 iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc));
@@ -255,7 +255,7 @@ void __init omap243x_map_common_io()
255#endif 255#endif
256 256
257#ifdef CONFIG_ARCH_OMAP3 257#ifdef CONFIG_ARCH_OMAP3
258void __init omap34xx_map_common_io() 258void __init omap34xx_map_common_io(void)
259{ 259{
260 iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc)); 260 iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));
261 _omap2_map_common_io(); 261 _omap2_map_common_io();
@@ -263,7 +263,7 @@ void __init omap34xx_map_common_io()
263#endif 263#endif
264 264
265#ifdef CONFIG_ARCH_OMAP4 265#ifdef CONFIG_ARCH_OMAP4
266void __init omap44xx_map_common_io() 266void __init omap44xx_map_common_io(void)
267{ 267{
268 iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); 268 iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
269 _omap2_map_common_io(); 269 _omap2_map_common_io();
@@ -309,7 +309,6 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
309{ 309{
310 pwrdm_init(powerdomains_omap); 310 pwrdm_init(powerdomains_omap);
311 clkdm_init(clockdomains_omap, clkdm_autodeps); 311 clkdm_init(clockdomains_omap, clkdm_autodeps);
312#ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once the clkdev is ready */
313 if (cpu_is_omap242x()) 312 if (cpu_is_omap242x())
314 omap2420_hwmod_init(); 313 omap2420_hwmod_init();
315 else if (cpu_is_omap243x()) 314 else if (cpu_is_omap243x())
@@ -319,7 +318,6 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
319 omap2_mux_init(); 318 omap2_mux_init();
320 /* The OPP tables have to be registered before a clk init */ 319 /* The OPP tables have to be registered before a clk init */
321 omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps); 320 omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps);
322#endif
323 321
324 if (cpu_is_omap2420()) 322 if (cpu_is_omap2420())
325 omap2420_clk_init(); 323 omap2420_clk_init();
@@ -333,11 +331,12 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
333 pr_err("Could not init clock framework - unknown CPU\n"); 331 pr_err("Could not init clock framework - unknown CPU\n");
334 332
335 omap_serial_early_init(); 333 omap_serial_early_init();
336#ifndef CONFIG_ARCH_OMAP4 334 if (cpu_is_omap24xx() || cpu_is_omap34xx()) /* FIXME: OMAP4 */
337 omap_hwmod_late_init(); 335 omap_hwmod_late_init();
338 omap_pm_if_init(); 336 omap_pm_if_init();
339 omap2_sdrc_init(sdrc_cs0, sdrc_cs1); 337 if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
340 _omap2_init_reprogram_sdrc(); 338 omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
341#endif 339 _omap2_init_reprogram_sdrc();
340 }
342 gpmc_init(); 341 gpmc_init();
343} 342}
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index 52a981cb8fdd..318f3638653c 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -430,19 +430,19 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
430 if (unlikely(!res)) { 430 if (unlikely(!res)) {
431 dev_err(&pdev->dev, "invalid irq resource\n"); 431 dev_err(&pdev->dev, "invalid irq resource\n");
432 ret = -ENODEV; 432 ret = -ENODEV;
433 goto err_iva1; 433 omap_mbox_unregister(&mbox_dsp_info);
434 goto err_dsp;
434 } 435 }
435 mbox_iva_info.irq = res->start; 436 mbox_iva_info.irq = res->start;
436 ret = omap_mbox_register(&pdev->dev, &mbox_iva_info); 437 ret = omap_mbox_register(&pdev->dev, &mbox_iva_info);
437 if (ret) 438 if (ret) {
438 goto err_iva1; 439 omap_mbox_unregister(&mbox_dsp_info);
440 goto err_dsp;
441 }
439 } 442 }
440#endif 443#endif
441 return 0; 444 return 0;
442 445
443err_iva1:
444 omap_mbox_unregister(&mbox_dsp_info);
445
446err_dsp: 446err_dsp:
447 iounmap(mbox_base); 447 iounmap(mbox_base);
448 return ret; 448 return ret;
diff --git a/arch/arm/mach-omap2/omap44xx-smc.S b/arch/arm/mach-omap2/omap44xx-smc.S
new file mode 100644
index 000000000000..89bb2b141473
--- /dev/null
+++ b/arch/arm/mach-omap2/omap44xx-smc.S
@@ -0,0 +1,32 @@
1/*
2 * OMAP44xx secure APIs file.
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
6 *
7 *
8 * This program is free software,you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/linkage.h>
14
15/*
16 * This is common routine to manage secure monitor API
17 * used to modify the PL310 secure registers.
18 * 'r0' contains the value to be modified and 'r12' contains
19 * the monitor API number. It uses few CPU registers
20 * internally and hence they need be backed up including
21 * link register "lr".
22 * Function signature : void omap_smc1(u32 fn, u32 arg)
23 */
24
25ENTRY(omap_smc1)
26 stmfd sp!, {r2-r12, lr}
27 mov r12, r0
28 mov r0, r1
29 dsb
30 smc
31 ldmfd sp!, {r2-r12, pc}
32END(omap_smc1)
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c
index 81872aacb801..9537f6f2352d 100644
--- a/arch/arm/mach-omap2/prcm.c
+++ b/arch/arm/mach-omap2/prcm.c
@@ -133,7 +133,7 @@ u32 omap_prcm_get_reset_sources(void)
133EXPORT_SYMBOL(omap_prcm_get_reset_sources); 133EXPORT_SYMBOL(omap_prcm_get_reset_sources);
134 134
135/* Resets clock rates and reboots the system. Only called from system.h */ 135/* Resets clock rates and reboots the system. Only called from system.h */
136void omap_prcm_arch_reset(char mode) 136void omap_prcm_arch_reset(char mode, const char *cmd)
137{ 137{
138 s16 prcm_offs = 0; 138 s16 prcm_offs = 0;
139 139
@@ -145,7 +145,7 @@ void omap_prcm_arch_reset(char mode)
145 u32 l; 145 u32 l;
146 146
147 prcm_offs = OMAP3430_GR_MOD; 147 prcm_offs = OMAP3430_GR_MOD;
148 l = ('B' << 24) | ('M' << 16) | mode; 148 l = ('B' << 24) | ('M' << 16) | (cmd ? (u8)*cmd : 0);
149 /* Reserve the first word in scratchpad for communicating 149 /* Reserve the first word in scratchpad for communicating
150 * with the boot ROM. A pointer to a data structure 150 * with the boot ROM. A pointer to a data structure
151 * describing the boot process can be stored there, 151 * describing the boot process can be stored there,
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index b79bc8926cc9..da77930480e9 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -644,16 +644,21 @@ static void serial_out_override(struct uart_port *up, int offset, int value)
644} 644}
645void __init omap_serial_early_init(void) 645void __init omap_serial_early_init(void)
646{ 646{
647 int i; 647 int i, nr_ports;
648 char name[16]; 648 char name[16];
649 649
650 if (!(cpu_is_omap3630() || cpu_is_omap4430()))
651 nr_ports = 3;
652 else
653 nr_ports = ARRAY_SIZE(omap_uart);
654
650 /* 655 /*
651 * Make sure the serial ports are muxed on at this point. 656 * Make sure the serial ports are muxed on at this point.
652 * You have to mux them off in device drivers later on 657 * You have to mux them off in device drivers later on
653 * if not needed. 658 * if not needed.
654 */ 659 */
655 660
656 for (i = 0; i < ARRAY_SIZE(omap_uart); i++) { 661 for (i = 0; i < nr_ports; i++) {
657 struct omap_uart_state *uart = &omap_uart[i]; 662 struct omap_uart_state *uart = &omap_uart[i];
658 struct platform_device *pdev = &uart->pdev; 663 struct platform_device *pdev = &uart->pdev;
659 struct device *dev = &pdev->dev; 664 struct device *dev = &pdev->dev;
@@ -669,17 +674,17 @@ void __init omap_serial_early_init(void)
669 continue; 674 continue;
670 } 675 }
671 676
672 sprintf(name, "uart%d_ick", i+1); 677 sprintf(name, "uart%d_ick", i + 1);
673 uart->ick = clk_get(NULL, name); 678 uart->ick = clk_get(NULL, name);
674 if (IS_ERR(uart->ick)) { 679 if (IS_ERR(uart->ick)) {
675 printk(KERN_ERR "Could not get uart%d_ick\n", i+1); 680 printk(KERN_ERR "Could not get uart%d_ick\n", i + 1);
676 uart->ick = NULL; 681 uart->ick = NULL;
677 } 682 }
678 683
679 sprintf(name, "uart%d_fck", i+1); 684 sprintf(name, "uart%d_fck", i+1);
680 uart->fck = clk_get(NULL, name); 685 uart->fck = clk_get(NULL, name);
681 if (IS_ERR(uart->fck)) { 686 if (IS_ERR(uart->fck)) {
682 printk(KERN_ERR "Could not get uart%d_fck\n", i+1); 687 printk(KERN_ERR "Could not get uart%d_fck\n", i + 1);
683 uart->fck = NULL; 688 uart->fck = NULL;
684 } 689 }
685 690
diff --git a/arch/arm/mach-omap2/usb-ehci.c b/arch/arm/mach-omap2/usb-ehci.c
index f1df873d59db..ee9f548d5d81 100644
--- a/arch/arm/mach-omap2/usb-ehci.c
+++ b/arch/arm/mach-omap2/usb-ehci.c
@@ -70,7 +70,7 @@ static struct platform_device ehci_device = {
70/* 70/*
71 * setup_ehci_io_mux - initialize IO pad mux for USBHOST 71 * setup_ehci_io_mux - initialize IO pad mux for USBHOST
72 */ 72 */
73static void setup_ehci_io_mux(enum ehci_hcd_omap_mode *port_mode) 73static void setup_ehci_io_mux(const enum ehci_hcd_omap_mode *port_mode)
74{ 74{
75 switch (port_mode[0]) { 75 switch (port_mode[0]) {
76 case EHCI_HCD_OMAP_MODE_PHY: 76 case EHCI_HCD_OMAP_MODE_PHY:
@@ -213,7 +213,7 @@ static void setup_ehci_io_mux(enum ehci_hcd_omap_mode *port_mode)
213 return; 213 return;
214} 214}
215 215
216void __init usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata) 216void __init usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata)
217{ 217{
218 platform_device_add_data(&ehci_device, pdata, sizeof(*pdata)); 218 platform_device_add_data(&ehci_device, pdata, sizeof(*pdata));
219 219
@@ -229,7 +229,7 @@ void __init usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata)
229 229
230#else 230#else
231 231
232void __init usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata) 232void __init usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata)
233 233
234{ 234{
235} 235}
diff --git a/arch/arm/mach-rpc/include/mach/uncompress.h b/arch/arm/mach-rpc/include/mach/uncompress.h
index d5862368c4f2..8c9e2c7161c6 100644
--- a/arch/arm/mach-rpc/include/mach/uncompress.h
+++ b/arch/arm/mach-rpc/include/mach/uncompress.h
@@ -109,8 +109,6 @@ static inline void flush(void)
109{ 109{
110} 110}
111 111
112static void error(char *x);
113
114/* 112/*
115 * Setup for decompression 113 * Setup for decompression
116 */ 114 */
diff --git a/arch/arm/plat-s3c24xx/s3c2440-cpufreq.c b/arch/arm/mach-s3c2440/s3c2440-cpufreq.c
index 976002fb1b8f..976002fb1b8f 100644
--- a/arch/arm/plat-s3c24xx/s3c2440-cpufreq.c
+++ b/arch/arm/mach-s3c2440/s3c2440-cpufreq.c
diff --git a/arch/arm/mach-s3c64xx/include/mach/debug-macro.S b/arch/arm/mach-s3c64xx/include/mach/debug-macro.S
index b18ac5266dfc..f9ab5d26052a 100644
--- a/arch/arm/mach-s3c64xx/include/mach/debug-macro.S
+++ b/arch/arm/mach-s3c64xx/include/mach/debug-macro.S
@@ -21,7 +21,7 @@
21 * aligned and add in the offset when we load the value here. 21 * aligned and add in the offset when we load the value here.
22 */ 22 */
23 23
24 .macro addruart, rx 24 .macro addruart, rx, rtmp
25 mrc p15, 0, \rx, c1, c0 25 mrc p15, 0, \rx, c1, c0
26 tst \rx, #1 26 tst \rx, #1
27 ldreq \rx, = S3C_PA_UART 27 ldreq \rx, = S3C_PA_UART
diff --git a/arch/arm/mach-s5p6440/include/mach/debug-macro.S b/arch/arm/mach-s5p6440/include/mach/debug-macro.S
index 48cdb0da026c..1347d7f99079 100644
--- a/arch/arm/mach-s5p6440/include/mach/debug-macro.S
+++ b/arch/arm/mach-s5p6440/include/mach/debug-macro.S
@@ -19,7 +19,7 @@
19 * aligned and add in the offset when we load the value here. 19 * aligned and add in the offset when we load the value here.
20 */ 20 */
21 21
22 .macro addruart, rx 22 .macro addruart, rx, rtmp
23 mrc p15, 0, \rx, c1, c0 23 mrc p15, 0, \rx, c1, c0
24 tst \rx, #1 24 tst \rx, #1
25 ldreq \rx, = S3C_PA_UART 25 ldreq \rx, = S3C_PA_UART
diff --git a/arch/arm/mach-s5p6442/include/mach/debug-macro.S b/arch/arm/mach-s5p6442/include/mach/debug-macro.S
index 1aae691e58ef..bb6536147ffb 100644
--- a/arch/arm/mach-s5p6442/include/mach/debug-macro.S
+++ b/arch/arm/mach-s5p6442/include/mach/debug-macro.S
@@ -15,7 +15,7 @@
15#include <mach/map.h> 15#include <mach/map.h>
16#include <plat/regs-serial.h> 16#include <plat/regs-serial.h>
17 17
18 .macro addruart, rx 18 .macro addruart, rx, rtmp
19 mrc p15, 0, \rx, c1, c0 19 mrc p15, 0, \rx, c1, c0
20 tst \rx, #1 20 tst \rx, #1
21 ldreq \rx, = S3C_PA_UART 21 ldreq \rx, = S3C_PA_UART
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c
index a0463d926447..1c2ec96ce261 100644
--- a/arch/arm/mach-shmobile/board-ap4evb.c
+++ b/arch/arm/mach-shmobile/board-ap4evb.c
@@ -206,10 +206,32 @@ static struct platform_device keysc_device = {
206 }, 206 },
207}; 207};
208 208
209/* SDHI0 */
210static struct resource sdhi0_resources[] = {
211 [0] = {
212 .name = "SDHI0",
213 .start = 0xe6850000,
214 .end = 0xe68501ff,
215 .flags = IORESOURCE_MEM,
216 },
217 [1] = {
218 .start = 96,
219 .flags = IORESOURCE_IRQ,
220 },
221};
222
223static struct platform_device sdhi0_device = {
224 .name = "sh_mobile_sdhi",
225 .num_resources = ARRAY_SIZE(sdhi0_resources),
226 .resource = sdhi0_resources,
227 .id = 0,
228};
229
209static struct platform_device *ap4evb_devices[] __initdata = { 230static struct platform_device *ap4evb_devices[] __initdata = {
210 &nor_flash_device, 231 &nor_flash_device,
211 &smc911x_device, 232 &smc911x_device,
212 &keysc_device, 233 &keysc_device,
234 &sdhi0_device,
213}; 235};
214 236
215static struct map_desc ap4evb_io_desc[] __initdata = { 237static struct map_desc ap4evb_io_desc[] __initdata = {
@@ -286,6 +308,16 @@ static void __init ap4evb_init(void)
286 gpio_request(GPIO_FN_KEYIN3_133, NULL); 308 gpio_request(GPIO_FN_KEYIN3_133, NULL);
287 gpio_request(GPIO_FN_KEYIN4, NULL); 309 gpio_request(GPIO_FN_KEYIN4, NULL);
288 310
311 /* SDHI0 */
312 gpio_request(GPIO_FN_SDHICD0, NULL);
313 gpio_request(GPIO_FN_SDHIWP0, NULL);
314 gpio_request(GPIO_FN_SDHICMD0, NULL);
315 gpio_request(GPIO_FN_SDHICLK0, NULL);
316 gpio_request(GPIO_FN_SDHID0_3, NULL);
317 gpio_request(GPIO_FN_SDHID0_2, NULL);
318 gpio_request(GPIO_FN_SDHID0_1, NULL);
319 gpio_request(GPIO_FN_SDHID0_0, NULL);
320
289 sh7372_add_standard_devices(); 321 sh7372_add_standard_devices();
290 322
291 platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices)); 323 platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices));
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c
index f36c9a94d326..9247503296c4 100644
--- a/arch/arm/mach-shmobile/board-g3evm.c
+++ b/arch/arm/mach-shmobile/board-g3evm.c
@@ -26,9 +26,12 @@
26#include <linux/mtd/mtd.h> 26#include <linux/mtd/mtd.h>
27#include <linux/mtd/partitions.h> 27#include <linux/mtd/partitions.h>
28#include <linux/mtd/physmap.h> 28#include <linux/mtd/physmap.h>
29#include <linux/mtd/sh_flctl.h>
29#include <linux/usb/r8a66597.h> 30#include <linux/usb/r8a66597.h>
30#include <linux/io.h> 31#include <linux/io.h>
31#include <linux/gpio.h> 32#include <linux/gpio.h>
33#include <linux/input.h>
34#include <linux/input/sh_keysc.h>
32#include <mach/sh7367.h> 35#include <mach/sh7367.h>
33#include <mach/common.h> 36#include <mach/common.h>
34#include <asm/mach-types.h> 37#include <asm/mach-types.h>
@@ -127,9 +130,90 @@ static struct platform_device usb_host_device = {
127 .resource = usb_host_resources, 130 .resource = usb_host_resources,
128}; 131};
129 132
133/* KEYSC */
134static struct sh_keysc_info keysc_info = {
135 .mode = SH_KEYSC_MODE_5,
136 .scan_timing = 3,
137 .delay = 100,
138 .keycodes = {
139 KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G,
140 KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N,
141 KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U,
142 KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP,
143 KEY_WAKEUP, KEY_COFFEE, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4,
144 KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_STOP, KEY_COMPUTER,
145 },
146};
147
148static struct resource keysc_resources[] = {
149 [0] = {
150 .name = "KEYSC",
151 .start = 0xe61b0000,
152 .end = 0xe61b000f,
153 .flags = IORESOURCE_MEM,
154 },
155 [1] = {
156 .start = 79,
157 .flags = IORESOURCE_IRQ,
158 },
159};
160
161static struct platform_device keysc_device = {
162 .name = "sh_keysc",
163 .num_resources = ARRAY_SIZE(keysc_resources),
164 .resource = keysc_resources,
165 .dev = {
166 .platform_data = &keysc_info,
167 },
168};
169
170static struct mtd_partition nand_partition_info[] = {
171 {
172 .name = "system",
173 .offset = 0,
174 .size = 64 * 1024 * 1024,
175 },
176 {
177 .name = "userdata",
178 .offset = MTDPART_OFS_APPEND,
179 .size = 128 * 1024 * 1024,
180 },
181 {
182 .name = "cache",
183 .offset = MTDPART_OFS_APPEND,
184 .size = 64 * 1024 * 1024,
185 },
186};
187
188static struct resource nand_flash_resources[] = {
189 [0] = {
190 .start = 0xe6a30000,
191 .end = 0xe6a3009b,
192 .flags = IORESOURCE_MEM,
193 }
194};
195
196static struct sh_flctl_platform_data nand_flash_data = {
197 .parts = nand_partition_info,
198 .nr_parts = ARRAY_SIZE(nand_partition_info),
199 .flcmncr_val = QTSEL_E | FCKSEL_E | TYPESEL_SET | NANWF_E
200 | SHBUSSEL | SEL_16BIT,
201};
202
203static struct platform_device nand_flash_device = {
204 .name = "sh_flctl",
205 .resource = nand_flash_resources,
206 .num_resources = ARRAY_SIZE(nand_flash_resources),
207 .dev = {
208 .platform_data = &nand_flash_data,
209 },
210};
211
130static struct platform_device *g3evm_devices[] __initdata = { 212static struct platform_device *g3evm_devices[] __initdata = {
131 &nor_flash_device, 213 &nor_flash_device,
132 &usb_host_device, 214 &usb_host_device,
215 &keysc_device,
216 &nand_flash_device,
133}; 217};
134 218
135static struct map_desc g3evm_io_desc[] __initdata = { 219static struct map_desc g3evm_io_desc[] __initdata = {
@@ -196,6 +280,44 @@ static void __init g3evm_init(void)
196 __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ 280 __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */
197 __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ 281 __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */
198 282
283 /* KEYSC @ CN7 */
284 gpio_request(GPIO_FN_PORT42_KEYOUT0, NULL);
285 gpio_request(GPIO_FN_PORT43_KEYOUT1, NULL);
286 gpio_request(GPIO_FN_PORT44_KEYOUT2, NULL);
287 gpio_request(GPIO_FN_PORT45_KEYOUT3, NULL);
288 gpio_request(GPIO_FN_PORT46_KEYOUT4, NULL);
289 gpio_request(GPIO_FN_PORT47_KEYOUT5, NULL);
290 gpio_request(GPIO_FN_PORT48_KEYIN0_PU, NULL);
291 gpio_request(GPIO_FN_PORT49_KEYIN1_PU, NULL);
292 gpio_request(GPIO_FN_PORT50_KEYIN2_PU, NULL);
293 gpio_request(GPIO_FN_PORT55_KEYIN3_PU, NULL);
294 gpio_request(GPIO_FN_PORT56_KEYIN4_PU, NULL);
295 gpio_request(GPIO_FN_PORT57_KEYIN5_PU, NULL);
296 gpio_request(GPIO_FN_PORT58_KEYIN6_PU, NULL);
297
298 /* FLCTL */
299 gpio_request(GPIO_FN_FCE0, NULL);
300 gpio_request(GPIO_FN_D0_ED0_NAF0, NULL);
301 gpio_request(GPIO_FN_D1_ED1_NAF1, NULL);
302 gpio_request(GPIO_FN_D2_ED2_NAF2, NULL);
303 gpio_request(GPIO_FN_D3_ED3_NAF3, NULL);
304 gpio_request(GPIO_FN_D4_ED4_NAF4, NULL);
305 gpio_request(GPIO_FN_D5_ED5_NAF5, NULL);
306 gpio_request(GPIO_FN_D6_ED6_NAF6, NULL);
307 gpio_request(GPIO_FN_D7_ED7_NAF7, NULL);
308 gpio_request(GPIO_FN_D8_ED8_NAF8, NULL);
309 gpio_request(GPIO_FN_D9_ED9_NAF9, NULL);
310 gpio_request(GPIO_FN_D10_ED10_NAF10, NULL);
311 gpio_request(GPIO_FN_D11_ED11_NAF11, NULL);
312 gpio_request(GPIO_FN_D12_ED12_NAF12, NULL);
313 gpio_request(GPIO_FN_D13_ED13_NAF13, NULL);
314 gpio_request(GPIO_FN_D14_ED14_NAF14, NULL);
315 gpio_request(GPIO_FN_D15_ED15_NAF15, NULL);
316 gpio_request(GPIO_FN_WE0_XWR0_FWE, NULL);
317 gpio_request(GPIO_FN_FRB, NULL);
318 /* FOE, FCDE, FSC on dedicated pins */
319 __raw_writel(__raw_readl(0xe6158048) & ~(1 << 15), 0xe6158048);
320
199 sh7367_add_standard_devices(); 321 sh7367_add_standard_devices();
200 322
201 platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); 323 platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices));
diff --git a/arch/arm/mach-shmobile/board-g4evm.c b/arch/arm/mach-shmobile/board-g4evm.c
index 5acd623f93e7..10673a90be52 100644
--- a/arch/arm/mach-shmobile/board-g4evm.c
+++ b/arch/arm/mach-shmobile/board-g4evm.c
@@ -28,6 +28,8 @@
28#include <linux/mtd/physmap.h> 28#include <linux/mtd/physmap.h>
29#include <linux/usb/r8a66597.h> 29#include <linux/usb/r8a66597.h>
30#include <linux/io.h> 30#include <linux/io.h>
31#include <linux/input.h>
32#include <linux/input/sh_keysc.h>
31#include <linux/gpio.h> 33#include <linux/gpio.h>
32#include <mach/sh7377.h> 34#include <mach/sh7377.h>
33#include <mach/common.h> 35#include <mach/common.h>
@@ -128,9 +130,49 @@ static struct platform_device usb_host_device = {
128 .resource = usb_host_resources, 130 .resource = usb_host_resources,
129}; 131};
130 132
133/* KEYSC */
134static struct sh_keysc_info keysc_info = {
135 .mode = SH_KEYSC_MODE_5,
136 .scan_timing = 3,
137 .delay = 100,
138 .keycodes = {
139 KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F,
140 KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L,
141 KEY_M, KEY_N, KEY_U, KEY_P, KEY_Q, KEY_R,
142 KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X,
143 KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP, KEY_WAKEUP, KEY_COFFEE,
144 KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5,
145 KEY_6, KEY_7, KEY_8, KEY_9, KEY_STOP, KEY_COMPUTER,
146 },
147};
148
149static struct resource keysc_resources[] = {
150 [0] = {
151 .name = "KEYSC",
152 .start = 0xe61b0000,
153 .end = 0xe61b000f,
154 .flags = IORESOURCE_MEM,
155 },
156 [1] = {
157 .start = 79,
158 .flags = IORESOURCE_IRQ,
159 },
160};
161
162static struct platform_device keysc_device = {
163 .name = "sh_keysc",
164 .id = 0, /* keysc0 clock */
165 .num_resources = ARRAY_SIZE(keysc_resources),
166 .resource = keysc_resources,
167 .dev = {
168 .platform_data = &keysc_info,
169 },
170};
171
131static struct platform_device *g4evm_devices[] __initdata = { 172static struct platform_device *g4evm_devices[] __initdata = {
132 &nor_flash_device, 173 &nor_flash_device,
133 &usb_host_device, 174 &usb_host_device,
175 &keysc_device,
134}; 176};
135 177
136static struct map_desc g4evm_io_desc[] __initdata = { 178static struct map_desc g4evm_io_desc[] __initdata = {
@@ -196,6 +238,21 @@ static void __init g4evm_init(void)
196 __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ 238 __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */
197 __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ 239 __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */
198 240
241 /* KEYSC @ CN31 */
242 gpio_request(GPIO_FN_PORT60_KEYOUT5, NULL);
243 gpio_request(GPIO_FN_PORT61_KEYOUT4, NULL);
244 gpio_request(GPIO_FN_PORT62_KEYOUT3, NULL);
245 gpio_request(GPIO_FN_PORT63_KEYOUT2, NULL);
246 gpio_request(GPIO_FN_PORT64_KEYOUT1, NULL);
247 gpio_request(GPIO_FN_PORT65_KEYOUT0, NULL);
248 gpio_request(GPIO_FN_PORT66_KEYIN0_PU, NULL);
249 gpio_request(GPIO_FN_PORT67_KEYIN1_PU, NULL);
250 gpio_request(GPIO_FN_PORT68_KEYIN2_PU, NULL);
251 gpio_request(GPIO_FN_PORT69_KEYIN3_PU, NULL);
252 gpio_request(GPIO_FN_PORT70_KEYIN4_PU, NULL);
253 gpio_request(GPIO_FN_PORT71_KEYIN5_PU, NULL);
254 gpio_request(GPIO_FN_PORT72_KEYIN6_PU, NULL);
255
199 sh7377_add_standard_devices(); 256 sh7377_add_standard_devices();
200 257
201 platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); 258 platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices));
diff --git a/arch/arm/mach-shmobile/clock-sh7367.c b/arch/arm/mach-shmobile/clock-sh7367.c
index 58bd54e1113a..bb940c6e4e6c 100644
--- a/arch/arm/mach-shmobile/clock-sh7367.c
+++ b/arch/arm/mach-shmobile/clock-sh7367.c
@@ -75,6 +75,11 @@ static struct clk usb0_clk = {
75 .name = "usb0", 75 .name = "usb0",
76}; 76};
77 77
78/* a static keysc0 clk for now - enough to get sh_keysc working */
79static struct clk keysc0_clk = {
80 .name = "keysc0",
81};
82
78static struct clk_lookup lookups[] = { 83static struct clk_lookup lookups[] = {
79 { 84 {
80 .clk = &peripheral_clk, 85 .clk = &peripheral_clk,
@@ -82,6 +87,8 @@ static struct clk_lookup lookups[] = {
82 .clk = &r_clk, 87 .clk = &r_clk,
83 }, { 88 }, {
84 .clk = &usb0_clk, 89 .clk = &usb0_clk,
90 }, {
91 .clk = &keysc0_clk,
85 } 92 }
86}; 93};
87 94
diff --git a/arch/arm/mach-shmobile/intc-sh7367.c b/arch/arm/mach-shmobile/intc-sh7367.c
index 6a547b47aabb..5ff70cadfc32 100644
--- a/arch/arm/mach-shmobile/intc-sh7367.c
+++ b/arch/arm/mach-shmobile/intc-sh7367.c
@@ -27,6 +27,8 @@
27 27
28enum { 28enum {
29 UNUSED_INTCA = 0, 29 UNUSED_INTCA = 0,
30 ENABLED,
31 DISABLED,
30 32
31 /* interrupt sources INTCA */ 33 /* interrupt sources INTCA */
32 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, 34 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A,
@@ -46,8 +48,8 @@ enum {
46 MSIOF2, MSIOF1, 48 MSIOF2, MSIOF1,
47 SCIFA4, SCIFA5, SCIFB, 49 SCIFA4, SCIFA5, SCIFB,
48 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, 50 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,
49 SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, 51 SDHI0,
50 SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, SDHI1_SDHI1I3, 52 SDHI1,
51 MSU_MSU, MSU_MSU2, 53 MSU_MSU, MSU_MSU2,
52 IREM, 54 IREM,
53 SIU, 55 SIU,
@@ -59,7 +61,7 @@ enum {
59 TTI20, 61 TTI20,
60 MISTY, 62 MISTY,
61 DDM, 63 DDM,
62 SDHI2_SDHI2I0, SDHI2_SDHI2I1, SDHI2_SDHI2I2, SDHI2_SDHI2I3, 64 SDHI2,
63 RWDT0, RWDT1, 65 RWDT0, RWDT1,
64 DMAC_1_DEI0, DMAC_1_DEI1, DMAC_1_DEI2, DMAC_1_DEI3, 66 DMAC_1_DEI0, DMAC_1_DEI1, DMAC_1_DEI2, DMAC_1_DEI3,
65 DMAC_2_DEI4, DMAC_2_DEI5, DMAC_2_DADERR, 67 DMAC_2_DEI4, DMAC_2_DEI5, DMAC_2_DADERR,
@@ -70,7 +72,7 @@ enum {
70 72
71 /* interrupt groups INTCA */ 73 /* interrupt groups INTCA */
72 DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, 74 DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2,
73 ETM11, ARM11, USBHS, FLCTL, IIC1, SDHI0, SDHI1, SDHI2, 75 ETM11, ARM11, USBHS, FLCTL, IIC1
74}; 76};
75 77
76static struct intc_vect intca_vectors[] = { 78static struct intc_vect intca_vectors[] = {
@@ -105,10 +107,10 @@ static struct intc_vect intca_vectors[] = {
105 INTC_VECT(SCIFB, 0x0d60), 107 INTC_VECT(SCIFB, 0x0d60),
106 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), 108 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0),
107 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), 109 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0),
108 INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), 110 INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20),
109 INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), 111 INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60),
110 INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), 112 INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0),
111 INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), INTC_VECT(SDHI1_SDHI1I3, 0x0ee0), 113 INTC_VECT(SDHI1, 0x0ec0), INTC_VECT(SDHI1, 0x0ee0),
112 INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), 114 INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40),
113 INTC_VECT(IREM, 0x0f60), 115 INTC_VECT(IREM, 0x0f60),
114 INTC_VECT(SIU, 0x0fa0), 116 INTC_VECT(SIU, 0x0fa0),
@@ -122,8 +124,8 @@ static struct intc_vect intca_vectors[] = {
122 INTC_VECT(TTI20, 0x1100), 124 INTC_VECT(TTI20, 0x1100),
123 INTC_VECT(MISTY, 0x1120), 125 INTC_VECT(MISTY, 0x1120),
124 INTC_VECT(DDM, 0x1140), 126 INTC_VECT(DDM, 0x1140),
125 INTC_VECT(SDHI2_SDHI2I0, 0x1200), INTC_VECT(SDHI2_SDHI2I1, 0x1220), 127 INTC_VECT(SDHI2, 0x1200), INTC_VECT(SDHI2, 0x1220),
126 INTC_VECT(SDHI2_SDHI2I2, 0x1240), INTC_VECT(SDHI2_SDHI2I3, 0x1260), 128 INTC_VECT(SDHI2, 0x1240), INTC_VECT(SDHI2, 0x1260),
127 INTC_VECT(RWDT0, 0x1280), INTC_VECT(RWDT1, 0x12a0), 129 INTC_VECT(RWDT0, 0x1280), INTC_VECT(RWDT1, 0x12a0),
128 INTC_VECT(DMAC_1_DEI0, 0x2000), INTC_VECT(DMAC_1_DEI1, 0x2020), 130 INTC_VECT(DMAC_1_DEI0, 0x2000), INTC_VECT(DMAC_1_DEI1, 0x2020),
129 INTC_VECT(DMAC_1_DEI2, 0x2040), INTC_VECT(DMAC_1_DEI3, 0x2060), 131 INTC_VECT(DMAC_1_DEI2, 0x2040), INTC_VECT(DMAC_1_DEI3, 0x2060),
@@ -158,12 +160,6 @@ static struct intc_group intca_groups[] __initdata = {
158 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, 160 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI,
159 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), 161 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),
160 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), 162 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1),
161 INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1,
162 SDHI0_SDHI0I2, SDHI0_SDHI0I3),
163 INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1,
164 SDHI1_SDHI1I2, SDHI1_SDHI1I3),
165 INTC_GROUP(SDHI2, SDHI2_SDHI2I0, SDHI2_SDHI2I1,
166 SDHI2_SDHI2I2, SDHI2_SDHI2I3),
167}; 163};
168 164
169static struct intc_mask_reg intca_mask_registers[] = { 165static struct intc_mask_reg intca_mask_registers[] = {
@@ -193,10 +189,10 @@ static struct intc_mask_reg intca_mask_registers[] = {
193 { SCIFB, SCIFA5, SCIFA4, MSIOF1, 189 { SCIFB, SCIFA5, SCIFA4, MSIOF1,
194 0, 0, MSIOF2, 0 } }, 190 0, 0, MSIOF2, 0 } },
195 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ 191 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */
196 { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, 192 { DISABLED, DISABLED, ENABLED, ENABLED,
197 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, 193 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },
198 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ 194 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */
199 { SDHI1_SDHI1I3, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, 195 { DISABLED, DISABLED, ENABLED, ENABLED,
200 TTI20, USBDMAC_USHDMI, SPU, SIU } }, 196 TTI20, USBDMAC_USHDMI, SPU, SIU } },
201 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ 197 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */
202 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, 198 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10,
@@ -211,7 +207,7 @@ static struct intc_mask_reg intca_mask_registers[] = {
211 { 0, 0, TPU0, TPU1, 207 { 0, 0, TPU0, TPU1,
212 TPU2, TPU3, TPU4, 0 } }, 208 TPU2, TPU3, TPU4, 0 } },
213 { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ 209 { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */
214 { SDHI2_SDHI2I3, SDHI2_SDHI2I2, SDHI2_SDHI2I1, SDHI2_SDHI2I0, 210 { DISABLED, DISABLED, ENABLED, ENABLED,
215 MISTY, CMT3, RWDT1, RWDT0 } }, 211 MISTY, CMT3, RWDT1, RWDT0 } },
216}; 212};
217 213
@@ -258,10 +254,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = {
258 { IRQ8A, IRQ9A, IRQ10A, IRQ11A, IRQ12A, IRQ13A, IRQ14A, IRQ15A } }, 254 { IRQ8A, IRQ9A, IRQ10A, IRQ11A, IRQ12A, IRQ13A, IRQ14A, IRQ15A } },
259}; 255};
260 256
261static DECLARE_INTC_DESC_ACK(intca_desc, "sh7367-intca", 257static struct intc_desc intca_desc __initdata = {
262 intca_vectors, intca_groups, 258 .name = "sh7367-intca",
263 intca_mask_registers, intca_prio_registers, 259 .force_enable = ENABLED,
264 intca_sense_registers, intca_ack_registers); 260 .force_disable = DISABLED,
261 .hw = INTC_HW_DESC(intca_vectors, intca_groups,
262 intca_mask_registers, intca_prio_registers,
263 intca_sense_registers, intca_ack_registers),
264};
265 265
266void __init sh7367_init_irq(void) 266void __init sh7367_init_irq(void)
267{ 267{
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c
index c57a923f97a6..3ce9d9bd5899 100644
--- a/arch/arm/mach-shmobile/intc-sh7372.c
+++ b/arch/arm/mach-shmobile/intc-sh7372.c
@@ -27,6 +27,8 @@
27 27
28enum { 28enum {
29 UNUSED_INTCA = 0, 29 UNUSED_INTCA = 0,
30 ENABLED,
31 DISABLED,
30 32
31 /* interrupt sources INTCA */ 33 /* interrupt sources INTCA */
32 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, 34 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A,
@@ -47,14 +49,14 @@ enum {
47 MSIOF2, MSIOF1, 49 MSIOF2, MSIOF1,
48 SCIFA4, SCIFA5, SCIFB, 50 SCIFA4, SCIFA5, SCIFB,
49 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, 51 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,
50 SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, 52 SDHI0,
51 SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, 53 SDHI1,
52 IRREM, 54 IRREM,
53 IRDA, 55 IRDA,
54 TPU0, 56 TPU0,
55 TTI20, 57 TTI20,
56 DDM, 58 DDM,
57 SDHI2_SDHI2I0, SDHI2_SDHI2I1, SDHI2_SDHI2I2, SDHI2_SDHI2I3, 59 SDHI2,
58 RWDT0, 60 RWDT0,
59 DMAC1_1_DEI0, DMAC1_1_DEI1, DMAC1_1_DEI2, DMAC1_1_DEI3, 61 DMAC1_1_DEI0, DMAC1_1_DEI1, DMAC1_1_DEI2, DMAC1_1_DEI3,
60 DMAC1_2_DEI4, DMAC1_2_DEI5, DMAC1_2_DADERR, 62 DMAC1_2_DEI4, DMAC1_2_DEI5, DMAC1_2_DADERR,
@@ -82,7 +84,7 @@ enum {
82 84
83 /* interrupt groups INTCA */ 85 /* interrupt groups INTCA */
84 DMAC1_1, DMAC1_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, 86 DMAC1_1, DMAC1_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT,
85 AP_ARM1, AP_ARM2, SPU2, FLCTL, IIC1, SDHI0, SDHI1, SDHI2 87 AP_ARM1, AP_ARM2, SPU2, FLCTL, IIC1
86}; 88};
87 89
88static struct intc_vect intca_vectors[] __initdata = { 90static struct intc_vect intca_vectors[] __initdata = {
@@ -123,17 +125,17 @@ static struct intc_vect intca_vectors[] __initdata = {
123 INTC_VECT(SCIFB, 0x0d60), 125 INTC_VECT(SCIFB, 0x0d60),
124 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), 126 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0),
125 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), 127 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0),
126 INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), 128 INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20),
127 INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), 129 INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60),
128 INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), 130 INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0),
129 INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), 131 INTC_VECT(SDHI1, 0x0ec0),
130 INTC_VECT(IRREM, 0x0f60), 132 INTC_VECT(IRREM, 0x0f60),
131 INTC_VECT(IRDA, 0x0480), 133 INTC_VECT(IRDA, 0x0480),
132 INTC_VECT(TPU0, 0x04a0), 134 INTC_VECT(TPU0, 0x04a0),
133 INTC_VECT(TTI20, 0x1100), 135 INTC_VECT(TTI20, 0x1100),
134 INTC_VECT(DDM, 0x1140), 136 INTC_VECT(DDM, 0x1140),
135 INTC_VECT(SDHI2_SDHI2I0, 0x1200), INTC_VECT(SDHI2_SDHI2I1, 0x1220), 137 INTC_VECT(SDHI2, 0x1200), INTC_VECT(SDHI2, 0x1220),
136 INTC_VECT(SDHI2_SDHI2I2, 0x1240), INTC_VECT(SDHI2_SDHI2I3, 0x1260), 138 INTC_VECT(SDHI2, 0x1240), INTC_VECT(SDHI2, 0x1260),
137 INTC_VECT(RWDT0, 0x1280), 139 INTC_VECT(RWDT0, 0x1280),
138 INTC_VECT(DMAC1_1_DEI0, 0x2000), INTC_VECT(DMAC1_1_DEI1, 0x2020), 140 INTC_VECT(DMAC1_1_DEI0, 0x2000), INTC_VECT(DMAC1_1_DEI1, 0x2020),
139 INTC_VECT(DMAC1_1_DEI2, 0x2040), INTC_VECT(DMAC1_1_DEI3, 0x2060), 141 INTC_VECT(DMAC1_1_DEI2, 0x2040), INTC_VECT(DMAC1_1_DEI3, 0x2060),
@@ -193,12 +195,6 @@ static struct intc_group intca_groups[] __initdata = {
193 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, 195 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI,
194 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), 196 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),
195 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), 197 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1),
196 INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1,
197 SDHI0_SDHI0I2, SDHI0_SDHI0I3),
198 INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1,
199 SDHI1_SDHI1I2),
200 INTC_GROUP(SDHI2, SDHI2_SDHI2I0, SDHI2_SDHI2I1,
201 SDHI2_SDHI2I2, SDHI2_SDHI2I3),
202 INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), 198 INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM),
203}; 199};
204 200
@@ -234,10 +230,10 @@ static struct intc_mask_reg intca_mask_registers[] __initdata = {
234 { SCIFB, SCIFA5, SCIFA4, MSIOF1, 230 { SCIFB, SCIFA5, SCIFA4, MSIOF1,
235 0, 0, MSIOF2, 0 } }, 231 0, 0, MSIOF2, 0 } },
236 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ 232 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */
237 { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, 233 { DISABLED, DISABLED, ENABLED, ENABLED,
238 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, 234 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },
239 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ 235 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */
240 { 0, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, 236 { 0, DISABLED, ENABLED, ENABLED,
241 TTI20, USBHSDMAC0_USHDMI, 0, 0 } }, 237 TTI20, USBHSDMAC0_USHDMI, 0, 0 } },
242 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ 238 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */
243 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, 239 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10,
@@ -252,7 +248,7 @@ static struct intc_mask_reg intca_mask_registers[] __initdata = {
252 { 0, 0, TPU0, 0, 248 { 0, 0, TPU0, 0,
253 0, 0, 0, 0 } }, 249 0, 0, 0, 0 } },
254 { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */ 250 { 0xe69400b4, 0xe69400f4, 8, /* IMR13A / IMCR13A */
255 { SDHI2_SDHI2I3, SDHI2_SDHI2I2, SDHI2_SDHI2I1, SDHI2_SDHI2I0, 251 { DISABLED, DISABLED, ENABLED, ENABLED,
256 0, CMT3, 0, RWDT0 } }, 252 0, CMT3, 0, RWDT0 } },
257 { 0xe6950080, 0xe69500c0, 8, /* IMR0A3 / IMCR0A3 */ 253 { 0xe6950080, 0xe69500c0, 8, /* IMR0A3 / IMCR0A3 */
258 { SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM, 0, 254 { SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM, 0,
@@ -358,10 +354,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = {
358 { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, 354 { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } },
359}; 355};
360 356
361static DECLARE_INTC_DESC_ACK(intca_desc, "sh7372-intca", 357static struct intc_desc intca_desc __initdata = {
362 intca_vectors, intca_groups, 358 .name = "sh7372-intca",
363 intca_mask_registers, intca_prio_registers, 359 .force_enable = ENABLED,
364 intca_sense_registers, intca_ack_registers); 360 .force_disable = DISABLED,
361 .hw = INTC_HW_DESC(intca_vectors, intca_groups,
362 intca_mask_registers, intca_prio_registers,
363 intca_sense_registers, intca_ack_registers),
364};
365 365
366void __init sh7372_init_irq(void) 366void __init sh7372_init_irq(void)
367{ 367{
diff --git a/arch/arm/mach-shmobile/intc-sh7377.c b/arch/arm/mach-shmobile/intc-sh7377.c
index 125021cfba5c..5c781e2d1897 100644
--- a/arch/arm/mach-shmobile/intc-sh7377.c
+++ b/arch/arm/mach-shmobile/intc-sh7377.c
@@ -27,6 +27,8 @@
27 27
28enum { 28enum {
29 UNUSED_INTCA = 0, 29 UNUSED_INTCA = 0,
30 ENABLED,
31 DISABLED,
30 32
31 /* interrupt sources INTCA */ 33 /* interrupt sources INTCA */
32 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A, 34 IRQ0A, IRQ1A, IRQ2A, IRQ3A, IRQ4A, IRQ5A, IRQ6A, IRQ7A,
@@ -49,8 +51,8 @@ enum {
49 MSIOF2, MSIOF1, 51 MSIOF2, MSIOF1,
50 SCIFA4, SCIFA5, SCIFB, 52 SCIFA4, SCIFA5, SCIFB,
51 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I, 53 FLCTL_FLSTEI, FLCTL_FLTENDI, FLCTL_FLTREQ0I, FLCTL_FLTREQ1I,
52 SDHI0_SDHI0I0, SDHI0_SDHI0I1, SDHI0_SDHI0I2, SDHI0_SDHI0I3, 54 SDHI0,
53 SDHI1_SDHI1I0, SDHI1_SDHI1I1, SDHI1_SDHI1I2, SDHI1_SDHI1I3, 55 SDHI1,
54 MSU_MSU, MSU_MSU2, 56 MSU_MSU, MSU_MSU2,
55 IRREM, 57 IRREM,
56 MSUG, 58 MSUG,
@@ -84,7 +86,7 @@ enum {
84 86
85 /* interrupt groups INTCA */ 87 /* interrupt groups INTCA */
86 DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT, 88 DMAC_1, DMAC_2, DMAC2_1, DMAC2_2, DMAC3_1, DMAC3_2, SHWYSTAT,
87 AP_ARM1, AP_ARM2, USBHS, SPU2, FLCTL, IIC1, SDHI0, SDHI1, 89 AP_ARM1, AP_ARM2, USBHS, SPU2, FLCTL, IIC1,
88 ICUSB, ICUDMC 90 ICUSB, ICUDMC
89}; 91};
90 92
@@ -128,10 +130,10 @@ static struct intc_vect intca_vectors[] = {
128 INTC_VECT(SCIFB, 0x0d60), 130 INTC_VECT(SCIFB, 0x0d60),
129 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0), 131 INTC_VECT(FLCTL_FLSTEI, 0x0d80), INTC_VECT(FLCTL_FLTENDI, 0x0da0),
130 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0), 132 INTC_VECT(FLCTL_FLTREQ0I, 0x0dc0), INTC_VECT(FLCTL_FLTREQ1I, 0x0de0),
131 INTC_VECT(SDHI0_SDHI0I0, 0x0e00), INTC_VECT(SDHI0_SDHI0I1, 0x0e20), 133 INTC_VECT(SDHI0, 0x0e00), INTC_VECT(SDHI0, 0x0e20),
132 INTC_VECT(SDHI0_SDHI0I2, 0x0e40), INTC_VECT(SDHI0_SDHI0I3, 0x0e60), 134 INTC_VECT(SDHI0, 0x0e40), INTC_VECT(SDHI0, 0x0e60),
133 INTC_VECT(SDHI1_SDHI1I0, 0x0e80), INTC_VECT(SDHI1_SDHI1I1, 0x0ea0), 135 INTC_VECT(SDHI1, 0x0e80), INTC_VECT(SDHI1, 0x0ea0),
134 INTC_VECT(SDHI1_SDHI1I2, 0x0ec0), INTC_VECT(SDHI1_SDHI1I3, 0x0ee0), 136 INTC_VECT(SDHI1, 0x0ec0), INTC_VECT(SDHI1, 0x0ee0),
135 INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40), 137 INTC_VECT(MSU_MSU, 0x0f20), INTC_VECT(MSU_MSU2, 0x0f40),
136 INTC_VECT(IRREM, 0x0f60), 138 INTC_VECT(IRREM, 0x0f60),
137 INTC_VECT(MSUG, 0x0fa0), 139 INTC_VECT(MSUG, 0x0fa0),
@@ -195,10 +197,6 @@ static struct intc_group intca_groups[] __initdata = {
195 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI, 197 INTC_GROUP(FLCTL, FLCTL_FLSTEI, FLCTL_FLTENDI,
196 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I), 198 FLCTL_FLTREQ0I, FLCTL_FLTREQ1I),
197 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1), 199 INTC_GROUP(IIC1, IIC1_ALI1, IIC1_TACKI1, IIC1_WAITI1, IIC1_DTEI1),
198 INTC_GROUP(SDHI0, SDHI0_SDHI0I0, SDHI0_SDHI0I1,
199 SDHI0_SDHI0I2, SDHI0_SDHI0I3),
200 INTC_GROUP(SDHI1, SDHI1_SDHI1I0, SDHI1_SDHI1I1,
201 SDHI1_SDHI1I2, SDHI1_SDHI1I3),
202 INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM), 200 INTC_GROUP(SHWYSTAT, SHWYSTAT_RT, SHWYSTAT_HS, SHWYSTAT_COM),
203 INTC_GROUP(ICUSB, ICUSB_ICUSB0, ICUSB_ICUSB1), 201 INTC_GROUP(ICUSB, ICUSB_ICUSB0, ICUSB_ICUSB1),
204 INTC_GROUP(ICUDMC, ICUDMC_ICUDMC1, ICUDMC_ICUDMC2), 202 INTC_GROUP(ICUDMC, ICUDMC_ICUDMC1, ICUDMC_ICUDMC2),
@@ -236,10 +234,10 @@ static struct intc_mask_reg intca_mask_registers[] = {
236 { SCIFB, SCIFA5, SCIFA4, MSIOF1, 234 { SCIFB, SCIFA5, SCIFA4, MSIOF1,
237 0, 0, MSIOF2, 0 } }, 235 0, 0, MSIOF2, 0 } },
238 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */ 236 { 0xe694009c, 0xe69400dc, 8, /* IMR7A / IMCR7A */
239 { SDHI0_SDHI0I3, SDHI0_SDHI0I2, SDHI0_SDHI0I1, SDHI0_SDHI0I0, 237 { DISABLED, DISABLED, ENABLED, ENABLED,
240 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } }, 238 FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },
241 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */ 239 { 0xe69400a0, 0xe69400e0, 8, /* IMR8A / IMCR8A */
242 { SDHI1_SDHI1I3, SDHI1_SDHI1I2, SDHI1_SDHI1I1, SDHI1_SDHI1I0, 240 { DISABLED, DISABLED, ENABLED, ENABLED,
243 TTI20, USBDMAC_USHDMI, 0, MSUG } }, 241 TTI20, USBDMAC_USHDMI, 0, MSUG } },
244 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */ 242 { 0xe69400a4, 0xe69400e4, 8, /* IMR9A / IMCR9A */
245 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10, 243 { CMT1_CMT13, CMT1_CMT12, CMT1_CMT11, CMT1_CMT10,
@@ -339,10 +337,14 @@ static struct intc_mask_reg intca_ack_registers[] __initdata = {
339 { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } }, 337 { IRQ24A, IRQ25A, IRQ26A, IRQ27A, IRQ28A, IRQ29A, IRQ30A, IRQ31A } },
340}; 338};
341 339
342static DECLARE_INTC_DESC_ACK(intca_desc, "sh7377-intca", 340static struct intc_desc intca_desc __initdata = {
343 intca_vectors, intca_groups, 341 .name = "sh7377-intca",
344 intca_mask_registers, intca_prio_registers, 342 .force_enable = ENABLED,
345 intca_sense_registers, intca_ack_registers); 343 .force_disable = DISABLED,
344 .hw = INTC_HW_DESC(intca_vectors, intca_groups,
345 intca_mask_registers, intca_prio_registers,
346 intca_sense_registers, intca_ack_registers),
347};
346 348
347void __init sh7377_init_irq(void) 349void __init sh7377_init_irq(void)
348{ 350{
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31pdk.h b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
index 2bbd6ed17f50..da92933a233b 100644
--- a/arch/arm/plat-mxc/include/mach/board-mx31pdk.h
+++ b/arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
@@ -8,8 +8,8 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
11#ifndef __ASM_ARCH_MXC_BOARD_MX31PDK_H__ 11#ifndef __ASM_ARCH_MXC_BOARD_MX31_3DS_H__
12#define __ASM_ARCH_MXC_BOARD_MX31PDK_H__ 12#define __ASM_ARCH_MXC_BOARD_MX31_3DS_H__
13 13
14/* Definitions for components on the Debug board */ 14/* Definitions for components on the Debug board */
15 15
@@ -56,4 +56,4 @@
56 56
57#define MXC_MAX_EXP_IO_LINES 16 57#define MXC_MAX_EXP_IO_LINES 16
58 58
59#endif /* __ASM_ARCH_MXC_BOARD_MX31PDK_H__ */ 59#endif /* __ASM_ARCH_MXC_BOARD_MX31_3DS_H__ */
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 337199ed3479..76a347b3ce07 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -2140,18 +2140,18 @@ void omap2_gpio_resume_after_retention(void)
2140 if (gen) { 2140 if (gen) {
2141 u32 old0, old1; 2141 u32 old0, old1;
2142 2142
2143 if (cpu_is_omap24xx() || cpu_is_omap44xx()) { 2143 if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
2144 old0 = __raw_readl(bank->base + 2144 old0 = __raw_readl(bank->base +
2145 OMAP24XX_GPIO_LEVELDETECT0); 2145 OMAP24XX_GPIO_LEVELDETECT0);
2146 old1 = __raw_readl(bank->base + 2146 old1 = __raw_readl(bank->base +
2147 OMAP24XX_GPIO_LEVELDETECT1); 2147 OMAP24XX_GPIO_LEVELDETECT1);
2148 __raw_writel(old0 | gen, bank->base + 2148 __raw_writel(old0 | gen, bank->base +
2149 OMAP24XX_GPIO_LEVELDETECT0); 2149 OMAP24XX_GPIO_LEVELDETECT0);
2150 __raw_writel(old1 | gen, bank->base + 2150 __raw_writel(old1 | gen, bank->base +
2151 OMAP24XX_GPIO_LEVELDETECT1); 2151 OMAP24XX_GPIO_LEVELDETECT1);
2152 __raw_writel(old0, bank->base + 2152 __raw_writel(old0, bank->base +
2153 OMAP24XX_GPIO_LEVELDETECT0); 2153 OMAP24XX_GPIO_LEVELDETECT0);
2154 __raw_writel(old1, bank->base + 2154 __raw_writel(old1, bank->base +
2155 OMAP24XX_GPIO_LEVELDETECT1); 2155 OMAP24XX_GPIO_LEVELDETECT1);
2156 } 2156 }
2157 2157
diff --git a/arch/arm/plat-omap/include/plat/blizzard.h b/arch/arm/plat-omap/include/plat/blizzard.h
index 8d160f171372..56e7f2e7d12f 100644
--- a/arch/arm/plat-omap/include/plat/blizzard.h
+++ b/arch/arm/plat-omap/include/plat/blizzard.h
@@ -6,7 +6,7 @@ struct blizzard_platform_data {
6 void (*power_down)(struct device *dev); 6 void (*power_down)(struct device *dev);
7 unsigned long (*get_clock_rate)(struct device *dev); 7 unsigned long (*get_clock_rate)(struct device *dev);
8 8
9 unsigned te_connected : 1; 9 unsigned te_connected:1;
10}; 10};
11 11
12#endif 12#endif
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
index ed8786c41df2..75141742300c 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -167,10 +167,14 @@ IS_OMAP_SUBCLASS(443x, 0x443)
167#if defined(MULTI_OMAP2) 167#if defined(MULTI_OMAP2)
168# if defined(CONFIG_ARCH_OMAP2) 168# if defined(CONFIG_ARCH_OMAP2)
169# undef cpu_is_omap24xx 169# undef cpu_is_omap24xx
170# undef cpu_is_omap242x
171# undef cpu_is_omap243x
172# define cpu_is_omap24xx() is_omap24xx() 170# define cpu_is_omap24xx() is_omap24xx()
171# endif
172# if defined (CONFIG_ARCH_OMAP2420)
173# undef cpu_is_omap242x
173# define cpu_is_omap242x() is_omap242x() 174# define cpu_is_omap242x() is_omap242x()
175# endif
176# if defined (CONFIG_ARCH_OMAP2430)
177# undef cpu_is_omap243x
174# define cpu_is_omap243x() is_omap243x() 178# define cpu_is_omap243x() is_omap243x()
175# endif 179# endif
176# if defined(CONFIG_ARCH_OMAP3) 180# if defined(CONFIG_ARCH_OMAP3)
diff --git a/arch/arm/plat-omap/include/plat/prcm.h b/arch/arm/plat-omap/include/plat/prcm.h
index d6a0e27d5a7f..9fbd91419cd1 100644
--- a/arch/arm/plat-omap/include/plat/prcm.h
+++ b/arch/arm/plat-omap/include/plat/prcm.h
@@ -24,7 +24,7 @@
24#define __ASM_ARM_ARCH_OMAP_PRCM_H 24#define __ASM_ARM_ARCH_OMAP_PRCM_H
25 25
26u32 omap_prcm_get_reset_sources(void); 26u32 omap_prcm_get_reset_sources(void);
27void omap_prcm_arch_reset(char mode); 27void omap_prcm_arch_reset(char mode, const char *cmd);
28int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest, 28int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
29 const char *name); 29 const char *name);
30 30
diff --git a/arch/arm/plat-omap/include/plat/system.h b/arch/arm/plat-omap/include/plat/system.h
index c58a4ef42a45..d0a119f735b4 100644
--- a/arch/arm/plat-omap/include/plat/system.h
+++ b/arch/arm/plat-omap/include/plat/system.h
@@ -22,7 +22,7 @@ static inline void arch_idle(void)
22 cpu_do_idle(); 22 cpu_do_idle();
23} 23}
24 24
25static inline void omap1_arch_reset(char mode) 25static inline void omap1_arch_reset(char mode, const char *cmd)
26{ 26{
27 /* 27 /*
28 * Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28 28 * Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28
@@ -43,9 +43,9 @@ static inline void omap1_arch_reset(char mode)
43static inline void arch_reset(char mode, const char *cmd) 43static inline void arch_reset(char mode, const char *cmd)
44{ 44{
45 if (!cpu_class_is_omap2()) 45 if (!cpu_class_is_omap2())
46 omap1_arch_reset(mode); 46 omap1_arch_reset(mode, cmd);
47 else 47 else
48 omap_prcm_arch_reset(mode); 48 omap_prcm_arch_reset(mode, cmd);
49} 49}
50 50
51#endif 51#endif
diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h
index 288e29e1c06f..568578db93b6 100644
--- a/arch/arm/plat-omap/include/plat/usb.h
+++ b/arch/arm/plat-omap/include/plat/usb.h
@@ -53,7 +53,7 @@ enum musb_interface {MUSB_INTERFACE_ULPI, MUSB_INTERFACE_UTMI};
53 53
54extern void usb_musb_init(struct omap_musb_board_data *board_data); 54extern void usb_musb_init(struct omap_musb_board_data *board_data);
55 55
56extern void usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata); 56extern void usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata);
57 57
58#endif 58#endif
59 59
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index e47686e0a633..52dfcc81511e 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -133,8 +133,7 @@ static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id)
133 dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n", 133 dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n",
134 irqst_spcr2); 134 irqst_spcr2);
135 /* Writing zero to XSYNC_ERR clears the IRQ */ 135 /* Writing zero to XSYNC_ERR clears the IRQ */
136 MCBSP_WRITE(mcbsp_tx, SPCR2, 136 MCBSP_WRITE(mcbsp_tx, SPCR2, MCBSP_READ_CACHE(mcbsp_tx, SPCR2));
137 MCBSP_READ_CACHE(mcbsp_tx, SPCR2) & ~(XSYNC_ERR));
138 } else { 137 } else {
139 complete(&mcbsp_tx->tx_irq_completion); 138 complete(&mcbsp_tx->tx_irq_completion);
140 } 139 }
@@ -154,8 +153,7 @@ static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id)
154 dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n", 153 dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n",
155 irqst_spcr1); 154 irqst_spcr1);
156 /* Writing zero to RSYNC_ERR clears the IRQ */ 155 /* Writing zero to RSYNC_ERR clears the IRQ */
157 MCBSP_WRITE(mcbsp_rx, SPCR1, 156 MCBSP_WRITE(mcbsp_rx, SPCR1, MCBSP_READ_CACHE(mcbsp_rx, SPCR1));
158 MCBSP_READ_CACHE(mcbsp_rx, SPCR1) & ~(RSYNC_ERR));
159 } else { 157 } else {
160 complete(&mcbsp_rx->tx_irq_completion); 158 complete(&mcbsp_rx->tx_irq_completion);
161 } 159 }
@@ -934,8 +932,7 @@ int omap_mcbsp_pollwrite(unsigned int id, u16 buf)
934 /* if frame sync error - clear the error */ 932 /* if frame sync error - clear the error */
935 if (MCBSP_READ(mcbsp, SPCR2) & XSYNC_ERR) { 933 if (MCBSP_READ(mcbsp, SPCR2) & XSYNC_ERR) {
936 /* clear error */ 934 /* clear error */
937 MCBSP_WRITE(mcbsp, SPCR2, 935 MCBSP_WRITE(mcbsp, SPCR2, MCBSP_READ_CACHE(mcbsp, SPCR2));
938 MCBSP_READ_CACHE(mcbsp, SPCR2) & (~XSYNC_ERR));
939 /* resend */ 936 /* resend */
940 return -1; 937 return -1;
941 } else { 938 } else {
@@ -975,8 +972,7 @@ int omap_mcbsp_pollread(unsigned int id, u16 *buf)
975 /* if frame sync error - clear the error */ 972 /* if frame sync error - clear the error */
976 if (MCBSP_READ(mcbsp, SPCR1) & RSYNC_ERR) { 973 if (MCBSP_READ(mcbsp, SPCR1) & RSYNC_ERR) {
977 /* clear error */ 974 /* clear error */
978 MCBSP_WRITE(mcbsp, SPCR1, 975 MCBSP_WRITE(mcbsp, SPCR1, MCBSP_READ_CACHE(mcbsp, SPCR1));
979 MCBSP_READ_CACHE(mcbsp, SPCR1) & (~RSYNC_ERR));
980 /* resend */ 976 /* resend */
981 return -1; 977 return -1;
982 } else { 978 } else {
diff --git a/arch/arm/plat-samsung/include/plat/uncompress.h b/arch/arm/plat-samsung/include/plat/uncompress.h
index e87ce8ffbbcd..7d6ed7263d57 100644
--- a/arch/arm/plat-samsung/include/plat/uncompress.h
+++ b/arch/arm/plat-samsung/include/plat/uncompress.h
@@ -140,8 +140,6 @@ static void arch_decomp_error(const char *x)
140#define arch_error arch_decomp_error 140#define arch_error arch_decomp_error
141#endif 141#endif
142 142
143static void error(char *err);
144
145#ifdef CONFIG_S3C_BOOT_UART_FORCE_FIFO 143#ifdef CONFIG_S3C_BOOT_UART_FORCE_FIFO
146static inline void arch_enable_uart_fifo(void) 144static inline void arch_enable_uart_fifo(void)
147{ 145{
diff --git a/arch/arm/plat-samsung/pwm.c b/arch/arm/plat-samsung/pwm.c
index ef019f27b67d..f2d11390d01c 100644
--- a/arch/arm/plat-samsung/pwm.c
+++ b/arch/arm/plat-samsung/pwm.c
@@ -379,6 +379,39 @@ static int __devexit s3c_pwm_remove(struct platform_device *pdev)
379 return 0; 379 return 0;
380} 380}
381 381
382#ifdef CONFIG_PM
383static int s3c_pwm_suspend(struct platform_device *pdev, pm_message_t state)
384{
385 struct pwm_device *pwm = platform_get_drvdata(pdev);
386
387 /* No one preserve these values during suspend so reset them
388 * Otherwise driver leaves PWM unconfigured if same values
389 * passed to pwm_config
390 */
391 pwm->period_ns = 0;
392 pwm->duty_ns = 0;
393
394 return 0;
395}
396
397static int s3c_pwm_resume(struct platform_device *pdev)
398{
399 struct pwm_device *pwm = platform_get_drvdata(pdev);
400 unsigned long tcon;
401
402 /* Restore invertion */
403 tcon = __raw_readl(S3C2410_TCON);
404 tcon |= pwm_tcon_invert(pwm);
405 __raw_writel(tcon, S3C2410_TCON);
406
407 return 0;
408}
409
410#else
411#define s3c_pwm_suspend NULL
412#define s3c_pwm_resume NULL
413#endif
414
382static struct platform_driver s3c_pwm_driver = { 415static struct platform_driver s3c_pwm_driver = {
383 .driver = { 416 .driver = {
384 .name = "s3c24xx-pwm", 417 .name = "s3c24xx-pwm",
@@ -386,6 +419,8 @@ static struct platform_driver s3c_pwm_driver = {
386 }, 419 },
387 .probe = s3c_pwm_probe, 420 .probe = s3c_pwm_probe,
388 .remove = __devexit_p(s3c_pwm_remove), 421 .remove = __devexit_p(s3c_pwm_remove),
422 .suspend = s3c_pwm_suspend,
423 .resume = s3c_pwm_resume,
389}; 424};
390 425
391static int __init pwm_init(void) 426static int __init pwm_init(void)