Merge branch 'origin' into devel-stable
authorRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 8 Mar 2010 20:21:04 +0000 (20:21 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 8 Mar 2010 20:21:04 +0000 (20:21 +0000)
Conflicts:
arch/arm/mach-mx2/devices.c
arch/arm/mach-mx2/devices.h
sound/soc/pxa/pxa-ssp.c

23 files changed:
1  2 
MAINTAINERS
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/mach-mx2/clock_imx21.c
arch/arm/mach-mx2/clock_imx27.c
arch/arm/mach-mx2/devices.c
arch/arm/mach-mx2/devices.h
arch/arm/mach-mx25/clock.c
arch/arm/mach-mx3/clock-imx31.c
arch/arm/mach-mx3/clock-imx35.c
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-s5pc100/include/mach/vmalloc.h
arch/arm/mach-s5pv210/include/mach/debug-macro.S
arch/arm/plat-mxc/Makefile
arch/arm/plat-mxc/include/mach/debug-macro.S
drivers/Makefile
drivers/mtd/nand/Kconfig
drivers/serial/Kconfig
drivers/serial/imx.c
drivers/sh/intc.c
drivers/usb/gadget/s3c-hsotg.c
sound/soc/pxa/pxa-ssp.c
sound/soc/s3c24xx/s3c64xx-i2s.c

diff --combined MAINTAINERS
index 776a5a46e351931908b3f625fd549b934156d388,c8a8b1fd58b36d751fe31b308c8c76ba721cab0f..bd8ac1ebc65b73c48186006259ecab78ba5d6cc6
@@@ -71,6 -71,7 +71,7 @@@ Descriptions of section entries
        M: Mail patches to: FullName <address@domain>
        L: Mailing list that is relevant to this area
        W: Web-page with status/info
+       Q: Patchwork web based patch tracking system site
        T: SCM tree type and location.  Type is one of: git, hg, quilt, stgit.
        S: Status, one of the following:
           Supported:   Someone is actually paid to look after this.
@@@ -182,6 -183,7 +183,7 @@@ M: Ron Minnich <rminnich@sandia.gov
  M:    Latchesar Ionkov <lucho@ionkov.net>
  L:    v9fs-developer@lists.sourceforge.net
  W:    http://swik.net/v9fs
+ Q:    http://patchwork.kernel.org/project/v9fs-devel/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git
  S:    Maintained
  F:    Documentation/filesystems/9p.txt
@@@ -221,6 -223,7 +223,7 @@@ F: drivers/net/acenic
  
  ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
  M:    Peter Feuerer <peter@piie.net>
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://piie.net/?section=acerhdf
  S:    Maintained
  F:    drivers/platform/x86/acerhdf.c
  ACER WMI LAPTOP EXTRAS
  M:    Carlos Corbacho <carlos@strangeworlds.co.uk>
  L:    aceracpi@googlegroups.com (subscribers-only)
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://code.google.com/p/aceracpi
  S:    Maintained
  F:    drivers/platform/x86/acer-wmi.c
@@@ -236,6 -240,7 +240,7 @@@ ACP
  M:    Len Brown <lenb@kernel.org>
  L:    linux-acpi@vger.kernel.org
  W:    http://www.lesswatts.org/projects/acpi/
+ Q:    http://patchwork.kernel.org/project/linux-acpi/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
  S:    Supported
  F:    drivers/acpi/
@@@ -288,7 -293,7 +293,7 @@@ F: drivers/acpi/video.
  
  ACPI WMI DRIVER
  M:    Carlos Corbacho <carlos@strangeworlds.co.uk>
- L:    linux-acpi@vger.kernel.org
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://www.lesswatts.org/projects/acpi/
  S:    Maintained
  F:    drivers/platform/x86/wmi.c
@@@ -426,7 -431,6 +431,6 @@@ P: Jordan Crous
  L:    linux-geode@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
  S:    Supported
- F:    arch/x86/kernel/geode_32.c
  F:    drivers/char/hw_random/geode-rng.c
  F:    drivers/crypto/geode*
  F:    drivers/video/geode/
@@@ -662,12 -666,6 +666,12 @@@ T:       git://git.pengutronix.de/git/imx/lin
  F:    arch/arm/mach-mx*/
  F:    arch/arm/plat-mxc/
  
 +ARM/FREESCALE IMX51
 +M:    Amit Kucheria <amit.kucheria@canonical.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-mx5/
 +
  ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -941,16 -939,6 +945,16 @@@ W:       http://www.fluff.org/ben/linux
  S:    Maintained
  F:    arch/arm/mach-s3c6410/
  
 +ARM/SHMOBILE ARM ARCHITECTURE
 +M:    Paul Mundt <lethal@linux-sh.org>
 +M:    Magnus Damm <magnus.damm@gmail.com>
 +L:    linux-sh@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
 +W:    http://oss.renesas.com
 +S:    Supported
 +F:    arch/arm/mach-shmobile/
 +F:    drivers/sh/
 +
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -980,10 -968,18 +984,18 @@@ W:      http://www.arm.linux.org.uk
  S:    Maintained
  F:    arch/arm/vfp/
  
+ ASC7621 HARDWARE MONITOR DRIVER
+ M:    George Joseph <george.joseph@fairview5.com>
+ L:    lm-sensors@lm-sensors.org
+ S:    Maintained
+ F:    Documentation/hwmon/asc7621
+ F:    drivers/hwmon/asc7621.c
  ASUS ACPI EXTRAS DRIVER
  M:    Corentin Chary <corentincj@iksaif.net>
  M:    Karol Kozimor <sziwan@users.sourceforge.net>
  L:    acpi4asus-user@lists.sourceforge.net
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://acpi4asus.sf.net
  S:    Maintained
  F:    drivers/platform/x86/asus_acpi.c
@@@ -997,6 -993,7 +1009,7 @@@ F:        drivers/hwmon/asb100.
  ASUS LAPTOP EXTRAS DRIVER
  M:    Corentin Chary <corentincj@iksaif.net>
  L:    acpi4asus-user@lists.sourceforge.net
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://acpi4asus.sf.net
  S:    Maintained
  F:    drivers/platform/x86/asus-laptop.c
@@@ -1344,6 -1341,7 +1357,7 @@@ BTRFS FILE SYSTE
  M:    Chris Mason <chris.mason@oracle.com>
  L:    linux-btrfs@vger.kernel.org
  W:    http://btrfs.wiki.kernel.org/
+ Q:    http://patchwork.kernel.org/project/linux-btrfs/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git
  S:    Maintained
  F:    Documentation/filesystems/btrfs.txt
@@@ -1489,6 -1487,7 +1503,7 @@@ F:      drivers/scsi/fnic
  CMPC ACPI DRIVER
  M:    Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
  M:    Daniel Oliveira Nascimento <don@syst.com.br>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Supported
  F:    drivers/platform/x86/classmate-laptop.c
  
@@@ -1507,6 -1506,7 +1522,7 @@@ M:      Steve French <sfrench@samba.org
  L:    linux-cifs-client@lists.samba.org (moderated for non-subscribers)
  L:    samba-technical@lists.samba.org (moderated for non-subscribers)
  W:    http://linux-cifs.samba.org/
+ Q:    http://patchwork.ozlabs.org/project/linux-cifs-client/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
  S:    Supported
  F:    Documentation/filesystems/cifs.txt
@@@ -1532,6 -1532,7 +1548,7 @@@ F:      drivers/pci/hotplug/cpcihp_generic.
  
  COMPAL LAPTOP SUPPORT
  M:    Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/compal-laptop.c
  
@@@ -1749,10 -1750,9 +1766,9 @@@ F:     include/linux/tfrc.
  F:    net/dccp/
  
  DECnet NETWORK LAYER
- M:    Christine Caulfield <christine.caulfield@googlemail.com>
  W:    http://linux-decnet.sourceforge.net
  L:    linux-decnet-user@lists.sourceforge.net
- S:    Maintained
+ S:    Orphan
  F:    Documentation/networking/decnet.txt
  F:    net/decnet/
  
@@@ -1763,6 -1763,7 +1779,7 @@@ F:      drivers/net/defxx.
  
  DELL LAPTOP DRIVER
  M:    Matthew Garrett <mjg59@srcf.ucam.org>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell-laptop.c
  
@@@ -1792,6 -1793,7 +1809,7 @@@ DEVICE-MAPPER  (LVM
  P:    Alasdair Kergon
  L:    dm-devel@redhat.com
  W:    http://sources.redhat.com/dm
+ Q:    http://patchwork.kernel.org/project/dm-devel/list/
  S:    Maintained
  F:    Documentation/device-mapper/
  F:    drivers/md/dm*
@@@ -2045,6 -2047,7 +2063,7 @@@ F:      drivers/edac/r82600_edac.
  EEEPC LAPTOP EXTRAS DRIVER
  M:    Corentin Chary <corentincj@iksaif.net>
  L:    acpi4asus-user@lists.sourceforge.net
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://acpi4asus.sf.net
  S:    Maintained
  F:    drivers/platform/x86/eeepc-laptop.c
@@@ -2135,6 -2138,7 +2154,7 @@@ M:      "Theodore Ts'o" <tytso@mit.edu
  M:    Andreas Dilger <adilger@sun.com>
  L:    linux-ext4@vger.kernel.org
  W:    http://ext4.wiki.kernel.org
+ Q:    http://patchwork.ozlabs.org/project/linux-ext4/list/
  S:    Maintained
  F:    Documentation/filesystems/ext4.txt
  F:    fs/ext4/
@@@ -2158,6 -2162,17 +2178,17 @@@ S:    Supporte
  F:    Documentation/fault-injection/
  F:    lib/fault-inject.c
  
+ FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
+ M:    Robert Love <robert.w.love@intel.com>
+ L:    devel@open-fcoe.org
+ W:    www.Open-FCoE.org
+ S:    Supported
+ F:    drivers/scsi/libfc/
+ F:    drivers/scsi/fcoe/
+ F:    include/scsi/fc/
+ F:    include/scsi/libfc.h
+ F:    include/scsi/libfcoe.h
  FILE LOCKING (flock() and fcntl()/lockf())
  M:    Matthew Wilcox <matthew@wil.cx>
  L:    linux-fsdevel@vger.kernel.org
@@@ -2312,7 -2327,7 +2343,7 @@@ F:      arch/frv
  
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
- L:    linux-acpi@vger.kernel.org
+ L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/fujitsu-laptop.c
  
@@@ -2389,6 -2404,12 +2420,12 @@@ F:    Documentation/isdn/README.gigase
  F:    drivers/isdn/gigaset/
  F:    include/linux/gigaset_dev.h
  
+ GRETH 10/100/1G Ethernet MAC device driver
+ M:    Kristoffer Glembo <kristoffer@gaisler.com>
+ L:    netdev@vger.kernel.org
+ S:    Maintained
+ F:    drivers/net/greth*
  HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
  M:    Frank Seidel <frank@f-seidel.de>
  L:    lm-sensors@lm-sensors.org
@@@ -2410,6 -2431,18 +2447,18 @@@ L:    linuxppc-dev@ozlabs.or
  S:    Odd Fixes
  F:    drivers/char/hvc_*
  
+ VIRTIO CONSOLE DRIVER
+ M:    Amit Shah <amit.shah@redhat.com>
+ L:    virtualization@lists.linux-foundation.org
+ S:    Maintained
+ F:    drivers/char/virtio_console.c
+ iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
+ M:    Peter Jones <pjones@redhat.com>
+ M:    Konrad Rzeszutek Wilk <konrad@kernel.org>
+ S:    Maintained
+ F:    drivers/firmware/iscsi_ibft*
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
  L:    linux-media@vger.kernel.org
@@@ -2482,13 -2515,6 +2531,6 @@@ L:     linux-parisc@vger.kernel.or
  S:    Maintained
  F:    sound/parisc/harmony.*
  
- HAYES ESP SERIAL DRIVER
- M:    "Andrew J. Robinson" <arobinso@nyx.net>
- W:    http://www.nyx.net/~arobinso
- S:    Maintained
- F:    Documentation/serial/hayes-esp.txt
- F:    drivers/char/esp.c
  HEWLETT-PACKARD SMART2 RAID DRIVER
  M:    Chirag Kantharia <chirag.kantharia@hp.com>
  L:    iss_storagedev@hp.com
@@@ -2578,6 -2604,7 +2620,7 @@@ F:      drivers/net/wireless/hostap
  
  HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
  M:    Carlos Corbacho <carlos@strangeworlds.co.uk>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Odd Fixes
  F:    drivers/platform/x86/tc1100-wmi.c
  
@@@ -2696,6 -2723,7 +2739,7 @@@ F:      drivers/scsi/ips.
  IDE SUBSYSTEM
  M:    "David S. Miller" <davem@davemloft.net>
  L:    linux-ide@vger.kernel.org
+ Q:    http://patchwork.ozlabs.org/project/linux-ide/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6.git
  S:    Maintained
  F:    Documentation/ide/
@@@ -2750,6 -2778,7 +2794,7 @@@ M:      Sean Hefty <sean.hefty@intel.com
  M:    Hal Rosenstock <hal.rosenstock@gmail.com>
  L:    linux-rdma@vger.kernel.org
  W:    http://www.openib.org/
+ Q:    http://patchwork.kernel.org/project/linux-rdma/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
  S:    Supported
  F:    Documentation/infiniband/
@@@ -2769,6 -2798,7 +2814,7 @@@ INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCH
  M:    Dmitry Torokhov <dmitry.torokhov@gmail.com>
  M:    Dmitry Torokhov <dtor@mail.ru>
  L:    linux-input@vger.kernel.org
+ Q:    http://patchwork.kernel.org/project/linux-input/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git
  S:    Maintained
  F:    drivers/input/
@@@ -2788,7 -2818,7 +2834,7 @@@ F:      drivers/video/i810
  
  INTEL MENLOW THERMAL DRIVER
  M:    Sujith Thomas <sujith.thomas@intel.com>
- L:    linux-acpi@vger.kernel.org
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://www.lesswatts.org/projects/acpi/
  S:    Supported
  F:    drivers/platform/x86/intel_menlow.c
@@@ -3025,6 -3055,13 +3071,13 @@@ W:    http://www.melware.d
  S:    Maintained
  F:    drivers/isdn/hardware/eicon/
  
+ IT87 HARDWARE MONITORING DRIVER
+ M:    Jean Delvare <khali@linux-fr.org>
+ L:    lm-sensors@lm-sensors.org
+ S:    Maintained
+ F:    Documentation/hwmon/it87
+ F:    drivers/hwmon/it87.c
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@radix.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
@@@ -3078,6 -3115,7 +3131,7 @@@ F:      drivers/hwmon/k8temp.
  KCONFIG
  M:    Roman Zippel <zippel@linux-m68k.org>
  L:    linux-kbuild@vger.kernel.org
+ Q:    http://patchwork.kernel.org/project/linux-kbuild/list/
  S:    Maintained
  F:    Documentation/kbuild/kconfig-language.txt
  F:    scripts/kconfig/
@@@ -3152,7 -3190,7 +3206,7 @@@ F:      arch/x86/include/asm/svm.
  F:    arch/x86/kvm/svm.c
  
  KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
- M:    Hollis Blanchard <hollisb@us.ibm.com>
+ M:    Alexander Graf <agraf@suse.de>
  L:    kvm-ppc@vger.kernel.org
  W:    http://kvm.qumranet.com
  S:    Supported
@@@ -3291,6 -3329,7 +3345,7 @@@ M:      Benjamin Herrenschmidt <benh@kernel.
  M:    Paul Mackerras <paulus@samba.org>
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@ozlabs.org
+ Q:    http://patchwork.ozlabs.org/project/linuxppc-dev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
  S:    Supported
  F:    Documentation/powerpc/
@@@ -3411,6 -3450,13 +3466,13 @@@ S:    Maintaine
  F:    Documentation/ldm.txt
  F:    fs/partitions/ldm.*
  
+ LogFS
+ M:    Joern Engel <joern@logfs.org>
+ L:    logfs@logfs.org
+ W:    logfs.org
+ S:    Maintained
+ F:    fs/logfs/
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
  M:    Eric Moore <Eric.Moore@lsi.com>
  M:    support@lsi.com
@@@ -3506,16 -3552,16 +3568,16 @@@ S:   Maintaine
  F:    drivers/net/wireless/libertas/
  
  MARVELL MV643XX ETHERNET DRIVER
- M:    Lennert Buytenhek <buytenh@marvell.com>
+ M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    netdev@vger.kernel.org
- S:    Supported
+ S:    Maintained
  F:    drivers/net/mv643xx_eth.*
  F:    include/linux/mv643xx.h
  
  MARVELL MWL8K WIRELESS DRIVER
- M:    Lennert Buytenhek <buytenh@marvell.com>
+ M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    linux-wireless@vger.kernel.org
- S:    Supported
+ S:    Maintained
  F:    drivers/net/wireless/mwl8k.c
  
  MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
@@@ -3547,6 -3593,7 +3609,7 @@@ M:      Mauro Carvalho Chehab <mchehab@infra
  P:    LinuxTV.org Project
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
+ Q:    http://patchwork.kernel.org/project/linux-media/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
  S:    Maintained
  F:    Documentation/dvb/
@@@ -3582,8 -3629,9 +3645,9 @@@ F:      mm/memcontrol.
  
  MEMORY TECHNOLOGY DEVICES (MTD)
  M:    David Woodhouse <dwmw2@infradead.org>
- W:    http://www.linux-mtd.infradead.org/
  L:    linux-mtd@lists.infradead.org
+ W:    http://www.linux-mtd.infradead.org/
+ Q:    http://patchwork.ozlabs.org/project/linux-mtd/list/
  T:    git git://git.infradead.org/mtd-2.6.git
  S:    Maintained
  F:    drivers/mtd/
@@@ -3654,6 -3702,7 +3718,7 @@@ F:      drivers/char/mxser.
  
  MSI LAPTOP SUPPORT
  M:    Lennart Poettering <mzxreary@0pointer.de>
+ L:    platform-driver-x86@vger.kernel.org
  W:    https://tango.0pointer.de/mailman/listinfo/s270-linux
  W:    http://0pointer.de/lennart/tchibo.html
  S:    Maintained
@@@ -3661,6 -3710,7 +3726,7 @@@ F:      drivers/platform/x86/msi-laptop.
  
  MSI WMI SUPPORT
  M:    Anisse Astier <anisse@astier.eu>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Supported
  F:    drivers/platform/x86/msi-wmi.c
  
@@@ -3841,6 -3891,7 +3907,7 @@@ S:      Maintaine
  NETWORKING [WIRELESS]
  M:    "John W. Linville" <linville@tuxdriver.com>
  L:    linux-wireless@vger.kernel.org
+ Q:    http://patchwork.kernel.org/project/linux-wireless/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
  S:    Maintained
  F:    net/mac80211/
@@@ -3933,6 -3984,7 +4000,7 @@@ M:      Tony Lindgren <tony@atomide.com
  L:    linux-omap@vger.kernel.org
  W:    http://www.muru.com/linux/omap/
  W:    http://linux.omap.com/
+ Q:    http://patchwork.kernel.org/project/linux-omap/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
  S:    Maintained
  F:    arch/arm/*omap*/
@@@ -4113,6 -4165,7 +4181,7 @@@ F:      drivers/i2c/busses/i2c-pasemi.
  
  PANASONIC LAPTOP ACPI EXTRAS DRIVER
  M:    Harald Welte <laforge@gnumonks.org>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/panasonic-laptop.c
  
@@@ -4158,6 -4211,7 +4227,7 @@@ M:      Helge Deller <deller@gmx.de
  M:    "James E.J. Bottomley" <jejb@parisc-linux.org>
  L:    linux-parisc@vger.kernel.org
  W:    http://www.parisc-linux.org/
+ Q:    http://patchwork.kernel.org/project/linux-parisc/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
  S:    Maintained
  F:    arch/parisc/
@@@ -4200,6 -4254,7 +4270,7 @@@ F:      Documentation/powerpc/eeh-pci-error-
  PCI SUBSYSTEM
  M:    Jesse Barnes <jbarnes@virtuousgeek.org>
  L:    linux-pci@vger.kernel.org
+ Q:    http://patchwork.kernel.org/project/linux-pci/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git
  S:    Supported
  F:    Documentation/PCI/
@@@ -4241,7 -4296,9 +4312,9 @@@ M:      Ingo Molnar <mingo@elte.hu
  S:    Supported
  F:    kernel/perf_event.c
  F:    include/linux/perf_event.h
- F:    arch/*/*/kernel/perf_event.c
+ F:    arch/*/kernel/perf_event.c
+ F:    arch/*/kernel/*/perf_event.c
+ F:    arch/*/kernel/*/*/perf_event.c
  F:    arch/*/include/asm/perf_event.h
  F:    arch/*/lib/perf_event.c
  F:    arch/*/kernel/perf_callchain.c
@@@ -4438,13 -4495,6 +4511,13 @@@ L:    linux-arm-kernel@lists.infradead.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
  S:    Maintained
  
 +MMP2 SUPPORT (aka ARMADA610)
 +M:    Haojian Zhuang <haojian.zhuang@marvell.com>
 +M:    Eric Miao <eric.y.miao@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 +S:    Maintained
 +
  PXA MMCI DRIVER
  S:    Orphan
  
@@@ -4469,6 -4519,13 +4542,13 @@@ S:    Supporte
  F:    Documentation/networking/LICENSE.qla3xxx
  F:    drivers/net/qla3xxx.*
  
+ QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
+ M:    Amit Kumar Salecha <amit.salecha@qlogic.com>
+ M:    linux-driver@qlogic.com
+ L:    netdev@vger.kernel.org
+ S:    Supported
+ F:    drivers/net/qlcnic/
  QLOGIC QLGE 10Gb ETHERNET DRIVER
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
@@@ -4533,7 -4590,7 +4613,7 @@@ F:      drivers/net/wireless/ray
  RCUTORTURE MODULE
  M:    Josh Triplett <josh@freedesktop.org>
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
- S:    Maintained
+ S:    Supported
  F:    Documentation/RCU/torture.txt
  F:    kernel/rcutorture.c
  
@@@ -4558,11 -4615,12 +4638,12 @@@ M:   Dipankar Sarma <dipankar@in.ibm.com
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
  W:    http://www.rdrop.com/users/paulmck/rclock/
  S:    Supported
- F:    Documentation/RCU/rcu.txt
- F:    Documentation/RCU/rcuref.txt
- F:    include/linux/rcupdate.h
- F:    include/linux/srcu.h
- F:    kernel/rcupdate.c
+ F:    Documentation/RCU/
+ F:    include/linux/rcu*
+ F:    include/linux/srcu*
+ F:    kernel/rcu*
+ F:    kernel/srcu*
+ X:    kernel/rcutorture.c
  
  REAL TIME CLOCK DRIVER
  M:    Paul Gortmaker <p_gortmaker@yahoo.com>
@@@ -4574,6 -4632,7 +4655,7 @@@ F:      include/linux/rtc.
  REAL TIME CLOCK (RTC) SUBSYSTEM
  M:    Alessandro Zummo <a.zummo@towertech.it>
  L:    rtc-linux@googlegroups.com
+ Q:    http://patchwork.ozlabs.org/project/rtc-linux/list/
  S:    Maintained
  F:    Documentation/rtc.txt
  F:    drivers/rtc/
@@@ -4700,6 -4759,13 +4782,13 @@@ F:    drivers/media/common/saa7146
  F:    drivers/media/video/*7146*
  F:    include/media/*7146*
  
+ TLG2300 VIDEO4LINUX-2 DRIVER
+ M:    Huang Shijie <shijie8@gmail.com>
+ M:    Kang Yong <kangyong@telegent.com>
+ M:    Zhang Xiaobing <xbzhang@telegent.com>
+ S:    Supported
+ F:    drivers/media/video/tlg2300
  SC1200 WDT DRIVER
  M:    Zwane Mwaikambo <zwane@arm.linux.org.uk>
  S:    Maintained
@@@ -4855,6 -4921,8 +4944,8 @@@ F:      drivers/scsi/be2iscsi
  SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
  M:    Sathya Perla <sathyap@serverengines.com>
  M:    Subbu Seetharaman <subbus@serverengines.com>
+ M:    Sarveshwar Bandi <sarveshwarb@serverengines.com>
+ M:    Ajit Khaparde <ajitk@serverengines.com>
  L:    netdev@vger.kernel.org
  W:    http://www.serverengines.com
  S:    Supported
@@@ -4932,6 -5000,7 +5023,7 @@@ F:      drivers/*/*/*s3c2410
  TI DAVINCI MACHINE SUPPORT
  P:    Kevin Hilman
  M:    davinci-linux-open-source@linux.davincidsp.com
+ Q:    http://patchwork.kernel.org/project/linux-davinci/list/
  S:    Supported
  F:    arch/arm/mach-davinci
  
@@@ -5058,7 -5127,7 +5150,7 @@@ F:      include/linux/ssb
  
  SONY VAIO CONTROL DEVICE DRIVER
  M:    Mattia Dongili <malattia@linux.it>
- L:    linux-acpi@vger.kernel.org
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
  S:    Maintained
  F:    Documentation/laptops/sony-laptop.txt
@@@ -5097,6 -5166,7 +5189,7 @@@ F:      include/sound/soc
  SPARC + UltraSPARC (sparc/sparc64)
  M:    "David S. Miller" <davem@davemloft.net>
  L:    sparclinux@vger.kernel.org
+ Q:    http://patchwork.ozlabs.org/project/sparclinux/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
  S:    Maintained
@@@ -5112,6 -5182,7 +5205,7 @@@ SPI SUBSYSTE
  M:    David Brownell <dbrownell@users.sourceforge.net>
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    spi-devel-general@lists.sourceforge.net
+ Q:    http://patchwork.kernel.org/project/spi-devel-general/list/
  S:    Maintained
  F:    Documentation/spi/
  F:    drivers/spi/
@@@ -5167,7 -5238,7 +5261,7 @@@ F:      drivers/net/starfire
  
  STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
  S:    Orphan
- F:    drivers/net/wireless/strip.c
+ F:    drivers/staging/strip/strip.c
  F:    include/linux/if_strip.h
  
  STRADIS MPEG-2 DECODER DRIVER
@@@ -5188,6 -5259,7 +5282,7 @@@ SUPER
  M:    Paul Mundt <lethal@linux-sh.org>
  L:    linux-sh@vger.kernel.org
  W:    http://www.linux-sh.org
+ Q:    http://patchwork.kernel.org/project/linux-sh/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git
  S:    Supported
  F:    Documentation/sh/
@@@ -5264,6 -5336,7 +5359,7 @@@ F:      arch/xtensa
  THINKPAD ACPI EXTRAS DRIVER
  M:    Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
  L:    ibm-acpi-devel@lists.sourceforge.net
+ L:    platform-driver-x86@vger.kernel.org
  W:    http://ibm-acpi.sourceforge.net
  W:    http://thinkwiki.org/wiki/Ibm-acpi
  T:    git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
@@@ -5317,10 -5390,12 +5413,12 @@@ F:   security/tomoyo
  
  TOPSTAR LAPTOP EXTRAS DRIVER
  M:    Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+ L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/topstar-laptop.c
  
  TOSHIBA ACPI EXTRAS DRIVER
+ L:    platform-driver-x86@vger.kernel.org
  S:    Orphan
  F:    drivers/platform/x86/toshiba_acpi.c
  
@@@ -5820,6 -5895,15 +5918,15 @@@ S:    Maintaine
  F:    Documentation/filesystems/vfat.txt
  F:    fs/fat/
  
+ VIRTIO HOST (VHOST)
+ M:    "Michael S. Tsirkin" <mst@redhat.com>
+ L:    kvm@vger.kernel.org
+ L:    virtualization@lists.osdl.org
+ L:    netdev@vger.kernel.org
+ S:    Maintained
+ F:    drivers/vhost/
+ F:    include/linux/vhost.h
  VIA RHINE NETWORK DRIVER
  M:    Roger Luethi <rl@hellgate.ch>
  S:    Maintained
@@@ -5943,7 -6027,7 +6050,7 @@@ L:      linux-wireless@vger.kernel.or
  W:    http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
  S:    Maintained
  F:    Documentation/networking/wavelan.txt
- F:    drivers/net/wireless/wavelan*
+ F:    drivers/staging/wavelan/
  
  WD7000 SCSI DRIVER
  M:    Miroslav Zagorac <zaga@fly.cc.fer.hr>
@@@ -5978,7 -6062,7 +6085,7 @@@ S:      Maintaine
  F:    drivers/input/misc/wistron_btns.c
  
  WL1251 WIRELESS DRIVER
- M:    Kalle Valo <kalle.valo@nokia.com>
+ M:    Kalle Valo <kalle.valo@iki.fi>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
@@@ -6048,6 -6132,13 +6155,13 @@@ S:    Maintaine
  F:    Documentation/x86/
  F:    arch/x86/
  
+ X86 PLATFORM DRIVERS
+ M:    Matthew Garrett <mjg@redhat.com>
+ L:    platform-driver-x86@vger.kernel.org
+ T:      git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
+ S:    Maintained
+ F:    drivers/platform/x86
  XEN HYPERVISOR INTERFACE
  M:    Jeremy Fitzhardinge <jeremy@xensource.com>
  M:    Chris Wright <chrisw@sous-sol.org>
@@@ -6132,6 -6223,7 +6246,7 @@@ F:      drivers/serial/zs.
  THE REST
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
+ Q:    http://patchwork.kernel.org/project/LKML/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
  S:    Buried alive in reporters
  F:    *
diff --combined arch/arm/Kconfig
index 14b03684ba8681c880925aa351a75049f2ec1256,3b181284970f6e970b76bdd653882df90eb17b01..e12d700d985a8f826ccd6feedc427a4e25cb9c31
@@@ -12,6 -12,7 +12,7 @@@ config AR
        select HAVE_IDE
        select RTC_LIB
        select SYS_SUPPORTS_APM_EMULATION
+       select GENERIC_ATOMIC64 if (!CPU_32v6K)
        select HAVE_OPROFILE
        select HAVE_ARCH_KGDB
        select HAVE_KPROBES if (!XIP_KERNEL)
@@@ -20,6 -21,8 +21,8 @@@
        select HAVE_GENERIC_DMA_COHERENT
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_LZO
+       select HAVE_PERF_EVENTS
+       select PERF_USE_VMALLOC
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -52,6 -55,9 +55,9 @@@ config HAVE_TC
        bool
        select GENERIC_ALLOCATOR
  
+ config HAVE_PROC_CPU
+       bool
  config NO_IOPORT
        bool
  
@@@ -161,6 -167,11 +167,11 @@@ config ARCH_MTD_XI
  config GENERIC_HARDIRQS_NO__DO_IRQ
        def_bool y
  
+ config ARM_L1_CACHE_SHIFT_6
+       bool
+       help
+         Setting ARM L1 cache line size to 64 Bytes.
  if OPROFILE
  
  config OPROFILE_ARMV6
@@@ -310,9 -321,10 +321,9 @@@ config ARCH_MX
        bool "Freescale MXC/iMX-based"
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
 -      select ARCH_MTD_XIP
 -      select GENERIC_GPIO
        select ARCH_REQUIRE_GPIOLIB
        select HAVE_CLK
 +      select COMMON_CLKDEV
        help
          Support for Freescale MXC/iMX-based family of processors
  
@@@ -496,7 -508,7 +507,7 @@@ config ARCH_ORION5
          Orion-2 (5281), Orion-1-90 (6183).
  
  config ARCH_MMP
 -      bool "Marvell PXA168/910"
 +      bool "Marvell PXA168/910/MMP2"
        depends on MMU
        select GENERIC_GPIO
        select ARCH_REQUIRE_GPIOLIB
        select TICK_ONESHOT
        select PLAT_PXA
        help
 -        Support for Marvell's PXA168/910 processor line.
 +        Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.
  
  config ARCH_KS8695
        bool "Micrel/Kendin KS8695"
@@@ -549,10 -561,20 +560,20 @@@ config ARCH_W90X90
          <http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/
                ConsumerElectronicsIC/ARMMicrocontroller/ARMMicrocontroller>
  
+ config ARCH_NUC93X
+       bool "Nuvoton NUC93X CPU"
+       select CPU_ARM926T
+       select HAVE_CLK
+       select COMMON_CLKDEV
+       help
+         Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a
+         low-power and high performance MPEG-4/JPEG multimedia controller chip.
  config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
        select CPU_ARM926T
        select HAVE_CLK
+       select COMMON_CLKDEV
        help
          This enables support for Philips PNX4008 mobile platform.
  
@@@ -583,11 -605,6 +604,11 @@@ config ARCH_MS
          interface to the ARM9 modem processor which runs the baseband stack
          and controls some vital subsystems (clock and power control, etc).
  
 +config ARCH_SHMOBILE
 +      bool "Renesas SH-Mobile"
 +      help
 +        Support for Renesas's SH-Mobile ARM platforms
 +
  config ARCH_RPC
        bool "RiscPC"
        select ARCH_ACORN
@@@ -631,60 -648,21 +652,61 @@@ config ARCH_S3C241
  
  config ARCH_S3C64XX
        bool "Samsung S3C64XX"
 +      select PLAT_SAMSUNG
 +      select CPU_V6
        select GENERIC_GPIO
 +      select ARM_VIC
        select HAVE_CLK
 +      select NO_IOPORT
        select ARCH_HAS_CPUFREQ
 +      select ARCH_REQUIRE_GPIOLIB
 +      select SAMSUNG_CLKSRC
 +      select SAMSUNG_IRQ_VIC_TIMER
 +      select SAMSUNG_IRQ_UART
 +      select S3C_GPIO_TRACK
 +      select S3C_GPIO_PULL_UPDOWN
 +      select S3C_GPIO_CFG_S3C24XX
 +      select S3C_GPIO_CFG_S3C64XX
 +      select S3C_DEV_NAND
 +      select USB_ARCH_HAS_OHCI
 +      select SAMSUNG_GPIOLIB_4BIT
        help
          Samsung S3C64XX series based systems
  
 +config ARCH_S5P6440
 +      bool "Samsung S5P6440"
 +      select CPU_V6
 +      select GENERIC_GPIO
 +      select HAVE_CLK
 +      help
 +        Samsung S5P6440 CPU based systems
 +
 +config ARCH_S5P6442
 +      bool "Samsung S5P6442"
 +      select CPU_V6
 +      select GENERIC_GPIO
 +      select HAVE_CLK
 +      help
 +        Samsung S5P6442 CPU based systems
 +
  config ARCH_S5PC1XX
        bool "Samsung S5PC1XX"
        select GENERIC_GPIO
        select HAVE_CLK
        select CPU_V7
+       select ARM_L1_CACHE_SHIFT_6
        help
          Samsung S5PC1XX series based systems
  
 +config ARCH_S5PV210
 +      bool "Samsung S5PV210/S5PC110"
 +      select CPU_V7
 +      select GENERIC_GPIO
 +      select HAVE_CLK
 +      select ARM_L1_CACHE_SHIFT_6
 +      help
 +        Samsung S5PV210/S5PC110 series based systems
 +
  config ARCH_SHARK
        bool "Shark"
        select CPU_SA110
@@@ -829,6 -807,8 +851,8 @@@ source "arch/arm/plat-nomadik/Kconfig
  
  source "arch/arm/mach-ns9xxx/Kconfig"
  
+ source "arch/arm/mach-nuc93x/Kconfig"
  source "arch/arm/plat-omap/Kconfig"
  
  source "arch/arm/mach-omap1/Kconfig"
@@@ -848,7 -828,8 +872,7 @@@ source "arch/arm/mach-sa1100/Kconfig
  
  source "arch/arm/plat-samsung/Kconfig"
  source "arch/arm/plat-s3c24xx/Kconfig"
 -source "arch/arm/plat-s3c64xx/Kconfig"
 -source "arch/arm/plat-s3c/Kconfig"
 +source "arch/arm/plat-s5p/Kconfig"
  source "arch/arm/plat-s5pc1xx/Kconfig"
  
  if ARCH_S3C2410
@@@ -856,27 -837,21 +880,27 @@@ source "arch/arm/mach-s3c2400/Kconfig
  source "arch/arm/mach-s3c2410/Kconfig"
  source "arch/arm/mach-s3c2412/Kconfig"
  source "arch/arm/mach-s3c2440/Kconfig"
 -source "arch/arm/mach-s3c2442/Kconfig"
  source "arch/arm/mach-s3c2443/Kconfig"
  endif
  
  if ARCH_S3C64XX
 -source "arch/arm/mach-s3c6400/Kconfig"
 -source "arch/arm/mach-s3c6410/Kconfig"
 +source "arch/arm/mach-s3c64xx/Kconfig"
  endif
  
 -source "arch/arm/plat-stmp3xxx/Kconfig"
 +source "arch/arm/mach-s5p6440/Kconfig"
 +
 +source "arch/arm/mach-s5p6442/Kconfig"
  
  if ARCH_S5PC1XX
  source "arch/arm/mach-s5pc100/Kconfig"
  endif
  
 +source "arch/arm/mach-s5pv210/Kconfig"
 +
 +source "arch/arm/mach-shmobile/Kconfig"
 +
 +source "arch/arm/plat-stmp3xxx/Kconfig"
 +
  source "arch/arm/mach-u300/Kconfig"
  
  source "arch/arm/mach-ux500/Kconfig"
@@@ -916,6 -891,11 +940,11 @@@ config XSCALE_PM
        depends on CPU_XSCALE && !XSCALE_PMU_TIMER
        default y
  
+ config CPU_HAS_PMU
+       depends on CPU_V6 || CPU_V7 || XSCALE_PMU
+       default y
+       bool
  if !MMU
  source "arch/arm/Kconfig-nommu"
  endif
@@@ -970,6 -950,19 +999,19 @@@ config ARM_ERRATA_46007
          ACTLR register. Note that setting specific bits in the ACTLR register
          may not be available in non-secure mode.
  
+ config PL310_ERRATA_588369
+       bool "Clean & Invalidate maintenance operations do not invalidate clean lines"
+       depends on CACHE_L2X0 && ARCH_OMAP4
+       help
+          The PL310 L2 cache controller implements three types of Clean &
+          Invalidate maintenance operations: by Physical Address
+          (offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC).
+          They are architecturally defined to behave as the execution of a
+          clean operation followed immediately by an invalidate operation,
+          both performing to the same memory location. This functionality
+          is not correctly implemented in PL310 as clean lines are not
+          invalidated as a result of these operations. Note that this errata
+          uses Texas Instrument's secure monitor api.
  endmenu
  
  source "arch/arm/common/Kconfig"
@@@ -1124,7 -1117,7 +1166,7 @@@ source kernel/Kconfig.preemp
  config HZ
        int
        default 128 if ARCH_L7200
 -      default 200 if ARCH_EBSA110 || ARCH_S3C2410
 +      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || ARCH_S5P6442 || ARCH_S5PV210
        default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
        default AT91_TIMER_HZ if ARCH_AT91
        default 100
@@@ -1220,6 -1213,14 +1262,14 @@@ config HIGHPT
        depends on HIGHMEM
        depends on !OUTER_CACHE
  
+ config HW_PERF_EVENTS
+       bool "Enable hardware performance counter support for perf events"
+       depends on PERF_EVENTS && CPU_HAS_PMU && (CPU_V6 || CPU_V7)
+       default y
+       help
+         Enable hardware performance counter support for perf events. If
+         disabled, perf events will use software events only.
  source "mm/Kconfig"
  
  config LEDS
@@@ -1279,6 -1280,7 +1329,7 @@@ config ALIGNMENT_TRA
        bool
        depends on CPU_CP15_MMU
        default y if !ARCH_EBSA110
+       select HAVE_PROC_CPU if PROC_FS
        help
          ARM processors cannot fetch/store information which is not
          naturally aligned on the bus, i.e., a 4 byte fetch must start at an
diff --combined arch/arm/Makefile
index 2dca13f60168cc24f70a62cc9b46f6fb194fcaca,81f54ca30788b7acfdae92e00595e5fd64e46aa0..ed820e737a8a66fd063192b685b5642ea2f71985
@@@ -146,7 -146,6 +146,7 @@@ machine-$(CONFIG_ARCH_MX1)         := mx
  machine-$(CONFIG_ARCH_MX2)            := mx2
  machine-$(CONFIG_ARCH_MX25)           := mx25
  machine-$(CONFIG_ARCH_MX3)            := mx3
 +machine-$(CONFIG_ARCH_MX5)            := mx5
  machine-$(CONFIG_ARCH_MXC91231)               := mxc91231
  machine-$(CONFIG_ARCH_NETX)           := netx
  machine-$(CONFIG_ARCH_NOMADIK)                := nomadik
@@@ -160,37 -159,33 +160,38 @@@ machine-$(CONFIG_ARCH_PNX4008)          := pnx4
  machine-$(CONFIG_ARCH_PXA)            := pxa
  machine-$(CONFIG_ARCH_REALVIEW)               := realview
  machine-$(CONFIG_ARCH_RPC)            := rpc
 -machine-$(CONFIG_ARCH_S3C2410)                := s3c2410 s3c2400 s3c2412 s3c2440 s3c2442 s3c2443
 +machine-$(CONFIG_ARCH_S3C2410)                := s3c2410 s3c2400 s3c2412 s3c2440 s3c2443
  machine-$(CONFIG_ARCH_S3C24A0)                := s3c24a0
 -machine-$(CONFIG_ARCH_S3C64XX)                := s3c6400 s3c6410
 +machine-$(CONFIG_ARCH_S3C64XX)                := s3c64xx
 +machine-$(CONFIG_ARCH_S5P6440)                := s5p6440
 +machine-$(CONFIG_ARCH_S5P6442)                := s5p6442
  machine-$(CONFIG_ARCH_S5PC1XX)                := s5pc100
 +machine-$(CONFIG_ARCH_S5PV210)                := s5pv210
  machine-$(CONFIG_ARCH_SA1100)         := sa1100
  machine-$(CONFIG_ARCH_SHARK)          := shark
 +machine-$(CONFIG_ARCH_SHMOBILE)       := shmobile
  machine-$(CONFIG_ARCH_STMP378X)               := stmp378x
  machine-$(CONFIG_ARCH_STMP37XX)               := stmp37xx
  machine-$(CONFIG_ARCH_U300)           := u300
  machine-$(CONFIG_ARCH_U8500)          := ux500
  machine-$(CONFIG_ARCH_VERSATILE)      := versatile
  machine-$(CONFIG_ARCH_W90X900)                := w90x900
+ machine-$(CONFIG_ARCH_NUC93X)         := nuc93x
  machine-$(CONFIG_FOOTBRIDGE)          := footbridge
  
  # Platform directory name.  This list is sorted alphanumerically
  # by CONFIG_* macro name.
  plat-$(CONFIG_ARCH_MXC)               := mxc
  plat-$(CONFIG_ARCH_OMAP)      := omap
 +plat-$(CONFIG_ARCH_S3C64XX)   := samsung
  plat-$(CONFIG_ARCH_STMP3XXX)  := stmp3xxx
  plat-$(CONFIG_PLAT_IOP)               := iop
  plat-$(CONFIG_PLAT_NOMADIK)   := nomadik
  plat-$(CONFIG_PLAT_ORION)     := orion
  plat-$(CONFIG_PLAT_PXA)               := pxa
 -plat-$(CONFIG_PLAT_S3C24XX)   := s3c24xx s3c samsung
 -plat-$(CONFIG_PLAT_S3C64XX)   := s3c64xx s3c samsung
 -plat-$(CONFIG_PLAT_S5PC1XX)   := s5pc1xx s3c samsung
 +plat-$(CONFIG_PLAT_S3C24XX)   := s3c24xx samsung
 +plat-$(CONFIG_PLAT_S5PC1XX)   := s5pc1xx samsung
 +plat-$(CONFIG_PLAT_S5P)               := s5p samsung
  
  ifeq ($(CONFIG_ARCH_EBSA110),y)
  # This is what happens if you forget the IOCS16 line.
index 8974faf9cef0f82a853ac7991985ad456265a944,e82b489d12150fd8a80c362b744538fcb494dca3..bb419ef4d133bb7c12f962bad2c961b337247d4c
  #include <linux/module.h>
  
  #include <mach/clock.h>
 +#include <mach/hardware.h>
  #include <mach/common.h>
  #include <asm/clkdev.h>
  #include <asm/div64.h>
  
 -#include "crm_regs.h"
 +#define IO_ADDR_CCM(off)      (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off)))
 +
 +/* Register offsets */
 +#define CCM_CSCR              IO_ADDR_CCM(0x0)
 +#define CCM_MPCTL0            IO_ADDR_CCM(0x4)
 +#define CCM_MPCTL1            IO_ADDR_CCM(0x8)
 +#define CCM_SPCTL0            IO_ADDR_CCM(0xc)
 +#define CCM_SPCTL1            IO_ADDR_CCM(0x10)
 +#define CCM_OSC26MCTL         IO_ADDR_CCM(0x14)
 +#define CCM_PCDR0             IO_ADDR_CCM(0x18)
 +#define CCM_PCDR1             IO_ADDR_CCM(0x1c)
 +#define CCM_PCCR0             IO_ADDR_CCM(0x20)
 +#define CCM_PCCR1             IO_ADDR_CCM(0x24)
 +#define CCM_CCSR              IO_ADDR_CCM(0x28)
 +#define CCM_PMCTL             IO_ADDR_CCM(0x2c)
 +#define CCM_PMCOUNT           IO_ADDR_CCM(0x30)
 +#define CCM_WKGDCTL           IO_ADDR_CCM(0x34)
 +
 +#define CCM_CSCR_PRESC_OFFSET 29
 +#define CCM_CSCR_PRESC_MASK   (0x7 << CCM_CSCR_PRESC_OFFSET)
 +
 +#define CCM_CSCR_USB_OFFSET   26
 +#define CCM_CSCR_USB_MASK     (0x7 << CCM_CSCR_USB_OFFSET)
 +#define CCM_CSCR_SD_OFFSET    24
 +#define CCM_CSCR_SD_MASK      (0x3 << CCM_CSCR_SD_OFFSET)
 +#define CCM_CSCR_SPLLRES      (1 << 22)
 +#define CCM_CSCR_MPLLRES      (1 << 21)
 +#define CCM_CSCR_SSI2_OFFSET  20
 +#define CCM_CSCR_SSI2         (1 << CCM_CSCR_SSI2_OFFSET)
 +#define CCM_CSCR_SSI1_OFFSET  19
 +#define CCM_CSCR_SSI1         (1 << CCM_CSCR_SSI1_OFFSET)
 +#define CCM_CSCR_FIR_OFFSET   18
 +#define CCM_CSCR_FIR          (1 << CCM_CSCR_FIR_OFFSET)
 +#define CCM_CSCR_SP           (1 << 17)
 +#define CCM_CSCR_MCU          (1 << 16)
 +#define CCM_CSCR_BCLK_OFFSET  10
 +#define CCM_CSCR_BCLK_MASK    (0xf << CCM_CSCR_BCLK_OFFSET)
 +#define CCM_CSCR_IPDIV_OFFSET 9
 +#define CCM_CSCR_IPDIV                (1 << CCM_CSCR_IPDIV_OFFSET)
 +
 +#define CCM_CSCR_OSC26MDIV    (1 << 4)
 +#define CCM_CSCR_OSC26M               (1 << 3)
 +#define CCM_CSCR_FPM          (1 << 2)
 +#define CCM_CSCR_SPEN         (1 << 1)
 +#define CCM_CSCR_MPEN         1
 +
 +#define CCM_MPCTL0_CPLM               (1 << 31)
 +#define CCM_MPCTL0_PD_OFFSET  26
 +#define CCM_MPCTL0_PD_MASK    (0xf << 26)
 +#define CCM_MPCTL0_MFD_OFFSET 16
 +#define CCM_MPCTL0_MFD_MASK   (0x3ff << 16)
 +#define CCM_MPCTL0_MFI_OFFSET 10
 +#define CCM_MPCTL0_MFI_MASK   (0xf << 10)
 +#define CCM_MPCTL0_MFN_OFFSET 0
 +#define CCM_MPCTL0_MFN_MASK   0x3ff
 +
 +#define CCM_MPCTL1_LF         (1 << 15)
 +#define CCM_MPCTL1_BRMO               (1 << 6)
 +
 +#define CCM_SPCTL0_CPLM               (1 << 31)
 +#define CCM_SPCTL0_PD_OFFSET  26
 +#define CCM_SPCTL0_PD_MASK    (0xf << 26)
 +#define CCM_SPCTL0_MFD_OFFSET 16
 +#define CCM_SPCTL0_MFD_MASK   (0x3ff << 16)
 +#define CCM_SPCTL0_MFI_OFFSET 10
 +#define CCM_SPCTL0_MFI_MASK   (0xf << 10)
 +#define CCM_SPCTL0_MFN_OFFSET 0
 +#define CCM_SPCTL0_MFN_MASK   0x3ff
 +
 +#define CCM_SPCTL1_LF         (1 << 15)
 +#define CCM_SPCTL1_BRMO               (1 << 6)
 +
 +#define CCM_OSC26MCTL_PEAK_OFFSET     16
 +#define CCM_OSC26MCTL_PEAK_MASK               (0x3 << 16)
 +#define CCM_OSC26MCTL_AGC_OFFSET      8
 +#define CCM_OSC26MCTL_AGC_MASK                (0x3f << 8)
 +#define CCM_OSC26MCTL_ANATEST_OFFSET  0
 +#define CCM_OSC26MCTL_ANATEST_MASK    0x3f
 +
 +#define CCM_PCDR0_SSI2BAUDDIV_OFFSET  26
 +#define CCM_PCDR0_SSI2BAUDDIV_MASK    (0x3f << 26)
 +#define CCM_PCDR0_SSI1BAUDDIV_OFFSET  16
 +#define CCM_PCDR0_SSI1BAUDDIV_MASK    (0x3f << 16)
 +#define CCM_PCDR0_NFCDIV_OFFSET               12
 +#define CCM_PCDR0_NFCDIV_MASK         (0xf << 12)
 +#define CCM_PCDR0_48MDIV_OFFSET               5
 +#define CCM_PCDR0_48MDIV_MASK         (0x7 << CCM_PCDR0_48MDIV_OFFSET)
 +#define CCM_PCDR0_FIRIDIV_OFFSET      0
 +#define CCM_PCDR0_FIRIDIV_MASK                0x1f
 +#define CCM_PCDR1_PERDIV4_OFFSET      24
 +#define CCM_PCDR1_PERDIV4_MASK                (0x3f << 24)
 +#define CCM_PCDR1_PERDIV3_OFFSET      16
 +#define CCM_PCDR1_PERDIV3_MASK                (0x3f << 16)
 +#define CCM_PCDR1_PERDIV2_OFFSET      8
 +#define CCM_PCDR1_PERDIV2_MASK                (0x3f << 8)
 +#define CCM_PCDR1_PERDIV1_OFFSET      0
 +#define CCM_PCDR1_PERDIV1_MASK                0x3f
 +
 +#define CCM_PCCR_HCLK_CSI_OFFSET      31
 +#define CCM_PCCR_HCLK_CSI_REG         CCM_PCCR0
 +#define CCM_PCCR_HCLK_DMA_OFFSET      30
 +#define CCM_PCCR_HCLK_DMA_REG         CCM_PCCR0
 +#define CCM_PCCR_HCLK_BROM_OFFSET     28
 +#define CCM_PCCR_HCLK_BROM_REG                CCM_PCCR0
 +#define CCM_PCCR_HCLK_EMMA_OFFSET     27
 +#define CCM_PCCR_HCLK_EMMA_REG                CCM_PCCR0
 +#define CCM_PCCR_HCLK_LCDC_OFFSET     26
 +#define CCM_PCCR_HCLK_LCDC_REG                CCM_PCCR0
 +#define CCM_PCCR_HCLK_SLCDC_OFFSET    25
 +#define CCM_PCCR_HCLK_SLCDC_REG               CCM_PCCR0
 +#define CCM_PCCR_HCLK_USBOTG_OFFSET   24
 +#define CCM_PCCR_HCLK_USBOTG_REG      CCM_PCCR0
 +#define CCM_PCCR_HCLK_BMI_OFFSET      23
 +#define CCM_PCCR_BMI_MASK             (1 << CCM_PCCR_BMI_MASK)
 +#define CCM_PCCR_HCLK_BMI_REG         CCM_PCCR0
 +#define CCM_PCCR_PERCLK4_OFFSET               22
 +#define CCM_PCCR_PERCLK4_REG          CCM_PCCR0
 +#define CCM_PCCR_SLCDC_OFFSET         21
 +#define CCM_PCCR_SLCDC_REG            CCM_PCCR0
 +#define CCM_PCCR_FIRI_BAUD_OFFSET     20
 +#define CCM_PCCR_FIRI_BAUD_MASK               (1 << CCM_PCCR_FIRI_BAUD_MASK)
 +#define CCM_PCCR_FIRI_BAUD_REG                CCM_PCCR0
 +#define CCM_PCCR_NFC_OFFSET           19
 +#define CCM_PCCR_NFC_REG              CCM_PCCR0
 +#define CCM_PCCR_LCDC_OFFSET          18
 +#define CCM_PCCR_LCDC_REG             CCM_PCCR0
 +#define CCM_PCCR_SSI1_BAUD_OFFSET     17
 +#define CCM_PCCR_SSI1_BAUD_REG                CCM_PCCR0
 +#define CCM_PCCR_SSI2_BAUD_OFFSET     16
 +#define CCM_PCCR_SSI2_BAUD_REG                CCM_PCCR0
 +#define CCM_PCCR_EMMA_OFFSET          15
 +#define CCM_PCCR_EMMA_REG             CCM_PCCR0
 +#define CCM_PCCR_USBOTG_OFFSET                14
 +#define CCM_PCCR_USBOTG_REG           CCM_PCCR0
 +#define CCM_PCCR_DMA_OFFSET           13
 +#define CCM_PCCR_DMA_REG              CCM_PCCR0
 +#define CCM_PCCR_I2C1_OFFSET          12
 +#define CCM_PCCR_I2C1_REG             CCM_PCCR0
 +#define CCM_PCCR_GPIO_OFFSET          11
 +#define CCM_PCCR_GPIO_REG             CCM_PCCR0
 +#define CCM_PCCR_SDHC2_OFFSET         10
 +#define CCM_PCCR_SDHC2_REG            CCM_PCCR0
 +#define CCM_PCCR_SDHC1_OFFSET         9
 +#define CCM_PCCR_SDHC1_REG            CCM_PCCR0
 +#define CCM_PCCR_FIRI_OFFSET          8
 +#define CCM_PCCR_FIRI_MASK            (1 << CCM_PCCR_BAUD_MASK)
 +#define CCM_PCCR_FIRI_REG             CCM_PCCR0
 +#define CCM_PCCR_SSI2_IPG_OFFSET      7
 +#define CCM_PCCR_SSI2_REG             CCM_PCCR0
 +#define CCM_PCCR_SSI1_IPG_OFFSET      6
 +#define CCM_PCCR_SSI1_REG             CCM_PCCR0
 +#define CCM_PCCR_CSPI2_OFFSET         5
 +#define       CCM_PCCR_CSPI2_REG              CCM_PCCR0
 +#define CCM_PCCR_CSPI1_OFFSET         4
 +#define       CCM_PCCR_CSPI1_REG              CCM_PCCR0
 +#define CCM_PCCR_UART4_OFFSET         3
 +#define CCM_PCCR_UART4_REG            CCM_PCCR0
 +#define CCM_PCCR_UART3_OFFSET         2
 +#define CCM_PCCR_UART3_REG            CCM_PCCR0
 +#define CCM_PCCR_UART2_OFFSET         1
 +#define CCM_PCCR_UART2_REG            CCM_PCCR0
 +#define CCM_PCCR_UART1_OFFSET         0
 +#define CCM_PCCR_UART1_REG            CCM_PCCR0
 +
 +#define CCM_PCCR_OWIRE_OFFSET         31
 +#define CCM_PCCR_OWIRE_REG            CCM_PCCR1
 +#define CCM_PCCR_KPP_OFFSET           30
 +#define CCM_PCCR_KPP_REG              CCM_PCCR1
 +#define CCM_PCCR_RTC_OFFSET           29
 +#define CCM_PCCR_RTC_REG              CCM_PCCR1
 +#define CCM_PCCR_PWM_OFFSET           28
 +#define CCM_PCCR_PWM_REG              CCM_PCCR1
 +#define CCM_PCCR_GPT3_OFFSET          27
 +#define CCM_PCCR_GPT3_REG             CCM_PCCR1
 +#define CCM_PCCR_GPT2_OFFSET          26
 +#define CCM_PCCR_GPT2_REG             CCM_PCCR1
 +#define CCM_PCCR_GPT1_OFFSET          25
 +#define CCM_PCCR_GPT1_REG             CCM_PCCR1
 +#define CCM_PCCR_WDT_OFFSET           24
 +#define CCM_PCCR_WDT_REG              CCM_PCCR1
 +#define CCM_PCCR_CSPI3_OFFSET         23
 +#define       CCM_PCCR_CSPI3_REG              CCM_PCCR1
 +
 +#define CCM_PCCR_CSPI1_MASK           (1 << CCM_PCCR_CSPI1_OFFSET)
 +#define CCM_PCCR_CSPI2_MASK           (1 << CCM_PCCR_CSPI2_OFFSET)
 +#define CCM_PCCR_CSPI3_MASK           (1 << CCM_PCCR_CSPI3_OFFSET)
 +#define CCM_PCCR_DMA_MASK             (1 << CCM_PCCR_DMA_OFFSET)
 +#define CCM_PCCR_EMMA_MASK            (1 << CCM_PCCR_EMMA_OFFSET)
 +#define CCM_PCCR_GPIO_MASK            (1 << CCM_PCCR_GPIO_OFFSET)
 +#define CCM_PCCR_GPT1_MASK            (1 << CCM_PCCR_GPT1_OFFSET)
 +#define CCM_PCCR_GPT2_MASK            (1 << CCM_PCCR_GPT2_OFFSET)
 +#define CCM_PCCR_GPT3_MASK            (1 << CCM_PCCR_GPT3_OFFSET)
 +#define CCM_PCCR_HCLK_BROM_MASK               (1 << CCM_PCCR_HCLK_BROM_OFFSET)
 +#define CCM_PCCR_HCLK_CSI_MASK                (1 << CCM_PCCR_HCLK_CSI_OFFSET)
 +#define CCM_PCCR_HCLK_DMA_MASK                (1 << CCM_PCCR_HCLK_DMA_OFFSET)
 +#define CCM_PCCR_HCLK_EMMA_MASK               (1 << CCM_PCCR_HCLK_EMMA_OFFSET)
 +#define CCM_PCCR_HCLK_LCDC_MASK               (1 << CCM_PCCR_HCLK_LCDC_OFFSET)
 +#define CCM_PCCR_HCLK_SLCDC_MASK      (1 << CCM_PCCR_HCLK_SLCDC_OFFSET)
 +#define CCM_PCCR_HCLK_USBOTG_MASK     (1 << CCM_PCCR_HCLK_USBOTG_OFFSET)
 +#define CCM_PCCR_I2C1_MASK            (1 << CCM_PCCR_I2C1_OFFSET)
 +#define CCM_PCCR_KPP_MASK             (1 << CCM_PCCR_KPP_OFFSET)
 +#define CCM_PCCR_LCDC_MASK            (1 << CCM_PCCR_LCDC_OFFSET)
 +#define CCM_PCCR_NFC_MASK             (1 << CCM_PCCR_NFC_OFFSET)
 +#define CCM_PCCR_OWIRE_MASK           (1 << CCM_PCCR_OWIRE_OFFSET)
 +#define CCM_PCCR_PERCLK4_MASK         (1 << CCM_PCCR_PERCLK4_OFFSET)
 +#define CCM_PCCR_PWM_MASK             (1 << CCM_PCCR_PWM_OFFSET)
 +#define CCM_PCCR_RTC_MASK             (1 << CCM_PCCR_RTC_OFFSET)
 +#define CCM_PCCR_SDHC1_MASK           (1 << CCM_PCCR_SDHC1_OFFSET)
 +#define CCM_PCCR_SDHC2_MASK           (1 << CCM_PCCR_SDHC2_OFFSET)
 +#define CCM_PCCR_SLCDC_MASK           (1 << CCM_PCCR_SLCDC_OFFSET)
 +#define CCM_PCCR_SSI1_BAUD_MASK               (1 << CCM_PCCR_SSI1_BAUD_OFFSET)
 +#define CCM_PCCR_SSI1_IPG_MASK                (1 << CCM_PCCR_SSI1_IPG_OFFSET)
 +#define CCM_PCCR_SSI2_BAUD_MASK               (1 << CCM_PCCR_SSI2_BAUD_OFFSET)
 +#define CCM_PCCR_SSI2_IPG_MASK                (1 << CCM_PCCR_SSI2_IPG_OFFSET)
 +#define CCM_PCCR_UART1_MASK           (1 << CCM_PCCR_UART1_OFFSET)
 +#define CCM_PCCR_UART2_MASK           (1 << CCM_PCCR_UART2_OFFSET)
 +#define CCM_PCCR_UART3_MASK           (1 << CCM_PCCR_UART3_OFFSET)
 +#define CCM_PCCR_UART4_MASK           (1 << CCM_PCCR_UART4_OFFSET)
 +#define CCM_PCCR_USBOTG_MASK          (1 << CCM_PCCR_USBOTG_OFFSET)
 +#define CCM_PCCR_WDT_MASK             (1 << CCM_PCCR_WDT_OFFSET)
 +
 +#define CCM_CCSR_32KSR                (1 << 15)
 +
 +#define CCM_CCSR_CLKMODE1     (1 << 9)
 +#define CCM_CCSR_CLKMODE0     (1 << 8)
 +
 +#define CCM_CCSR_CLKOSEL_OFFSET 0
 +#define CCM_CCSR_CLKOSEL_MASK 0x1f
 +
 +#define SYS_FMCR              0x14    /* Functional Muxing Control Reg */
 +#define SYS_CHIP_ID           0x00    /* The offset of CHIP ID register */
  
  static int _clk_enable(struct clk *clk)
  {
@@@ -1199,7 -968,6 +1199,6 @@@ static struct clk_lookup lookups[] = 
   */
  int __init mx21_clocks_init(unsigned long lref, unsigned long href)
  {
-       int i;
        u32 cscr;
  
        external_low_reference = lref;
        else
                spll_clk.parent = &fpm_clk;
  
-       for (i = 0; i < ARRAY_SIZE(lookups); i++)
-               clkdev_add(&lookups[i]);
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
  
        /* Turn off all clock gates */
        __raw_writel(0, CCM_PCCR0);
        clk_enable(&uart_clk[0]);
  #endif
  
 -      mxc_timer_init(&gpt_clk[0], IO_ADDRESS(GPT1_BASE_ADDR), MXC_INT_GPT1);
 +      mxc_timer_init(&gpt_clk[0], MX21_IO_ADDRESS(MX21_GPT1_BASE_ADDR),
 +                      MX21_INT_GPT1);
        return 0;
  }
index 68bf93e6e90752dbcb805f772fa19f9ce914b57c,18c53a6487fafc7234d37cc494f04ff6c7250c49..0f0823c8b1707e9d8f86bbc77fb0320aa25395b8
  #include <mach/common.h>
  #include <mach/hardware.h>
  
 +#define IO_ADDR_CCM(off)      (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off)))
 +
  /* Register offsets */
 -#define CCM_CSCR                (IO_ADDRESS(CCM_BASE_ADDR) + 0x0)
 -#define CCM_MPCTL0              (IO_ADDRESS(CCM_BASE_ADDR) + 0x4)
 -#define CCM_MPCTL1              (IO_ADDRESS(CCM_BASE_ADDR) + 0x8)
 -#define CCM_SPCTL0              (IO_ADDRESS(CCM_BASE_ADDR) + 0xC)
 -#define CCM_SPCTL1              (IO_ADDRESS(CCM_BASE_ADDR) + 0x10)
 -#define CCM_OSC26MCTL           (IO_ADDRESS(CCM_BASE_ADDR) + 0x14)
 -#define CCM_PCDR0               (IO_ADDRESS(CCM_BASE_ADDR) + 0x18)
 -#define CCM_PCDR1               (IO_ADDRESS(CCM_BASE_ADDR) + 0x1c)
 -#define CCM_PCCR0               (IO_ADDRESS(CCM_BASE_ADDR) + 0x20)
 -#define CCM_PCCR1               (IO_ADDRESS(CCM_BASE_ADDR) + 0x24)
 -#define CCM_CCSR                (IO_ADDRESS(CCM_BASE_ADDR) + 0x28)
 -#define CCM_PMCTL               (IO_ADDRESS(CCM_BASE_ADDR) + 0x2c)
 -#define CCM_PMCOUNT             (IO_ADDRESS(CCM_BASE_ADDR) + 0x30)
 -#define CCM_WKGDCTL             (IO_ADDRESS(CCM_BASE_ADDR) + 0x34)
 +#define CCM_CSCR              IO_ADDR_CCM(0x0)
 +#define CCM_MPCTL0            IO_ADDR_CCM(0x4)
 +#define CCM_MPCTL1            IO_ADDR_CCM(0x8)
 +#define CCM_SPCTL0            IO_ADDR_CCM(0xc)
 +#define CCM_SPCTL1            IO_ADDR_CCM(0x10)
 +#define CCM_OSC26MCTL         IO_ADDR_CCM(0x14)
 +#define CCM_PCDR0             IO_ADDR_CCM(0x18)
 +#define CCM_PCDR1             IO_ADDR_CCM(0x1c)
 +#define CCM_PCCR0             IO_ADDR_CCM(0x20)
 +#define CCM_PCCR1             IO_ADDR_CCM(0x24)
 +#define CCM_CCSR              IO_ADDR_CCM(0x28)
 +#define CCM_PMCTL             IO_ADDR_CCM(0x2c)
 +#define CCM_PMCOUNT           IO_ADDR_CCM(0x30)
 +#define CCM_WKGDCTL           IO_ADDR_CCM(0x34)
  
  #define CCM_CSCR_UPDATE_DIS   (1 << 31)
  #define CCM_CSCR_SSI2         (1 << 23)
@@@ -721,7 -719,6 +721,6 @@@ static void __init to2_adjust_clocks(vo
  int __init mx27_clocks_init(unsigned long fref)
  {
        u32 cscr = __raw_readl(CCM_CSCR);
-       int i;
  
        external_high_reference = fref;
  
  
        to2_adjust_clocks();
  
-       for (i = 0; i < ARRAY_SIZE(lookups); i++)
-               clkdev_add(&lookups[i]);
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
  
        /* Turn off all clocks we do not need */
        __raw_writel(0, CCM_PCCR0);
        clk_enable(&uart1_clk);
  #endif
  
 -      mxc_timer_init(&gpt1_clk, IO_ADDRESS(GPT1_BASE_ADDR), MXC_INT_GPT1);
 +      mxc_timer_init(&gpt1_clk, MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR),
 +                      MX27_INT_GPT1);
  
        return 0;
  }
index a4b809b82fa31ffcffcda83ddce3bf457d64c571,3956d82b7c4e8a993987dd7a2915ec7f32f8c2d8..b91e412f7b3e96e5b6dc090540212ce1c13b72ea
@@@ -31,6 -31,7 +31,7 @@@
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/gpio.h>
+ #include <linux/dma-mapping.h>
  
  #include <mach/irqs.h>
  #include <mach/hardware.h>
   * - i.MX21: 2 channel
   * - i.MX27: 3 channel
   */
 -static struct resource mxc_spi_resources0[] = {
 -      {
 -             .start = CSPI1_BASE_ADDR,
 -             .end = CSPI1_BASE_ADDR + SZ_4K - 1,
 -             .flags = IORESOURCE_MEM,
 -      }, {
 -             .start = MXC_INT_CSPI1,
 -             .end = MXC_INT_CSPI1,
 -             .flags = IORESOURCE_IRQ,
 -      },
 -};
 -
 -static struct resource mxc_spi_resources1[] = {
 -      {
 -              .start = CSPI2_BASE_ADDR,
 -              .end = CSPI2_BASE_ADDR + SZ_4K - 1,
 -              .flags = IORESOURCE_MEM,
 -      }, {
 -              .start = MXC_INT_CSPI2,
 -              .end = MXC_INT_CSPI2,
 -              .flags = IORESOURCE_IRQ,
 -      },
 -};
 -
 -#ifdef CONFIG_MACH_MX27
 -static struct resource mxc_spi_resources2[] = {
 -      {
 -              .start = CSPI3_BASE_ADDR,
 -              .end = CSPI3_BASE_ADDR + SZ_4K - 1,
 -              .flags = IORESOURCE_MEM,
 -      }, {
 -              .start = MXC_INT_CSPI3,
 -              .end = MXC_INT_CSPI3,
 -              .flags = IORESOURCE_IRQ,
 -      },
 -};
 -#endif
 -
 -struct platform_device mxc_spi_device0 = {
 -      .name = "spi_imx",
 -      .id = 0,
 -      .num_resources = ARRAY_SIZE(mxc_spi_resources0),
 -      .resource = mxc_spi_resources0,
 -};
 +#define DEFINE_IMX_SPI_DEVICE(n, baseaddr, irq)                                       \
 +      static struct resource mxc_spi_resources ## n[] = {                     \
 +              {                                                               \
 +                      .start = baseaddr,                                      \
 +                      .end = baseaddr + SZ_4K - 1,                            \
 +                      .flags = IORESOURCE_MEM,                                \
 +              }, {                                                            \
 +                      .start = irq,                                           \
 +                      .end = irq,                                             \
 +                      .flags = IORESOURCE_IRQ,                                \
 +              },                                                              \
 +      };                                                                      \
 +                                                                              \
 +      struct platform_device mxc_spi_device ## n = {                          \
 +              .name = "spi_imx",                                              \
 +              .id = n,                                                        \
 +              .num_resources = ARRAY_SIZE(mxc_spi_resources ## n),            \
 +              .resource = mxc_spi_resources ## n,                             \
 +      }
  
 -struct platform_device mxc_spi_device1 = {
 -      .name = "spi_imx",
 -      .id = 1,
 -      .num_resources = ARRAY_SIZE(mxc_spi_resources1),
 -      .resource = mxc_spi_resources1,
 -};
 +DEFINE_IMX_SPI_DEVICE(0, MX2x_CSPI1_BASE_ADDR, MX2x_INT_CSPI1);
 +DEFINE_IMX_SPI_DEVICE(1, MX2x_CSPI2_BASE_ADDR, MX2x_INT_CSPI2);
  
  #ifdef CONFIG_MACH_MX27
 -struct platform_device mxc_spi_device2 = {
 -      .name = "spi_imx",
 -      .id = 2,
 -      .num_resources = ARRAY_SIZE(mxc_spi_resources2),
 -      .resource = mxc_spi_resources2,
 -};
 +DEFINE_IMX_SPI_DEVICE(2, MX27_CSPI3_BASE_ADDR, MX27_INT_CSPI3);
  #endif
  
  /*
   * - i.MX21: 3 timers
   * - i.MX27: 6 timers
   */
 -
 -/* We use gpt0 as system timer, so do not add a device for this one */
 -
 -static struct resource timer1_resources[] = {
 -      {
 -              .start  = GPT2_BASE_ADDR,
 -              .end    = GPT2_BASE_ADDR + 0x17,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start   = MXC_INT_GPT2,
 -              .end     = MXC_INT_GPT2,
 -              .flags   = IORESOURCE_IRQ,
 -      }
 -};
 -
 -struct platform_device mxc_gpt1 = {
 -      .name = "imx_gpt",
 -      .id = 1,
 -      .num_resources = ARRAY_SIZE(timer1_resources),
 -      .resource = timer1_resources,
 -};
 -
 -static struct resource timer2_resources[] = {
 -      {
 -              .start  = GPT3_BASE_ADDR,
 -              .end    = GPT3_BASE_ADDR + 0x17,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start   = MXC_INT_GPT3,
 -              .end     = MXC_INT_GPT3,
 -              .flags   = IORESOURCE_IRQ,
 +#define DEFINE_IMX_GPT_DEVICE(n, baseaddr, irq)                               \
 +      static struct resource timer ## n ##_resources[] = {            \
 +              {                                                       \
 +                      .start = baseaddr,                              \
 +                      .end = baseaddr + SZ_4K - 1,                    \
 +                      .flags = IORESOURCE_MEM,                        \
 +              }, {                                                    \
 +                      .start = irq,                                   \
 +                      .end = irq,                                     \
 +                      .flags = IORESOURCE_IRQ,                        \
 +              }                                                       \
 +      };                                                              \
 +                                                                      \
 +      struct platform_device mxc_gpt ## n = {                         \
 +              .name = "imx_gpt",                                      \
 +              .id = n,                                                \
 +              .num_resources = ARRAY_SIZE(timer ## n ## _resources),  \
 +              .resource = timer ## n ## _resources,                   \
        }
 -};
  
 -struct platform_device mxc_gpt2 = {
 -      .name = "imx_gpt",
 -      .id = 2,
 -      .num_resources = ARRAY_SIZE(timer2_resources),
 -      .resource = timer2_resources,
 -};
 +/* We use gpt1 as system timer, so do not add a device for this one */
 +DEFINE_IMX_GPT_DEVICE(1, MX2x_GPT2_BASE_ADDR, MX2x_INT_GPT2);
 +DEFINE_IMX_GPT_DEVICE(2, MX2x_GPT3_BASE_ADDR, MX2x_INT_GPT3);
  
  #ifdef CONFIG_MACH_MX27
 -static struct resource timer3_resources[] = {
 -      {
 -              .start  = GPT4_BASE_ADDR,
 -              .end    = GPT4_BASE_ADDR + 0x17,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start   = MXC_INT_GPT4,
 -              .end     = MXC_INT_GPT4,
 -              .flags   = IORESOURCE_IRQ,
 -      }
 -};
 -
 -struct platform_device mxc_gpt3 = {
 -      .name = "imx_gpt",
 -      .id = 3,
 -      .num_resources = ARRAY_SIZE(timer3_resources),
 -      .resource = timer3_resources,
 -};
 -
 -static struct resource timer4_resources[] = {
 -      {
 -              .start  = GPT5_BASE_ADDR,
 -              .end    = GPT5_BASE_ADDR + 0x17,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start   = MXC_INT_GPT5,
 -              .end     = MXC_INT_GPT5,
 -              .flags   = IORESOURCE_IRQ,
 -      }
 -};
 -
 -struct platform_device mxc_gpt4 = {
 -      .name = "imx_gpt",
 -      .id = 4,
 -      .num_resources = ARRAY_SIZE(timer4_resources),
 -      .resource = timer4_resources,
 -};
 -
 -static struct resource timer5_resources[] = {
 -      {
 -              .start  = GPT6_BASE_ADDR,
 -              .end    = GPT6_BASE_ADDR + 0x17,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start   = MXC_INT_GPT6,
 -              .end     = MXC_INT_GPT6,
 -              .flags   = IORESOURCE_IRQ,
 -      }
 -};
 -
 -struct platform_device mxc_gpt5 = {
 -      .name = "imx_gpt",
 -      .id = 5,
 -      .num_resources = ARRAY_SIZE(timer5_resources),
 -      .resource = timer5_resources,
 -};
 +DEFINE_IMX_GPT_DEVICE(3, MX27_GPT4_BASE_ADDR, MX27_INT_GPT4);
 +DEFINE_IMX_GPT_DEVICE(4, MX27_GPT5_BASE_ADDR, MX27_INT_GPT5);
 +DEFINE_IMX_GPT_DEVICE(5, MX27_GPT6_BASE_ADDR, MX27_INT_GPT6);
  #endif
  
  /*
   */
  static struct resource mxc_wdt_resources[] = {
        {
 -              .start  = WDOG_BASE_ADDR,
 -              .end    = WDOG_BASE_ADDR + 0x30,
 -              .flags  = IORESOURCE_MEM,
 +              .start = MX2x_WDOG_BASE_ADDR,
 +              .end = MX2x_WDOG_BASE_ADDR + SZ_4K - 1,
 +              .flags = IORESOURCE_MEM,
        },
  };
  
@@@ -131,8 -236,8 +132,8 @@@ struct platform_device mxc_wdt = 
  
  static struct resource mxc_w1_master_resources[] = {
        {
 -              .start = OWIRE_BASE_ADDR,
 -              .end   = OWIRE_BASE_ADDR + SZ_4K - 1,
 +              .start = MX2x_OWIRE_BASE_ADDR,
 +              .end = MX2x_OWIRE_BASE_ADDR + SZ_4K - 1,
                .flags = IORESOURCE_MEM,
        },
  };
@@@ -144,33 -249,24 +145,33 @@@ struct platform_device mxc_w1_master_de
        .resource = mxc_w1_master_resources,
  };
  
 -static struct resource mxc_nand_resources[] = {
 -      {
 -              .start  = NFC_BASE_ADDR,
 -              .end    = NFC_BASE_ADDR + 0xfff,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start  = MXC_INT_NANDFC,
 -              .end    = MXC_INT_NANDFC,
 -              .flags  = IORESOURCE_IRQ,
 -      },
 -};
 +#define DEFINE_MXC_NAND_DEVICE(pfx, baseaddr, irq)                    \
 +      static struct resource pfx ## _nand_resources[] = {             \
 +              {                                                       \
 +                      .start = baseaddr,                              \
 +                      .end = baseaddr + SZ_4K - 1,                    \
 +                      .flags = IORESOURCE_MEM,                        \
 +              }, {                                                    \
 +                      .start = irq,                                   \
 +                      .end = irq,                                     \
 +                      .flags = IORESOURCE_IRQ,                        \
 +              },                                                      \
 +      };                                                              \
 +                                                                      \
 +      struct platform_device pfx ## _nand_device = {                  \
 +              .name = "mxc_nand",                                     \
 +              .id = 0,                                                \
 +              .num_resources = ARRAY_SIZE(pfx ## _nand_resources),    \
 +              .resource = pfx ## _nand_resources,                     \
 +      }
  
 -struct platform_device mxc_nand_device = {
 -      .name = "mxc_nand",
 -      .id = 0,
 -      .num_resources = ARRAY_SIZE(mxc_nand_resources),
 -      .resource = mxc_nand_resources,
 -};
 +#ifdef CONFIG_MACH_MX21
 +DEFINE_MXC_NAND_DEVICE(imx21, MX21_NFC_BASE_ADDR, MX21_INT_NANDFC);
 +#endif
 +
 +#ifdef CONFIG_MACH_MX27
 +DEFINE_MXC_NAND_DEVICE(imx27, MX27_NFC_BASE_ADDR, MX27_INT_NANDFC);
 +#endif
  
  /*
   * lcdc:
   */
  static struct resource mxc_fb[] = {
        {
 -              .start = LCDC_BASE_ADDR,
 -              .end   = LCDC_BASE_ADDR + 0xFFF,
 +              .start = MX2x_LCDC_BASE_ADDR,
 +              .end = MX2x_LCDC_BASE_ADDR + SZ_4K - 1,
                .flags = IORESOURCE_MEM,
        }, {
 -              .start = MXC_INT_LCDC,
 -              .end   = MXC_INT_LCDC,
 +              .start = MX2x_INT_LCDC,
 +              .end = MX2x_INT_LCDC,
                .flags = IORESOURCE_IRQ,
        }
  };
@@@ -197,20 -293,20 +198,20 @@@ struct platform_device mxc_fb_device = 
        .num_resources = ARRAY_SIZE(mxc_fb),
        .resource = mxc_fb,
        .dev = {
-               .coherent_dma_mask = 0xFFFFFFFF,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
        },
  };
  
  #ifdef CONFIG_MACH_MX27
  static struct resource mxc_fec_resources[] = {
        {
 -              .start  = FEC_BASE_ADDR,
 -              .end    = FEC_BASE_ADDR + 0xfff,
 -              .flags  = IORESOURCE_MEM,
 +              .start = MX27_FEC_BASE_ADDR,
 +              .end = MX27_FEC_BASE_ADDR + SZ_4K - 1,
 +              .flags = IORESOURCE_MEM,
        }, {
 -              .start  = MXC_INT_FEC,
 -              .end    = MXC_INT_FEC,
 -              .flags  = IORESOURCE_IRQ,
 +              .start = MX27_INT_FEC,
 +              .end = MX27_INT_FEC,
 +              .flags = IORESOURCE_IRQ,
        },
  };
  
@@@ -222,41 -318,55 +223,41 @@@ struct platform_device mxc_fec_device 
  };
  #endif
  
 -static struct resource mxc_i2c_1_resources[] = {
 -      {
 -              .start  = I2C_BASE_ADDR,
 -              .end    = I2C_BASE_ADDR + 0x0fff,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start  = MXC_INT_I2C,
 -              .end    = MXC_INT_I2C,
 -              .flags  = IORESOURCE_IRQ,
 +#define DEFINE_IMX_I2C_DEVICE(n, baseaddr, irq)                               \
 +      static struct resource mxc_i2c_resources ## n[] = {             \
 +              {                                                       \
 +                      .start = baseaddr,                              \
 +                      .end = baseaddr + SZ_4K - 1,                    \
 +                      .flags = IORESOURCE_MEM,                        \
 +              }, {                                                    \
 +                      .start = irq,                                   \
 +                      .end = irq,                                     \
 +                      .flags = IORESOURCE_IRQ,                        \
 +              }                                                       \
 +      };                                                              \
 +                                                                      \
 +      struct platform_device mxc_i2c_device ## n = {                  \
 +              .name = "imx-i2c",                                      \
 +              .id = n,                                                \
 +              .num_resources = ARRAY_SIZE(mxc_i2c_resources ## n),    \
 +              .resource = mxc_i2c_resources ## n,                     \
        }
 -};
  
 -struct platform_device mxc_i2c_device0 = {
 -      .name = "imx-i2c",
 -      .id = 0,
 -      .num_resources = ARRAY_SIZE(mxc_i2c_1_resources),
 -      .resource = mxc_i2c_1_resources,
 -};
 +DEFINE_IMX_I2C_DEVICE(0, MX2x_I2C_BASE_ADDR, MX2x_INT_I2C);
  
  #ifdef CONFIG_MACH_MX27
 -static struct resource mxc_i2c_2_resources[] = {
 -      {
 -              .start  = I2C2_BASE_ADDR,
 -              .end    = I2C2_BASE_ADDR + 0x0fff,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start  = MXC_INT_I2C2,
 -              .end    = MXC_INT_I2C2,
 -              .flags  = IORESOURCE_IRQ,
 -      }
 -};
 -
 -struct platform_device mxc_i2c_device1 = {
 -      .name = "imx-i2c",
 -      .id = 1,
 -      .num_resources = ARRAY_SIZE(mxc_i2c_2_resources),
 -      .resource = mxc_i2c_2_resources,
 -};
 +DEFINE_IMX_I2C_DEVICE(1, MX27_I2C2_BASE_ADDR, MX27_INT_I2C2);
  #endif
  
  static struct resource mxc_pwm_resources[] = {
        {
 -              .start  = PWM_BASE_ADDR,
 -              .end    = PWM_BASE_ADDR + 0x0fff,
 -              .flags  = IORESOURCE_MEM,
 +              .start = MX2x_PWM_BASE_ADDR,
 +              .end = MX2x_PWM_BASE_ADDR + SZ_4K - 1,
 +              .flags = IORESOURCE_MEM,
        }, {
 -              .start   = MXC_INT_PWM,
 -              .end     = MXC_INT_PWM,
 -              .flags   = IORESOURCE_IRQ,
 +              .start = MX2x_INT_PWM,
 +              .end = MX2x_INT_PWM,
 +              .flags = IORESOURCE_IRQ,
        }
  };
  
@@@ -267,67 -377,92 +268,64 @@@ struct platform_device mxc_pwm_device 
        .resource = mxc_pwm_resources,
  };
  
--/*
-- * Resource definition for the MXC SDHC
-- */
 -static struct resource mxc_sdhc1_resources[] = {
 -      {
 -              .start = SDHC1_BASE_ADDR,
 -              .end   = SDHC1_BASE_ADDR + SZ_4K - 1,
 -              .flags = IORESOURCE_MEM,
 -      }, {
 -              .start = MXC_INT_SDHC1,
 -              .end   = MXC_INT_SDHC1,
 -              .flags = IORESOURCE_IRQ,
 -      }, {
 -              .start  = DMA_REQ_SDHC1,
 -              .end    = DMA_REQ_SDHC1,
 -              .flags  = IORESOURCE_DMA,
 -      },
 -};
 -
 -static u64 mxc_sdhc1_dmamask = DMA_BIT_MASK(32);
 -
 -struct platform_device mxc_sdhc_device0 = {
 -      .name           = "mxc-mmc",
 -      .id             = 0,
 -      .dev            = {
 -              .dma_mask = &mxc_sdhc1_dmamask,
 -              .coherent_dma_mask = DMA_BIT_MASK(32),
 -      },
 -      .num_resources  = ARRAY_SIZE(mxc_sdhc1_resources),
 -      .resource       = mxc_sdhc1_resources,
 -};
 -
 -static struct resource mxc_sdhc2_resources[] = {
 -      {
 -              .start = SDHC2_BASE_ADDR,
 -              .end   = SDHC2_BASE_ADDR + SZ_4K - 1,
 -              .flags = IORESOURCE_MEM,
 -      }, {
 -              .start = MXC_INT_SDHC2,
 -              .end   = MXC_INT_SDHC2,
 -              .flags = IORESOURCE_IRQ,
 -      }, {
 -              .start  = DMA_REQ_SDHC2,
 -              .end    = DMA_REQ_SDHC2,
 -              .flags  = IORESOURCE_DMA,
 -      },
 -};
 -
 -static u64 mxc_sdhc2_dmamask = DMA_BIT_MASK(32);
 +#define DEFINE_MXC_MMC_DEVICE(n, baseaddr, irq, dmareq)                       \
 +      static struct resource mxc_sdhc_resources ## n[] = {            \
 +              {                                                       \
 +                      .start = baseaddr,                              \
 +                      .end = baseaddr + SZ_4K - 1,                    \
 +                      .flags = IORESOURCE_MEM,                        \
 +              }, {                                                    \
 +                      .start = irq,                                   \
 +                      .end = irq,                                     \
 +                      .flags = IORESOURCE_IRQ,                        \
 +              }, {                                                    \
 +                      .start = dmareq,                                \
 +                      .end = dmareq,                                  \
 +                      .flags = IORESOURCE_DMA,                        \
 +              },                                                      \
 +      };                                                              \
 +                                                                      \
-       static u64 mxc_sdhc ## n ## _dmamask = 0xffffffffUL;            \
++      static u64 mxc_sdhc ## n ## _dmamask = DMA_BIT_MASK(32);        \
 +                                                                      \
 +      struct platform_device mxc_sdhc_device ## n = {                 \
 +              .name = "mxc-mmc",                                      \
 +              .id = n,                                                \
 +              .dev = {                                                \
 +                      .dma_mask = &mxc_sdhc ## n ## _dmamask,         \
-                       .coherent_dma_mask = 0xffffffff,                \
++                      .coherent_dma_mask = DMA_BIT_MASK(32),          \
 +              },                                                      \
 +              .num_resources = ARRAY_SIZE(mxc_sdhc_resources ## n),   \
 +              .resource = mxc_sdhc_resources ## n,            \
 +      }
  
 -struct platform_device mxc_sdhc_device1 = {
 -      .name           = "mxc-mmc",
 -      .id             = 1,
 -      .dev            = {
 -              .dma_mask = &mxc_sdhc2_dmamask,
 -              .coherent_dma_mask = DMA_BIT_MASK(32),
 -      },
 -      .num_resources  = ARRAY_SIZE(mxc_sdhc2_resources),
 -      .resource       = mxc_sdhc2_resources,
 -};
 +DEFINE_MXC_MMC_DEVICE(0, MX2x_SDHC1_BASE_ADDR, MX2x_INT_SDHC1, MX2x_DMA_REQ_SDHC1);
 +DEFINE_MXC_MMC_DEVICE(1, MX2x_SDHC2_BASE_ADDR, MX2x_INT_SDHC2, MX2x_DMA_REQ_SDHC2);
  
  #ifdef CONFIG_MACH_MX27
  static struct resource otg_resources[] = {
        {
 -              .start  = OTG_BASE_ADDR,
 -              .end    = OTG_BASE_ADDR + 0x1ff,
 -              .flags  = IORESOURCE_MEM,
 +              .start = MX27_USBOTG_BASE_ADDR,
 +              .end = MX27_USBOTG_BASE_ADDR + 0x1ff,
 +              .flags = IORESOURCE_MEM,
        }, {
 -              .start  = MXC_INT_USB3,
 -              .end    = MXC_INT_USB3,
 -              .flags  = IORESOURCE_IRQ,
 +              .start = MX27_INT_USB3,
 +              .end = MX27_INT_USB3,
 +              .flags = IORESOURCE_IRQ,
        },
  };
  
- static u64 otg_dmamask = 0xffffffffUL;
+ static u64 otg_dmamask = DMA_BIT_MASK(32);
  
  /* OTG gadget device */
  struct platform_device mxc_otg_udc_device = {
-       .name = "fsl-usb2-udc",
-       .id = -1,
-       .dev = {
-               .dma_mask = &otg_dmamask,
-               .coherent_dma_mask = 0xffffffffUL,
+       .name           = "fsl-usb2-udc",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = &otg_dmamask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
        },
-       .resource = otg_resources,
-       .num_resources = ARRAY_SIZE(otg_resources),
+       .resource       = otg_resources,
+       .num_resources  = ARRAY_SIZE(otg_resources),
  };
  
  /* OTG host */
@@@ -335,7 -470,7 +333,7 @@@ struct platform_device mxc_otg_host = 
        .name = "mxc-ehci",
        .id = 0,
        .dev = {
-               .coherent_dma_mask = 0xffffffff,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
                .dma_mask = &otg_dmamask,
        },
        .resource = otg_resources,
  
  /* USB host 1 */
  
- static u64 usbh1_dmamask = 0xffffffffUL;
+ static u64 usbh1_dmamask = DMA_BIT_MASK(32);
  
  static struct resource mxc_usbh1_resources[] = {
        {
 -              .start = OTG_BASE_ADDR + 0x200,
 -              .end = OTG_BASE_ADDR + 0x3ff,
 +              .start = MX27_USBOTG_BASE_ADDR + 0x200,
 +              .end = MX27_USBOTG_BASE_ADDR + 0x3ff,
                .flags = IORESOURCE_MEM,
        }, {
 -              .start = MXC_INT_USB1,
 -              .end = MXC_INT_USB1,
 +              .start = MX27_INT_USB1,
 +              .end = MX27_INT_USB1,
                .flags = IORESOURCE_IRQ,
        },
  };
@@@ -362,7 -497,7 +360,7 @@@ struct platform_device mxc_usbh1 = 
        .name = "mxc-ehci",
        .id = 1,
        .dev = {
-               .coherent_dma_mask = 0xffffffff,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
                .dma_mask = &usbh1_dmamask,
        },
        .resource = mxc_usbh1_resources,
  };
  
  /* USB host 2 */
- static u64 usbh2_dmamask = 0xffffffffUL;
+ static u64 usbh2_dmamask = DMA_BIT_MASK(32);
  
  static struct resource mxc_usbh2_resources[] = {
        {
 -              .start = OTG_BASE_ADDR + 0x400,
 -              .end = OTG_BASE_ADDR + 0x5ff,
 +              .start = MX27_USBOTG_BASE_ADDR + 0x400,
 +              .end = MX27_USBOTG_BASE_ADDR + 0x5ff,
                .flags = IORESOURCE_MEM,
        }, {
 -              .start = MXC_INT_USB2,
 -              .end = MXC_INT_USB2,
 +              .start = MX27_INT_USB2,
 +              .end = MX27_INT_USB2,
                .flags = IORESOURCE_IRQ,
        },
  };
@@@ -388,7 -523,7 +386,7 @@@ struct platform_device mxc_usbh2 = 
        .name = "mxc-ehci",
        .id = 2,
        .dev = {
-               .coherent_dma_mask = 0xffffffff,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
                .dma_mask = &usbh2_dmamask,
        },
        .resource = mxc_usbh2_resources,
  };
  #endif
  
 -static struct resource imx_ssi_resources0[] = {
 -      {
 -              .start  = SSI1_BASE_ADDR,
 -              .end    = SSI1_BASE_ADDR + 0x6F,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start  = MXC_INT_SSI1,
 -              .end    = MXC_INT_SSI1,
 -              .flags  = IORESOURCE_IRQ,
 -      }, {
 -              .name   = "tx0",
 -              .start  = DMA_REQ_SSI1_TX0,
 -              .end    = DMA_REQ_SSI1_TX0,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "rx0",
 -              .start  = DMA_REQ_SSI1_RX0,
 -              .end    = DMA_REQ_SSI1_RX0,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "tx1",
 -              .start  = DMA_REQ_SSI1_TX1,
 -              .end    = DMA_REQ_SSI1_TX1,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "rx1",
 -              .start  = DMA_REQ_SSI1_RX1,
 -              .end    = DMA_REQ_SSI1_RX1,
 -              .flags  = IORESOURCE_DMA,
 -      },
 -};
 -
 -static struct resource imx_ssi_resources1[] = {
 -      {
 -              .start  = SSI2_BASE_ADDR,
 -              .end    = SSI2_BASE_ADDR + 0x6F,
 -              .flags  = IORESOURCE_MEM,
 -      }, {
 -              .start  = MXC_INT_SSI2,
 -              .end    = MXC_INT_SSI2,
 -              .flags  = IORESOURCE_IRQ,
 -      }, {
 -              .name   = "tx0",
 -              .start  = DMA_REQ_SSI2_TX0,
 -              .end    = DMA_REQ_SSI2_TX0,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "rx0",
 -              .start  = DMA_REQ_SSI2_RX0,
 -              .end    = DMA_REQ_SSI2_RX0,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "tx1",
 -              .start  = DMA_REQ_SSI2_TX1,
 -              .end    = DMA_REQ_SSI2_TX1,
 -              .flags  = IORESOURCE_DMA,
 -      }, {
 -              .name   = "rx1",
 -              .start  = DMA_REQ_SSI2_RX1,
 -              .end    = DMA_REQ_SSI2_RX1,
 -              .flags  = IORESOURCE_DMA,
 -      },
 -};
 +#define DEFINE_IMX_SSI_DMARES(_name, ssin, suffix)                    \
 +      {                                                               \
 +              .name = _name,                                          \
 +              .start = MX2x_DMA_REQ_SSI ## ssin ## _ ## suffix,       \
 +              .end = MX2x_DMA_REQ_SSI ## ssin ## _ ## suffix,         \
 +              .flags = IORESOURCE_DMA,                                \
 +      }
  
 -struct platform_device imx_ssi_device0 = {
 -      .name = "imx-ssi",
 -      .id = 0,
 -      .num_resources = ARRAY_SIZE(imx_ssi_resources0),
 -      .resource = imx_ssi_resources0,
 -};
 +#define DEFINE_IMX_SSI_DEVICE(n, ssin, baseaddr, irq)                 \
 +      static struct resource imx_ssi_resources ## n[] = {             \
 +              {                                                       \
 +                      .start = MX2x_SSI ## ssin ## _BASE_ADDR,        \
 +                      .end = MX2x_SSI ## ssin ## _BASE_ADDR + 0x6f,   \
 +                      .flags = IORESOURCE_MEM,                        \
 +              }, {                                                    \
 +                      .start = MX2x_INT_SSI1,                         \
 +                      .end = MX2x_INT_SSI1,                           \
 +                      .flags = IORESOURCE_IRQ,                        \
 +              },                                                      \
 +              DEFINE_IMX_SSI_DMARES("tx0", ssin, TX0),                \
 +              DEFINE_IMX_SSI_DMARES("rx0", ssin, RX0),                \
 +              DEFINE_IMX_SSI_DMARES("tx1", ssin, TX1),                \
 +              DEFINE_IMX_SSI_DMARES("rx1", ssin, RX1),                \
 +      };                                                              \
 +                                                                      \
 +      struct platform_device imx_ssi_device ## n = {                  \
 +              .name = "imx-ssi",                                      \
 +              .id = n,                                                \
 +              .num_resources = ARRAY_SIZE(imx_ssi_resources ## n),    \
 +              .resource = imx_ssi_resources ## n,                     \
 +      }
  
 -struct platform_device imx_ssi_device1 = {
 -      .name = "imx-ssi",
 -      .id = 1,
 -      .num_resources = ARRAY_SIZE(imx_ssi_resources1),
 -      .resource = imx_ssi_resources1,
 -};
 +DEFINE_IMX_SSI_DEVICE(0, 1, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1);
 +DEFINE_IMX_SSI_DEVICE(1, 2, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1);
  
  /* GPIO port description */
 -static struct mxc_gpio_port imx_gpio_ports[] = {
 -      {
 -              .chip.label = "gpio-0",
 -              .irq = MXC_INT_GPIO,
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START,
 -      }, {
 -              .chip.label = "gpio-1",
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x100),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START + 32,
 -      }, {
 -              .chip.label = "gpio-2",
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x200),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START + 64,
 -      }, {
 -              .chip.label = "gpio-3",
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x300),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START + 96,
 -      }, {
 -              .chip.label = "gpio-4",
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x400),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START + 128,
 -      }, {
 -              .chip.label = "gpio-5",
 -              .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x500),
 -              .virtual_irq_start = MXC_GPIO_IRQ_START + 160,
 +#define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq)                                \
 +      {                                                               \
 +              .chip.label = "gpio-" #n,                               \
 +              .irq = _irq,                                            \
 +              .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR +        \
 +                              n * 0x100),                             \
 +              .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32,       \
        }
 -};
 +
 +#define DEFINE_MXC_GPIO_PORT(SOC, n)                                  \
 +      {                                                               \
 +              .chip.label = "gpio-" #n,                               \
 +              .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR +        \
 +                              n * 0x100),                             \
 +              .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32,       \
 +      }
 +
 +#define DEFINE_MXC_GPIO_PORTS(SOC, pfx)                                       \
 +      static struct mxc_gpio_port pfx ## _gpio_ports[] = {            \
 +              DEFINE_MXC_GPIO_PORT_IRQ(SOC, 0, SOC ## _INT_GPIO),     \
 +              DEFINE_MXC_GPIO_PORT(SOC, 1),                           \
 +              DEFINE_MXC_GPIO_PORT(SOC, 2),                           \
 +              DEFINE_MXC_GPIO_PORT(SOC, 3),                           \
 +              DEFINE_MXC_GPIO_PORT(SOC, 4),                           \
 +              DEFINE_MXC_GPIO_PORT(SOC, 5),                           \
 +      }
 +
 +#ifdef CONFIG_MACH_MX21
 +DEFINE_MXC_GPIO_PORTS(MX21, imx21);
 +#endif
 +
 +#ifdef CONFIG_MACH_MX27
 +DEFINE_MXC_GPIO_PORTS(MX27, imx27);
 +#endif
  
  int __init mxc_register_gpios(void)
  {
 -      return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
 +#ifdef CONFIG_MACH_MX21
 +      if (cpu_is_mx21())
 +              return mxc_gpio_init(imx21_gpio_ports, ARRAY_SIZE(imx21_gpio_ports));
 +      else
 +#endif
 +#ifdef CONFIG_MACH_MX27
 +      if (cpu_is_mx27())
 +              return mxc_gpio_init(imx27_gpio_ports, ARRAY_SIZE(imx27_gpio_ports));
 +      else
 +#endif
 +              return 0;
  }
 -              .start  = USBOTG_BASE_ADDR,
 -              .end    = USBOTG_BASE_ADDR + 0x1FFF,
+ #ifdef CONFIG_MACH_MX21
+ static struct resource mx21_usbhc_resources[] = {
+       {
 -              .start          = MXC_INT_USBHOST,
 -              .end            = MXC_INT_USBHOST,
++              .start  = MX21_BASE_ADDR,
++              .end    = MX21_BASE_ADDR + 0x1FFF,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
++              .start          = MX21_INT_USBHOST,
++              .end            = MX21_INT_USBHOST,
+               .flags          = IORESOURCE_IRQ,
+       },
+ };
+ struct platform_device mx21_usbhc_device = {
+       .name           = "imx21-hcd",
+       .id             = 0,
+       .dev            = {
+               .dma_mask = &mx21_usbhc_device.dev.coherent_dma_mask,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
+       },
+       .num_resources  = ARRAY_SIZE(mx21_usbhc_resources),
+       .resource       = mx21_usbhc_resources,
+ };
+ #endif
index f15df2aaae4d0e5efe231a21dbf48c8bcb38ab8c,f12694b073692f63869e596f3cc2ccaa0d662811..84ed51380174ebd6cadaef60f19245ede9df7782
@@@ -1,10 -1,8 +1,10 @@@
  extern struct platform_device mxc_gpt1;
  extern struct platform_device mxc_gpt2;
 +#ifdef CONFIG_MACH_MX27
  extern struct platform_device mxc_gpt3;
  extern struct platform_device mxc_gpt4;
  extern struct platform_device mxc_gpt5;
 +#endif
  extern struct platform_device mxc_wdt;
  extern struct platform_device mxc_uart_device0;
  extern struct platform_device mxc_uart_device1;
@@@ -13,19 -11,12 +13,19 @@@ extern struct platform_device mxc_uart_
  extern struct platform_device mxc_uart_device4;
  extern struct platform_device mxc_uart_device5;
  extern struct platform_device mxc_w1_master_device;
 -extern struct platform_device mxc_nand_device;
 +#ifdef CONFIG_MACH_MX21
 +extern struct platform_device imx21_nand_device;
 +#endif
 +#ifdef CONFIG_MACH_MX27
 +extern struct platform_device imx27_nand_device;
 +#endif
  extern struct platform_device mxc_fb_device;
  extern struct platform_device mxc_fec_device;
  extern struct platform_device mxc_pwm_device;
  extern struct platform_device mxc_i2c_device0;
 +#ifdef CONFIG_MACH_MX27
  extern struct platform_device mxc_i2c_device1;
 +#endif
  extern struct platform_device mxc_sdhc_device0;
  extern struct platform_device mxc_sdhc_device1;
  extern struct platform_device mxc_otg_udc_device;
@@@ -34,8 -25,7 +34,9 @@@ extern struct platform_device mxc_usbh1
  extern struct platform_device mxc_usbh2;
  extern struct platform_device mxc_spi_device0;
  extern struct platform_device mxc_spi_device1;
 +#ifdef CONFIG_MACH_MX27
  extern struct platform_device mxc_spi_device2;
 +#endif
+ extern struct platform_device mx21_usbhc_device;
  extern struct platform_device imx_ssi_device0;
  extern struct platform_device imx_ssi_device1;
index 56bf958d8c34e9985e22b2767b584a5bb55879cc,37e1359ad0c0596ac8193e7d1263c11550250c4e..155014993b13cc18d7724ca5d3d03604c7a103e1
@@@ -124,11 -124,6 +124,11 @@@ static unsigned long get_rate_gpt(struc
        return get_rate_per(5);
  }
  
 +static unsigned long get_rate_lcdc(struct clk *clk)
 +{
 +      return get_rate_per(7);
 +}
 +
  static unsigned long get_rate_otg(struct clk *clk)
  {
        return 48000000; /* FIXME */
@@@ -172,8 -167,6 +172,8 @@@ DEFINE_CLOCK(cspi1_clk,  0, CCM_CGCR1
  DEFINE_CLOCK(cspi2_clk,  0, CCM_CGCR1,  6, get_rate_ipg, NULL, NULL);
  DEFINE_CLOCK(cspi3_clk,  0, CCM_CGCR1,  7, get_rate_ipg, NULL, NULL);
  DEFINE_CLOCK(fec_ahb_clk, 0, CCM_CGCR0, 23, NULL,      NULL, NULL);
 +DEFINE_CLOCK(lcdc_ahb_clk, 0, CCM_CGCR0, 24, NULL,     NULL, NULL);
 +DEFINE_CLOCK(lcdc_per_clk, 0, CCM_CGCR0,  7, NULL,     NULL, &lcdc_ahb_clk);
  DEFINE_CLOCK(uart1_clk,  0, CCM_CGCR2, 14, get_rate_uart, NULL, &uart_per_clk);
  DEFINE_CLOCK(uart2_clk,  0, CCM_CGCR2, 15, get_rate_uart, NULL, &uart_per_clk);
  DEFINE_CLOCK(uart3_clk,  0, CCM_CGCR2, 16, get_rate_uart, NULL, &uart_per_clk);
@@@ -189,8 -182,6 +189,8 @@@ DEFINE_CLOCK(kpp_clk,       0, CCM_CGCR1, 28
  DEFINE_CLOCK(tsc_clk,  0, CCM_CGCR2, 13, get_rate_ipg, NULL, NULL);
  DEFINE_CLOCK(i2c_clk,  0, CCM_CGCR0,  6, get_rate_i2c, NULL, NULL);
  DEFINE_CLOCK(fec_clk,  0, CCM_CGCR1, 15, get_rate_ipg, NULL, &fec_ahb_clk);
 +DEFINE_CLOCK(dryice_clk, 0, CCM_CGCR1,  8, get_rate_ipg, NULL, NULL);
 +DEFINE_CLOCK(lcdc_clk,         0, CCM_CGCR1, 29, get_rate_lcdc, NULL, &lcdc_per_clk);
  
  #define _REGISTER_CLOCK(d, n, c)      \
        {                               \
@@@ -223,16 -214,11 +223,13 @@@ static struct clk_lookup lookups[] = 
        _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk)
        _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk)
        _REGISTER_CLOCK("fec.0", NULL, fec_clk)
 +      _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk)
 +      _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk)
  };
  
  int __init mx25_clocks_init(void)
  {
-       int i;
-       for (i = 0; i < ARRAY_SIZE(lookups); i++)
-               clkdev_add(&lookups[i]);
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
  
        /* Turn off all clocks except the ones we need to survive, namely:
         * EMI, GPIO1-3 (CCM_CGCR1[18:16]), GPT1, IOMUXC (CCM_CGCR1[27]), IIM,
        __raw_writel((0xf << 16) | (3 << 26), CRM_BASE + CCM_CGCR1);
        __raw_writel((1 << 5), CRM_BASE + CCM_CGCR2);
  
 +      /* Clock source for lcdc is upll */
 +      __raw_writel(__raw_readl(CRM_BASE+0x64) | (1 << 7), CRM_BASE + 0x64);
 +
        mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);
  
        return 0;
index d22a66f502a86a30c512f4c0a6d0190a8674e1d0,b5c39a016db78a6459a4edc8b4f5153db6f45582..80dba9966b5e54a1f3d40bd5fbe82b3071b13772
@@@ -578,12 -578,10 +578,10 @@@ static struct clk_lookup lookups[] = 
  int __init mx31_clocks_init(unsigned long fref)
  {
        u32 reg;
-       int i;
  
        ckih_rate = fref;
  
-       for (i = 0; i < ARRAY_SIZE(lookups); i++)
-               clkdev_add(&lookups[i]);
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
  
        /* change the csi_clk parent if necessary */
        reg = __raw_readl(MXC_CCM_CCMR);
  
        mx31_read_cpu_rev();
  
 -      if (mx31_revision() >= CHIP_REV_2_0) {
 +      if (mx31_revision() >= MX31_CHIP_REV_2_0) {
                reg = __raw_readl(MXC_CCM_PMCR1);
                /* No PLL restart on DVFS switch; enable auto EMI handshake */
                reg |= MXC_CCM_PMCR1_PLLRDIS | MXC_CCM_PMCR1_EMIRQ_EN;
                __raw_writel(reg, MXC_CCM_PMCR1);
        }
  
 -      mxc_timer_init(&ipg_clk, IO_ADDRESS(GPT1_BASE_ADDR), MXC_INT_GPT);
 +      mxc_timer_init(&ipg_clk, MX31_IO_ADDRESS(MX31_GPT1_BASE_ADDR),
 +                      MX31_INT_GPT);
  
        return 0;
  }
index 07d630ebc2865308efa8dc14306ade350bc11dc7,f3f41fa4f21bd4541400082519b5b449a8bfa696..9f3e943e22326cf0b0f8024194414de457a66356
@@@ -28,7 -28,7 +28,7 @@@
  #include <mach/hardware.h>
  #include <mach/common.h>
  
 -#define CCM_BASE      IO_ADDRESS(CCM_BASE_ADDR)
 +#define CCM_BASE      MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR)
  
  #define CCM_CCMR        0x00
  #define CCM_PDR0        0x04
@@@ -485,15 -485,13 +485,13 @@@ static struct clk_lookup lookups[] = 
  
  int __init mx35_clocks_init()
  {
-       int i;
        unsigned int ll = 0;
  
  #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC)
        ll = (3 << 16);
  #endif
  
-       for (i = 0; i < ARRAY_SIZE(lookups); i++)
-               clkdev_add(&lookups[i]);
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
  
        /* Turn off all clocks except the ones we need to survive, namely:
         * EMI, GPIO1/2/3, GPT, IOMUX, MAX and eventually uart
        __raw_writel((3 << 26) | ll, CCM_BASE + CCM_CGR2);
        __raw_writel(0, CCM_BASE + CCM_CGR3);
  
 -      mxc_timer_init(&gpt_clk, IO_ADDRESS(GPT1_BASE_ADDR), MXC_INT_GPT);
 +      mxc_timer_init(&gpt_clk,
 +                      MX35_IO_ADDRESS(MX35_GPT1_BASE_ADDR), MX35_INT_GPT);
  
        return 0;
  }
index 7c53543ba2de169e9e0c996caf2b645dfdc1bef1,d783123e2d48e483917f88614dea852d74040504..0af36177ff085c92f34cd729bd5775f25d948a2f
@@@ -40,25 -40,6 +40,25 @@@ void pxa27x_clear_otgph(void
  }
  EXPORT_SYMBOL(pxa27x_clear_otgph);
  
 +static unsigned long ac97_reset_config[] = {
 +      GPIO95_AC97_nRESET,
 +      GPIO95_GPIO,
 +      GPIO113_AC97_nRESET,
 +      GPIO113_GPIO,
 +};
 +
 +void pxa27x_assert_ac97reset(int reset_gpio, int on)
 +{
 +      if (reset_gpio == 113)
 +              pxa2xx_mfp_config(on ? &ac97_reset_config[0] :
 +                                     &ac97_reset_config[1], 1);
 +
 +      if (reset_gpio == 95)
 +              pxa2xx_mfp_config(on ? &ac97_reset_config[2] :
 +                                     &ac97_reset_config[3], 1);
 +}
 +EXPORT_SYMBOL_GPL(pxa27x_assert_ac97reset);
 +
  /* Crystal clock: 13MHz */
  #define BASE_CLK      13000000
  
@@@ -411,7 -392,7 +411,7 @@@ static int __init pxa27x_init(void
  
                reset_status = RCSR;
  
-               clks_register(pxa27x_clkregs, ARRAY_SIZE(pxa27x_clkregs));
+               clkdev_add_table(pxa27x_clkregs, ARRAY_SIZE(pxa27x_clkregs));
  
                if ((ret = pxa_init_dma(IRQ_DMA, 32)))
                        return ret;
index 61b95158a437b39c5a38691ca1684ce133a28f02,0000000000000000000000000000000000000000..be9df79903ed508e14f994bfcd9ac57fa3e6f237
mode 100644,000000..100644
--- /dev/null
@@@ -1,17 -1,0 +1,17 @@@
- #define VMALLOC_END     (0xE0000000)
 +/* arch/arm/mach-s5pc100/include/mach/vmalloc.h
 + *
 + * Copyright 2010 Ben Dooks <ben-linux@fluff.org>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + *
 + * S3C6400 vmalloc definition
 +*/
 +
 +#ifndef __ASM_ARCH_VMALLOC_H
 +#define __ASM_ARCH_VMALLOC_H
 +
++#define VMALLOC_END     (0xe0000000UL)
 +
 +#endif /* __ASM_ARCH_VMALLOC_H */
index 8aec853310a7661f4e65991a9fc4a486af012122,0000000000000000000000000000000000000000..7872f5c3dfc24271fb1853d8a6e86a7ad79ff051
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,42 @@@
-       .macro addruart, rx
 +/* linux/arch/arm/mach-s5pv210/include/mach/debug-macro.S
 + *
 + * Copyright (c) 2010 Samsung Electronics Co., Ltd.
 + *            http://www.samsung.com/
 + *
 + * Based on arch/arm/mach-s3c6400/include/mach/debug-macro.S
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 +*/
 +
 +/* pull in the relevant register and map files. */
 +
 +#include <mach/map.h>
 +#include <plat/regs-serial.h>
 +
 +      /* note, for the boot process to work we have to keep the UART
 +       * virtual address aligned to an 1MiB boundary for the L1
 +       * mapping the head code makes. We keep the UART virtual address
 +       * aligned and add in the offset when we load the value here.
 +       */
 +
++      .macro addruart, rx, tmp
 +              mrc     p15, 0, \rx, c1, c0
 +              tst     \rx, #1
 +              ldreq   \rx, = S3C_PA_UART
 +              ldrne   \rx, = S3C_VA_UART
 +#if CONFIG_DEBUG_S3C_UART != 0
 +              add     \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
 +#endif
 +      .endm
 +
 +#define fifo_full fifo_full_s5pv210
 +#define fifo_level fifo_level_s5pv210
 +
 +/* include the reset of the code which will do the work, we're only
 + * compiling for a single cpu processor type so the default of s3c2440
 + * will be fine with us.
 + */
 +
 +#include <plat/debug-macro.S>
index a72a5e4ca20e7a37ad0bc35abfbbead9fe4802c2,6cee38df58b27c145841a571e35e645175189ad3..895bc3c5e0c0a5f709018a9f855536961d1a3da6
@@@ -5,15 -5,15 +5,19 @@@
  # Common support
  obj-y := irq.o clock.o gpio.o time.o devices.o cpu.o system.o
  
 -obj-$(CONFIG_ARCH_MX1) += iomux-mx1-mx2.o dma-mx1-mx2.o
 -obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o
 +# MX51 uses the TZIC interrupt controller, older platforms use AVIC (irq.o)
 +obj-$(CONFIG_MXC_TZIC) += tzic.o
 +
 +obj-$(CONFIG_ARCH_MX1) += dma-mx1-mx2.o
 +obj-$(CONFIG_ARCH_MX2) += dma-mx1-mx2.o
 +obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o
  obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o
  obj-$(CONFIG_MXC_PWM)  += pwm.o
  obj-$(CONFIG_USB_EHCI_MXC) += ehci.o
  obj-$(CONFIG_MXC_ULPI) += ulpi.o
  obj-$(CONFIG_ARCH_MXC_AUDMUX_V1) += audmux-v1.o
  obj-$(CONFIG_ARCH_MXC_AUDMUX_V2) += audmux-v2.o
+ ifdef CONFIG_SND_IMX_SOC
+ obj-y += ssi-fiq.o
+ obj-y += ssi-fiq-ksym.o
+ endif
index 133d66bfb533c83559a5452985b2ecdea760bc74,5a6ae1b9e1e8abe4533e6d61de682042c33820df..0b6e11eaeb8ca0b2d64c847810a44fbc96355909
@@@ -10,7 -10,6 +10,7 @@@
   * published by the Free Software Foundation.
   *
   */
 +#define IMX_NEEDS_DEPRECATED_SYMBOLS
  
  #ifdef CONFIG_ARCH_MX1
  #include <mach/mx1.h>
  #define UART_VADDR    AIPS1_IO_ADDRESS(UART1_BASE_ADDR)
  #endif
  
 +#ifdef CONFIG_ARCH_MX5
 +#ifdef UART_PADDR
 +#error "CONFIG_DEBUG_LL is incompatible with multiple archs"
 +#endif
 +#include <mach/mx51.h>
 +#define UART_PADDR    MX51_UART1_BASE_ADDR
 +#define UART_VADDR    MX51_AIPS1_IO_ADDRESS(MX51_UART1_BASE_ADDR)
 +#endif
 +
  #ifdef CONFIG_ARCH_MXC91231
  #ifdef UART_PADDR
  #error "CONFIG_DEBUG_LL is incompatible with multiple archs"
  #endif
  #include <mach/mxc91231.h>
  #define UART_PADDR    MXC91231_UART2_BASE_ADDR
 -#define UART_VADDR    MXC91231_AIPS1_IO_ADDRESS(MXC91231_UART2_BASE_ADDR)
 +#define UART_VADDR    MXC91231_IO_ADDRESS(MXC91231_UART2_BASE_ADDR)
  #endif
-               .macro  addruart,rx
+               .macro  addruart, rx, tmp
                mrc     p15, 0, \rx, c1, c0
                tst     \rx, #1                 @ MMU enabled?
                ldreq   \rx, =UART_PADDR        @ physical
diff --combined drivers/Makefile
index e94cb1b796333e0b6ad666e537b79e3d1ac9bb3e,81e36596b1e91fe4b7670c42cd6bd98070bd208a..34f1e1064dbc3bdfd3b3aff8f2667b228fe2de3d
@@@ -99,7 -99,6 +99,7 @@@ obj-$(CONFIG_SGI_SN)          += sn
  obj-y                         += firmware/
  obj-$(CONFIG_CRYPTO)          += crypto/
  obj-$(CONFIG_SUPERH)          += sh/
 +obj-$(CONFIG_ARCH_SHMOBILE)   += sh/
  obj-$(CONFIG_GENERIC_TIME)    += clocksource/
  obj-$(CONFIG_DMA_ENGINE)      += dma/
  obj-$(CONFIG_DCA)             += dca/
@@@ -107,6 -106,7 +107,7 @@@ obj-$(CONFIG_HID)          += hid
  obj-$(CONFIG_PPC_PS3)         += ps3/
  obj-$(CONFIG_OF)              += of/
  obj-$(CONFIG_SSB)             += ssb/
+ obj-$(CONFIG_VHOST_NET)               += vhost/
  obj-$(CONFIG_VIRTIO)          += virtio/
  obj-$(CONFIG_VLYNQ)           += vlynq/
  obj-$(CONFIG_STAGING)         += staging/
diff --combined drivers/mtd/nand/Kconfig
index 4f99274b24c25ae67ef269a40a6a33ba3ec76f8f,bb6465604235cda354d566c21dcfbbb24a70c80b..1157d5679e66fc5d33eddab6964f3be40708d9f9
@@@ -444,7 -444,7 +444,7 @@@ config MTD_NAND_FSL_UP
  
  config MTD_NAND_MXC
        tristate "MXC NAND support"
 -      depends on ARCH_MX2 || ARCH_MX3
 +      depends on ARCH_MX2 || ARCH_MX25 || ARCH_MX3
        help
          This enables the driver for the NAND flash controller on the
          MXC processors.
@@@ -457,10 -457,10 +457,10 @@@ config MTD_NAND_NOMADI
  
  config MTD_NAND_SH_FLCTL
        tristate "Support for NAND on Renesas SuperH FLCTL"
-       depends on MTD_NAND && SUPERH && CPU_SUBTYPE_SH7723
+       depends on MTD_NAND && SUPERH
        help
          Several Renesas SuperH CPU has FLCTL. This option enables support
-         for NAND Flash using FLCTL. This driver support SH7723.
+         for NAND Flash using FLCTL.
  
  config MTD_NAND_DAVINCI
          tristate "Support NAND on DaVinci SoC"
diff --combined drivers/serial/Kconfig
index 5351848cfff731342284906f639b3599c43cfbfb,d6ff73395623cbe97d59b803fa6528b43002c8e2..f55c49475a8cdd307ebb11bdfb275b5f1b7dc3d0
@@@ -447,7 -447,7 +447,7 @@@ config SERIAL_CLPS711X_CONSOL
  
  config SERIAL_SAMSUNG
        tristate "Samsung SoC serial support"
 -      depends on ARM && PLAT_S3C
 +      depends on ARM && PLAT_SAMSUNG
        select SERIAL_CORE
        help
          Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
          provide all of these ports, depending on how the serial port
          pins are configured.
  
 +config SERIAL_SAMSUNG_UARTS_4
 +      bool
 +      depends on ARM && PLAT_SAMSUNG
 +      default y if CPU_S3C2443
 +      help
 +        Internal node for the common case of 4 Samsung compatible UARTs
 +
  config SERIAL_SAMSUNG_UARTS
        int
 -      depends on ARM && PLAT_S3C
 +      depends on ARM && PLAT_SAMSUNG
        default 2 if ARCH_S3C2400
 -      default 4 if ARCH_S5PC1XX || ARCH_S3C64XX || CPU_S3C2443
 +      default 4 if SERIAL_SAMSUNG_UARTS_4
        default 3
        help
          Select the number of available UART ports for the Samsung S3C
@@@ -533,30 -526,20 +533,30 @@@ config SERIAL_S3C24A
          Serial port support for the Samsung S3C24A0 SoC
  
  config SERIAL_S3C6400
 -      tristate "Samsung S3C6400/S3C6410 Serial port support"
 -      depends on SERIAL_SAMSUNG && (CPU_S3C6400 || CPU_S3C6410)
 +      tristate "Samsung S3C6400/S3C6410/S5P6440 Seria port support"
 +      depends on SERIAL_SAMSUNG && (CPU_S3C6400 || CPU_S3C6410 || CPU_S5P6440)
 +      select SERIAL_SAMSUNG_UARTS_4
        default y
        help
 -        Serial port support for the Samsung S3C6400 and S3C6410
 +        Serial port support for the Samsung S3C6400, S3C6410 and S5P6440
          SoCs
  
  config SERIAL_S5PC100
        tristate "Samsung S5PC100 Serial port support"
        depends on SERIAL_SAMSUNG && CPU_S5PC100
 +      select SERIAL_SAMSUNG_UARTS_4
        default y
        help
          Serial port support for the Samsung S5PC100 SoCs
  
 +config SERIAL_S5PV210
 +      tristate "Samsung S5PV210 Serial port support"
 +      depends on SERIAL_SAMSUNG && (CPU_S5PV210 || CPU_S5P6442)
 +      select SERIAL_SAMSUNG_UARTS_4 if CPU_S5PV210
 +      default y
 +      help
 +        Serial port support for Samsung's S5P Family of SoC's
 +
  config SERIAL_MAX3100
        tristate "MAX3100 support"
        depends on SPI
@@@ -1013,7 -996,7 +1013,7 @@@ config SERIAL_IP22_ZILOG_CONSOL
  
  config SERIAL_SH_SCI
        tristate "SuperH SCI(F) serial port support"
 -      depends on HAVE_CLK && (SUPERH || H8300)
 +      depends on HAVE_CLK && (SUPERH || H8300 || ARCH_SHMOBILE)
        select SERIAL_CORE
  
  config SERIAL_SH_SCI_NR_UARTS
@@@ -1026,6 -1009,10 +1026,10 @@@ config SERIAL_SH_SCI_CONSOL
        depends on SERIAL_SH_SCI=y
        select SERIAL_CORE_CONSOLE
  
+ config SERIAL_SH_SCI_DMA
+       bool "DMA support"
+       depends on SERIAL_SH_SCI && SH_DMAE && EXPERIMENTAL
  config SERIAL_PNX8XXX
        bool "Enable PNX8XXX SoCs' UART Support"
        depends on MIPS && (SOC_PNX8550 || SOC_PNX833X)
@@@ -1103,12 -1090,12 +1107,12 @@@ config SERIAL_6836
        default y
  
  config SERIAL_PMACZILOG
-       tristate "PowerMac z85c30 ESCC support"
-       depends on PPC_OF && PPC_PMAC
+       tristate "Mac or PowerMac z85c30 ESCC support"
+       depends on (M68K && MAC) || (PPC_OF && PPC_PMAC)
        select SERIAL_CORE
        help
          This driver supports the Zilog z85C30 serial ports found on
-         PowerMac machines.
+         (Power)Mac machines.
          Say Y or M if you want to be able to these serial ports.
  
  config SERIAL_PMACZILOG_TTYS
          unable to use the 8250 module for PCMCIA or other 16C550-style
          UARTs.
  
-         Say N unless you need the z85c30 ports on your powermac
+         Say N unless you need the z85c30 ports on your (Power)Mac
          to appear as /dev/ttySn.
  
  config SERIAL_PMACZILOG_CONSOLE
-       bool "Console on PowerMac z85c30 serial port"
+       bool "Console on Mac or PowerMac z85c30 serial port"
        depends on SERIAL_PMACZILOG=y
        select SERIAL_CORE_CONSOLE
        help
          If you would like to be able to use the z85c30 serial port
-         on your PowerMac as the console, you can do so by answering
+         on your (Power)Mac as the console, you can do so by answering
          Y to this option.
  
  config SERIAL_LH7A40X
@@@ -1435,42 -1422,37 +1439,37 @@@ config SERIAL_BFIN_SPOR
          To compile this driver as a module, choose M here: the
          module will be called bfin_sport_uart.
  
- choice
-       prompt "Baud rate for Blackfin SPORT UART"
-       depends on SERIAL_BFIN_SPORT
-       default SERIAL_SPORT_BAUD_RATE_57600
-       help
-         Choose a baud rate for the SPORT UART, other uart settings are
-         8 bit, 1 stop bit, no parity, no flow control.
- config SERIAL_SPORT_BAUD_RATE_115200
-       bool "115200"
- config SERIAL_SPORT_BAUD_RATE_57600
-       bool "57600"
+ config SERIAL_BFIN_SPORT_CONSOLE
+       bool "Console on Blackfin sport emulated uart"
+       depends on SERIAL_BFIN_SPORT=y
+       select SERIAL_CORE_CONSOLE
  
- config SERIAL_SPORT_BAUD_RATE_38400
-       bool "38400"
+ config SERIAL_BFIN_SPORT0_UART
+       bool "Enable UART over SPORT0"
+       depends on SERIAL_BFIN_SPORT && !(BF542 || BF542M || BF544 || BF544M)
+       help
+         Enable UART over SPORT0
  
- config SERIAL_SPORT_BAUD_RATE_19200
-       bool "19200"
+ config SERIAL_BFIN_SPORT1_UART
+       bool "Enable UART over SPORT1"
+       depends on SERIAL_BFIN_SPORT
+       help
+         Enable UART over SPORT1
  
- config SERIAL_SPORT_BAUD_RATE_9600
-       bool "9600"
- endchoice
+ config SERIAL_BFIN_SPORT2_UART
+       bool "Enable UART over SPORT2"
+       depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539)
+       help
+         Enable UART over SPORT2
  
- config SPORT_BAUD_RATE
-       int
-       depends on SERIAL_BFIN_SPORT
-       default 115200 if (SERIAL_SPORT_BAUD_RATE_115200)
-       default 57600 if (SERIAL_SPORT_BAUD_RATE_57600)
-       default 38400 if (SERIAL_SPORT_BAUD_RATE_38400)
-       default 19200 if (SERIAL_SPORT_BAUD_RATE_19200)
-       default 9600 if (SERIAL_SPORT_BAUD_RATE_9600)
+ config SERIAL_BFIN_SPORT3_UART
+       bool "Enable UART over SPORT3"
+       depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539)
+       help
+         Enable UART over SPORT3
  
  config SERIAL_TIMBERDALE
        tristate "Support for timberdale UART"
-       depends on MFD_TIMBERDALE
        select SERIAL_CORE
        ---help---
        Add support for UART controller on timberdale.
diff --combined drivers/serial/imx.c
index b801f5ab2b7bbdc8e57ef6a2e9d569a438e02e79,d00fcf8e6c70e0a68318da2a4ac83c1f29cc48a0..e579d7a1807ab4728bed3d94520f5c8e1e499ae4
@@@ -440,7 -440,7 +440,7 @@@ static irqreturn_t imx_rxint(int irq, v
  
                temp = readl(sport->port.membase + USR2);
                if (temp & USR2_BRCD) {
 -                      writel(temp | USR2_BRCD, sport->port.membase + USR2);
 +                      writel(USR2_BRCD, sport->port.membase + USR2);
                        if (uart_handle_break(&sport->port))
                                continue;
                }
@@@ -1279,7 -1279,7 +1279,7 @@@ static int serial_imx_probe(struct plat
                sport->use_irda = 1;
  #endif
  
-       if (pdata->init) {
+       if (pdata && pdata->init) {
                ret = pdata->init(pdev);
                if (ret)
                        goto clkput;
  
        return 0;
  deinit:
-       if (pdata->exit)
+       if (pdata && pdata->exit)
                pdata->exit(pdev);
  clkput:
        clk_put(sport->clk);
@@@ -1321,7 -1321,7 +1321,7 @@@ static int serial_imx_remove(struct pla
  
        clk_disable(sport->clk);
  
-       if (pdata->exit)
+       if (pdata && pdata->exit)
                pdata->exit(pdev);
  
        iounmap(sport->port.membase);
diff --combined drivers/sh/intc.c
index 926013bece1266c6fb079dee31d1eff90fb3cd61,3a5a17db94744d73d1086b0bc3e89ef6bdb62e52..c2750391fd34402efb405e24cd5b0e3d1b4a43c3
@@@ -259,6 -259,43 +259,43 @@@ static void intc_disable(unsigned int i
        }
  }
  
+ static void (*intc_enable_noprio_fns[])(unsigned long addr,
+                                       unsigned long handle,
+                                       void (*fn)(unsigned long,
+                                                  unsigned long,
+                                                  unsigned long),
+                                       unsigned int irq) = {
+       [MODE_ENABLE_REG] = intc_mode_field,
+       [MODE_MASK_REG] = intc_mode_zero,
+       [MODE_DUAL_REG] = intc_mode_field,
+       [MODE_PRIO_REG] = intc_mode_field,
+       [MODE_PCLR_REG] = intc_mode_field,
+ };
+ static void intc_enable_disable(struct intc_desc_int *d,
+                               unsigned long handle, int do_enable)
+ {
+       unsigned long addr;
+       unsigned int cpu;
+       void (*fn)(unsigned long, unsigned long,
+                  void (*)(unsigned long, unsigned long, unsigned long),
+                  unsigned int);
+       if (do_enable) {
+               for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_E(handle)); cpu++) {
+                       addr = INTC_REG(d, _INTC_ADDR_E(handle), cpu);
+                       fn = intc_enable_noprio_fns[_INTC_MODE(handle)];
+                       fn(addr, handle, intc_reg_fns[_INTC_FN(handle)], 0);
+               }
+       } else {
+               for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_D(handle)); cpu++) {
+                       addr = INTC_REG(d, _INTC_ADDR_D(handle), cpu);
+                       fn = intc_disable_fns[_INTC_MODE(handle)];
+                       fn(addr, handle, intc_reg_fns[_INTC_FN(handle)], 0);
+               }
+       }
+ }
  static int intc_set_wake(unsigned int irq, unsigned int on)
  {
        return 0; /* allow wakeup, but setup hardware in intc_suspend() */
@@@ -400,11 -437,11 +437,11 @@@ static unsigned int __init intc_get_reg
  static intc_enum __init intc_grp_id(struct intc_desc *desc,
                                    intc_enum enum_id)
  {
-       struct intc_group *g = desc->groups;
+       struct intc_group *g = desc->hw.groups;
        unsigned int i, j;
  
-       for (i = 0; g && enum_id && i < desc->nr_groups; i++) {
-               g = desc->groups + i;
+       for (i = 0; g && enum_id && i < desc->hw.nr_groups; i++) {
+               g = desc->hw.groups + i;
  
                for (j = 0; g->enum_ids[j]; j++) {
                        if (g->enum_ids[j] != enum_id)
        return 0;
  }
  
- static unsigned int __init intc_mask_data(struct intc_desc *desc,
-                                         struct intc_desc_int *d,
-                                         intc_enum enum_id, int do_grps)
+ static unsigned int __init _intc_mask_data(struct intc_desc *desc,
+                                          struct intc_desc_int *d,
+                                          intc_enum enum_id,
+                                          unsigned int *reg_idx,
+                                          unsigned int *fld_idx)
  {
-       struct intc_mask_reg *mr = desc->mask_regs;
-       unsigned int i, j, fn, mode;
+       struct intc_mask_reg *mr = desc->hw.mask_regs;
+       unsigned int fn, mode;
        unsigned long reg_e, reg_d;
  
-       for (i = 0; mr && enum_id && i < desc->nr_mask_regs; i++) {
-               mr = desc->mask_regs + i;
+       while (mr && enum_id && *reg_idx < desc->hw.nr_mask_regs) {
+               mr = desc->hw.mask_regs + *reg_idx;
  
-               for (j = 0; j < ARRAY_SIZE(mr->enum_ids); j++) {
-                       if (mr->enum_ids[j] != enum_id)
+               for (; *fld_idx < ARRAY_SIZE(mr->enum_ids); (*fld_idx)++) {
+                       if (mr->enum_ids[*fld_idx] != enum_id)
                                continue;
  
                        if (mr->set_reg && mr->clr_reg) {
                                        intc_get_reg(d, reg_e),
                                        intc_get_reg(d, reg_d),
                                        1,
-                                       (mr->reg_width - 1) - j);
+                                       (mr->reg_width - 1) - *fld_idx);
                }
+               *fld_idx = 0;
+               (*reg_idx)++;
        }
  
+       return 0;
+ }
+ static unsigned int __init intc_mask_data(struct intc_desc *desc,
+                                         struct intc_desc_int *d,
+                                         intc_enum enum_id, int do_grps)
+ {
+       unsigned int i = 0;
+       unsigned int j = 0;
+       unsigned int ret;
+       ret = _intc_mask_data(desc, d, enum_id, &i, &j);
+       if (ret)
+               return ret;
        if (do_grps)
                return intc_mask_data(desc, d, intc_grp_id(desc, enum_id), 0);
  
        return 0;
  }
  
- static unsigned int __init intc_prio_data(struct intc_desc *desc,
-                                         struct intc_desc_int *d,
-                                         intc_enum enum_id, int do_grps)
+ static unsigned int __init _intc_prio_data(struct intc_desc *desc,
+                                          struct intc_desc_int *d,
+                                          intc_enum enum_id,
+                                          unsigned int *reg_idx,
+                                          unsigned int *fld_idx)
  {
-       struct intc_prio_reg *pr = desc->prio_regs;
-       unsigned int i, j, fn, mode, bit;
+       struct intc_prio_reg *pr = desc->hw.prio_regs;
+       unsigned int fn, n, mode, bit;
        unsigned long reg_e, reg_d;
  
-       for (i = 0; pr && enum_id && i < desc->nr_prio_regs; i++) {
-               pr = desc->prio_regs + i;
+       while (pr && enum_id && *reg_idx < desc->hw.nr_prio_regs) {
+               pr = desc->hw.prio_regs + *reg_idx;
  
-               for (j = 0; j < ARRAY_SIZE(pr->enum_ids); j++) {
-                       if (pr->enum_ids[j] != enum_id)
+               for (; *fld_idx < ARRAY_SIZE(pr->enum_ids); (*fld_idx)++) {
+                       if (pr->enum_ids[*fld_idx] != enum_id)
                                continue;
  
                        if (pr->set_reg && pr->clr_reg) {
                        }
  
                        fn += (pr->reg_width >> 3) - 1;
+                       n = *fld_idx + 1;
  
-                       BUG_ON((j + 1) * pr->field_width > pr->reg_width);
+                       BUG_ON(n * pr->field_width > pr->reg_width);
  
-                       bit = pr->reg_width - ((j + 1) * pr->field_width);
+                       bit = pr->reg_width - (n * pr->field_width);
  
                        return _INTC_MK(fn, mode,
                                        intc_get_reg(d, reg_e),
                                        intc_get_reg(d, reg_d),
                                        pr->field_width, bit);
                }
+               *fld_idx = 0;
+               (*reg_idx)++;
        }
  
+       return 0;
+ }
+ static unsigned int __init intc_prio_data(struct intc_desc *desc,
+                                         struct intc_desc_int *d,
+                                         intc_enum enum_id, int do_grps)
+ {
+       unsigned int i = 0;
+       unsigned int j = 0;
+       unsigned int ret;
+       ret = _intc_prio_data(desc, d, enum_id, &i, &j);
+       if (ret)
+               return ret;
        if (do_grps)
                return intc_prio_data(desc, d, intc_grp_id(desc, enum_id), 0);
  
        return 0;
  }
  
+ static void __init intc_enable_disable_enum(struct intc_desc *desc,
+                                           struct intc_desc_int *d,
+                                           intc_enum enum_id, int enable)
+ {
+       unsigned int i, j, data;
+       /* go through and enable/disable all mask bits */
+       i = j = 0;
+       do {
+               data = _intc_mask_data(desc, d, enum_id, &i, &j);
+               if (data)
+                       intc_enable_disable(d, data, enable);
+               j++;
+       } while (data);
+       /* go through and enable/disable all priority fields */
+       i = j = 0;
+       do {
+               data = _intc_prio_data(desc, d, enum_id, &i, &j);
+               if (data)
+                       intc_enable_disable(d, data, enable);
+               j++;
+       } while (data);
+ }
  static unsigned int __init intc_ack_data(struct intc_desc *desc,
                                          struct intc_desc_int *d,
                                          intc_enum enum_id)
  {
-       struct intc_mask_reg *mr = desc->ack_regs;
+       struct intc_mask_reg *mr = desc->hw.ack_regs;
        unsigned int i, j, fn, mode;
        unsigned long reg_e, reg_d;
  
-       for (i = 0; mr && enum_id && i < desc->nr_ack_regs; i++) {
-               mr = desc->ack_regs + i;
+       for (i = 0; mr && enum_id && i < desc->hw.nr_ack_regs; i++) {
+               mr = desc->hw.ack_regs + i;
  
                for (j = 0; j < ARRAY_SIZE(mr->enum_ids); j++) {
                        if (mr->enum_ids[j] != enum_id)
@@@ -549,11 -653,11 +653,11 @@@ static unsigned int __init intc_sense_d
                                           struct intc_desc_int *d,
                                           intc_enum enum_id)
  {
-       struct intc_sense_reg *sr = desc->sense_regs;
+       struct intc_sense_reg *sr = desc->hw.sense_regs;
        unsigned int i, j, fn, bit;
  
-       for (i = 0; sr && enum_id && i < desc->nr_sense_regs; i++) {
-               sr = desc->sense_regs + i;
+       for (i = 0; sr && enum_id && i < desc->hw.nr_sense_regs; i++) {
+               sr = desc->hw.sense_regs + i;
  
                for (j = 0; j < ARRAY_SIZE(sr->enum_ids); j++) {
                        if (sr->enum_ids[j] != enum_id)
@@@ -656,12 -760,8 +760,12 @@@ static void __init intc_register_irq(st
        /* irq should be disabled by default */
        d->chip.mask(irq);
  
-       if (desc->ack_regs)
+       if (desc->hw.ack_regs)
                ack_handle[irq] = intc_ack_data(desc, d, enum_id);
 +
 +#ifdef CONFIG_ARM
 +      set_irq_flags(irq, IRQF_VALID); /* Enable IRQ on ARM systems */
 +#endif
  }
  
  static unsigned int __init save_reg(struct intc_desc_int *d,
@@@ -688,6 -788,7 +792,7 @@@ static void intc_redirect_irq(unsigned 
  void __init register_intc_controller(struct intc_desc *desc)
  {
        unsigned int i, k, smp;
+       struct intc_hw_desc *hw = &desc->hw;
        struct intc_desc_int *d;
  
        d = kzalloc(sizeof(*d), GFP_NOWAIT);
        INIT_LIST_HEAD(&d->list);
        list_add(&d->list, &intc_list);
  
-       d->nr_reg = desc->mask_regs ? desc->nr_mask_regs * 2 : 0;
-       d->nr_reg += desc->prio_regs ? desc->nr_prio_regs * 2 : 0;
-       d->nr_reg += desc->sense_regs ? desc->nr_sense_regs : 0;
-       d->nr_reg += desc->ack_regs ? desc->nr_ack_regs : 0;
+       d->nr_reg = hw->mask_regs ? hw->nr_mask_regs * 2 : 0;
+       d->nr_reg += hw->prio_regs ? hw->nr_prio_regs * 2 : 0;
+       d->nr_reg += hw->sense_regs ? hw->nr_sense_regs : 0;
+       d->nr_reg += hw->ack_regs ? hw->nr_ack_regs : 0;
  
        d->reg = kzalloc(d->nr_reg * sizeof(*d->reg), GFP_NOWAIT);
  #ifdef CONFIG_SMP
  #endif
        k = 0;
  
-       if (desc->mask_regs) {
-               for (i = 0; i < desc->nr_mask_regs; i++) {
-                       smp = IS_SMP(desc->mask_regs[i]);
-                       k += save_reg(d, k, desc->mask_regs[i].set_reg, smp);
-                       k += save_reg(d, k, desc->mask_regs[i].clr_reg, smp);
+       if (hw->mask_regs) {
+               for (i = 0; i < hw->nr_mask_regs; i++) {
+                       smp = IS_SMP(hw->mask_regs[i]);
+                       k += save_reg(d, k, hw->mask_regs[i].set_reg, smp);
+                       k += save_reg(d, k, hw->mask_regs[i].clr_reg, smp);
                }
        }
  
-       if (desc->prio_regs) {
-               d->prio = kzalloc(desc->nr_vectors * sizeof(*d->prio), GFP_NOWAIT);
+       if (hw->prio_regs) {
+               d->prio = kzalloc(hw->nr_vectors * sizeof(*d->prio),
+                                 GFP_NOWAIT);
  
-               for (i = 0; i < desc->nr_prio_regs; i++) {
-                       smp = IS_SMP(desc->prio_regs[i]);
-                       k += save_reg(d, k, desc->prio_regs[i].set_reg, smp);
-                       k += save_reg(d, k, desc->prio_regs[i].clr_reg, smp);
+               for (i = 0; i < hw->nr_prio_regs; i++) {
+                       smp = IS_SMP(hw->prio_regs[i]);
+                       k += save_reg(d, k, hw->prio_regs[i].set_reg, smp);
+                       k += save_reg(d, k, hw->prio_regs[i].clr_reg, smp);
                }
        }
  
-       if (desc->sense_regs) {
-               d->sense = kzalloc(desc->nr_vectors * sizeof(*d->sense), GFP_NOWAIT);
+       if (hw->sense_regs) {
+               d->sense = kzalloc(hw->nr_vectors * sizeof(*d->sense),
+                                  GFP_NOWAIT);
  
-               for (i = 0; i < desc->nr_sense_regs; i++) {
-                       k += save_reg(d, k, desc->sense_regs[i].reg, 0);
-               }
+               for (i = 0; i < hw->nr_sense_regs; i++)
+                       k += save_reg(d, k, hw->sense_regs[i].reg, 0);
        }
  
        d->chip.name = desc->name;
        d->chip.set_type = intc_set_sense;
        d->chip.set_wake = intc_set_wake;
  
-       if (desc->ack_regs) {
-               for (i = 0; i < desc->nr_ack_regs; i++)
-                       k += save_reg(d, k, desc->ack_regs[i].set_reg, 0);
+       if (hw->ack_regs) {
+               for (i = 0; i < hw->nr_ack_regs; i++)
+                       k += save_reg(d, k, hw->ack_regs[i].set_reg, 0);
  
                d->chip.mask_ack = intc_mask_ack;
        }
  
+       /* disable bits matching force_disable before registering irqs */
+       if (desc->force_disable)
+               intc_enable_disable_enum(desc, d, desc->force_disable, 0);
+       /* disable bits matching force_enable before registering irqs */
+       if (desc->force_enable)
+               intc_enable_disable_enum(desc, d, desc->force_enable, 0);
        BUG_ON(k > 256); /* _INTC_ADDR_E() and _INTC_ADDR_D() are 8 bits */
  
        /* register the vectors one by one */
-       for (i = 0; i < desc->nr_vectors; i++) {
-               struct intc_vect *vect = desc->vectors + i;
+       for (i = 0; i < hw->nr_vectors; i++) {
+               struct intc_vect *vect = hw->vectors + i;
                unsigned int irq = evt2irq(vect->vect);
                struct irq_desc *irq_desc;
  
  
                intc_register_irq(desc, d, vect->enum_id, irq);
  
-               for (k = i + 1; k < desc->nr_vectors; k++) {
-                       struct intc_vect *vect2 = desc->vectors + k;
+               for (k = i + 1; k < hw->nr_vectors; k++) {
+                       struct intc_vect *vect2 = hw->vectors + k;
                        unsigned int irq2 = evt2irq(vect2->vect);
  
                        if (vect->enum_id != vect2->enum_id)
                        vect2->enum_id = 0;
  
                        /* redirect this interrupts to the first one */
-                       set_irq_chip_and_handler_name(irq2, &d->chip,
-                                       intc_redirect_irq, "redirect");
+                       set_irq_chip(irq2, &dummy_irq_chip);
+                       set_irq_chained_handler(irq2, intc_redirect_irq);
                        set_irq_data(irq2, (void *)irq);
                }
        }
+       /* enable bits matching force_enable after registering irqs */
+       if (desc->force_enable)
+               intc_enable_disable_enum(desc, d, desc->force_enable, 1);
  }
  
  static int intc_suspend(struct sys_device *dev, pm_message_t state)
@@@ -876,7 -990,7 +994,7 @@@ device_initcall(register_intc_sysdevs)
  /*
   * Dynamic IRQ allocation and deallocation
   */
static unsigned int create_irq_on_node(unsigned int irq_want, int node)
unsigned int create_irq_nr(unsigned int irq_want, int node)
  {
        unsigned int irq = 0, new;
        unsigned long flags;
        spin_lock_irqsave(&vector_lock, flags);
  
        /*
-        * First try the wanted IRQ, then scan.
+        * First try the wanted IRQ
         */
-       if (test_and_set_bit(irq_want, intc_irq_map)) {
+       if (test_and_set_bit(irq_want, intc_irq_map) == 0) {
+               new = irq_want;
+       } else {
+               /* .. then fall back to scanning. */
                new = find_first_zero_bit(intc_irq_map, nr_irqs);
                if (unlikely(new == nr_irqs))
                        goto out_unlock;
  
-               desc = irq_to_desc_alloc_node(new, node);
-               if (unlikely(!desc)) {
-                       pr_info("can't get irq_desc for %d\n", new);
-                       goto out_unlock;
-               }
-               desc = move_irq_desc(desc, node);
                __set_bit(new, intc_irq_map);
-               irq = new;
        }
  
+       desc = irq_to_desc_alloc_node(new, node);
+       if (unlikely(!desc)) {
+               pr_info("can't get irq_desc for %d\n", new);
+               goto out_unlock;
+       }
+       desc = move_irq_desc(desc, node);
+       irq = new;
  out_unlock:
        spin_unlock_irqrestore(&vector_lock, flags);
  
 -      if (irq > 0)
 +      if (irq > 0) {
                dynamic_irq_init(irq);
 +#ifdef CONFIG_ARM
 +              set_irq_flags(irq, IRQF_VALID); /* Enable IRQ on ARM systems */
 +#endif
 +      }
  
        return irq;
  }
@@@ -921,7 -1035,7 +1043,7 @@@ int create_irq(void
        int nid = cpu_to_node(smp_processor_id());
        int irq;
  
-       irq = create_irq_on_node(NR_IRQS_LEGACY, nid);
+       irq = create_irq_nr(NR_IRQS_LEGACY, nid);
        if (irq == 0)
                irq = -1;
  
index 9941fc6134134e1995475e800eb7ecb216e94bab,7e5bf593d386d5d6f5294187fc3196a4207612e3..f742c8e7397ccf06a0759f88a0769723287522cd
@@@ -30,7 -30,7 +30,7 @@@
  
  #include <plat/regs-usb-hsotg-phy.h>
  #include <plat/regs-usb-hsotg.h>
 -#include <plat/regs-sys.h>
 +#include <mach/regs-sys.h>
  #include <plat/udc-hs.h>
  
  #define DMA_ADDR_INVALID (~((dma_addr_t)0))
@@@ -317,7 -317,8 +317,8 @@@ static void s3c_hsotg_init_fifo(struct 
   *
   * Allocate a new USB request structure appropriate for the specified endpoint
   */
- struct usb_request *s3c_hsotg_ep_alloc_request(struct usb_ep *ep, gfp_t flags)
+ static struct usb_request *s3c_hsotg_ep_alloc_request(struct usb_ep *ep,
+                                                     gfp_t flags)
  {
        struct s3c_hsotg_req *req;
  
@@@ -373,7 -374,7 +374,7 @@@ static void s3c_hsotg_unmap_dma(struct 
                req->dma = DMA_ADDR_INVALID;
                hs_req->mapped = 0;
        } else {
-               dma_sync_single(hsotg->dev, req->dma, req->length, dir);
+               dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir);
        }
  }
  
@@@ -755,7 -756,7 +756,7 @@@ static int s3c_hsotg_map_dma(struct s3c
                hs_req->mapped = 1;
                req->dma = dma;
        } else {
-               dma_sync_single(hsotg->dev, req->dma, req->length, dir);
+               dma_sync_single_for_cpu(hsotg->dev, req->dma, req->length, dir);
                hs_req->mapped = 0;
        }
  
@@@ -1460,7 -1461,7 +1461,7 @@@ static u32 s3c_hsotg_read_frameno(struc
   * as the actual data should be sent to the memory directly and we turn
   * on the completion interrupts to get notifications of transfer completion.
   */
- void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
  {
        u32 grxstsr = readl(hsotg->regs + S3C_GRXSTSP);
        u32 epnum, status, size;
@@@ -3094,7 -3095,7 +3095,7 @@@ static void s3c_hsotg_gate(struct platf
        local_irq_restore(flags);
  }
  
- struct s3c_hsotg_plat s3c_hsotg_default_pdata;
+ static struct s3c_hsotg_plat s3c_hsotg_default_pdata;
  
  static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
  {
diff --combined sound/soc/pxa/pxa-ssp.c
index cf00df9c40f433d65a6da07a483c50d647382fe8,e69397f40f72e5306216bf17b6d1f5b3780b5a11..9e95e5117c88f8c6a95cbfe25e60cd66f22c92e2
   * SSP audio private data
   */
  struct ssp_priv {
 -      struct ssp_dev dev;
 +      struct ssp_device *ssp;
        unsigned int sysclk;
        int dai_fmt;
  #ifdef CONFIG_PM
 -      struct ssp_state state;
 +      uint32_t        cr0;
 +      uint32_t        cr1;
 +      uint32_t        to;
 +      uint32_t        psp;
  #endif
  };
  
@@@ -64,22 -61,6 +64,22 @@@ static void dump_registers(struct ssp_d
                 ssp_read_reg(ssp, SSACD));
  }
  
 +static void ssp_enable(struct ssp_device *ssp)
 +{
 +      uint32_t sscr0;
 +
 +      sscr0 = __raw_readl(ssp->mmio_base + SSCR0) | SSCR0_SSE;
 +      __raw_writel(sscr0, ssp->mmio_base + SSCR0);
 +}
 +
 +static void ssp_disable(struct ssp_device *ssp)
 +{
 +      uint32_t sscr0;
 +
 +      sscr0 = __raw_readl(ssp->mmio_base + SSCR0) & ~SSCR0_SSE;
 +      __raw_writel(sscr0, ssp->mmio_base + SSCR0);
 +}
 +
  struct pxa2xx_pcm_dma_data {
        struct pxa2xx_pcm_dma_params params;
        char name[20];
@@@ -113,12 -94,13 +113,12 @@@ static int pxa_ssp_startup(struct snd_p
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct ssp_priv *priv = cpu_dai->private_data;
 +      struct ssp_device *ssp = priv->ssp;
        int ret = 0;
  
        if (!cpu_dai->active) {
 -              priv->dev.port = cpu_dai->id + 1;
 -              priv->dev.irq = NO_IRQ;
 -              clk_enable(priv->dev.ssp->clk);
 -              ssp_disable(&priv->dev);
 +              clk_enable(ssp->clk);
 +              ssp_disable(ssp);
        }
  
        if (cpu_dai->dma_data) {
@@@ -134,11 -116,10 +134,11 @@@ static void pxa_ssp_shutdown(struct snd
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct ssp_priv *priv = cpu_dai->private_data;
 +      struct ssp_device *ssp = priv->ssp;
  
        if (!cpu_dai->active) {
 -              ssp_disable(&priv->dev);
 -              clk_disable(priv->dev.ssp->clk);
 +              ssp_disable(ssp);
 +              clk_disable(ssp->clk);
        }
  
        if (cpu_dai->dma_data) {
  static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 +      struct ssp_device *ssp = priv->ssp;
  
        if (!cpu_dai->active)
-               return 0;
 -              clk_enable(priv->dev.ssp->clk);
++              clk_enable(ssp->clk);
  
 -      ssp_save_state(&priv->dev, &priv->state);
 -      clk_disable(priv->dev.ssp->clk);
 +      priv->cr0 = __raw_readl(ssp->mmio_base + SSCR0);
 +      priv->cr1 = __raw_readl(ssp->mmio_base + SSCR1);
 +      priv->to  = __raw_readl(ssp->mmio_base + SSTO);
 +      priv->psp = __raw_readl(ssp->mmio_base + SSPSP);
  
 +      ssp_disable(ssp);
 +      clk_disable(ssp->clk);
        return 0;
  }
  
  static int pxa_ssp_resume(struct snd_soc_dai *cpu_dai)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
-       if (!cpu_dai->active)
-               return 0;
 +      struct ssp_device *ssp = priv->ssp;
 +      uint32_t sssr = SSSR_ROR | SSSR_TUR | SSSR_BCE;
 +
 +      clk_enable(ssp->clk);
  
 -      clk_enable(priv->dev.ssp->clk);
 -      ssp_restore_state(&priv->dev, &priv->state);
 +      __raw_writel(sssr, ssp->mmio_base + SSSR);
 +      __raw_writel(priv->cr0 & ~SSCR0_SSE, ssp->mmio_base + SSCR0);
 +      __raw_writel(priv->cr1, ssp->mmio_base + SSCR1);
 +      __raw_writel(priv->to,  ssp->mmio_base + SSTO);
 +      __raw_writel(priv->psp, ssp->mmio_base + SSPSP);
-       __raw_writel(priv->cr0 | SSCR0_SSE, ssp->mmio_base + SSCR0);
+       if (cpu_dai->active)
 -              ssp_enable(&priv->dev);
++              ssp_enable(ssp);
+       else
 -              clk_disable(priv->dev.ssp->clk);
++              clk_disable(ssp->clk);
        return 0;
  }
  
@@@ -233,7 -203,7 +234,7 @@@ static int pxa_ssp_set_dai_sysclk(struc
        int clk_id, unsigned int freq, int dir)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        int val;
  
        u32 sscr0 = ssp_read_reg(ssp, SSCR0) &
        /* The SSP clock must be disabled when changing SSP clock mode
         * on PXA2xx.  On PXA3xx it must be enabled when doing so. */
        if (!cpu_is_pxa3xx())
 -              clk_disable(priv->dev.ssp->clk);
 +              clk_disable(ssp->clk);
        val = ssp_read_reg(ssp, SSCR0) | sscr0;
        ssp_write_reg(ssp, SSCR0, val);
        if (!cpu_is_pxa3xx())
 -              clk_enable(priv->dev.ssp->clk);
 +              clk_enable(ssp->clk);
  
        return 0;
  }
@@@ -290,7 -260,7 +291,7 @@@ static int pxa_ssp_set_dai_clkdiv(struc
        int div_id, int div)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        int val;
  
        switch (div_id) {
@@@ -341,7 -311,7 +342,7 @@@ static int pxa_ssp_set_dai_pll(struct s
        int source, unsigned int freq_in, unsigned int freq_out)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        u32 ssacd = ssp_read_reg(ssp, SSACD) & ~0x70;
  
  #if defined(CONFIG_PXA3xx)
@@@ -410,7 -380,7 +411,7 @@@ static int pxa_ssp_set_dai_tdm_slot(str
        unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        u32 sscr0;
  
        sscr0 = ssp_read_reg(ssp, SSCR0);
@@@ -445,7 -415,7 +446,7 @@@ static int pxa_ssp_set_dai_tristate(str
        int tristate)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        u32 sscr1;
  
        sscr1 = ssp_read_reg(ssp, SSCR1);
@@@ -467,7 -437,7 +468,7 @@@ static int pxa_ssp_set_dai_fmt(struct s
                unsigned int fmt)
  {
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        u32 sscr0;
        u32 sscr1;
        u32 sspsp;
@@@ -562,7 -532,7 +563,7 @@@ static int pxa_ssp_hw_params(struct snd
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        int chn = params_channels(params);
        u32 sscr0;
        u32 sspsp;
@@@ -672,12 -642,12 +673,12 @@@ static int pxa_ssp_trigger(struct snd_p
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        int ret = 0;
        struct ssp_priv *priv = cpu_dai->private_data;
 -      struct ssp_device *ssp = priv->dev.ssp;
 +      struct ssp_device *ssp = priv->ssp;
        int val;
  
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_RESUME:
 -              ssp_enable(&priv->dev);
 +              ssp_enable(ssp);
                break;
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
                val = ssp_read_reg(ssp, SSCR1);
                else
                        val |= SSCR1_RSRE;
                ssp_write_reg(ssp, SSCR1, val);
 -              ssp_enable(&priv->dev);
 +              ssp_enable(ssp);
                break;
        case SNDRV_PCM_TRIGGER_STOP:
                val = ssp_read_reg(ssp, SSCR1);
                ssp_write_reg(ssp, SSCR1, val);
                break;
        case SNDRV_PCM_TRIGGER_SUSPEND:
 -              ssp_disable(&priv->dev);
 +              ssp_disable(ssp);
                break;
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
                val = ssp_read_reg(ssp, SSCR1);
@@@ -737,8 -707,8 +738,8 @@@ static int pxa_ssp_probe(struct platfor
        if (!priv)
                return -ENOMEM;
  
 -      priv->dev.ssp = ssp_request(dai->id + 1, "SoC audio");
 -      if (priv->dev.ssp == NULL) {
 +      priv->ssp = ssp_request(dai->id + 1, "SoC audio");
 +      if (priv->ssp == NULL) {
                ret = -ENODEV;
                goto err_priv;
        }
@@@ -757,7 -727,7 +758,7 @@@ static void pxa_ssp_remove(struct platf
                              struct snd_soc_dai *dai)
  {
        struct ssp_priv *priv = dai->private_data;
 -      ssp_free(priv->dev.ssp);
 +      ssp_free(priv->ssp);
  }
  
  #define PXA_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
index 22fdb799c8832698daaa3b212f6412bdfb2dddac,93ed3aad1631bd2090a5da8bc3af312a6f24b9fa..a72c251401aceeb6a88cd8a92f97ba052fbdb4df
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/device.h>
- #include <linux/delay.h>
  #include <linux/clk.h>
- #include <linux/kernel.h>
  #include <linux/gpio.h>
  #include <linux/io.h>
  
- #include <sound/core.h>
- #include <sound/pcm.h>
- #include <sound/pcm_params.h>
- #include <sound/initval.h>
  #include <sound/soc.h>
  
  #include <plat/regs-s3c2412-iis.h>
 -#include <plat/gpio-bank-d.h>
 -#include <plat/gpio-bank-e.h>
 +#include <mach/gpio-bank-d.h>
 +#include <mach/gpio-bank-e.h>
  #include <plat/gpio-cfg.h>
  
  #include <mach/map.h>
  #include "s3c-dma.h"
  #include "s3c64xx-i2s.h"
  
+ /* The value should be set to maximum of the total number
+  * of I2Sv3 controllers that any supported SoC has.
+  */
+ #define MAX_I2SV3     2
  static struct s3c2410_dma_client s3c64xx_dma_client_out = {
        .name           = "I2S PCM Stereo out"
  };
@@@ -46,37 -45,12 +45,12 @@@ static struct s3c2410_dma_client s3c64x
        .name           = "I2S PCM Stereo in"
  };
  
- static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_out[2] = {
-       [0] = {
-               .channel        = DMACH_I2S0_OUT,
-               .client         = &s3c64xx_dma_client_out,
-               .dma_addr       = S3C64XX_PA_IIS0 + S3C2412_IISTXD,
-               .dma_size       = 4,
-       },
-       [1] = {
-               .channel        = DMACH_I2S1_OUT,
-               .client         = &s3c64xx_dma_client_out,
-               .dma_addr       = S3C64XX_PA_IIS1 + S3C2412_IISTXD,
-               .dma_size       = 4,
-       },
- };
- static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_in[2] = {
-       [0] = {
-               .channel        = DMACH_I2S0_IN,
-               .client         = &s3c64xx_dma_client_in,
-               .dma_addr       = S3C64XX_PA_IIS0 + S3C2412_IISRXD,
-               .dma_size       = 4,
-       },
-       [1] = {
-               .channel        = DMACH_I2S1_IN,
-               .client         = &s3c64xx_dma_client_in,
-               .dma_addr       = S3C64XX_PA_IIS1 + S3C2412_IISRXD,
-               .dma_size       = 4,
-       },
- };
+ static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_out[MAX_I2SV3];
+ static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_in[MAX_I2SV3];
+ static struct s3c_i2sv2_info s3c64xx_i2s[MAX_I2SV3];
  
- static struct s3c_i2sv2_info s3c64xx_i2s[2];
+ struct snd_soc_dai s3c64xx_i2s_dai[MAX_I2SV3];
+ EXPORT_SYMBOL_GPL(s3c64xx_i2s_dai);
  
  static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
  {
@@@ -169,55 -143,13 +143,13 @@@ static struct snd_soc_dai_ops s3c64xx_i
        .set_sysclk     = s3c64xx_i2s_set_sysclk,       
  };
  
- struct snd_soc_dai s3c64xx_i2s_dai[] = {
-       {
-               .name           = "s3c64xx-i2s",
-               .id             = 0,
-               .probe          = s3c64xx_i2s_probe,
-               .playback = {
-                       .channels_min   = 2,
-                       .channels_max   = 2,
-                       .rates          = S3C64XX_I2S_RATES,
-                       .formats        = S3C64XX_I2S_FMTS,
-               },
-               .capture = {
-                        .channels_min  = 2,
-                        .channels_max  = 2,
-                        .rates         = S3C64XX_I2S_RATES,
-                        .formats       = S3C64XX_I2S_FMTS,
-                },
-               .ops = &s3c64xx_i2s_dai_ops,
-               .symmetric_rates = 1,
-       },
-       {
-               .name           = "s3c64xx-i2s",
-               .id             = 1,
-               .probe          = s3c64xx_i2s_probe,
-               .playback = {
-                       .channels_min   = 2,
-                       .channels_max   = 2,
-                       .rates          = S3C64XX_I2S_RATES,
-                       .formats        = S3C64XX_I2S_FMTS,
-               },
-               .capture = {
-                        .channels_min  = 2,
-                        .channels_max  = 2,
-                        .rates         = S3C64XX_I2S_RATES,
-                        .formats       = S3C64XX_I2S_FMTS,
-                },
-               .ops = &s3c64xx_i2s_dai_ops,
-               .symmetric_rates = 1,
-       },
- };
- EXPORT_SYMBOL_GPL(s3c64xx_i2s_dai);
  static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
  {
        struct s3c_i2sv2_info *i2s;
        struct snd_soc_dai *dai;
        int ret;
  
-       if (pdev->id >= ARRAY_SIZE(s3c64xx_i2s)) {
+       if (pdev->id >= MAX_I2SV3) {
                dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
                return -EINVAL;
        }
        i2s = &s3c64xx_i2s[pdev->id];
        dai = &s3c64xx_i2s_dai[pdev->id];
        dai->dev = &pdev->dev;
+       dai->name = "s3c64xx-i2s";
+       dai->id = pdev->id;
+       dai->symmetric_rates = 1;
+       dai->playback.channels_min = 2;
+       dai->playback.channels_max = 2;
+       dai->playback.rates = S3C64XX_I2S_RATES;
+       dai->playback.formats = S3C64XX_I2S_FMTS;
+       dai->capture.channels_min = 2;
+       dai->capture.channels_max = 2;
+       dai->capture.rates = S3C64XX_I2S_RATES;
+       dai->capture.formats = S3C64XX_I2S_FMTS;
+       dai->probe = s3c64xx_i2s_probe;
+       dai->ops = &s3c64xx_i2s_dai_ops;
  
        i2s->dma_capture = &s3c64xx_i2s_pcm_stereo_in[pdev->id];
        i2s->dma_playback = &s3c64xx_i2s_pcm_stereo_out[pdev->id];
  
+       if (pdev->id == 0) {
+               i2s->dma_capture->channel = DMACH_I2S0_IN;
+               i2s->dma_capture->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISRXD;
+               i2s->dma_playback->channel = DMACH_I2S0_OUT;
+               i2s->dma_playback->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISTXD;
+       } else {
+               i2s->dma_capture->channel = DMACH_I2S1_IN;
+               i2s->dma_capture->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISRXD;
+               i2s->dma_playback->channel = DMACH_I2S1_OUT;
+               i2s->dma_playback->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISTXD;
+       }
+       i2s->dma_capture->client = &s3c64xx_dma_client_in;
+       i2s->dma_capture->dma_size = 4;
+       i2s->dma_playback->client = &s3c64xx_dma_client_out;
+       i2s->dma_playback->dma_size = 4;
        i2s->iis_cclk = clk_get(&pdev->dev, "audio-bus");
        if (IS_ERR(i2s->iis_cclk)) {
                dev_err(&pdev->dev, "failed to get audio-bus\n");