Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 18 Mar 2011 02:28:15 +0000 (19:28 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 18 Mar 2011 02:28:15 +0000 (19:28 -0700)
* 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: (258 commits)
  omap: zoom: host should not pull up wl1271's irq line
  arm: plat-omap: iommu: fix request_mem_region() error path
  OMAP2+: Common CPU DIE ID reading code reads wrong registers for OMAP4430
  omap4: mux: Remove duplicate mux modes
  omap: iovmm: don't check 'da' to set IOVMF_DA_FIXED flag
  omap: iovmm: disallow mapping NULL address when IOVMF_DA_ANON is set
  omap2+: mux: Fix compile when CONFIG_OMAP_MUX is not selected
  omap4: board-omap4panda: Initialise the serial pads
  omap3: board-3430sdp: Initialise the serial pads
  omap4: board-4430sdp: Initialise the serial pads
  omap2+: mux: Add macro for configuring static with omap_hwmod_mux_init
  omap2+: mux: Remove the use of IDLE flag
  omap2+: Add separate list for dynamic pads to mux
  perf: add OMAP support for the new power events
  OMAP4: Add IVA OPP enteries.
  OMAP4: Update Voltage Rail Values for MPU, IVA and CORE
  OMAP4: Enable 800 MHz and 1 GHz MPU-OPP
  OMAP3+: OPP: Replace voltage values with Macros
  OMAP3: wdtimer: Fix CORE idle transition
  Watchdog: omap_wdt: add fine grain runtime-pm
  ...

Fix up various conflicts in
 - arch/arm/mach-omap2/board-omap3evm.c
 - arch/arm/mach-omap2/clock3xxx_data.c
 - arch/arm/mach-omap2/usb-musb.c
 - arch/arm/plat-omap/include/plat/usb.h
 - drivers/usb/musb/musb_core.h

38 files changed:
1  2 
MAINTAINERS
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-3430sdp.c
arch/arm/mach-omap2/board-3630sdp.c
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-am3517crane.c
arch/arm/mach-omap2/board-am3517evm.c
arch/arm/mach-omap2/board-cm-t35.c
arch/arm/mach-omap2/board-cm-t3517.c
arch/arm/mach-omap2/board-devkit8000.c
arch/arm/mach-omap2/board-igep0020.c
arch/arm/mach-omap2/board-igep0030.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-omap3evm.c
arch/arm/mach-omap2/board-omap3pandora.c
arch/arm/mach-omap2/board-omap3stalker.c
arch/arm/mach-omap2/board-omap3touchbook.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/board-zoom.c
arch/arm/mach-omap2/clock3xxx_data.c
arch/arm/mach-omap2/clock44xx_data.c
arch/arm/mach-omap2/include/mach/debug-macro.S
arch/arm/mach-omap2/omap_phy_internal.c
arch/arm/mach-omap2/pm.h
arch/arm/mach-omap2/sleep34xx.S
arch/arm/mach-omap2/sram34xx.S
arch/arm/mach-omap2/usb-musb.c
arch/arm/plat-omap/include/plat/serial.h
arch/arm/plat-omap/include/plat/usb.h
arch/arm/plat-omap/sram.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/omap2.c
drivers/mtd/onenand/omap2.c
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_core.h
include/linux/i2c/twl.h

diff --combined MAINTAINERS
index 391d57eec00372e385b2c0a657bea2bb82c5fead,44fb12177980da0b41105aa73ce2de62f6003784..6e696bd37cf99c1886331901da7b54f27b27afec
@@@ -465,16 -465,6 +465,16 @@@ M:       Matt Turner <mattst88@gmail.com
  L:    linux-alpha@vger.kernel.org
  F:    arch/alpha/
  
 +ALTERA UART/JTAG UART SERIAL DRIVERS
 +M:    Tobias Klauser <tklauser@distanz.ch>
 +L:    linux-serial@vger.kernel.org
 +L:    nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/tty/serial/altera_uart.c
 +F:    drivers/tty/serial/altera_jtaguart.c
 +F:    include/linux/altera_uart.h
 +F:    include/linux/altera_jtaguart.h
 +
  AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
  M:    Thomas Dahlmann <dahlmann.thomas@arcor.de>
  L:    linux-geode@lists.infradead.org (moderated for non-subscribers)
@@@ -567,13 -557,6 +567,13 @@@ S:       Maintaine
  F:    drivers/net/appletalk/
  F:    net/appletalk/
  
 +ARASAN COMPACT FLASH PATA CONTROLLER
 +M:    Viresh Kumar <viresh.kumar@st.com>
 +L:    linux-ide@vger.kernel.org
 +S:    Maintained
 +F:    include/linux/pata_arasan_cf_data.h
 +F:    drivers/ata/pata_arasan_cf.c
 +
  ARC FRAMEBUFFER DRIVER
  M:    Jaya Kumar <jayalk@intworks.biz>
  S:    Maintained
@@@ -1231,7 -1214,7 +1231,7 @@@ ATHEROS AR9170 WIRELESS DRIVE
  M:    Christian Lamparter <chunkeey@web.de>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org/en/users/Drivers/ar9170
 -S:    Maintained
 +S:    Obsolete
  F:    drivers/net/wireless/ath/ar9170/
  
  CARL9170 LINUX COMMUNITY WIRELESS DRIVER
@@@ -1727,7 -1710,6 +1727,7 @@@ S:      Maintaine
  F:    Documentation/zh_CN/
  
  CISCO VIC ETHERNET NIC DRIVER
 +M:    Christian Benvenuti <benve@cisco.com>
  M:    Vasanthy Kolluri <vkolluri@cisco.com>
  M:    Roopa Prabhu <roprabhu@cisco.com>
  M:    David Wang <dwang2@cisco.com>
@@@ -2844,7 -2826,7 +2844,7 @@@ F:      mm/hwpoison-inject.
  HYPERVISOR VIRTUAL CONSOLE DRIVER
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Odd Fixes
 -F:    drivers/char/hvc_*
 +F:    drivers/tty/hvc/
  
  iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
  M:    Peter Jones <pjones@redhat.com>
@@@ -3459,7 -3441,7 +3459,7 @@@ M:      Jiri Kosina <jkosina@suse.cz
  M:    David Sterba <dsterba@suse.cz>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git
 -F:    drivers/char/pcmcia/ipwireless/
 +F:    drivers/tty/ipwireless/
  
  IPX NETWORK LAYER
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
@@@ -3614,6 -3596,12 +3614,6 @@@ W:     http://lse.sourceforge.net/kdump
  S:    Maintained
  F:    Documentation/kdump/
  
 -KERNEL AUTOMOUNTER (AUTOFS)
 -M:    "H. Peter Anvin" <hpa@zytor.com>
 -L:    autofs@linux.kernel.org
 -S:    Obsolete
 -F:    drivers/staging/autofs/
 -
  KERNEL AUTOMOUNTER v4 (AUTOFS4)
  M:    Ian Kent <raven@themaw.net>
  L:    autofs@linux.kernel.org
@@@ -4304,7 -4292,10 +4304,7 @@@ S:     Maintaine
  F:    net/sched/sch_netem.c
  
  NETERION 10GbE DRIVERS (s2io/vxge)
 -M:    Ramkrishna Vepa <ramkrishna.vepa@exar.com>
 -M:    Sivakumar Subramani <sivakumar.subramani@exar.com>
 -M:    Sreenivasa Honnur <sreenivasa.honnur@exar.com>
 -M:    Jon Mason <jon.mason@exar.com>
 +M:    Jon Mason <jdmason@kudzu.us>
  L:    netdev@vger.kernel.org
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
@@@ -4510,11 -4501,21 +4510,21 @@@ S:   Maintaine
  F:    arch/arm/*omap*/*clock*
  
  OMAP POWER MANAGEMENT SUPPORT
- M:    Kevin Hilman <khilman@deeprootsystems.com>
+ M:    Kevin Hilman <khilman@ti.com>
  L:    linux-omap@vger.kernel.org
  S:    Maintained
  F:    arch/arm/*omap*/*pm*
  
+ OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
+ M:    Rajendra Nayak <rnayak@ti.com>
+ M:    Paul Walmsley <paul@pwsan.com>
+ L:    linux-omap@vger.kernel.org
+ S:    Maintained
+ F:    arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
+ F:    arch/arm/mach-omap2/powerdomain44xx.c
+ F:    arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
+ F:    arch/arm/mach-omap2/clockdomain44xx.c
  OMAP AUDIO SUPPORT
  M:    Jarkko Nikula <jhnikula@gmail.com>
  L:    alsa-devel@alsa-project.org (subscribers-only)
@@@ -4907,15 -4908,6 +4917,15 @@@ S:    Maintaine
  F:    drivers/block/pktcdvd.c
  F:    include/linux/pktcdvd.h
  
 +PKUNITY SOC DRIVERS
 +M:    Guan Xuetao <gxt@mprc.pku.edu.cn>
 +W:    http://mprc.pku.edu.cn/~guanxuetao/linux
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git
 +F:    drivers/input/serio/i8042-unicore32io.h
 +F:    drivers/i2c/busses/i2c-puv3.c
 +F:    drivers/video/fb-puv3.c
 +
  PMC SIERRA MaxRAID DRIVER
  M:    Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
  L:    linux-scsi@vger.kernel.org
@@@ -5179,7 -5171,6 +5189,7 @@@ RALINK RT2X00 WIRELESS LAN DRIVE
  P:    rt2x00 project
  M:    Ivo van Doorn <IvDoorn@gmail.com>
  M:    Gertjan van Wingerde <gwingerde@gmail.com>
 +M:    Helmut Schaa <helmut.schaa@googlemail.com>
  L:    linux-wireless@vger.kernel.org
  L:    users@rt2x00.serialmonkey.com (moderated for non-subscribers)
  W:    http://rt2x00.serialmonkey.com/
@@@ -5359,7 -5350,8 +5369,7 @@@ S:      Supporte
  F:    drivers/s390/crypto/
  
  S390 ZFCP DRIVER
 -M:    Christof Schmitt <christof.schmitt@de.ibm.com>
 -M:    Swen Schillig <swen@vnet.ibm.com>
 +M:    Steffen Maier <maier@linux.vnet.ibm.com>
  M:    linux390@de.ibm.com
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -5676,8 -5668,7 +5686,8 @@@ F:      arch/arm/mach-s3c2410/bast-ide.
  F:    arch/arm/mach-s3c2410/bast-irq.c
  
  TI DAVINCI MACHINE SUPPORT
 -M:    Kevin Hilman <khilman@deeprootsystems.com>
 +M:    Sekhar Nori <nsekhar@ti.com>
 +M:    Kevin Hilman <khilman@ti.com>
  L:    davinci-linux-open-source@linux.davincidsp.com (subscribers-only)
  Q:    http://patchwork.kernel.org/project/linux-davinci/list/
  S:    Supported
@@@ -6103,11 -6094,13 +6113,11 @@@ F:   sound/soc/codecs/twl4030
  TIPC NETWORK LAYER
  M:    Jon Maloy <jon.maloy@ericsson.com>
  M:    Allan Stephens <allan.stephens@windriver.com>
 -L:    tipc-discussion@lists.sourceforge.net
 +L:    netdev@vger.kernel.org (core kernel code)
 +L:    tipc-discussion@lists.sourceforge.net (user apps, general discussion)
  W:    http://tipc.sourceforge.net/
 -W:    http://tipc.cslab.ericsson.net/
 -T:    git git://tipc.cslab.ericsson.net/pub/git/tipc.git
  S:    Maintained
  F:    include/linux/tipc*.h
 -F:    include/net/tipc/
  F:    net/tipc/
  
  TILE ARCHITECTURE
@@@ -6115,7 -6108,7 +6125,7 @@@ M:      Chris Metcalf <cmetcalf@tilera.com
  W:    http://www.tilera.com/scm/
  S:    Supported
  F:    arch/tile/
 -F:    drivers/char/hvc_tile.c
 +F:    drivers/tty/hvc/hvc_tile.c
  F:    drivers/net/tile/
  
  TLAN NETWORK DRIVER
@@@ -6279,13 -6272,6 +6289,13 @@@ F:    drivers/uwb
  F:    include/linux/uwb.h
  F:    include/linux/uwb/
  
 +UNICORE32 ARCHITECTURE:
 +M:    Guan Xuetao <gxt@mprc.pku.edu.cn>
 +W:    http://mprc.pku.edu.cn/~guanxuetao/linux
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git
 +F:    arch/unicore32/
 +
  UNIFDEF
  M:    Tony Finch <dot@dotat.at>
  W:    http://dotat.at/prog/unifdef
index b69fa0a0299ece641814ea3a1f6c1084b5723e4f,b9d8a7b2a8620cc111f19e73c28469d3e957f139..eeab35dea07e343f17e4c741b2a6ee1259feee52
@@@ -45,7 -45,6 +45,7 @@@ config ARCH_OMAP
        select CPU_V7
        select ARM_GIC
        select PL310_ERRATA_588369
 +      select PL310_ERRATA_727915
        select ARM_ERRATA_720789
        select ARCH_HAS_OPP
        select PM_OPP if PM
  comment "OMAP Core Type"
        depends on ARCH_OMAP2
  
- config ARCH_OMAP2420
+ config SOC_OMAP2420
        bool "OMAP2420 support"
        depends on ARCH_OMAP2
        default y
        select OMAP_DM_TIMER
        select ARCH_OMAP_OTG
  
- config ARCH_OMAP2430
+ config SOC_OMAP2430
        bool "OMAP2430 support"
        depends on ARCH_OMAP2
        default y
        select ARCH_OMAP_OTG
  
- config ARCH_OMAP3430
+ config SOC_OMAP3430
        bool "OMAP3430 support"
        depends on ARCH_OMAP3
        default y
        select ARCH_OMAP_OTG
  
+ config SOC_OMAPTI816X
+       bool "TI816X support"
+       depends on ARCH_OMAP3
+       default y
  config OMAP_PACKAGE_ZAF
         bool
  
@@@ -107,25 -111,25 +112,25 @@@ config MACH_OMAP_GENERI
  
  config MACH_OMAP2_TUSB6010
        bool
-       depends on ARCH_OMAP2 && ARCH_OMAP2420
+       depends on ARCH_OMAP2 && SOC_OMAP2420
        default y if MACH_NOKIA_N8X0
  
  config MACH_OMAP_H4
        bool "OMAP 2420 H4 board"
-       depends on ARCH_OMAP2420
+       depends on SOC_OMAP2420
        default y
        select OMAP_PACKAGE_ZAF
        select OMAP_DEBUG_DEVICES
  
  config MACH_OMAP_APOLLON
        bool "OMAP 2420 Apollon board"
-       depends on ARCH_OMAP2420
+       depends on SOC_OMAP2420
        default y
        select OMAP_PACKAGE_ZAC
  
  config MACH_OMAP_2430SDP
        bool "OMAP 2430 SDP board"
-       depends on ARCH_OMAP2430
+       depends on SOC_OMAP2430
        default y
        select OMAP_PACKAGE_ZAC
  
@@@ -220,7 -224,7 +225,7 @@@ config MACH_NOKIA_N810_WIMA
  
  config MACH_NOKIA_N8X0
        bool "Nokia N800/N810"
-       depends on ARCH_OMAP2420
+       depends on SOC_OMAP2420
        default y
        select OMAP_PACKAGE_ZAC
        select MACH_NOKIA_N800
@@@ -295,12 -299,18 +300,18 @@@ config MACH_OMAP_3630SD
        default y
        select OMAP_PACKAGE_CBP
  
+ config MACH_TI8168EVM
+       bool "TI8168 Evaluation Module"
+       depends on SOC_OMAPTI816X
+       default y
  config MACH_OMAP_4430SDP
        bool "OMAP 4430 SDP board"
        default y
        depends on ARCH_OMAP4
        select OMAP_PACKAGE_CBL
        select OMAP_PACKAGE_CBS
+       select REGULATOR_FIXED_VOLTAGE
  
  config MACH_OMAP4_PANDA
        bool "OMAP4 Panda Board"
        depends on ARCH_OMAP4
        select OMAP_PACKAGE_CBL
        select OMAP_PACKAGE_CBS
+       select REGULATOR_FIXED_VOLTAGE
  
  config OMAP3_EMU
        bool "OMAP3 debugging peripherals"
index 64dc4176407bc14bb9b70081bb41a0b6da160fca,82b2a67f42b7de3e25496e45e7af6923bd056aba..a45cd6409686f7eadfd6cc85e24e010c628c6d0d
@@@ -31,8 -31,8 +31,8 @@@ AFLAGS_omap-headsmp.o                 :=-Wa,-march=ar
  AFLAGS_omap44xx-smc.o                 :=-Wa,-march=armv7-a$(plus_sec)
  
  # Functions loaded to SRAM
- obj-$(CONFIG_ARCH_OMAP2420)           += sram242x.o
- obj-$(CONFIG_ARCH_OMAP2430)           += sram243x.o
+ obj-$(CONFIG_SOC_OMAP2420)            += sram242x.o
+ obj-$(CONFIG_SOC_OMAP2430)            += sram243x.o
  obj-$(CONFIG_ARCH_OMAP3)              += sram34xx.o
  
  AFLAGS_sram242x.o                     :=-Wa,-march=armv6
@@@ -40,8 -40,8 +40,8 @@@ AFLAGS_sram243x.o                     :=-Wa,-march=armv
  AFLAGS_sram34xx.o                     :=-Wa,-march=armv7-a
  
  # Pin multiplexing
- obj-$(CONFIG_ARCH_OMAP2420)           += mux2420.o
- obj-$(CONFIG_ARCH_OMAP2430)           += mux2430.o
+ obj-$(CONFIG_SOC_OMAP2420)            += mux2420.o
+ obj-$(CONFIG_SOC_OMAP2430)            += mux2430.o
  obj-$(CONFIG_ARCH_OMAP3)              += mux34xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += mux44xx.o
  
@@@ -59,10 -59,10 +59,10 @@@ endi
  # Power Management
  ifeq ($(CONFIG_PM),y)
  obj-$(CONFIG_ARCH_OMAP2)              += pm24xx.o
- obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o pm_bus.o voltage.o
- obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o voltage.o \
+ obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o pm_bus.o
+ obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o \
                                           cpuidle34xx.o pm_bus.o
- obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o voltage.o pm_bus.o
+ obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o pm_bus.o
  obj-$(CONFIG_PM_DEBUG)                        += pm-debug.o
  obj-$(CONFIG_OMAP_SMARTREFLEX)          += sr_device.o smartreflex.o
  obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o
@@@ -78,13 -78,25 +78,25 @@@ endi
  
  # PRCM
  obj-$(CONFIG_ARCH_OMAP2)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
- obj-$(CONFIG_ARCH_OMAP3)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
+ obj-$(CONFIG_ARCH_OMAP3)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o \
+                                          vc3xxx_data.o vp3xxx_data.o
  # XXX The presence of cm2xxx_3xxx.o on the line below is temporary and
  # will be removed once the OMAP4 part of the codebase is converted to
  # use OMAP4-specific PRCM functions.
  obj-$(CONFIG_ARCH_OMAP4)              += prcm.o cm2xxx_3xxx.o cminst44xx.o \
                                           cm44xx.o prcm_mpu44xx.o \
-                                          prminst44xx.o
+                                          prminst44xx.o vc44xx_data.o \
+                                          vp44xx_data.o
+ # OMAP voltage domains
+ ifeq ($(CONFIG_PM),y)
+ voltagedomain-common                  := voltage.o
+ obj-$(CONFIG_ARCH_OMAP2)              += $(voltagedomain-common)
+ obj-$(CONFIG_ARCH_OMAP3)              += $(voltagedomain-common) \
+                                          voltagedomains3xxx_data.o
+ obj-$(CONFIG_ARCH_OMAP4)              += $(voltagedomain-common) \
+                                          voltagedomains44xx_data.o
+ endif
  
  # OMAP powerdomain framework
  powerdomain-common                    += powerdomain.o powerdomain-common.o
@@@ -102,39 -114,49 +114,49 @@@ obj-$(CONFIG_ARCH_OMAP4)                += $(powerdom
  
  # PRCM clockdomain control
  obj-$(CONFIG_ARCH_OMAP2)              += clockdomain.o \
+                                          clockdomain2xxx_3xxx.o \
                                           clockdomains2xxx_3xxx_data.o
  obj-$(CONFIG_ARCH_OMAP3)              += clockdomain.o \
+                                          clockdomain2xxx_3xxx.o \
                                           clockdomains2xxx_3xxx_data.o
  obj-$(CONFIG_ARCH_OMAP4)              += clockdomain.o \
+                                          clockdomain44xx.o \
                                           clockdomains44xx_data.o
  # Clock framework
  obj-$(CONFIG_ARCH_OMAP2)              += $(clock-common) clock2xxx.o \
                                           clkt2xxx_sys.o \
                                           clkt2xxx_dpllcore.o \
                                           clkt2xxx_virt_prcm_set.o \
-                                          clkt2xxx_apll.o clkt2xxx_osc.o
- obj-$(CONFIG_ARCH_OMAP2420)           += clock2420_data.o
- obj-$(CONFIG_ARCH_OMAP2430)           += clock2430.o clock2430_data.o
+                                          clkt2xxx_apll.o clkt2xxx_osc.o \
+                                          clkt2xxx_dpll.o clkt_iclk.o
+ obj-$(CONFIG_SOC_OMAP2420)            += clock2420_data.o
+ obj-$(CONFIG_SOC_OMAP2430)            += clock2430.o clock2430_data.o
  obj-$(CONFIG_ARCH_OMAP3)              += $(clock-common) clock3xxx.o \
                                           clock34xx.o clkt34xx_dpll3m2.o \
                                           clock3517.o clock36xx.o \
-                                          dpll3xxx.o clock3xxx_data.o
+                                          dpll3xxx.o clock3xxx_data.o \
+                                          clkt_iclk.o
  obj-$(CONFIG_ARCH_OMAP4)              += $(clock-common) clock44xx_data.o \
-                                          dpll3xxx.o
+                                          dpll3xxx.o dpll44xx.o
  
  # OMAP2 clock rate set data (old "OPP" data)
- obj-$(CONFIG_ARCH_OMAP2420)           += opp2420_data.o
- obj-$(CONFIG_ARCH_OMAP2430)           += opp2430_data.o
+ obj-$(CONFIG_SOC_OMAP2420)            += opp2420_data.o
+ obj-$(CONFIG_SOC_OMAP2430)            += opp2430_data.o
  
  # hwmod data
- obj-$(CONFIG_ARCH_OMAP2420)           += omap_hwmod_2420_data.o
- obj-$(CONFIG_ARCH_OMAP2430)           += omap_hwmod_2430_data.o
+ obj-$(CONFIG_SOC_OMAP2420)            += omap_hwmod_2420_data.o
+ obj-$(CONFIG_SOC_OMAP2430)            += omap_hwmod_2430_data.o
  obj-$(CONFIG_ARCH_OMAP3)              += omap_hwmod_3xxx_data.o
  obj-$(CONFIG_ARCH_OMAP4)              += omap_hwmod_44xx_data.o
  
  # EMU peripherals
  obj-$(CONFIG_OMAP3_EMU)                       += emu.o
  
+ # L3 interconnect
+ obj-$(CONFIG_ARCH_OMAP3)              += omap_l3_smx.o
+ obj-$(CONFIG_ARCH_OMAP4)              += omap_l3_noc.o
  obj-$(CONFIG_OMAP_MBOX_FWK)           += mailbox_mach.o
  mailbox_mach-objs                     := mailbox.o
  
@@@ -218,18 -240,20 +240,20 @@@ obj-$(CONFIG_MACH_OMAP4_PANDA)          += boar
                                           hsmmc.o \
                                           omap_phy_internal.o
  
- obj-$(CONFIG_MACH_OMAP3517EVM)                += board-am3517evm.o
+ obj-$(CONFIG_MACH_OMAP3517EVM)                += board-am3517evm.o \
+                                          omap_phy_internal.o \
  
  obj-$(CONFIG_MACH_CRANEBOARD)         += board-am3517crane.o
  
  obj-$(CONFIG_MACH_SBC3530)            += board-omap3stalker.o \
                                           hsmmc.o
+ obj-$(CONFIG_MACH_TI8168EVM)          += board-ti8168evm.o
  # Platform specific device init code
  usbfs-$(CONFIG_ARCH_OMAP_OTG)         := usb-fs.o
  obj-y                                 += $(usbfs-m) $(usbfs-y)
  obj-y                                 += usb-musb.o
  obj-$(CONFIG_MACH_OMAP2_TUSB6010)     += usb-tusb6010.o
 -obj-y                                 += usb-ehci.o
 +obj-y                                 += usb-host.o
  
  onenand-$(CONFIG_MTD_ONENAND_OMAP2)   := gpmc-onenand.o
  obj-y                                 += $(onenand-m) $(onenand-y)
@@@ -242,3 -266,7 +266,7 @@@ obj-y                                      += $(smc91x-m) $(smc91x-y
  
  smsc911x-$(CONFIG_SMSC911X)           := gpmc-smsc911x.o
  obj-y                                 += $(smsc911x-m) $(smsc911x-y)
+ obj-$(CONFIG_ARCH_OMAP4)              += hwspinlock.o
+ disp-$(CONFIG_OMAP2_DSS)              := display.o
+ obj-y                                 += $(disp-m) $(disp-y)
index 7542ba59f2b889dfdff860898fc8bf0b866e598b,b3918044e059874e4b2a1fa75b505cf49ff2c49b..c06eb423c4e4456bed2d8e09c4f515201101dffa
@@@ -307,34 -307,16 +307,16 @@@ static struct omap_dss_board_info sdp34
        .default_device = &sdp3430_lcd_device,
  };
  
- static struct platform_device sdp3430_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &sdp3430_dss_data,
-       },
- };
- static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
-       .supply         = "vdda_dac",
-       .dev            = &sdp3430_dss_device.dev,
- };
- static struct platform_device *sdp3430_devices[] __initdata = {
-       &sdp3430_dss_device,
- };
+ static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
+       REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
  static struct omap_board_config_kernel sdp3430_config[] __initdata = {
  };
  
- static void __init omap_3430sdp_init_irq(void)
+ static void __init omap_3430sdp_init_early(void)
  {
-       omap_board_config = sdp3430_config;
-       omap_board_config_size = ARRAY_SIZE(sdp3430_config);
-       omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
-       omap_init_irq();
  }
  
  static int sdp3430_batt_table[] = {
@@@ -370,18 -352,6 +352,6 @@@ static struct omap2_hsmmc_info mmc[] = 
        {}      /* Terminator */
  };
  
- static struct regulator_consumer_supply sdp3430_vmmc1_supply = {
-       .supply                 = "vmmc",
- };
- static struct regulator_consumer_supply sdp3430_vsim_supply = {
-       .supply                 = "vmmc_aux",
- };
- static struct regulator_consumer_supply sdp3430_vmmc2_supply = {
-       .supply                 = "vmmc",
- };
  static int sdp3430_twl_gpio_setup(struct device *dev,
                unsigned gpio, unsigned ngpio)
  {
        mmc[1].gpio_cd = gpio + 1;
        omap2_hsmmc_init(mmc);
  
-       /* link regulators to MMC adapters ... we "know" the
-        * regulators will be set up only *after* we return.
-        */
-       sdp3430_vmmc1_supply.dev = mmc[0].dev;
-       sdp3430_vsim_supply.dev = mmc[0].dev;
-       sdp3430_vmmc2_supply.dev = mmc[1].dev;
        /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
        gpio_request(gpio + 7, "sub_lcd_en_bkl");
        gpio_direction_output(gpio + 7, 0);
@@@ -427,6 -390,34 +390,34 @@@ static struct twl4030_madc_platform_dat
        .irq_line       = 1,
  };
  
+ /* regulator consumer mappings */
+ /* ads7846 on SPI */
+ static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
+       REGULATOR_SUPPLY("vcc", "spi1.0"),
+ };
+ static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
+       REGULATOR_SUPPLY("vdda_dac", "omapdss"),
+ };
+ /* VPLL2 for digital video outputs */
+ static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
+       REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
+ };
+ static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = {
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
+ };
+ static struct regulator_consumer_supply sdp3430_vsim_supplies[] = {
+       REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
+ };
+ static struct regulator_consumer_supply sdp3430_vmmc2_supplies[] = {
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
+ };
  /*
   * Apply all the fixed voltages since most versions of U-Boot
   * don't bother with that initialization.
@@@ -469,6 -460,8 +460,8 @@@ static struct regulator_init_data sdp34
                .valid_ops_mask         = REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
+       .num_consumer_supplies          = ARRAY_SIZE(sdp3430_vaux3_supplies),
+       .consumer_supplies              = sdp3430_vaux3_supplies,
  };
  
  /* VAUX4 for OMAP VDD_CSI2 (camera) */
@@@ -495,8 -488,8 +488,8 @@@ static struct regulator_init_data sdp34
                                        | REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &sdp3430_vmmc1_supply,
+       .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vmmc1_supplies),
+       .consumer_supplies      = sdp3430_vmmc1_supplies,
  };
  
  /* VMMC2 for MMC2 card */
@@@ -510,8 -503,8 +503,8 @@@ static struct regulator_init_data sdp34
                .valid_ops_mask         = REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &sdp3430_vmmc2_supply,
+       .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vmmc2_supplies),
+       .consumer_supplies      = sdp3430_vmmc2_supplies,
  };
  
  /* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
@@@ -525,8 -518,8 +518,8 @@@ static struct regulator_init_data sdp34
                                        | REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &sdp3430_vsim_supply,
+       .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vsim_supplies),
+       .consumer_supplies      = sdp3430_vsim_supplies,
  };
  
  /* VDAC for DSS driving S-Video */
@@@ -540,16 -533,8 +533,8 @@@ static struct regulator_init_data sdp34
                .valid_ops_mask         = REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &sdp3430_vdda_dac_supply,
- };
- /* VPLL2 for digital video outputs */
- static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
-       {
-               .supply         = "vdds_dsi",
-               .dev            = &sdp3430_dss_device.dev,
-       }
+       .num_consumer_supplies  = ARRAY_SIZE(sdp3430_vdda_dac_supplies),
+       .consumer_supplies      = sdp3430_vdda_dac_supplies,
  };
  
  static struct regulator_init_data sdp3430_vpll2 = {
        .consumer_supplies      = sdp3430_vpll2_supplies,
  };
  
- static struct twl4030_codec_audio_data sdp3430_audio = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data sdp3430_audio;
  
  static struct twl4030_codec_data sdp3430_codec = {
        .audio_mclk = 26000000,
@@@ -653,11 -636,11 +636,11 @@@ static void enable_board_wakeup_source(
                OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = 57,
  static struct omap_board_mux board_mux[] __initdata = {
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ static struct omap_device_pad serial1_pads[] __initdata = {
+       /*
+        * Note that off output enable is an active low
+        * signal. So setting this means pin is a
+        * input enabled in off mode
+        */
+       OMAP_MUX_STATIC("uart1_cts.uart1_cts",
+                        OMAP_PIN_INPUT |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart1_rts.uart1_rts",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart1_rx.uart1_rx",
+                        OMAP_PIN_INPUT |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart1_tx.uart1_tx",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial2_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+                        OMAP_PIN_INPUT_PULLUP |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+                        OMAP_PIN_INPUT |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial3_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+                        OMAP_PIN_INPUT_PULLDOWN |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+                        OMAP_PIN_INPUT |
+                        OMAP_PIN_OFF_INPUT_PULLDOWN |
+                        OMAP_OFFOUT_EN |
+                        OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+                        OMAP_PIN_OUTPUT |
+                        OMAP_OFF_EN |
+                        OMAP_MUX_MODE0),
+ };
+ static struct omap_board_data serial1_data = {
+       .id             = 0,
+       .pads           = serial1_pads,
+       .pads_cnt       = ARRAY_SIZE(serial1_pads),
+ };
+ static struct omap_board_data serial2_data = {
+       .id             = 1,
+       .pads           = serial2_pads,
+       .pads_cnt       = ARRAY_SIZE(serial2_pads),
+ };
+ static struct omap_board_data serial3_data = {
+       .id             = 2,
+       .pads           = serial3_pads,
+       .pads_cnt       = ARRAY_SIZE(serial3_pads),
+ };
+ static inline void board_serial_init(void)
+ {
+       omap_serial_init_port(&serial1_data);
+       omap_serial_init_port(&serial2_data);
+       omap_serial_init_port(&serial3_data);
+ }
+ #else
+ #define board_mux     NULL
+ static inline void board_serial_init(void)
+ {
+       omap_serial_init();
+ }
  #endif
  
  /*
@@@ -800,8 -883,11 +883,11 @@@ static struct omap_musb_board_data musb
  static void __init omap_3430sdp_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+       omap_board_config = sdp3430_config;
+       omap_board_config_size = ARRAY_SIZE(sdp3430_config);
+       omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
        omap3430_i2c_init();
-       platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
+       omap_display_init(&sdp3430_dss_data);
        if (omap_rev() > OMAP3430_REV_ES1_0)
                ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
        else
        spi_register_board_info(sdp3430_spi_board_info,
                                ARRAY_SIZE(sdp3430_spi_board_info));
        ads7846_dev_init();
-       omap_serial_init();
+       board_serial_init();
        usb_musb_init(&musb_board_data);
        board_smc91x_init();
-       board_flash_init(sdp_flash_partitions, chip_sel_3430);
+       board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
        sdp3430_display_init();
        enable_board_wakeup_source();
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  }
  
  MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
        /* Maintainer: Syed Khasim - Texas Instruments Inc */
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap_3430sdp_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap_3430sdp_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap_3430sdp_init,
        .timer          = &omap_timer,
  MACHINE_END
index deed2db32c53bce8834197cec8edcf7eb0d9851d,c4e22b32e47fa07085fc04f89484aa55848dab26..a5933cc15caaff8fd6e0f90e4e3853fcf93a3e25
@@@ -11,6 -11,7 +11,7 @@@
  #include <linux/platform_device.h>
  #include <linux/input.h>
  #include <linux/gpio.h>
+ #include <linux/mtd/nand.h>
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
@@@ -54,11 -55,11 +55,11 @@@ static void enable_board_wakeup_source(
                OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = 126,
  static struct omap_board_config_kernel sdp_config[] __initdata = {
  };
  
- static void __init omap_sdp_init_irq(void)
+ static void __init omap_sdp_init_early(void)
  {
-       omap_board_config = sdp_config;
-       omap_board_config_size = ARRAY_SIZE(sdp_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
                                  h8mbx00u0mer0em_sdrc_params);
-       omap_init_irq();
  }
  
  #ifdef CONFIG_OMAP_MUX
@@@ -206,19 -204,22 +204,22 @@@ static struct flash_partitions sdp_flas
  static void __init omap_sdp_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
+       omap_board_config = sdp_config;
+       omap_board_config_size = ARRAY_SIZE(sdp_config);
        zoom_peripherals_init();
        zoom_display_init();
        board_smc91x_init();
-       board_flash_init(sdp_flash_partitions, chip_sel_sdp);
+       board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16);
        enable_board_wakeup_source();
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  }
  
  MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap_sdp_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap_sdp_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap_sdp_init,
        .timer          = &omap_timer,
  MACHINE_END
index f603f3b04cb82df416ff06ac5961c1d19f3c2769,670cbd567bf3e71a644200b9764e2c3260feb25c..333ceb2c8fb02a465c8533712e0cc3f387b95eb5
@@@ -35,6 -35,7 +35,7 @@@
  #include <plat/common.h>
  #include <plat/usb.h>
  #include <plat/mmc.h>
+ #include <plat/omap4-keypad.h>
  
  #include "mux.h"
  #include "hsmmc.h"
  #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO      184
  #define OMAP4_SFH7741_ENABLE_GPIO             188
  
+ static const int sdp4430_keymap[] = {
+       KEY(0, 0, KEY_E),
+       KEY(0, 1, KEY_R),
+       KEY(0, 2, KEY_T),
+       KEY(0, 3, KEY_HOME),
+       KEY(0, 4, KEY_F5),
+       KEY(0, 5, KEY_UNKNOWN),
+       KEY(0, 6, KEY_I),
+       KEY(0, 7, KEY_LEFTSHIFT),
+       KEY(1, 0, KEY_D),
+       KEY(1, 1, KEY_F),
+       KEY(1, 2, KEY_G),
+       KEY(1, 3, KEY_SEND),
+       KEY(1, 4, KEY_F6),
+       KEY(1, 5, KEY_UNKNOWN),
+       KEY(1, 6, KEY_K),
+       KEY(1, 7, KEY_ENTER),
+       KEY(2, 0, KEY_X),
+       KEY(2, 1, KEY_C),
+       KEY(2, 2, KEY_V),
+       KEY(2, 3, KEY_END),
+       KEY(2, 4, KEY_F7),
+       KEY(2, 5, KEY_UNKNOWN),
+       KEY(2, 6, KEY_DOT),
+       KEY(2, 7, KEY_CAPSLOCK),
+       KEY(3, 0, KEY_Z),
+       KEY(3, 1, KEY_KPPLUS),
+       KEY(3, 2, KEY_B),
+       KEY(3, 3, KEY_F1),
+       KEY(3, 4, KEY_F8),
+       KEY(3, 5, KEY_UNKNOWN),
+       KEY(3, 6, KEY_O),
+       KEY(3, 7, KEY_SPACE),
+       KEY(4, 0, KEY_W),
+       KEY(4, 1, KEY_Y),
+       KEY(4, 2, KEY_U),
+       KEY(4, 3, KEY_F2),
+       KEY(4, 4, KEY_VOLUMEUP),
+       KEY(4, 5, KEY_UNKNOWN),
+       KEY(4, 6, KEY_L),
+       KEY(4, 7, KEY_LEFT),
+       KEY(5, 0, KEY_S),
+       KEY(5, 1, KEY_H),
+       KEY(5, 2, KEY_J),
+       KEY(5, 3, KEY_F3),
+       KEY(5, 4, KEY_F9),
+       KEY(5, 5, KEY_VOLUMEDOWN),
+       KEY(5, 6, KEY_M),
+       KEY(5, 7, KEY_RIGHT),
+       KEY(6, 0, KEY_Q),
+       KEY(6, 1, KEY_A),
+       KEY(6, 2, KEY_N),
+       KEY(6, 3, KEY_BACK),
+       KEY(6, 4, KEY_BACKSPACE),
+       KEY(6, 5, KEY_UNKNOWN),
+       KEY(6, 6, KEY_P),
+       KEY(6, 7, KEY_UP),
+       KEY(7, 0, KEY_PROG1),
+       KEY(7, 1, KEY_PROG2),
+       KEY(7, 2, KEY_PROG3),
+       KEY(7, 3, KEY_PROG4),
+       KEY(7, 4, KEY_F4),
+       KEY(7, 5, KEY_UNKNOWN),
+       KEY(7, 6, KEY_OK),
+       KEY(7, 7, KEY_DOWN),
+ };
+ static struct matrix_keymap_data sdp4430_keymap_data = {
+       .keymap                 = sdp4430_keymap,
+       .keymap_size            = ARRAY_SIZE(sdp4430_keymap),
+ };
+ static struct omap4_keypad_platform_data sdp4430_keypad_data = {
+       .keymap_data            = &sdp4430_keymap_data,
+       .rows                   = 8,
+       .cols                   = 8,
+ };
  static struct gpio_led sdp4430_gpio_leds[] = {
        {
                .name   = "omap4:green:debug0",
@@@ -238,16 -323,13 +323,13 @@@ static struct omap_board_config_kernel 
        { OMAP_TAG_LCD,         &sdp4430_lcd_config },
  };
  
- static void __init omap_4430sdp_init_irq(void)
+ static void __init omap_4430sdp_init_early(void)
  {
-       omap_board_config = sdp4430_config;
-       omap_board_config_size = ARRAY_SIZE(sdp4430_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(NULL, NULL);
  #ifdef CONFIG_OMAP_32K_TIMER
        omap2_gp_clockevent_set_gptimer(1);
  #endif
-       gic_init_irq();
  }
  
  static struct omap_musb_board_data musb_board_data = {
@@@ -261,15 -343,9 +343,10 @@@ static struct twl4030_usb_data omap4_us
        .phy_exit       = omap4430_phy_exit,
        .phy_power      = omap4430_phy_power,
        .phy_set_clock  = omap4430_phy_set_clk,
 +      .phy_suspend    = omap4430_phy_suspend,
  };
  
  static struct omap2_hsmmc_info mmc[] = {
-       {
-               .mmc            = 1,
-               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
-               .gpio_wp        = -EINVAL,
-       },
        {
                .mmc            = 2,
                .caps           =  MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
                .nonremovable   = true,
                .ocr_mask       = MMC_VDD_29_30,
        },
+       {
+               .mmc            = 1,
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
+               .gpio_wp        = -EINVAL,
+       },
        {}      /* Terminator */
  };
  
  static struct regulator_consumer_supply sdp4430_vaux_supply[] = {
        {
                .supply = "vmmc",
-               .dev_name = "mmci-omap-hs.1",
+               .dev_name = "omap_hsmmc.1",
        },
  };
  static struct regulator_consumer_supply sdp4430_vmmc_supply[] = {
        {
                .supply = "vmmc",
-               .dev_name = "mmci-omap-hs.0",
+               .dev_name = "omap_hsmmc.0",
        },
  };
  
@@@ -424,7 -505,6 +506,6 @@@ static struct regulator_init_data sdp44
        .constraints = {
                .min_uV                 = 2100000,
                .max_uV                 = 2100000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -436,7 -516,6 +517,6 @@@ static struct regulator_init_data sdp44
        .constraints = {
                .min_uV                 = 1800000,
                .max_uV                 = 1800000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -448,7 -527,6 +528,6 @@@ static struct regulator_init_data sdp44
        .constraints = {
                .min_uV                 = 1800000,
                .max_uV                 = 1800000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -547,9 -625,76 +626,76 @@@ static struct omap_board_mux board_mux[
        OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ static struct omap_device_pad serial2_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial3_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial4_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart4_rx.uart4_rx",
+                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart4_tx.uart4_tx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_board_data serial2_data = {
+       .id             = 1,
+       .pads           = serial2_pads,
+       .pads_cnt       = ARRAY_SIZE(serial2_pads),
+ };
+ static struct omap_board_data serial3_data = {
+       .id             = 2,
+       .pads           = serial3_pads,
+       .pads_cnt       = ARRAY_SIZE(serial3_pads),
+ };
+ static struct omap_board_data serial4_data = {
+       .id             = 3,
+       .pads           = serial4_pads,
+       .pads_cnt       = ARRAY_SIZE(serial4_pads),
+ };
+ static inline void board_serial_init(void)
+ {
+       struct omap_board_data bdata;
+       bdata.flags     = 0;
+       bdata.pads      = NULL;
+       bdata.pads_cnt  = 0;
+       bdata.id        = 0;
+       /* pass dummy data for UART1 */
+       omap_serial_init_port(&bdata);
+       omap_serial_init_port(&serial2_data);
+       omap_serial_init_port(&serial3_data);
+       omap_serial_init_port(&serial4_data);
+ }
  #else
  #define board_mux     NULL
- #endif
+ static inline void board_serial_init(void)
+ {
+       omap_serial_init();
+ }
+  #endif
  
  static void __init omap_4430sdp_init(void)
  {
                package = OMAP_PACKAGE_CBL;
        omap4_mux_init(board_mux, package);
  
+       omap_board_config = sdp4430_config;
+       omap_board_config_size = ARRAY_SIZE(sdp4430_config);
        omap4_i2c_init();
        omap_sfh7741prox_init();
        platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
-       omap_serial_init();
+       board_serial_init();
        omap4_twl6030_hsmmc_init(mmc);
  
        usb_musb_init(&musb_board_data);
                spi_register_board_info(sdp4430_spi_board_info,
                                ARRAY_SIZE(sdp4430_spi_board_info));
        }
+       status = omap4_keyboard_init(&sdp4430_keypad_data);
+       if (status)
+               pr_err("Keypad initialization failed: %d\n", status);
  }
  
  static void __init omap_4430sdp_map_io(void)
  MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
        /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */
        .boot_params    = 0x80000100,
-       .map_io         = omap_4430sdp_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap_4430sdp_init_irq,
+       .map_io         = omap_4430sdp_map_io,
+       .init_early     = omap_4430sdp_init_early,
+       .init_irq       = gic_init_irq,
        .init_machine   = omap_4430sdp_init,
        .timer          = &omap_timer,
  MACHINE_END
index e3a194f6b13f42e8b244b5b79c6f76e53826d403,f53bbb2c34787005631fd9827462005a915f5a58..a890d244fec688fdb93b1e44a7d8e51b35b2a373
@@@ -49,20 -49,16 +49,16 @@@ static struct omap_board_mux board_mux[
  #define board_mux     NULL
  #endif
  
- static void __init am3517_crane_init_irq(void)
+ static void __init am3517_crane_init_early(void)
  {
-       omap_board_config = am3517_crane_config;
-       omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(NULL, NULL);
-       omap_init_irq();
  }
  
 -static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static struct usbhs_omap_board_data usbhs_bdata __initdata = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = GPIO_USB_NRESET,
@@@ -77,6 -73,9 +73,9 @@@ static void __init am3517_crane_init(vo
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
        omap_serial_init();
  
+       omap_board_config = am3517_crane_config;
+       omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
        /* Configure GPIO for EHCI port */
        if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {
                pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",
                return;
        }
  
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  }
  
  MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = am3517_crane_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = am3517_crane_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = am3517_crane_init,
        .timer          = &omap_timer,
  MACHINE_END
index 913538ad17d8261afb324aed5ba178ae512db2c0,77541cf59bd4f4f6c3ef05c417d340de66861034..ce7d5e6e41508c3708a64b9680566dce6933b9dc
@@@ -199,6 -199,9 +199,9 @@@ static struct pca953x_platform_data am3
        .gpio_base      = OMAP_MAX_GPIO_LINES,
  };
  static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("tlv320aic23", 0x1A),
+       },
        {
                I2C_BOARD_INFO("tca6416", 0x21),
                .platform_data = &am3517evm_gpio_expander_info_0,
@@@ -378,37 -381,23 +381,23 @@@ static struct omap_dss_board_info am351
        .default_device = &am3517_evm_lcd_device,
  };
  
- static struct platform_device am3517_evm_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &am3517_evm_dss_data,
-       },
- };
  /*
   * Board initialization
   */
- static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
- };
- static struct platform_device *am3517_evm_devices[] __initdata = {
-       &am3517_evm_dss_device,
- };
- static void __init am3517_evm_init_irq(void)
+ static void __init am3517_evm_init_early(void)
  {
-       omap_board_config = am3517_evm_config;
-       omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(NULL, NULL);
-       omap_init_irq();
  }
  
  static struct omap_musb_board_data musb_board_data = {
        .interface_type         = MUSB_INTERFACE_ULPI,
        .mode                   = MUSB_OTG,
        .power                  = 500,
+       .set_phy_power          = am35x_musb_phy_power,
+       .clear_irq              = am35x_musb_clear_irq,
+       .set_mode               = am35x_musb_set_mode,
+       .reset                  = am35x_musb_reset,
  };
  
  static __init void am3517_evm_musb_init(void)
        usb_musb_init(&musb_board_data);
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
  #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
                defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
  #else
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
  #endif
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = 57,
@@@ -490,19 -479,22 +479,22 @@@ static void am3517_evm_hecc_init(struc
        platform_device_register(&am3517_hecc_device);
  }
  
+ static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
+ };
  static void __init am3517_evm_init(void)
  {
+       omap_board_config = am3517_evm_config;
+       omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
  
        am3517_evm_i2c_init();
-       platform_add_devices(am3517_evm_devices,
-                               ARRAY_SIZE(am3517_evm_devices));
+       omap_display_init(&am3517_evm_dss_data);
        omap_serial_init();
  
        /* Configure GPIO for EHCI port */
        omap_mux_init_gpio(57, OMAP_PIN_OUTPUT);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        am3517_evm_hecc_init(&am3517_evm_hecc_pdata);
        /* DSS */
        am3517_evm_display_init();
  
  MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = am3517_evm_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = am3517_evm_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = am3517_evm_init,
        .timer          = &omap_timer,
  MACHINE_END
index 9be7289cbb56f2461a806c6f29fc37c430c6fe81,71545c95238cfd3948d526a71dd394fcfaed521e..7b5647954c13d3d59b128e53fcc4a49da6836b81
@@@ -401,14 -401,6 +401,6 @@@ static struct omap_dss_board_info cm_t3
        .default_device = &cm_t35_dvi_device,
  };
  
- static struct platform_device cm_t35_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &cm_t35_dss_data,
-       },
- };
  static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
        .turbo_mode     = 0,
        .single_channel = 1,    /* 0: slave, 1: master */
@@@ -468,7 -460,7 +460,7 @@@ static void __init cm_t35_init_display(
        msleep(50);
        gpio_set_value(lcd_en_gpio, 1);
  
-       err = platform_device_register(&cm_t35_dss_device);
+       err = omap_display_init(&cm_t35_dss_data);
        if (err) {
                pr_err("CM-T35: failed to register DSS device\n");
                goto err_dev_reg;
@@@ -495,15 -487,11 +487,11 @@@ static struct regulator_consumer_suppl
        .supply                 = "vmmc_aux",
  };
  
- static struct regulator_consumer_supply cm_t35_vdac_supply = {
-       .supply         = "vdda_dac",
-       .dev            = &cm_t35_dss_device.dev,
- };
+ static struct regulator_consumer_supply cm_t35_vdac_supply =
+       REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
- static struct regulator_consumer_supply cm_t35_vdvi_supply = {
-       .supply         = "vdvi",
-       .dev            = &cm_t35_dss_device.dev,
- };
+ static struct regulator_consumer_supply cm_t35_vdvi_supply =
+       REGULATOR_SUPPLY("vdvi", "omapdss");
  
  /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
  static struct regulator_init_data cm_t35_vmmc1 = {
@@@ -605,10 -593,10 +593,10 @@@ static struct omap2_hsmmc_info mmc[] = 
        {}      /* Terminator */
  };
  
 -static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static struct usbhs_omap_board_data usbhs_bdata __initdata = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = OMAP_MAX_GPIO_LINES + 6,
@@@ -680,20 -668,14 +668,14 @@@ static void __init cm_t35_init_i2c(void
                              ARRAY_SIZE(cm_t35_i2c_boardinfo));
  }
  
- static struct omap_board_config_kernel cm_t35_config[] __initdata = {
- };
- static void __init cm_t35_init_irq(void)
+ static void __init cm_t35_init_early(void)
  {
-       omap_board_config = cm_t35_config;
-       omap_board_config_size = ARRAY_SIZE(cm_t35_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                             mt46h32m32lf6_sdrc_params);
-       omap_init_irq();
  }
  
+ #ifdef CONFIG_OMAP_MUX
  static struct omap_board_mux board_mux[] __initdata = {
        /* nCS and IRQ for CM-T35 ethernet */
        OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
  
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ #endif
  
  static struct omap_musb_board_data musb_board_data = {
        .interface_type         = MUSB_INTERFACE_ULPI,
        .power                  = 100,
  };
  
+ static struct omap_board_config_kernel cm_t35_config[] __initdata = {
+ };
  static void __init cm_t35_init(void)
  {
+       omap_board_config = cm_t35_config;
+       omap_board_config_size = ARRAY_SIZE(cm_t35_config);
        omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
        omap_serial_init();
        cm_t35_init_i2c();
        cm_t35_init_display();
  
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  }
  
  MACHINE_START(CM_T35, "Compulab CM-T35")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = cm_t35_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = cm_t35_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = cm_t35_init,
        .timer          = &omap_timer,
  MACHINE_END
index 8e18dc76b11e8b3682182ce062743cbc6d3982ee,4c737e4953cab4c3a5dcf0bda07296cd93972657..a27e3eee829259e7c7f608200f593a0d1400f385
@@@ -167,10 -167,10 +167,10 @@@ static inline void cm_t3517_init_rtc(vo
  #define HSUSB2_RESET_GPIO     (147)
  #define USB_HUB_RESET_GPIO    (152)
  
 -static struct ehci_hcd_omap_platform_data cm_t3517_ehci_pdata __initdata = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = HSUSB1_RESET_GPIO,
@@@ -192,7 -192,7 +192,7 @@@ static int cm_t3517_init_usbh(void
                msleep(1);
        }
  
 -      usb_ehci_init(&cm_t3517_ehci_pdata);
 +      usbhs_init(&cm_t3517_ehci_pdata);
  
        return 0;
  }
@@@ -254,16 -254,13 +254,13 @@@ static inline void cm_t3517_init_nand(v
  static struct omap_board_config_kernel cm_t3517_config[] __initdata = {
  };
  
- static void __init cm_t3517_init_irq(void)
+ static void __init cm_t3517_init_early(void)
  {
-       omap_board_config = cm_t3517_config;
-       omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(NULL, NULL);
-       omap_init_irq();
  }
  
+ #ifdef CONFIG_OMAP_MUX
  static struct omap_board_mux board_mux[] __initdata = {
        /* GPIO186 - Green LED */
        OMAP3_MUX(SYS_CLKOUT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
  
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ #endif
  
  static void __init cm_t3517_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
        omap_serial_init();
+       omap_board_config = cm_t3517_config;
+       omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
        cm_t3517_init_leds();
        cm_t3517_init_nand();
        cm_t3517_init_rtc();
  
  MACHINE_START(CM_T3517, "Compulab CM-T3517")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = cm_t3517_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = cm_t3517_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = cm_t3517_init,
        .timer          = &omap_timer,
  MACHINE_END
index bc0141b98694da2ca108d42df50413818082e6a6,472a25b2daddcf37614b0955ae83165b770ae6b5..aa27483c493ef8054f4ceafa8255a1f141b64933
@@@ -140,7 -140,7 +140,7 @@@ static void devkit8000_panel_disable_dv
  }
  
  static struct regulator_consumer_supply devkit8000_vmmc1_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
  
  
  /* ads7846 on SPI */
@@@ -195,14 -195,6 +195,6 @@@ static struct omap_dss_board_info devki
        .default_device = &devkit8000_lcd_device,
  };
  
- static struct platform_device devkit8000_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &devkit8000_dss_data,
-       },
- };
  static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
        REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
@@@ -350,9 -342,7 +342,7 @@@ static struct twl4030_usb_data devkit80
        .usb_mode       = T2_USB_MODE_ULPI,
  };
  
- static struct twl4030_codec_audio_data devkit8000_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data devkit8000_audio_data;
  
  static struct twl4030_codec_data devkit8000_codec_data = {
        .audio_mclk = 26000000,
@@@ -456,11 -446,15 +446,15 @@@ static struct platform_device keys_gpi
  };
  
  
- static void __init devkit8000_init_irq(void)
+ static void __init devkit8000_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
+ }
+ static void __init devkit8000_init_irq(void)
+ {
        omap_init_irq();
  #ifdef CONFIG_OMAP_32K_TIMER
        omap2_gp_clockevent_set_gptimer(12);
@@@ -575,7 -569,6 +569,6 @@@ static void __init omap_dm9000_init(voi
  }
  
  static struct platform_device *devkit8000_devices[] __initdata = {
-       &devkit8000_dss_device,
        &leds_gpio,
        &keys_gpio,
        &omap_dm9000_dev,
@@@ -620,11 -613,11 +613,11 @@@ static struct omap_musb_board_data musb
        .power                  = 100,
  };
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = -EINVAL,
        .reset_gpio_port[2]  = -EINVAL
  };
  
+ #ifdef CONFIG_OMAP_MUX
  static struct omap_board_mux board_mux[] __initdata = {
        /* nCS and IRQ for Devkit8000 ethernet */
        OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE0),
  
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ #endif
  
  static void __init devkit8000_init(void)
  {
        platform_add_devices(devkit8000_devices,
                        ARRAY_SIZE(devkit8000_devices));
  
+       omap_display_init(&devkit8000_dss_data);
        spi_register_board_info(devkit8000_spi_board_info,
        ARRAY_SIZE(devkit8000_spi_board_info));
  
        devkit8000_ads7846_init();
  
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        devkit8000_flash_init();
  
        /* Ensure SDRC pins are mux'd for self-refresh */
  
  MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
+       .map_io         = omap3_map_io,
+       .init_early     = devkit8000_init_early,
        .init_irq       = devkit8000_init_irq,
        .init_machine   = devkit8000_init,
        .timer          = &omap_timer,
index f9f53441931125e2ef54994ba4b781dc332d131d,c4b3c1c47ec6f7166dc5d45dbacbbabf7812efdd..d3199b4ecdb6df67f986d4b5506f13829502eb6b
@@@ -250,7 -250,7 +250,7 @@@ static inline void __init igep2_init_sm
  #endif
  
  static struct regulator_consumer_supply igep2_vmmc1_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
  
  /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
  static struct regulator_init_data igep2_vmmc1 = {
  };
  
  static struct regulator_consumer_supply igep2_vio_supply =
-       REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1");
+       REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
  
  static struct regulator_init_data igep2_vio = {
        .constraints = {
  };
  
  static struct regulator_consumer_supply igep2_vmmc2_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
  
  static struct regulator_init_data igep2_vmmc2 = {
        .constraints            = {
@@@ -485,18 -485,8 +485,8 @@@ static struct omap_dss_board_info igep2
        .default_device = &igep2_dvi_device,
  };
  
- static struct platform_device igep2_dss_device = {
-       .name   = "omapdss",
-       .id     = -1,
-       .dev    = {
-               .platform_data = &igep2_dss_data,
-       },
- };
- static struct regulator_consumer_supply igep2_vpll2_supply = {
-       .supply = "vdds_dsi",
-       .dev    = &igep2_dss_device.dev,
- };
+ static struct regulator_consumer_supply igep2_vpll2_supply =
+       REGULATOR_SUPPLY("vdds_dsi", "omapdss");
  
  static struct regulator_init_data igep2_vpll2 = {
        .constraints = {
@@@ -521,21 -511,17 +511,17 @@@ static void __init igep2_display_init(v
  }
  
  static struct platform_device *igep2_devices[] __initdata = {
-       &igep2_dss_device,
        &igep2_vwlan_device,
  };
  
- static void __init igep2_init_irq(void)
+ static void __init igep2_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(m65kxxxxam_sdrc_params,
                                  m65kxxxxam_sdrc_params);
-       omap_init_irq();
  }
  
- static struct twl4030_codec_audio_data igep2_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data igep2_audio_data;
  
  static struct twl4030_codec_data igep2_codec_data = {
        .audio_mclk = 26000000,
@@@ -627,10 -613,10 +613,10 @@@ static struct omap_musb_board_data musb
        .power                  = 100,
  };
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset = true,
        .reset_gpio_port[0] = IGEP2_GPIO_USBH_NRESET,
@@@ -697,9 -683,10 +683,10 @@@ static void __init igep2_init(void
        /* Register I2C busses and drivers */
        igep2_i2c_init();
        platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
+       omap_display_init(&igep2_dss_data);
        omap_serial_init();
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  
        igep2_flash_init();
        igep2_leds_init();
  
  MACHINE_START(IGEP0020, "IGEP v2 board")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = igep2_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = igep2_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = igep2_init,
        .timer          = &omap_timer,
  MACHINE_END
index 579fc2d2525fb2521d1d4ae81329adbf53d232d9,4273d0672ef6f9842594a4371a2658ebc0c8ff7e..b10db0e6ee62d897bce811b0279e1985a74cc901
@@@ -142,7 -142,7 +142,7 @@@ static void __init igep3_flash_init(voi
  #endif
  
  static struct regulator_consumer_supply igep3_vmmc1_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
  
  /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
  static struct regulator_init_data igep3_vmmc1 = {
  };
  
  static struct regulator_consumer_supply igep3_vio_supply =
-       REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1");
+       REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
  
  static struct regulator_init_data igep3_vio = {
        .constraints = {
  };
  
  static struct regulator_consumer_supply igep3_vmmc2_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
  
  static struct regulator_init_data igep3_vmmc2 = {
        .constraints    = {
@@@ -331,12 -331,11 +331,11 @@@ static struct platform_device *igep3_de
        &igep3_vwlan_device,
  };
  
- static void __init igep3_init_irq(void)
+ static void __init igep3_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(m65kxxxxam_sdrc_params,
                                  m65kxxxxam_sdrc_params);
-       omap_init_irq();
  }
  
  static struct twl4030_platform_data igep3_twl4030_pdata = {
@@@ -408,10 -407,10 +407,10 @@@ static void __init igep3_wifi_bt_init(v
  void __init igep3_wifi_bt_init(void) {}
  #endif
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset = true,
        .reset_gpio_port[0] = -EINVAL,
@@@ -435,7 -434,7 +434,7 @@@ static void __init igep3_init(void
        platform_add_devices(igep3_devices, ARRAY_SIZE(igep3_devices));
        omap_serial_init();
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  
        igep3_flash_init();
        igep3_leds_init();
@@@ -452,7 -451,8 +451,8 @@@ MACHINE_START(IGEP0030, "IGEP OMAP3 mod
        .boot_params    = 0x80000100,
        .reserve        = omap_reserve,
        .map_io         = omap3_map_io,
-       .init_irq       = igep3_init_irq,
+       .init_early     = igep3_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = igep3_init,
        .timer          = &omap_timer,
  MACHINE_END
index f0963b6e4627ba79308751bf96224c9a0977b7f9,20c5dbea895387aa72ed8eee8d4d52dc1ee88240..7640c054f43b6be37c8f92a9dd72d070c6cffbe4
@@@ -23,6 -23,7 +23,7 @@@
  #include <linux/gpio.h>
  #include <linux/input.h>
  #include <linux/gpio_keys.h>
+ #include <linux/opp.h>
  
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
  #include <plat/gpmc.h>
  #include <plat/nand.h>
  #include <plat/usb.h>
+ #include <plat/omap_device.h>
  
  #include "mux.h"
  #include "hsmmc.h"
  #include "timer-gp.h"
+ #include "pm.h"
  
  #define NAND_BLOCK_SIZE               SZ_128K
  
@@@ -228,14 -231,6 +231,6 @@@ static struct omap_dss_board_info beagl
        .default_device = &beagle_dvi_device,
  };
  
- static struct platform_device beagle_dss_device = {
-       .name          = "omapdss",
-       .id            = -1,
-       .dev            = {
-               .platform_data = &beagle_dss_data,
-       },
- };
  static struct regulator_consumer_supply beagle_vdac_supply =
        REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
@@@ -435,9 -430,7 +430,7 @@@ static struct twl4030_usb_data beagle_u
        .usb_mode       = T2_USB_MODE_ULPI,
  };
  
- static struct twl4030_codec_audio_data beagle_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data beagle_audio_data;
  
  static struct twl4030_codec_data beagle_codec_data = {
        .audio_mclk = 26000000,
@@@ -536,11 -529,15 +529,15 @@@ static struct platform_device keys_gpi
        },
  };
  
- static void __init omap3_beagle_init_irq(void)
+ static void __init omap3_beagle_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
+ }
+ static void __init omap3_beagle_init_irq(void)
+ {
        omap_init_irq();
  #ifdef CONFIG_OMAP_32K_TIMER
        omap2_gp_clockevent_set_gptimer(12);
  static struct platform_device *omap3_beagle_devices[] __initdata = {
        &leds_gpio,
        &keys_gpio,
-       &beagle_dss_device,
  };
  
  static void __init omap3beagle_flash_init(void)
        }
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = -EINVAL,
@@@ -610,6 -606,52 +606,52 @@@ static struct omap_musb_board_data musb
        .power                  = 100,
  };
  
+ static void __init beagle_opp_init(void)
+ {
+       int r = 0;
+       /* Initialize the omap3 opp table */
+       if (omap3_opp_init()) {
+               pr_err("%s: opp default init failed\n", __func__);
+               return;
+       }
+       /* Custom OPP enabled for XM */
+       if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
+               struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
+               struct omap_hwmod *dh = omap_hwmod_lookup("iva");
+               struct device *dev;
+               if (!mh || !dh) {
+                       pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
+                               __func__, mh, dh);
+                       return;
+               }
+               /* Enable MPU 1GHz and lower opps */
+               dev = &mh->od->pdev.dev;
+               r = opp_enable(dev, 800000000);
+               /* TODO: MPU 1GHz needs SR and ABB */
+               /* Enable IVA 800MHz and lower opps */
+               dev = &dh->od->pdev.dev;
+               r |= opp_enable(dev, 660000000);
+               /* TODO: DSP 800MHz needs SR and ABB */
+               if (r) {
+                       pr_err("%s: failed to enable higher opp %d\n",
+                               __func__, r);
+                       /*
+                        * Cleanup - disable the higher freqs - we dont care
+                        * about the results
+                        */
+                       dev = &mh->od->pdev.dev;
+                       opp_disable(dev, 800000000);
+                       dev = &dh->od->pdev.dev;
+                       opp_disable(dev, 660000000);
+               }
+       }
+       return;
+ }
  static void __init omap3_beagle_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
        omap3_beagle_i2c_init();
        platform_add_devices(omap3_beagle_devices,
                        ARRAY_SIZE(omap3_beagle_devices));
+       omap_display_init(&beagle_dss_data);
        omap_serial_init();
  
        omap_mux_init_gpio(170, OMAP_PIN_INPUT);
        gpio_direction_output(170, true);
  
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        omap3beagle_flash_init();
  
        /* Ensure SDRC pins are mux'd for self-refresh */
        omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
  
        beagle_display_init();
+       beagle_opp_init();
  }
  
  MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
        /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
+       .map_io         = omap3_map_io,
+       .init_early     = omap3_beagle_init_early,
        .init_irq       = omap3_beagle_init_irq,
        .init_machine   = omap3_beagle_init,
        .timer          = &omap_timer,
index 38a2d91790c06d9b6a56b83670d6c14911a36d11,b65848c59e1d3ab2340d985bcd2aa0ea338d6119..0fa2c7b208b1fe281ed7fadbdfe924ffdcc437ca
@@@ -30,6 -30,8 +30,8 @@@
  #include <linux/usb/otg.h>
  #include <linux/smsc911x.h>
  
+ #include <linux/wl12xx.h>
+ #include <linux/regulator/fixed.h>
  #include <linux/regulator/machine.h>
  #include <linux/mmc/host.h>
  
  #define OMAP3EVM_ETHR_ID_REV  0x50
  #define OMAP3EVM_ETHR_GPIO_IRQ        176
  #define OMAP3EVM_SMSC911X_CS  5
+ /*
+  * Eth Reset signal
+  *    64 = Generation 1 (<=RevD)
+  *    7 = Generation 2 (>=RevE)
+  */
+ #define OMAP3EVM_GEN1_ETHR_GPIO_RST   64
+ #define OMAP3EVM_GEN2_ETHR_GPIO_RST   7
  
  static u8 omap3_evm_version;
  
@@@ -124,10 -133,15 +133,15 @@@ static struct platform_device omap3evm_
  
  static inline void __init omap3evm_init_smsc911x(void)
  {
-       int eth_cs;
+       int eth_cs, eth_rst;
        struct clk *l3ck;
        unsigned int rate;
  
+       if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
+               eth_rst = OMAP3EVM_GEN1_ETHR_GPIO_RST;
+       else
+               eth_rst = OMAP3EVM_GEN2_ETHR_GPIO_RST;
        eth_cs = OMAP3EVM_SMSC911X_CS;
  
        l3ck = clk_get(NULL, "l3_ck");
        else
                rate = clk_get_rate(l3ck);
  
+       /* Configure ethernet controller reset gpio */
+       if (cpu_is_omap3430()) {
+               if (gpio_request(eth_rst, "SMSC911x gpio") < 0) {
+                       pr_err(KERN_ERR "Failed to request %d for smsc911x\n",
+                                       eth_rst);
+                       return;
+               }
+               if (gpio_direction_output(eth_rst, 1) < 0) {
+                       pr_err(KERN_ERR "Failed to set direction of %d for" \
+                                       " smsc911x\n", eth_rst);
+                       return;
+               }
+               /* reset pulse to ethernet controller*/
+               usleep_range(150, 220);
+               gpio_set_value(eth_rst, 0);
+               usleep_range(150, 220);
+               gpio_set_value(eth_rst, 1);
+               usleep_range(1, 2);
+       }
        if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) {
                printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
                        OMAP3EVM_ETHR_GPIO_IRQ);
@@@ -235,9 -270,9 +270,9 @@@ static int omap3_evm_enable_lcd(struct 
        gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
  
        if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
-               gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
+               gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
        else
-               gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
+               gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
  
        lcd_enabled = 1;
        return 0;
@@@ -248,9 -283,9 +283,9 @@@ static void omap3_evm_disable_lcd(struc
        gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
  
        if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
-               gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
+               gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
        else
-               gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
+               gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
  
        lcd_enabled = 0;
  }
@@@ -289,7 -324,7 +324,7 @@@ static int omap3_evm_enable_dvi(struct 
                return -EINVAL;
        }
  
-       gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
+       gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
  
        dvi_enabled = 1;
        return 0;
  
  static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
  {
-       gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
+       gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
  
        dvi_enabled = 0;
  }
@@@ -328,14 -363,6 +363,6 @@@ static struct omap_dss_board_info omap3
        .default_device = &omap3_evm_lcd_device,
  };
  
- static struct platform_device omap3_evm_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &omap3_evm_dss_data,
-       },
- };
  static struct regulator_consumer_supply omap3evm_vmmc1_supply = {
        .supply                 = "vmmc",
  };
@@@ -381,6 -408,16 +408,16 @@@ static struct omap2_hsmmc_info mmc[] = 
                .gpio_cd        = -EINVAL,
                .gpio_wp        = 63,
        },
+ #ifdef CONFIG_WL12XX_PLATFORM_DATA
+       {
+               .name           = "wl1271",
+               .mmc            = 2,
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
+               .gpio_wp        = -EINVAL,
+               .gpio_cd        = -EINVAL,
+               .nonremovable   = true,
+       },
+ #endif
        {}      /* Terminator */
  };
  
@@@ -411,6 -448,8 +448,8 @@@ static struct platform_device leds_gpi
  static int omap3evm_twl_gpio_setup(struct device *dev,
                unsigned gpio, unsigned ngpio)
  {
+       int r;
        /* gpio + 0 is "mmc0_cd" (input/IRQ) */
        omap_mux_init_gpio(63, OMAP_PIN_INPUT);
        mmc[0].gpio_cd = gpio + 0;
         */
  
        /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
-       gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
-       gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
+       r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
+       if (!r)
+               r = gpio_direction_output(gpio + TWL4030_GPIO_MAX,
+                       (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
+       if (r)
+               printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
  
        /* gpio + 7 == DVI Enable */
        gpio_request(gpio + 7, "EN_DVI");
@@@ -491,19 -534,15 +534,15 @@@ static struct twl4030_madc_platform_dat
        .irq_line       = 1,
  };
  
- static struct twl4030_codec_audio_data omap3evm_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data omap3evm_audio_data;
  
  static struct twl4030_codec_data omap3evm_codec_data = {
        .audio_mclk = 26000000,
        .audio = &omap3evm_audio_data,
  };
  
- static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = {
-       .supply         = "vdda_dac",
-       .dev            = &omap3_evm_dss_device.dev,
- };
+ static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
+       REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
  /* VDAC for DSS driving S-Video */
  static struct regulator_init_data omap3_evm_vdac = {
@@@ -538,6 -577,66 +577,66 @@@ static struct regulator_init_data omap3
        .consumer_supplies      = &omap3_evm_vpll2_supply,
  };
  
+ /* ads7846 on SPI */
+ static struct regulator_consumer_supply omap3evm_vio_supply =
+       REGULATOR_SUPPLY("vcc", "spi1.0");
+ /* VIO for ads7846 */
+ static struct regulator_init_data omap3evm_vio = {
+       .constraints = {
+               .min_uV                 = 1800000,
+               .max_uV                 = 1800000,
+               .apply_uV               = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE
+                                       | REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies  = 1,
+       .consumer_supplies      = &omap3evm_vio_supply,
+ };
+ #ifdef CONFIG_WL12XX_PLATFORM_DATA
+ #define OMAP3EVM_WLAN_PMENA_GPIO      (150)
+ #define OMAP3EVM_WLAN_IRQ_GPIO                (149)
+ static struct regulator_consumer_supply omap3evm_vmmc2_supply =
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
+ /* VMMC2 for driving the WL12xx module */
+ static struct regulator_init_data omap3evm_vmmc2 = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies  = 1,
+       .consumer_supplies = &omap3evm_vmmc2_supply,
+ };
+ static struct fixed_voltage_config omap3evm_vwlan = {
+       .supply_name            = "vwl1271",
+       .microvolts             = 1800000, /* 1.80V */
+       .gpio                   = OMAP3EVM_WLAN_PMENA_GPIO,
+       .startup_delay          = 70000, /* 70ms */
+       .enable_high            = 1,
+       .enabled_at_boot        = 0,
+       .init_data              = &omap3evm_vmmc2,
+ };
+ static struct platform_device omap3evm_wlan_regulator = {
+       .name           = "reg-fixed-voltage",
+       .id             = 1,
+       .dev = {
+               .platform_data  = &omap3evm_vwlan,
+       },
+ };
+ struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
+       .irq = OMAP_GPIO_IRQ(OMAP3EVM_WLAN_IRQ_GPIO),
+       .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
+ };
+ #endif
  static struct twl4030_platform_data omap3evm_twldata = {
        .irq_base       = TWL4030_IRQ_BASE,
        .irq_end        = TWL4030_IRQ_END,
        .codec          = &omap3evm_codec_data,
        .vdac           = &omap3_evm_vdac,
        .vpll2          = &omap3_evm_vpll2,
+       .vio            = &omap3evm_vio,
  };
  
  static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = {
@@@ -625,24 -725,17 +725,17 @@@ static struct spi_board_info omap3evm_s
  static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
  };
  
- static void __init omap3_evm_init_irq(void)
+ static void __init omap3_evm_init_early(void)
  {
-       omap_board_config = omap3_evm_config;
-       omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
-       omap_init_irq();
  }
  
- static struct platform_device *omap3_evm_devices[] __initdata = {
-       &omap3_evm_dss_device,
- };
 -static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
 +static struct usbhs_omap_board_data usbhs_bdata __initdata = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        /* PHY reset GPIO will be runtime programmed based on EVM version */
  };
  
  #ifdef CONFIG_OMAP_MUX
- static struct omap_board_mux board_mux[] __initdata = {
+ static struct omap_board_mux omap35x_board_mux[] __initdata = {
+       OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
+                               OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
+                               OMAP_PIN_OFF_WAKEUPENABLE),
+       OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
+                               OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
+                               OMAP_PIN_OFF_WAKEUPENABLE),
+       OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
+                               OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
+                               OMAP_PIN_OFF_NONE),
+ #ifdef CONFIG_WL12XX_PLATFORM_DATA
+       /* WLAN IRQ - GPIO 149 */
+       OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
+       /* WLAN POWER ENABLE - GPIO 150 */
+       OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
+       /* MMC2 SDIO pin muxes for WL12xx */
+       OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+ #endif
+       { .reg_offset = OMAP_MUX_TERMINATOR },
+ };
+ static struct omap_board_mux omap36x_board_mux[] __initdata = {
        OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
                                OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
                                OMAP_PIN_OFF_WAKEUPENABLE),
        OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
-                               OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW),
+                               OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
+                               OMAP_PIN_OFF_WAKEUPENABLE),
+       /* AM/DM37x EVM: DSS data bus muxed with sys_boot */
+       OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT0, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT1, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT3, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+       OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
+ #ifdef CONFIG_WL12XX_PLATFORM_DATA
+       /* WLAN IRQ - GPIO 149 */
+       OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
+       /* WLAN POWER ENABLE - GPIO 150 */
+       OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
+       /* MMC2 SDIO pin muxes for WL12xx */
+       OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+ #endif
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ #else
+ #define omap35x_board_mux     NULL
+ #define omap36x_board_mux     NULL
  #endif
  
  static struct omap_musb_board_data musb_board_data = {
  static void __init omap3_evm_init(void)
  {
        omap3_evm_get_revision();
-       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+       if (cpu_is_omap3630())
+               omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
+       else
+               omap3_mux_init(omap35x_board_mux, OMAP_PACKAGE_CBB);
+       omap_board_config = omap3_evm_config;
+       omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
  
        omap3_evm_i2c_init();
  
-       platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices));
+       omap_display_init(&omap3_evm_dss_data);
  
        spi_register_board_info(omap3evm_spi_board_info,
                                ARRAY_SIZE(omap3evm_spi_board_info));
  
                /* setup EHCI phy reset config */
                omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
 -              ehci_pdata.reset_gpio_port[1] = 21;
 +              usbhs_bdata.reset_gpio_port[1] = 21;
  
                /* EVM REV >= E can supply 500mA with EXTVBUS programming */
                musb_board_data.power = 500;
        } else {
                /* setup EHCI phy reset on MDC */
                omap_mux_init_gpio(135, OMAP_PIN_OUTPUT);
 -              ehci_pdata.reset_gpio_port[1] = 135;
 +              usbhs_bdata.reset_gpio_port[1] = 135;
        }
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        ads7846_dev_init();
        omap3evm_init_smsc911x();
        omap3_evm_display_init();
+ #ifdef CONFIG_WL12XX_PLATFORM_DATA
+       /* WL12xx WLAN Init */
+       if (wl12xx_set_platform_data(&omap3evm_wlan_data))
+               pr_err("error setting wl12xx data\n");
+       platform_device_register(&omap3evm_wlan_regulator);
+ #endif
  }
  
  MACHINE_START(OMAP3EVM, "OMAP3 EVM")
        /* Maintainer: Syed Mohammed Khasim - Texas Instruments */
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap3_evm_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap3_evm_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap3_evm_init,
        .timer          = &omap_timer,
  MACHINE_END
index aa05f2e46a6109c202f57dee77027f3d928dfb5d,5386a8190ea134d62f6e3c7dd74974e945921c7f..2e5dc21e3477b20e4399767f5cea265a5e33cf5c
@@@ -253,14 -253,6 +253,6 @@@ static struct omap_dss_board_info pando
        .default_device = &pandora_lcd_device,
  };
  
- static struct platform_device pandora_dss_device = {
-       .name           = "omapdss",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &pandora_dss_data,
-       },
- };
  static void pandora_wl1251_init_card(struct mmc_card *card)
  {
        /*
@@@ -341,13 -333,13 +333,13 @@@ static struct twl4030_gpio_platform_dat
  };
  
  static struct regulator_consumer_supply pandora_vmmc1_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
  
  static struct regulator_consumer_supply pandora_vmmc2_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
  
  static struct regulator_consumer_supply pandora_vmmc3_supply =
-       REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.2");
+       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");
  
  static struct regulator_consumer_supply pandora_vdda_dac_supply =
        REGULATOR_SUPPLY("vdda_dac", "omapdss");
@@@ -524,9 -516,7 +516,7 @@@ static struct twl4030_usb_data omap3pan
        .usb_mode       = T2_USB_MODE_ULPI,
  };
  
- static struct twl4030_codec_audio_data omap3pandora_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data omap3pandora_audio_data;
  
  static struct twl4030_codec_data omap3pandora_codec_data = {
        .audio_mclk = 26000000,
@@@ -634,12 -624,11 +624,11 @@@ static struct spi_board_info omap3pando
        }
  };
  
- static void __init omap3pandora_init_irq(void)
+ static void __init omap3pandora_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
-       omap_init_irq();
  }
  
  static void __init pandora_wl1251_init(void)
@@@ -677,15 -666,14 +666,14 @@@ fail
  static struct platform_device *omap3pandora_devices[] __initdata = {
        &pandora_leds_gpio,
        &pandora_keys_gpio,
-       &pandora_dss_device,
        &pandora_vwlan_device,
  };
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = 16,
@@@ -712,11 -700,12 +700,12 @@@ static void __init omap3pandora_init(vo
        pandora_wl1251_init();
        platform_add_devices(omap3pandora_devices,
                        ARRAY_SIZE(omap3pandora_devices));
+       omap_display_init(&pandora_dss_data);
        omap_serial_init();
        spi_register_board_info(omap3pandora_spi_board_info,
                        ARRAY_SIZE(omap3pandora_spi_board_info));
        omap3pandora_ads7846_init();
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        usb_musb_init(&musb_board_data);
        gpmc_nand_init(&pandora_nand_data);
  
  
  MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap3pandora_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap3pandora_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap3pandora_init,
        .timer          = &omap_timer,
  MACHINE_END
index f6c87787cd4fe0be557cfbafb62b1e8cd2525a9c,15ede8b49815049e9ce20ef0083382853e4a85e8..8ebdbc38b9de89b253180d9d06d035dfa7262f9b
@@@ -240,14 -240,6 +240,6 @@@ static struct omap_dss_board_info omap3
        .default_device = &omap3_stalker_dvi_device,
  };
  
- static struct platform_device omap3_stalker_dss_device = {
-       .name   = "omapdss",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &omap3_stalker_dss_data,
-       },
- };
  static struct regulator_consumer_supply omap3stalker_vmmc1_supply = {
        .supply         = "vmmc",
  };
@@@ -439,19 -431,15 +431,15 @@@ static struct twl4030_madc_platform_dat
        .irq_line       = 1,
  };
  
- static struct twl4030_codec_audio_data omap3stalker_audio_data = {
-       .audio_mclk     = 26000000,
- };
+ static struct twl4030_codec_audio_data omap3stalker_audio_data;
  
  static struct twl4030_codec_data omap3stalker_codec_data = {
        .audio_mclk     = 26000000,
        .audio          = &omap3stalker_audio_data,
  };
  
- static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = {
-       .supply         = "vdda_dac",
-       .dev            = &omap3_stalker_dss_device.dev,
- };
+ static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
+       REGULATOR_SUPPLY("vdda_dac", "omapdss");
  
  /* VDAC for DSS driving S-Video */
  static struct regulator_init_data omap3_stalker_vdac = {
  };
  
  /* VPLL2 for digital video outputs */
- static struct regulator_consumer_supply omap3_stalker_vpll2_supply = {
-       .supply         = "vdds_dsi",
-       .dev            = &omap3_stalker_lcd_device.dev,
- };
+ static struct regulator_consumer_supply omap3_stalker_vpll2_supply =
+       REGULATOR_SUPPLY("vdds_dsi", "omapdss");
  
  static struct regulator_init_data omap3_stalker_vpll2 = {
        .constraints            = {
@@@ -591,12 -577,14 +577,14 @@@ static struct spi_board_info omap3stalk
  static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
  };
  
- static void __init omap3_stalker_init_irq(void)
+ static void __init omap3_stalker_init_early(void)
  {
-       omap_board_config = omap3_stalker_config;
-       omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
+ }
+ static void __init omap3_stalker_init_irq(void)
+ {
        omap_init_irq();
  #ifdef CONFIG_OMAP_32K_TIMER
        omap2_gp_clockevent_set_gptimer(12);
  }
  
  static struct platform_device *omap3_stalker_devices[] __initdata = {
-       &omap3_stalker_dss_device,
        &keys_gpio,
  };
  
 -static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset = true,
        .reset_gpio_port[0] = -EINVAL,
@@@ -638,18 -625,21 +625,21 @@@ static struct omap_musb_board_data musb
  static void __init omap3_stalker_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
+       omap_board_config = omap3_stalker_config;
+       omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
  
        omap3_stalker_i2c_init();
  
        platform_add_devices(omap3_stalker_devices,
                             ARRAY_SIZE(omap3_stalker_devices));
  
+       omap_display_init(&omap3_stalker_dss_data);
        spi_register_board_info(omap3stalker_spi_board_info,
                                ARRAY_SIZE(omap3stalker_spi_board_info));
  
        omap_serial_init();
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        ads7846_dev_init();
  
        omap_mux_init_gpio(21, OMAP_PIN_OUTPUT);
@@@ -666,6 -656,7 +656,7 @@@ MACHINE_START(SBC3530, "OMAP3 STALKER"
        /* Maintainer: Jason Lam -lzg@ema-tech.com */
        .boot_params            = 0x80000100,
        .map_io                 = omap3_map_io,
+       .init_early             = omap3_stalker_init_early,
        .init_irq               = omap3_stalker_init_irq,
        .init_machine           = omap3_stalker_init,
        .timer                  = &omap_timer,
index 84cfddb19a741143ac0bf34565a6053d5dc4d938,5554f5814aa49dbdcd0ad90ab2bfd6b3c7240359..127cb1752bddea97edff181a4a3dc3022c306480
@@@ -252,9 -252,7 +252,7 @@@ static struct twl4030_usb_data touchboo
        .usb_mode       = T2_USB_MODE_ULPI,
  };
  
- static struct twl4030_codec_audio_data touchbook_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data touchbook_audio_data;
  
  static struct twl4030_codec_data touchbook_codec_data = {
        .audio_mclk = 26000000,
@@@ -415,14 -413,15 +413,15 @@@ static struct omap_board_mux board_mux[
  };
  #endif
  
- static void __init omap3_touchbook_init_irq(void)
+ static void __init omap3_touchbook_init_early(void)
  {
-       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-       omap_board_config = omap3_touchbook_config;
-       omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
+ }
+ static void __init omap3_touchbook_init_irq(void)
+ {
        omap_init_irq();
  #ifdef CONFIG_OMAP_32K_TIMER
        omap2_gp_clockevent_set_gptimer(12);
@@@ -468,11 -467,11 +467,11 @@@ static void __init omap3touchbook_flash
        }
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = -EINVAL,
@@@ -510,6 -509,10 +509,10 @@@ static struct omap_musb_board_data musb
  
  static void __init omap3_touchbook_init(void)
  {
+       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+       omap_board_config = omap3_touchbook_config;
+       omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
        pm_power_off = omap3_touchbook_poweroff;
  
        omap3_touchbook_i2c_init();
                                ARRAY_SIZE(omap3_ads7846_spi_board_info));
        omap3_ads7846_init();
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        omap3touchbook_flash_init();
  
        /* Ensure SDRC pins are mux'd for self-refresh */
  MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
        /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
+       .map_io         = omap3_map_io,
+       .init_early     = omap3_touchbook_init_early,
        .init_irq       = omap3_touchbook_init_irq,
        .init_machine   = omap3_touchbook_init,
        .timer          = &omap_timer,
index ed61c1f5d5e663ae82c607ec24b3d7a0954f9819,1dd4401e646606e79ab43b5f5fdb6dd6880bb817..0f4d8a762a7093e6e244b33693af40cc6c25a38f
@@@ -26,6 -26,8 +26,8 @@@
  #include <linux/usb/otg.h>
  #include <linux/i2c/twl.h>
  #include <linux/regulator/machine.h>
+ #include <linux/regulator/fixed.h>
+ #include <linux/wl12xx.h>
  
  #include <mach/hardware.h>
  #include <mach/omap4-common.h>
  
  #define GPIO_HUB_POWER                1
  #define GPIO_HUB_NRESET               62
+ #define GPIO_WIFI_PMENA               43
+ #define GPIO_WIFI_IRQ         53
+ /* wl127x BT, FM, GPS connectivity chip */
+ static int wl1271_gpios[] = {46, -1, -1};
+ static struct platform_device wl1271_device = {
+       .name   = "kim",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &wl1271_gpios,
+       },
+ };
  
  static struct gpio_led gpio_leds[] = {
        {
@@@ -74,19 -88,19 +88,19 @@@ static struct platform_device leds_gpi
  
  static struct platform_device *panda_devices[] __initdata = {
        &leds_gpio,
+       &wl1271_device,
  };
  
- static void __init omap4_panda_init_irq(void)
+ static void __init omap4_panda_init_early(void)
  {
        omap2_init_common_infrastructure();
        omap2_init_common_devices(NULL, NULL);
-       gic_init_irq();
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
        .phy_reset  = false,
        .reset_gpio_port[0]  = -EINVAL,
        .reset_gpio_port[1]  = -EINVAL,
@@@ -128,7 -142,7 +142,7 @@@ static void __init omap4_ehci_init(void
        gpio_set_value(GPIO_HUB_NRESET, 0);
        gpio_set_value(GPIO_HUB_NRESET, 1);
  
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  
        /* enable power to hub */
        gpio_set_value(GPIO_HUB_POWER, 1);
@@@ -153,7 -167,6 +167,7 @@@ static struct twl4030_usb_data omap4_us
        .phy_exit       = omap4430_phy_exit,
        .phy_power      = omap4430_phy_power,
        .phy_set_clock  = omap4430_phy_set_clk,
 +      .phy_suspend    = omap4430_phy_suspend,
  };
  
  static struct omap2_hsmmc_info mmc[] = {
                .gpio_wp        = -EINVAL,
                .gpio_cd        = -EINVAL,
        },
+       {
+               .name           = "wl1271",
+               .mmc            = 5,
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
+               .gpio_wp        = -EINVAL,
+               .gpio_cd        = -EINVAL,
+               .ocr_mask       = MMC_VDD_165_195,
+               .nonremovable   = true,
+       },
        {}      /* Terminator */
  };
  
  static struct regulator_consumer_supply omap4_panda_vmmc_supply[] = {
        {
                .supply = "vmmc",
-               .dev_name = "mmci-omap-hs.0",
+               .dev_name = "omap_hsmmc.0",
        },
  };
  
+ static struct regulator_consumer_supply omap4_panda_vmmc5_supply = {
+       .supply = "vmmc",
+       .dev_name = "omap_hsmmc.4",
+ };
+ static struct regulator_init_data panda_vmmc5 = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &omap4_panda_vmmc5_supply,
+ };
+ static struct fixed_voltage_config panda_vwlan = {
+       .supply_name = "vwl1271",
+       .microvolts = 1800000, /* 1.8V */
+       .gpio = GPIO_WIFI_PMENA,
+       .startup_delay = 70000, /* 70msec */
+       .enable_high = 1,
+       .enabled_at_boot = 0,
+       .init_data = &panda_vmmc5,
+ };
+ static struct platform_device omap_vwlan_device = {
+       .name           = "reg-fixed-voltage",
+       .id             = 1,
+       .dev = {
+               .platform_data = &panda_vwlan,
+       },
+ };
+ struct wl12xx_platform_data omap_panda_wlan_data  __initdata = {
+       .irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
+       /* PANDA ref clock is 38.4 MHz */
+       .board_ref_clock = 2,
+ };
  static int omap4_twl6030_hsmmc_late_init(struct device *dev)
  {
        int ret = 0;
@@@ -306,7 -365,6 +366,6 @@@ static struct regulator_init_data omap4
        .constraints = {
                .min_uV                 = 2100000,
                .max_uV                 = 2100000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -318,7 -376,6 +377,6 @@@ static struct regulator_init_data omap4
        .constraints = {
                .min_uV                 = 1800000,
                .max_uV                 = 1800000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -330,7 -387,6 +388,6 @@@ static struct regulator_init_data omap4
        .constraints = {
                .min_uV                 = 1800000,
                .max_uV                 = 1800000,
-               .apply_uV               = true,
                .valid_modes_mask       = REGULATOR_MODE_NORMAL
                                        | REGULATOR_MODE_STANDBY,
                .valid_ops_mask  = REGULATOR_CHANGE_MODE
@@@ -392,10 -448,90 +449,90 @@@ static int __init omap4_panda_i2c_init(
  
  #ifdef CONFIG_OMAP_MUX
  static struct omap_board_mux board_mux[] __initdata = {
+       /* WLAN IRQ - GPIO 53 */
+       OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
+       /* WLAN POWER ENABLE - GPIO 43 */
+       OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
+       /* WLAN SDIO: MMC5 CMD */
+       OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       /* WLAN SDIO: MMC5 CLK */
+       OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       /* WLAN SDIO: MMC5 DAT[0-3] */
+       OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+       OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
+ static struct omap_device_pad serial2_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial3_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_device_pad serial4_pads[] __initdata = {
+       OMAP_MUX_STATIC("uart4_rx.uart4_rx",
+                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+       OMAP_MUX_STATIC("uart4_tx.uart4_tx",
+                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ };
+ static struct omap_board_data serial2_data = {
+       .id             = 1,
+       .pads           = serial2_pads,
+       .pads_cnt       = ARRAY_SIZE(serial2_pads),
+ };
+ static struct omap_board_data serial3_data = {
+       .id             = 2,
+       .pads           = serial3_pads,
+       .pads_cnt       = ARRAY_SIZE(serial3_pads),
+ };
+ static struct omap_board_data serial4_data = {
+       .id             = 3,
+       .pads           = serial4_pads,
+       .pads_cnt       = ARRAY_SIZE(serial4_pads),
+ };
+ static inline void board_serial_init(void)
+ {
+       struct omap_board_data bdata;
+       bdata.flags     = 0;
+       bdata.pads      = NULL;
+       bdata.pads_cnt  = 0;
+       bdata.id        = 0;
+       /* pass dummy data for UART1 */
+       omap_serial_init_port(&bdata);
+       omap_serial_init_port(&serial2_data);
+       omap_serial_init_port(&serial3_data);
+       omap_serial_init_port(&serial4_data);
+ }
  #else
  #define board_mux     NULL
+ static inline void board_serial_init(void)
+ {
+       omap_serial_init();
+ }
  #endif
  
  static void __init omap4_panda_init(void)
                package = OMAP_PACKAGE_CBL;
        omap4_mux_init(board_mux, package);
  
+       if (wl12xx_set_platform_data(&omap_panda_wlan_data))
+               pr_err("error setting wl12xx data\n");
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
-       omap_serial_init();
+       platform_device_register(&omap_vwlan_device);
+       board_serial_init();
        omap4_twl6030_hsmmc_init(mmc);
        omap4_ehci_init();
        usb_musb_init(&musb_board_data);
@@@ -425,7 -565,8 +566,8 @@@ MACHINE_START(OMAP4_PANDA, "OMAP4 Pand
        .boot_params    = 0x80000100,
        .reserve        = omap_reserve,
        .map_io         = omap4_panda_map_io,
-       .init_irq       = omap4_panda_init_irq,
+       .init_early     = omap4_panda_init_early,
+       .init_irq       = gic_init_irq,
        .init_machine   = omap4_panda_init,
        .timer          = &omap_timer,
  MACHINE_END
index 08770ccec0f347cc23f96039e6b46eac8a37f029,60f8db31763c5c5348af0efaea66301afce1bc1f..d0961945c65a1e21ad24c73248c4d11e5ec4f934
@@@ -358,9 -358,7 +358,7 @@@ static struct regulator_init_data overo
        .consumer_supplies      = &overo_vmmc1_supply,
  };
  
- static struct twl4030_codec_audio_data overo_audio_data = {
-       .audio_mclk = 26000000,
- };
+ static struct twl4030_codec_audio_data overo_audio_data;
  
  static struct twl4030_codec_data overo_codec_data = {
        .audio_mclk = 26000000,
@@@ -409,24 -407,21 +407,21 @@@ static struct omap_board_config_kernel 
        { OMAP_TAG_LCD,         &overo_lcd_config },
  };
  
- static void __init overo_init_irq(void)
+ static void __init overo_init_early(void)
  {
-       omap_board_config = overo_config;
-       omap_board_config_size = ARRAY_SIZE(overo_config);
        omap2_init_common_infrastructure();
        omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
-       omap_init_irq();
  }
  
  static struct platform_device *overo_devices[] __initdata = {
        &overo_lcd_device,
  };
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
        .reset_gpio_port[0]  = -EINVAL,
@@@ -449,12 -444,14 +444,14 @@@ static struct omap_musb_board_data musb
  static void __init overo_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+       omap_board_config = overo_config;
+       omap_board_config_size = ARRAY_SIZE(overo_config);
        overo_i2c_init();
        platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices));
        omap_serial_init();
        overo_flash_init();
        usb_musb_init(&musb_board_data);
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
        overo_ads7846_init();
        overo_init_smsc911x();
  
  
  MACHINE_START(OVERO, "Gumstix Overo")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = overo_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = overo_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = overo_init,
        .timer          = &omap_timer,
  MACHINE_END
index 1dd195afa39644c4e6608185f673ecef1c522c7d,7e895ff39220de8d2d94c4f5a2df81f4f436c781..4b133d75c9354ae1da9e08615ba336e78830519d
@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/input.h>
  #include <linux/gpio.h>
  #include <linux/i2c/twl.h>
+ #include <linux/mtd/nand.h>
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
@@@ -33,7 -34,7 +34,7 @@@
  
  #define ZOOM3_EHCI_RESET_GPIO         64
  
- static void __init omap_zoom_init_irq(void)
+ static void __init omap_zoom_init_early(void)
  {
        omap2_init_common_infrastructure();
        if (machine_is_omap_zoom2())
        else if (machine_is_omap_zoom3())
                omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
                                          h8mbx00u0mer0em_sdrc_params);
-       omap_init_irq();
  }
  
  #ifdef CONFIG_OMAP_MUX
  static struct omap_board_mux board_mux[] __initdata = {
        /* WLAN IRQ - GPIO 162 */
-       OMAP3_MUX(MCBSP1_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
+       OMAP3_MUX(MCBSP1_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
        /* WLAN POWER ENABLE - GPIO 101 */
        OMAP3_MUX(CAM_D2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
        /* WLAN SDIO: MMC3 CMD */
@@@ -106,10 -105,10 +105,10 @@@ static struct mtd_partition zoom_nand_p
        },
  };
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0]           = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[1]           = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[2]           = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0]           = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1]           = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[2]           = OMAP_USBHS_PORT_MODE_UNUSED,
        .phy_reset              = true,
        .reset_gpio_port[0]     = -EINVAL,
        .reset_gpio_port[1]     = ZOOM3_EHCI_RESET_GPIO,
@@@ -123,11 -122,11 +122,11 @@@ static void __init omap_zoom_init(void
        } else if (machine_is_omap_zoom3()) {
                omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
                omap_mux_init_gpio(ZOOM3_EHCI_RESET_GPIO, OMAP_PIN_OUTPUT);
 -              usb_ehci_init(&ehci_pdata);
 +              usbhs_init(&usbhs_bdata);
        }
  
-       board_nand_init(zoom_nand_partitions,
-                       ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS);
+       board_nand_init(zoom_nand_partitions, ARRAY_SIZE(zoom_nand_partitions),
+                                               ZOOM_NAND_CS, NAND_BUSWIDTH_16);
        zoom_debugboard_init();
        zoom_peripherals_init();
        zoom_display_init();
  
  MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap_zoom_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap_zoom_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap_zoom_init,
        .timer          = &omap_timer,
  MACHINE_END
  
  MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
        .boot_params    = 0x80000100,
-       .map_io         = omap3_map_io,
        .reserve        = omap_reserve,
-       .init_irq       = omap_zoom_init_irq,
+       .map_io         = omap3_map_io,
+       .init_early     = omap_zoom_init_early,
+       .init_irq       = omap_init_irq,
        .init_machine   = omap_zoom_init,
        .timer          = &omap_timer,
  MACHINE_END
index fbb1e30a73dc65a5f688c1efa4a9beb43dd245b6,d905ecc7989a5154537e838f948511e1658dbb21..fcb321a64f136bb66da780e64ea5351a6d4d6470
@@@ -2,7 -2,7 +2,7 @@@
   * OMAP3 clock data
   *
   * Copyright (C) 2007-2010 Texas Instruments, Inc.
-  * Copyright (C) 2007-2010 Nokia Corporation
+  * Copyright (C) 2007-2011 Nokia Corporation
   *
   * Written by Paul Walmsley
   * With many device clock fixes by Kevin Hilman and Jouni Högander
@@@ -291,12 -291,11 +291,11 @@@ static struct dpll_data dpll1_dd = 
        .max_multiplier = OMAP3_MAX_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
  };
  
  static struct clk dpll1_ck = {
        .name           = "dpll1_ck",
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap3_noncore_dpll_ops,
        .parent         = &sys_ck,
        .dpll_data      = &dpll1_dd,
        .round_rate     = &omap2_dpll_round_rate,
@@@ -364,7 -363,6 +363,6 @@@ static struct dpll_data dpll2_dd = 
        .max_multiplier = OMAP3_MAX_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
  };
  
  static struct clk dpll2_ck = {
@@@ -424,12 -422,11 +422,11 @@@ static struct dpll_data dpll3_dd = 
        .max_multiplier = OMAP3_MAX_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
  };
  
  static struct clk dpll3_ck = {
        .name           = "dpll3_ck",
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap3_core_dpll_ops,
        .parent         = &sys_ck,
        .dpll_data      = &dpll3_dd,
        .round_rate     = &omap2_dpll_round_rate,
@@@ -583,7 -580,6 +580,6 @@@ static struct dpll_data dpll4_dd_34xx _
        .max_multiplier = OMAP3_MAX_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
  };
  
  static struct dpll_data dpll4_dd_3630 __initdata = {
        .max_multiplier = OMAP3630_MAX_JTYPE_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE,
        .flags          = DPLL_J_TYPE
  };
  
@@@ -939,7 -934,6 +934,6 @@@ static struct dpll_data dpll5_dd = 
        .max_multiplier = OMAP3_MAX_DPLL_MULT,
        .min_divider    = 1,
        .max_divider    = OMAP3_MAX_DPLL_DIV,
-       .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
  };
  
  static struct clk dpll5_ck = {
@@@ -1205,7 -1199,10 +1199,10 @@@ static const struct clksel gfx_l3_clkse
        { .parent = NULL }
  };
  
- /* Virtual parent clock for gfx_l3_ick and gfx_l3_fck */
+ /*
+  * Virtual parent clock for gfx_l3_ick and gfx_l3_fck
+  * This interface clock does not have a CM_AUTOIDLE bit
+  */
  static struct clk gfx_l3_ck = {
        .name           = "gfx_l3_ck",
        .ops            = &clkops_omap2_dflt_wait,
@@@ -1304,6 -1301,7 +1301,7 @@@ static struct clk sgx_fck = 
        .round_rate     = &omap2_clksel_round_rate
  };
  
+ /* This interface clock does not have a CM_AUTOIDLE bit */
  static struct clk sgx_ick = {
        .name           = "sgx_ick",
        .ops            = &clkops_omap2_dflt_wait,
@@@ -1328,7 -1326,7 +1326,7 @@@ static struct clk d2d_26m_fck = 
  
  static struct clk modem_fck = {
        .name           = "modem_fck",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_mdmclk_dflt_wait,
        .parent         = &sys_ck,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
        .enable_bit     = OMAP3430_EN_MODEM_SHIFT,
  
  static struct clk sad2d_ick = {
        .name           = "sad2d_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &l3_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_SAD2D_SHIFT,
  
  static struct clk mad2d_ick = {
        .name           = "mad2d_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &l3_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
        .enable_bit     = OMAP3430_EN_MAD2D_SHIFT,
@@@ -1718,7 -1716,7 +1716,7 @@@ static struct clk core_l3_ick = 
  
  static struct clk hsotgusb_ick_3430es1 = {
        .name           = "hsotgusb_ick",
-       .ops            = &clkops_omap2_dflt,
+       .ops            = &clkops_omap2_iclk_dflt,
        .parent         = &core_l3_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_HSOTGUSB_SHIFT,
  
  static struct clk hsotgusb_ick_3430es2 = {
        .name           = "hsotgusb_ick",
-       .ops            = &clkops_omap3430es2_hsotgusb_wait,
+       .ops            = &clkops_omap3430es2_iclk_hsotgusb_wait,
        .parent         = &core_l3_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_HSOTGUSB_SHIFT,
        .recalc         = &followparent_recalc,
  };
  
+ /* This interface clock does not have a CM_AUTOIDLE bit */
  static struct clk sdrc_ick = {
        .name           = "sdrc_ick",
        .ops            = &clkops_omap2_dflt_wait,
@@@ -1767,7 -1766,7 +1766,7 @@@ static struct clk security_l3_ick = 
  
  static struct clk pka_ick = {
        .name           = "pka_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &security_l3_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
        .enable_bit     = OMAP3430_EN_PKA_SHIFT,
@@@ -1786,7 -1785,7 +1785,7 @@@ static struct clk core_l4_ick = 
  
  static struct clk usbtll_ick = {
        .name           = "usbtll_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
        .enable_bit     = OMAP3430ES2_EN_USBTLL_SHIFT,
  
  static struct clk mmchs3_ick = {
        .name           = "mmchs3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430ES2_EN_MMC3_SHIFT,
  /* Intersystem Communication Registers - chassis mode only */
  static struct clk icr_ick = {
        .name           = "icr_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_ICR_SHIFT,
  
  static struct clk aes2_ick = {
        .name           = "aes2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_AES2_SHIFT,
  
  static struct clk sha12_ick = {
        .name           = "sha12_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_SHA12_SHIFT,
  
  static struct clk des2_ick = {
        .name           = "des2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_DES2_SHIFT,
  
  static struct clk mmchs2_ick = {
        .name           = "mmchs2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MMC2_SHIFT,
  
  static struct clk mmchs1_ick = {
        .name           = "mmchs1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MMC1_SHIFT,
  
  static struct clk mspro_ick = {
        .name           = "mspro_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MSPRO_SHIFT,
  
  static struct clk hdq_ick = {
        .name           = "hdq_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_HDQ_SHIFT,
  
  static struct clk mcspi4_ick = {
        .name           = "mcspi4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCSPI4_SHIFT,
  
  static struct clk mcspi3_ick = {
        .name           = "mcspi3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCSPI3_SHIFT,
  
  static struct clk mcspi2_ick = {
        .name           = "mcspi2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCSPI2_SHIFT,
  
  static struct clk mcspi1_ick = {
        .name           = "mcspi1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCSPI1_SHIFT,
  
  static struct clk i2c3_ick = {
        .name           = "i2c3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_I2C3_SHIFT,
  
  static struct clk i2c2_ick = {
        .name           = "i2c2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_I2C2_SHIFT,
  
  static struct clk i2c1_ick = {
        .name           = "i2c1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_I2C1_SHIFT,
  
  static struct clk uart2_ick = {
        .name           = "uart2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_UART2_SHIFT,
  
  static struct clk uart1_ick = {
        .name           = "uart1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_UART1_SHIFT,
  
  static struct clk gpt11_ick = {
        .name           = "gpt11_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_GPT11_SHIFT,
  
  static struct clk gpt10_ick = {
        .name           = "gpt10_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_GPT10_SHIFT,
  
  static struct clk mcbsp5_ick = {
        .name           = "mcbsp5_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCBSP5_SHIFT,
  
  static struct clk mcbsp1_ick = {
        .name           = "mcbsp1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MCBSP1_SHIFT,
  
  static struct clk fac_ick = {
        .name           = "fac_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430ES1_EN_FAC_SHIFT,
  
  static struct clk mailboxes_ick = {
        .name           = "mailboxes_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_MAILBOXES_SHIFT,
  
  static struct clk omapctrl_ick = {
        .name           = "omapctrl_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_OMAPCTRL_SHIFT,
@@@ -2057,7 -2056,7 +2056,7 @@@ static struct clk ssi_l4_ick = 
  
  static struct clk ssi_ick_3430es1 = {
        .name           = "ssi_ick",
-       .ops            = &clkops_omap2_dflt,
+       .ops            = &clkops_omap2_iclk_dflt,
        .parent         = &ssi_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_SSI_SHIFT,
  
  static struct clk ssi_ick_3430es2 = {
        .name           = "ssi_ick",
-       .ops            = &clkops_omap3430es2_ssi_wait,
+       .ops            = &clkops_omap3430es2_iclk_ssi_wait,
        .parent         = &ssi_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = OMAP3430_EN_SSI_SHIFT,
@@@ -2085,7 -2084,7 +2084,7 @@@ static const struct clksel usb_l4_clkse
  
  static struct clk usb_l4_ick = {
        .name           = "usb_l4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &l4_ick,
        .init           = &omap2_init_clksel_parent,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@@ -2107,7 -2106,7 +2106,7 @@@ static struct clk security_l4_ick2 = 
  
  static struct clk aes1_ick = {
        .name           = "aes1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &security_l4_ick2,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
        .enable_bit     = OMAP3430_EN_AES1_SHIFT,
  
  static struct clk rng_ick = {
        .name           = "rng_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &security_l4_ick2,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
        .enable_bit     = OMAP3430_EN_RNG_SHIFT,
  
  static struct clk sha11_ick = {
        .name           = "sha11_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &security_l4_ick2,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
        .enable_bit     = OMAP3430_EN_SHA11_SHIFT,
  
  static struct clk des1_ick = {
        .name           = "des1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &security_l4_ick2,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
        .enable_bit     = OMAP3430_EN_DES1_SHIFT,
@@@ -2195,7 -2194,7 +2194,7 @@@ static struct clk dss2_alwon_fck = 
  static struct clk dss_ick_3430es1 = {
        /* Handles both L3 and L4 clocks */
        .name           = "dss_ick",
-       .ops            = &clkops_omap2_dflt,
+       .ops            = &clkops_omap2_iclk_dflt,
        .parent         = &l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
  static struct clk dss_ick_3430es2 = {
        /* Handles both L3 and L4 clocks */
        .name           = "dss_ick",
-       .ops            = &clkops_omap3430es2_dss_usbhost_wait,
+       .ops            = &clkops_omap3430es2_iclk_dss_usbhost_wait,
        .parent         = &l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
@@@ -2229,7 -2228,7 +2228,7 @@@ static struct clk cam_mclk = 
  static struct clk cam_ick = {
        /* Handles both L3 and L4 clocks */
        .name           = "cam_ick",
-       .ops            = &clkops_omap2_dflt,
+       .ops            = &clkops_omap2_iclk_dflt,
        .parent         = &l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_CAM_SHIFT,
@@@ -2272,7 -2271,7 +2271,7 @@@ static struct clk usbhost_48m_fck = 
  static struct clk usbhost_ick = {
        /* Handles both L3 and L4 clocks */
        .name           = "usbhost_ick",
-       .ops            = &clkops_omap3430es2_dss_usbhost_wait,
+       .ops            = &clkops_omap3430es2_iclk_dss_usbhost_wait,
        .parent         = &l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430ES2_EN_USBHOST_SHIFT,
@@@ -2372,7 -2371,7 +2371,7 @@@ static struct clk wkup_l4_ick = 
  /* Never specifically named in the TRM, so we have to infer a likely name */
  static struct clk usim_ick = {
        .name           = "usim_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430ES2_EN_USIMOCP_SHIFT,
  
  static struct clk wdt2_ick = {
        .name           = "wdt2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_WDT2_SHIFT,
  
  static struct clk wdt1_ick = {
        .name           = "wdt1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_WDT1_SHIFT,
  
  static struct clk gpio1_ick = {
        .name           = "gpio1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO1_SHIFT,
  
  static struct clk omap_32ksync_ick = {
        .name           = "omap_32ksync_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_32KSYNC_SHIFT,
  /* XXX This clock no longer exists in 3430 TRM rev F */
  static struct clk gpt12_ick = {
        .name           = "gpt12_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT12_SHIFT,
  
  static struct clk gpt1_ick = {
        .name           = "gpt1_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &wkup_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT1_SHIFT,
@@@ -2663,7 -2662,7 +2662,7 @@@ static struct clk per_l4_ick = 
  
  static struct clk gpio6_ick = {
        .name           = "gpio6_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO6_SHIFT,
  
  static struct clk gpio5_ick = {
        .name           = "gpio5_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO5_SHIFT,
  
  static struct clk gpio4_ick = {
        .name           = "gpio4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO4_SHIFT,
  
  static struct clk gpio3_ick = {
        .name           = "gpio3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO3_SHIFT,
  
  static struct clk gpio2_ick = {
        .name           = "gpio2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPIO2_SHIFT,
  
  static struct clk wdt3_ick = {
        .name           = "wdt3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_WDT3_SHIFT,
  
  static struct clk uart3_ick = {
        .name           = "uart3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_UART3_SHIFT,
  
  static struct clk uart4_ick = {
        .name           = "uart4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3630_EN_UART4_SHIFT,
  
  static struct clk gpt9_ick = {
        .name           = "gpt9_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT9_SHIFT,
  
  static struct clk gpt8_ick = {
        .name           = "gpt8_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT8_SHIFT,
  
  static struct clk gpt7_ick = {
        .name           = "gpt7_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT7_SHIFT,
  
  static struct clk gpt6_ick = {
        .name           = "gpt6_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT6_SHIFT,
  
  static struct clk gpt5_ick = {
        .name           = "gpt5_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT5_SHIFT,
  
  static struct clk gpt4_ick = {
        .name           = "gpt4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT4_SHIFT,
  
  static struct clk gpt3_ick = {
        .name           = "gpt3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT3_SHIFT,
  
  static struct clk gpt2_ick = {
        .name           = "gpt2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_GPT2_SHIFT,
  
  static struct clk mcbsp2_ick = {
        .name           = "mcbsp2_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_MCBSP2_SHIFT,
  
  static struct clk mcbsp3_ick = {
        .name           = "mcbsp3_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_MCBSP3_SHIFT,
  
  static struct clk mcbsp4_ick = {
        .name           = "mcbsp4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &per_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
        .enable_bit     = OMAP3430_EN_MCBSP4_SHIFT,
@@@ -3186,7 -3185,7 +3185,7 @@@ static struct clk vpfe_fck = 
   */
  static struct clk uart4_ick_am35xx = {
        .name           = "uart4_ick",
-       .ops            = &clkops_omap2_dflt_wait,
+       .ops            = &clkops_omap2_iclk_dflt_wait,
        .parent         = &core_l4_ick,
        .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
        .enable_bit     = AM35XX_EN_UART4_SHIFT,
@@@ -3286,14 -3285,14 +3285,14 @@@ static struct omap_clk omap3xxx_clks[] 
        CLK(NULL,       "cpefuse_fck",  &cpefuse_fck,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK(NULL,       "ts_fck",       &ts_fck,        CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK(NULL,       "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 -      CLK("ehci-omap.0",      "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK("omap-mcbsp.1",     "prcm_fck",     &core_96m_fck,  CK_3XXX),
        CLK("omap-mcbsp.5",     "prcm_fck",     &core_96m_fck,  CK_3XXX),
        CLK(NULL,       "core_96m_fck", &core_96m_fck,  CK_3XXX),
-       CLK("mmci-omap-hs.2",   "fck",  &mmchs3_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("mmci-omap-hs.1",   "fck",  &mmchs2_fck,    CK_3XXX),
+       CLK("omap_hsmmc.2",     "fck",  &mmchs3_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+       CLK("omap_hsmmc.1",     "fck",  &mmchs2_fck,    CK_3XXX),
        CLK(NULL,       "mspro_fck",    &mspro_fck,     CK_34XX | CK_36XX),
-       CLK("mmci-omap-hs.0",   "fck",  &mmchs1_fck,    CK_3XXX),
+       CLK("omap_hsmmc.0",     "fck",  &mmchs1_fck,    CK_3XXX),
        CLK("omap_i2c.3", "fck",        &i2c3_fck,      CK_3XXX),
        CLK("omap_i2c.2", "fck",        &i2c2_fck,      CK_3XXX),
        CLK("omap_i2c.1", "fck",        &i2c1_fck,      CK_3XXX),
        CLK(NULL,       "pka_ick",      &pka_ick,       CK_34XX | CK_36XX),
        CLK(NULL,       "core_l4_ick",  &core_l4_ick,   CK_3XXX),
        CLK(NULL,       "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 -      CLK("ehci-omap.0",      "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("mmci-omap-hs.2",   "ick",  &mmchs3_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+       CLK("omap_hsmmc.2",     "ick",  &mmchs3_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK(NULL,       "icr_ick",      &icr_ick,       CK_34XX | CK_36XX),
        CLK("omap-aes", "ick",  &aes2_ick,      CK_34XX | CK_36XX),
        CLK("omap-sham",        "ick",  &sha12_ick,     CK_34XX | CK_36XX),
        CLK(NULL,       "des2_ick",     &des2_ick,      CK_34XX | CK_36XX),
-       CLK("mmci-omap-hs.1",   "ick",  &mmchs2_ick,    CK_3XXX),
-       CLK("mmci-omap-hs.0",   "ick",  &mmchs1_ick,    CK_3XXX),
+       CLK("omap_hsmmc.1",     "ick",  &mmchs2_ick,    CK_3XXX),
+       CLK("omap_hsmmc.0",     "ick",  &mmchs1_ick,    CK_3XXX),
        CLK(NULL,       "mspro_ick",    &mspro_ick,     CK_34XX | CK_36XX),
        CLK("omap_hdq.0", "ick",        &hdq_ick,       CK_3XXX),
        CLK("omap2_mcspi.4", "ick",     &mcspi4_ick,    CK_3XXX),
        CLK(NULL,       "cam_ick",      &cam_ick,       CK_34XX | CK_36XX),
        CLK(NULL,       "csi2_96m_fck", &csi2_96m_fck,  CK_34XX | CK_36XX),
        CLK(NULL,       "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 -      CLK("ehci-omap.0",      "hs_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "hs_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK(NULL,       "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 -      CLK("ehci-omap.0",      "fs_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "fs_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
        CLK(NULL,       "usbhost_ick",  &usbhost_ick,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 -      CLK("ehci-omap.0",      "usbhost_ick",  &usbhost_ick,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "usbhost_ick",  &usbhost_ick,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 +      CLK("usbhs-omap.0",     "utmi_p1_gfclk",        &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "utmi_p2_gfclk",        &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "xclk60mhsp1_ck",       &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "xclk60mhsp2_ck",       &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "usb_host_hs_utmi_p1_clk",      &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "usb_host_hs_utmi_p2_clk",      &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "usb_tll_hs_usb_ch0_clk",       &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "usb_tll_hs_usb_ch1_clk",       &dummy_ck,      CK_3XXX),
 +      CLK("usbhs-omap.0",     "init_60m_fclk",        &dummy_ck,      CK_3XXX),
        CLK(NULL,       "usim_fck",     &usim_fck,      CK_3430ES2PLUS | CK_36XX),
        CLK(NULL,       "gpt1_fck",     &gpt1_fck,      CK_3XXX),
        CLK(NULL,       "wkup_32k_fck", &wkup_32k_fck,  CK_3XXX),
@@@ -3480,6 -3470,9 +3479,9 @@@ int __init omap3xxx_clk_init(void
        } else if (cpu_is_omap3630()) {
                cpu_mask = (RATE_IN_34XX | RATE_IN_36XX);
                cpu_clkflg = CK_36XX;
+       } else if (cpu_is_ti816x()) {
+               cpu_mask = RATE_IN_TI816X;
+               cpu_clkflg = CK_TI816X;
        } else if (cpu_is_omap34xx()) {
                if (omap_rev() == OMAP3430_REV_ES1_0) {
                        cpu_mask = RATE_IN_3430ES1;
                        omap2_init_clk_clkdm(c->lk.clk);
                }
  
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
        recalculate_root_clocks();
  
        pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
        clk_enable_init_clocks();
  
        /*
-        * Lock DPLL5 and put it in autoidle.
+        * Lock DPLL5 -- here only until other device init code can
+        * handle this
         */
-       if (omap_rev() >= OMAP3430_REV_ES2_0)
+       if (!cpu_is_ti816x() && (omap_rev() >= OMAP3430_REV_ES2_0))
                omap3_clk_lock_dpll5();
  
        /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */
index 46fd3f674cacb04fb0529adee47641d4d5a05a8c,f1fedb71ae08f3ee2ca1c46d8835fac983356ed4..d32ed979a8da2910644599e2c4ca527af83f7562
@@@ -278,8 -278,10 +278,10 @@@ static struct clk dpll_abe_ck = 
  static struct clk dpll_abe_x2_ck = {
        .name           = "dpll_abe_x2_ck",
        .parent         = &dpll_abe_ck,
-       .ops            = &clkops_null,
+       .flags          = CLOCK_CLKOUTX2,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap3_clkoutx2_recalc,
+       .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_ABE,
  };
  
  static const struct clksel_rate div31_1to31_rates[] = {
@@@ -328,7 -330,7 +330,7 @@@ static struct clk dpll_abe_m2x2_ck = 
        .clksel         = dpll_abe_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_ABE,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -395,7 -397,7 +397,7 @@@ static struct clk dpll_abe_m3x2_ck = 
        .clksel         = dpll_abe_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M3_DPLL_ABE,
        .clksel_mask    = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -443,13 -445,14 +445,14 @@@ static struct clk dpll_core_ck = 
        .parent         = &sys_clkin_ck,
        .dpll_data      = &dpll_core_dd,
        .init           = &omap2_init_dpll_parent,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap3_core_dpll_ops,
        .recalc         = &omap3_dpll_recalc,
  };
  
  static struct clk dpll_core_x2_ck = {
        .name           = "dpll_core_x2_ck",
        .parent         = &dpll_core_ck,
+       .flags          = CLOCK_CLKOUTX2,
        .ops            = &clkops_null,
        .recalc         = &omap3_clkoutx2_recalc,
  };
@@@ -465,7 -468,7 +468,7 @@@ static struct clk dpll_core_m6x2_ck = 
        .clksel         = dpll_core_m6x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M6_DPLL_CORE,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -495,7 -498,7 +498,7 @@@ static struct clk dpll_core_m2_ck = 
        .clksel         = dpll_core_m2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_CORE,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -515,7 -518,7 +518,7 @@@ static struct clk dpll_core_m5x2_ck = 
        .clksel         = dpll_core_m6x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M5_DPLL_CORE,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -581,7 -584,7 +584,7 @@@ static struct clk dpll_core_m4x2_ck = 
        .clksel         = dpll_core_m6x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M4_DPLL_CORE,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -606,7 -609,7 +609,7 @@@ static struct clk dpll_abe_m2_ck = 
        .clksel         = dpll_abe_m2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_ABE,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -632,7 -635,7 +635,7 @@@ static struct clk dpll_core_m7x2_ck = 
        .clksel         = dpll_core_m6x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M7_DPLL_CORE,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -689,6 -692,7 +692,7 @@@ static struct clk dpll_iva_ck = 
  static struct clk dpll_iva_x2_ck = {
        .name           = "dpll_iva_x2_ck",
        .parent         = &dpll_iva_ck,
+       .flags          = CLOCK_CLKOUTX2,
        .ops            = &clkops_null,
        .recalc         = &omap3_clkoutx2_recalc,
  };
@@@ -704,7 -708,7 +708,7 @@@ static struct clk dpll_iva_m4x2_ck = 
        .clksel         = dpll_iva_m4x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M4_DPLL_IVA,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -716,7 -720,7 +720,7 @@@ static struct clk dpll_iva_m5x2_ck = 
        .clksel         = dpll_iva_m4x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M5_DPLL_IVA,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -764,7 -768,7 +768,7 @@@ static struct clk dpll_mpu_m2_ck = 
        .clksel         = dpll_mpu_m2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_MPU,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -837,7 -841,7 +841,7 @@@ static struct clk dpll_per_m2_ck = 
        .clksel         = dpll_per_m2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_PER,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
  static struct clk dpll_per_x2_ck = {
        .name           = "dpll_per_x2_ck",
        .parent         = &dpll_per_ck,
-       .ops            = &clkops_null,
+       .flags          = CLOCK_CLKOUTX2,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap3_clkoutx2_recalc,
+       .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_PER,
  };
  
  static const struct clksel dpll_per_m2x2_div[] = {
@@@ -861,7 -867,7 +867,7 @@@ static struct clk dpll_per_m2x2_ck = 
        .clksel         = dpll_per_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_PER,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -887,7 -893,7 +893,7 @@@ static struct clk dpll_per_m4x2_ck = 
        .clksel         = dpll_per_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M4_DPLL_PER,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -899,7 -905,7 +905,7 @@@ static struct clk dpll_per_m5x2_ck = 
        .clksel         = dpll_per_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M5_DPLL_PER,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -911,7 -917,7 +917,7 @@@ static struct clk dpll_per_m6x2_ck = 
        .clksel         = dpll_per_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M6_DPLL_PER,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -923,7 -929,7 +929,7 @@@ static struct clk dpll_per_m7x2_ck = 
        .clksel         = dpll_per_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M7_DPLL_PER,
        .clksel_mask    = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -964,6 -970,7 +970,7 @@@ static struct clk dpll_unipro_ck = 
  static struct clk dpll_unipro_x2_ck = {
        .name           = "dpll_unipro_x2_ck",
        .parent         = &dpll_unipro_ck,
+       .flags          = CLOCK_CLKOUTX2,
        .ops            = &clkops_null,
        .recalc         = &omap3_clkoutx2_recalc,
  };
@@@ -979,7 -986,7 +986,7 @@@ static struct clk dpll_unipro_m2x2_ck 
        .clksel         = dpll_unipro_m2x2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_UNIPRO,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -1028,7 -1035,8 +1035,8 @@@ static struct clk dpll_usb_ck = 
  static struct clk dpll_usb_clkdcoldo_ck = {
        .name           = "dpll_usb_clkdcoldo_ck",
        .parent         = &dpll_usb_ck,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
+       .clksel_reg     = OMAP4430_CM_CLKDCOLDO_DPLL_USB,
        .recalc         = &followparent_recalc,
  };
  
@@@ -1043,7 -1051,7 +1051,7 @@@ static struct clk dpll_usb_m2_ck = 
        .clksel         = dpll_usb_m2_div,
        .clksel_reg     = OMAP4430_CM_DIV_M2_DPLL_USB,
        .clksel_mask    = OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK,
-       .ops            = &clkops_null,
+       .ops            = &clkops_omap4_dpllmx_ops,
        .recalc         = &omap2_clksel_recalc,
        .round_rate     = &omap2_clksel_round_rate,
        .set_rate       = &omap2_clksel_set_rate,
@@@ -3158,11 -3166,11 +3166,11 @@@ static struct omap_clk omap44xx_clks[] 
        CLK("omap2_mcspi.2",    "fck",                          &mcspi2_fck,    CK_443X),
        CLK("omap2_mcspi.3",    "fck",                          &mcspi3_fck,    CK_443X),
        CLK("omap2_mcspi.4",    "fck",                          &mcspi4_fck,    CK_443X),
-       CLK("mmci-omap-hs.0",   "fck",                          &mmc1_fck,      CK_443X),
-       CLK("mmci-omap-hs.1",   "fck",                          &mmc2_fck,      CK_443X),
-       CLK("mmci-omap-hs.2",   "fck",                          &mmc3_fck,      CK_443X),
-       CLK("mmci-omap-hs.3",   "fck",                          &mmc4_fck,      CK_443X),
-       CLK("mmci-omap-hs.4",   "fck",                          &mmc5_fck,      CK_443X),
+       CLK("omap_hsmmc.0",     "fck",                          &mmc1_fck,      CK_443X),
+       CLK("omap_hsmmc.1",     "fck",                          &mmc2_fck,      CK_443X),
+       CLK("omap_hsmmc.2",     "fck",                          &mmc3_fck,      CK_443X),
+       CLK("omap_hsmmc.3",     "fck",                          &mmc4_fck,      CK_443X),
+       CLK("omap_hsmmc.4",     "fck",                          &mmc5_fck,      CK_443X),
        CLK(NULL,       "ocp2scp_usb_phy_phy_48m",      &ocp2scp_usb_phy_phy_48m,       CK_443X),
        CLK(NULL,       "ocp2scp_usb_phy_ick",          &ocp2scp_usb_phy_ick,   CK_443X),
        CLK(NULL,       "ocp_wp_noc_ick",               &ocp_wp_noc_ick,        CK_443X),
        CLK(NULL,       "uart3_fck",                    &uart3_fck,     CK_443X),
        CLK(NULL,       "uart4_fck",                    &uart4_fck,     CK_443X),
        CLK(NULL,       "usb_host_fs_fck",              &usb_host_fs_fck,       CK_443X),
 -      CLK("ehci-omap.0",      "fs_fck",               &usb_host_fs_fck,       CK_443X),
 +      CLK("usbhs-omap.0",     "fs_fck",               &usb_host_fs_fck,       CK_443X),
        CLK(NULL,       "utmi_p1_gfclk",                &utmi_p1_gfclk, CK_443X),
        CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &usb_host_hs_utmi_p1_clk,       CK_443X),
        CLK(NULL,       "utmi_p2_gfclk",                &utmi_p2_gfclk, CK_443X),
        CLK(NULL,       "usb_host_hs_hsic480m_p2_clk",  &usb_host_hs_hsic480m_p2_clk,   CK_443X),
        CLK(NULL,       "usb_host_hs_func48mclk",       &usb_host_hs_func48mclk,        CK_443X),
        CLK(NULL,       "usb_host_hs_fck",              &usb_host_hs_fck,       CK_443X),
 -      CLK("ehci-omap.0",      "hs_fck",               &usb_host_hs_fck,       CK_443X),
 -      CLK("ehci-omap.0",      "usbhost_ick",          &dummy_ck,              CK_443X),
 +      CLK("usbhs-omap.0",     "hs_fck",               &usb_host_hs_fck,       CK_443X),
 +      CLK("usbhs-omap.0",     "usbhost_ick",          &dummy_ck,              CK_443X),
        CLK(NULL,       "otg_60m_gfclk",                &otg_60m_gfclk, CK_443X),
        CLK(NULL,       "usb_otg_hs_xclk",              &usb_otg_hs_xclk,       CK_443X),
        CLK("musb-omap2430",    "ick",                          &usb_otg_hs_ick,        CK_443X),
        CLK(NULL,       "usb_tll_hs_usb_ch0_clk",       &usb_tll_hs_usb_ch0_clk,        CK_443X),
        CLK(NULL,       "usb_tll_hs_usb_ch1_clk",       &usb_tll_hs_usb_ch1_clk,        CK_443X),
        CLK(NULL,       "usb_tll_hs_ick",               &usb_tll_hs_ick,        CK_443X),
 -      CLK("ehci-omap.0",      "usbtll_ick",           &usb_tll_hs_ick,        CK_443X),
 -      CLK("ehci-omap.0",      "usbtll_fck",           &dummy_ck,      CK_443X),
 +      CLK("usbhs-omap.0",     "usbtll_ick",           &usb_tll_hs_ick,        CK_443X),
 +      CLK("usbhs-omap.0",     "usbtll_fck",           &dummy_ck,      CK_443X),
        CLK(NULL,       "usim_ck",                      &usim_ck,       CK_443X),
        CLK(NULL,       "usim_fclk",                    &usim_fclk,     CK_443X),
        CLK(NULL,       "usim_fck",                     &usim_fck,      CK_443X),
        CLK("omap_i2c.2",       "ick",                          &dummy_ck,      CK_443X),
        CLK("omap_i2c.3",       "ick",                          &dummy_ck,      CK_443X),
        CLK("omap_i2c.4",       "ick",                          &dummy_ck,      CK_443X),
-       CLK("mmci-omap-hs.0",   "ick",                          &dummy_ck,      CK_443X),
-       CLK("mmci-omap-hs.1",   "ick",                          &dummy_ck,      CK_443X),
-       CLK("mmci-omap-hs.2",   "ick",                          &dummy_ck,      CK_443X),
-       CLK("mmci-omap-hs.3",   "ick",                          &dummy_ck,      CK_443X),
-       CLK("mmci-omap-hs.4",   "ick",                          &dummy_ck,      CK_443X),
+       CLK("omap_hsmmc.0",     "ick",                          &dummy_ck,      CK_443X),
+       CLK("omap_hsmmc.1",     "ick",                          &dummy_ck,      CK_443X),
+       CLK("omap_hsmmc.2",     "ick",                          &dummy_ck,      CK_443X),
+       CLK("omap_hsmmc.3",     "ick",                          &dummy_ck,      CK_443X),
+       CLK("omap_hsmmc.4",     "ick",                          &dummy_ck,      CK_443X),
        CLK("omap-mcbsp.1",     "ick",                          &dummy_ck,      CK_443X),
        CLK("omap-mcbsp.2",     "ick",                          &dummy_ck,      CK_443X),
        CLK("omap-mcbsp.3",     "ick",                          &dummy_ck,      CK_443X),
@@@ -3301,6 -3309,9 +3309,9 @@@ int __init omap4xxx_clk_init(void
                        omap2_init_clk_clkdm(c->lk.clk);
                }
  
+       /* Disable autoidle on all clocks; let the PM code enable it later */
+       omap_clk_disable_autoidle_all();
        recalculate_root_clocks();
  
        /*
index 6049f465ec8447599aafba46124059aef64b8a9d,e1b0f17b092796172b0063a8f4b0391894e613de..48adfe9fe4f3bb3c73dfb6765c923d89aea99094
@@@ -19,9 -19,6 +19,9 @@@
  
  #define UART_OFFSET(addr)     ((addr) & 0x00ffffff)
  
 +#define omap_uart_v2p(x)      ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET)
 +#define omap_uart_p2v(x)      ((x) - PLAT_PHYS_OFFSET + PAGE_OFFSET)
 +
                .pushsection .data
  omap_uart_phys:       .word   0
  omap_uart_virt:       .word   0
@@@ -39,7 -36,7 +39,7 @@@ omap_uart_lsr:        .word   
                /* Use omap_uart_phys/virt if already configured */
  10:           mrc     p15, 0, \rp, c1, c0
                tst     \rp, #1                 @ MMU enabled?
 -              ldreq   \rp, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
 +              ldreq   \rp, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
                ldrne   \rp, =omap_uart_phys    @ MMU enabled
                add     \rv, \rp, #4            @ omap_uart_virt
                ldr     \rp, [\rp, #0]
@@@ -52,7 -49,7 +52,7 @@@
                mrc     p15, 0, \rp, c1, c0
                tst     \rp, #1                 @ MMU enabled?
                ldreq   \rp, =OMAP_UART_INFO    @ MMU not enabled
 -              ldrne   \rp, =__phys_to_virt(OMAP_UART_INFO)    @ MMU enabled
 +              ldrne   \rp, =omap_uart_p2v(OMAP_UART_INFO)     @ MMU enabled
                ldr     \rp, [\rp, #0]
  
                /* Select the UART to use based on the UART1 scratchpad value */
                beq     34f                     @ configure OMAP3UART4
                cmp     \rp, #OMAP4UART4        @ only on 44xx
                beq     44f                     @ configure OMAP4UART4
+               cmp     \rp, #TI816XUART1       @ ti816x UART offsets different
+               beq     81f                     @ configure UART1
+               cmp     \rp, #TI816XUART2       @ ti816x UART offsets different
+               beq     82f                     @ configure UART2
+               cmp     \rp, #TI816XUART3       @ ti816x UART offsets different
+               beq     83f                     @ configure UART3
                cmp     \rp, #ZOOM_UART         @ only on zoom2/3
                beq     95f                     @ configure ZOOM_UART
  
                b       98f
  44:           mov     \rp, #UART_OFFSET(OMAP4_UART4_BASE)
                b       98f
+ 81:           mov     \rp, #UART_OFFSET(TI816X_UART1_BASE)
+               b       98f
+ 82:           mov     \rp, #UART_OFFSET(TI816X_UART2_BASE)
+               b       98f
+ 83:           mov     \rp, #UART_OFFSET(TI816X_UART3_BASE)
+               b       98f
  95:           ldr     \rp, =ZOOM_UART_BASE
                mrc     p15, 0, \rv, c1, c0
                tst     \rv, #1                 @ MMU enabled?
 -              ldreq   \rv, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
 +              ldreq   \rv, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
                ldrne   \rv, =omap_uart_phys    @ MMU enabled
                str     \rp, [\rv, #0]
                ldr     \rp, =ZOOM_UART_VIRT
  98:           add     \rp, \rp, #0x48000000   @ phys base
                mrc     p15, 0, \rv, c1, c0
                tst     \rv, #1                 @ MMU enabled?
 -              ldreq   \rv, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
 +              ldreq   \rv, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
                ldrne   \rv, =omap_uart_phys    @ MMU enabled
                str     \rp, [\rv, #0]
                sub     \rp, \rp, #0x48000000   @ phys base
                .macro  busyuart,rd,rx
  1001:         mrc     p15, 0, \rd, c1, c0
                tst     \rd, #1                 @ MMU enabled?
 -              ldreq   \rd, =__virt_to_phys(omap_uart_lsr)     @ MMU not enabled
 +              ldreq   \rd, =omap_uart_v2p(omap_uart_lsr)      @ MMU disabled
                ldrne   \rd, =omap_uart_lsr     @ MMU enabled
                ldr     \rd, [\rd, #0]
                ldrb    \rd, [\rx, \rd]
index ebe33df708bd85a6c2e9e47b7374d3f3d7f59437,f172ec06c06ab69b3a0bb3bd45b0a54974d571c5..e2e605fe91386c652840285bd2c6cbcd1244dedf
@@@ -29,6 -29,7 +29,7 @@@
  #include <linux/usb.h>
  
  #include <plat/usb.h>
+ #include "control.h"
  
  /* OMAP control module register for UTMI PHY */
  #define CONTROL_DEV_CONF              0x300
@@@ -43,7 -44,6 +44,7 @@@
  
  static struct clk *phyclk, *clk48m, *clk32k;
  static void __iomem *ctrl_base;
 +static int usbotghs_control;
  
  int omap4430_phy_init(struct device *dev)
  {
@@@ -104,6 -104,13 +105,6 @@@ int omap4430_phy_set_clk(struct device 
  int omap4430_phy_power(struct device *dev, int ID, int on)
  {
        if (on) {
 -              /* enabled the clocks */
 -              omap4430_phy_set_clk(dev, 1);
 -              /* power on the phy */
 -              if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) {
 -                      __raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF);
 -                      mdelay(200);
 -              }
                if (ID)
                        /* enable VBUS valid, IDDIG groung */
                        __raw_writel(AVALID | VBUSVALID, ctrl_base +
                /* Enable session END and IDIG to high impedence. */
                __raw_writel(SESSEND | IDDIG, ctrl_base +
                                        USBOTGHS_CONTROL);
 +      }
 +      return 0;
 +}
 +
 +int omap4430_phy_suspend(struct device *dev, int suspend)
 +{
 +      if (suspend) {
                /* Disable the clocks */
                omap4430_phy_set_clk(dev, 0);
                /* Power down the phy */
                __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
 +
 +              /* save the context */
 +              usbotghs_control = __raw_readl(ctrl_base + USBOTGHS_CONTROL);
 +      } else {
 +              /* Enable the internel phy clcoks */
 +              omap4430_phy_set_clk(dev, 1);
 +              /* power on the phy */
 +              if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) {
 +                      __raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF);
 +                      mdelay(200);
 +              }
 +
 +              /* restore the context */
 +              __raw_writel(usbotghs_control, ctrl_base + USBOTGHS_CONTROL);
        }
  
        return 0;
@@@ -162,3 -148,95 +163,95 @@@ int omap4430_phy_exit(struct device *de
  
        return 0;
  }
+ void am35x_musb_reset(void)
+ {
+       u32     regval;
+       /* Reset the musb interface */
+       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
+       regval |= AM35XX_USBOTGSS_SW_RST;
+       omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
+       regval &= ~AM35XX_USBOTGSS_SW_RST;
+       omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
+       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
+ }
+ void am35x_musb_phy_power(u8 on)
+ {
+       unsigned long timeout = jiffies + msecs_to_jiffies(100);
+       u32 devconf2;
+       if (on) {
+               /*
+                * Start the on-chip PHY and its PLL.
+                */
+               devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
+               devconf2 &= ~(CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN);
+               devconf2 |= CONF2_PHY_PLLON;
+               omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
+               pr_info(KERN_INFO "Waiting for PHY clock good...\n");
+               while (!(omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2)
+                               & CONF2_PHYCLKGD)) {
+                       cpu_relax();
+                       if (time_after(jiffies, timeout)) {
+                               pr_err(KERN_ERR "musb PHY clock good timed out\n");
+                               break;
+                       }
+               }
+       } else {
+               /*
+                * Power down the on-chip PHY.
+                */
+               devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
+               devconf2 &= ~CONF2_PHY_PLLON;
+               devconf2 |=  CONF2_PHYPWRDN | CONF2_OTGPWRDN;
+               omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
+       }
+ }
+ void am35x_musb_clear_irq(void)
+ {
+       u32 regval;
+       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
+       regval |= AM35XX_USBOTGSS_INT_CLR;
+       omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR);
+       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
+ }
+ void am35x_musb_set_mode(u8 musb_mode)
+ {
+       u32 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
+       devconf2 &= ~CONF2_OTGMODE;
+       switch (musb_mode) {
+ #ifdef        CONFIG_USB_MUSB_HDRC_HCD
+       case MUSB_HOST:         /* Force VBUS valid, ID = 0 */
+               devconf2 |= CONF2_FORCE_HOST;
+               break;
+ #endif
+ #ifdef        CONFIG_USB_GADGET_MUSB_HDRC
+       case MUSB_PERIPHERAL:   /* Force VBUS valid, ID = 1 */
+               devconf2 |= CONF2_FORCE_DEVICE;
+               break;
+ #endif
+ #ifdef        CONFIG_USB_MUSB_OTG
+       case MUSB_OTG:          /* Don't override the VBUS/ID comparators */
+               devconf2 |= CONF2_NO_OVERRIDE;
+               break;
+ #endif
+       default:
+               pr_info(KERN_INFO "Unsupported mode %u\n", musb_mode);
+       }
+       omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
+ }
diff --combined arch/arm/mach-omap2/pm.h
index 39580e6060e884469b33d9743c92d987511ddd31,f4a5f716422bc0d96bc746782b0265bd4fa4a758..797bfd12b643fe3cc697bf2b7a7b09be522accc7
@@@ -92,7 -92,7 +92,7 @@@ extern void omap24xx_idle_loop_suspend(
  extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl,
                                        void __iomem *sdrc_power);
  extern void omap34xx_cpu_suspend(u32 *addr, int save_state);
 -extern void save_secure_ram_context(u32 *addr);
 +extern int save_secure_ram_context(u32 *addr);
  extern void omap3_save_scratchpad_contents(void);
  
  extern unsigned int omap24xx_idle_loop_suspend_sz;
@@@ -127,6 -127,7 +127,7 @@@ static inline void omap_enable_smartref
  #ifdef CONFIG_TWL4030_CORE
  extern int omap3_twl_init(void);
  extern int omap4_twl_init(void);
+ extern int omap3_twl_set_sr_bit(bool enable);
  #else
  static inline int omap3_twl_init(void)
  {
index 951a0be66cf7928062ee76ef58c53fc86419c239,e60ac1f71bd47ec161ac43e7bf9f9e5855f3e889..63f10669571ad262c7ca0e105b3f779484c1a9a0
  #define SDRC_DLLA_STATUS_V    OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
  #define SDRC_DLLA_CTRL_V      OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
  
+ /*
+  * This file needs be built unconditionally as ARM to interoperate correctly
+  * with non-Thumb-2-capable firmware.
+  */
+       .arm
  
  /*
   * API functions
@@@ -82,6 -87,8 +87,8 @@@ ENTRY(get_restore_pointer
        stmfd   sp!, {lr}       @ save registers on stack
        adr     r0, restore
        ldmfd   sp!, {pc}       @ restore regs and return
+ ENDPROC(get_restore_pointer)
+       .align
  ENTRY(get_restore_pointer_sz)
        .word   . - get_restore_pointer
  
@@@ -91,6 -98,8 +98,8 @@@ ENTRY(get_omap3630_restore_pointer
        stmfd   sp!, {lr}       @ save registers on stack
        adr     r0, restore_3630
        ldmfd   sp!, {pc}       @ restore regs and return
+ ENDPROC(get_omap3630_restore_pointer)
+       .align
  ENTRY(get_omap3630_restore_pointer_sz)
        .word   . - get_omap3630_restore_pointer
  
@@@ -100,6 -109,8 +109,8 @@@ ENTRY(get_es3_restore_pointer
        stmfd   sp!, {lr}       @ save registers on stack
        adr     r0, restore_es3
        ldmfd   sp!, {pc}       @ restore regs and return
+ ENDPROC(get_es3_restore_pointer)
+       .align
  ENTRY(get_es3_restore_pointer_sz)
        .word   . - get_es3_restore_pointer
  
@@@ -113,12 -124,13 +124,14 @@@ ENTRY(enable_omap3630_toggle_l2_on_rest
        stmfd   sp!, {lr}       @ save registers on stack
        /* Setup so that we will disable and enable l2 */
        mov     r1, #0x1
-       str     r1, l2dis_3630
+       adrl    r2, l2dis_3630  @ may be too distant for plain adr
+       str     r1, [r2]
        ldmfd   sp!, {pc}       @ restore regs and return
+ ENDPROC(enable_omap3630_toggle_l2_on_restore)
  
        .text
  /* Function to call rom code to save secure ram context */
 +      .align  3
  ENTRY(save_secure_ram_context)
        stmfd   sp!, {r1-r12, lr}       @ save registers on stack
        adr     r3, api_params          @ r3 points to parameters
        mov     r1, #0                  @ set task id for ROM code in r1
        mov     r2, #4                  @ set some flags in r2, r6
        mov     r6, #0xff
-       mcr     p15, 0, r0, c7, c10, 4  @ data write barrier
-       mcr     p15, 0, r0, c7, c10, 5  @ data memory barrier
-       .word   0xE1600071              @ call SMI monitor (smi #1)
+       dsb                             @ data write barrier
+       dmb                             @ data memory barrier
+       smc     #1                      @ call SMI monitor (smi #1)
        nop
        nop
        nop
        nop
        ldmfd   sp!, {r1-r12, pc}
+       .align
  sram_phy_addr_mask:
        .word   SRAM_BASE_P
  high_mask:
        .word   0xffff
  api_params:
        .word   0x4, 0x0, 0x0, 0x1, 0x1
+ ENDPROC(save_secure_ram_context)
  ENTRY(save_secure_ram_context_sz)
        .word   . - save_secure_ram_context
  
   *   depending on the low power mode (non-OFF vs OFF modes),
   *   cf. 'Resume path for xxx mode' comments.
   */
 +      .align  3
  ENTRY(omap34xx_cpu_suspend)
        stmfd   sp!, {r0-r12, lr}       @ save registers on stack
  
        /*
-        * r0 contains restore pointer in sdram
+        * r0 contains CPU context save/restore pointer in sdram
         * r1 contains information about saving context:
         *   0 - No context lost
         *   1 - Only L1 and logic lost
-        *   2 - Only L2 lost
-        *   3 - Both L1 and L2 lost
+        *   2 - Only L2 lost (Even L1 is retained we clean it along with L2)
+        *   3 - Both L1 and L2 lost and logic lost
         */
  
        /* Directly jump to WFI is the context save is not required */
@@@ -201,89 -214,74 +216,74 @@@ save_context_wfi
        beq     clean_caches
  
  l1_logic_lost:
-       /* Store sp and spsr to SDRAM */
-       mov     r4, sp
-       mrs     r5, spsr
-       mov     r6, lr
+       mov     r4, sp                  @ Store sp
+       mrs     r5, spsr                @ Store spsr
+       mov     r6, lr                  @ Store lr
        stmia   r8!, {r4-r6}
-       /* Save all ARM registers */
-       /* Coprocessor access control register */
-       mrc     p15, 0, r6, c1, c0, 2
-       stmia   r8!, {r6}
-       /* TTBR0, TTBR1 and Translation table base control */
-       mrc     p15, 0, r4, c2, c0, 0
-       mrc     p15, 0, r5, c2, c0, 1
-       mrc     p15, 0, r6, c2, c0, 2
-       stmia   r8!, {r4-r6}
-       /*
-        * Domain access control register, data fault status register,
-        * and instruction fault status register
-        */
-       mrc     p15, 0, r4, c3, c0, 0
-       mrc     p15, 0, r5, c5, c0, 0
-       mrc     p15, 0, r6, c5, c0, 1
-       stmia   r8!, {r4-r6}
-       /*
-        * Data aux fault status register, instruction aux fault status,
-        * data fault address register and instruction fault address register
-        */
-       mrc     p15, 0, r4, c5, c1, 0
-       mrc     p15, 0, r5, c5, c1, 1
-       mrc     p15, 0, r6, c6, c0, 0
-       mrc     p15, 0, r7, c6, c0, 2
-       stmia   r8!, {r4-r7}
-       /*
-        * user r/w thread and process ID, user r/o thread and process ID,
-        * priv only thread and process ID, cache size selection
-        */
-       mrc     p15, 0, r4, c13, c0, 2
-       mrc     p15, 0, r5, c13, c0, 3
-       mrc     p15, 0, r6, c13, c0, 4
-       mrc     p15, 2, r7, c0, c0, 0
+       mrc     p15, 0, r4, c1, c0, 2   @ Coprocessor access control register
+       mrc     p15, 0, r5, c2, c0, 0   @ TTBR0
+       mrc     p15, 0, r6, c2, c0, 1   @ TTBR1
+       mrc     p15, 0, r7, c2, c0, 2   @ TTBCR
        stmia   r8!, {r4-r7}
-       /* Data TLB lockdown, instruction TLB lockdown registers */
-       mrc     p15, 0, r5, c10, c0, 0
-       mrc     p15, 0, r6, c10, c0, 1
-       stmia   r8!, {r5-r6}
-       /* Secure or non secure vector base address, FCSE PID, Context PID*/
-       mrc     p15, 0, r4, c12, c0, 0
-       mrc     p15, 0, r5, c13, c0, 0
-       mrc     p15, 0, r6, c13, c0, 1
-       stmia   r8!, {r4-r6}
-       /* Primary remap, normal remap registers */
-       mrc     p15, 0, r4, c10, c2, 0
-       mrc     p15, 0, r5, c10, c2, 1
-       stmia   r8!,{r4-r5}
  
-       /* Store current cpsr*/
-       mrs     r2, cpsr
-       stmia   r8!, {r2}
+       mrc     p15, 0, r4, c3, c0, 0   @ Domain access Control Register
+       mrc     p15, 0, r5, c10, c2, 0  @ PRRR
+       mrc     p15, 0, r6, c10, c2, 1  @ NMRR
+       stmia   r8!,{r4-r6}
  
-       mrc     p15, 0, r4, c1, c0, 0
-       /* save control register */
+       mrc     p15, 0, r4, c13, c0, 1  @ Context ID
+       mrc     p15, 0, r5, c13, c0, 2  @ User r/w thread and process ID
+       mrc     p15, 0, r6, c12, c0, 0  @ Secure or NS vector base address
+       mrs     r7, cpsr                @ Store current cpsr
+       stmia   r8!, {r4-r7}
+       mrc     p15, 0, r4, c1, c0, 0   @ save control register
        stmia   r8!, {r4}
  
  clean_caches:
-       /*
-        * Clean Data or unified cache to POU
-        * How to invalidate only L1 cache???? - #FIX_ME#
-        * mcr  p15, 0, r11, c7, c11, 1
-        */
-       cmp     r1, #0x1                @ Check whether L2 inval is required
-       beq     omap3_do_wfi
- clean_l2:
        /*
         * jump out to kernel flush routine
         *  - reuse that code is better
         *  - it executes in a cached space so is faster than refetch per-block
         *  - should be faster and will change with kernel
         *  - 'might' have to copy address, load and jump to it
+        * Flush all data from the L1 data cache before disabling
+        * SCTLR.C bit.
         */
        ldr     r1, kernel_flush
        mov     lr, pc
        bx      r1
  
+       /*
+        * Clear the SCTLR.C bit to prevent further data cache
+        * allocation. Clearing SCTLR.C would make all the data accesses
+        * strongly ordered and would not hit the cache.
+        */
+       mrc     p15, 0, r0, c1, c0, 0
+       bic     r0, r0, #(1 << 2)       @ Disable the C bit
+       mcr     p15, 0, r0, c1, c0, 0
+       isb
+       /*
+        * Invalidate L1 data cache. Even though only invalidate is
+        * necessary exported flush API is used here. Doing clean
+        * on already clean cache would be almost NOP.
+        */
+       ldr     r1, kernel_flush
+       blx     r1
+       /*
+        * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
+        * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
+        * This sequence switches back to ARM.  Note that .align may insert a
+        * nop: bx pc needs to be word-aligned in order to work.
+        */
+  THUMB(       .thumb          )
+  THUMB(       .align          )
+  THUMB(       bx      pc      )
+  THUMB(       nop             )
+       .arm
  omap3_do_wfi:
        ldr     r4, sdrc_power          @ read the SDRC_POWER register
        ldr     r5, [r4]                @ read the contents of SDRC_POWER
        str     r5, [r4]                @ write back to SDRC_POWER register
  
        /* Data memory barrier and Data sync barrier */
-       mov     r1, #0
-       mcr     p15, 0, r1, c7, c10, 4
-       mcr     p15, 0, r1, c7, c10, 5
+       dsb
+       dmb
  
  /*
   * ===================================
        nop
        bl wait_sdrc_ok
  
+       mrc     p15, 0, r0, c1, c0, 0
+       tst     r0, #(1 << 2)           @ Check C bit enabled?
+       orreq   r0, r0, #(1 << 2)       @ Enable the C bit if cleared
+       mcreq   p15, 0, r0, c1, c0, 0
+       isb
  /*
   * ===================================
   * == Exit point from non-OFF modes ==
@@@ -408,9 -411,9 +413,9 @@@ skipl2dis
        mov     r2, #4                  @ set some flags in r2, r6
        mov     r6, #0xff
        adr     r3, l2_inv_api_params   @ r3 points to dummy parameters
-       mcr     p15, 0, r0, c7, c10, 4  @ data write barrier
-       mcr     p15, 0, r0, c7, c10, 5  @ data memory barrier
-       .word   0xE1600071              @ call SMI monitor (smi #1)
+       dsb                             @ data write barrier
+       dmb                             @ data memory barrier
+       smc     #1                      @ call SMI monitor (smi #1)
        /* Write to Aux control register to set some bits */
        mov     r0, #42                 @ set service ID for PPA
        mov     r12, r0                 @ copy secure Service ID in r12
        mov     r6, #0xff
        ldr     r4, scratchpad_base
        ldr     r3, [r4, #0xBC]         @ r3 points to parameters
-       mcr     p15, 0, r0, c7, c10, 4  @ data write barrier
-       mcr     p15, 0, r0, c7, c10, 5  @ data memory barrier
-       .word   0xE1600071              @ call SMI monitor (smi #1)
+       dsb                             @ data write barrier
+       dmb                             @ data memory barrier
+       smc     #1                      @ call SMI monitor (smi #1)
  
  #ifdef CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE
        /* Restore L2 aux control register */
        ldr     r4, scratchpad_base
        ldr     r3, [r4, #0xBC]
        adds    r3, r3, #8              @ r3 points to parameters
-       mcr     p15, 0, r0, c7, c10, 4  @ data write barrier
-       mcr     p15, 0, r0, c7, c10, 5  @ data memory barrier
-       .word   0xE1600071              @ call SMI monitor (smi #1)
+       dsb                             @ data write barrier
+       dmb                             @ data memory barrier
+       smc     #1                      @ call SMI monitor (smi #1)
  #endif
        b       logic_l1_restore
  
+       .align
  l2_inv_api_params:
        .word   0x1, 0x00
  l2_inv_gp:
        /* Execute smi to invalidate L2 cache */
        mov r12, #0x1                   @ set up to invalidate L2
-       .word 0xE1600070                @ Call SMI monitor (smieq)
+       smc     #0                      @ Call SMI monitor (smieq)
        /* Write to Aux control register to set some bits */
        ldr     r4, scratchpad_base
        ldr     r3, [r4,#0xBC]
        ldr     r0, [r3,#4]
        mov     r12, #0x3
-       .word   0xE1600070              @ Call SMI monitor (smieq)
+       smc     #0                      @ Call SMI monitor (smieq)
        ldr     r4, scratchpad_base
        ldr     r3, [r4,#0xBC]
        ldr     r0, [r3,#12]
        mov     r12, #0x2
-       .word   0xE1600070              @ Call SMI monitor (smieq)
+       smc     #0                      @ Call SMI monitor (smieq)
  logic_l1_restore:
        ldr     r1, l2dis_3630
        cmp     r1, #0x1                @ Test if L2 re-enable needed on 3630
@@@ -475,68 -479,29 +481,29 @@@ skipl2reen
        ldr     r4, scratchpad_base
        ldr     r3, [r4,#0xBC]
        adds    r3, r3, #16
        ldmia   r3!, {r4-r6}
-       mov     sp, r4
-       msr     spsr_cxsf, r5
-       mov     lr, r6
-       ldmia   r3!, {r4-r9}
-       /* Coprocessor access Control Register */
-       mcr p15, 0, r4, c1, c0, 2
-       /* TTBR0 */
-       MCR p15, 0, r5, c2, c0, 0
-       /* TTBR1 */
-       MCR p15, 0, r6, c2, c0, 1
-       /* Translation table base control register */
-       MCR p15, 0, r7, c2, c0, 2
-       /* Domain access Control Register */
-       MCR p15, 0, r8, c3, c0, 0
-       /* Data fault status Register */
-       MCR p15, 0, r9, c5, c0, 0
-       ldmia   r3!,{r4-r8}
-       /* Instruction fault status Register */
-       MCR p15, 0, r4, c5, c0, 1
-       /* Data Auxiliary Fault Status Register */
-       MCR p15, 0, r5, c5, c1, 0
-       /* Instruction Auxiliary Fault Status Register*/
-       MCR p15, 0, r6, c5, c1, 1
-       /* Data Fault Address Register */
-       MCR p15, 0, r7, c6, c0, 0
-       /* Instruction Fault Address Register*/
-       MCR p15, 0, r8, c6, c0, 2
-       ldmia   r3!,{r4-r7}
+       mov     sp, r4                  @ Restore sp
+       msr     spsr_cxsf, r5           @ Restore spsr
+       mov     lr, r6                  @ Restore lr
+       ldmia   r3!, {r4-r7}
+       mcr     p15, 0, r4, c1, c0, 2   @ Coprocessor access Control Register
+       mcr     p15, 0, r5, c2, c0, 0   @ TTBR0
+       mcr     p15, 0, r6, c2, c0, 1   @ TTBR1
+       mcr     p15, 0, r7, c2, c0, 2   @ TTBCR
  
-       /* User r/w thread and process ID */
-       MCR p15, 0, r4, c13, c0, 2
-       /* User ro thread and process ID */
-       MCR p15, 0, r5, c13, c0, 3
-       /* Privileged only thread and process ID */
-       MCR p15, 0, r6, c13, c0, 4
-       /* Cache size selection */
-       MCR p15, 2, r7, c0, c0, 0
-       ldmia   r3!,{r4-r8}
-       /* Data TLB lockdown registers */
-       MCR p15, 0, r4, c10, c0, 0
-       /* Instruction TLB lockdown registers */
-       MCR p15, 0, r5, c10, c0, 1
-       /* Secure or Nonsecure Vector Base Address */
-       MCR p15, 0, r6, c12, c0, 0
-       /* FCSE PID */
-       MCR p15, 0, r7, c13, c0, 0
-       /* Context PID */
-       MCR p15, 0, r8, c13, c0, 1
-       ldmia   r3!,{r4-r5}
-       /* Primary memory remap register */
-       MCR p15, 0, r4, c10, c2, 0
-       /* Normal memory remap register */
-       MCR p15, 0, r5, c10, c2, 1
-       /* Restore cpsr */
-       ldmia   r3!,{r4}                @ load CPSR from SDRAM
-       msr     cpsr, r4                @ store cpsr
+       ldmia   r3!,{r4-r6}
+       mcr     p15, 0, r4, c3, c0, 0   @ Domain access Control Register
+       mcr     p15, 0, r5, c10, c2, 0  @ PRRR
+       mcr     p15, 0, r6, c10, c2, 1  @ NMRR
+       ldmia   r3!,{r4-r7}
+       mcr     p15, 0, r4, c13, c0, 1  @ Context ID
+       mcr     p15, 0, r5, c13, c0, 2  @ User r/w thread and process ID
+       mrc     p15, 0, r6, c12, c0, 0  @ Secure or NS vector base address
+       msr     cpsr, r7                @ store cpsr
  
        /* Enabling MMU here */
        mrc     p15, 0, r7, c2, c0, 2   @ Read TTBRControl
@@@ -594,12 -559,17 +561,17 @@@ usettbr0
        ldr     r2, cache_pred_disable_mask
        and     r4, r2
        mcr     p15, 0, r4, c1, c0, 0
+       dsb
+       isb
+       ldr     r0, =restoremmu_on
+       bx      r0
  
  /*
   * ==============================
   * == Exit point from OFF mode ==
   * ==============================
   */
+ restoremmu_on:
        ldmfd   sp!, {r0-r12, pc}       @ restore regs and return
  
  
  
  /* This function implements the erratum ID i443 WA, applies to 34xx >= ES3.0 */
        .text
+       .align  3
  ENTRY(es3_sdrc_fix)
        ldr     r4, sdrc_syscfg         @ get config addr
        ldr     r5, [r4]                @ get value
        str     r5, [r4]                @ kick off refreshes
        bx      lr
  
+       .align
  sdrc_syscfg:
        .word   SDRC_SYSCONFIG_P
  sdrc_mr_0:
@@@ -650,6 -622,7 +624,7 @@@ sdrc_emr2_1
        .word   SDRC_EMR2_1_P
  sdrc_manual_1:
        .word   SDRC_MANUAL_1_P
+ ENDPROC(es3_sdrc_fix)
  ENTRY(es3_sdrc_fix_sz)
        .word   . - es3_sdrc_fix
  
@@@ -684,6 -657,12 +659,12 @@@ wait_sdrc_ready
        bic     r5, r5, #0x40
        str     r5, [r4]
  
+ /*
+  * PC-relative stores lead to undefined behaviour in Thumb-2: use a r7 as a
+  * base instead.
+  * Be careful not to clobber r7 when maintaing this code.
+  */
  is_dll_in_lock_mode:
        /* Is dll in lock mode? */
        ldr     r4, sdrc_dlla_ctrl
        tst     r5, #0x4
        bxne    lr                      @ Return if locked
        /* wait till dll locks */
+       adr     r7, kick_counter
  wait_dll_lock_timed:
        ldr     r4, wait_dll_lock_counter
        add     r4, r4, #1
-       str     r4, wait_dll_lock_counter
+       str     r4, [r7, #wait_dll_lock_counter - kick_counter]
        ldr     r4, sdrc_dlla_status
        /* Wait 20uS for lock */
        mov     r6, #8
@@@ -720,9 -700,10 +702,10 @@@ kick_dll
        dsb
        ldr     r4, kick_counter
        add     r4, r4, #1
-       str     r4, kick_counter
+       str     r4, [r7]                @ kick_counter
        b       wait_dll_lock_timed
  
+       .align
  cm_idlest1_core:
        .word   CM_IDLEST1_CORE_V
  cm_idlest_ckgen:
@@@ -765,6 -746,7 +748,7 @@@ kick_counter
        .word   0
  wait_dll_lock_counter:
        .word   0
+ ENDPROC(omap34xx_cpu_suspend)
  
  ENTRY(omap34xx_cpu_suspend_sz)
        .word   . - omap34xx_cpu_suspend
index 25011ca2145d6abba4d98e4cc441f061c2f9d91c,1078bfbc25c7023eb52aa78a9274c234159b5a0a..6f5849aaa7c00b0cc2e7a270dc8f4401addb35b6
  #include "sdrc.h"
  #include "cm2xxx_3xxx.h"
  
+ /*
+  * This file needs be built unconditionally as ARM to interoperate correctly
+  * with non-Thumb-2-capable firmware.
+  */
+       .arm
        .text
  
  /* r1 parameters */
   * since it will cause the ARM MMU to attempt to walk the page tables.
   * These crashes may be intermittent.
   */
 +      .align  3
  ENTRY(omap3_sram_configure_core_dpll)
        stmfd   sp!, {r1-r12, lr}       @ store regs to stack
  
                                        @ pull the extra args off the stack
                                        @  and store them in SRAM
+ /*
+  * PC-relative stores are deprecated in ARMv7 and lead to undefined behaviour
+  * in Thumb-2: use a r7 as a base instead.
+  * Be careful not to clobber r7 when maintaing this file.
+  */
+  THUMB(       adr     r7, omap3_sram_configure_core_dpll                      )
+       .macro strtext Rt:req, label:req
+  ARM( str     \Rt, \label                                             )
+  THUMB(       str     \Rt, [r7, \label - omap3_sram_configure_core_dpll]      )
+       .endm
        ldr     r4, [sp, #52]
-       str     r4, omap_sdrc_rfr_ctrl_0_val
+       strtext r4, omap_sdrc_rfr_ctrl_0_val
        ldr     r4, [sp, #56]
-       str     r4, omap_sdrc_actim_ctrl_a_0_val
+       strtext r4, omap_sdrc_actim_ctrl_a_0_val
        ldr     r4, [sp, #60]
-       str     r4, omap_sdrc_actim_ctrl_b_0_val
+       strtext r4, omap_sdrc_actim_ctrl_b_0_val
        ldr     r4, [sp, #64]
-       str     r4, omap_sdrc_mr_0_val
+       strtext r4, omap_sdrc_mr_0_val
        ldr     r4, [sp, #68]
-       str     r4, omap_sdrc_rfr_ctrl_1_val
+       strtext r4, omap_sdrc_rfr_ctrl_1_val
        cmp     r4, #0                  @ if SDRC_RFR_CTRL_1 is 0,
        beq     skip_cs1_params         @  do not use cs1 params
        ldr     r4, [sp, #72]
-       str     r4, omap_sdrc_actim_ctrl_a_1_val
+       strtext r4, omap_sdrc_actim_ctrl_a_1_val
        ldr     r4, [sp, #76]
-       str     r4, omap_sdrc_actim_ctrl_b_1_val
+       strtext r4, omap_sdrc_actim_ctrl_b_1_val
        ldr     r4, [sp, #80]
-       str     r4, omap_sdrc_mr_1_val
+       strtext r4, omap_sdrc_mr_1_val
  skip_cs1_params:
        mrc     p15, 0, r8, c1, c0, 0   @ read ctrl register
        bic     r10, r8, #0x800         @ clear Z-bit, disable branch prediction
@@@ -272,6 -289,7 +290,7 @@@ skip_cs1_prog
        ldr     r12, [r11]              @ posted-write barrier for SDRC
        bx      lr
  
+       .align
  omap3_sdrc_power:
        .word OMAP34XX_SDRC_REGADDR(SDRC_POWER)
  omap3_cm_clksel1_pll:
@@@ -320,6 -338,7 +339,7 @@@ omap3_sdrc_dlla_ctrl
        .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
  core_m2_mask_val:
        .word 0x07FFFFFF
+ ENDPROC(omap3_sram_configure_core_dpll)
  
  ENTRY(omap3_sram_configure_core_dpll_sz)
        .word   . - omap3_sram_configure_core_dpll
index 241fc94b41169f273eb5c11dee7435881297fc96,a9d4d143086d73463b97c093cc9f022de8e1d679..35559f77e2deb8e47fa7e2d84caffebdf0740bf1
  #include <mach/irqs.h>
  #include <mach/am35xx.h>
  #include <plat/usb.h>
- #include "control.h"
+ #include <plat/omap_device.h>
+ #include "mux.h"
  
  #if defined(CONFIG_USB_MUSB_OMAP2PLUS) || defined (CONFIG_USB_MUSB_AM35X)
  
- static void am35x_musb_reset(void)
- {
-       u32     regval;
-       /* Reset the musb interface */
-       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
-       regval |= AM35XX_USBOTGSS_SW_RST;
-       omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
-       regval &= ~AM35XX_USBOTGSS_SW_RST;
-       omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
- }
- static void am35x_musb_phy_power(u8 on)
- {
-       unsigned long timeout = jiffies + msecs_to_jiffies(100);
-       u32 devconf2;
-       if (on) {
-               /*
-                * Start the on-chip PHY and its PLL.
-                */
-               devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
-               devconf2 &= ~(CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN);
-               devconf2 |= CONF2_PHY_PLLON;
-               omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
-               pr_info(KERN_INFO "Waiting for PHY clock good...\n");
-               while (!(omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2)
-                               & CONF2_PHYCLKGD)) {
-                       cpu_relax();
-                       if (time_after(jiffies, timeout)) {
-                               pr_err(KERN_ERR "musb PHY clock good timed out\n");
-                               break;
-                       }
-               }
-       } else {
-               /*
-                * Power down the on-chip PHY.
-                */
-               devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
-               devconf2 &= ~CONF2_PHY_PLLON;
-               devconf2 |=  CONF2_PHYPWRDN | CONF2_OTGPWRDN;
-               omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
-       }
- }
- static void am35x_musb_clear_irq(void)
- {
-       u32 regval;
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval |= AM35XX_USBOTGSS_INT_CLR;
-       omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
- }
- static void am35x_musb_set_mode(u8 musb_mode)
- {
-       u32 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
-       devconf2 &= ~CONF2_OTGMODE;
-       switch (musb_mode) {
- #ifdef        CONFIG_USB_MUSB_HDRC_HCD
-       case MUSB_HOST:         /* Force VBUS valid, ID = 0 */
-               devconf2 |= CONF2_FORCE_HOST;
-               break;
- #endif
- #ifdef        CONFIG_USB_GADGET_MUSB_HDRC
-       case MUSB_PERIPHERAL:   /* Force VBUS valid, ID = 1 */
-               devconf2 |= CONF2_FORCE_DEVICE;
-               break;
- #endif
- #ifdef        CONFIG_USB_MUSB_OTG
-       case MUSB_OTG:          /* Don't override the VBUS/ID comparators */
-               devconf2 |= CONF2_NO_OVERRIDE;
-               break;
- #endif
-       default:
-               pr_info(KERN_INFO "Unsupported mode %u\n", musb_mode);
-       }
-       omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
- }
- static struct resource musb_resources[] = {
-       [0] = { /* start and end set dynamically */
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = { /* general IRQ */
-               .start  = INT_243X_HS_USB_MC,
-               .flags  = IORESOURCE_IRQ,
-               .name   = "mc",
-       },
-       [2] = { /* DMA IRQ */
-               .start  = INT_243X_HS_USB_DMA,
-               .flags  = IORESOURCE_IRQ,
-               .name   = "dma",
-       },
- };
  static struct musb_hdrc_config musb_config = {
        .multipoint     = 1,
        .dyn_fifo       = 1,
@@@ -169,38 -62,65 +62,65 @@@ static struct musb_hdrc_platform_data m
  
  static u64 musb_dmamask = DMA_BIT_MASK(32);
  
- static struct platform_device musb_device = {
-       .name           = "musb-omap2430",
-       .id             = -1,
-       .dev = {
-               .dma_mask               = &musb_dmamask,
-               .coherent_dma_mask      = DMA_BIT_MASK(32),
-               .platform_data          = &musb_plat,
+ static struct omap_device_pm_latency omap_musb_latency[] = {
+       {
+               .deactivate_func        = omap_device_idle_hwmods,
+               .activate_func          = omap_device_enable_hwmods,
+               .flags                  = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
        },
-       .num_resources  = ARRAY_SIZE(musb_resources),
-       .resource       = musb_resources,
  };
  
+ static void usb_musb_mux_init(struct omap_musb_board_data *board_data)
+ {
+       switch (board_data->interface_type) {
+       case MUSB_INTERFACE_UTMI:
+               omap_mux_init_signal("usba0_otg_dp", OMAP_PIN_INPUT);
+               omap_mux_init_signal("usba0_otg_dm", OMAP_PIN_INPUT);
+               break;
+       case MUSB_INTERFACE_ULPI:
+               omap_mux_init_signal("usba0_ulpiphy_clk",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_stp",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dir",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_nxt",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat0",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat1",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat2",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat3",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat4",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat5",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat6",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               omap_mux_init_signal("usba0_ulpiphy_dat7",
+                                               OMAP_PIN_INPUT_PULLDOWN);
+               break;
+       default:
+               break;
+       }
+ }
  void __init usb_musb_init(struct omap_musb_board_data *board_data)
  {
-       if (cpu_is_omap243x()) {
-               musb_resources[0].start = OMAP243X_HS_BASE;
-       } else if (cpu_is_omap3517() || cpu_is_omap3505()) {
-               musb_device.name = "musb-am35x";
-               musb_resources[0].start = AM35XX_IPSS_USBOTGSS_BASE;
-               musb_resources[1].start = INT_35XX_USBOTG_IRQ;
-               board_data->set_phy_power = am35x_musb_phy_power;
-               board_data->clear_irq = am35x_musb_clear_irq;
-               board_data->set_mode = am35x_musb_set_mode;
-               board_data->reset = am35x_musb_reset;
-       } else if (cpu_is_omap34xx()) {
-               musb_resources[0].start = OMAP34XX_HSUSB_OTG_BASE;
+       struct omap_hwmod               *oh;
+       struct omap_device              *od;
+       struct platform_device          *pdev;
+       struct device                   *dev;
+       int                             bus_id = -1;
+       const char                      *oh_name, *name;
+       if (cpu_is_omap3517() || cpu_is_omap3505()) {
        } else if (cpu_is_omap44xx()) {
-               musb_resources[0].start = OMAP44XX_HSUSB_OTG_BASE;
-               musb_resources[1].start = OMAP44XX_IRQ_HS_USB_MC_N;
-               musb_resources[2].start = OMAP44XX_IRQ_HS_USB_DMA_N;
+               usb_musb_mux_init(board_data);
        }
-       musb_resources[0].end = musb_resources[0].start + SZ_4K - 1;
  
        /*
         * REVISIT: This line can be removed once all the platforms using
        musb_plat.mode = board_data->mode;
        musb_plat.extvbus = board_data->extvbus;
  
-       if (platform_device_register(&musb_device) < 0)
-               printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n");
 +      if (cpu_is_omap44xx())
 +              omap4430_phy_init(dev);
 +
+       if (cpu_is_omap3517() || cpu_is_omap3505()) {
+               oh_name = "am35x_otg_hs";
+               name = "musb-am35x";
+       } else {
+               oh_name = "usb_otg_hs";
+               name = "musb-omap2430";
+       }
+       oh = omap_hwmod_lookup(oh_name);
+       if (!oh) {
+               pr_err("Could not look up %s\n", oh_name);
+               return;
+       }
+       od = omap_device_build(name, bus_id, oh, &musb_plat,
+                              sizeof(musb_plat), omap_musb_latency,
+                              ARRAY_SIZE(omap_musb_latency), false);
+       if (IS_ERR(od)) {
+               pr_err("Could not build omap_device for %s %s\n",
+                                               name, oh_name);
+               return;
+       }
+       pdev = &od->pdev;
+       dev = &pdev->dev;
+       get_device(dev);
+       dev->dma_mask = &musb_dmamask;
+       dev->coherent_dma_mask = musb_dmamask;
+       put_device(dev);
  }
  
  #else
index 8ff605c83aca89dfa780b2f1efb7cd682f57b6df,8061695aa5231e983662dcb38cf31df990eb5b69..2723f9166ea20f07c150170c15097d06d04794d7
@@@ -27,7 -27,7 +27,7 @@@
   * 2. We assume printascii is called at least once before paging_init,
   *    and addruart has a chance to read OMAP_UART_INFO
   */
 -#define OMAP_UART_INFO                (PHYS_OFFSET + 0x3ffc)
 +#define OMAP_UART_INFO                (PLAT_PHYS_OFFSET + 0x3ffc)
  
  /* OMAP1 serial ports */
  #define OMAP1_UART1_BASE      0xfffb0000
  #define OMAP4_UART3_BASE      0x48020000
  #define OMAP4_UART4_BASE      0x4806e000
  
+ /* TI816X serial ports */
+ #define TI816X_UART1_BASE     0x48020000
+ #define TI816X_UART2_BASE     0x48022000
+ #define TI816X_UART3_BASE     0x48024000
  /* External port on Zoom2/3 */
  #define ZOOM_UART_BASE                0x10000000
  #define ZOOM_UART_VIRT                0xfa400000
@@@ -81,6 -86,9 +86,9 @@@
  #define OMAP4UART2            OMAP2UART2
  #define OMAP4UART3            43
  #define OMAP4UART4            44
+ #define TI816XUART1           81
+ #define TI816XUART2           82
+ #define TI816XUART3           83
  #define ZOOM_UART             95              /* Only on zoom2/3 */
  
  /* This is only used by 8250.c for omap1510 */
  
  struct omap_board_data;
  
- extern void __init omap_serial_early_init(void);
  extern void omap_serial_init(void);
  extern void omap_serial_init_port(struct omap_board_data *bdata);
  extern int omap_uart_can_sleep(void);
index fe449f1a1c1443a66a1322e18a1f1462985fab96,077192759afc49384c219125e591cd7af9639856..02b96c8f6a17cd687f63a5e439d44ba57f621339
@@@ -7,12 -7,15 +7,12 @@@
  #include <plat/board.h>
  
  #define OMAP3_HS_USB_PORTS    3
 -enum ehci_hcd_omap_mode {
 -      EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      EHCI_HCD_OMAP_MODE_PHY,
 -      EHCI_HCD_OMAP_MODE_TLL,
 -      EHCI_HCD_OMAP_MODE_HSIC,
 -};
  
 -enum ohci_omap3_port_mode {
 -      OMAP_OHCI_PORT_MODE_UNUSED,
 +enum usbhs_omap_port_mode {
 +      OMAP_USBHS_PORT_MODE_UNUSED,
 +      OMAP_EHCI_PORT_MODE_PHY,
 +      OMAP_EHCI_PORT_MODE_TLL,
 +      OMAP_EHCI_PORT_MODE_HSIC,
        OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0,
        OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM,
        OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0,
        OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0,
        OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM,
        OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0,
 -      OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM,
 +      OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM
  };
  
 -struct ehci_hcd_omap_platform_data {
 -      enum ehci_hcd_omap_mode         port_mode[OMAP3_HS_USB_PORTS];
 -      unsigned                        phy_reset:1;
 +struct usbhs_omap_board_data {
 +      enum usbhs_omap_port_mode       port_mode[OMAP3_HS_USB_PORTS];
  
        /* have to be valid if phy_reset is true and portx is in phy mode */
        int     reset_gpio_port[OMAP3_HS_USB_PORTS];
 +
 +      /* Set this to true for ES2.x silicon */
 +      unsigned                        es2_compatibility:1;
 +
 +      unsigned                        phy_reset:1;
 +
 +      /*
 +       * Regulators for USB PHYs.
 +       * Each PHY can have a separate regulator.
 +       */
 +      struct regulator                *regulator[OMAP3_HS_USB_PORTS];
  };
  
 -struct ohci_hcd_omap_platform_data {
 -      enum ohci_omap3_port_mode       port_mode[OMAP3_HS_USB_PORTS];
 +struct ehci_hcd_omap_platform_data {
 +      enum usbhs_omap_port_mode       port_mode[OMAP3_HS_USB_PORTS];
 +      int                             reset_gpio_port[OMAP3_HS_USB_PORTS];
 +      struct regulator                *regulator[OMAP3_HS_USB_PORTS];
 +      unsigned                        phy_reset:1;
 +};
  
 -      /* Set this to true for ES2.x silicon */
 +struct ohci_hcd_omap_platform_data {
 +      enum usbhs_omap_port_mode       port_mode[OMAP3_HS_USB_PORTS];
        unsigned                        es2_compatibility:1;
  };
  
 +struct usbhs_omap_platform_data {
 +      enum usbhs_omap_port_mode               port_mode[OMAP3_HS_USB_PORTS];
 +
 +      struct ehci_hcd_omap_platform_data      *ehci_data;
 +      struct ohci_hcd_omap_platform_data      *ohci_data;
 +};
  /*-------------------------------------------------------------------------*/
  
  #define OMAP1_OTG_BASE                        0xfffb0400
@@@ -98,18 -80,22 +98,23 @@@ enum musb_interface    {MUSB_INTERFACE_
  
  extern void usb_musb_init(struct omap_musb_board_data *board_data);
  
 -extern void usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata);
 +extern void usbhs_init(const struct usbhs_omap_board_data *pdata);
  
 -extern void usb_ohci_init(const struct ohci_hcd_omap_platform_data *pdata);
 +extern int omap_usbhs_enable(struct device *dev);
 +extern void omap_usbhs_disable(struct device *dev);
  
  extern int omap4430_phy_power(struct device *dev, int ID, int on);
  extern int omap4430_phy_set_clk(struct device *dev, int on);
  extern int omap4430_phy_init(struct device *dev);
  extern int omap4430_phy_exit(struct device *dev);
 -
 +extern int omap4430_phy_suspend(struct device *dev, int suspend);
  #endif
  
+ extern void am35x_musb_reset(void);
+ extern void am35x_musb_phy_power(u8 on);
+ extern void am35x_musb_clear_irq(void);
+ extern void am35x_musb_set_mode(u8 musb_mode);
  /*
   * FIXME correct answer depends on hmc_mode,
   * as does (on omap1) any nonzero value for config->otg port number
index 68fcc7dc56e7a4b4acf849f392e3320211822ba9,9d80064e979b423fb5b891ff7a751ea3ce050c58..a3f50b34a90d3ffed85c0fcd4bc6baad080df7cd
@@@ -242,14 -242,7 +242,14 @@@ static void __init omap_map_sram(void
               omap_sram_size - SRAM_BOOTLOADER_SZ);
  }
  
 -void * omap_sram_push(void * start, unsigned long size)
 +/*
 + * Memory allocator for SRAM: calculates the new ceiling address
 + * for pushing a function using the fncpy API.
 + *
 + * Note that fncpy requires the returned address to be aligned
 + * to an 8-byte boundary.
 + */
 +void *omap_sram_push_address(unsigned long size)
  {
        if (size > (omap_sram_ceil - (omap_sram_base + SRAM_BOOTLOADER_SZ))) {
                printk(KERN_ERR "Not enough space in SRAM\n");
        }
  
        omap_sram_ceil -= size;
 -      omap_sram_ceil = ROUND_DOWN(omap_sram_ceil, sizeof(void *));
 -      memcpy((void *)omap_sram_ceil, start, size);
 -      flush_icache_range((unsigned long)omap_sram_ceil,
 -              (unsigned long)(omap_sram_ceil + size));
 +      omap_sram_ceil = ROUND_DOWN(omap_sram_ceil, FNCPY_ALIGN);
  
        return (void *)omap_sram_ceil;
  }
@@@ -316,7 -312,7 +316,7 @@@ u32 omap2_set_prcm(u32 dpll_ctrl_val, u
  }
  #endif
  
- #ifdef CONFIG_ARCH_OMAP2420
+ #ifdef CONFIG_SOC_OMAP2420
  static int __init omap242x_sram_init(void)
  {
        _omap2_sram_ddr_init = omap_sram_push(omap242x_sram_ddr_init,
@@@ -337,7 -333,7 +337,7 @@@ static inline int omap242x_sram_init(vo
  }
  #endif
  
- #ifdef CONFIG_ARCH_OMAP2430
+ #ifdef CONFIG_SOC_OMAP2430
  static int __init omap243x_sram_init(void)
  {
        _omap2_sram_ddr_init = omap_sram_push(omap243x_sram_ddr_init,
@@@ -409,20 -405,6 +409,6 @@@ static inline int omap34xx_sram_init(vo
  }
  #endif
  
- #ifdef CONFIG_ARCH_OMAP4
- static int __init omap44xx_sram_init(void)
- {
-       printk(KERN_ERR "FIXME: %s not implemented\n", __func__);
-       return -ENODEV;
- }
- #else
- static inline int omap44xx_sram_init(void)
- {
-       return 0;
- }
- #endif
  int __init omap_sram_init(void)
  {
        omap_detect_sram();
                omap243x_sram_init();
        else if (cpu_is_omap34xx())
                omap34xx_sram_init();
-       else if (cpu_is_omap44xx())
-               omap44xx_sram_init();
  
        return 0;
  }
diff --combined drivers/mtd/nand/Kconfig
index 450afc5df0bd6a57e93d9c9c1ee2b0550645f61c,178e2006063d7e529eedccd4fb4707898a218606..4f6c06f1632843ac20e7882c0cc7a346747355cc
@@@ -106,23 -106,6 +106,6 @@@ config MTD_NAND_OMAP
        help
            Support for NAND flash on Texas Instruments OMAP2 and OMAP3 platforms.
  
- config MTD_NAND_OMAP_PREFETCH
-       bool "GPMC prefetch support for NAND Flash device"
-       depends on MTD_NAND_OMAP2
-       default y
-       help
-        The NAND device can be accessed for Read/Write using GPMC PREFETCH engine
-        to improve the performance.
- config MTD_NAND_OMAP_PREFETCH_DMA
-       depends on MTD_NAND_OMAP_PREFETCH
-       bool "DMA mode"
-       default n
-       help
-        The GPMC PREFETCH engine can be configured eigther in MPU interrupt mode
-        or in DMA interrupt mode.
-        Say y for DMA mode or MPU mode will be used
  config MTD_NAND_IDS
        tristate
  
@@@ -476,7 -459,7 +459,7 @@@ config MTD_NAND_MPC5121_NF
  
  config MTD_NAND_MXC
        tristate "MXC NAND support"
 -      depends on ARCH_MX2 || ARCH_MX25 || ARCH_MX3 || ARCH_MX51
 +      depends on IMX_HAVE_PLATFORM_MXC_NAND
        help
          This enables the driver for the NAND flash controller on the
          MXC processors.
diff --combined drivers/mtd/nand/omap2.c
index 28af71c61834e8d08bd474a88cddbf8cf5d4bbe0,4e33972ad17ac780a55c4e96c1350055c23ad92a..7b8f1fffc5286bb96341471054589c70c22f9cde
@@@ -11,6 -11,7 +11,7 @@@
  #include <linux/platform_device.h>
  #include <linux/dma-mapping.h>
  #include <linux/delay.h>
+ #include <linux/interrupt.h>
  #include <linux/jiffies.h>
  #include <linux/sched.h>
  #include <linux/mtd/mtd.h>
@@@ -24,6 -25,7 +25,7 @@@
  #include <plat/nand.h>
  
  #define       DRIVER_NAME     "omap2-nand"
+ #define       OMAP_NAND_TIMEOUT_MS    5000
  
  #define NAND_Ecc_P1e          (1 << 0)
  #define NAND_Ecc_P2e          (1 << 1)
  static const char *part_probes[] = { "cmdlinepart", NULL };
  #endif
  
- #ifdef CONFIG_MTD_NAND_OMAP_PREFETCH
- static int use_prefetch = 1;
- /* "modprobe ... use_prefetch=0" etc */
- module_param(use_prefetch, bool, 0);
- MODULE_PARM_DESC(use_prefetch, "enable/disable use of PREFETCH");
- #ifdef CONFIG_MTD_NAND_OMAP_PREFETCH_DMA
- static int use_dma = 1;
+ /* oob info generated runtime depending on ecc algorithm and layout selected */
+ static struct nand_ecclayout omap_oobinfo;
+ /* Define some generic bad / good block scan pattern which are used
+  * while scanning a device for factory marked good / bad blocks
+  */
+ static uint8_t scan_ff_pattern[] = { 0xff };
+ static struct nand_bbt_descr bb_descrip_flashbased = {
+       .options = NAND_BBT_SCANEMPTY | NAND_BBT_SCANALLPAGES,
+       .offs = 0,
+       .len = 1,
+       .pattern = scan_ff_pattern,
+ };
  
- /* "modprobe ... use_dma=0" etc */
- module_param(use_dma, bool, 0);
- MODULE_PARM_DESC(use_dma, "enable/disable use of DMA");
- #else
- static const int use_dma;
- #endif
- #else
- const int use_prefetch;
- static const int use_dma;
- #endif
  
  struct omap_nand_info {
        struct nand_hw_control          controller;
        unsigned long                   phys_base;
        struct completion               comp;
        int                             dma_ch;
+       int                             gpmc_irq;
+       enum {
+               OMAP_NAND_IO_READ = 0,  /* read */
+               OMAP_NAND_IO_WRITE,     /* write */
+       } iomode;
+       u_char                          *buf;
+       int                                     buf_len;
  };
  
  /**
@@@ -256,7 -258,8 +258,8 @@@ static void omap_read_buf_pref(struct m
        }
  
        /* configure and start prefetch transfer */
-       ret = gpmc_prefetch_enable(info->gpmc_cs, 0x0, len, 0x0);
+       ret = gpmc_prefetch_enable(info->gpmc_cs,
+                       PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x0);
        if (ret) {
                /* PFPW engine is busy, use cpu copy method */
                if (info->nand.options & NAND_BUSWIDTH_16)
@@@ -288,9 -291,10 +291,10 @@@ static void omap_write_buf_pref(struct 
  {
        struct omap_nand_info *info = container_of(mtd,
                                                struct omap_nand_info, mtd);
-       uint32_t pref_count = 0, w_count = 0;
+       uint32_t w_count = 0;
        int i = 0, ret = 0;
        u16 *p;
+       unsigned long tim, limit;
  
        /* take care of subpage writes */
        if (len % 2 != 0) {
        }
  
        /*  configure and start prefetch transfer */
-       ret = gpmc_prefetch_enable(info->gpmc_cs, 0x0, len, 0x1);
+       ret = gpmc_prefetch_enable(info->gpmc_cs,
+                       PREFETCH_FIFOTHRESHOLD_MAX, 0x0, len, 0x1);
        if (ret) {
                /* PFPW engine is busy, use cpu copy method */
                if (info->nand.options & NAND_BUSWIDTH_16)
                                iowrite16(*p++, info->nand.IO_ADDR_W);
                }
                /* wait for data to flushed-out before reset the prefetch */
-               do {
-                       pref_count = gpmc_read_status(GPMC_PREFETCH_COUNT);
-               } while (pref_count);
+               tim = 0;
+               limit = (loops_per_jiffy *
+                                       msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
+               while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))
+                       cpu_relax();
                /* disable and stop the PFPW engine */
                gpmc_prefetch_reset(info->gpmc_cs);
        }
  }
  
- #ifdef CONFIG_MTD_NAND_OMAP_PREFETCH_DMA
  /*
   * omap_nand_dma_cb: callback on the completion of dma transfer
   * @lch: logical channel
@@@ -348,14 -355,15 +355,15 @@@ static inline int omap_nand_dma_transfe
  {
        struct omap_nand_info *info = container_of(mtd,
                                        struct omap_nand_info, mtd);
-       uint32_t prefetch_status = 0;
        enum dma_data_direction dir = is_write ? DMA_TO_DEVICE :
                                                        DMA_FROM_DEVICE;
        dma_addr_t dma_addr;
        int ret;
+       unsigned long tim, limit;
  
-       /* The fifo depth is 64 bytes. We have a sync at each frame and frame
-        * length is 64 bytes.
+       /* The fifo depth is 64 bytes max.
+        * But configure the FIFO-threahold to 32 to get a sync at each frame
+        * and frame length is 32 bytes.
         */
        int buf_len = len >> 6;
  
                                        OMAP24XX_DMA_GPMC, OMAP_DMA_SRC_SYNC);
        }
        /*  configure and start prefetch transfer */
-       ret = gpmc_prefetch_enable(info->gpmc_cs, 0x1, len, is_write);
+       ret = gpmc_prefetch_enable(info->gpmc_cs,
+                       PREFETCH_FIFOTHRESHOLD_MAX, 0x1, len, is_write);
        if (ret)
-               /* PFPW engine is busy, use cpu copy methode */
+               /* PFPW engine is busy, use cpu copy method */
                goto out_copy;
  
        init_completion(&info->comp);
  
        /* setup and start DMA using dma_addr */
        wait_for_completion(&info->comp);
+       tim = 0;
+       limit = (loops_per_jiffy * msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
+       while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))
+               cpu_relax();
  
-       do {
-               prefetch_status = gpmc_read_status(GPMC_PREFETCH_COUNT);
-       } while (prefetch_status);
        /* disable and stop the PFPW engine */
        gpmc_prefetch_reset(info->gpmc_cs);
  
@@@ -426,14 -436,6 +436,6 @@@ out_copy
                        : omap_write_buf8(mtd, (u_char *) addr, len);
        return 0;
  }
- #else
- static void omap_nand_dma_cb(int lch, u16 ch_status, void *data) {}
- static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr,
-                                       unsigned int len, int is_write)
- {
-       return 0;
- }
- #endif
  
  /**
   * omap_read_buf_dma_pref - read data from NAND controller into buffer
@@@ -466,6 -468,157 +468,157 @@@ static void omap_write_buf_dma_pref(str
                omap_nand_dma_transfer(mtd, (u_char *) buf, len, 0x1);
  }
  
+ /*
+  * omap_nand_irq - GMPC irq handler
+  * @this_irq: gpmc irq number
+  * @dev: omap_nand_info structure pointer is passed here
+  */
+ static irqreturn_t omap_nand_irq(int this_irq, void *dev)
+ {
+       struct omap_nand_info *info = (struct omap_nand_info *) dev;
+       u32 bytes;
+       u32 irq_stat;
+       irq_stat = gpmc_read_status(GPMC_GET_IRQ_STATUS);
+       bytes = gpmc_read_status(GPMC_PREFETCH_FIFO_CNT);
+       bytes = bytes  & 0xFFFC; /* io in multiple of 4 bytes */
+       if (info->iomode == OMAP_NAND_IO_WRITE) { /* checks for write io */
+               if (irq_stat & 0x2)
+                       goto done;
+               if (info->buf_len && (info->buf_len < bytes))
+                       bytes = info->buf_len;
+               else if (!info->buf_len)
+                       bytes = 0;
+               iowrite32_rep(info->nand.IO_ADDR_W,
+                                               (u32 *)info->buf, bytes >> 2);
+               info->buf = info->buf + bytes;
+               info->buf_len -= bytes;
+       } else {
+               ioread32_rep(info->nand.IO_ADDR_R,
+                                               (u32 *)info->buf, bytes >> 2);
+               info->buf = info->buf + bytes;
+               if (irq_stat & 0x2)
+                       goto done;
+       }
+       gpmc_cs_configure(info->gpmc_cs, GPMC_SET_IRQ_STATUS, irq_stat);
+       return IRQ_HANDLED;
+ done:
+       complete(&info->comp);
+       /* disable irq */
+       gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ, 0);
+       /* clear status */
+       gpmc_cs_configure(info->gpmc_cs, GPMC_SET_IRQ_STATUS, irq_stat);
+       return IRQ_HANDLED;
+ }
+ /*
+  * omap_read_buf_irq_pref - read data from NAND controller into buffer
+  * @mtd: MTD device structure
+  * @buf: buffer to store date
+  * @len: number of bytes to read
+  */
+ static void omap_read_buf_irq_pref(struct mtd_info *mtd, u_char *buf, int len)
+ {
+       struct omap_nand_info *info = container_of(mtd,
+                                               struct omap_nand_info, mtd);
+       int ret = 0;
+       if (len <= mtd->oobsize) {
+               omap_read_buf_pref(mtd, buf, len);
+               return;
+       }
+       info->iomode = OMAP_NAND_IO_READ;
+       info->buf = buf;
+       init_completion(&info->comp);
+       /*  configure and start prefetch transfer */
+       ret = gpmc_prefetch_enable(info->gpmc_cs,
+                       PREFETCH_FIFOTHRESHOLD_MAX/2, 0x0, len, 0x0);
+       if (ret)
+               /* PFPW engine is busy, use cpu copy method */
+               goto out_copy;
+       info->buf_len = len;
+       /* enable irq */
+       gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ,
+               (GPMC_IRQ_FIFOEVENTENABLE | GPMC_IRQ_COUNT_EVENT));
+       /* waiting for read to complete */
+       wait_for_completion(&info->comp);
+       /* disable and stop the PFPW engine */
+       gpmc_prefetch_reset(info->gpmc_cs);
+       return;
+ out_copy:
+       if (info->nand.options & NAND_BUSWIDTH_16)
+               omap_read_buf16(mtd, buf, len);
+       else
+               omap_read_buf8(mtd, buf, len);
+ }
+ /*
+  * omap_write_buf_irq_pref - write buffer to NAND controller
+  * @mtd: MTD device structure
+  * @buf: data buffer
+  * @len: number of bytes to write
+  */
+ static void omap_write_buf_irq_pref(struct mtd_info *mtd,
+                                       const u_char *buf, int len)
+ {
+       struct omap_nand_info *info = container_of(mtd,
+                                               struct omap_nand_info, mtd);
+       int ret = 0;
+       unsigned long tim, limit;
+       if (len <= mtd->oobsize) {
+               omap_write_buf_pref(mtd, buf, len);
+               return;
+       }
+       info->iomode = OMAP_NAND_IO_WRITE;
+       info->buf = (u_char *) buf;
+       init_completion(&info->comp);
+       /* configure and start prefetch transfer : size=24 */
+       ret = gpmc_prefetch_enable(info->gpmc_cs,
+                       (PREFETCH_FIFOTHRESHOLD_MAX * 3) / 8, 0x0, len, 0x1);
+       if (ret)
+               /* PFPW engine is busy, use cpu copy method */
+               goto out_copy;
+       info->buf_len = len;
+       /* enable irq */
+       gpmc_cs_configure(info->gpmc_cs, GPMC_ENABLE_IRQ,
+                       (GPMC_IRQ_FIFOEVENTENABLE | GPMC_IRQ_COUNT_EVENT));
+       /* waiting for write to complete */
+       wait_for_completion(&info->comp);
+       /* wait for data to flushed-out before reset the prefetch */
+       tim = 0;
+       limit = (loops_per_jiffy *  msecs_to_jiffies(OMAP_NAND_TIMEOUT_MS));
+       while (gpmc_read_status(GPMC_PREFETCH_COUNT) && (tim++ < limit))
+               cpu_relax();
+       /* disable and stop the PFPW engine */
+       gpmc_prefetch_reset(info->gpmc_cs);
+       return;
+ out_copy:
+       if (info->nand.options & NAND_BUSWIDTH_16)
+               omap_write_buf16(mtd, buf, len);
+       else
+               omap_write_buf8(mtd, buf, len);
+ }
  /**
   * omap_verify_buf - Verify chip data against buffer
   * @mtd: MTD device structure
@@@ -487,8 -640,6 +640,6 @@@ static int omap_verify_buf(struct mtd_i
        return 0;
  }
  
- #ifdef CONFIG_MTD_NAND_OMAP_HWECC
  /**
   * gen_true_ecc - This function will generate true ECC value
   * @ecc_buf: buffer to store ecc code
@@@ -708,8 -859,6 +859,6 @@@ static void omap_enable_hwecc(struct mt
        gpmc_enable_hwecc(info->gpmc_cs, mode, dev_width, info->nand.ecc.size);
  }
  
- #endif
  /**
   * omap_wait - wait until the command is done
   * @mtd: MTD device structure
@@@ -779,6 -928,7 +928,7 @@@ static int __devinit omap_nand_probe(st
        struct omap_nand_info           *info;
        struct omap_nand_platform_data  *pdata;
        int                             err;
+       int                             i, offset;
  
        pdata = pdev->dev.platform_data;
        if (pdata == NULL) {
        info->mtd.name          = dev_name(&pdev->dev);
        info->mtd.owner         = THIS_MODULE;
  
-       info->nand.options      |= pdata->devsize ? NAND_BUSWIDTH_16 : 0;
+       info->nand.options      = pdata->devsize;
        info->nand.options      |= NAND_SKIP_BBTSCAN;
  
        /* NAND write protect off */
                info->nand.chip_delay = 50;
        }
  
-       if (use_prefetch) {
+       switch (pdata->xfer_type) {
+       case NAND_OMAP_PREFETCH_POLLED:
                info->nand.read_buf   = omap_read_buf_pref;
                info->nand.write_buf  = omap_write_buf_pref;
-               if (use_dma) {
-                       err = omap_request_dma(OMAP24XX_DMA_GPMC, "NAND",
-                               omap_nand_dma_cb, &info->comp, &info->dma_ch);
-                       if (err < 0) {
-                               info->dma_ch = -1;
-                               printk(KERN_WARNING "DMA request failed."
-                                       " Non-dma data transfer mode\n");
-                       } else {
-                               omap_set_dma_dest_burst_mode(info->dma_ch,
-                                               OMAP_DMA_DATA_BURST_16);
-                               omap_set_dma_src_burst_mode(info->dma_ch,
-                                               OMAP_DMA_DATA_BURST_16);
-                               info->nand.read_buf   = omap_read_buf_dma_pref;
-                               info->nand.write_buf  = omap_write_buf_dma_pref;
-                       }
-               }
-       } else {
+               break;
+       case NAND_OMAP_POLLED:
                if (info->nand.options & NAND_BUSWIDTH_16) {
                        info->nand.read_buf   = omap_read_buf16;
                        info->nand.write_buf  = omap_write_buf16;
                        info->nand.read_buf   = omap_read_buf8;
                        info->nand.write_buf  = omap_write_buf8;
                }
+               break;
+       case NAND_OMAP_PREFETCH_DMA:
+               err = omap_request_dma(OMAP24XX_DMA_GPMC, "NAND",
+                               omap_nand_dma_cb, &info->comp, &info->dma_ch);
+               if (err < 0) {
+                       info->dma_ch = -1;
+                       dev_err(&pdev->dev, "DMA request failed!\n");
+                       goto out_release_mem_region;
+               } else {
+                       omap_set_dma_dest_burst_mode(info->dma_ch,
+                                       OMAP_DMA_DATA_BURST_16);
+                       omap_set_dma_src_burst_mode(info->dma_ch,
+                                       OMAP_DMA_DATA_BURST_16);
+                       info->nand.read_buf   = omap_read_buf_dma_pref;
+                       info->nand.write_buf  = omap_write_buf_dma_pref;
+               }
+               break;
+       case NAND_OMAP_PREFETCH_IRQ:
+               err = request_irq(pdata->gpmc_irq,
+                               omap_nand_irq, IRQF_SHARED, "gpmc-nand", info);
+               if (err) {
+                       dev_err(&pdev->dev, "requesting irq(%d) error:%d",
+                                                       pdata->gpmc_irq, err);
+                       goto out_release_mem_region;
+               } else {
+                       info->gpmc_irq       = pdata->gpmc_irq;
+                       info->nand.read_buf  = omap_read_buf_irq_pref;
+                       info->nand.write_buf = omap_write_buf_irq_pref;
+               }
+               break;
+       default:
+               dev_err(&pdev->dev,
+                       "xfer_type(%d) not supported!\n", pdata->xfer_type);
+               err = -EINVAL;
+               goto out_release_mem_region;
        }
-       info->nand.verify_buf = omap_verify_buf;
  
- #ifdef CONFIG_MTD_NAND_OMAP_HWECC
-       info->nand.ecc.bytes            = 3;
-       info->nand.ecc.size             = 512;
-       info->nand.ecc.calculate        = omap_calculate_ecc;
-       info->nand.ecc.hwctl            = omap_enable_hwecc;
-       info->nand.ecc.correct          = omap_correct_data;
-       info->nand.ecc.mode             = NAND_ECC_HW;
+       info->nand.verify_buf = omap_verify_buf;
  
- #else
-       info->nand.ecc.mode = NAND_ECC_SOFT;
- #endif
+       /* selsect the ecc type */
+       if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_DEFAULT)
+               info->nand.ecc.mode = NAND_ECC_SOFT;
+       else if ((pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_HW) ||
+               (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_HW_ROMCODE)) {
+               info->nand.ecc.bytes            = 3;
+               info->nand.ecc.size             = 512;
+               info->nand.ecc.calculate        = omap_calculate_ecc;
+               info->nand.ecc.hwctl            = omap_enable_hwecc;
+               info->nand.ecc.correct          = omap_correct_data;
+               info->nand.ecc.mode             = NAND_ECC_HW;
+       }
  
        /* DIP switches on some boards change between 8 and 16 bit
         * bus widths for flash.  Try the other width if the first try fails.
                }
        }
  
+       /* rom code layout */
+       if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_HW_ROMCODE) {
+               if (info->nand.options & NAND_BUSWIDTH_16)
+                       offset = 2;
+               else {
+                       offset = 1;
+                       info->nand.badblock_pattern = &bb_descrip_flashbased;
+               }
+               omap_oobinfo.eccbytes = 3 * (info->mtd.oobsize/16);
+               for (i = 0; i < omap_oobinfo.eccbytes; i++)
+                       omap_oobinfo.eccpos[i] = i+offset;
+               omap_oobinfo.oobfree->offset = offset + omap_oobinfo.eccbytes;
+               omap_oobinfo.oobfree->length = info->mtd.oobsize -
+                                       (offset + omap_oobinfo.eccbytes);
+               info->nand.ecc.layout = &omap_oobinfo;
+       }
  #ifdef CONFIG_MTD_PARTITIONS
        err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0);
        if (err > 0)
@@@ -926,9 -1122,12 +1122,12 @@@ static int omap_nand_remove(struct plat
                                                        mtd);
  
        platform_set_drvdata(pdev, NULL);
-       if (use_dma)
+       if (info->dma_ch != -1)
                omap_free_dma(info->dma_ch);
  
+       if (info->gpmc_irq)
+               free_irq(info->gpmc_irq, info);
        /* Release NAND device, its internal structures and partitions */
        nand_release(&info->mtd);
        iounmap(info->nand.IO_ADDR_R);
@@@ -947,16 -1146,8 +1146,8 @@@ static struct platform_driver omap_nand
  
  static int __init omap_nand_init(void)
  {
-       printk(KERN_INFO "%s driver initializing\n", DRIVER_NAME);
+       pr_info("%s driver initializing\n", DRIVER_NAME);
  
-       /* This check is required if driver is being
-        * loaded run time as a module
-        */
-       if ((1 == use_dma) && (0 == use_prefetch)) {
-               printk(KERN_INFO"Wrong parameters: 'use_dma' can not be 1 "
-                               "without use_prefetch'. Prefetch will not be"
-                               " used in either mode (mpu or dma)\n");
-       }
        return platform_driver_register(&omap_nand_driver);
  }
  
@@@ -968,6 -1159,6 +1159,6 @@@ static void __exit omap_nand_exit(void
  module_init(omap_nand_init);
  module_exit(omap_nand_exit);
  
 -MODULE_ALIAS(DRIVER_NAME);
 +MODULE_ALIAS("platform:" DRIVER_NAME);
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("Glue layer for NAND flash on TI OMAP boards");
index c849cacf4b2faab2679f1231982f6cb12e0aa192,ec26399e3cf23a6ab41565a397d4c9318c0e7f36..14a49abe057eb4f095d46690e91a132003718f86
@@@ -63,7 -63,7 +63,7 @@@ struct omap2_onenand 
        struct completion dma_done;
        int dma_channel;
        int freq;
-       int (*setup)(void __iomem *base, int freq);
+       int (*setup)(void __iomem *base, int *freq_ptr);
        struct regulator *regulator;
  };
  
@@@ -148,11 -148,9 +148,9 @@@ static int omap2_onenand_wait(struct mt
                        wait_err("controller error", state, ctrl, intr);
                        return -EIO;
                }
-               if ((intr & intr_flags) != intr_flags) {
-                       wait_err("timeout", state, ctrl, intr);
-                       return -EIO;
-               }
-               return 0;
+               if ((intr & intr_flags) == intr_flags)
+                       return 0;
+               /* Continue in wait for interrupt branch */
        }
  
        if (state != FL_READING) {
@@@ -581,7 -579,7 +579,7 @@@ static int __adjust_timing(struct devic
  
        /* DMA is not in use so this is all that is needed */
        /* Revisit for OMAP3! */
-       ret = c->setup(c->onenand.base, c->freq);
+       ret = c->setup(c->onenand.base, &c->freq);
  
        return ret;
  }
@@@ -673,7 -671,7 +671,7 @@@ static int __devinit omap2_onenand_prob
        }
  
        if (pdata->onenand_setup != NULL) {
-               r = pdata->onenand_setup(c->onenand.base, c->freq);
+               r = pdata->onenand_setup(c->onenand.base, &c->freq);
                if (r < 0) {
                        dev_err(&pdev->dev, "Onenand platform setup failed: "
                                "%d\n", r);
        }
  
        dev_info(&pdev->dev, "initializing on CS%d, phys base 0x%08lx, virtual "
-                "base %p\n", c->gpmc_cs, c->phys_base,
-                c->onenand.base);
+                "base %p, freq %d MHz\n", c->gpmc_cs, c->phys_base,
+                c->onenand.base, c->freq);
  
        c->pdev = pdev;
        c->mtd.name = dev_name(&pdev->dev);
        if ((r = onenand_scan(&c->mtd, 1)) < 0)
                goto err_release_regulator;
  
-       switch ((c->onenand.version_id >> 4) & 0xf) {
-       case 0:
-               c->freq = 40;
-               break;
-       case 1:
-               c->freq = 54;
-               break;
-       case 2:
-               c->freq = 66;
-               break;
-       case 3:
-               c->freq = 83;
-               break;
-       case 4:
-               c->freq = 104;
-               break;
-       }
  #ifdef CONFIG_MTD_PARTITIONS
        r = parse_mtd_partitions(&c->mtd, part_probes, &c->parts, 0);
        if (r > 0)
@@@ -860,7 -840,7 +840,7 @@@ static void __exit omap2_onenand_exit(v
  module_init(omap2_onenand_init);
  module_exit(omap2_onenand_exit);
  
 -MODULE_ALIAS(DRIVER_NAME);
 +MODULE_ALIAS("platform:" DRIVER_NAME);
  MODULE_LICENSE("GPL");
  MODULE_AUTHOR("Jarkko Lavinen <jarkko.lavinen@nokia.com>");
  MODULE_DESCRIPTION("Glue layer for OneNAND flash on OMAP2 / OMAP3");
index a914010d9d122a65131af84db45d3e5d2d454cf6,e550f35eff0f7d1be6988c1452ba95fff9c68736..630ae7f3cd4cf1ff9288f38cbca245b504d38629
@@@ -1530,7 -1530,7 +1530,7 @@@ static int __init musb_core_init(u16 mu
  
  /*-------------------------------------------------------------------------*/
  
- #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) || \
+ #if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430) || \
        defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500) || \
        defined(CONFIG_ARCH_U5500)
  
@@@ -1950,6 -1950,31 +1950,6 @@@ musb_init_controller(struct device *dev
                goto fail0;
        }
  
 -      switch (plat->mode) {
 -      case MUSB_HOST:
 -#ifdef CONFIG_USB_MUSB_HDRC_HCD
 -              break;
 -#else
 -              goto bad_config;
 -#endif
 -      case MUSB_PERIPHERAL:
 -#ifdef CONFIG_USB_GADGET_MUSB_HDRC
 -              break;
 -#else
 -              goto bad_config;
 -#endif
 -      case MUSB_OTG:
 -#ifdef CONFIG_USB_MUSB_OTG
 -              break;
 -#else
 -bad_config:
 -#endif
 -      default:
 -              dev_err(dev, "incompatible Kconfig role setting\n");
 -              status = -EINVAL;
 -              goto fail0;
 -      }
 -
        /* allocate */
        musb = allocate_instance(dev, plat->config, ctrl);
        if (!musb) {
                goto fail0;
        }
  
 +      pm_runtime_use_autosuspend(musb->controller);
 +      pm_runtime_set_autosuspend_delay(musb->controller, 200);
 +      pm_runtime_enable(musb->controller);
 +
        spin_lock_init(&musb->lock);
        musb->board_mode = plat->mode;
        musb->board_set_power = plat->set_power;
        if (status < 0)
                goto fail3;
  
 +      pm_runtime_put(musb->controller);
 +
        status = musb_init_debugfs(musb);
        if (status < 0)
                goto fail4;
@@@ -2197,11 -2216,9 +2197,11 @@@ static int __exit musb_remove(struct pl
         *  - Peripheral mode: peripheral is deactivated (or never-activated)
         *  - OTG mode: both roles are deactivated (or never-activated)
         */
 +      pm_runtime_get_sync(musb->controller);
        musb_exit_debugfs(musb);
        musb_shutdown(pdev);
  
 +      pm_runtime_put(musb->controller);
        musb_free(musb);
        iounmap(ctrl_base);
        device_init_wakeup(&pdev->dev, 0);
@@@ -2387,41 -2404,9 +2387,41 @@@ static int musb_resume_noirq(struct dev
        return 0;
  }
  
 +static int musb_runtime_suspend(struct device *dev)
 +{
 +      struct musb     *musb = dev_to_musb(dev);
 +
 +      musb_save_context(musb);
 +
 +      return 0;
 +}
 +
 +static int musb_runtime_resume(struct device *dev)
 +{
 +      struct musb     *musb = dev_to_musb(dev);
 +      static int      first = 1;
 +
 +      /*
 +       * When pm_runtime_get_sync called for the first time in driver
 +       * init,  some of the structure is still not initialized which is
 +       * used in restore function. But clock needs to be
 +       * enabled before any register access, so
 +       * pm_runtime_get_sync has to be called.
 +       * Also context restore without save does not make
 +       * any sense
 +       */
 +      if (!first)
 +              musb_restore_context(musb);
 +      first = 0;
 +
 +      return 0;
 +}
 +
  static const struct dev_pm_ops musb_dev_pm_ops = {
        .suspend        = musb_suspend,
        .resume_noirq   = musb_resume_noirq,
 +      .runtime_suspend = musb_runtime_suspend,
 +      .runtime_resume = musb_runtime_resume,
  };
  
  #define MUSB_DEV_PM_OPS (&musb_dev_pm_ops)
index 4f0dd2ed3964b2e7ce661de0053630609f971076,3fb617ef9e724f0234345c55021d15f86cb82f5c..4bd9e2145ee416dec1cf516538b0597cf94fa08f
@@@ -212,8 -212,8 +212,8 @@@ enum musb_g_ep0_state 
   * directly with the "flat" model, or after setting up an index register.
   */
  
- #if defined(CONFIG_ARCH_DAVINCI) || defined(CONFIG_ARCH_OMAP2430) \
-               || defined(CONFIG_ARCH_OMAP3430) || defined(CONFIG_BLACKFIN) \
+ #if defined(CONFIG_ARCH_DAVINCI) || defined(CONFIG_SOC_OMAP2430) \
+               || defined(CONFIG_SOC_OMAP3430) || defined(CONFIG_BLACKFIN) \
                || defined(CONFIG_ARCH_OMAP4)
  /* REVISIT indexed access seemed to
   * misbehave (on DaVinci) for at least peripheral IN ...
@@@ -328,7 -328,7 +328,7 @@@ struct musb_hw_ep 
  #endif
  };
  
 -static inline struct usb_request *next_in_request(struct musb_hw_ep *hw_ep)
 +static inline struct musb_request *next_in_request(struct musb_hw_ep *hw_ep)
  {
  #ifdef CONFIG_USB_GADGET_MUSB_HDRC
        return next_request(&hw_ep->ep_in);
  #endif
  }
  
 -static inline struct usb_request *next_out_request(struct musb_hw_ep *hw_ep)
 +static inline struct musb_request *next_out_request(struct musb_hw_ep *hw_ep)
  {
  #ifdef CONFIG_USB_GADGET_MUSB_HDRC
        return next_request(&hw_ep->ep_out);
@@@ -358,6 -358,10 +358,6 @@@ struct musb_csr_regs 
  
  struct musb_context_registers {
  
 -#if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_ARCH_OMAP3) || \
 -    defined(CONFIG_ARCH_OMAP4)
 -      u32 otg_sysconfig, otg_forcestandby;
 -#endif
        u8 power;
        u16 intrtxe, intrrxe;
        u8 intrusbe;
diff --combined include/linux/i2c/twl.h
index a4bd05b7bd225787d15a0fa4cbdf36161cb92ad7,9d88b717111acee29d5d203c515f83911b61fffe..58afd9d2c438ea323cc6255c1c87057f85d8bd15
@@@ -600,8 -600,6 +600,8 @@@ struct twl4030_usb_data 
        int             (*phy_power)(struct device *dev, int iD, int on);
        /* enable/disable  phy clocks */
        int             (*phy_set_clock)(struct device *dev, int on);
 +      /* suspend/resume of phy */
 +      int             (*phy_suspend)(struct device *dev, int suspend);
  };
  
  struct twl4030_ins {
@@@ -639,7 -637,6 +639,6 @@@ extern void twl4030_power_init(struct t
  extern int twl4030_remove_script(u8 flags);
  
  struct twl4030_codec_audio_data {
-       unsigned int audio_mclk; /* not used, will be removed */
        unsigned int digimic_delay; /* in ms */
        unsigned int ramp_delay_value;
        unsigned int offset_cncl_path;
  };
  
  struct twl4030_codec_vibra_data {
-       unsigned int    audio_mclk;
        unsigned int    coexist;
  };