]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge current mainline tree into linux-omap tree
authorTony Lindgren <tony@atomide.com>
Mon, 5 May 2008 20:21:13 +0000 (13:21 -0700)
committerTony Lindgren <tony@atomide.com>
Mon, 5 May 2008 20:21:13 +0000 (13:21 -0700)
Merge branches 'master' and 'linus'

Conflicts:

arch/arm/mach-omap1/board-h3.c
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/Makefile
drivers/media/video/Kconfig
drivers/misc/Kconfig
include/linux/kfifo.h
security/Makefile

38 files changed:
1  2 
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/mach-omap1/board-h2.c
arch/arm/mach-omap1/board-h3.c
arch/arm/mm/Kconfig
drivers/Makefile
drivers/i2c/chips/menelaus.c
drivers/input/keyboard/omap-keypad.c
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/Makefile
drivers/input/touchscreen/ads7846.c
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/media/video/Kconfig
drivers/media/video/Makefile
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/mtd/cmdlinepart.c
drivers/mtd/maps/omap_nor.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/Makefile
drivers/net/smc91x.c
drivers/rtc/Kconfig
drivers/serial/8250.c
drivers/spi/Kconfig
drivers/usb/gadget/Kconfig
drivers/usb/gadget/omap_udc.c
drivers/usb/host/Kconfig
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ohci-omap.c
include/asm-arm/pgtable.h
include/linux/i2c-id.h
include/linux/kfifo.h
include/linux/poison.h
include/linux/spi/ads7846.h
kernel/printk.c
security/Makefile

diff --combined MAINTAINERS
index 9dee3ce27fc7672766ce27430e5b0fc76293b473,abe27871ad6a54c56b48789aa4480a020e863fee..335b211a8c9e92f43ee8972608a13439541f7f0e
@@@ -752,11 -752,13 +752,13 @@@ W:      http://atmelwlandriver.sourceforge.n
  S:    Maintained
  
  AUDIT SUBSYSTEM
- P:    David Woodhouse
- M:    dwmw2@infradead.org
+ P:    Al Viro
+ M:    viro@zeniv.linux.org.uk
+ P:    Eric Paris
+ M:    eparis@redhat.com
  L:    linux-audit@redhat.com (subscribers-only)
  W:    http://people.redhat.com/sgrubb/audit/
- T:    git kernel.org:/pub/scm/linux/kernel/git/dwmw2/audit-2.6.git
+ T:    git git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git
  S:    Maintained
  
  AUXILIARY DISPLAY DRIVERS
@@@ -1037,7 -1039,7 +1039,7 @@@ P:      Urs Thuerman
  M:    urs.thuermann@volkswagen.de
  P:    Oliver Hartkopp
  M:    oliver.hartkopp@volkswagen.de
- L:    socketcan-core@lists.berlios.de
+ L:    socketcan-core@lists.berlios.de (subscribers-only)
  W:    http://developer.berlios.de/projects/socketcan/
  S:    Maintained
  
@@@ -1106,6 -1108,12 +1108,12 @@@ M:    kernel@wantstofly.or
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  
+ CIRRUS LOGIC CS4270 SOUND DRIVER
+ P:    Timur Tabi
+ M:    timur@freescale.com
+ L:    alsa-devel@alsa-project.org
+ S:    Supported
  CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
  P:    Cirrus Logic Corporation (kernel 2.2 driver)
  M:    Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com>
@@@ -1188,9 -1196,9 +1196,9 @@@ S:      Maintaine
  
  CPUSETS
  P:    Paul Jackson
- P:    Simon Derr
+ P:    Paul Menage
  M:    pj@sgi.com
- M:    simon.derr@bull.net
+ M:    menage@google.com
  L:    linux-kernel@vger.kernel.org
  W:    http://www.bullopensource.org/cpuset/
  S:    Supported
@@@ -1525,6 -1533,13 +1533,13 @@@ L:    bluesmoke-devel@lists.sourceforge.ne
  W:    bluesmoke.sourceforge.net
  S:    Maintained
  
+ EEEPC LAPTOP EXTRAS DRIVER
+ P:    Corentin Chary
+ M:    corentincj@iksaif.net
+ L:    acpi4asus-user@lists.sourceforge.net
+ W:    http://sourceforge.net/projects/acpi4asus
+ S:    Maintained
  EEPRO100 NETWORK DRIVER
  P:    Andrey V. Savochkin
  M:    saw@saw.sw.com.sg
@@@ -1542,6 -1557,14 +1557,14 @@@ M:    raisch@de.ibm.co
  L:    general@lists.openfabrics.org
  S:    Supported
  
+ EMBEDDED LINUX
+ P:    Paul Gortmaker
+ M:    paul.gortmaker@windriver.com
+ P     David Woodhouse
+ M:    dwmw2@infradead.org
+ L:    linux-embedded@vger.kernel.org
+ S:    Maintained
  EMULEX LPFC FC SCSI DRIVER
  P:    James Smart
  M:    james.smart@emulex.com
@@@ -1628,6 -1651,12 +1651,12 @@@ L:    linuxppc-dev@ozlabs.or
  L:    netdev@vger.kernel.org
  S:    Maintained
  
+ FREESCALE QUICC ENGINE LIBRARY
+ P:    Timur Tabi
+ M:    timur@freescale.com
+ L:    linuxppc-dev@ozlabs.org
+ S:    Supported
  FREESCALE HIGHSPEED USB DEVICE DRIVER
  P:    Li Yang
  M:    leoli@freescale.com
@@@ -1642,6 -1671,19 +1671,19 @@@ L:    netdev@vger.kernel.or
  L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
+ FREESCALE QUICC ENGINE UCC UART DRIVER
+ P:    Timur Tabi
+ M:    timur@freescale.com
+ L:    linuxppc-dev@ozlabs.org
+ S:    Supported
+ FREESCALE SOC SOUND DRIVERS
+ P:    Timur Tabi
+ M:    timur@freescale.com
+ L:    alsa-devel@alsa-project.org
+ L:    linuxppc-dev@ozlabs.org
+ S:    Supported
  FILE LOCKING (flock() and fcntl()/lockf())
  P:    Matthew Wilcox
  M:    matthew@wil.cx
@@@ -2304,6 -2346,13 +2346,13 @@@ L:    kvm-devel@lists.sourceforge.ne
  W:    kvm.sourceforge.net
  S:    Supported
  
+ KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
+ P:    Hollis Blanchard
+ M:    hollisb@us.ibm.com
+ L:    kvm-ppc-devel@lists.sourceforge.net
+ W:    kvm.sourceforge.net
+ S:    Supported
  KERNEL VIRTUAL MACHINE For Itanium(KVM/IA64)
  P:    Anthony Xu
  M:    anthony.xu@intel.com
@@@ -2313,6 -2362,16 +2362,16 @@@ L:    kvm-ia64-devel@lists.sourceforge.ne
  W:    kvm.sourceforge.net
  S:    Supported
  
+ KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
+ P:    Carsten Otte
+ M:    cotte@de.ibm.com
+ P:    Christian Borntraeger
+ M:    borntraeger@de.ibm.com
+ M:    linux390@de.ibm.com
+ L:    linux-s390@vger.kernel.org
+ W:    http://www.ibm.com/developerworks/linux/linux390/
+ S:    Supported
  KEXEC
  P:    Eric Biederman
  M:    ebiederm@xmission.com
@@@ -2652,7 -2711,7 +2711,7 @@@ P:      David Howell
  M:    dhowells@redhat.com
  P:    Koichi Yasutake
  M:    yasutake.koichi@jp.panasonic.com
- L:    linux-am33-list@redhat.com
+ L:    linux-am33-list@redhat.com (moderated for non-subscribers)
  W:    ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/
  S:    Maintained
  
@@@ -2715,7 -2774,7 +2774,7 @@@ M:      rubini@ipvvis.unipv.i
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
- MOXA SMARTIO/INDUSTIO SERIAL CARD (MXSER 2.0)
+ MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
  P:    Jiri Slaby
  M:    jirislaby@gmail.com
  L:    linux-kernel@vger.kernel.org
@@@ -3071,7 -3130,8 +3130,8 @@@ PCI SUBSYSTE
  P:    Jesse Barnes
  M:    jbarnes@virtuousgeek.org
  L:    linux-kernel@vger.kernel.org
- L:    linux-pci@atrey.karlin.mff.cuni.cz
+ L:    linux-pci@vger.kernel.org
+ T:    git kernel.org:/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git
  S:    Supported
  
  PCI HOTPLUG CORE
@@@ -3532,6 -3592,13 +3592,13 @@@ M:    pfg@sgi.co
  L:    linux-ia64@vger.kernel.org
  S:    Supported
  
+ SFC NETWORK DRIVER
+ P:    Steve Hodgson
+ P:    Ben Hutchings
+ P:    Robert Stonehouse
+ M:    linux-net-drivers@solarflare.com
+ S:    Supported
  SGI VISUAL WORKSTATION 320 AND 540
  P:    Andrey Panin
  M:    pazke@donpac.ru
@@@ -3698,42 -3765,6 +3765,6 @@@ M:     chrisw@sous-sol.or
  L:    stable@kernel.org
  S:    Maintained
  
- TPM DEVICE DRIVER
- P:    Kylene Hall
- M:    tpmdd-devel@lists.sourceforge.net
- W:    http://tpmdd.sourceforge.net
- P:    Marcel Selhorst
- M:    tpm@selhorst.net
- W:    http://www.prosec.rub.de/tpm/
- L:    tpmdd-devel@lists.sourceforge.net
- S:    Maintained
- Telecom Clock Driver for MCPL0010
- P:    Mark Gross
- M:    mark.gross@intel.com
- S:    Supported
- TENSILICA XTENSA PORT (xtensa):
- P:    Chris Zankel
- M:    chris@zankel.net
- S:    Maintained
- THINKPAD ACPI EXTRAS DRIVER
- P:    Henrique de Moraes Holschuh
- M:    ibm-acpi@hmh.eng.br
- L:    ibm-acpi-devel@lists.sourceforge.net
- W:    http://ibm-acpi.sourceforge.net
- W:    http://thinkwiki.org/wiki/Ibm-acpi
- T:    git repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
- S:    Maintained
- UltraSPARC (sparc64):
- P:    David S. Miller
- M:    davem@davemloft.net
- L:    sparclinux@vger.kernel.org
- T:    git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
- S:    Maintained
  SHARP LH SUPPORT (LH7952X & LH7A40X)
  P:    Marc Singer
  M:    elf@buici.com
@@@ -3830,6 -3861,12 +3861,12 @@@ P:    Christoph Hellwi
  M:    hch@infradead.org
  S:    Maintained
  
+ TASKSTATS STATISTICS INTERFACE
+ P:    Shailabh Nagar
+ M:    nagar@watson.ibm.com
+ L:    linux-kernel@vger.kernel.org
+ S:    Maintained
  TC CLASSIFIER
  P:    Jamal Hadi Salim
  M:    hadi@cyberus.ca
@@@ -3852,6 -3889,25 +3889,25 @@@ M:    andy@greyhouse.ne
  L:    netdev@vger.kernel.org
  S:    Supported
  
+ Telecom Clock Driver for MCPL0010
+ P:    Mark Gross
+ M:    mark.gross@intel.com
+ S:    Supported
+ TENSILICA XTENSA PORT (xtensa):
+ P:    Chris Zankel
+ M:    chris@zankel.net
+ S:    Maintained
+ THINKPAD ACPI EXTRAS DRIVER
+ P:    Henrique de Moraes Holschuh
+ M:    ibm-acpi@hmh.eng.br
+ L:    ibm-acpi-devel@lists.sourceforge.net
+ W:    http://ibm-acpi.sourceforge.net
+ W:    http://thinkwiki.org/wiki/Ibm-acpi
+ T:    git repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
+ S:    Maintained
  TI FLASH MEDIA INTERFACE DRIVER
  P:      Alex Dubov
  M:      oakad@yahoo.com
@@@ -3859,7 -3915,7 +3915,7 @@@ S:      Maintaine
  
  TI OMAP MMC INTERFACE DRIVER
  P:    Carlos Aguiar, Anderson Briglia and Syed Khasim
 -M:    linux-omap-open-source@linux.omap.com (subscribers only)
 +M:    linux-omap@vger.kernel.org
  W:    http://linux.omap.com
  W:    http://www.muru.com/linux/omap/
  S:    Maintained
@@@ -3869,12 -3925,6 +3925,6 @@@ P:     Deepak Saxen
  M:    dsaxena@plexity.net
  S:    Maintained
  
- TASKSTATS STATISTICS INTERFACE
- P:    Shailabh Nagar
- M:    nagar@watson.ibm.com
- L:    linux-kernel@vger.kernel.org
- S:    Maintained
  TIPC NETWORK LAYER
  P:    Per Liden
  M:    per.liden@ericsson.com
@@@ -3908,6 -3958,16 +3958,16 @@@ L:    tlinux-users@tce.toshiba-dme.co.j
  W:    http://www.buzzard.org.uk/toshiba/
  S:    Maintained
  
+ TPM DEVICE DRIVER
+ P:    Kylene Hall
+ M:    tpmdd-devel@lists.sourceforge.net
+ W:    http://tpmdd.sourceforge.net
+ P:    Marcel Selhorst
+ M:    tpm@selhorst.net
+ W:    http://www.prosec.rub.de/tpm/
+ L:    tpmdd-devel@lists.sourceforge.net
+ S:    Maintained
  TRIDENT 4DWAVE/SIS 7018 PCI AUDIO CORE
  P:    Muli Ben-Yehuda
  M:    mulix@mulix.org
@@@ -3920,6 -3980,12 +3980,12 @@@ M:    trivial@kernel.or
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
+ TTY LAYER
+ P:    Alan Cox
+ M:    alan@lxorguk.ukuu.org.uk
+ L:    linux-kernel@vger.kernel.org
+ S:    Maintained
  TULIP NETWORK DRIVERS
  P:    Grant Grundler
  M:    grundler@parisc-linux.org
@@@ -3985,6 -4051,12 +4051,12 @@@ L:      linux-usb@vger.kernel.or
  S:    Maintained
  W:    http://www.kroah.com/linux-usb/
  
+ USB CYPRESS C67X00 DRIVER
+ P:    Peter Korsgaard
+ M:    jacmet@sunsite.dk
+ L:    linux-usb@vger.kernel.org
+ S:    Maintained
  USB DAVICOM DM9601 DRIVER
  P:    Peter Korsgaard
  M:    jacmet@sunsite.dk
@@@ -4088,6 -4160,20 +4160,20 @@@ L:      linux-usb@vger.kernel.or
  W:    http://www.chello.nl/~j.vreeken/se401/
  S:    Maintained
  
+ USB SERIAL BELKIN F5U103 DRIVER
+ P:    William Greathouse
+ M:    wgreathouse@smva.com
+ L:      linux-usb@vger.kernel.org
+ S:    Maintained
+ USB SERIAL CYPRESS M8 DRIVER
+ P:    Lonnie Mendez
+ M:    dignome@gmail.com
+ L:      linux-usb@vger.kernel.org
+ S:    Maintained
+ W:    http://geocities.com/i0xox0i
+ W:    http://firstlight.net/cvs
  USB SERIAL CYBERJACK DRIVER
  P:    Matthias Bruestle and Harald Welte
  M:    support@reiner-sct.com
@@@ -4107,20 -4193,6 +4193,6 @@@ M:     gregkh@suse.d
  L:      linux-usb@vger.kernel.org
  S:    Supported
  
- USB SERIAL BELKIN F5U103 DRIVER
- P:    William Greathouse
- M:    wgreathouse@smva.com
- L:      linux-usb@vger.kernel.org
- S:    Maintained
- USB SERIAL CYPRESS M8 DRIVER
- P:    Lonnie Mendez
- M:    dignome@gmail.com
- L:      linux-usb@vger.kernel.org
- S:    Maintained
- W:    http://geocities.com/i0xox0i
- W:    http://firstlight.net/cvs
  USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER
  P:    Gary Brubaker
  M:    xavyer@ix.netcom.com
@@@ -4223,7 -4295,7 +4295,7 @@@ M:      gregkh@suse.d
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
FAT/VFAT/MSDOS FILESYSTEM:
VFAT/FAT/MSDOS FILESYSTEM:
  P:    OGAWA Hirofumi
  M:    hirofumi@mail.parknet.co.jp
  L:    linux-kernel@vger.kernel.org
@@@ -4268,6 -4340,13 +4340,13 @@@ M:    dushistov@mail.r
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
+ UltraSPARC (sparc64):
+ P:    David S. Miller
+ M:    davem@davemloft.net
+ L:    sparclinux@vger.kernel.org
+ T:    git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
+ S:    Maintained
  USB DIAMOND RIO500 DRIVER
  P:    Cesar Miquel
  M:    miquel@df.uba.ar
@@@ -4356,6 -4435,16 +4435,16 @@@ L:    linux-wireless@vger.kernel.or
  W:    http://oops.ghostprotocols.net:81/blog
  S:    Maintained
  
+ WM97XX TOUCHSCREEN DRIVERS
+ P:    Mark Brown
+ M:    broonie@opensource.wolfsonmicro.com
+ P:    Liam Girdwood
+ M:    liam.girdwood@wolfsonmicro.com
+ L:    linux-input@vger.kernel.org
+ T:    git git://opensource.wolfsonmicro.com/linux-2.6-touch
+ W:    http://opensource.wolfsonmicro.com/node/7
+ S:    Supported
  X.25 NETWORK LAYER
  P:    Henner Eisen
  M:    eis@baty.hanse.de
diff --combined Makefile
index a48f322d154f0eea79a51c710d6a600386166841,4492984efc09ab72ff6219a7bc21fb6a957c4cd5..85cc07c668868c07530ecd79d1d77b626f85de71
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 2
  PATCHLEVEL = 6
- SUBLEVEL = 25
- EXTRAVERSION =
+ SUBLEVEL = 26
+ EXTRAVERSION = -rc1
  NAME = Funky Weasel is Jiggy wit it
  
  # *DOCUMENTATION*
@@@ -16,9 -16,6 +16,9 @@@
  # o  print "Entering directory ...";
  MAKEFLAGS += -rR --no-print-directory
  
 +# Add custom flags here to avoid conflict with updates
 +EXTRAVERSION := $(EXTRAVERSION)-omap1
 +
  # We are using a recursive build, so we need to do a little thinking
  # to get the ordering right.
  #
@@@ -174,8 -171,6 +174,8 @@@ SUBARCH := $(shell uname -m | sed -e s/
                                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
                                  -e s/sh.*/sh/ )
  
 +SUBARCH := arm
 +
  # Cross compiling and selecting different set of gcc/bin-utils
  # ---------------------------------------------------------------------------
  #
  # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
  export KBUILD_BUILDHOST := $(SUBARCH)
  ARCH          ?= $(SUBARCH)
 -CROSS_COMPILE ?=
 +CROSS_COMPILE ?= arm-linux-
  
  # Architecture as present in compile.h
  UTS_MACHINE   := $(ARCH)
@@@ -512,6 -507,10 +512,10 @@@ els
  KBUILD_CFLAGS += -O2
  endif
  
+ ifneq (CONFIG_FRAME_WARN,0)
+ KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
+ endif
  # Force gcc to behave correct even for buggy distributions
  # Arch Makefiles may override this setting
  KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
@@@ -795,7 -794,7 +799,7 @@@ endif # ifdef CONFIG_KALLSYM
  quiet_cmd_vmlinux-modpost = LD      $@
        cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@                          \
         $(vmlinux-init) --start-group $(vmlinux-main) --end-group             \
-        $(filter-out $(vmlinux-init) $(vmlinux-main) $(vmlinux-lds) FORCE ,$^)
+        $(filter-out $(vmlinux-init) $(vmlinux-main) FORCE ,$^)
  define rule_vmlinux-modpost
        :
        +$(call cmd,vmlinux-modpost)
@@@ -819,7 -818,9 +823,9 @@@ endi
  ifdef CONFIG_KALLSYMS
  .tmp_vmlinux1: vmlinux.o
  endif
- vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE
+ modpost-init := $(filter-out init/built-in.o, $(vmlinux-init))
+ vmlinux.o: $(modpost-init) $(vmlinux-main) FORCE
        $(call if_changed_rule,vmlinux-modpost)
  
  # The actual objects are generated when descending, 
@@@ -1175,8 -1176,10 +1181,10 @@@ rpm: include/config/kernel.release FORC
  # Brief documentation of the typical targets used
  # ---------------------------------------------------------------------------
  
- boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
+ boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
  boards := $(notdir $(boards))
+ board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
+ board-dirs := $(sort $(notdir $(board-dirs:/=)))
  
  help:
        @echo  'Cleaning targets:'
        @echo  'Documentation targets:'
        @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
        @echo  ''
-       @echo  'Architecture specific targets ($(ARCH)):'
+       @echo  'Architecture specific targets ($(SRCARCH)):'
        @$(if $(archhelp),$(archhelp),\
-               echo '  No architecture specific help defined for $(ARCH)')
+               echo '  No architecture specific help defined for $(SRCARCH)')
        @echo  ''
        @$(if $(boards), \
                $(foreach b, $(boards), \
                printf "  %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
                echo '')
+       @$(if $(board-dirs), \
+               $(foreach b, $(board-dirs), \
+               printf "  %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
+               printf "  %-16s - Show all of the above\\n" help-boards; \
+               echo '')
  
        @echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
        @echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
        @echo  'For further info see the ./README file'
  
  
+ help-board-dirs := $(addprefix help-,$(board-dirs))
+ help-boards: $(help-board-dirs)
+ boards-per-dir = $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig))
+ $(help-board-dirs): help-%:
+       @echo  'Architecture specific targets ($(SRCARCH) $*):'
+       @$(if $(boards-per-dir), \
+               $(foreach b, $(boards-per-dir), \
+               printf "  %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
+               echo '')
  # Documentation targets
  # ---------------------------------------------------------------------------
  %docs: scripts_basic FORCE
@@@ -1401,7 -1423,7 +1428,7 @@@ define xtag
            $(all-kconfigs) | xargs $1 -a \
                --langdef=kconfig \
                --language-force=kconfig \
-               --regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
+               --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'; \
            $(all-defconfigs) | xargs -r $1 -a \
                --langdef=dotconfig \
                --language-force=dotconfig \
        elif $1 --version 2>&1 | grep -iq emacs; then \
            $(all-sources) | xargs $1 -a; \
            $(all-kconfigs) | xargs $1 -a \
-               --regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
+               --regex='/^[ \t]*(menu|)config[ \t]+\([a-zA-Z0-9_]+\)/\2/'; \
            $(all-defconfigs) | xargs -r $1 -a \
                --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
        else \
@@@ -1544,7 -1566,6 +1571,6 @@@ quiet_cmd_rmfiles = $(if $(wildcard $(r
        cmd_rmfiles = rm -f $(rm-files)
  
  # Run depmod only if we have System.map and depmod is executable
- # and we build for the host arch
  quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
        cmd_depmod = \
        if [ -r System.map -a -x $(DEPMOD) ]; then                              \
diff --combined arch/arm/Kconfig
index c60a27dd7653af4fc915bb6d42ff9172fc5ee90d,b786e68914d4a20b12b743ee886b9acdbed623d7..28f15c4a7253042eddfd613340f378d6595d9e43
@@@ -8,6 -8,7 +8,7 @@@ mainmenu "Linux Kernel Configuration
  config ARM
        bool
        default y
+       select HAVE_IDE
        select RTC_LIB
        select SYS_SUPPORTS_APM_EMULATION
        select HAVE_OPROFILE
@@@ -223,7 -224,6 +224,6 @@@ config ARCH_CLPS750
        select TIMER_ACORN
        select ISA
        select NO_IOPORT
-       select HAVE_IDE
        help
          Support for the Cirrus Logic PS7500FE system-on-a-chip.
  
@@@ -236,7 -236,6 +236,6 @@@ config ARCH_CO28
        bool "Co-EBSA285"
        select FOOTBRIDGE
        select FOOTBRIDGE_ADDIN
-       select HAVE_IDE
        help
          Support for Intel's EBSA285 companion chip.
  
@@@ -262,7 -261,6 +261,6 @@@ config ARCH_EP93X
  config ARCH_FOOTBRIDGE
        bool "FootBridge"
        select FOOTBRIDGE
-       select HAVE_IDE
        help
          Support for systems based on the DC21285 companion chip
          ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
@@@ -301,7 -299,6 +299,6 @@@ config ARCH_IOP32
        depends on MMU
        select PLAT_IOP
        select PCI
-       select HAVE_IDE
        help
          Support for Intel's 80219 and IOP32X (XScale) family of
          processors.
@@@ -311,14 -308,12 +308,12 @@@ config ARCH_IOP33
        depends on MMU
        select PLAT_IOP
        select PCI
-       select HAVE_IDE
        help
          Support for Intel's IOP33X (XScale) family of processors.
  
  config ARCH_IXP23XX
        bool "IXP23XX-based"
        depends on MMU
-       select HAVE_IDE
        select PCI
        help
          Support for Intel's IXP23xx (XScale) family of processors.
@@@ -336,14 -331,12 +331,12 @@@ config ARCH_IXP4X
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
-       select HAVE_IDE
        help
          Support for Intel's IXP4XX (XScale) family of processors.
  
  config ARCH_L7200
        bool "LinkUp-L7200"
        select FIQ
-       select HAVE_IDE
        help
          Say Y here if you intend to run this kernel on a LinkUp Systems
          L7200 Software Development Board which uses an ARM720T processor.
@@@ -400,7 -393,6 +393,6 @@@ config ARCH_PX
        depends on MMU
        select ARCH_MTD_XIP
        select GENERIC_GPIO
-       select HAVE_IDE
        select HAVE_GPIO_LIB
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
@@@ -416,7 -408,6 +408,6 @@@ config ARCH_RP
        select ARCH_MAY_HAVE_PC_FDC
        select ISA_DMA_API
        select NO_IOPORT
-       select HAVE_IDE
        help
          On the Acorn Risc-PC, Linux can support the internal IDE disk and
          CD-ROM interface, serial and parallel port, and the floppy drive.
@@@ -432,7 -423,6 +423,6 @@@ config ARCH_SA110
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        select TICK_ONESHOT
-       select HAVE_IDE
        select HAVE_GPIO_LIB
        help
          Support for StrongARM 11x0 based boards.
  config ARCH_S3C2410
        bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443"
        select GENERIC_GPIO
-       select HAVE_IDE
        help
          Samsung S3C2410X CPU based systems, such as the Simtec Electronics
          BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
  
  config ARCH_SHARK
        bool "Shark"
-       select HAVE_IDE
        select ISA
        select ISA_DMA
        select PCI
  
  config ARCH_LH7A40X
        bool "Sharp LH7A40X"
-       select HAVE_IDE
        help
          Say Y here for systems based on one of the Sharp LH7A40X
          System on a Chip processors.  These CPUs include an ARM922T
@@@ -1194,11 -1181,6 +1181,11 @@@ source "drivers/dca/Kconfig
  
  source "drivers/uio/Kconfig"
  
 +if ARCH_OMAP
 +source "drivers/cbus/Kconfig"
 +source "drivers/dsp/dspgateway/Kconfig"
 +endif
 +
  endmenu
  
  source "fs/Kconfig"
index 4f8e6da78f8516ac06514699622a4f3189dd75cf,4b444fdaafea04b430234f61574471168931155f..c9e627df6ff11b7e0ca3d8044f10b049bdb193e1
@@@ -20,7 -20,6 +20,7 @@@
   */
  
  #include <linux/kernel.h>
 +#include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/delay.h>
  #include <linux/i2c.h>
  #include <linux/mtd/partitions.h>
  #include <linux/input.h>
  #include <linux/i2c/tps65010.h>
 +#include <linux/workqueue.h>
 +#include <linux/spi/spi.h>
 +#include <linux/spi/tsc2101.h>
 +#include <linux/clk.h>
  
  #include <asm/hardware.h>
  #include <asm/gpio.h>
@@@ -42,7 -37,6 +42,7 @@@
  #include <asm/mach/flash.h>
  #include <asm/mach/map.h>
  
 +#include <asm/arch/gpio.h>
  #include <asm/arch/gpio-switch.h>
  #include <asm/arch/mux.h>
  #include <asm/arch/tc.h>
@@@ -301,36 -295,18 +301,36 @@@ static struct platform_device h2_lcd_de
        .id             = -1,
  };
  
 +struct {
 +      struct clk      *mclk;
 +      int             initialized;
 +} h2_tsc2101;
 +
 +#define TSC2101_MUX_MCLK_ON   R10_1610_MCLK_ON
 +#define TSC2101_MUX_MCLK_OFF  R10_1610_MCLK_OFF
 +
 +static void h2_lcd_dev_init(struct spi_device *tsc2101)
 +{
 +      /* The LCD is connected to the GPIO pins of the TSC2101, so
 +       * we have to tie them here. We can also register the LCD driver
 +       * first only here, where we know that the TSC driver is ready.
 +       */
 +
 +      h2_lcd_device.dev.platform_data = tsc2101;
 +      platform_device_register(&h2_lcd_device);
 +}
 +
  static struct omap_mcbsp_reg_cfg mcbsp_regs = {
        .spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
        .spcr1 = RINTM(3) | RRST,
        .rcr2  = RPHASE | RFRLEN2(OMAP_MCBSP_WORD_8) |
 -                RWDLEN2(OMAP_MCBSP_WORD_16) | RDATDLY(1),
 +                      RWDLEN2(OMAP_MCBSP_WORD_16) | RDATDLY(1),
        .rcr1  = RFRLEN1(OMAP_MCBSP_WORD_8) | RWDLEN1(OMAP_MCBSP_WORD_16),
        .xcr2  = XPHASE | XFRLEN2(OMAP_MCBSP_WORD_8) |
 -                XWDLEN2(OMAP_MCBSP_WORD_16) | XDATDLY(1) | XFIG,
 +                      XWDLEN2(OMAP_MCBSP_WORD_16) | XDATDLY(1) | XFIG,
        .xcr1  = XFRLEN1(OMAP_MCBSP_WORD_8) | XWDLEN1(OMAP_MCBSP_WORD_16),
        .srgr1 = FWID(15),
        .srgr2 = GSYNC | CLKSP | FSGM | FPER(31),
 -
        .pcr0  = CLKXM | CLKRM | FSXP | FSRP | CLKXP | CLKRP,
        /*.pcr0 = CLKXP | CLKRP,*/        /* mcbsp: slave */
  };
  static struct omap_alsa_codec_config alsa_config = {
        .name                   = "H2 TSC2101",
        .mcbsp_regs_alsa        = &mcbsp_regs,
 -      .codec_configure_dev    = NULL, /* tsc2101_configure, */
 -      .codec_set_samplerate   = NULL, /* tsc2101_set_samplerate, */
 -      .codec_clock_setup      = NULL, /* tsc2101_clock_setup, */
 -      .codec_clock_on         = NULL, /* tsc2101_clock_on, */
 -      .codec_clock_off        = NULL, /* tsc2101_clock_off, */
 -      .get_default_samplerate = NULL, /* tsc2101_get_default_samplerate, */
  };
  
  static struct platform_device h2_mcbsp1_device = {
        },
  };
  
 +static void h2_audio_dev_init(struct spi_device *tsc2101)
 +{
 +      h2_mcbsp1_device.dev.platform_data = tsc2101;
 +      platform_device_register(&h2_mcbsp1_device);
 +}
 +
 +static int h2_tsc2101_init(struct spi_device *spi)
 +{
 +      int r;
 +
 +      if (h2_tsc2101.initialized) {
 +              printk(KERN_ERR "tsc2101: already initialized\n");
 +              return -ENODEV;
 +      }
 +
 +      /* Get the MCLK */
 +      h2_tsc2101.mclk = clk_get(&spi->dev, "mclk");
 +      if (IS_ERR(h2_tsc2101.mclk)) {
 +              dev_err(&spi->dev, "unable to get the clock MCLK\n");
 +              return PTR_ERR(h2_tsc2101.mclk);
 +      }
 +      if ((r = clk_set_rate(h2_tsc2101.mclk, 12000000)) < 0) {
 +              dev_err(&spi->dev, "unable to set rate to the MCLK\n");
 +              goto err;
 +      }
 +
 +      omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
 +      omap_cfg_reg(N15_1610_UWIRE_CS1);
 +
 +      h2_lcd_dev_init(spi);
 +      h2_audio_dev_init(spi);
 +
 +      return 0;
 +err:
 +      clk_put(h2_tsc2101.mclk);
 +      return r;
 +}
 +
 +static void h2_tsc2101_cleanup(struct spi_device *spi)
 +{
 +      clk_put(h2_tsc2101.mclk);
 +      omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
 +}
 +
 +static void h2_tsc2101_enable_mclk(struct spi_device *spi)
 +{
 +      omap_cfg_reg(TSC2101_MUX_MCLK_ON);
 +      clk_enable(h2_tsc2101.mclk);
 +}
 +
 +static void h2_tsc2101_disable_mclk(struct spi_device *spi)
 +{
 +      clk_disable(h2_tsc2101.mclk);
 +      omap_cfg_reg(R10_1610_MCLK_OFF);
 +}
 +
 +static struct tsc2101_platform_data h2_tsc2101_platform_data = {
 +      .init           = h2_tsc2101_init,
 +      .cleanup        = h2_tsc2101_cleanup,
 +      .enable_mclk    = h2_tsc2101_enable_mclk,
 +      .disable_mclk   = h2_tsc2101_disable_mclk,
 +};
 +
 +static struct spi_board_info h2_spi_board_info[] __initdata = {
 +      [0] = {
 +              .modalias       = "tsc2101",
 +              .bus_num        = 2,
 +              .chip_select    = 1,
 +              .max_speed_hz   = 16000000,
 +              .platform_data  = &h2_tsc2101_platform_data,
 +      },
 +};
 +
  static struct platform_device *h2_devices[] __initdata = {
        &h2_nor_device,
        &h2_nand_device,
        &h2_smc91x_device,
        &h2_irda_device,
        &h2_kp_device,
 -      &h2_lcd_device,
 -      &h2_mcbsp1_device,
  };
  
  static void __init h2_init_smc91x(void)
  static struct i2c_board_info __initdata h2_i2c_board_info[] = {
        {
                I2C_BOARD_INFO("tps65010", 0x48),
-               .type           = "tps65010",
                .irq            = OMAP_GPIO_IRQ(58),
        }, {
                I2C_BOARD_INFO("isp1301_omap", 0x2d),
-               .type           = "isp1301_omap",
                .irq            = OMAP_GPIO_IRQ(2),
        },
  };
@@@ -496,18 -405,6 +494,18 @@@ static struct omap_board_config_kernel 
        { OMAP_TAG_LCD,         &h2_lcd_config },
  };
  
 +static struct omap_gpio_switch h2_gpio_switches[] __initdata = {
 +      {
 +              .name                   = "mmc_slot",
 +              .gpio                   = OMAP_MPUIO(1),
 +              .type                   = OMAP_GPIO_SWITCH_TYPE_COVER,
 +              .debounce_rising        = 100,
 +              .debounce_falling       = 0,
 +              .notify                 = h2_mmc_slot_cover_handler,
 +              .notify_data            = NULL,
 +      },
 +};
 +
  #define H2_NAND_RB_GPIO_PIN   62
  
  static int h2_nand_dev_ready(struct omap_nand_platform_data *data)
@@@ -551,16 -448,12 +549,16 @@@ static void __init h2_init(void
  #endif
  
        platform_add_devices(h2_devices, ARRAY_SIZE(h2_devices));
 +      spi_register_board_info(h2_spi_board_info,
 +                              ARRAY_SIZE(h2_spi_board_info));
        omap_board_config = h2_config;
        omap_board_config_size = ARRAY_SIZE(h2_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, h2_i2c_board_info,
                              ARRAY_SIZE(h2_i2c_board_info));
        h2_mmc_init();
 +      omap_register_gpio_switches(h2_gpio_switches,
 +                                  ARRAY_SIZE(h2_gpio_switches));
  }
  
  static void __init h2_map_io(void)
index e49e070f1ed4bb864b2699c351b684a3f6793578,7fbaa8d648cd8b8eea971c2b3168a9b1bdd204a4..733a7eea033649eb48653e512a96c1eb9ba8f42f
  #include <linux/mtd/nand.h>
  #include <linux/mtd/partitions.h>
  #include <linux/input.h>
 -#include <linux/spi/spi.h>
  #include <linux/i2c/tps65010.h>
 +#include <linux/clk.h>
 +#include <linux/i2c.h>
 +#include <linux/spi/spi.h>
 +#include <linux/spi/tsc210x.h>
  
  #include <asm/setup.h>
  #include <asm/page.h>
  #include <asm/mach/flash.h>
  #include <asm/mach/map.h>
  
 +#include <media/v4l2-int-device.h>
 +
 +#include <asm/arch/gpio.h>
 +#include <asm/arch/gpio-switch.h>
  #include <asm/arch/gpioexpander.h>
  #include <asm/arch/irqs.h>
  #include <asm/arch/mux.h>
@@@ -59,8 -52,6 +59,8 @@@
  #include <asm/arch/mcbsp.h>
  #include <asm/arch/omap-alsa.h>
  
 +#include <../drivers/media/video/ov9640.h>
 +
  #define H3_TS_GPIO    48
  
  static int h3_keymap[] = {
@@@ -385,12 -376,6 +385,12 @@@ static struct platform_device h3_lcd_de
        .id             = -1,
  };
  
 +static struct tsc210x_config tsc_platform_data = {
 +      .use_internal           = 1,
 +      .monitor                = TSC_VBAT | TSC_TEMP,
 +      .mclk                   = "mclk",
 +};
 +
  static struct spi_board_info h3_spi_board_info[] __initdata = {
        [0] = {
                .modalias       = "tsc2101",
                .chip_select    = 0,
                .irq            = OMAP_GPIO_IRQ(H3_TS_GPIO),
                .max_speed_hz   = 16000000,
 -              /* .platform_data       = &tsc_platform_data, */
 +              .platform_data  = &tsc_platform_data,
        },
  };
  
@@@ -486,6 -471,13 +486,6 @@@ static struct omap_board_config_kernel 
        { OMAP_TAG_LCD,         &h3_lcd_config },
  };
  
 -static struct i2c_board_info __initdata h3_i2c_board_info[] = {
 -       {
 -              I2C_BOARD_INFO("tps65013", 0x48),
 -               /* .irq         = OMAP_GPIO_IRQ(??), */
 -       },
 -};
 -
  static struct omap_gpio_switch h3_gpio_switches[] __initdata = {
        {
                .name                   = "mmc_slot",
@@@ -505,114 -497,6 +505,118 @@@ static int nand_dev_ready(struct omap_n
        return omap_get_gpio_datain(H3_NAND_RB_GPIO_PIN);
  }
  
 +#if defined(CONFIG_VIDEO_OV9640) || defined(CONFIG_VIDEO_OV9640_MODULE)
 +/*
 + * Common OV9640 register initialization for all image sizes, pixel formats,
 + * and frame rates
 + */
 +const static struct ov9640_reg ov9640_common[] = {
 +
 +      { 0x12, 0x80 }, { 0x11, 0x80 }, { 0x13, 0x88 }, /* COM7, CLKRC, COM8 */
 +      { 0x01, 0x58 }, { 0x02, 0x24 }, { 0x04, 0x00 }, /* BLUE, RED, COM1 */
 +      { 0x0E, 0x81 }, { 0x0F, 0x4F }, { 0x14, 0xcA }, /* COM5, COM6, COM9 */
 +      { 0x16, 0x02 }, { 0x1B, 0x01 }, { 0x24, 0x70 }, /* ?, PSHFT, AEW */
 +      { 0x25, 0x68 }, { 0x26, 0xD3 }, { 0x27, 0x90 }, /* AEB, VPT, BBIAS */
 +      { 0x2A, 0x00 }, { 0x2B, 0x00 }, { 0x32, 0x24 }, /* EXHCH, EXHCL, HREF */
 +      { 0x33, 0x02 }, { 0x37, 0x02 }, { 0x38, 0x13 }, /* CHLF, ADC, ACOM */
 +      { 0x39, 0xF0 }, { 0x3A, 0x00 }, { 0x3B, 0x01 }, /* OFON, TSLB, COM11 */
 +      { 0x3D, 0x90 }, { 0x3E, 0x02 }, { 0x3F, 0xF2 }, /* COM13, COM14, EDGE */
 +      { 0x41, 0x02 }, { 0x42, 0xC8 },         /* COM16, COM17 */
 +      { 0x43, 0xF0 }, { 0x44, 0x10 }, { 0x45, 0x6C }, /* ?, ?, ? */
 +      { 0x46, 0x6C }, { 0x47, 0x44 }, { 0x48, 0x44 }, /* ?, ?, ? */
 +      { 0x49, 0x03 }, { 0x59, 0x49 }, { 0x5A, 0x94 }, /* ?, ?, ? */
 +      { 0x5B, 0x46 }, { 0x5C, 0x84 }, { 0x5D, 0x5C }, /* ?, ?, ? */
 +      { 0x5E, 0x08 }, { 0x5F, 0x00 }, { 0x60, 0x14 }, /* ?, ?, ? */
 +      { 0x61, 0xCE },                                 /* ? */
 +      { 0x62, 0x70 }, { 0x63, 0x00 }, { 0x64, 0x04 }, /* LCC1, LCC2, LCC3 */
 +      { 0x65, 0x00 }, { 0x66, 0x00 },                 /* LCC4, LCC5 */
 +      { 0x69, 0x00 }, { 0x6A, 0x3E }, { 0x6B, 0x3F }, /* HV, MBD, DBLV */
 +      { 0x6C, 0x40 }, { 0x6D, 0x30 }, { 0x6E, 0x4B }, /* GSP1, GSP2, GSP3 */
 +      { 0x6F, 0x60 }, { 0x70, 0x70 }, { 0x71, 0x70 }, /* GSP4, GSP5, GSP6 */
 +      { 0x72, 0x70 }, { 0x73, 0x70 }, { 0x74, 0x60 }, /* GSP7, GSP8, GSP9 */
 +      { 0x75, 0x60 }, { 0x76, 0x50 }, { 0x77, 0x48 }, /* GSP10,GSP11,GSP12 */
 +      { 0x78, 0x3A }, { 0x79, 0x2E }, { 0x7A, 0x28 }, /* GSP13,GSP14,GSP15 */
 +      { 0x7B, 0x22 }, { 0x7C, 0x04 }, { 0x7D, 0x07 }, /* GSP16,GST1, GST2 */
 +      { 0x7E, 0x10 }, { 0x7F, 0x28 }, { 0x80, 0x36 }, /* GST3, GST4, GST5 */
 +      { 0x81, 0x44 }, { 0x82, 0x52 }, { 0x83, 0x60 }, /* GST6, GST7, GST8 */
 +      { 0x84, 0x6C }, { 0x85, 0x78 }, { 0x86, 0x8C }, /* GST9, GST10,GST11 */
 +      { 0x87, 0x9E }, { 0x88, 0xBB }, { 0x89, 0xD2 }, /* GST12,GST13,GST14 */
 +      { 0x8A, 0xE6 }, { 0x13, 0xaF }, { 0x15, 0x02 }, /* GST15, COM8 */
 +      { 0x22, 0x8a }, /* GROS */
 +      { OV9640_REG_TERM, OV9640_VAL_TERM }
 +};
 +
 +static int ov9640_sensor_power_set(int power)
 +{
 +      unsigned char expa;
 +      int err;
 +
 +      /* read current state of GPIO EXPA outputs */
 +      err = read_gpio_expa(&expa, 0x27);
 +      if (err) {
 +              printk(KERN_ERR "Error reading GPIO EXPA\n");
 +              return err;
 +      }
 +      /* Clear GPIO EXPA P3 (CAMERA_MODULE_EN) to power-up/down sensor */
 +      if (power)
 +              expa |= 0x08;
 +      else
 +              expa &= ~0x08;
 +
 +      err = write_gpio_expa(expa, 0x27);
 +      if (err) {
 +              printk(KERN_ERR "Error writing to GPIO EXPA\n");
 +              return err;
 +      }
 +
 +      return err;
 +}
 +
 +static struct v4l2_ifparm ifparm = {
 +      .if_type = V4L2_IF_TYPE_BT656,
 +      .u = {
 +              .bt656 = {
 +                       .frame_start_on_rising_vs = 1,
 +                       .nobt_vs_inv = 1,
 +                       .mode = V4L2_IF_TYPE_BT656_MODE_NOBT_8BIT,
 +                       .clock_min = OV9640_XCLK_MIN,
 +                       .clock_max = OV9640_XCLK_MAX,
 +               },
 +      },
 +};
 +
 +static int ov9640_ifparm(struct v4l2_ifparm *p)
 +{
 +      *p = ifparm;
 +
 +      return 0;
 +}
 +
 +static struct ov9640_platform_data h3_ov9640_platform_data = {
 +      .power_set      = ov9640_sensor_power_set,
 +      .default_regs   = ov9640_common,
 +      .ifparm         = ov9640_ifparm,
 +};
 +#endif
 +
 +static struct i2c_board_info __initdata h3_i2c_board_info[] = {
++       {
++              I2C_BOARD_INFO("tps65013", 0x48),
++               /* .irq         = OMAP_GPIO_IRQ(??), */
++       },
 +#if defined(CONFIG_VIDEO_OV9640) || defined(CONFIG_VIDEO_OV9640_MODULE)
 +      {
 +              I2C_BOARD_INFO("ov9640", 0x30),
 +              .platform_data = &h3_ov9640_platform_data,
 +      },
 +#endif
 +      {
 +              I2C_BOARD_INFO("isp1301_omap", 0x2d),
 +              .type           = "isp1301_omap",
 +              .irq            = OMAP_GPIO_IRQ(14),
 +      },
 +};
 +
  static void __init h3_init(void)
  {
        /* Here we assume the NOR boot config:  NOR on CS3 (possibly swapped
        /* GPIO10 pullup/down register, Enable pullup on GPIO10 */
        omap_cfg_reg(V2_1710_GPIO10);
  
 +      /* TSC2101 */
 +      omap_cfg_reg(W19_1610_GPIO48);
 +      gpio_request(H3_TS_GPIO, "tsc_irq");
 +      gpio_direction_input(H3_TS_GPIO);
 +      omap_cfg_reg(N14_1610_UWIRE_CS0);
 +
        platform_add_devices(devices, ARRAY_SIZE(devices));
        spi_register_board_info(h3_spi_board_info,
                                ARRAY_SIZE(h3_spi_board_info));
        omap_register_i2c_bus(1, 100, h3_i2c_board_info,
                              ARRAY_SIZE(h3_i2c_board_info));
        h3_mmc_init();
 +      omap_register_gpio_switches(h3_gpio_switches,
 +                                  ARRAY_SIZE(h3_gpio_switches));
  }
  
  static void __init h3_init_smc91x(void)
diff --combined arch/arm/mm/Kconfig
index 2fa8ce8b0cc69f3d34264b1301aa059df44c2276,33ed048502a361b2204445e95ffc5e670dd8f645..84c138789e0036df99016b87c0d321ca98bff5c1
@@@ -372,7 -372,7 +372,7 @@@ config CPU_FEROCEO
        select CPU_PABRT_NOIFAR
        select CPU_CACHE_VIVT
        select CPU_CP15_MMU
-       select CPU_COPY_V4WB if MMU
+       select CPU_COPY_FEROCEON if MMU
        select CPU_TLB_V4WBI if MMU
  
  config CPU_FEROCEON_OLD_ID
@@@ -415,7 -415,7 +415,7 @@@ config CPU_32v6
  # ARMv7
  config CPU_V7
        bool "Support ARM V7 processor"
 -      depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB
 +      depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP3
        select CPU_32v6K
        select CPU_32v7
        select CPU_ABRT_EV7
@@@ -523,6 -523,9 +523,9 @@@ config CPU_COPY_V4W
  config CPU_COPY_V4WB
        bool
  
+ config CPU_COPY_FEROCEON
+       bool
  config CPU_COPY_V6
        bool
  
@@@ -658,7 -661,7 +661,7 @@@ config CPU_DCACHE_SIZ
  
  config CPU_DCACHE_WRITETHROUGH
        bool "Force write through D-cache"
-       depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_FEROCEON) && !CPU_DCACHE_DISABLE
+       depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020) && !CPU_DCACHE_DISABLE
        default y if CPU_ARM925T
        help
          Say Y here to use the data cache in writethrough mode. Unless you
diff --combined drivers/Makefile
index b99794b576be590d6a81244c9e1c3b83d13408a9,f65deda72d6102636e47554c9864d529df27a258..efd304112d18c26c99ebe250bf599f5250d52b9f
@@@ -28,15 -28,9 +28,15 @@@ obj-$(CONFIG_CONNECTOR)             += connector
  obj-$(CONFIG_FB_I810)           += video/i810/
  obj-$(CONFIG_FB_INTEL)          += video/intelfb/
  
 +# we also need input/serio early so serio bus is initialized by the time
 +# serial drivers start registering their serio ports
 +obj-$(CONFIG_SERIO)           += input/serio/
  obj-y                         += serial/
  obj-$(CONFIG_PARPORT)         += parport/
 -obj-y                         += base/ block/ misc/ mfd/ net/ media/
 +obj-y                         += base/ block/ misc/ mfd/ net/ media/ cbus/
 +obj-y                         += i2c/
 +obj-y                         += cbus/
 +obj-$(CONFIG_ARCH_OMAP)               += dsp/dspgateway/
  obj-$(CONFIG_NUBUS)           += nubus/
  obj-$(CONFIG_ATM)             += atm/
  obj-y                         += macintosh/
@@@ -60,13 -54,14 +60,13 @@@ obj-$(CONFIG_ATA_OVER_ETH) += block/aoe
  obj-$(CONFIG_PARIDE)          += block/paride/
  obj-$(CONFIG_TC)              += tc/
  obj-$(CONFIG_USB)             += usb/
 +obj-$(CONFIG_USB_MUSB_HDRC)   += usb/musb/
  obj-$(CONFIG_PCI)             += usb/
  obj-$(CONFIG_USB_GADGET)      += usb/gadget/
 -obj-$(CONFIG_SERIO)           += input/serio/
  obj-$(CONFIG_GAMEPORT)                += input/gameport/
  obj-$(CONFIG_INPUT)           += input/
  obj-$(CONFIG_I2O)             += message/
  obj-$(CONFIG_RTC_LIB)         += rtc/
 -obj-y                         += i2c/
  obj-$(CONFIG_W1)              += w1/
  obj-$(CONFIG_POWER_SUPPLY)    += power/
  obj-$(CONFIG_HWMON)           += hwmon/
@@@ -75,6 -70,7 +75,7 @@@ obj-$(CONFIG_WATCHDOG)                += watchdog
  obj-$(CONFIG_PHONE)           += telephony/
  obj-$(CONFIG_MD)              += md/
  obj-$(CONFIG_BT)              += bluetooth/
+ obj-$(CONFIG_ACCESSIBILITY)   += accessibility/
  obj-$(CONFIG_ISDN)            += isdn/
  obj-$(CONFIG_EDAC)            += edac/
  obj-$(CONFIG_MCA)             += mca/
index d4d1ccc954866d693bd8bba651701a1c1fb614bb,b36db1797c11138982171b421c45a325bab01a62..f02ce23ca0ea2d4b501cf9d69f7ae7e34b58ca3f
@@@ -1,4 -1,3 +1,4 @@@
 +
  /*
   * Copyright (C) 2004 Texas Instruments, Inc.
   *
@@@ -154,7 -153,7 +154,7 @@@ static int menelaus_write_reg(int reg, 
        int val = i2c_smbus_write_byte_data(the_menelaus->client, reg, value);
  
        if (val < 0) {
 -              pr_err(DRIVER_NAME ": write error");
 +              dev_err(&the_menelaus->client->dev, "write error");
                return val;
        }
  
@@@ -166,7 -165,7 +166,7 @@@ static int menelaus_read_reg(int reg
        int val = i2c_smbus_read_byte_data(the_menelaus->client, reg);
  
        if (val < 0)
 -              pr_err(DRIVER_NAME ": read error");
 +              dev_err(&the_menelaus->client->dev, "read error");
  
        return val;
  }
@@@ -314,34 -313,6 +314,34 @@@ out
  }
  EXPORT_SYMBOL(menelaus_set_slot_sel);
  
 +int menelaus_enable_slot(int slot, int enable)
 +{
 +      int ret, val;
 +
 +      mutex_lock(&the_menelaus->lock);
 +      ret = menelaus_read_reg(MENELAUS_MCT_CTRL3);
 +      if (ret < 0)
 +              goto out;
 +      val = ret;
 +      if (slot == 1) {
 +              if (enable)
 +                      val |= 1 << 0;
 +              else
 +                      val &= ~(1 << 0);
 +      } else {
 +              if (enable)
 +                      val |= 1 << 1;
 +              else
 +                      val &= ~(1 << 1);
 +      }
 +      ret = menelaus_write_reg(MENELAUS_MCT_CTRL3, val);
 +
 +out:
 +      mutex_unlock(&the_menelaus->lock);
 +      return ret;
 +}
 +EXPORT_SYMBOL(menelaus_enable_slot);
 +
  int menelaus_set_mmc_slot(int slot, int enable, int power, int cd_en)
  {
        int ret, val;
                int b;
  
                if (enable)
 -                      ret |= 1 << 1;
 +                      val |= 1 << 1;
                else
 -                      ret &= ~(1 << 1);
 +                      val &= ~(1 << 1);
                b = menelaus_read_reg(MENELAUS_MCT_CTRL2);
                b &= ~0x03;
                b |= power;
@@@ -959,7 -930,7 +959,7 @@@ static int menelaus_set_time(struct dev
                return status;
        status = menelaus_write_reg(MENELAUS_RTC_WKDAY, BIN2BCD(t->tm_wday));
        if (status < 0) {
 -              dev_err(&the_menelaus->client->dev, "rtc write reg %02x "
 +              dev_err(&the_menelaus->client->dev, "rtc write reg %02x"
                                "err %d\n", MENELAUS_RTC_WKDAY, status);
                return status;
        }
@@@ -1178,7 -1149,8 +1178,8 @@@ static inline void menelaus_rtc_init(st
  
  static struct i2c_driver menelaus_i2c_driver;
  
- static int menelaus_probe(struct i2c_client *client)
+ static int menelaus_probe(struct i2c_client *client,
+                         const struct i2c_device_id *id)
  {
        struct menelaus_chip    *menelaus;
        int                     rev = 0, val;
        /* If a true probe check the device */
        rev = menelaus_read_reg(MENELAUS_REV);
        if (rev < 0) {
 -              pr_err(DRIVER_NAME ": device not found");
 +              dev_err(&client->dev, "device not found");
                err = -ENODEV;
                goto fail1;
        }
                err = request_irq(client->irq, menelaus_irq, IRQF_DISABLED,
                                  DRIVER_NAME, menelaus);
                if (err) {
 -                      dev_dbg(&client->dev,  "can't get IRQ %d, err %d\n",
 +                      dev_dbg(&client->dev,  "can't get IRQ %d, err %d",
                                        client->irq, err);
                        goto fail1;
                }
        mutex_init(&menelaus->lock);
        INIT_WORK(&menelaus->work, menelaus_work);
  
 -      pr_info("Menelaus rev %d.%d\n", rev >> 4, rev & 0x0f);
 +      dev_info(&client->dev, "Menelaus rev %d.%d\n", rev >> 4, rev & 0x0f);
  
        val = menelaus_read_reg(MENELAUS_VCORE_CTRL1);
        if (val < 0)
@@@ -1271,17 -1243,32 +1272,24 @@@ static int __exit menelaus_remove(struc
        return 0;
  }
  
+ static const struct i2c_device_id menelaus_id[] = {
+       { "menelaus", 0 },
+       { }
+ };
+ MODULE_DEVICE_TABLE(i2c, menelaus_id);
  static struct i2c_driver menelaus_i2c_driver = {
        .driver = {
                .name           = DRIVER_NAME,
        },
        .probe          = menelaus_probe,
        .remove         = __exit_p(menelaus_remove),
+       .id_table       = menelaus_id,
  };
  
  static int __init menelaus_init(void)
  {
 -      int res;
 -
 -      res = i2c_add_driver(&menelaus_i2c_driver);
 -      if (res < 0) {
 -              pr_err(DRIVER_NAME ": driver registration failed\n");
 -              return res;
 -      }
 -
 -      return 0;
 +      return i2c_add_driver(&menelaus_i2c_driver);
  }
  
  static void __exit menelaus_exit(void)
index fb36e64ae639555a7f78eea9c2745b1ff1267f1a,10afd2068068aa35fe5ae1f84d0f034cf746e625..0eba78e5fd502272ba6d6eff275cbd65064bcbbf
@@@ -33,7 -33,6 +33,7 @@@
  #include <linux/delay.h>
  #include <linux/platform_device.h>
  #include <linux/mutex.h>
 +#include <linux/spinlock.h>
  #include <linux/errno.h>
  #include <asm/arch/gpio.h>
  #include <asm/arch/keypad.h>
@@@ -62,8 -61,6 +62,8 @@@ struct omap_kp 
        unsigned int cols;
        unsigned long delay;
        unsigned int debounce;
 +      int suspended;
 +      spinlock_t suspend_lock;
  };
  
  DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0);
@@@ -103,14 -100,6 +103,14 @@@ static u8 get_row_gpio_val(struct omap_
  static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
  {
        struct omap_kp *omap_kp = dev_id;
 +      unsigned long flags;
 +
 +      spin_lock_irqsave(&omap_kp->suspend_lock, flags);
 +      if (omap_kp->suspended) {
 +              spin_unlock_irqrestore(&omap_kp->suspend_lock, flags);
 +              return IRQ_HANDLED;
 +      }
 +      spin_unlock_irqrestore(&omap_kp->suspend_lock, flags);
  
        /* disable keyboard interrupt and schedule for handling */
        if (cpu_is_omap24xx()) {
@@@ -282,29 -271,15 +282,29 @@@ static DEVICE_ATTR(enable, S_IRUGO | S_
  #ifdef CONFIG_PM
  static int omap_kp_suspend(struct platform_device *dev, pm_message_t state)
  {
 -      /* Nothing yet */
 +      struct omap_kp *omap_kp = platform_get_drvdata(dev);
 +      unsigned long flags;
 +      spin_lock_irqsave(&omap_kp->suspend_lock, flags);
 +
 +      /*
 +       * Re-enable the interrupt in case it has been masked by the
 +       * handler and a key is still pressed.  We need the interrupt
 +       * to wake us up from suspended.
 +       */
 +      if (cpu_class_is_omap1())
 +              omap_writew(0, OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT);
 +
 +      omap_kp->suspended = 1;
  
 +      spin_unlock_irqrestore(&omap_kp->suspend_lock, flags);
        return 0;
  }
  
  static int omap_kp_resume(struct platform_device *dev)
  {
 -      /* Nothing yet */
 +      struct omap_kp *omap_kp = platform_get_drvdata(dev);
  
 +      omap_kp->suspended = 0;
        return 0;
  }
  #else
@@@ -317,7 -292,7 +317,7 @@@ static int __init omap_kp_probe(struct 
        struct omap_kp *omap_kp;
        struct input_dev *input_dev;
        struct omap_kp_platform_data *pdata =  pdev->dev.platform_data;
 -      int i, col_idx, row_idx, irq_idx, ret;
 +      int i, col_idx = 0, row_idx = 0, irq_idx, ret;
  
        if (!pdata->rows || !pdata->cols || !pdata->keymap) {
                printk(KERN_ERR "No rows, cols or keymap from pdata\n");
  
        platform_set_drvdata(pdev, omap_kp);
  
 +      spin_lock_init(&omap_kp->suspend_lock);
        omap_kp->input = input_dev;
 +      omap_kp->suspended = 0;
  
        /* Disable the interrupt for the MPUIO keyboard */
        if (!cpu_is_omap24xx())
@@@ -445,10 -418,10 +445,10 @@@ err4
  err3:
        device_remove_file(&pdev->dev, &dev_attr_enable);
  err2:
-       for (i = row_idx-1; i >=0; i--)
+       for (i = row_idx - 1; i >=0; i--)
                omap_free_gpio(row_gpios[i]);
  err1:
-       for (i = col_idx-1; i >=0; i--)
+       for (i = col_idx - 1; i >=0; i--)
                omap_free_gpio(col_gpios[i]);
  
        kfree(omap_kp);
@@@ -494,6 -467,7 +494,7 @@@ static struct platform_driver omap_kp_d
        .resume         = omap_kp_resume,
        .driver         = {
                .name   = "omap-keypad",
+               .owner  = THIS_MODULE,
        },
  };
  
@@@ -514,3 -488,4 +515,4 @@@ module_exit(omap_kp_exit)
  MODULE_AUTHOR("Timo Teräs");
  MODULE_DESCRIPTION("OMAP Keypad Driver");
  MODULE_LICENSE("GPL");
+ MODULE_ALIAS("platform:omap-keypad");
index 1542e160ad45b43c49bfc860acda4d772b580674,565ec711c2eefa6e5dc0f75dc4be5d1f6569a962..8b5fd6423897ad032e3d0a0376909c9760645774
@@@ -170,61 -170,74 +170,114 @@@ config TOUCHSCREEN_TOUCHWI
          To compile this driver as a module, choose M here: the
          module will be called touchwin.
  
- config TOUCHSCREEN_UCB1400
-       tristate "Philips UCB1400 touchscreen"
-       select AC97_BUS
-       help
-         This enables support for the Philips UCB1400 touchscreen interface.
-         The UCB1400 is an AC97 audio codec.  The touchscreen interface
-         will be initialized only after the ALSA subsystem has been
-         brought up and the UCB1400 detected.  You therefore have to
-         configure ALSA support as well (either built-in or modular,
-         independently of whether this driver is itself built-in or
-         modular) for this driver to work.
-         To compile this driver as a module, choose M here: the
-         module will be called ucb1400_ts.
 +config TOUCHSCREEN_TSC2005
 +      tristate "TSC2005 touchscreen support"
 +      help
 +        Say Y here for if you are using the touchscreen features of TSC2301.
 +
 +config TOUCHSCREEN_TSC2102
 +      tristate "TSC 2102 based touchscreens"
 +      depends on SPI_MASTER
 +      select SPI_TSC2102
 +      help
 +        Say Y here if you have a touchscreen interface using the
 +        TI TSC 2102 controller, and your board-specific initialization
 +        code includes that in its table of SPI devices.  Also make
 +        sure the proper SPI controller is selected.
 +
 +        If unsure, say N (but it's safe to say "Y").
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called tsc2102_ts.
 +
 +config TOUCHSCREEN_TSC210X
 +      tristate "TI TSC210x based touchscreens"
 +      depends on SPI_MASTER
 +      select SPI_TSC210X
 +      help
 +        Say Y here if you have a touchscreen interface using a
 +        TI TSC210x controller, and your board-specific initialisation
 +        code includes that in its table of SPI devices.
 +
 +        If unsure, say N (but it's safe to say "Y").
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called tsc210x_ts.
 +
 +config TOUCHSCREEN_TSC2301
 +      tristate "TSC2301 touchscreen support"
 +      depends on SPI_TSC2301
 +      help
 +        Say Y here for if you are using the touchscreen features of TSC2301.
 +
+ config TOUCHSCREEN_UCB1400
+       tristate "Philips UCB1400 touchscreen"
+       select AC97_BUS
+       help
+         This enables support for the Philips UCB1400 touchscreen interface.
+         The UCB1400 is an AC97 audio codec.  The touchscreen interface
+         will be initialized only after the ALSA subsystem has been
+         brought up and the UCB1400 detected.  You therefore have to
+         configure ALSA support as well (either built-in or modular,
+         independently of whether this driver is itself built-in or
+         modular) for this driver to work.
+         To compile this driver as a module, choose M here: the
+         module will be called ucb1400_ts.
+ config TOUCHSCREEN_WM97XX
+       tristate "Support for WM97xx AC97 touchscreen controllers"
+       depends on AC97_BUS
+       help
+         Say Y here if you have a Wolfson Microelectronics WM97xx
+         touchscreen connected to your system. Note that this option
+         only enables core driver, you will also need to select
+         support for appropriate chip below.
+         If unsure, say N.
+         To compile this driver as a module, choose M here: the
+         module will be called wm97xx-ts.
+ config TOUCHSCREEN_WM9705
+       bool "WM9705 Touchscreen interface support"
+       depends on TOUCHSCREEN_WM97XX
+       help
+         Say Y here if you have a Wolfson Microelectronics WM9705
+         touchscreen controller connected to your system.
+         If unsure, say N.
+ config TOUCHSCREEN_WM9712
+       bool "WM9712 Touchscreen interface support"
+       depends on TOUCHSCREEN_WM97XX
+       help
+         Say Y here if you have a Wolfson Microelectronics WM9712
+         touchscreen controller connected to your system.
+         If unsure, say N.
+ config TOUCHSCREEN_WM9713
+       bool "WM9713 Touchscreen interface support"
+       depends on TOUCHSCREEN_WM97XX
+       help
+         Say Y here if you have a Wolfson Microelectronics WM9713 touchscreen
+         controller connected to your system.
+         If unsure, say N.
+ config TOUCHSCREEN_WM97XX_MAINSTONE
+       tristate "WM97xx Mainstone accelerated touch"
+       depends on TOUCHSCREEN_WM97XX && ARCH_PXA
+       help
+         Say Y here for support for streaming mode with WM97xx touchscreens
+         on Mainstone systems.
+         If unsure, say N.
+         To compile this driver as a module, choose M here: the
+         module will be called mainstone-wm97xx.
  config TOUCHSCREEN_USB_COMPOSITE
        tristate "USB Touchscreen Driver"
        depends on USB_ARCH_HAS_HCD
index 51d3a23038a627c711a5cf7036b312dd8e6255ff,3c096d75651d4eb2756e302f7d865c117da85078..f8f08a735c509f0fe8208c2bc9dc112bdd1a5dcc
@@@ -4,6 -4,8 +4,8 @@@
  
  # Each configuration option enables a list of files.
  
+ wm97xx-ts-y := wm97xx-core.o
  obj-$(CONFIG_TOUCHSCREEN_ADS7846)     += ads7846.o
  obj-$(CONFIG_TOUCHSCREEN_BITSY)               += h3600_ts_input.o
  obj-$(CONFIG_TOUCHSCREEN_CORGI)               += corgi_ts.o
@@@ -19,8 -21,8 +21,13 @@@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT)   += p
  obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)  += touchright.o
  obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)    += touchwin.o
  obj-$(CONFIG_TOUCHSCREEN_UCB1400)     += ucb1400_ts.o
 +obj-$(CONFIG_TOUCHSCREEN_TSC2005)     += tsc2005.o
 +obj-$(CONFIG_TOUCHSCREEN_TSC2102)     += tsc2102_ts.o
 +obj-$(CONFIG_TOUCHSCREEN_OMAP)        += omap/
 +obj-$(CONFIG_TOUCHSCREEN_TSC210X)     += tsc210x_ts.o
 +obj-$(CONFIG_TOUCHSCREEN_TSC2301)     += tsc2301_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX)      += wm97xx-ts.o
+ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705)        += wm9705.o
+ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712)        += wm9712.o
+ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713)        += wm9713.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE)    += mainstone-wm97xx.o
index 0ee9ce36cad797ca7aefe85cdedaec15b8c76230,907a45fe9d40f5a828bd002ecd8d05d1562d353a..99f4ece22aa4da641988cf6abb8b5cc330f0dae1
@@@ -80,6 -80,7 +80,7 @@@ struct ads7846 
  #endif
  
        u16                     model;
+       u16                     vref_mv;
        u16                     vref_delay_usecs;
        u16                     x_plate_ohms;
        u16                     pressure_max;
   * The range is GND..vREF. The ads7843 and ads7835 must use external vREF;
   * ads7846 lets that pin be unconnected, to use internal vREF.
   */
- static unsigned vREF_mV;
- module_param(vREF_mV, uint, 0);
- MODULE_PARM_DESC(vREF_mV, "external vREF voltage, in milliVolts");
  
  struct ser_req {
        u8                      ref_on;
@@@ -206,7 -204,6 +204,6 @@@ static int ads7846_read12_ser(struct de
        struct ads7846          *ts = dev_get_drvdata(dev);
        struct ser_req          *req = kzalloc(sizeof *req, GFP_KERNEL);
        int                     status;
-       int                     uninitialized_var(sample);
        int                     use_internal;
  
        if (!req)
  
        if (status == 0) {
                /* on-wire is a must-ignore bit, a BE12 value, then padding */
-               sample = be16_to_cpu(req->sample);
-               sample = sample >> 3;
-               sample &= 0x0fff;
+               status = be16_to_cpu(req->sample);
+               status = status >> 3;
+               status &= 0x0fff;
        }
  
        kfree(req);
-       return status ? status : sample;
+       return status;
  }
  
  #if defined(CONFIG_HWMON) || defined(CONFIG_HWMON_MODULE)
@@@ -310,7 -307,7 +307,7 @@@ static inline unsigned vaux_adjust(stru
        unsigned retval = v;
  
        /* external resistors may scale vAUX into 0..vREF */
-       retval *= vREF_mV;
+       retval *= ts->vref_mv;
        retval = retval >> 12;
        return retval;
  }
@@@ -368,14 -365,14 +365,14 @@@ static int ads784x_hwmon_register(struc
        /* hwmon sensors need a reference voltage */
        switch (ts->model) {
        case 7846:
-               if (!vREF_mV) {
+               if (!ts->vref_mv) {
                        dev_dbg(&spi->dev, "assuming 2.5V internal vREF\n");
-                       vREF_mV = 2500;
+                       ts->vref_mv = 2500;
                }
                break;
        case 7845:
        case 7843:
-               if (!vREF_mV) {
+               if (!ts->vref_mv) {
                        dev_warn(&spi->dev,
                                "external vREF for ADS%d not specified\n",
                                ts->model);
@@@ -831,15 -828,6 +828,15 @@@ static int __devinit ads7846_probe(stru
                return -ENODEV;
        }
  
 +      /* enable voltage */
 +      if (pdata->vaux_control != NULL) {
 +              err = pdata->vaux_control(VAUX_ENABLE);
 +              if (err != 0) {
 +                      dev_dbg(&spi->dev, "TS vaux enable failed\n");
 +                      return err;
 +              }
 +      }
 +
        /* don't exceed max specified sample rate */
        if (spi->max_speed_hz > (125000 * SAMPLE_BITS)) {
                dev_dbg(&spi->dev, "f(sample) %d KHz?\n",
  
        ts->spi = spi;
        ts->input = input_dev;
+       ts->vref_mv = pdata->vref_mv;
  
        hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
        ts->timer.function = ads7846_timer;
diff --combined drivers/leds/Kconfig
index e2235fe564b5453bc491a6b80937349a7b227aa5,86a369bc57d6d91c9137da6940904d6172cf9f90..328e6adb509cf3de2405b6373b75aa9825c8df3c
@@@ -65,33 -65,18 +65,39 @@@ config LEDS_NET48X
          This option enables support for the Soekris net4801 and net4826 error
          LED.
  
+ config LEDS_FSG
+       tristate "LED Support for the Freecom FSG-3"
+       depends on LEDS_CLASS && MACH_FSG
+       help
+         This option enables support for the LEDs on the Freecom FSG-3.
  config LEDS_WRAP
        tristate "LED Support for the WRAP series LEDs"
        depends on LEDS_CLASS && SCx200_GPIO
        help
          This option enables support for the PCEngines WRAP programmable LEDs.
  
 +config LEDS_OMAP_DEBUG
 +      boolean "LED Support for OMAP debug board LEDs"
 +      depends on LEDS_CLASS=y && ARCH_OMAP
 +      help
 +        Enables support for the LEDs on the debug board used with OMAP
 +        reference boards like H2/H3/H4 and Perseus2.  Up to six of these
 +        may be claimed by the original ARM debug LED API.
 +
 +config LEDS_OMAP
 +      tristate "LED Support for OMAP GPIO LEDs"
 +      depends on LEDS_CLASS && ARCH_OMAP
 +      help
 +        This option enables support for the LEDs on OMAP processors.
 +
 +config LEDS_OMAP_PWM
 +      tristate "LED Support for OMAP PWM-controlled LEDs"
 +      depends on LEDS_CLASS && ARCH_OMAP && OMAP_DM_TIMER
 +      help
 +        This options enables support for LEDs connected to GPIO lines
 +        controlled by a PWM timer on OMAP CPUs.
 +
  config LEDS_H1940
        tristate "LED Support for iPAQ H1940 device"
        depends on LEDS_CLASS && ARCH_H1940
@@@ -148,6 -133,7 +154,7 @@@ config LEDS_CLEVO_MAI
  
          This module can drive the mail LED for the following notebooks:
  
+               Clevo D400P
                Clevo D410J
                Clevo D410V
                Clevo D400V/D470V (not tested, but might work)
                Clevo M5x0N (not tested, but might work)
                Positivo Mobile (Clevo M5x0V)
  
+         If your model is not listed here you can try the "nodetect"
+         module paramter.
          To compile this driver as a module, choose M here: the
          module will be called leds-clevo-mail.
  
@@@ -194,4 -183,11 +204,11 @@@ config LEDS_TRIGGER_HEARTBEA
          load average.
          If unsure, say Y.
  
+ config LEDS_TRIGGER_DEFAULT_ON
+       tristate "LED Default ON Trigger"
+       depends on LEDS_TRIGGERS
+       help
+         This allows LEDs to be initialised in the ON state.
+         If unsure, say Y.
  endif # NEW_LEDS
diff --combined drivers/leds/Makefile
index 677e9cb2bba01690d7f2c523263ee1d2a51b332a,973d626f5f4a98d582b02eeeb9113728ba605cf3..5ee9ceba2fdb98eafc88b170a55568f30afcf474
@@@ -13,8 -13,6 +13,8 @@@ obj-$(CONFIG_LEDS_S3C24XX)            += leds-s3c
  obj-$(CONFIG_LEDS_AMS_DELTA)          += leds-ams-delta.o
  obj-$(CONFIG_LEDS_NET48XX)            += leds-net48xx.o
  obj-$(CONFIG_LEDS_WRAP)                       += leds-wrap.o
 +obj-$(CONFIG_LEDS_OMAP)                       += leds-omap.o
 +obj-$(CONFIG_LEDS_OMAP_PWM)           += leds-omap-pwm.o
  obj-$(CONFIG_LEDS_H1940)              += leds-h1940.o
  obj-$(CONFIG_LEDS_COBALT_QUBE)                += leds-cobalt-qube.o
  obj-$(CONFIG_LEDS_COBALT_RAQ)         += leds-cobalt-raq.o
@@@ -22,8 -20,10 +22,10 @@@ obj-$(CONFIG_LEDS_GPIO)                     += leds-gpio.
  obj-$(CONFIG_LEDS_CM_X270)              += leds-cm-x270.o
  obj-$(CONFIG_LEDS_CLEVO_MAIL)         += leds-clevo-mail.o
  obj-$(CONFIG_LEDS_HP6XX)              += leds-hp6xx.o
+ obj-$(CONFIG_LEDS_FSG)                        += leds-fsg.o
  
  # LED Triggers
  obj-$(CONFIG_LEDS_TRIGGER_TIMER)      += ledtrig-timer.o
  obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)   += ledtrig-ide-disk.o
  obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += ledtrig-heartbeat.o
+ obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
index 2b81bb54d81f6bf2789deaef9578ea68acda71cf,fe743aa7f645fb611af3058775ad2b22bbd38081..39894a10af909469414facc74f2ebd3517eeb4c0
@@@ -1,3 -1,49 +1,49 @@@
+ #
+ # Generic video config states
+ #
+ config VIDEO_V4L2
+       tristate
+       depends on VIDEO_DEV && VIDEO_V4L2_COMMON
+       default VIDEO_DEV && VIDEO_V4L2_COMMON
+ config VIDEO_V4L1
+       tristate
+       depends on VIDEO_DEV && VIDEO_V4L2_COMMON && VIDEO_ALLOW_V4L1
+       default VIDEO_DEV && VIDEO_V4L2_COMMON && VIDEO_ALLOW_V4L1
+ config VIDEOBUF_GEN
+       tristate
+ config VIDEOBUF_DMA_SG
+       depends on HAS_DMA
+       select VIDEOBUF_GEN
+       tristate
+ config VIDEOBUF_VMALLOC
+       select VIDEOBUF_GEN
+       tristate
+ config VIDEOBUF_DVB
+       tristate
+       select VIDEOBUF_GEN
+       select VIDEOBUF_DMA_SG
+ config VIDEO_BTCX
+       tristate
+ config VIDEO_IR_I2C
+       tristate
+ config VIDEO_IR
+       tristate
+       depends on INPUT
+       select VIDEO_IR_I2C if I2C
+ config VIDEO_TVEEPROM
+       tristate
+       depends on I2C
  #
  # Multimedia Video device configuration
  #
@@@ -232,14 -278,6 +278,14 @@@ config VIDEO_TCM825
          This is a driver for the Toshiba TCM825x VGA camera sensor.
          It is used for example in Nokia N800.
  
 +config VIDEO_OV9640
 +      tristate "OmniVision OV9640 sensor support"
 +      depends on I2C && VIDEO_V4L2
 +      ---help---
 +        This is a Video4Linux2 sensor-level driver for the OmniVision
 +        OV9640 camera.  It is currently working with the TI OMAP2
 +        camera controller.
 +
  config VIDEO_SAA7110
        tristate "Philips SAA7110 video decoder"
        depends on VIDEO_V4L1 && I2C
@@@ -652,7 -690,7 +698,7 @@@ config VIDEO_MX
        tristate "Siemens-Nixdorf 'Multimedia eXtension Board'"
        depends on PCI && VIDEO_V4L1 && I2C
        select VIDEO_SAA7146_VV
-       select VIDEO_TUNER
+       select MEDIA_TUNER
        select VIDEO_SAA7111 if VIDEO_HELPER_CHIPS_AUTO
        select VIDEO_TDA9840 if VIDEO_HELPER_CHIPS_AUTO
        select VIDEO_TEA6415C if VIDEO_HELPER_CHIPS_AUTO
@@@ -710,8 -748,8 +756,10 @@@ source "drivers/media/video/au0828/Kcon
  
  source "drivers/media/video/ivtv/Kconfig"
  
 +source drivers/media/video/omap/Kconfig
 +
+ source "drivers/media/video/cx18/Kconfig"
  config VIDEO_M32R_AR
        tristate "AR devices"
        depends on M32R && VIDEO_V4L1
@@@ -740,15 -778,6 +788,15 @@@ config VIDEO_CAFE_CCI
          CMOS camera controller.  This is the controller found on first-
          generation OLPC systems.
  
 +config VIDEO_OMAP2
 +      tristate "OMAP 2 Camera support (EXPERIMENTAL)"
 +      select VIDEOBUF_GEN
 +      select VIDEOBUF_DMA_SG
 +      depends on VIDEO_V4L2 && ARCH_OMAP24XX
 +      ---help---
 +        Driver for an OMAP 2 camera controller.
 +
 +
  #
  # USB Multimedia device configuration
  #
index 384bec1e86cfeda2ae29a4729749dd085f1191d8,a352c6e31f0cbf96496e68d8f6c86e12b7089c0a..e137df636b59fa416602176300a203b8ec9daab9
@@@ -84,17 -84,7 +84,7 @@@ obj-$(CONFIG_VIDEO_HEXIUM_GEMINI) += he
  obj-$(CONFIG_VIDEO_DPC) += dpc7146.o
  obj-$(CONFIG_TUNER_3036) += tuner-3036.o
  
- obj-$(CONFIG_VIDEO_TUNER) += tuner.o
- obj-$(CONFIG_TUNER_XC2028) += tuner-xc2028.o
- obj-$(CONFIG_TUNER_SIMPLE) += tuner-simple.o
- # tuner-types will be merged into tuner-simple, in the future
- obj-$(CONFIG_TUNER_SIMPLE) += tuner-types.o
- obj-$(CONFIG_TUNER_MT20XX) += mt20xx.o
- obj-$(CONFIG_TUNER_TDA8290) += tda8290.o
- obj-$(CONFIG_TUNER_TEA5767) += tea5767.o
- obj-$(CONFIG_TUNER_TEA5761) += tea5761.o
- obj-$(CONFIG_TUNER_TDA9887) += tda9887.o
+ obj-$(CONFIG_MEDIA_TUNER) += tuner.o
  
  obj-$(CONFIG_VIDEOBUF_GEN) += videobuf-core.o
  obj-$(CONFIG_VIDEOBUF_DMA_SG) += videobuf-dma-sg.o
@@@ -104,7 -94,6 +94,7 @@@ obj-$(CONFIG_VIDEO_BTCX)  += btcx-risc.
  obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
  
  obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o
 +obj-$(CONFIG_VIDEO_OMAP_CAMERA) += omap/
  
  obj-$(CONFIG_VIDEO_CX25840) += cx25840/
  obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o
@@@ -114,9 -103,7 +104,9 @@@ obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.
  obj-$(CONFIG_VIDEO_CAFE_CCIC) += cafe_ccic.o
  obj-$(CONFIG_VIDEO_OV7670)    += ov7670.o
  
 +obj-$(CONFIG_VIDEO_OMAP2) += omap24xxcam.o omap24xxcam-dma.o
  obj-$(CONFIG_VIDEO_TCM825X) += tcm825x.o
 +obj-$(CONFIG_VIDEO_OV9640)    += ov9640.o
  
  obj-$(CONFIG_USB_DABUSB)        += dabusb.o
  obj-$(CONFIG_USB_OV511)         += ov511.o
@@@ -137,6 -124,7 +127,7 @@@ obj-$(CONFIG_USB_VICAM)         += usbv
  obj-$(CONFIG_USB_QUICKCAM_MESSENGER)  += usbvideo/
  
  obj-$(CONFIG_VIDEO_IVTV) += ivtv/
+ obj-$(CONFIG_VIDEO_CX18) += cx18/
  
  obj-$(CONFIG_VIDEO_VIVI) += vivi.o
  obj-$(CONFIG_VIDEO_CX23885) += cx23885/
@@@ -150,3 -138,4 +141,4 @@@ obj-$(CONFIG_VIDEO_AU0828) += au0828
  
  EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
  EXTRA_CFLAGS += -Idrivers/media/dvb/frontends
+ EXTRA_CFLAGS += -Idrivers/media/common/tuners
diff --combined drivers/misc/Kconfig
index f46d457880856027802e78a1152fa3152df46e2f,636af2862308fab614b4f9f9b2395ce0a24c7e4f..4885d2dc6f58ebf3c3615bd525f9c2459a9f667d
@@@ -140,6 -140,7 +140,7 @@@ config ACER_WM
        depends on EXPERIMENTAL
        depends on ACPI
        depends on LEDS_CLASS
+       depends on NEW_LEDS
        depends on BACKLIGHT_CLASS_DEVICE
        depends on SERIO_I8042
        select ACPI_WMI
@@@ -160,6 -161,7 +161,7 @@@ config ASUS_LAPTO
          depends on ACPI
        depends on EXPERIMENTAL && !ACPI_ASUS
        depends on LEDS_CLASS
+       depends on NEW_LEDS
        depends on BACKLIGHT_CLASS_DEVICE
          ---help---
          This is the new Linux driver for Asus laptops. It may also support some
@@@ -241,10 -243,13 +243,13 @@@ config SONYPI_COMPA
  config THINKPAD_ACPI
        tristate "ThinkPad ACPI Laptop Extras"
        depends on X86 && ACPI
+       select BACKLIGHT_LCD_SUPPORT
        select BACKLIGHT_CLASS_DEVICE
        select HWMON
        select NVRAM
-       depends on INPUT
+       select INPUT
+       select NEW_LEDS
+       select LEDS_CLASS
        ---help---
          This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
          support for Fn-Fx key combinations, Bluetooth control, video
@@@ -344,6 -349,7 +349,7 @@@ config ATMEL_SS
  config INTEL_MENLOW
        tristate "Thermal Management driver for Intel menlow platform"
        depends on ACPI_THERMAL
+       select THERMAL
        depends on X86
        ---help---
          ACPI thermal management enhancement driver on
  
          If unsure, say N.
  
 -        If you have an Eee PC laptop, say Y or M here.
+ config EEEPC_LAPTOP
+       tristate "Eee PC Hotkey Driver (EXPERIMENTAL)"
+       depends on X86
+       depends on ACPI
+       depends on BACKLIGHT_CLASS_DEVICE
+       depends on HWMON
+       depends on EXPERIMENTAL
++
+       ---help---
+         This driver supports the Fn-Fx keys on Eee PC laptops.
+         It also adds the ability to switch camera/wlan on/off.
-         bool "Serial Trace Interface support"
-         depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
-         default n
-         help
-           Serial Trace Interface. The protocols suported for OMAP1/2/3 are
-           STI/CSTI/XTIv2 correspondingly.
 +config OMAP_STI
++      bool "Serial Trace Interface support"
++      depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
++      default n
++      help
++        Serial Trace Interface. The protocols suported for OMAP1/2/3 are
++        STI/CSTI/XTIv2 correspondingly.
 +
 +config OMAP_STI_CONSOLE
 +      bool "STI console support"
 +      depends on OMAP_STI
 +      help
 +        This enables a console driver by way of STI/XTI.
  
  config ENCLOSURE_SERVICES
        tristate "Enclosure Services"
diff --combined drivers/misc/Makefile
index 77ec228e55f348e3731c7e59bfff4bd03eab5c3b,1952875a272ec406dfcbc8566a606002eebee128..2649528f06d5f5b6c2e0cc957792ea6187bdd31c
@@@ -5,10 -5,10 +5,11 @@@ obj- := misc.o        # Dummy rule to force bu
  
  obj-$(CONFIG_IBM_ASM)         += ibmasm/
  obj-$(CONFIG_HDPU_FEATURES)   += hdpuftrs/
 +obj-$(CONFIG_OMAP_STI)                += sti/
  obj-$(CONFIG_MSI_LAPTOP)     += msi-laptop.o
  obj-$(CONFIG_ACER_WMI)     += acer-wmi.o
- obj-$(CONFIG_ASUS_LAPTOP)     += asus-laptop.o
+ obj-$(CONFIG_ASUS_LAPTOP)     += asus-laptop.o
+ obj-$(CONFIG_EEEPC_LAPTOP)    += eeepc-laptop.o
  obj-$(CONFIG_ATMEL_PWM)               += atmel_pwm.o
  obj-$(CONFIG_ATMEL_SSC)               += atmel-ssc.o
  obj-$(CONFIG_ATMEL_TCLIB)     += atmel_tclib.o
index 6874899ee93b40815fb2873737eaa0c167b9a757,e472a0e9de9d913228cfa47bc8351b9f360c9e12..e103e19d5b2d13fa5331532c109c402046ce8169
@@@ -119,7 -119,8 +119,8 @@@ static struct mtd_partition * newpart(c
                char *p;
  
                name = ++s;
-               if ((p = strchr(name, delim)) == 0)
+               p = strchr(name, delim);
+               if (!p)
                {
                        printk(KERN_ERR ERRP "no closing %c found in partition name\n", delim);
                        return NULL;
                        return NULL;
                }
                /* more partitions follow, parse them */
-               if ((parts = newpart(s + 1, &s, num_parts,
-                                    this_part + 1, &extra_mem, extra_mem_size)) == 0)
-                 return NULL;
+               parts = newpart(s + 1, &s, num_parts, this_part + 1,
+                               &extra_mem, extra_mem_size);
+               if (!parts)
+                       return NULL;
        }
        else
        {       /* this is the last partition: allocate space for all */
@@@ -308,9 -310,6 +310,6 @@@ static int parse_cmdline_partitions(str
        struct cmdline_mtd_partition *part;
        char *mtd_id = master->name;
  
-       if(!cmdline)
-               return -EINVAL;
        /* parse command line */
        if (!cmdline_parsed)
                mtdpart_setup_real(cmdline);
                        return part->num_parts;
                }
        }
-       return -EINVAL;
+       return 0;
  }
  
  
   *
   * This function needs to be visible for bootloaders.
   */
 -static int mtdpart_setup(char *s)
 +int mtdpart_setup(char *s)
  {
        cmdline = s;
        return 1;
index a1342a2a1cb976d9e739020ddfd1a108fa713073,240b0e2d095d6bade93555986d0cd09cc163aa80..dca13a77f245440361d8450d16a129dacfd2a2b1
@@@ -61,18 -61,16 +61,18 @@@ static void omap_set_vpp(struct map_inf
  {
        static int      count;
  
 -      if (enable) {
 -              if (count++ == 0)
 -                      OMAP_EMIFS_CONFIG_REG |= OMAP_EMIFS_CONFIG_WP;
 -      } else {
 -              if (count && (--count == 0))
 -                      OMAP_EMIFS_CONFIG_REG &= ~OMAP_EMIFS_CONFIG_WP;
 +      if (cpu_class_is_omap1()) {
 +              if (enable) {
 +                      if (count++ == 0)
 +                              OMAP_EMIFS_CONFIG_REG |= OMAP_EMIFS_CONFIG_WP;
 +              } else {
 +                      if (count && (--count == 0))
 +                              OMAP_EMIFS_CONFIG_REG &= ~OMAP_EMIFS_CONFIG_WP;
 +              }
        }
  }
  
- static int __devinit omapflash_probe(struct platform_device *pdev)
+ static int __init omapflash_probe(struct platform_device *pdev)
  {
        int err;
        struct omapflash_info *info;
@@@ -132,15 -130,14 +132,15 @@@ out_free_info
        return err;
  }
  
- static int __devexit omapflash_remove(struct platform_device *pdev)
+ static int __exit omapflash_remove(struct platform_device *pdev)
  {
        struct omapflash_info *info = platform_get_drvdata(pdev);
 +      struct flash_platform_data *pdata = pdev->dev.platform_data;
  
        platform_set_drvdata(pdev, NULL);
  
        if (info) {
 -              if (info->parts) {
 +              if (info->parts || (pdata && pdata->parts)) {
                        del_mtd_partitions(info->mtd);
                        kfree(info->parts);
                } else
  }
  
  static struct platform_driver omapflash_driver = {
-       .probe  = omapflash_probe,
-       .remove = __devexit_p(omapflash_remove),
+       .remove = __exit_p(omapflash_remove),
        .driver = {
                .name   = "omapflash",
+               .owner  = THIS_MODULE,
        },
  };
  
  static int __init omapflash_init(void)
  {
-       return platform_driver_register(&omapflash_driver);
+       return platform_driver_probe(&omapflash_driver, omapflash_probe);
  }
  
  static void __exit omapflash_exit(void)
@@@ -177,4 -174,4 +177,4 @@@ module_exit(omapflash_exit)
  
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("MTD NOR map driver for TI OMAP boards");
+ MODULE_ALIAS("platform:omapflash");
diff --combined drivers/mtd/nand/Kconfig
index d76c2e7ca7dcbb961b528d75eb87d8a1473f5506,5076faf9ca66c54ae300d960f5befccbfc01fb55..3d5e4323a554cf8f30e869b17a647cc8571a7131
@@@ -69,25 -69,6 +69,25 @@@ config MTD_NAND_AMS_DELT
        help
          Support for NAND flash on Amstrad E3 (Delta).
  
 +config MTD_NAND_OMAP2
 +      tristate "NAND Flash device on OMAP 2420H4/2430SDP boards"
 +      depends on (ARM && ARCH_OMAP2 && MTD_NAND)
 +      help
 +          Support for NAND flash on Texas Instruments 2430SDP/2420H4 platforms.
 +
 +config MTD_NAND_OMAP
 +      tristate "NAND Flash device on OMAP H3/H2/P2 boards"
 +      depends on ARM && ARCH_OMAP1 && MTD_NAND && (MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_PERSEUS2)
 +      help
 +        Support for NAND flash on Texas Instruments H3/H2/P2 platforms.
 +
 +config MTD_NAND_OMAP_HW
 +      bool "OMAP HW NAND Flash controller support"
 +        depends on ARM && ARCH_OMAP16XX && MTD_NAND
 +
 +      help
 +        Driver for TI OMAP16xx hardware NAND flash controller.
 +
  config MTD_NAND_TOTO
        tristate "NAND Flash device on TOTO board"
        depends on ARCH_OMAP && BROKEN
@@@ -297,6 -278,54 +297,54 @@@ config MTD_NAND_AT9
        help
          Enables support for NAND Flash / Smart Media Card interface
          on Atmel AT91 processors.
+ choice
+       prompt "ECC management for NAND Flash / SmartMedia on AT91"
+       depends on MTD_NAND_AT91
+ config MTD_NAND_AT91_ECC_HW
+       bool "Hardware ECC"
+       depends on ARCH_AT91SAM9263 || ARCH_AT91SAM9260
+       help
+         Uses hardware ECC provided by the at91sam9260/at91sam9263 chip
+         instead of software ECC.
+         The hardware ECC controller is capable of single bit error
+         correction and 2-bit random detection per page.
+         NB : hardware and software ECC schemes are incompatible.
+         If you switch from one to another, you'll have to erase your
+         mtd partition.
+         If unsure, say Y
+ config MTD_NAND_AT91_ECC_SOFT
+       bool "Software ECC"
+       help
+         Uses software ECC.
+         NB : hardware and software ECC schemes are incompatible.
+         If you switch from one to another, you'll have to erase your
+         mtd partition.
+ config MTD_NAND_AT91_ECC_NONE
+       bool "No ECC (testing only, DANGEROUS)"
+       depends on DEBUG_KERNEL
+       help
+         No ECC will be used.
+         It's not a good idea and it should be reserved for testing
+         purpose only.
+         If unsure, say N
+         endchoice
+ endchoice
+ config MTD_NAND_PXA3xx
+       bool "Support for NAND flash devices on PXA3xx"
+       depends on MTD_NAND && PXA3xx
+       help
+         This enables the driver for the NAND flash device found on
+         PXA3xx processors
  
  config MTD_NAND_CM_X270
        tristate "Support for NAND Flash on CM-X270 modules"
@@@ -349,4 -378,12 +397,12 @@@ config MTD_NAND_FSL_ELB
          Enabling this option will enable you to use this to control
          external NAND devices.
  
+ config MTD_NAND_FSL_UPM
+       tristate "Support for NAND on Freescale UPM"
+       depends on MTD_NAND && OF_GPIO && (PPC_83xx || PPC_85xx)
+       select FSL_LBC
+       help
+         Enables support for NAND Flash chips wired onto Freescale PowerPC
+         processor localbus with User-Programmable Machine support.
  endif # MTD_NAND
index 2aadcf9d48d9a535f44f30355bebd0616f543ec7,a6e74a46992a7bde250a5ca7a5d9b20eef96ea00..c8be0dad517efe99316cf31ab010bdf22386dd02
@@@ -24,16 -24,15 +24,18 @@@ obj-$(CONFIG_MTD_NAND_TS7250)              += ts725
  obj-$(CONFIG_MTD_NAND_NANDSIM)                += nandsim.o
  obj-$(CONFIG_MTD_NAND_CS553X)         += cs553x_nand.o
  obj-$(CONFIG_MTD_NAND_NDFC)           += ndfc.o
 +obj-$(CONFIG_MTD_NAND_OMAP)           += omap-nand-flash.o
 +obj-$(CONFIG_MTD_NAND_OMAP2)          += omap2.o
 +obj-$(CONFIG_MTD_NAND_OMAP_HW)                += omap-hw.o
  obj-$(CONFIG_MTD_NAND_AT91)           += at91_nand.o
  obj-$(CONFIG_MTD_NAND_CM_X270)                += cmx270_nand.o
  obj-$(CONFIG_MTD_NAND_BASLER_EXCITE)  += excite_nandflash.o
+ obj-$(CONFIG_MTD_NAND_PXA3xx)         += pxa3xx_nand.o
  obj-$(CONFIG_MTD_NAND_PLATFORM)               += plat_nand.o
  obj-$(CONFIG_MTD_ALAUDA)              += alauda.o
  obj-$(CONFIG_MTD_NAND_PASEMI)         += pasemi_nand.o
  obj-$(CONFIG_MTD_NAND_ORION)          += orion_nand.o
  obj-$(CONFIG_MTD_NAND_FSL_ELBC)               += fsl_elbc_nand.o
+ obj-$(CONFIG_MTD_NAND_FSL_UPM)                += fsl_upm.o
  
  nand-objs := nand_base.o nand_bbt.o
diff --combined drivers/net/smc91x.c
index 5a5aa5f0a8302b83e268a6e4bf0cd2bb49d0e5a3,a188e33484e631326f366edd68b33f635fce94e6..c9ef38c9c2d00c75405d829ada53367eca64d22c
@@@ -132,6 -132,7 +132,7 @@@ module_param(watchdog, int, 0400)
  MODULE_PARM_DESC(watchdog, "transmit timeout in milliseconds");
  
  MODULE_LICENSE("GPL");
+ MODULE_ALIAS("platform:smc91x");
  
  /*
   * The internal workings of the driver.  If you are changing anything
@@@ -447,11 -448,6 +448,11 @@@ static inline void  smc_rcv(struct net_
                dev->name, packet_number, status,
                packet_len, packet_len);
  
 +      if (unlikely(packet_len == 0 && !(status & RS_ERRORS))) {
 +              printk(KERN_ERR "%s: bad memory timings: rxlen %u status %x\n",
 +                      dev->name, packet_len, status);
 +              status |= RS_TOOSHORT;
 +      }
        back:
        if (unlikely(packet_len < 6 || status & RS_ERRORS)) {
                if (status & RS_TOOLONG && packet_len <= (1514 + 4 + 6)) {
@@@ -2313,6 -2309,7 +2314,7 @@@ static struct platform_driver smc_drive
        .resume         = smc_drv_resume,
        .driver         = {
                .name   = CARDNAME,
+               .owner  = THIS_MODULE,
        },
  };
  
diff --combined drivers/rtc/Kconfig
index 50189de2dbc5a175b7f673763e66d02f34f36a54,6cc2c0330230fefc372193e275b7748aee32c112..d79db5c58a6bbd0632da82e4c91374fde13f8546
@@@ -20,10 -20,6 +20,6 @@@ menuconfig RTC_CLAS
  
  if RTC_CLASS
  
- if GEN_RTC || RTC
- comment "Conflicting RTC option has been selected, check GEN_RTC and RTC"
- endif
  config RTC_HCTOSYS
        bool "Set system time from RTC on startup and resume"
        depends on RTC_CLASS = y
@@@ -250,16 -246,6 +246,16 @@@ config RTC_DRV_TWL9233
          platforms.  The support is integrated with the rest of
          the Menelaus driver; it's not separate module.
  
 +config RTC_DRV_TWL4030
 +      tristate "OMAP TWL4030 Real Time Clock"
 +      depends on RTC_CLASS && TWL4030_CORE
 +      help
 +        If you say yes here you get support for internal Real-Time 
 +        Clock of TWL4030 chip.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called rtc-twl4030.
 +
  config RTC_DRV_S35390A
        tristate "Seiko Instruments S-35390A"
        select BITREVERSE
@@@ -314,6 -300,7 +310,7 @@@ comment "Platform RTC drivers
  config RTC_DRV_CMOS
        tristate "PC-style 'CMOS'"
        depends on X86 || ALPHA || ARM || M32R || ATARI || PPC || MIPS
+       default y if X86
        help
          Say "yes" here to get direct support for the real time clock
          found in every PC or ACPI-based system, and some other boards.
diff --combined drivers/serial/8250.c
index 39db36f323cc72386b4e34cf6f6613f2ec42ef70,a1ca9b7bf2d5862b7466fbdcee4f5099b882ac76..1c4000c7e48e5932c1aef0976b8eac5bdc555314
@@@ -1505,11 -1505,7 +1505,11 @@@ static irqreturn_t serial8250_interrupt
  
        DEBUG_INTR("end.\n");
  
 +#ifdef CONFIG_ARCH_OMAP15XX
 +      return IRQ_HANDLED;     /* FIXME: iir status not ready on 1510 */
 +#else
        return IRQ_RETVAL(handled);
 +#endif
  }
  
  /*
@@@ -1872,6 -1868,7 +1872,7 @@@ static int serial8250_startup(struct ua
        }
  
        if (is_real_interrupt(up->port.irq)) {
+               unsigned char iir1;
                /*
                 * Test for UARTs that do not reassert THRE when the
                 * transmitter is idle and the interrupt has already
                wait_for_xmitr(up, UART_LSR_THRE);
                serial_out_sync(up, UART_IER, UART_IER_THRI);
                udelay(1); /* allow THRE to set */
-               serial_in(up, UART_IIR);
+               iir1 = serial_in(up, UART_IIR);
                serial_out(up, UART_IER, 0);
                serial_out_sync(up, UART_IER, UART_IER_THRI);
                udelay(1); /* allow a working UART time to re-assert THRE */
                 * If the interrupt is not reasserted, setup a timer to
                 * kick the UART on a regular basis.
                 */
-               if (iir & UART_IIR_NO_INT) {
+               if (!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) {
                        pr_debug("ttyS%d - using backup timer\n", port->line);
                        up->timer.function = serial8250_backup_timeout;
                        up->timer.data = (unsigned long)up;
@@@ -2228,24 -2225,13 +2229,26 @@@ serial8250_set_termios(struct uart_por
                        /* emulated UARTs (Lucent Venus 167x) need two steps */
                        serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
                }
 +
 +              /* Note that we need to set ECB to access write water mark
 +               * bits. First allow FCR tx fifo write, then set fcr with
 +               * possible TX fifo settings. */
 +              if (uart_config[up->port.type].flags & UART_CAP_EFR) {
 +                      serial_outp(up, UART_LCR, 0xbf);        /* Access EFR */
 +                      serial_outp(up, UART_EFR, UART_EFR_ECB);
 +                      serial_outp(up, UART_LCR, 0x0);         /* Access FCR */
 +                      serial_outp(up, UART_FCR, fcr);
 +                      serial_outp(up, UART_LCR, 0xbf);        /* Access EFR */
 +                      serial_outp(up, UART_EFR, 0);
 +                      serial_outp(up, UART_LCR, cval);        /* Access FCR */
 +        } else
                serial_outp(up, UART_FCR, fcr);         /* set fcr */
        }
        serial8250_set_mctrl(&up->port, up->port.mctrl);
        spin_unlock_irqrestore(&up->port.lock, flags);
-       tty_termios_encode_baud_rate(termios, baud, baud);
+       /* Don't rewrite B0 */
+       if (tty_termios_baud_rate(termios))
+               tty_termios_encode_baud_rate(termios, baud, baud);
  }
  
  static void
@@@ -2268,11 -2254,6 +2271,11 @@@ static int serial8250_request_std_resou
        unsigned int size = 8 << up->port.regshift;
        int ret = 0;
  
 +#ifdef CONFIG_ARCH_OMAP
 +      if (is_omap_port((unsigned int)up->port.membase))
 +              size = 0x16 << up->port.regshift;
 +#endif
 +
        switch (up->port.iotype) {
        case UPIO_AU:
                size = 0x100000;
                }
  
                if (up->port.flags & UPF_IOREMAP) {
-                       up->port.membase = ioremap(up->port.mapbase, size);
+                       up->port.membase = ioremap_nocache(up->port.mapbase,
+                                                                       size);
                        if (!up->port.membase) {
                                release_mem_region(up->port.mapbase, size);
                                ret = -ENOMEM;
diff --combined drivers/spi/Kconfig
index 809302d2ed5de1c9bbc19d81646b14b9b98fb5a7,fae9e8f3d092ce6e34afcf4e89ed5cfc73f0d39f..74e890f22a1d7b5b66bc5563ac73741ccc9b85a4
@@@ -5,11 -5,9 +5,9 @@@
  # nobody's needed a slave side API yet.  The master-role API is not
  # fully appropriate there, so it'd need some thought to do well.
  #
- menu "SPI support"
-       depends on HAS_IOMEM
- config SPI
+ menuconfig SPI
        bool "SPI support"
+       depends on HAS_IOMEM
        help
          The "Serial Peripheral Interface" is a low level synchronous
          protocol.  Chips that support SPI can have data transfer rates
          (half duplex), SSP, SSI, and PSP.  This driver framework should
          work with most such devices and controllers.
  
+ if SPI
  config SPI_DEBUG
        boolean "Debug support for SPI drivers"
-       depends on SPI && DEBUG_KERNEL
+       depends on DEBUG_KERNEL
        help
          Say "yes" to enable debug messaging (like dev_dbg and pr_debug),
          sysfs, and debugfs support in SPI controller and protocol drivers.
@@@ -221,62 -221,6 +221,62 @@@ config SPI_AT2
          This driver can also be built as a module.  If so, the module
          will be called at25.
  
 +config SPI_TSC2101
 +       depends on SPI_MASTER
 +       tristate "TSC2101 chip support"
 +       ---help---
 +         Say Y here if you want support for the TSC2101 chip.
 +       At the moment it provides basic register read / write interface
 +       as well as a way to enable the MCLK clock.
 +       
 +config SPI_TSC2102
 +       depends on SPI_MASTER
 +       tristate "TSC2102 codec support"
 +       ---help---
 +         Say Y here if you want support for the TSC2102 chip.  It
 +       will be needed for the touchscreen driver on some boards.
 +
 +config SPI_TSC210X
 +      depends on SPI_MASTER && EXPERIMENTAL
 +      tristate "TI TSC210x (TSC2101/TSC2102) support"
 +      help
 +        Say Y here if you want support for the TSC210x chips.  Some
 +        boards use these for touchscreen and audio support.
 +
 +        These are members of a family of highly integrated PDA analog
 +        interface circuit.  They include a 12-bit ADC used for battery,
 +        temperature, touchscreen, and other sensors.  They also have
 +        an audio DAC and amplifier, and in some models an audio ADC.
 +        The audio support is highly chip-specific, but most of the
 +        sensor support works the same.
 +
 +        Note that the device has to be present in the board's SPI
 +        devices table for this driver to load.  This driver doesn't
 +        automatically enable touchscreen, sensors or audio
 +        functionality - enable these in their respective menus.
 +
 +config SPI_TSC2301
 +      tristate "TSC2301 driver"
 +      depends on SPI_MASTER
 +      help
 +        Say Y here if you have a TSC2301 chip connected to an SPI
 +        bus on your board.
 +
 +        The TSC2301 is a highly integrated PDA analog interface circuit.
 +        It contains a complete 12-bit A/D resistive touch screen
 +        converter (ADC) including drivers, touch pressure measurement
 +        capability, keypad controller, and 8-bit D/A converter (DAC) output
 +        for LCD contrast control.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called tsc2301.
 +
 +config SPI_TSC2301_AUDIO
 +      boolean "TSC2301 audio support"
 +      depends on SPI_TSC2301 && SND
 +      help
 +        Say Y here for if you are using the audio features of TSC2301.
 +
  config SPI_SPIDEV
        tristate "User mode SPI device driver support"
        depends on SPI_MASTER && EXPERIMENTAL
@@@ -301,5 -245,4 +301,4 @@@ config SPI_TLE62X
  
  # (slave support would go here)
  
- endmenu # "SPI support"
+ endif # SPI
index 0dfe0c7753cdc863c3b245cccdb3925e02954d19,6e784d2db42324a91995732fc82f7c16f32201c7..7ce8b9edfde180beb3b9f8be315aa04cf5174fd6
@@@ -44,8 -44,8 +44,8 @@@ menuconfig USB_GADGE
  if USB_GADGET
  
  config USB_GADGET_DEBUG
-       boolean "Debugging messages"
-       depends on USB_GADGET && DEBUG_KERNEL && EXPERIMENTAL
+       boolean "Debugging messages (DEVELOPMENT)"
+       depends on USB_GADGET && DEBUG_KERNEL
        help
           Many controller and gadget drivers will print some debugging
           messages if you use this option to ask for those messages.
@@@ -58,7 -58,7 +58,7 @@@
           production build.
  
  config USB_GADGET_DEBUG_FILES
-       boolean "Debugging information files"
+       boolean "Debugging information files (DEVELOPMENT)"
        depends on USB_GADGET && PROC_FS
        help
           Some of the drivers in the "gadget" framework can expose
@@@ -69,7 -69,7 +69,7 @@@
           here.  If in doubt, or to conserve kernel memory, say "N".
  
  config USB_GADGET_DEBUG_FS
-       boolean "Debugging information files in debugfs"
+       boolean "Debugging information files in debugfs (DEVELOPMENT)"
        depends on USB_GADGET && DEBUG_FS
        help
           Some of the drivers in the "gadget" framework can expose
@@@ -231,6 -231,26 +231,26 @@@ config SUPERH_BUILT_IN_M6659
           However, this problem is improved if change a value of
           NET_IP_ALIGN to 4.
  
+ config USB_GADGET_PXA27X
+       boolean "PXA 27x"
+       depends on ARCH_PXA && PXA27x
+       help
+          Intel's PXA 27x series XScale ARM v5TE processors include
+          an integrated full speed USB 1.1 device controller.
+          It has up to 23 endpoints, as well as endpoint zero (for
+          control transfers).
+          Say "y" to link the driver statically, or "m" to build a
+          dynamically linked module called "pxa27x_udc" and force all
+          gadget drivers to also be dynamically linked.
+ config USB_PXA27X
+       tristate
+       depends on USB_GADGET_PXA27X
+       default USB_GADGET
+       select USB_GADGET_SELECTED
  config USB_GADGET_GOKU
        boolean "Toshiba TC86C001 'Goku-S'"
        depends on PCI
@@@ -264,20 -284,10 +284,20 @@@ config USB_LH7A40
        default USB_GADGET
        select USB_GADGET_SELECTED
  
 +# built in ../musb along with host support
 +config USB_GADGET_MUSB_HDRC
 +      boolean "Inventra HDRC USB Peripheral (TI, ...)"
 +      depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
 +      select USB_GADGET_DUALSPEED
 +      select USB_GADGET_SELECTED
 +      help
 +        This OTG-capable silicon IP is used in dual designs including
 +        the TI DaVinci, OMAP 243x, OMAP 343x, and TUSB 6010.
 +
  config USB_GADGET_OMAP
        boolean "OMAP USB Device Controller"
        depends on ARCH_OMAP
 -      select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
 +      select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG
        help
           Many Texas Instruments OMAP processors have flexible full
           speed USB device controllers, with support for up to 30
@@@ -347,7 -357,7 +367,7 @@@ config USB_AT9
  
  config USB_GADGET_DUMMY_HCD
        boolean "Dummy HCD (DEVELOPMENT)"
-       depends on (USB=y || (USB=m && USB_GADGET=m)) && EXPERIMENTAL
+       depends on USB=y || (USB=m && USB_GADGET=m)
        select USB_GADGET_DUALSPEED
        help
          This host controller driver emulates USB, looping all data transfer
@@@ -414,7 -424,6 +434,6 @@@ choic
  
  config USB_ZERO
        tristate "Gadget Zero (DEVELOPMENT)"
-       depends on EXPERIMENTAL
        help
          Gadget Zero is a two-configuration device.  It either sinks and
          sources bulk data; or it loops back a configurable number of
@@@ -478,8 -487,8 +497,8 @@@ config USB_ET
          dynamically linked module called "g_ether".
  
  config USB_ETH_RNDIS
-       bool "RNDIS support (EXPERIMENTAL)"
-       depends on USB_ETH && EXPERIMENTAL
+       bool "RNDIS support"
+       depends on USB_ETH
        default y
        help
           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
@@@ -505,6 -514,9 +524,9 @@@ config USB_GADGETF
          All endpoints, transfer speeds, and transfer types supported by
          the hardware are available, through read() and write() calls.
  
+         Currently, this option is still labelled as EXPERIMENTAL because
+         of existing race conditions in the underlying in-kernel AIO core.
          Say "y" to link the driver statically, or "m" to build a
          dynamically linked module called "gadgetfs".
  
index 699ff42ff6d7d37398da45b6e755a4ea2c589b8e,881d74c3d9646b482130b2afcf651ed974a97f6a..3d560fffaaba5e7a82a6f2ef32d9f372f1423202
@@@ -54,7 -54,6 +54,7 @@@
  
  #include <asm/arch/dma.h>
  #include <asm/arch/usb.h>
 +#include <asm/arch/control.h>
  
  #include "omap_udc.h"
  
@@@ -164,7 -163,7 +164,7 @@@ static int omap_ep_enable(struct usb_e
                        || ep->bEndpointAddress != desc->bEndpointAddress
                        || ep->maxpacket < le16_to_cpu
                                                (desc->wMaxPacketSize)) {
-               DBG("%s, bad ep or descriptor\n", __FUNCTION__);
+               DBG("%s, bad ep or descriptor\n", __func__);
                return -EINVAL;
        }
        maxp = le16_to_cpu (desc->wMaxPacketSize);
                                && maxp != ep->maxpacket)
                        || le16_to_cpu(desc->wMaxPacketSize) > ep->maxpacket
                        || !desc->wMaxPacketSize) {
-               DBG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name);
+               DBG("%s, bad %s maxpacket\n", __func__, _ep->name);
                return -ERANGE;
        }
  
        if (ep->bmAttributes != desc->bmAttributes
                        && ep->bmAttributes != USB_ENDPOINT_XFER_BULK
                        && desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
-               DBG("%s, %s type mismatch\n", __FUNCTION__, _ep->name);
+               DBG("%s, %s type mismatch\n", __func__, _ep->name);
                return -EINVAL;
        }
  
        udc = ep->udc;
        if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
-               DBG("%s, bogus device state\n", __FUNCTION__);
+               DBG("%s, bogus device state\n", __func__);
                return -ESHUTDOWN;
        }
  
@@@ -250,7 -249,7 +250,7 @@@ static int omap_ep_disable(struct usb_e
        unsigned long   flags;
  
        if (!_ep || !ep->desc) {
-               DBG("%s, %s not enabled\n", __FUNCTION__,
+               DBG("%s, %s not enabled\n", __func__,
                        _ep ? ep->ep.name : NULL);
                return -EINVAL;
        }
@@@ -937,11 -936,11 +937,11 @@@ omap_ep_queue(struct usb_ep *_ep, struc
        /* catch various bogus parameters */
        if (!_req || !req->req.complete || !req->req.buf
                        || !list_empty(&req->queue)) {
-               DBG("%s, bad params\n", __FUNCTION__);
+               DBG("%s, bad params\n", __func__);
                return -EINVAL;
        }
        if (!_ep || (!ep->desc && ep->bEndpointAddress)) {
-               DBG("%s, bad ep\n", __FUNCTION__);
+               DBG("%s, bad ep\n", __func__);
                return -EINVAL;
        }
        if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
                        && (ep->bEndpointAddress & USB_DIR_IN) == 0
                        && !cpu_class_is_omap2()
                        && (req->req.length % ep->ep.maxpacket) != 0) {
-               DBG("%s, no partial packet OUT reads\n", __FUNCTION__);
+               DBG("%s, no partial packet OUT reads\n", __func__);
                return -EMSGSIZE;
        }
  
@@@ -1266,8 -1265,6 +1266,6 @@@ static int can_pullup(struct omap_udc *
  
  static void pullup_enable(struct omap_udc *udc)
  {
-       udc->gadget.dev.parent->power.power_state = PMSG_ON;
-       udc->gadget.dev.power.power_state = PMSG_ON;
        UDC_SYSCON1_REG |= UDC_PULLUP_EN;
        if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx())
                OTG_CTRL_REG |= OTG_BSESSVLD;
@@@ -2291,15 -2288,8 +2289,15 @@@ static int proc_otg_show(struct seq_fil
  
        tmp = OTG_REV_REG;
        if (cpu_is_omap24xx()) {
 +              /*
 +               * REVISIT: Not clear how this works on OMAP2.  trans
 +               * is ANDed to produce bits 7 and 8, which might make
 +               * sense for USB_TRANSCEIVER_CTRL_REG on OMAP1,
 +               * but with CONTROL_DEVCONF, these bits have something to
 +               * do with the frame adjustment counter and McBSP2.
 +               */
                ctrl_name = "control_devconf";
 -              trans = CONTROL_DEVCONF_REG;
 +              trans = omap_ctrl_readb(OMAP2_CONTROL_DEVCONF0);
        } else {
                ctrl_name = "tranceiver_ctrl";
                trans = USB_TRANSCEIVER_CTRL_REG;
@@@ -2514,6 -2504,7 +2512,7 @@@ static int proc_udc_open(struct inode *
  }
  
  static const struct file_operations proc_ops = {
+       .owner          = THIS_MODULE,
        .open           = proc_udc_open,
        .read           = seq_read,
        .llseek         = seq_lseek,
  
  static void create_proc_file(void)
  {
-       struct proc_dir_entry *pde;
-       pde = create_proc_entry (proc_filename, 0, NULL);
-       if (pde)
-               pde->proc_fops = &proc_ops;
+       proc_create(proc_filename, 0, NULL, &proc_ops);
  }
  
  static void remove_proc_file(void)
@@@ -2585,9 -2572,7 +2580,9 @@@ omap_ep_setup(char *name, u8 addr, u8 t
                 * and ignored for PIO-IN on newer chips
                 * (for more reliable behavior)
                 */
 -              if (!use_dma || cpu_is_omap15xx() || cpu_is_omap24xx())
 +              if ((!use_dma && (addr & USB_DIR_IN))
 +                              || machine_is_omap_apollon()
 +                              || cpu_is_omap15xx())
                        dbuf = 0;
  
                switch (maxp) {
@@@ -3071,8 -3056,6 +3066,6 @@@ static int omap_udc_suspend(struct plat
                omap_pullup(&udc->gadget, 0);
        }
  
-       udc->gadget.dev.power.power_state = PMSG_SUSPEND;
-       udc->gadget.dev.parent->power.power_state = PMSG_SUSPEND;
        return 0;
  }
  
diff --combined drivers/usb/host/Kconfig
index c7d83751793c499a03fb324a4c4c49f9bd239bf4,33b467a8352dc95892b09dba5a023d64968ebc1f..1655a40ddb57ab744419f9a0dbc31d5fbbc879cb
@@@ -4,6 -4,19 +4,19 @@@
  comment "USB Host Controller Drivers"
        depends on USB
  
+ config USB_C67X00_HCD
+       tristate "Cypress C67x00 HCD support"
+       depends on USB
+       help
+         The Cypress C67x00 (EZ-Host/EZ-OTG) chips are dual-role
+         host/peripheral/OTG USB controllers.
+         Enable this option to support this chip in host controller mode.
+         If unsure, say N.
+         To compile this driver as a module, choose M here: the
+         module will be called c67x00.
  config USB_EHCI_HCD
        tristate "EHCI HCD (USB 2.0) support"
        depends on USB && USB_ARCH_HAS_EHCI
  
          To compile this driver as a module, choose M here: the
          module will be called ehci-hcd.
 +choice
 +      prompt "PHY/TLL mode"
 +      depends on USB_EHCI_HCD && EXPERIMENTAL && ARCH_OMAP34XX
 +      ---help---
 +      Choose PHY or TLL mode of operation
 +
 +config OMAP_EHCI_PHY_MODE
 +      bool "PHY mode: ISP1504 on Port1/2 (NEW 3430ES2.0)"
 +      depends on USB_EHCI_HCD && EXPERIMENTAL && ARCH_OMAP34XX
 +      ---help---
 +        EHCI PHY mode. Port1 and Port2 are connected to ISP1504 transcievers
 +
 +config OMAP_EHCI_TLL_MODE
 +      bool "TLL mode: (EXPERIMENTAL)"
 +      depends on USB_EHCI_HCD && EXPERIMENTAL && ARCH_OMAP34XX
 +      ---help---
 +      OMAP EHCI controller has TLL mode of operation for all 3 ports.
 +      Use this mode when no transciever is present
 +endchoice
  
  config USB_EHCI_ROOT_HUB_TT
-       bool "Root Hub Transaction Translators (EXPERIMENTAL)"
-       depends on USB_EHCI_HCD && EXPERIMENTAL
+       bool "Root Hub Transaction Translators"
+       depends on USB_EHCI_HCD
        ---help---
          Some EHCI chips have vendor-specific extensions to integrate
          transaction translators, so that no OHCI or UHCI companion
@@@ -114,6 -108,32 +127,32 @@@ config USB_ISP116X_HC
          To compile this driver as a module, choose M here: the
          module will be called isp116x-hcd.
  
+ config USB_ISP1760_HCD
+       tristate "ISP 1760 HCD support"
+       depends on USB && EXPERIMENTAL
+       ---help---
+         The ISP1760 chip is a USB 2.0 host controller.
+         This driver does not support isochronous transfers or OTG.
+         To compile this driver as a module, choose M here: the
+         module will be called isp1760-hcd.
+ config USB_ISP1760_PCI
+       bool "Support for the PCI bus"
+       depends on USB_ISP1760_HCD && PCI
+       ---help---
+         Enables support for the device present on the PCI bus.
+         This should only be required if you happen to have the eval kit from
+         NXP and you are going to test it.
+ config USB_ISP1760_OF
+       bool "Support for the OF platform bus"
+       depends on USB_ISP1760_HCD && OF
+       ---help---
+         Enables support for the device present on the PowerPC
+         OpenFirmware platform bus.
  config USB_OHCI_HCD
        tristate "OHCI HCD support"
        depends on USB && USB_ARCH_HAS_OHCI
@@@ -279,3 -299,9 +318,9 @@@ config USB_R8A66597_HC
          To compile this driver as a module, choose M here: the
          module will be called r8a66597-hcd.
  
+ config SUPERH_ON_CHIP_R8A66597
+       boolean "Enable SuperH on-chip USB like the R8A66597"
+       depends on USB_R8A66597_HCD && CPU_SUBTYPE_SH7366
+       help
+          Renesas SuperH processor has USB like the R8A66597.
+          This driver supported processor is SH7366.
index 83547e28da391a288361ca4b759d92100c35ebba,369a8a5ea7bb374da2776dd3a02587b0f58b06fb..af03b626a7219894364f4b61f19b0d9b175a998d
   * Special thanks to Intel and VIA for providing host controllers to
   * test this driver on, and Cypress (including In-System Design) for
   * providing early devices for those host controllers to talk to!
-  *
-  * HISTORY:
-  *
-  * 2004-05-10 Root hub and PCI suspend/resume support; remote wakeup. (db)
-  * 2004-02-24 Replace pci_* with generic dma_* API calls (dsaxena@plexity.net)
-  * 2003-12-29 Rewritten high speed iso transfer support (by Michal Sojka,
-  *    <sojkam@centrum.cz>, updates by DB).
-  *
-  * 2002-11-29 Correct handling for hw async_next register.
-  * 2002-08-06 Handling for bulk and interrupt transfers is mostly shared;
-  *    only scheduling is different, no arbitrary limitations.
-  * 2002-07-25 Sanity check PCI reads, mostly for better cardbus support,
-  *    clean up HC run state handshaking.
-  * 2002-05-24 Preliminary FS/LS interrupts, using scheduling shortcuts
-  * 2002-05-11 Clear TT errors for FS/LS ctrl/bulk.  Fill in some other
-  *    missing pieces:  enabling 64bit dma, handoff from BIOS/SMM.
-  * 2002-05-07 Some error path cleanups to report better errors; wmb();
-  *    use non-CVS version id; better iso bandwidth claim.
-  * 2002-04-19 Control/bulk/interrupt submit no longer uses giveback() on
-  *    errors in submit path.  Bugfixes to interrupt scheduling/processing.
-  * 2002-03-05 Initial high-speed ISO support; reduce ITD memory; shift
-  *    more checking to generic hcd framework (db).  Make it work with
-  *    Philips EHCI; reduce PCI traffic; shorten IRQ path (Rory Bolt).
-  * 2002-01-14 Minor cleanup; version synch.
-  * 2002-01-08 Fix roothub handoff of FS/LS to companion controllers.
-  * 2002-01-04 Control/Bulk queuing behaves.
-  *
-  * 2001-12-12 Initial patch version for Linux 2.5.1 kernel.
-  * 2001-June  Works with usb-storage and NEC EHCI on 2.4
   */
  
  #define DRIVER_VERSION "10 Dec 2004"
@@@ -95,7 -66,7 +66,7 @@@
  static const char     hcd_name [] = "ehci_hcd";
  
  
- #undef EHCI_VERBOSE_DEBUG
+ #undef VERBOSE_DEBUG
  #undef EHCI_URB_TRACE
  
  #ifdef DEBUG
@@@ -174,6 -145,16 +145,16 @@@ static int handshake (struct ehci_hcd *
        return -ETIMEDOUT;
  }
  
+ static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr,
+                                      u32 mask, u32 done, int usec)
+ {
+       int error = handshake(ehci, ptr, mask, done, usec);
+       if (error)
+               ehci_to_hcd(ehci)->state = HC_STATE_HALT;
+       return error;
+ }
  /* force HC to halt state from unknown (EHCI spec section 2.3) */
  static int ehci_halt (struct ehci_hcd *ehci)
  {
@@@ -246,11 -227,9 +227,9 @@@ static void ehci_quiesce (struct ehci_h
        /* wait for any schedule enables/disables to take effect */
        temp = ehci_readl(ehci, &ehci->regs->command) << 10;
        temp &= STS_ASS | STS_PSS;
-       if (handshake (ehci, &ehci->regs->status, STS_ASS | STS_PSS,
-                               temp, 16 * 125) != 0) {
-               ehci_to_hcd(ehci)->state = HC_STATE_HALT;
+       if (handshake_on_error_set_halt(ehci, &ehci->regs->status,
+                                       STS_ASS | STS_PSS, temp, 16 * 125))
                return;
-       }
  
        /* then disable anything that's still active */
        temp = ehci_readl(ehci, &ehci->regs->command);
        ehci_writel(ehci, temp, &ehci->regs->command);
  
        /* hardware can take 16 microframes to turn off ... */
-       if (handshake (ehci, &ehci->regs->status, STS_ASS | STS_PSS,
-                               0, 16 * 125) != 0) {
-               ehci_to_hcd(ehci)->state = HC_STATE_HALT;
-               return;
-       }
+       handshake_on_error_set_halt(ehci, &ehci->regs->status,
+                                   STS_ASS | STS_PSS, 0, 16 * 125);
  }
  
  /*-------------------------------------------------------------------------*/
@@@ -355,17 -331,13 +331,13 @@@ static void ehci_turn_off_all_ports(str
                                &ehci->regs->port_status[port]);
  }
  
- /* ehci_shutdown kick in for silicon on any bus (not just pci, etc).
-  * This forcibly disables dma and IRQs, helping kexec and other cases
-  * where the next system software may expect clean state.
+ /*
+  * Halt HC, turn off all ports, and let the BIOS use the companion controllers.
+  * Should be called with ehci->lock held.
   */
- static void
- ehci_shutdown (struct usb_hcd *hcd)
+ static void ehci_silence_controller(struct ehci_hcd *ehci)
  {
-       struct ehci_hcd *ehci;
-       ehci = hcd_to_ehci (hcd);
-       (void) ehci_halt (ehci);
+       ehci_halt(ehci);
        ehci_turn_off_all_ports(ehci);
  
        /* make BIOS/etc use companion controller during reboot */
        ehci_readl(ehci, &ehci->regs->configured_flag);
  }
  
+ /* ehci_shutdown kick in for silicon on any bus (not just pci, etc).
+  * This forcibly disables dma and IRQs, helping kexec and other cases
+  * where the next system software may expect clean state.
+  */
+ static void ehci_shutdown(struct usb_hcd *hcd)
+ {
+       struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+       del_timer_sync(&ehci->watchdog);
+       del_timer_sync(&ehci->iaa_watchdog);
+       spin_lock_irq(&ehci->lock);
+       ehci_silence_controller(ehci);
+       spin_unlock_irq(&ehci->lock);
+ }
  static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
  {
        unsigned port;
@@@ -425,15 -413,15 +413,15 @@@ static void ehci_work (struct ehci_hcd 
                timer_action (ehci, TIMER_IO_WATCHDOG);
  }
  
+ /*
+  * Called when the ehci_hcd module is removed.
+  */
  static void ehci_stop (struct usb_hcd *hcd)
  {
        struct ehci_hcd         *ehci = hcd_to_ehci (hcd);
  
        ehci_dbg (ehci, "stop\n");
  
-       /* Turn off port power on all root hub ports. */
-       ehci_port_power (ehci, 0);
        /* no more interrupts ... */
        del_timer_sync (&ehci->watchdog);
        del_timer_sync(&ehci->iaa_watchdog);
        if (HC_IS_RUNNING (hcd->state))
                ehci_quiesce (ehci);
  
+       ehci_silence_controller(ehci);
        ehci_reset (ehci);
-       ehci_writel(ehci, 0, &ehci->regs->intr_enable);
        spin_unlock_irq(&ehci->lock);
  
-       /* let companion controllers work when we aren't */
-       ehci_writel(ehci, 0, &ehci->regs->configured_flag);
        remove_companion_file(ehci);
        remove_debug_files (ehci);
  
@@@ -676,7 -661,7 +661,7 @@@ static irqreturn_t ehci_irq (struct usb
        cmd = ehci_readl(ehci, &ehci->regs->command);
        bh = 0;
  
- #ifdef        EHCI_VERBOSE_DEBUG
+ #ifdef        VERBOSE_DEBUG
        /* unrequested/ignored: Frame List Rollover */
        dbg_status (ehci, "irq", status);
  #endif
        /* remote wakeup [4.3.1] */
        if (status & STS_PCD) {
                unsigned        i = HCS_N_PORTS (ehci->hcs_params);
+               /* kick root hub later */
                pcd_status = status;
  
                /* resume root hub? */
  
        /* PCI errors [4.15.2.4] */
        if (unlikely ((status & STS_FATAL) != 0)) {
-               /* bogus "fatal" IRQs appear on some chips... why?  */
-               status = ehci_readl(ehci, &ehci->regs->status);
                dbg_cmd (ehci, "fatal", ehci_readl(ehci,
                                                   &ehci->regs->command));
                dbg_status (ehci, "fatal", status);
@@@ -758,7 -743,7 +743,7 @@@ dead
        if (bh)
                ehci_work (ehci);
        spin_unlock (&ehci->lock);
-       if (pcd_status & STS_PCD)
+       if (pcd_status)
                usb_hcd_poll_rh_status(hcd);
        return IRQ_HANDLED;
  }
@@@ -788,8 -773,14 +773,14 @@@ static int ehci_urb_enqueue 
        INIT_LIST_HEAD (&qtd_list);
  
        switch (usb_pipetype (urb->pipe)) {
-       // case PIPE_CONTROL:
-       // case PIPE_BULK:
+       case PIPE_CONTROL:
+               /* qh_completions() code doesn't handle all the fault cases
+                * in multi-TD control transfers.  Even 1KB is rare anyway.
+                */
+               if (urb->transfer_buffer_length > (16 * 1024))
+                       return -EMSGSIZE;
+               /* FALLTHROUGH */
+       /* case PIPE_BULK: */
        default:
                if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
                        return -ENOMEM;
@@@ -1018,11 -1009,6 +1009,11 @@@ MODULE_LICENSE ("GPL")
  #define       PLATFORM_DRIVER         ehci_hcd_au1xxx_driver
  #endif
  
 +#ifdef CONFIG_ARCH_OMAP34XX
 +#include "ehci-omap.c"
 +#define       PLATFORM_DRIVER         ehci_hcd_omap_driver
 +#endif
 +
  #ifdef CONFIG_PPC_PS3
  #include "ehci-ps3.c"
  #define       PS3_SYSTEM_BUS_DRIVER   ps3_ehci_driver
index b05f216b024bf19bdeb544a0b569709c0bea2c7c,6859fb5f1d6f6a5d2f9dd29b0c3d063697c15233..f14be49a6138dfe8bfcd458b5cf2e17222ca1068
@@@ -227,7 -227,7 +227,7 @@@ static int ohci_omap_init(struct usb_hc
  
        omap_ohci_clock_power(1);
  
 -      if (cpu_is_omap1510()) {
 +      if (cpu_is_omap15xx()) {
                omap_1510_local_bus_power(1);
                omap_1510_local_bus_init();
        }
@@@ -315,7 -315,7 +315,7 @@@ static int usb_hcd_omap_probe (const st
        if (IS_ERR(usb_host_ck))
                return PTR_ERR(usb_host_ck);
  
 -      if (!cpu_is_omap1510())
 +      if (!cpu_is_omap15xx())
                usb_dc_ck = clk_get(0, "usb_dc_ck");
        else
                usb_dc_ck = clk_get(0, "lb_ck");
@@@ -466,7 -466,6 +466,6 @@@ static const struct hc_driver ohci_omap
         */
        .hub_status_data =      ohci_hub_status_data,
        .hub_control =          ohci_hub_control,
-       .hub_irq_enable =       ohci_rhsc_enable,
  #ifdef        CONFIG_PM
        .bus_suspend =          ohci_bus_suspend,
        .bus_resume =           ohci_bus_resume,
@@@ -505,21 -504,20 +504,20 @@@ static int ohci_omap_suspend(struct pla
  
        omap_ohci_clock_power(0);
        ohci_to_hcd(ohci)->state = HC_STATE_SUSPENDED;
-       dev->dev.power.power_state = PMSG_SUSPEND;
        return 0;
  }
  
  static int ohci_omap_resume(struct platform_device *dev)
  {
-       struct ohci_hcd *ohci = hcd_to_ohci(platform_get_drvdata(dev));
+       struct usb_hcd  *hcd = platform_get_drvdata(dev);
+       struct ohci_hcd *ohci = hcd_to_ohci(hcd);
  
        if (time_before(jiffies, ohci->next_statechange))
                msleep(5);
        ohci->next_statechange = jiffies;
  
        omap_ohci_clock_power(1);
-       dev->dev.power.power_state = PMSG_ON;
-       usb_hcd_resume_root_hub(platform_get_drvdata(dev));
+       ohci_finish_controller_resume(hcd);
        return 0;
  }
  
index cf5604ea9610672599453270dc915d46bf16f3f7,5571c13c3f3bb0af57ba3ea85d7f22bf78fa68d6..cb4a7f7f794e0dcea06d53f866f50f5e733d771a
@@@ -260,6 -260,7 +260,7 @@@ extern struct page *empty_zero_page
  #define pte_write(pte)                (pte_val(pte) & L_PTE_WRITE)
  #define pte_dirty(pte)                (pte_val(pte) & L_PTE_DIRTY)
  #define pte_young(pte)                (pte_val(pte) & L_PTE_YOUNG)
+ #define pte_special(pte)      (0)
  
  /*
   * The following only works if pte_present() is not true.
@@@ -280,6 -281,8 +281,8 @@@ PTE_BIT_FUNC(mkdirty,   |= L_PTE_DIRTY)
  PTE_BIT_FUNC(mkold,     &= ~L_PTE_YOUNG);
  PTE_BIT_FUNC(mkyoung,   |= L_PTE_YOUNG);
  
+ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
  /*
   * Mark the prot value as uncacheable and unbufferable.
   */
  #define pmd_none(pmd)         (!pmd_val(pmd))
  #define pmd_present(pmd)      (pmd_val(pmd))
  #define pmd_bad(pmd)          (pmd_val(pmd) & 2)
 +#define pmd_table(pmd)                ((pmd_val(pmd) & PMD_TYPE_MASK) == PMD_TYPE_TABLE)
  
  #define copy_pmd(pmdpd,pmdps)         \
        do {                            \
diff --combined include/linux/i2c-id.h
index 57912590a7475dbd22d0ff33c09ee0983da97091,580acc93903e63795a23c1efee2dddbc23cab7b0..be88882cf7f4884f9bdd4cf24cc96568d342b7d0
  #define I2C_DRIVERID_UPD64031A        79      /* upd64031a video processor    */
  #define I2C_DRIVERID_SAA717X  80      /* saa717x video encoder        */
  #define I2C_DRIVERID_DS1672   81      /* Dallas/Maxim DS1672 RTC      */
- #define I2C_DRIVERID_X1205    82      /* Xicor/Intersil X1205 RTC     */
- #define I2C_DRIVERID_PCF8563  83      /* Philips PCF8563 RTC          */
  #define I2C_DRIVERID_BT866    85      /* Conexant bt866 video encoder */
  #define I2C_DRIVERID_KS0127   86      /* Samsung ks0127 video decoder */
  #define I2C_DRIVERID_TLV320AIC23B 87  /* TI TLV320AIC23B audio codec  */
- #define I2C_DRIVERID_ISL1208  88      /* Intersil ISL1208 RTC         */
  #define I2C_DRIVERID_WM8731   89      /* Wolfson WM8731 audio codec */
  #define I2C_DRIVERID_WM8750   90      /* Wolfson WM8750 audio codec */
  #define I2C_DRIVERID_WM8753   91      /* Wolfson WM8753 audio codec */
@@@ -94,8 -91,6 +91,8 @@@
  #define I2C_DRIVERID_M52790   95      /* Mitsubishi M52790SP/FP AV switch */
  #define I2C_DRIVERID_CS5345   96      /* cs5345 audio processor       */
  
 +#define I2C_DRIVERID_MISC     99      /* Whatever until sorted out    */
 +
  #define I2C_DRIVERID_I2CDEV   900
  
  #define I2C_DRIVERID_OV7670 1048      /* Omnivision 7670 camera */
diff --combined include/linux/kfifo.h
index 2dd610d6fdd38fe646aa0585444dff76ee7b6d69,29f62e1733ff4e23c61e4f25c75d6e5498e4ab93..17065f7681a036cd27494cef8f94be05137dc23e
@@@ -21,8 -21,6 +21,6 @@@
  #ifndef _LINUX_KFIFO_H
  #define _LINUX_KFIFO_H
  
- #ifdef __KERNEL__
  #include <linux/kernel.h>
  #include <linux/spinlock.h>
  
@@@ -43,9 -41,6 +41,9 @@@ extern unsigned int __kfifo_put(struct 
                                unsigned char *buffer, unsigned int len);
  extern unsigned int __kfifo_get(struct kfifo *fifo,
                                unsigned char *buffer, unsigned int len);
 +extern unsigned int __kfifo_get_to_user(struct kfifo *fifo,
 +                                      unsigned char __user *buffer,
 +                                      unsigned int len);
  
  /**
   * __kfifo_reset - removes the entire FIFO contents, no locking version
@@@ -154,39 -149,4 +152,36 @@@ static inline unsigned int kfifo_len(st
        return ret;
  }
  
- #else
- #warning "don't include kernel headers in userspace"
- #endif /* __KERNEL__ */
 +/**
 + * kfifo_get_to_user - gets some data from the FIFO
 + * @fifo: the fifo to be used.
 + * @buffer: where the data must be copied. user buffer
 + * @len: the size of the destination buffer.
 + *
 + * This function copies at most @len bytes from the FIFO into the
 + * user @buffer and returns the number of copied bytes.
 + */
 +static inline unsigned int kfifo_get_to_user(struct kfifo *fifo,
 +                                           unsigned char __user *buffer,
 +                                           unsigned int len)
 +{
 +      unsigned long flags;
 +      unsigned int ret;
 +
 +      spin_lock_irqsave(fifo->lock, flags);
 +
 +      ret = __kfifo_get_to_user(fifo, buffer, len);
 +
 +      /*
 +       * optimization: if the FIFO is empty, set the indices to 0
 +       * so we don't wrap the next time
 +       */
 +      if (fifo->in == fifo->out)
 +              fifo->in = fifo->out = 0;
 +
 +      spin_unlock_irqrestore(fifo->lock, flags);
 +
 +      return ret;
 +}
 +
  #endif
diff --combined include/linux/poison.h
index 9384d24f65fe3c2971a89b75cd8c1cf13d541d1e,9f31683728fd7e2c59f738ae35ab6835066270c1..03620dacba2d9d306ecc2ee576c8f28e36674434
  #define LIST_POISON1  ((void *) 0x00100100)
  #define LIST_POISON2  ((void *) 0x00200200)
  
+ /********** include/linux/timer.h **********/
+ /*
+  * Magic number "tsta" to indicate a static timer initializer
+  * for the object debugging code.
+  */
+ #define TIMER_ENTRY_STATIC    ((void *) 0x74737461)
  /********** mm/slab.c **********/
  /*
   * Magic nums for obj red zoning.
  /********** sound/oss/ **********/
  #define OSS_POISON_FREE               0xAB
  
 +/*
 + * Used in arch/arm/plat-omap/sram.h to mark SRAM addresses that
 + * will be patched at runtime
 + */
 +#define SRAM_VA_MAGIC         0xbadfeed1
 +
  #endif
index eeed74de9b63fa50017e4fdc2aa2dcc4d4cdcf4d,daf744017a31c86bfaacf0a98ad1ebfdd27a4595..37c75fbacea2dbf4406779295a17c975d35854bc
@@@ -14,7 -14,8 +14,8 @@@ enum ads7846_filter 
  struct ads7846_platform_data {
        u16     model;                  /* 7843, 7845, 7846. */
        u16     vref_delay_usecs;       /* 0 for external vref; etc */
-       int     keep_vref_on:1;         /* set to keep vref on for differential
+       u16     vref_mv;                /* external vref value, milliVolts */
+       bool    keep_vref_on;           /* set to keep vref on for differential
                                         * measurements as well */
  
        /* Settling time of the analog signals; a function of Vcc and the
                                 void **filter_data);
        int     (*filter)       (void *filter_data, int data_idx, int *val);
        void    (*filter_cleanup)(void *filter_data);
 +
 +      /* controls enabling/disabling*/
 +      int     (*vaux_control)(int vaux_cntrl);
 +#define VAUX_ENABLE   1
 +#define VAUX_DISABLE  0
  };
  
diff --combined kernel/printk.c
index 6ad3e526c841894a65f44fbd100223eee3b79989,8fb01c32aa3bb7eaf44f5b9e63e316628dd935c1..03fe2b41e29be450fe16d22cc8fc533bf012bb59
@@@ -44,10 -44,6 +44,10 @@@ void __attribute__((weak)) early_printk
  
  #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
  
 +#ifdef CONFIG_DEBUG_LL
 +extern void printascii(char *);
 +#endif
 +
  /* printk's without a loglevel use this.. */
  #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
  
@@@ -115,6 -111,9 +115,9 @@@ struct console_cmdlin
        char    name[8];                        /* Name of the driver       */
        int     index;                          /* Minor dev. to use        */
        char    *options;                       /* Options for the driver   */
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+       char    *brl_options;                   /* Options for braille driver */
+ #endif
  };
  
  #define MAX_CMDLINECONSOLES 8
@@@ -719,10 -718,6 +722,10 @@@ asmlinkage int vprintk(const char *fmt
        printed_len += vscnprintf(printk_buf + printed_len,
                                  sizeof(printk_buf) - printed_len, fmt, args);
  
 +#ifdef        CONFIG_DEBUG_LL
 +      printascii(printk_buf);
 +#endif
 +
        /*
         * Copy the output into log_buf.  If the caller didn't provide
         * appropriate log level tags, we insert them here
@@@ -816,15 -811,60 +819,60 @@@ static void call_console_drivers(unsign
  
  #endif
  
+ static int __add_preferred_console(char *name, int idx, char *options,
+                                  char *brl_options)
+ {
+       struct console_cmdline *c;
+       int i;
+       /*
+        *      See if this tty is not yet registered, and
+        *      if we have a slot free.
+        */
+       for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
+               if (strcmp(console_cmdline[i].name, name) == 0 &&
+                         console_cmdline[i].index == idx) {
+                               if (!brl_options)
+                                       selected_console = i;
+                               return 0;
+               }
+       if (i == MAX_CMDLINECONSOLES)
+               return -E2BIG;
+       if (!brl_options)
+               selected_console = i;
+       c = &console_cmdline[i];
+       strlcpy(c->name, name, sizeof(c->name));
+       c->options = options;
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+       c->brl_options = brl_options;
+ #endif
+       c->index = idx;
+       return 0;
+ }
  /*
   * Set up a list of consoles.  Called from init/main.c
   */
  static int __init console_setup(char *str)
  {
        char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */
-       char *s, *options;
+       char *s, *options, *brl_options = NULL;
        int idx;
  
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+       if (!memcmp(str, "brl,", 4)) {
+               brl_options = "";
+               str += 4;
+       } else if (!memcmp(str, "brl=", 4)) {
+               brl_options = str + 4;
+               str = strchr(brl_options, ',');
+               if (!str) {
+                       printk(KERN_ERR "need port name after brl=\n");
+                       return 1;
+               }
+               *(str++) = 0;
+       }
+ #endif
        /*
         * Decode str into name, index, options.
         */
        idx = simple_strtoul(s, NULL, 10);
        *s = 0;
  
-       add_preferred_console(buf, idx, options);
+       __add_preferred_console(buf, idx, options, brl_options);
        return 1;
  }
  __setup("console=", console_setup);
   */
  int add_preferred_console(char *name, int idx, char *options)
  {
-       struct console_cmdline *c;
-       int i;
-       /*
-        *      See if this tty is not yet registered, and
-        *      if we have a slot free.
-        */
-       for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
-               if (strcmp(console_cmdline[i].name, name) == 0 &&
-                         console_cmdline[i].index == idx) {
-                               selected_console = i;
-                               return 0;
-               }
-       if (i == MAX_CMDLINECONSOLES)
-               return -E2BIG;
-       selected_console = i;
-       c = &console_cmdline[i];
-       memcpy(c->name, name, sizeof(c->name));
-       c->name[sizeof(c->name) - 1] = 0;
-       c->options = options;
-       c->index = idx;
-       return 0;
+       return __add_preferred_console(name, idx, options, NULL);
  }
  
  int update_console_cmdline(char *name, int idx, char *name_new, int idx_new, char *options)
                if (strcmp(console_cmdline[i].name, name) == 0 &&
                          console_cmdline[i].index == idx) {
                                c = &console_cmdline[i];
-                               memcpy(c->name, name_new, sizeof(c->name));
+                               strlcpy(c->name, name_new, sizeof(c->name));
                                c->name[sizeof(c->name) - 1] = 0;
                                c->options = options;
                                c->index = idx_new;
@@@ -1171,6 -1190,16 +1198,16 @@@ void register_console(struct console *c
                        continue;
                if (console->index < 0)
                        console->index = console_cmdline[i].index;
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+               if (console_cmdline[i].brl_options) {
+                       console->flags |= CON_BRL;
+                       braille_register_console(console,
+                                       console_cmdline[i].index,
+                                       console_cmdline[i].options,
+                                       console_cmdline[i].brl_options);
+                       return;
+               }
+ #endif
                if (console->setup &&
                    console->setup(console, console_cmdline[i].options) != 0)
                        break;
@@@ -1229,6 -1258,11 +1266,11 @@@ int unregister_console(struct console *
          struct console *a, *b;
        int res = 1;
  
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+       if (console->flags & CON_BRL)
+               return braille_unregister_console(console);
+ #endif
        acquire_console_sem();
        if (console_drivers == console) {
                console_drivers=console->next;
@@@ -1280,8 -1314,8 +1322,8 @@@ late_initcall(disable_boot_consoles)
   */
  void tty_write_message(struct tty_struct *tty, char *msg)
  {
-       if (tty && tty->driver->write)
-               tty->driver->write(tty, msg, strlen(msg));
+       if (tty && tty->ops->write)
+               tty->ops->write(tty, msg, strlen(msg));
        return;
  }
  
   */
  int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst)
  {
-       static DEFINE_SPINLOCK(ratelimit_lock);
-       static unsigned toks = 10 * 5 * HZ;
-       static unsigned long last_msg;
-       static int missed;
-       unsigned long flags;
-       unsigned long now = jiffies;
-       spin_lock_irqsave(&ratelimit_lock, flags);
-       toks += now - last_msg;
-       last_msg = now;
-       if (toks > (ratelimit_burst * ratelimit_jiffies))
-               toks = ratelimit_burst * ratelimit_jiffies;
-       if (toks >= ratelimit_jiffies) {
-               int lost = missed;
-               missed = 0;
-               toks -= ratelimit_jiffies;
-               spin_unlock_irqrestore(&ratelimit_lock, flags);
-               if (lost)
-                       printk(KERN_WARNING "printk: %d messages suppressed.\n", lost);
-               return 1;
-       }
-       missed++;
-       spin_unlock_irqrestore(&ratelimit_lock, flags);
-       return 0;
+       return __ratelimit(ratelimit_jiffies, ratelimit_burst);
  }
  EXPORT_SYMBOL(__printk_ratelimit);
  
diff --combined security/Makefile
index 2feea8d97c057894bdd92782613225da282a2148,7ef1107a72875412e3cdc52f48fe609f7dfbc764..7111cf1e0d6cd15d587745499a2d2766ee66893d
@@@ -18,4 -18,4 +18,5 @@@ obj-$(CONFIG_SECURITY_SELINUX)                += seli
  obj-$(CONFIG_SECURITY_SMACK)          += commoncap.o smack/built-in.o
  obj-$(CONFIG_SECURITY_CAPABILITIES)   += commoncap.o capability.o
  obj-$(CONFIG_SECURITY_ROOTPLUG)               += commoncap.o root_plug.o
 +obj-$(CONFIG_SECURITY_LOWMEM)         += commoncap.o lowmem.o
+ obj-$(CONFIG_CGROUP_DEVICE)           += device_cgroup.o