]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge current mainline tree into linux-omap tree
authorTony Lindgren <tony@atomide.com>
Thu, 15 Jan 2009 15:25:27 +0000 (17:25 +0200)
committerTony Lindgren <tony@atomide.com>
Thu, 15 Jan 2009 15:25:27 +0000 (17:25 +0200)
Merge branches 'master' and 'linus'

Conflicts:

arch/arm/Kconfig
arch/arm/configs/omap3_pandora_defconfig
arch/arm/mach-omap1/board-h2.c
arch/arm/mach-omap1/board-h3.c
arch/arm/mach-omap1/board-innovator.c
arch/arm/mach-omap1/board-osk.c
arch/arm/mach-omap1/board-sx1.c
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-2430sdp.c
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/board-ldp.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-omap3pandora.c
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/devices.c
arch/arm/mach-omap2/id.c
arch/arm/mach-omap2/mux.c
arch/arm/plat-omap/devices.c
arch/arm/plat-omap/include/mach/control.h
arch/arm/plat-omap/include/mach/mux.h
drivers/i2c/busses/i2c-omap.c
drivers/i2c/chips/Kconfig
drivers/i2c/chips/Makefile
drivers/i2c/chips/menelaus.c
drivers/input/keyboard/gpio_keys.c
drivers/input/touchscreen/Makefile
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/mtd/onenand/omap2.c
drivers/usb/gadget/Kconfig
drivers/usb/musb/musbhsdma.h
drivers/usb/otg/Kconfig
include/linux/i2c/twl4030.h
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/twl4030.c
sound/soc/codecs/twl4030.h
sound/soc/omap/Kconfig
sound/soc/omap/Makefile
sound/soc/omap/omap3beagle.c
sound/soc/omap/overo.c

46 files changed:
1  2 
Makefile
arch/arm/Kconfig
arch/arm/boot/compressed/Makefile
arch/arm/include/asm/setup.h
arch/arm/mach-omap1/Kconfig
arch/arm/mach-omap1/mcbsp.c
arch/arm/mach-omap2/mcbsp.c
arch/arm/mach-omap2/timer-gp.c
arch/arm/plat-omap/Kconfig
arch/arm/plat-omap/dma.c
arch/arm/plat-omap/include/mach/io.h
arch/arm/plat-omap/include/mach/mcbsp.h
drivers/Makefile
drivers/bluetooth/Kconfig
drivers/bluetooth/Makefile
drivers/hwmon/Kconfig
drivers/hwmon/Makefile
drivers/i2c/chips/Kconfig
drivers/i2c/chips/Makefile
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Makefile
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/ads7846.c
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/twl4030-core.c
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/mmc/host/Makefile
drivers/mmc/host/omap_hsmmc.c
drivers/mtd/maps/Kconfig
drivers/mtd/maps/omap_nor.c
drivers/mtd/nand/Kconfig
drivers/net/smc911x.h
drivers/net/smc91x.c
drivers/power/Kconfig
drivers/power/Makefile
drivers/rtc/rtc-twl4030.c
drivers/serial/8250.c
drivers/spi/Kconfig
drivers/spi/Makefile
drivers/usb/host/Kconfig
drivers/watchdog/Kconfig
include/linux/i2c/twl4030.h
kernel/printk.c
security/Kconfig

diff --combined Makefile
index 888e6c65f8568c9b7adb9c136d9528ccdcbf2de4,c06e250eca18cf5b3176a8af6a2295c5e5738a56..4f4abae2a3392e6a23a36a757ba1e54a24c71707
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 2
  PATCHLEVEL = 6
- SUBLEVEL = 28
- EXTRAVERSION =
+ SUBLEVEL = 29
+ EXTRAVERSION = -rc1
  NAME = Erotic Pickled Herring
  
  # *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)
@@@ -210,13 -205,14 +210,14 @@@ ifeq ($(ARCH),x86_64
          SRCARCH := x86
  endif
  
- # Where to locate arch specific headers
+ # Additional ARCH settings for sparc
  ifeq ($(ARCH),sparc64)
-        hdr-arch  := sparc
- else
-        hdr-arch  := $(SRCARCH)
+        SRCARCH := sparc
  endif
  
+ # Where to locate arch specific headers
+ hdr-arch  := $(SRCARCH)
  KCONFIG_CONFIG        ?= .config
  
  # SHELL used by kbuild
@@@ -325,7 -321,8 +326,8 @@@ KALLSYMS   = scripts/kallsym
  PERL          = perl
  CHECK         = sparse
  
- CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF)
+ CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
+                 -Wbitwise -Wno-return-void $(CF)
  MODFLAGS      = -DMODULE
  CFLAGS_MODULE   = $(MODFLAGS)
  AFLAGS_MODULE   = $(MODFLAGS)
@@@ -341,7 -338,7 +343,7 @@@ LINUXINCLUDE    := -Iinclude 
                     -I$(srctree)/arch/$(hdr-arch)/include               \
                     -include include/linux/autoconf.h
  
- KBUILD_CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
+ KBUILD_CPPFLAGS := -D__KERNEL__
  
  KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
                   -fno-strict-aliasing -fno-common \
@@@ -444,7 -441,11 +446,11 @@@ ifeq ($(config-targets),1
  include $(srctree)/arch/$(SRCARCH)/Makefile
  export KBUILD_DEFCONFIG KBUILD_KCONFIG
  
- config %config: scripts_basic outputmakefile FORCE
+ config: scripts_basic outputmakefile FORCE
+       $(Q)mkdir -p include/linux include/config
+       $(Q)$(MAKE) $(build)=scripts/kconfig $@
+ %config: scripts_basic outputmakefile FORCE
        $(Q)mkdir -p include/linux include/config
        $(Q)$(MAKE) $(build)=scripts/kconfig $@
  
@@@ -605,20 -606,25 +611,25 @@@ export  INSTALL_PATH ?= /boo
  MODLIB        = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
  export MODLIB
  
- #
- #  INSTALL_MOD_STRIP, if defined, will cause modules to be
- #  stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
- #  the default option --strip-debug will be used.  Otherwise,
- #  INSTALL_MOD_STRIP will used as the options to the strip command.
+ strip-symbols := $(srctree)/scripts/strip-symbols \
+                $(wildcard $(srctree)/arch/$(ARCH)/scripts/strip-symbols)
  
+ #
+ # INSTALL_MOD_STRIP, if defined, will cause modules to be stripped while
+ # they get installed.  If INSTALL_MOD_STRIP is '1', then the default
+ # options (see below) will be used.  Otherwise, INSTALL_MOD_STRIP will
+ # be used as the option(s) to the objcopy command.
  ifdef INSTALL_MOD_STRIP
  ifeq ($(INSTALL_MOD_STRIP),1)
- mod_strip_cmd = $(STRIP) --strip-debug
+ mod_strip_cmd = $(OBJCOPY) --strip-debug
+ ifeq ($(CONFIG_KALLSYMS_ALL),$(CONFIG_KALLSYMS_STRIP_GENERATED))
+ mod_strip_cmd += --wildcard $(addprefix --strip-symbols ,$(strip-symbols))
+ endif
  else
- mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
+ mod_strip_cmd = $(OBJCOPY) $(INSTALL_MOD_STRIP)
  endif # INSTALL_MOD_STRIP=1
  else
- mod_strip_cmd = true
+ mod_strip_cmd = false
  endif # INSTALL_MOD_STRIP
  export mod_strip_cmd
  
@@@ -748,6 -754,7 +759,7 @@@ last_kallsyms := 
  endif
  
  kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
+ kallsyms.h := $(wildcard include/config/kallsyms/*.h) $(wildcard include/config/kallsyms/*/*.h)
  
  define verify_kallsyms
        $(Q)$(if $($(quiet)cmd_sysmap),                                      \
@@@ -772,24 -779,41 +784,41 @@@ ende
  
  # Generate .S file with all kernel symbols
  quiet_cmd_kallsyms = KSYM    $@
-       cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
-                      $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
+       cmd_kallsyms = { test $* -eq 0 || $(NM) -n $<; } \
+                    | $(KALLSYMS) $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) >$@
+ quiet_cmd_kstrip = STRIP   $@
+       cmd_kstrip = $(OBJCOPY) --wildcard $(addprefix --strip$(if $(CONFIG_RELOCATABLE),-unneeded)-symbols ,$(filter %/scripts/strip-symbols,$^)) $< $@
  
- .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
+ $(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): KBUILD_AFLAGS += -Wa,--strip-local-absolute
+ $(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): %.o: %.S scripts FORCE
        $(call if_changed_dep,as_o_S)
  
- .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
+ ifeq ($(CONFIG_KALLSYMS_STRIP_GENERATED),y)
+ strip-ext := .stripped
+ endif
+ .tmp_kallsyms%.S: .tmp_vmlinux%$(strip-ext) $(KALLSYMS) $(kallsyms.h)
        $(call cmd,kallsyms)
  
+ # make -jN seems to have problems with intermediate files, see bug #3330.
+ .SECONDARY: $(foreach n,1 2 3,.tmp_vmlinux$(n).stripped)
+ .tmp_vmlinux%.stripped: .tmp_vmlinux% $(strip-symbols) $(kallsyms.h)
+       $(call cmd,kstrip)
+ ifneq ($(CONFIG_DEBUG_INFO),y)
+ .tmp_vmlinux%: LDFLAGS_vmlinux += -S
+ endif
  # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
- .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
-       $(call if_changed_rule,ksym_ld)
+ .tmp_vmlinux%: $(vmlinux-lds) $(vmlinux-all) FORCE
+       $(if $(filter 1,$*),$(call if_changed_rule,ksym_ld),$(call if_changed,vmlinux__))
  
- .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
-       $(call if_changed,vmlinux__)
+ .tmp_vmlinux0$(strip-ext):
+       $(Q)echo "placeholder" >$@
  
- .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
-       $(call if_changed,vmlinux__)
+ .tmp_vmlinux1: .tmp_kallsyms0.o
+ .tmp_vmlinux2: .tmp_kallsyms1.o
+ .tmp_vmlinux3: .tmp_kallsyms2.o
  
  # Needs to visit scripts/ before $(KALLSYMS) can be used.
  $(KALLSYMS): scripts ;
@@@ -931,7 -955,7 +960,7 @@@ PHONY += prepare archprepare prepare0 p
  # 2) Create the include2 directory, used for the second asm symlink
  prepare3: include/config/kernel.release
  ifneq ($(KBUILD_SRC),)
-       @echo '  Using $(srctree) as source for kernel'
+       @$(kecho) '  Using $(srctree) as source for kernel'
        $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
                echo "  $(srctree) is not clean, please run 'make mrproper'";\
                echo "  in the '$(srctree)' directory.";\
            mkdir -p include2;                                          \
            ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm;     \
        fi
+       ln -fsn $(srctree) source
  endif
  
  # prepare2 creates a makefile if using a separate output directory
@@@ -984,11 -1009,11 +1014,11 @@@ define check-symlin
  endef
  
  # We create the target directory of the symlink if it does
- # not exist so the test in chack-symlink works and we have a
+ # not exist so the test in check-symlink works and we have a
  # directory for generated filesas used by some architectures.
  define create-symlink
        if [ ! -L include/asm ]; then                                      \
-                       echo '  SYMLINK $@ -> include/asm-$(SRCARCH)';     \
+                       $(kecho) '  SYMLINK $@ -> include/asm-$(SRCARCH)'; \
                        if [ ! -d include/asm-$(SRCARCH) ]; then           \
                                mkdir -p include/asm-$(SRCARCH);           \
                        fi;                                                \
@@@ -1027,6 -1052,10 +1057,10 @@@ include/linux/version.h: $(srctree)/Mak
  include/linux/utsrelease.h: include/config/kernel.release FORCE
        $(call filechk,utsrelease.h)
  
+ PHONY += headerdep
+ headerdep:
+       $(Q)find include/ -name '*.h' | xargs --max-args 1 scripts/headerdep.pl
  # ---------------------------------------------------------------------------
  
  PHONY += depend dep
@@@ -1101,7 -1130,7 +1135,7 @@@ all: module
  PHONY += modules
  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
        $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
-       @echo '  Building modules, stage 2.';
+       @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
  
@@@ -1275,7 -1304,8 +1309,8 @@@ help
        @echo  '  versioncheck    - Sanity check on version.h usage'
        @echo  '  includecheck    - Check for duplicate included header files'
        @echo  '  export_report   - List the usages of all exported symbols'
-       @echo  '  headers_check   - Sanity check on exported headers'; \
+       @echo  '  headers_check   - Sanity check on exported headers'
+       @echo  '  headerdep       - Detect inclusion cycles in headers'; \
         echo  ''
        @echo  'Kernel packaging:'
        @$(MAKE) $(build)=$(package-dir) help
@@@ -1365,7 -1395,7 +1400,7 @@@ $(module-dirs): crmodverdir $(objtree)/
        $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
  
  modules: $(module-dirs)
-       @echo '  Building modules, stage 2.';
+       @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
  
  PHONY += modules_install
@@@ -1414,123 -1444,12 +1449,12 @@@ endif # KBUILD_EXTMO
  
  # Generate tags for editors
  # ---------------------------------------------------------------------------
+ quiet_cmd_tags = GEN     $@
+       cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@
  
- #We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
- #(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
- #Adding $(srctree) adds about 20M on i386 to the size of the output file!
- ifeq ($(src),$(obj))
- __srctree =
- else
- __srctree = $(srctree)/
- endif
- ifeq ($(ALLSOURCE_ARCHS),)
- ifeq ($(ARCH),um)
- ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
- else
- ALLINCLUDE_ARCHS := $(SRCARCH)
- endif
- else
- #Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behaviour.
- ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
- endif
- ALLSOURCE_ARCHS := $(SRCARCH)
- define find-sources
-         ( for arch in $(ALLSOURCE_ARCHS) ; do \
-              find $(__srctree)arch/$${arch} $(RCS_FIND_IGNORE) \
-                   -wholename $(__srctree)arch/$${arch}/include/asm -type d -prune \
-                   -o -name $1 -print; \
-         done ; \
-         find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
-              -name $1 -print; \
-         find $(__srctree)include $(RCS_FIND_IGNORE) \
-              \( -name config -o -name 'asm-*' \) -prune \
-              -o -name $1 -print; \
-         for arch in $(ALLINCLUDE_ARCHS) ; do \
-              test -e $(__srctree)include/asm-$${arch} && \
-                  find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \
-                   -name $1 -print; \
-              test -e $(__srctree)arch/$${arch}/include/asm && \
-                find $(__srctree)arch/$${arch}/include/asm $(RCS_FIND_IGNORE) \
-                   -name $1 -print; \
-         done ; \
-         find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
-              -name $1 -print; \
-         find $(__srctree) $(RCS_FIND_IGNORE) \
-              \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
-              -name $1 -print; \
-         )
- endef
- define all-sources
-       $(call find-sources,'*.[chS]')
- endef
- define all-kconfigs
-       $(call find-sources,'Kconfig*')
- endef
- define all-defconfigs
-       $(call find-sources,'defconfig')
- endef
- define xtags
-       if $1 --version 2>&1 | grep -iq exuberant; then \
-           $(all-sources) | xargs $1 -a \
-               -I __initdata,__exitdata,__acquires,__releases \
-               -I __read_mostly,____cacheline_aligned,____cacheline_aligned_in_smp,____cacheline_internodealigned_in_smp \
-               -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
-               --extra=+f --c-kinds=+px \
-               --regex-asm='/^ENTRY\(([^)]*)\).*/\1/'; \
-           $(all-kconfigs) | xargs $1 -a \
-               --langdef=kconfig \
-               --language-force=kconfig \
-               --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'; \
-           $(all-defconfigs) | xargs -r $1 -a \
-               --langdef=dotconfig \
-               --language-force=dotconfig \
-               --regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
-       elif $1 --version 2>&1 | grep -iq emacs; then \
-           $(all-sources) | xargs $1 -a; \
-           $(all-kconfigs) | xargs $1 -a \
-               --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'; \
-           $(all-defconfigs) | xargs -r $1 -a \
-               --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
-       else \
-           $(all-sources) | xargs $1 -a; \
-       fi
- endef
- quiet_cmd_cscope-file = FILELST cscope.files
-       cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
- quiet_cmd_cscope = MAKE    cscope.out
-       cmd_cscope = cscope -b -f cscope.out
- cscope: FORCE
-       $(call cmd,cscope-file)
-       $(call cmd,cscope)
- quiet_cmd_TAGS = MAKE   $@
- define cmd_TAGS
-       rm -f $@; \
-       $(call xtags,etags)
- endef
- TAGS: FORCE
-       $(call cmd,TAGS)
- quiet_cmd_tags = MAKE   $@
- define cmd_tags
-       rm -f $@; \
-       $(call xtags,ctags)
- endef
- tags: FORCE
+ tags TAGS cscope: FORCE
        $(call cmd,tags)
  
  # Scripts to check various things for consistency
  # ---------------------------------------------------------------------------
  
@@@ -1609,7 -1528,11 +1533,11 @@@ endi
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  
  # Modules
- / %/: prepare scripts FORCE
+ /: prepare scripts FORCE
+       $(cmd_crmodverdir)
+       $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
+       $(build)=$(build-dir)
+ %/: prepare scripts FORCE
        $(cmd_crmodverdir)
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
        $(build)=$(build-dir)
@@@ -1643,7 -1566,7 +1571,7 @@@ cmd_crmodverdir = $(Q)mkdir -p $(MODVER
                    $(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
  
  a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
-         $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) \
+         $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
          $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
  
  quiet_cmd_as_o_S = AS      $@
diff --combined arch/arm/Kconfig
index 72b45cdfea53a5635d9bcbad1b0a9e3734814afb,dbfdf87f993f8849b44e16e0000384bb24d116f6..7b180ac738974501430635b069defcb03944b6c4
@@@ -156,7 -156,6 +156,6 @@@ config ARCH_MTD_XI
        bool
  
  config GENERIC_HARDIRQS_NO__DO_IRQ
-       bool
        def_bool y
  
  if OPROFILE
@@@ -201,6 -200,7 +200,7 @@@ choic
  
  config ARCH_AAEC2000
        bool "Agilent AAEC-2000 based"
+       select CPU_ARM920T
        select ARM_AMBA
        select HAVE_CLK
        help
@@@ -210,6 -210,7 +210,7 @@@ config ARCH_INTEGRATO
        bool "ARM Ltd. Integrator family"
        select ARM_AMBA
        select HAVE_CLK
+       select COMMON_CLKDEV
        select ICST525
        help
          Support for ARM's Integrator platform.
@@@ -218,6 -219,7 +219,7 @@@ config ARCH_REALVIE
        bool "ARM Ltd. RealView family"
        select ARM_AMBA
        select HAVE_CLK
+       select COMMON_CLKDEV
        select ICST307
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
@@@ -229,6 -231,7 +231,7 @@@ config ARCH_VERSATIL
        select ARM_AMBA
        select ARM_VIC
        select HAVE_CLK
+       select COMMON_CLKDEV
        select ICST307
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
@@@ -243,22 -246,15 +246,15 @@@ config ARCH_AT9
          This enables support for systems based on the Atmel AT91RM9200,
          AT91SAM9 and AT91CAP9 processors.
  
- config ARCH_CLPS7500
-       bool "Cirrus CL-PS7500FE"
-       select TIMER_ACORN
-       select ISA
-       select NO_IOPORT
-       select ARCH_SPARSEMEM_ENABLE
-       help
-         Support for the Cirrus Logic PS7500FE system-on-a-chip.
  config ARCH_CLPS711X
        bool "Cirrus Logic CLPS711x/EP721x-based"
+       select CPU_ARM720T
        help
          Support for Cirrus Logic 711x/721x based boards.
  
  config ARCH_EBSA110
        bool "EBSA-110"
+       select CPU_SA110
        select ISA
        select NO_IOPORT
        help
  
  config ARCH_EP93XX
        bool "EP93xx-based"
+       select CPU_ARM920T
        select ARM_AMBA
        select ARM_VIC
        select GENERIC_GPIO
        select HAVE_CLK
+       select COMMON_CLKDEV
        select ARCH_REQUIRE_GPIOLIB
        help
          This enables support for the Cirrus EP93xx series of CPUs.
  
  config ARCH_FOOTBRIDGE
        bool "FootBridge"
+       select CPU_SA110
        select FOOTBRIDGE
        help
          Support for systems based on the DC21285 companion chip
  
  config ARCH_NETX
        bool "Hilscher NetX based"
+       select CPU_ARM926T
        select ARM_VIC
+       select GENERIC_CLOCKEVENTS
+       select GENERIC_TIME
        help
          This enables support for systems based on the Hilscher NetX Soc
  
  config ARCH_H720X
        bool "Hynix HMS720x-based"
+       select CPU_ARM720T
        select ISA_DMA_API
        help
          This enables support for systems based on the Hynix HMS720x
  
  config ARCH_IMX
        bool "IMX"
+       select CPU_ARM920T
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
  config ARCH_IOP13XX
        bool "IOP13xx-based"
        depends on MMU
+       select CPU_XSC3
        select PLAT_IOP
        select PCI
        select ARCH_SUPPORTS_MSI
  config ARCH_IOP32X
        bool "IOP32x-based"
        depends on MMU
+       select CPU_XSCALE
        select PLAT_IOP
        select PCI
        select GENERIC_GPIO
  config ARCH_IOP33X
        bool "IOP33x-based"
        depends on MMU
+       select CPU_XSCALE
        select PLAT_IOP
        select PCI
        select GENERIC_GPIO
  config ARCH_IXP23XX
        bool "IXP23XX-based"
        depends on MMU
+       select CPU_XSC3
        select PCI
        help
          Support for Intel's IXP23xx (XScale) family of processors.
  config ARCH_IXP2000
        bool "IXP2400/2800-based"
        depends on MMU
+       select CPU_XSCALE
        select PCI
        help
          Support for Intel's IXP2400/2800 (XScale) family of processors.
  config ARCH_IXP4XX
        bool "IXP4xx-based"
        depends on MMU
+       select CPU_XSCALE
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
  
  config ARCH_L7200
        bool "LinkUp-L7200"
+       select CPU_ARM720T
        select FIQ
        help
          Say Y here if you intend to run this kernel on a LinkUp Systems
  
  config ARCH_KIRKWOOD
        bool "Marvell Kirkwood"
+       select CPU_FEROCEON
        select PCI
+       select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        select PLAT_ORION
  
  config ARCH_KS8695
        bool "Micrel/Kendin KS8695"
+       select CPU_ARM922T
        select GENERIC_GPIO
+         select ARCH_REQUIRE_GPIOLIB
        help
          Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
          System-on-Chip devices.
  
  config ARCH_NS9XXX
        bool "NetSilicon NS9xxx"
+       select CPU_ARM926T
        select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
  
  config ARCH_LOKI
        bool "Marvell Loki (88RC8480)"
+       select CPU_FEROCEON
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        select PLAT_ORION
  
  config ARCH_MV78XX0
        bool "Marvell MV78xx0"
+       select CPU_FEROCEON
        select PCI
+       select GENERIC_GPIO
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        select PLAT_ORION
@@@ -432,6 -451,7 +451,7 @@@ config ARCH_MX
  config ARCH_ORION5X
        bool "Marvell Orion"
        depends on MMU
+       select CPU_FEROCEON
        select PCI
        select GENERIC_GPIO
        select GENERIC_TIME
  
  config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
+       select CPU_ARM926T
        select HAVE_CLK
        help
          This enables support for Philips PNX4008 mobile platform.
@@@ -454,6 -475,7 +475,7 @@@ config ARCH_PX
        select ARCH_MTD_XIP
        select GENERIC_GPIO
        select HAVE_CLK
+       select COMMON_CLKDEV
        select ARCH_REQUIRE_GPIOLIB
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
@@@ -477,6 -499,7 +499,7 @@@ config ARCH_RP
  
  config ARCH_SA1100
        bool "SA1100-based"
+       select CPU_SA1100
        select ISA
        select ARCH_SPARSEMEM_ENABLE
        select ARCH_MTD_XIP
@@@ -498,8 -521,16 +521,16 @@@ config ARCH_S3C241
          BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
          the Samsung SMDK2410 development board (and derivatives).
  
+ config ARCH_S3C64XX
+       bool "Samsung S3C64XX"
+       select GENERIC_GPIO
+       select HAVE_CLK
+       help
+         Samsung S3C64XX series based systems
  config ARCH_SHARK
        bool "Shark"
+       select CPU_SA110
        select ISA
        select ISA_DMA
        select ZONE_DMA
  
  config ARCH_LH7A40X
        bool "Sharp LH7A40X"
+       select CPU_ARM922T
        select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
        select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
        help
  
  config ARCH_DAVINCI
        bool "TI DaVinci"
+       select CPU_ARM926T
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        select GENERIC_GPIO
@@@ -541,6 -574,7 +574,7 @@@ config ARCH_OMA
  
  config ARCH_MSM
        bool "Qualcomm MSM"
+       select CPU_V6
        select GENERIC_TIME
        select GENERIC_CLOCKEVENTS
        help
          interface to the ARM9 modem processor which runs the baseband stack
          and controls some vital subsystems (clock and power control, etc).
  
+ config ARCH_W90X900
+       bool "Nuvoton W90X900 CPU"
+       select CPU_ARM926T
+       help
+               Support for Nuvoton (Winbond logic dept.) ARM9 processor,You
+               can login www.mcuos.com or www.nuvoton.com to know more.
  endchoice
  
  source "arch/arm/mach-clps711x/Kconfig"
@@@ -590,6 -631,7 +631,7 @@@ source "arch/arm/mach-orion5x/Kconfig
  source "arch/arm/mach-kirkwood/Kconfig"
  
  source "arch/arm/plat-s3c24xx/Kconfig"
+ source "arch/arm/plat-s3c64xx/Kconfig"
  source "arch/arm/plat-s3c/Kconfig"
  
  if ARCH_S3C2410
@@@ -601,6 -643,11 +643,11 @@@ source "arch/arm/mach-s3c2442/Kconfig
  source "arch/arm/mach-s3c2443/Kconfig"
  endif
  
+ if ARCH_S3C64XX
+ source "arch/arm/mach-s3c6400/Kconfig"
+ source "arch/arm/mach-s3c6410/Kconfig"
+ endif
  source "arch/arm/mach-lh7a40x/Kconfig"
  
  source "arch/arm/mach-imx/Kconfig"
@@@ -627,6 -674,8 +674,8 @@@ source "arch/arm/mach-ks8695/Kconfig
  
  source "arch/arm/mach-msm/Kconfig"
  
+ source "arch/arm/mach-w90x900/Kconfig"
  # Definitions to make life easier
  config ARCH_ACORN
        bool
@@@ -781,7 -830,7 +830,7 @@@ config HOTPLUG_CP
  
  config LOCAL_TIMERS
        bool "Use local timer interrupts"
-       depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP)
+       depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || REALVIEW_EB_A9MP)
        default y
        help
          Enable support for local timers on SMP platforms, rather then the
@@@ -1276,11 -1325,8 +1325,13 @@@ source "drivers/regulator/Kconfig
  
  source "drivers/uio/Kconfig"
  
+ source "drivers/staging/Kconfig"
 +if ARCH_OMAP
 +source "drivers/cbus/Kconfig"
 +source "drivers/dsp/dspgateway/Kconfig"
 +endif
 +
  endmenu
  
  source "fs/Kconfig"
index a96e679281124327b0cfeb7228de186e7a727068,fbe5eef1f6c9c031b2763e1ba9bb734de941f91b..98d589a59b58ad2f513eb9420f19ac2e6585f53d
@@@ -23,10 -23,6 +23,6 @@@ ifeq ($(CONFIG_ARCH_L7200),y
  OBJS          += head-l7200.o
  endif
  
- ifeq ($(CONFIG_ARCH_CLPS7500),y)
- HEAD          = head-clps7500.o
- endif
  ifeq ($(CONFIG_ARCH_P720T),y)
  # Borrow this code from SA1100
  OBJS          += head-sa1100.o
@@@ -44,10 -40,6 +40,10 @@@ ifeq ($(CONFIG_PXA_SHARPSL),y
  OBJS          += head-sharpsl.o
  endif
  
 +ifeq ($(CONFIG_MACH_OMAP_PERSEUS2),y)
 +OBJS          += head-omap.o
 +endif
 +
  ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
  ifeq ($(CONFIG_CPU_CP15),y)
  OBJS          += big-endian.o
index 33fea71547b02e3a7fee7b983527a4c1076c87d3,f2cd18a0932b786d0283d371ab9172f91db40fe1..7ffbb29a0e9dc3e03e8ee1a5b53042e366ce6a59
@@@ -136,13 -136,6 +136,13 @@@ struct tag_acorn 
        __u8 adfsdrives;
  };
  
 +/* TI OMAP specific information */
 +#define ATAG_BOARD       0x414f4d50
 +
 +struct tag_omap {
 +      u8 data[0];
 +};
 +
  /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */
  #define ATAG_MEMCLK   0x41000402
  
@@@ -168,11 -161,6 +168,11 @@@ struct tag 
                 */
                struct tag_acorn        acorn;
  
 +              /*
 +               * OMAP specific
 +                 */
 +                struct tag_omap         omap;
 +
                /*
                 * DC21285 specific
                 */
@@@ -221,9 -209,11 +221,11 @@@ struct meminfo 
        struct membank bank[NR_BANKS];
  };
  
+ extern struct meminfo meminfo;
  #define for_each_nodebank(iter,mi,no)                 \
-       for (iter = 0; iter < mi->nr_banks; iter++)     \
-               if (mi->bank[iter].node == no)
+       for (iter = 0; iter < (mi)->nr_banks; iter++)   \
+               if ((mi)->bank[iter].node == no)
  
  #define bank_pfn_start(bank)  __phys_to_pfn((bank)->start)
  #define bank_pfn_end(bank)    __phys_to_pfn((bank)->start + (bank)->size)
index 72220db5f091a40d18fa3e262f4095d950ce2dd9,10a301e32434639e737f18db0832e6657001d66c..a95a2f30ed8b97934f4932ab2750c3ecd8ffa891
@@@ -4,16 -4,19 +4,19 @@@ comment "OMAP Core Type
  config ARCH_OMAP730
        depends on ARCH_OMAP1
        bool "OMAP730 Based System"
+       select CPU_ARM926T
        select ARCH_OMAP_OTG
  
  config ARCH_OMAP15XX
        depends on ARCH_OMAP1
        default y
        bool "OMAP15xx Based System"
+       select CPU_ARM925T
  
  config ARCH_OMAP16XX
        depends on ARCH_OMAP1
        bool "OMAP16xx Based System"
+       select CPU_ARM926T
        select ARCH_OMAP_OTG
  
  comment "OMAP Board Type"
@@@ -38,6 -41,7 +41,6 @@@ config MACH_OMAP_H
  config MACH_OMAP_H3
        bool "TI H3 Support"
        depends on ARCH_OMAP1 && ARCH_OMAP16XX
 -#     select GPIOEXPANDER_OMAP
        help
          TI OMAP 1710 H3 board support. Say Y here if you have such
          a board.
index 7de7c69155840f2e84fddc23574bb9d74546afe5,4474da7bc88a0f613f2e4a544491b44bf6e889dd..ca7a0cc1707c29779bf3b6d9c279da4d558682c7
@@@ -17,7 -17,8 +17,9 @@@
  #include <linux/io.h>
  #include <linux/platform_device.h>
  
++#include <mach/irqs.h>
  #include <mach/dma.h>
+ #include <mach/irqs.h>
  #include <mach/mux.h>
  #include <mach/cpu.h>
  #include <mach/mcbsp.h>
index b40b29a2d791b8248891cc1976b9f2a6b3439c6b,acdc709901cd1ca55f231ac79be495e1e0e67dc7..1785d7a590c53b584a403a4e3e477dae2cbfd20c
@@@ -17,7 -17,8 +17,9 @@@
  #include <linux/io.h>
  #include <linux/platform_device.h>
  
++#include <mach/irqs.h>
  #include <mach/dma.h>
+ #include <mach/irqs.h>
  #include <mach/mux.h>
  #include <mach/cpu.h>
  #include <mach/mcbsp.h>
@@@ -77,7 -78,6 +79,7 @@@ static struct mcbsp_internal_clk omap_m
                .clk = {
                        .name           = "mcbsp_clk",
                        .id             = 1,
 +                      .clkdm          = { .name = "virt_opp_clkdm" },
                        .enable         = omap_mcbsp_clk_enable,
                        .disable        = omap_mcbsp_clk_disable,
                },
@@@ -86,7 -86,6 +88,7 @@@
                .clk = {
                        .name           = "mcbsp_clk",
                        .id             = 2,
 +                      .clkdm          = { .name = "virt_opp_clkdm" },
                        .enable         = omap_mcbsp_clk_enable,
                        .disable        = omap_mcbsp_clk_disable,
                },
@@@ -95,7 -94,6 +97,7 @@@
                .clk = {
                        .name           = "mcbsp_clk",
                        .id             = 3,
 +                      .clkdm          = { .name = "virt_opp_clkdm" },
                        .enable         = omap_mcbsp_clk_enable,
                        .disable        = omap_mcbsp_clk_disable,
                },
                .clk = {
                        .name           = "mcbsp_clk",
                        .id             = 4,
 +                      .clkdm          = { .name = "virt_opp_clkdm" },
                        .enable         = omap_mcbsp_clk_enable,
                        .disable        = omap_mcbsp_clk_disable,
                },
                .clk = {
                        .name           = "mcbsp_clk",
                        .id             = 5,
 +                      .clkdm          = { .name = "virt_opp_clkdm" },
                        .enable         = omap_mcbsp_clk_enable,
                        .disable        = omap_mcbsp_clk_disable,
                },
index 3e66a9a1519c23339567b5ef3b5ba0e08a9b2789,ae6036300f603521ce2b59267fee71d5f668e589..8351a34f3e19c1568c6cb64acf724c2068e1d206
@@@ -99,7 -99,7 +99,7 @@@ static void __init omap2_gp_clockevent_
  {
        u32 tick_rate;
  
 -      gptimer = omap_dm_timer_request_specific(1);
 +      gptimer = omap_dm_timer_request_specific(CONFIG_OMAP_TICK_GPTIMER);
        BUG_ON(gptimer == NULL);
  
  #if defined(CONFIG_OMAP_32K_TIMER)
  #endif
        tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer));
  
 +      pr_info("OMAP clockevent source: GPTIMER%d at %u Hz\n",
 +              CONFIG_OMAP_TICK_GPTIMER, tick_rate);
 +
        omap2_gp_timer_irq.dev_id = (void *)gptimer;
        setup_irq(omap_dm_timer_get_irq(gptimer), &omap2_gp_timer_irq);
        omap_dm_timer_set_int_enable(gptimer, OMAP_TIMER_INT_OVERFLOW);
        clockevent_gpt.max_delta_ns =
                clockevent_delta2ns(0xffffffff, &clockevent_gpt);
        clockevent_gpt.min_delta_ns =
 -              clockevent_delta2ns(1, &clockevent_gpt);
 +              clockevent_delta2ns(3, &clockevent_gpt);
 +              /* Timer internal resynch latency. */
  
-       clockevent_gpt.cpumask = cpumask_of_cpu(0);
+       clockevent_gpt.cpumask = cpumask_of(0);
        clockevents_register_device(&clockevent_gpt);
  }
  
index 6c9f09257db40b50ff14777a633894356724caf2,46d3b0b9ce696eaef46d895a37b7a694059dd554..df7709849c94cde06729bfa7c91177f83b87bfeb
@@@ -14,9 -14,11 +14,11 @@@ config ARCH_OMAP
  
  config ARCH_OMAP2
        bool "TI OMAP2"
+       select CPU_V6
  
  config ARCH_OMAP3
        bool "TI OMAP3"
+       select CPU_V7
  
  endchoice
  
@@@ -56,37 -58,6 +58,37 @@@ config OMAP_DEBUG_CLOCKDOMAI
          for every clockdomain register write.  However, the
          extra detail costs some memory.
  
 +config OMAP_SMARTREFLEX
 +      bool "SmartReflex support"
 +      depends on ARCH_OMAP34XX && TWL4030_CORE
 +      help
 +        Say Y if you want to enable SmartReflex.
 +
 +        SmartReflex can perform continuous dynamic voltage
 +        scaling around the nominal operating point voltage
 +        according to silicon characteristics and operating
 +        conditions. Enabling SmartReflex reduces power
 +        consumption.
 +
 +        Please note, that by default SmartReflex is only
 +        initialized. To enable the automatic voltage
 +        compensation for VDD1 and VDD2, user must write 1 to
 +        /sys/power/sr_vddX_autocomp, where X is 1 or 2.
 +
 +config OMAP_SMARTREFLEX_TESTING
 +      bool "Smartreflex testing support"
 +      depends on OMAP_SMARTREFLEX
 +      default n
 +      help
 +        Say Y if you want to enable SmartReflex testing with SW hardcoded
 +        NVALUES intead of E-fuse NVALUES set in factory silicon testing.
 +
 +        In some devices the E-fuse values have not been set, even though
 +        SmartReflex modules are included. Using these hardcoded values set
 +        in software, one can test the SmartReflex features without E-fuse.
 +
 +        WARNING: Enabling this option may cause your device to hang!
 +
  config OMAP_RESET_CLOCKS
        bool "Reset unused clocks during boot"
        depends on ARCH_OMAP
          probably do not want this option enabled until your
          device drivers work properly.
  
 +config OMAP_BOOT_TAG
 +      bool "OMAP bootloader information passing"
 +        depends on ARCH_OMAP
 +        default n
 +        help
 +          Say Y, if you have a bootloader which passes information
 +          about your board and its peripheral configuration.
 +
 +config OMAP_BOOT_REASON
 +      bool "Support for boot reason"
 +        depends on OMAP_BOOT_TAG
 +        default n
 +        help
 +          Say Y, if you want to have a procfs entry for reading the boot
 +          reason in user-space.
 +
 +config OMAP_COMPONENT_VERSION
 +      bool "Support for component version display"
 +      depends on OMAP_BOOT_TAG && PROC_FS
 +      default n
 +      help
 +        Say Y, if you want to have a procfs entry for reading component
 +        versions (supplied by the bootloader) in user-space.
 +
 +config OMAP_GPIO_SWITCH
 +      bool "GPIO switch support"
 +        default n
 +        help
 +          Say Y, if you want to have support for reporting of GPIO
 +          switches (e.g. cover switches) via sysfs. Your bootloader has
 +          to provide information about the switches to the kernel via the
 +          ATAG_BOARD mechanism if they're not defined by the board config.
 +
  config OMAP_MUX
        bool "OMAP multiplexing support"
          depends on ARCH_OMAP
@@@ -166,22 -104,6 +168,22 @@@ config OMAP_MCBS
          Say Y here if you want support for the OMAP Multichannel
          Buffered Serial Port.
  
 +config OMAP_MMU_FWK
 +      bool "MMU framework support"
 +      depends on ARCH_OMAP
 +      default n
 +      help
 +        Say Y here if you want to use OMAP MMU framework support for
 +        DSP, IVA1.0 and Camera in OMAP1/2.
 +
 +config OMAP_MBOX_FWK
 +      tristate "Mailbox framework support"
 +      depends on ARCH_OMAP
 +      default n
 +      help
 +        Say Y here if you want to use OMAP Mailbox framework support for
 +        DSP, IVA1.0 and IVA2 in OMAP1/2/3.
 +
  choice
          prompt "System timer"
        default OMAP_MPU_TIMER
@@@ -214,21 -136,6 +216,21 @@@ config OMAP_32K_TIMER_H
          Kernel internal timer frequency should be a divisor of 32768,
          such as 64 or 128.
  
 +config OMAP_TICK_GPTIMER
 +      int "GPTIMER used for system tick timer"
 +      depends on ARCH_OMAP2 || ARCH_OMAP3
 +      range 1 12
 +      default 1
 +      help
 +        Linux uses one of the twelve on-board OMAP GPTIMER blocks to generate
 +        system tick interrupts.  The twelve GPTIMERs have slightly
 +        different powerdomain, source clock, and security properties
 +        (mostly documented in the OMAP3 TRMs) that can affect the selection
 +        of which GPTIMER to use.  The historical default is GPTIMER1.
 +        If CONFIG_OMAP_32K_TIMER is selected, Beagle may require GPTIMER12
 +        due to hardware sensitivity to glitches on the OMAP 32kHz clock
 +        input.
 +
  config OMAP_DM_TIMER
        bool "Use dual-mode timer"
        depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
diff --combined arch/arm/plat-omap/dma.c
index 922985ef32bcb2b407fe843292fcd7b2e7afac06,692d2b495af34260cdd57619240b9ab46ffdf8f9..54c43d81d0ef89b276d720c386cbf6f1b0e1707d
@@@ -29,7 -29,7 +29,7 @@@
  
  #include <asm/system.h>
  #include <mach/hardware.h>
- #include <asm/dma.h>
+ #include <mach/dma.h>
  
  #include <mach/tc.h>
  
@@@ -279,7 -279,10 +279,7 @@@ void omap_set_dma_transfer_params(int l
  
                val = dma_read(CCR(lch));
                val &= ~(3 << 19);
 -              if (dma_trigger > 63)
 -                      val |= 1 << 20;
 -              if (dma_trigger > 31)
 -                      val |= 1 << 19;
 +              val |= ((dma_trigger & ~(0x1f)) << 14);
  
                val &= ~(0x1f);
                val |= (dma_trigger & 0x1f);
@@@ -709,7 -712,6 +709,7 @@@ int omap_request_dma(int dev_id, const 
        chan->dev_name = dev_name;
        chan->callback = callback;
        chan->data = data;
 +      chan->flags = 0;
  
  #ifndef CONFIG_ARCH_OMAP1
        if (cpu_class_is_omap2()) {
@@@ -2417,19 -2419,6 +2417,19 @@@ static int __init omap_init_dma(void
        if (cpu_class_is_omap2())
                setup_irq(INT_24XX_SDMA_IRQ0, &omap24xx_dma_irq);
  
 +      /* Enable smartidle idlemodes and autoidle */
 +      if (cpu_is_omap34xx()) {
 +              u32 v = dma_read(OCP_SYSCONFIG);
 +              v &= ~(DMA_SYSCONFIG_MIDLEMODE_MASK |
 +                              DMA_SYSCONFIG_SIDLEMODE_MASK |
 +                              DMA_SYSCONFIG_AUTOIDLE);
 +              v |= (DMA_SYSCONFIG_MIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
 +                      DMA_SYSCONFIG_SIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
 +                      DMA_SYSCONFIG_AUTOIDLE);
 +              dma_write(v , OCP_SYSCONFIG);
 +      }
 +
 +
        /* FIXME: Update LCD DMA to work on 24xx */
        if (cpu_class_is_omap1()) {
                r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0,
index ea552674370600996cd501a48951134e2b1a9539,d92bf7964481c5f39dffeeea8f2be507e1ec2065..0610d7e2b3d736cb5a0bc37a18b416162005055f
@@@ -42,8 -42,8 +42,8 @@@
   * We don't actually have real ISA nor PCI buses, but there is so many
   * drivers out there that might just work if we fake them...
   */
- #define __io(a)                       ((void __iomem *)(PCIO_BASE + (a)))
- #define __mem_pci(a)          (a)
+ #define __io(a)               __typesafe_io(a)
+ #define __mem_pci(a)  (a)
  
  /*
   * ----------------------------------------------------------------------------
@@@ -51,8 -51,6 +51,6 @@@
   * ----------------------------------------------------------------------------
   */
  
- #define PCIO_BASE     0
  #if defined(CONFIG_ARCH_OMAP1)
  
  #define IO_PHYS                       0xFFFB0000
  #define omap_writew(v,a)      __raw_writew(v, IO_ADDRESS(a))
  #define omap_writel(v,a)      __raw_writel(v, IO_ADDRESS(a))
  
 +struct omap_sdrc_params;
 +
  extern void omap1_map_common_io(void);
  extern void omap1_init_common_hw(void);
  
  extern void omap2_map_common_io(void);
 -extern void omap2_init_common_hw(void);
 +extern void omap2_init_common_hw(struct omap_sdrc_params *sp);
  
  #define __arch_ioremap(p,s,t) omap_ioremap(p,s,t)
  #define __arch_iounmap(v)     omap_iounmap(v)
index cc48f2f33d606310838539c4bdc1feb738f13cdd,6a0d1a0a24a7d86f2f767130de8ed9ea95073e3c..eef873db3d48f54f420da4b2840cf717b58b9aae
  #define OMAP_MCBSP_REG_XCERG  0x3A
  #define OMAP_MCBSP_REG_XCERH  0x3C
  
++/* Dummy defines, these are not available on omap1 */
++#define OMAP_MCBSP_REG_XCCR   0x00
++#define OMAP_MCBSP_REG_RCCR   0x00
++
  #define AUDIO_MCBSP_DATAWRITE (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1)
  #define AUDIO_MCBSP_DATAREAD  (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DRR1)
  
  #define XPBBLK(value)         ((value)<<7)    /* Bits 7:8 */
  
  /*********************** McBSP XCCR bit definitions *************************/
 +#define EXTCLKGATE            0x8000
 +#define PPCONNECT             0x4000
 +#define DXENDLY(value)                ((value)<<12)   /* Bits 12:13 */
 +#define XFULL_CYCLE           0x0800
  #define DILB                  0x0020
  #define XDMAEN                        0x0008
  #define XDISABLE              0x0001
  
  /********************** McBSP RCCR bit definitions *************************/
 +#define RFULL_CYCLE           0x0800
  #define RDMAEN                        0x0008
  #define RDISABLE              0x0001
  
@@@ -272,8 -267,6 +276,8 @@@ struct omap_mcbsp_reg_cfg 
        u16 rcerh;
        u16 xcerg;
        u16 xcerh;
 +      u16 xccr;
 +      u16 rccr;
  };
  
  typedef enum {
diff --combined drivers/Makefile
index 2b6949f3f581617456c2ffa1dcc5b76cc1b98216,c1bf41737936ab00be4a87563a0bb0638074785d..a0f11ed99e7d0783783736a18d7e000a3c1c6123
@@@ -18,6 -18,9 +18,9 @@@ obj-$(CONFIG_ARM_AMBA)                += amba
  
  obj-$(CONFIG_XEN)             += xen/
  
+ # regulators early, since some subsystems rely on them to initialize
+ obj-$(CONFIG_REGULATOR)               += regulator/
  # char/ comes before serial/ etc so that the VT console is the boot-time
  # default.
  obj-y                         += char/
@@@ -31,15 -34,9 +34,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/
@@@ -68,10 -65,12 +71,10 @@@ 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/
@@@ -105,5 -104,5 +108,5 @@@ obj-$(CONFIG_PPC_PS3)              += ps3
  obj-$(CONFIG_OF)              += of/
  obj-$(CONFIG_SSB)             += ssb/
  obj-$(CONFIG_VIRTIO)          += virtio/
- obj-$(CONFIG_REGULATOR)               += regulator/
  obj-$(CONFIG_STAGING)         += staging/
+ obj-y                         += platform/
index 6bb2027d595e01076c41a0ec8c8ebabab8b7ea6d,1164837bb781470730768c37f466a17f091095d3..68eff964e53b56ffbda97526f0d0344f2a9adf5e
@@@ -2,26 -2,6 +2,6 @@@
  menu "Bluetooth device drivers"
        depends on BT
  
- config BT_HCIUSB
-       tristate "HCI USB driver (old version)"
-       depends on USB && BT_HCIBTUSB=n
-       help
-         Bluetooth HCI USB driver.
-         This driver is required if you want to use Bluetooth devices with
-         USB interface.
-         Say Y here to compile support for Bluetooth USB devices into the
-         kernel or say M to compile it as module (hci_usb).
- config BT_HCIUSB_SCO
-       bool "SCO (voice) support"
-       depends on BT_HCIUSB
-       help
-         This option enables the SCO support in the HCI USB driver. You need this
-         to transmit voice data with your Bluetooth USB device.
-         Say Y here to compile support for SCO over HCI USB.
  config BT_HCIBTUSB
        tristate "HCI USB driver"
        depends on USB
@@@ -181,27 -161,6 +161,27 @@@ config BT_HCIBTUAR
          Say Y here to compile support for HCI UART devices into the
          kernel or say M to compile it as module (btuart_cs).
  
 +config BT_HCIBRF6150
 +      tristate "HCI TI BRF6150 driver with H4 extensions"
 +      depends on BT && ARCH_OMAP
 +      help
 +        Bluetooth HCI driver for TI BRF6150 with H4 extensions.
 +        This driver provides support for BRF6150 Bluetooth chip 
 +        with vendor-specific H4 extensions.
 +
 +        Say Y here to compile support for TI BRF6150 devices into the
 +        kernel or say M to compile it as module (brf6150).
 +
 +config BT_HCIH4P
 +      tristate "HCI driver with H4 Nokia extensions"
 +      depends on BT && ARCH_OMAP 
 +      help 
 +        Bluetooth HCI driver with H4 extensions.  This driver provides
 +        support for H4+ Bluetooth chip with vendor-specific H4 extensions.
 +
 +        Say Y here to compile support for h4 extended devices into the kernel
 +        or say M to compile it as module (hci_h4p).
 +
  config BT_HCIVHCI
        tristate "HCI VHCI (Virtual HCI device) driver"
        help
index 0fab1f0318dfb1ce26b8c6f58cf30c461e72fbc5,16930f93d1ca4db6ffaf08df3e2f5fb4132ea076..9aebb460a34777ed9e942824d3b338c3104fe512
@@@ -2,7 -2,6 +2,6 @@@
  # Makefile for the Linux Bluetooth HCI device drivers.
  #
  
- obj-$(CONFIG_BT_HCIUSB)               += hci_usb.o
  obj-$(CONFIG_BT_HCIVHCI)      += hci_vhci.o
  obj-$(CONFIG_BT_HCIUART)      += hci_uart.o
  obj-$(CONFIG_BT_HCIBCM203X)   += bcm203x.o
@@@ -12,8 -11,6 +11,8 @@@ obj-$(CONFIG_BT_HCIDTL1)      += dtl1_cs.
  obj-$(CONFIG_BT_HCIBT3C)      += bt3c_cs.o
  obj-$(CONFIG_BT_HCIBLUECARD)  += bluecard_cs.o
  obj-$(CONFIG_BT_HCIBTUART)    += btuart_cs.o
 +obj-$(CONFIG_BT_HCIBRF6150)   += brf6150.o
 +obj-$(CONFIG_BT_HCIH4P)               += hci_h4p/
  
  obj-$(CONFIG_BT_HCIBTUSB)     += btusb.o
  obj-$(CONFIG_BT_HCIBTSDIO)    += btsdio.o
diff --combined drivers/hwmon/Kconfig
index 5eecb51f11484d1dcff070c0f9e891915d0fdbd3,4b33bc82cc2418e9785b798c6b4e66e7830ba7af..dd9edcd32669a6c7149ef2943693e2faf7f80422
@@@ -284,11 -284,12 +284,12 @@@ config SENSORS_F71805
          will be called f71805f.
  
  config SENSORS_F71882FG
-       tristate "Fintek F71882FG and F71883FG"
+       tristate "Fintek F71862FG, F71882FG and F8000"
        depends on EXPERIMENTAL
        help
          If you say yes here you get support for hardware monitoring
-         features of the Fintek F71882FG and F71883FG Super-I/O chips.
+         features of the Fintek F71882FG/F71883FG, F71862FG/71863FG
+         and F8000 Super-I/O chips.
  
          This driver can also be built as a module.  If so, the module
          will be called f71882fg.
@@@ -304,9 -305,13 +305,13 @@@ config SENSORS_F75375
          will be called f75375s.
  
  config SENSORS_FSCHER
-       tristate "FSC Hermes"
+       tristate "FSC Hermes (DEPRECATED)"
        depends on X86 && I2C
        help
+         This driver is DEPRECATED please use the new merged fschmd
+         ("FSC Poseidon, Scylla, Hermes, Heimdall and Heracles") driver
+         instead.
          If you say yes here you get support for Fujitsu Siemens
          Computers Hermes sensor chips.
  
          will be called fscher.
  
  config SENSORS_FSCPOS
-       tristate "FSC Poseidon"
+       tristate "FSC Poseidon (DEPRECATED)"
        depends on X86 && I2C
        help
+         This driver is DEPRECATED please use the new merged fschmd
+         ("FSC Poseidon, Scylla, Hermes, Heimdall and Heracles") driver
+         instead.
          If you say yes here you get support for Fujitsu Siemens
          Computers Poseidon sensor chips.
  
  
  config SENSORS_FSCHMD
        tristate "FSC Poseidon, Scylla, Hermes, Heimdall and Heracles"
-       depends on X86 && I2C && EXPERIMENTAL
+       depends on X86 && I2C
        help
          If you say yes here you get support for various Fujitsu Siemens
-         Computers sensor chips.
+         Computers sensor chips, including support for the integrated
+         watchdog.
  
-         This is a new merged driver for FSC sensor chips which is intended
-         as a replacment for the fscpos, fscscy and fscher drivers and adds
-         support for several other FCS sensor chips.
+         This is a merged driver for FSC sensor chips replacing the fscpos,
+         fscscy and fscher drivers and adding support for several other FSC
+         sensor chips.
  
          This driver can also be built as a module.  If so, the module
          will be called fschmd.
@@@ -399,7 -409,8 +409,8 @@@ config SENSORS_IT8
        select HWMON_VID
        help
          If you say yes here you get support for ITE IT8705F, IT8712F,
-         IT8716F, IT8718F and IT8726F sensor chips, and the SiS960 clone.
+         IT8716F, IT8718F, IT8720F and IT8726F sensor chips, and the
+         SiS960 clone.
  
          This driver can also be built as a module.  If so, the module
          will be called it87.
@@@ -417,11 -428,12 +428,12 @@@ config SENSORS_LM6
          will be called lm63.
  
  config SENSORS_LM70
-       tristate "National Semiconductor LM70"
+       tristate "National Semiconductor LM70 / Texas Instruments TMP121"
        depends on SPI_MASTER && EXPERIMENTAL
        help
          If you say yes here you get support for the National Semiconductor
-         LM70 digital temperature sensor chip.
+         LM70 and Texas Instruments TMP121/TMP123 digital temperature
+         sensor chips.
  
          This driver can also be built as a module.  If so, the module
          will be called lm70.
@@@ -548,6 -560,17 +560,17 @@@ config SENSORS_LM9
          This driver can also be built as a module.  If so, the module
          will be called lm93.
  
+ config SENSORS_LTC4245
+       tristate "Linear Technology LTC4245"
+       depends on I2C && EXPERIMENTAL
+       default n
+       help
+         If you say yes here you get support for Linear Technology LTC4245
+         Multiple Supply Hot Swap Controller I2C interface.
+         This driver can also be built as a module. If so, the module will
+         be called ltc4245.
  config SENSORS_MAX1111
        tristate "Maxim MAX1111 Multichannel, Serial 8-bit ADC chip"
        depends on SPI_MASTER
@@@ -879,22 -902,6 +902,22 @@@ config SENSORS_APPLESM
          Say Y here if you have an applicable laptop and want to experience
          the awesome power of applesmc.
  
 +config SENSORS_TSC210X
 +      tristate "TI TSC210x battery & temperature sensors"
 +      depends on HWMON && SPI_MASTER
 +      select SPI_TSC210X
 +      help
 +        Say Y if your board has a TSC210x chip and you want to
 +        have its battery state, auxiliary input and/or temperature
 +        sensors exported through hwmon.
 +
 +        This driver can also be built as a module.  In this case
 +        the module will be called tsc210x_sensors.
 +
 +config SENSORS_OMAP34XX
 +      tristate "TI OMAP34xx internal temperature sensor"
 +      depends on ARCH_OMAP3 && HIGH_RES_TIMERS
 +
  config HWMON_DEBUG_CHIP
        bool "Hardware Monitoring Chip debugging messages"
        default n
diff --combined drivers/hwmon/Makefile
index 6641a3f4193b4dd88f9c1a6ee6fca2b6abaa0bef,19cb1ace3eb49a0a1e64e8ecc3cd8d6e729b0c1c..617b68555fe5614cf5d4f5657fc98e02795007f0
@@@ -49,7 -49,7 +49,7 @@@ obj-$(CONFIG_SENSORS_IBMAEM)  += ibmaem.
  obj-$(CONFIG_SENSORS_IBMPEX)  += ibmpex.o
  obj-$(CONFIG_SENSORS_IT87)    += it87.o
  obj-$(CONFIG_SENSORS_K8TEMP)  += k8temp.o
- obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o
+ obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o
  obj-$(CONFIG_SENSORS_LM63)    += lm63.o
  obj-$(CONFIG_SENSORS_LM70)    += lm70.o
  obj-$(CONFIG_SENSORS_LM75)    += lm75.o
@@@ -62,6 -62,7 +62,7 @@@ obj-$(CONFIG_SENSORS_LM87)    += lm87.
  obj-$(CONFIG_SENSORS_LM90)    += lm90.o
  obj-$(CONFIG_SENSORS_LM92)    += lm92.o
  obj-$(CONFIG_SENSORS_LM93)    += lm93.o
+ obj-$(CONFIG_SENSORS_LTC4245) += ltc4245.o
  obj-$(CONFIG_SENSORS_MAX1111) += max1111.o
  obj-$(CONFIG_SENSORS_MAX1619) += max1619.o
  obj-$(CONFIG_SENSORS_MAX6650) += max6650.o
@@@ -77,9 -78,7 +78,9 @@@ obj-$(CONFIG_SENSORS_VT1211)  += vt1211.
  obj-$(CONFIG_SENSORS_VT8231)  += vt8231.o
  obj-$(CONFIG_SENSORS_W83627EHF)       += w83627ehf.o
  obj-$(CONFIG_SENSORS_W83L785TS)       += w83l785ts.o
 +obj-$(CONFIG_SENSORS_TSC210X) += tsc210x_sensors.o
  obj-$(CONFIG_SENSORS_W83L786NG)       += w83l786ng.o
 +obj-$(CONFIG_SENSORS_OMAP34XX)  += omap34xx_temp.o
  
  ifeq ($(CONFIG_HWMON_DEBUG_CHIP),y)
  EXTRA_CFLAGS += -DDEBUG
index 2ca170bc7e0d2c4ec82d8e40ac9fadf4093c9184,59c3d23f5bdccdf54e0dbc7d5099e136ad7768e8..744ecbcc450cc6b690e22f19c35239fa90fd1f07
@@@ -1,4 -1,4 +1,4 @@@
--#
++
  # Miscellaneous I2C chip drivers configuration
  #
  # *** DEPRECATED! Do not add new entries! See Makefile ***
@@@ -114,48 -114,6 +114,35 @@@ config SENSORS_PCF859
          These devices are hard to detect and rarely found on mainstream
          hardware.  If unsure, say N.
  
- config TPS65010
-       tristate "TPS6501x Power Management chips"
-       depends on GPIOLIB
-       default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK
-       help
-         If you say yes here you get support for the TPS6501x series of
-         Power Management chips.  These include voltage regulators,
-         lithium ion/polymer battery charging, and other features that
-         are often used in portable devices like cell phones and cameras.
-         This driver can also be built as a module.  If so, the module
-         will be called tps65010.
 +config TWL4030_MADC
 +      tristate "TWL4030 MADC Driver"
 +      depends on TWL4030_CORE
 +      help
 +        The TWL4030 Monitoring ADC driver enables the host
 +        processor to monitor analog signals using analog-to-digital
 +        conversions on the input source. TWL4030 MADC provides the
 +        following features:
 +         - Single 10-bit ADC with successive approximation register (SAR) conversion;
 +         - Analog multiplexer for 16 inputs;
 +         - Seven (of the 16) inputs are freely available;
 +         - Battery voltage monitoring;
 +         - Concurrent conversion request management;
 +         - Interrupt signal to Primary Interrupt Handler;
 +         - Averaging feature;
 +         - Selective enable/disable of the averaging feature.
 +
 +        Say 'y' here to statically link this module into the kernel or 'm'
 +        to build it as a dinamically loadable module. The module will be
 +        called twl4030-madc.ko
 +
 +config TWL4030_PWRBUTTON
 +      tristate "TWL4030 Power button Driver"
 +      depends on TWL4030_CORE
 +
 +config TWL4030_POWEROFF
 +      tristate "TWL4030 device poweroff"
 +      depends on TWL4030_CORE
 +
  config SENSORS_MAX6875
        tristate "Maxim MAX6875 Power supply supervisor"
        depends on EXPERIMENTAL
@@@ -181,33 -139,6 +168,33 @@@ config SENSORS_TSL255
          This driver can also be built as a module.  If so, the module
          will be called tsl2550.
  
 +config SENSORS_TSL2563
 +       tristate "Taos TSL2563 ambient light sensor"
 +       depends on I2C && HWMON
 +       help
 +         If you say yes here you get support for the Taos TSL2563
 +         ambient light sensor.
 +
 +         This driver can also be built as a module.  If so, the module
 +         will be called tsl2563.
 +
 +config LP5521
 +      tristate "LP5521 LED driver chip"
 +      depends on I2C
 +      help
 +        If you say yes here you get support for the National Semiconductor
 +        LP5521 LED driver.
 +
 +config MENELAUS
 +      bool "TWL92330/Menelaus PM chip"
 +      depends on I2C=y && ARCH_OMAP24XX
 +      help
 +        If you say yes here you get support for the Texas Instruments
 +        TWL92330/Menelaus Power Management chip. This include voltage
 +        regulators, Dual slot memory card tranceivers, real-time clock
 +        and other features that are often used in portable devices like
 +        cell phones and PDAs.
 +
  config MCU_MPC8349EMITX
        tristate "MPC8349E-mITX MCU driver"
        depends on I2C && PPC_83xx
index 417e7fb7f7d29370cafe8e726c66d0e32a7089aa,83accaaf8164bfcc81397da82e363ee25e20434d..ffd8d0d1909dc9b5559b4e31d329d18834ebdfbe
@@@ -18,16 -18,10 +18,15 @@@ obj-$(CONFIG_SENSORS_PCA9539)      += pca953
  obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
  obj-$(CONFIG_PCF8575)         += pcf8575.o
  obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
- obj-$(CONFIG_TPS65010)                += tps65010.o
 +obj-$(CONFIG_MENELAUS)                += menelaus.o
  obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
  obj-$(CONFIG_MCU_MPC8349EMITX)        += mcu_mpc8349emitx.o
 +obj-$(CONFIG_TWL4030_POWEROFF)        += twl4030-poweroff.o
 +obj-$(CONFIG_TWL4030_PWRBUTTON)       += twl4030-pwrbutton.o
 +obj-$(CONFIG_TWL4030_MADC)    += twl4030-madc.o
 +obj-$(CONFIG_RTC_X1205_I2C)   += x1205.o
 +obj-$(CONFIG_LP5521)          += lp5521.o
  
  ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
  EXTRA_CFLAGS += -DDEBUG
  endif
 -
index c964badc4b5026b60988a20083f400ea602b0a98,35561689ff38717f60ddc588493d7d02206f2008..be8378c45813c4d9632477a80a3cf3f06aa23298
@@@ -259,39 -259,6 +259,39 @@@ config KEYBOARD_OMA
          To compile this driver as a module, choose M here: the
          module will be called omap-keypad.
  
 +config KEYBOARD_TWL4030
 +      tristate "TI TWL4030 keypad support"
 +      depends on TWL4030_CORE
 +      help
 +        Say Y here if you want to use the OMAP TWL4030 keypad.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called omap-twl4030keypad. This driver depends on
 +        TWL4030 Core and TWL4030 GPIO I2C client driver
 +
 +config OMAP_PS2
 +      tristate "TI OMAP Innovator 1510 PS/2 keyboard & mouse support"
 +      depends on ARCH_OMAP15XX && MACH_OMAP_INNOVATOR
 +      help
 +        Say Y here if you want to use the OMAP Innovator 1510 PS/2
 +        keyboard and mouse.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called innovator_ps2.
 +
 +config KEYBOARD_TSC2301
 +      tristate "TSC2301 keypad support"
 +      depends on SPI_TSC2301
 +      help
 +        Say Y here for if you are using the keypad features of TSC2301.
 +
 +config KEYBOARD_LM8323
 +      tristate "LM8323 keypad chip"
 +      depends on I2C
 +      help
 +        If you say yes here you get support for the National Semiconductor
 +        LM8323 keypad controller.
 +
  config KEYBOARD_PXA27x
        tristate "PXA27x/PXA3xx keypad support"
        depends on PXA27x || PXA3xx
          To compile this driver as a module, choose M here: the
          module will be called pxa27x_keypad.
  
+ config KEYBOARD_PXA930_ROTARY
+       tristate "PXA930/PXA935 Enhanced Rotary Controller Support"
+       depends on CPU_PXA930 || CPU_PXA935
+       help
+         Enable support for PXA930/PXA935 Enhanced Rotary Controller.
+         To compile this driver as a module, choose M here: the
+         module will be called pxa930_rotary.
  config KEYBOARD_AAED2000
        tristate "AAED-2000 keyboard"
        depends on MACH_AAED2000
index ae47fffacc6852798d0f094b078cb71d780125fc,36351e1190f9e2db8d49da0ac1b6a941c8b547d1..27c4f1dc4b20c3285b93ed11f57b0e9d4834c79f
@@@ -19,11 -19,8 +19,12 @@@ obj-$(CONFIG_KEYBOARD_TOSA)         += tosakbd
  obj-$(CONFIG_KEYBOARD_HIL)            += hil_kbd.o
  obj-$(CONFIG_KEYBOARD_HIL_OLD)                += hilkbd.o
  obj-$(CONFIG_KEYBOARD_OMAP)           += omap-keypad.o
 +obj-$(CONFIG_OMAP_PS2)                        += innovator_ps2.o
 +obj-$(CONFIG_KEYBOARD_TSC2301)                += tsc2301_kp.o
 +obj-$(CONFIG_KEYBOARD_LM8323)         += lm8323.o
 +obj-$(CONFIG_KEYBOARD_TWL4030)                += omap-twl4030keypad.o
  obj-$(CONFIG_KEYBOARD_PXA27x)         += pxa27x_keypad.o
+ obj-$(CONFIG_KEYBOARD_PXA930_ROTARY)  += pxa930_rotary.o
  obj-$(CONFIG_KEYBOARD_AAED2000)               += aaed2000_kbd.o
  obj-$(CONFIG_KEYBOARD_GPIO)           += gpio_keys.o
  obj-$(CONFIG_KEYBOARD_HP6XX)          += jornada680_kbd.o
index 1ea5153040b4e83c7bbc1dd6ac6dbff735180442,bb6486a8c070f599430020681c395e9e59300eb9..5bd3bfac9c0dc40b4f5677ad082c1db9d774f855
@@@ -58,6 -58,14 +58,14 @@@ config TOUCHSCREEN_CORG
          NOTE: this driver is deprecated, try enable SPI and generic
          ADS7846-based touchscreen driver.
  
+ config TOUCHSCREEN_DA9034
+       tristate "Touchscreen support for Dialog Semiconductor DA9034"
+       depends on PMIC_DA903X
+       default y
+       help
+         Say Y here to enable the support for the touchscreen found
+         on Dialog Semiconductor DA9034 PMIC.
  config TOUCHSCREEN_FUJITSU
        tristate "Fujitsu serial touchscreen"
        select SERIO
@@@ -95,6 -103,19 +103,19 @@@ config TOUCHSCREEN_EL
          To compile this driver as a module, choose M here: the
          module will be called elo.
  
+ config TOUCHSCREEN_WACOM_W8001
+       tristate "Wacom W8001 penabled serial touchscreen"
+       select SERIO
+       help
+         Say Y here if you have an Wacom W8001 penabled serial touchscreen
+         connected to your system.
+         If unsure, say N.
+         To compile this driver as a module, choose M here: the
+         module will be called wacom_w8001.
  config TOUCHSCREEN_MTOUCH
        tristate "MicroTouch serial touchscreens"
        select SERIO
@@@ -221,32 -242,6 +242,32 @@@ config TOUCHSCREEN_ATMEL_TSADC
          To compile this driver as a module, choose M here: the
          module will be called atmel_tsadcc.
  
 +config TOUCHSCREEN_TSC2005
 +      tristate "TSC2005 touchscreen support"
 +      depends on SPI_MASTER
 +      help
 +        Say Y here for if you are using the touchscreen features of TSC2005.
 +
 +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"
        depends on AC97_BUS
@@@ -402,4 -397,15 +423,15 @@@ config TOUCHSCREEN_TOUCHIT21
          To compile this driver as a module, choose M here: the
          module will be called touchit213.
  
+ config TOUCHSCREEN_TSC2007
+       tristate "TSC2007 based touchscreens"
+       depends on I2C
+       help
+         Say Y here if you have a TSC2007 based touchscreen.
+         If unsure, say N.
+         To compile this driver as a module, choose M here: the
+         module will be called tsc2007.
  endif
index 7a1ac271785a0ee6ffee92c6e095565399170cbe,7c27c8b9b6d0e1b8d23199f584332119b541ba06..2ae5ab8e45c43cfa905f434dcb9a710545a5cdd0
@@@ -472,7 -472,7 +472,7 @@@ static ssize_t ads7846_disable_store(st
                                     const char *buf, size_t count)
  {
        struct ads7846 *ts = dev_get_drvdata(dev);
-       long i;
+       unsigned long i;
  
        if (strict_strtoul(buf, 10, &i))
                return -EINVAL;
@@@ -559,7 -559,7 +559,7 @@@ static void ads7846_rx(void *ads
        if (packet->tc.ignore || Rt > ts->pressure_max) {
  #ifdef VERBOSE
                pr_debug("%s: ignored %d pressure %d\n",
-                       ts->spi->dev.bus_id, packet->tc.ignore, Rt);
+                       dev_name(&ts->spi->dev), packet->tc.ignore, Rt);
  #endif
                hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD),
                              HRTIMER_MODE_REL);
@@@ -697,7 -697,7 +697,7 @@@ static enum hrtimer_restart ads7846_tim
        struct ads7846  *ts = container_of(handle, struct ads7846, timer);
        int             status = 0;
  
-       spin_lock_irq(&ts->lock);
+       spin_lock(&ts->lock);
  
        if (unlikely(!get_pendown_state(ts) ||
                     device_suspended(&ts->spi->dev))) {
                        dev_err(&ts->spi->dev, "spi_async --> %d\n", status);
        }
  
-       spin_unlock_irq(&ts->lock);
+       spin_unlock(&ts->lock);
        return HRTIMER_NORESTART;
  }
  
@@@ -878,15 -878,6 +878,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->penirq_recheck_delay_usecs =
                                pdata->penirq_recheck_delay_usecs;
  
-       snprintf(ts->phys, sizeof(ts->phys), "%s/input0", spi->dev.bus_id);
+       snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
  
        input_dev->name = "ADS784x Touchscreen";
        input_dev->phys = ts->phys;
diff --combined drivers/mfd/Kconfig
index 650b51c59b86791b826bf0286f946da88eccec74,416f9e7286bae2a53f78dfffbc56e0359abe42fc..7138b484678b42257e52c1511ca699206b720e4f
@@@ -34,6 -34,14 +34,14 @@@ config MFD_ASIC
          This driver supports the ASIC3 multifunction chip found on many
          PDAs (mainly iPAQ and HTC based ones)
  
+ config MFD_DM355EVM_MSP
+       bool "DaVinci DM355 EVM microcontroller"
+       depends on I2C && MACH_DAVINCI_DM355_EVM
+       help
+         This driver supports the MSP430 microcontroller used on these
+         boards.  MSP430 firmware manages resets and power sequencing,
+         inputs from buttons and the IR remote, LEDs, an RTC, and more.
  config HTC_EGPIO
        bool "HTC EGPIO support"
        depends on GENERIC_HARDIRQS && GPIOLIB && ARM
@@@ -61,6 -69,29 +69,29 @@@ config UCB1400_COR
          To compile this driver as a module, choose M here: the
          module will be called ucb1400_core.
  
+ config TPS65010
+       tristate "TPS6501x Power Management chips"
+       depends on I2C && GPIOLIB
+       default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK
+       help
+         If you say yes here you get support for the TPS6501x series of
+         Power Management chips.  These include voltage regulators,
+         lithium ion/polymer battery charging, and other features that
+         are often used in portable devices like cell phones and cameras.
+         This driver can also be built as a module.  If so, the module
+         will be called tps65010.
+ config MENELAUS
+       bool "Texas Instruments TWL92330/Menelaus PM chip"
+       depends on I2C=y && ARCH_OMAP24XX
+       help
+         If you say yes here you get support for the Texas Instruments
+         TWL92330/Menelaus Power Management chip. This include voltage
+         regulators, Dual slot memory card tranceivers, real-time clock
+         and other features that are often used in portable devices like
+         cell phones and PDAs.
  config TWL4030_CORE
        bool "Texas Instruments TWL4030/TPS659x0 Support"
        depends on I2C=y && GENERIC_HARDIRQS
          high speed USB OTG transceiver, an audio codec (on most
          versions) and many other features.
  
 +config TWL4030_POWER
 +      bool "Support power sequencing scripts on TWL4030/TPS659x0"
 +      depends on TWL4030_CORE
 +      help
 +        Say yes here if you want to use the power sequencing scripts on
 +        the TWL4030/TPS659x0. These scripts control which regulators or
 +        oscillators are switched off or on or reset when a sleep, wakeup
 +        or warm reset event occurs.
 +
  config MFD_TMIO
        bool
        default n
@@@ -125,6 -147,7 +156,7 @@@ config PMIC_DA903
  
  config MFD_WM8400
        tristate "Support Wolfson Microelectronics WM8400"
+       select MFD_CORE
        depends on I2C
        help
          Support for the Wolfson Microelecronics WM8400 PMIC and audio
@@@ -151,6 -174,38 +183,38 @@@ config MFD_WM8350_CONFIG_MODE_
        bool
        depends on MFD_WM8350
  
+ config MFD_WM8351_CONFIG_MODE_0
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8351_CONFIG_MODE_1
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8351_CONFIG_MODE_2
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8351_CONFIG_MODE_3
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8352_CONFIG_MODE_0
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8352_CONFIG_MODE_1
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8352_CONFIG_MODE_2
+       bool
+       depends on MFD_WM8350
+ config MFD_WM8352_CONFIG_MODE_3
+       bool
+       depends on MFD_WM8350
  config MFD_WM8350_I2C
        tristate "Support Wolfson Microelectronics WM8350 with I2C"
        select MFD_WM8350
diff --combined drivers/mfd/Makefile
index 6c1236d2a56315e709b21d56ca5d04a173261a3d,0c9418b36c2692a8c700f9f7f69222a4de774419..7ca14f45771025168a1199ab4a15b738f5eee0d5
@@@ -8,6 -8,8 +8,8 @@@ obj-$(CONFIG_MFD_ASIC3)          += asic3.
  obj-$(CONFIG_HTC_EGPIO)               += htc-egpio.o
  obj-$(CONFIG_HTC_PASIC3)      += htc-pasic3.o
  
+ obj-$(CONFIG_MFD_DM355EVM_MSP)        += dm355evm_msp.o
  obj-$(CONFIG_MFD_T7L66XB)     += t7l66xb.o
  obj-$(CONFIG_MFD_TC6387XB)    += tc6387xb.o
  obj-$(CONFIG_MFD_TC6393XB)    += tc6393xb.o
@@@ -17,8 -19,10 +19,11 @@@ wm8350-objs                 := wm8350-core.o wm8350-r
  obj-$(CONFIG_MFD_WM8350)      += wm8350.o
  obj-$(CONFIG_MFD_WM8350_I2C)  += wm8350-i2c.o
  
+ obj-$(CONFIG_TPS65010)                += tps65010.o
+ obj-$(CONFIG_MENELAUS)                += menelaus.o
  obj-$(CONFIG_TWL4030_CORE)    += twl4030-core.o twl4030-irq.o
 +obj-$(CONFIG_TWL4030_POWER)    += twl4030-power.o
  
  obj-$(CONFIG_MFD_CORE)                += mfd-core.o
  
@@@ -32,4 -36,4 +37,4 @@@ obj-$(CONFIG_MCP_UCB1200)     += ucb1x00-as
  endif
  obj-$(CONFIG_UCB1400_CORE)    += ucb1400_core.o
  
- obj-$(CONFIG_PMIC_DA903X)     += da903x.o
+ obj-$(CONFIG_PMIC_DA903X)     += da903x.o
index 1b178cd40131899a33c5c3049cc1b890af0e2c79,b59c385cbc12f98bc319845d719fc83e518c8dc0..7e7f0db2005d74bef2450ccea9923e733f62b8a8
@@@ -38,6 -38,6 +38,9 @@@
  #include <linux/i2c.h>
  #include <linux/i2c/twl4030.h>
  
++#ifdef CONFIG_ARM
++#include <mach/cpu.h>
++#endif
  
  /*
   * The TWL4030 "Triton 2" is one of a family of a multi-function "Power
  #define twl_has_madc()        false
  #endif
  
 +#ifdef CONFIG_TWL4030_POWER
 +#define twl_has_power()        true
 +#else
 +#define twl_has_power()        false
 +#endif
 +
  #if defined(CONFIG_RTC_DRV_TWL4030) || defined(CONFIG_RTC_DRV_TWL4030_MODULE)
  #define twl_has_rtc() true
  #else
@@@ -228,8 -222,6 +231,8 @@@ static struct twl4030mapping twl4030_ma
        { 3, TWL4030_BASEADD_SECURED_REG },
  };
  
 +extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
 +
  /*----------------------------------------------------------------------*/
  
  /* Exported Functions */
@@@ -666,12 -658,7 +669,7 @@@ static void __init clocks_init(void
                osc = clk_get(NULL, "osc_ck");
        else
                osc = clk_get(NULL, "osc_sys_ck");
- #else
-       /* REVISIT for non-OMAP systems, pass the clock rate from
-        * board init code, using platform_data.
-        */
-       osc = ERR_PTR(-EIO);
- #endif
        if (IS_ERR(osc)) {
                printk(KERN_WARNING "Skipping twl4030 internal clock init and "
                                "using bootloader value (unknown osc rate)\n");
        rate = clk_get_rate(osc);
        clk_put(osc);
  
+ #else
+       /* REVISIT for non-OMAP systems, pass the clock rate from
+        * board init code, using platform_data.
+        */
+       osc = ERR_PTR(-EIO);
+       printk(KERN_WARNING "Skipping twl4030 internal clock init and "
+              "using bootloader value (unknown osc rate)\n");
+       return;
+ #endif
        switch (rate) {
        case 19200000:
                ctrl = HFCLK_FREQ_19p2_MHZ;
@@@ -776,10 -775,6 +786,10 @@@ twl4030_probe(struct i2c_client *client
        /* setup clock framework */
        clocks_init();
  
 +      /* load power event scripts */
 +      if (twl_has_power() && pdata->power)
 +              twl4030_power_init(pdata->power);
 +
        /* Maybe init the T2 Interrupt subsystem */
        if (client->irq
                        && pdata->irq_base
diff --combined drivers/misc/Kconfig
index a11e2a0a823b4077a61ed08ac45d095f45691cd3,419c378bd24b334d5645fa6a35ef5a3b8c158dd0..f1c5f83612aa0f62b1ecf45d207a1903ce0ecf4e
@@@ -120,7 -120,7 +120,7 @@@ config TIFM_COR
          cards are supported via 'MMC/SD Card support: TI Flash Media MMC/SD
          Interface support (MMC_TIFM_SD)'.
  
-           To compile this driver as a module, choose M here: the module will
+         To compile this driver as a module, choose M here: the module will
          be called tifm_core.
  
  config TIFM_7XX1
          To make actual use of the device, you will have to select some
          flash card format drivers, as outlined in the TIFM_CORE Help.
  
-           To compile this driver as a module, choose M here: the module will
+         To compile this driver as a module, choose M here: the module will
          be called tifm_7xx1.
  
- config ACER_WMI
-         tristate "Acer WMI Laptop Extras (EXPERIMENTAL)"
-       depends on X86
-       depends on EXPERIMENTAL
-       depends on ACPI
-       depends on LEDS_CLASS
-       depends on NEW_LEDS
-       depends on BACKLIGHT_CLASS_DEVICE
-       depends on SERIO_I8042
-       depends on RFKILL
-       select ACPI_WMI
-       ---help---
-         This is a driver for newer Acer (and Wistron) laptops. It adds
-         wireless radio and bluetooth control, and on some laptops,
-         exposes the mail LED and LCD backlight.
-         For more information about this driver see
-         <file:Documentation/laptops/acer-wmi.txt>
-         If you have an ACPI-WMI compatible Acer/ Wistron laptop, say Y or M
-         here.
- config ASUS_LAPTOP
-         tristate "Asus Laptop Extras (EXPERIMENTAL)"
-         depends on X86
-         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
-         MEDION, JVC or VICTOR laptops. It makes all the extra buttons generate
-         standard ACPI events that go through /proc/acpi/events. It also adds
-         support for video output switching, LCD backlight control, Bluetooth and
-         Wlan control, and most importantly, allows you to blink those fancy LEDs.
-         For more information and a userspace daemon for handling the extra
-         buttons see <http://acpi4asus.sf.net/>.
-         If you have an ACPI-compatible ASUS laptop, say Y or M here.
- config FUJITSU_LAPTOP
-         tristate "Fujitsu Laptop Extras"
-         depends on X86
-         depends on ACPI
-       depends on INPUT
-         depends on BACKLIGHT_CLASS_DEVICE
-         ---help---
-         This is a driver for laptops built by Fujitsu:
-           * P2xxx/P5xxx/S6xxx/S7xxx series Lifebooks
-           * Possibly other Fujitsu laptop models
-           * Tested with S6410 and S7020
-         It adds support for LCD brightness control and some hotkeys.
-         If you have a Fujitsu laptop, say Y or M here.
- config FUJITSU_LAPTOP_DEBUG
-       bool "Verbose debug mode for Fujitsu Laptop Extras"
-       depends on FUJITSU_LAPTOP
-       default n
-       ---help---
-         Enables extra debug output from the fujitsu extras driver, at the
-         expense of a slight increase in driver size.
-         If you are not sure, say N here.
- config TC1100_WMI
-       tristate "HP Compaq TC1100 Tablet WMI Extras (EXPERIMENTAL)"
-       depends on X86 && !X86_64
-       depends on EXPERIMENTAL
-       depends on ACPI
-       select ACPI_WMI
-       ---help---
-         This is a driver for the WMI extensions (wireless and bluetooth power
-         control) of the HP Compaq TC1100 tablet.
- config HP_WMI
-        tristate "HP WMI extras"
-        depends on ACPI_WMI
-        depends on INPUT
-        depends on RFKILL
-        help
-          Say Y here if you want to support WMI-based hotkeys on HP laptops and
-        to read data from WMI such as docking or ambient light sensor state.
-          To compile this driver as a module, choose M here: the module will
-          be called hp-wmi.
  config ICS932S401
        tristate "Integrated Circuits ICS932S401"
        depends on I2C && EXPERIMENTAL
          This driver can also be built as a module. If so, the module
          will be called ics932s401.
  
- config MSI_LAPTOP
-         tristate "MSI Laptop Extras"
-         depends on X86
-         depends on ACPI
-         depends on BACKLIGHT_CLASS_DEVICE
-         ---help---
-         This is a driver for laptops built by MSI (MICRO-STAR
-         INTERNATIONAL):
-         MSI MegaBook S270 (MS-1013)
-         Cytron/TCM/Medion/Tchibo MD96100/SAM2000
-         It adds support for Bluetooth, WLAN and LCD brightness control.
-         More information about this driver is available at
-         <http://0pointer.de/lennart/tchibo.html>.
-         If you have an MSI S270 laptop, say Y or M here.
- config PANASONIC_LAPTOP
-       tristate "Panasonic Laptop Extras"
-       depends on X86 && INPUT && ACPI
-         depends on BACKLIGHT_CLASS_DEVICE
-       ---help---
-         This driver adds support for access to backlight control and hotkeys
-         on Panasonic Let's Note laptops.
-         If you have a Panasonic Let's note laptop (such as the R1(N variant),
-         R2, R3, R5, T2, W2 and Y2 series), say Y.
- config COMPAL_LAPTOP
-       tristate "Compal Laptop Extras"
-       depends on X86
-       depends on ACPI
-       depends on BACKLIGHT_CLASS_DEVICE
-       ---help---
-         This is a driver for laptops built by Compal:
-         Compal FL90/IFL90
-         Compal FL91/IFL91
-         Compal FL92/JFL92
-         Compal FT00/IFT00
-         It adds support for Bluetooth, WLAN and LCD brightness control.
-         If you have an Compal FL9x/IFL9x/FT00 laptop, say Y or M here.
- config SONY_LAPTOP
-       tristate "Sony Laptop Extras"
-       depends on X86 && ACPI
-       select BACKLIGHT_CLASS_DEVICE
-       depends on INPUT
-         ---help---
-         This mini-driver drives the SNC and SPIC devices present in the ACPI
-         BIOS of the Sony Vaio laptops.
-         It gives access to some extra laptop functionalities like Bluetooth,
-         screen brightness control, Fn keys and allows powering on/off some
-         devices.
-         Read <file:Documentation/laptops/sony-laptop.txt> for more information.
- config SONYPI_COMPAT
-       bool "Sonypi compatibility"
-       depends on SONY_LAPTOP
-         ---help---
-         Build the sonypi driver compatibility code into the sony-laptop driver.
- config THINKPAD_ACPI
-       tristate "ThinkPad ACPI Laptop Extras"
-       depends on X86 && ACPI
-       select BACKLIGHT_LCD_SUPPORT
-       select BACKLIGHT_CLASS_DEVICE
-       select HWMON
-       select NVRAM
-       select INPUT
-       select NEW_LEDS
-       select LEDS_CLASS
-       select NET
-       select RFKILL
-       ---help---
-         This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
-         support for Fn-Fx key combinations, Bluetooth control, video
-         output switching, ThinkLight control, UltraBay eject and more.
-         For more information about this driver see
-         <file:Documentation/laptops/thinkpad-acpi.txt> and
-         <http://ibm-acpi.sf.net/> .
-         This driver was formerly known as ibm-acpi.
-         If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.
- config THINKPAD_ACPI_DEBUG
-       bool "Verbose debug mode"
-       depends on THINKPAD_ACPI
-       default n
-       ---help---
-         Enables extra debugging information, at the expense of a slightly
-         increase in driver size.
-         If you are not sure, say N here.
- config THINKPAD_ACPI_DOCK
-       bool "Legacy Docking Station Support"
-       depends on THINKPAD_ACPI
-       depends on ACPI_DOCK=n
-       default n
-       ---help---
-         Allows the thinkpad_acpi driver to handle docking station events.
-         This support was made obsolete by the generic ACPI docking station
-         support (CONFIG_ACPI_DOCK).  It will allow locking and removing the
-         laptop from the docking station, but will not properly connect PCI
-         devices.
-         If you are not sure, say N here.
- config THINKPAD_ACPI_BAY
-       bool "Legacy Removable Bay Support"
-       depends on THINKPAD_ACPI
-       default y
-       ---help---
-         Allows the thinkpad_acpi driver to handle removable bays.  It will
-         electrically disable the device in the bay, and also generate
-         notifications when the bay lever is ejected or inserted.
-         If you are not sure, say Y here.
- config THINKPAD_ACPI_VIDEO
-       bool "Video output control support"
-       depends on THINKPAD_ACPI
-       default y
-       ---help---
-         Allows the thinkpad_acpi driver to provide an interface to control
-         the various video output ports.
-         This feature often won't work well, depending on ThinkPad model,
-         display state, video output devices in use, whether there is a X
-         server running, phase of the moon, and the current mood of
-         Schroedinger's cat.  If you can use X.org's RandR to control
-         your ThinkPad's video output ports instead of this feature,
-         don't think twice: do it and say N here to save some memory.
-         If you are not sure, say Y here.
- config THINKPAD_ACPI_HOTKEY_POLL
-       bool "Support NVRAM polling for hot keys"
-       depends on THINKPAD_ACPI
-       default y
-       ---help---
-         Some thinkpad models benefit from NVRAM polling to detect a few of
-         the hot key press events.  If you know your ThinkPad model does not
-         need to do NVRAM polling to support any of the hot keys you use,
-         unselecting this option will save about 1kB of memory.
-         ThinkPads T40 and newer, R52 and newer, and X31 and newer are
-         unlikely to need NVRAM polling in their latest BIOS versions.
-         NVRAM polling can detect at most the following keys: ThinkPad/Access
-         IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute,
-         Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12).
-         If you are not sure, say Y here.  The driver enables polling only if
-         it is strictly necessary to do so.
  config ATMEL_SSC
        tristate "Device driver for Atmel SSC peripheral"
        depends on AVR32 || ARCH_AT91
  
          If unsure, say N.
  
- 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
-         Intel Menlow platform.
-         If unsure, say N.
- 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
-       depends on RFKILL
-       ---help---
-         This driver supports the Fn-Fx keys on Eee PC laptops.
-         It also adds the ability to switch camera/wlan on/off.
 +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"
        default n
@@@ -510,6 -218,18 +232,18 @@@ config SGI_GRU_DEBU
        This option enables addition debugging code for the SGI GRU driver. If
        you are unsure, say N.
  
+ config DELL_LAPTOP
+       tristate "Dell Laptop Extras (EXPERIMENTAL)"
+       depends on X86
+       depends on DCDBAS
+       depends on EXPERIMENTAL
+       depends on BACKLIGHT_CLASS_DEVICE
+       depends on RFKILL
+       default n
+       ---help---
+       This driver adds support for rfkill and backlight control to Dell
+       laptops.
  source "drivers/misc/c2port/Kconfig"
  
  endif # MISC_DEVICES
diff --combined drivers/misc/Makefile
index 78be134a80914feba6d6be5181079bfb3cd20519,9cf8ae6e4b39f53107cf46887ee4b70633ccd5db..9f066265f30bc2a8e53902af2f4ebbfd3405624d
@@@ -1,33 -1,20 +1,21 @@@
  #
  # Makefile for misc devices that really don't fit anywhere else.
  #
- obj- := misc.o        # Dummy rule to force built-in.o to be made
  
  obj-$(CONFIG_IBM_ASM)         += ibmasm/
  obj-$(CONFIG_HDPU_FEATURES)   += hdpuftrs/
- obj-$(CONFIG_OMAP_STI)                += sti/
- obj-$(CONFIG_ASUS_LAPTOP)     += asus-laptop.o
- obj-$(CONFIG_EEEPC_LAPTOP)    += eeepc-laptop.o
- obj-$(CONFIG_MSI_LAPTOP)      += msi-laptop.o
- obj-$(CONFIG_COMPAL_LAPTOP)   += compal-laptop.o
- obj-$(CONFIG_ACER_WMI)                += acer-wmi.o
  obj-$(CONFIG_ATMEL_PWM)               += atmel_pwm.o
  obj-$(CONFIG_ATMEL_SSC)               += atmel-ssc.o
  obj-$(CONFIG_ATMEL_TCLIB)     += atmel_tclib.o
- obj-$(CONFIG_HP_WMI)          += hp-wmi.o
  obj-$(CONFIG_ICS932S401)      += ics932s401.o
- obj-$(CONFIG_TC1100_WMI)      += tc1100-wmi.o
  obj-$(CONFIG_LKDTM)           += lkdtm.o
  obj-$(CONFIG_TIFM_CORE)               += tifm_core.o
+ obj-$(CONFIG_DELL_LAPTOP)     += dell-laptop.o
  obj-$(CONFIG_TIFM_7XX1)               += tifm_7xx1.o
  obj-$(CONFIG_PHANTOM)         += phantom.o
  obj-$(CONFIG_SGI_IOC4)                += ioc4.o
- obj-$(CONFIG_SONY_LAPTOP)     += sony-laptop.o
- obj-$(CONFIG_THINKPAD_ACPI)   += thinkpad_acpi.o
- obj-$(CONFIG_FUJITSU_LAPTOP)  += fujitsu-laptop.o
- obj-$(CONFIG_PANASONIC_LAPTOP)        += panasonic-laptop.o
  obj-$(CONFIG_EEPROM_93CX6)    += eeprom_93cx6.o
- obj-$(CONFIG_INTEL_MENLOW)    += intel_menlow.o
++obj-$(CONFIG_OMAP_STI)                += sti/
  obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
  obj-$(CONFIG_KGDB_TESTS)      += kgdbts.o
  obj-$(CONFIG_SGI_XP)          += sgi-xp/
index ba477bc0f1b40bbd15daf40584964c3b85dda1e8,f4853288bbb1ec158a9f712443fac20e19de4347..98cab84829b89ef73e388dcaffaabcd9e37f9b25
@@@ -15,11 -15,13 +15,14 @@@ obj-$(CONFIG_MMC_RICOH_MMC)        += ricoh_mm
  obj-$(CONFIG_MMC_WBSD)                += wbsd.o
  obj-$(CONFIG_MMC_AU1X)                += au1xmmc.o
  obj-$(CONFIG_MMC_OMAP)                += omap.o
 +obj-$(CONFIG_MMC_OMAP_HS)     += omap_hsmmc.o
  obj-$(CONFIG_MMC_AT91)                += at91_mci.o
  obj-$(CONFIG_MMC_ATMELMCI)    += atmel-mci.o
  obj-$(CONFIG_MMC_TIFM_SD)     += tifm_sd.o
  obj-$(CONFIG_MMC_SPI)         += mmc_spi.o
+ ifeq ($(CONFIG_OF),y)
+ obj-$(CONFIG_MMC_SPI)         += of_mmc_spi.o
+ endif
  obj-$(CONFIG_MMC_S3C)         += s3cmci.o
  obj-$(CONFIG_MMC_SDRICOH_CS)  += sdricoh_cs.o
  obj-$(CONFIG_MMC_TMIO)                += tmio_mmc.o
index d5c1e9d7e6bd45d1436b7099d8e1b2a459e164da,0000000000000000000000000000000000000000..70d8d78a2a468837a887d99210e642866ae01b4b
mode 100644,000000..100644
--- /dev/null
@@@ -1,1302 -1,0 +1,1302 @@@
- #include <asm/dma.h>
 +/*
 + * drivers/mmc/host/omap_hsmmc.c
 + *
 + * Driver for OMAP2430/3430 MMC controller.
 + *
 + * Copyright (C) 2007 Texas Instruments.
 + *
 + * Authors:
 + *    Syed Mohammed Khasim    <x0khasim@ti.com>
 + *    Madhusudhan             <madhu.cr@ti.com>
 + *    Mohit Jalori            <mjalori@ti.com>
 + *
 + * This file is licensed under the terms of the GNU General Public License
 + * version 2. This program is licensed "as is" without any warranty of any
 + * kind, whether express or implied.
 + */
 +
 +#include <linux/module.h>
 +#include <linux/init.h>
 +#include <linux/interrupt.h>
 +#include <linux/delay.h>
 +#include <linux/dma-mapping.h>
 +#include <linux/platform_device.h>
 +#include <linux/workqueue.h>
 +#include <linux/timer.h>
 +#include <linux/clk.h>
 +#include <linux/mmc/host.h>
 +#include <linux/io.h>
 +#include <linux/semaphore.h>
++#include <mach/dma.h>
 +#include <mach/hardware.h>
 +#include <mach/board.h>
 +#include <mach/mmc.h>
 +#include <mach/cpu.h>
 +
 +/* OMAP HSMMC Host Controller Registers */
 +#define OMAP_HSMMC_SYSCONFIG  0x0010
 +#define OMAP_HSMMC_CON                0x002C
 +#define OMAP_HSMMC_BLK                0x0104
 +#define OMAP_HSMMC_ARG                0x0108
 +#define OMAP_HSMMC_CMD                0x010C
 +#define OMAP_HSMMC_RSP10      0x0110
 +#define OMAP_HSMMC_RSP32      0x0114
 +#define OMAP_HSMMC_RSP54      0x0118
 +#define OMAP_HSMMC_RSP76      0x011C
 +#define OMAP_HSMMC_DATA               0x0120
 +#define OMAP_HSMMC_HCTL               0x0128
 +#define OMAP_HSMMC_SYSCTL     0x012C
 +#define OMAP_HSMMC_STAT               0x0130
 +#define OMAP_HSMMC_IE         0x0134
 +#define OMAP_HSMMC_ISE                0x0138
 +#define OMAP_HSMMC_CAPA               0x0140
 +
 +#define VS18                  (1 << 26)
 +#define VS30                  (1 << 25)
 +#define SDVS18                        (0x5 << 9)
 +#define SDVS30                        (0x6 << 9)
 +#define SDVSCLR                       0xFFFFF1FF
 +#define SDVSDET                       0x00000400
 +#define AUTOIDLE              0x1
 +#define SDBP                  (1 << 8)
 +#define DTO                   0xe
 +#define ICE                   0x1
 +#define ICS                   0x2
 +#define CEN                   (1 << 2)
 +#define CLKD_MASK             0x0000FFC0
 +#define CLKD_SHIFT            6
 +#define DTO_MASK              0x000F0000
 +#define DTO_SHIFT             16
 +#define INT_EN_MASK           0x307F0033
 +#define INIT_STREAM           (1 << 1)
 +#define DP_SELECT             (1 << 21)
 +#define DDIR                  (1 << 4)
 +#define DMA_EN                        0x1
 +#define MSBS                  (1 << 5)
 +#define BCE                   (1 << 1)
 +#define FOUR_BIT              (1 << 1)
 +#define CC                    0x1
 +#define TC                    0x02
 +#define OD                    0x1
 +#define ERR                   (1 << 15)
 +#define CMD_TIMEOUT           (1 << 16)
 +#define DATA_TIMEOUT          (1 << 20)
 +#define CMD_CRC                       (1 << 17)
 +#define DATA_CRC              (1 << 21)
 +#define CARD_ERR              (1 << 28)
 +#define STAT_CLEAR            0xFFFFFFFF
 +#define INIT_STREAM_CMD               0x00000000
 +#define DUAL_VOLT_OCR_BIT     7
 +#define SRC                   (1 << 25)
 +#define SRD                   (1 << 26)
 +
 +/*
 + * FIXME: Most likely all the data using these _DEVID defines should come
 + * from the platform_data, or implemented in controller and slot specific
 + * functions.
 + */
 +#define OMAP_MMC1_DEVID               0
 +#define OMAP_MMC2_DEVID               1
 +
 +#define OMAP_MMC_DATADIR_NONE 0
 +#define OMAP_MMC_DATADIR_READ 1
 +#define OMAP_MMC_DATADIR_WRITE        2
 +#define MMC_TIMEOUT_MS                20
 +#define OMAP_MMC_MASTER_CLOCK 96000000
 +#define DRIVER_NAME           "mmci-omap-hs"
 +
 +/*
 + * One controller can have multiple slots, like on some omap boards using
 + * omap.c controller driver. Luckily this is not currently done on any known
 + * omap_hsmmc.c device.
 + */
 +#define mmc_slot(host)                (host->pdata->slots[host->slot_id])
 +
 +/*
 + * MMC Host controller read/write API's
 + */
 +#define OMAP_HSMMC_READ(base, reg)    \
 +      __raw_readl((base) + OMAP_HSMMC_##reg)
 +
 +#define OMAP_HSMMC_WRITE(base, reg, val) \
 +      __raw_writel((val), (base) + OMAP_HSMMC_##reg)
 +
 +enum {OFF = 0, ON};
 +#define IDLE_TIMEOUT (jiffies_to_msecs(10))
 +
 +struct mmc_omap_host {
 +      struct  device          *dev;
 +      struct  mmc_host        *mmc;
 +      struct  mmc_request     *mrq;
 +      struct  mmc_command     *cmd;
 +      struct  mmc_data        *data;
 +      struct  clk             *fclk;
 +      struct  clk             *iclk;
 +      struct  clk             *dbclk;
 +      struct  semaphore       sem;
 +      struct  work_struct     mmc_carddetect_work;
 +      void    __iomem         *base;
 +      resource_size_t         mapbase;
 +      unsigned int            id;
 +      unsigned int            dma_len;
 +      unsigned int            dma_dir;
 +      unsigned char           bus_mode;
 +      unsigned char           datadir;
 +      u32                     *buffer;
 +      u32                     bytesleft;
 +      int                     suspended;
 +      int                     irq;
 +      int                     carddetect;
 +      int                     use_dma, dma_ch;
 +      int                     initstr;
 +      int                     slot_id;
 +      int                     dbclk_enabled;
 +
 +      struct timer_list       idle_timer;
 +      spinlock_t              clk_lock;     /* for changing enabled state */
 +      unsigned int            fclk_enabled:1;
 +
 +      struct  omap_mmc_platform_data  *pdata;
 +};
 +
 +static int mmc_omap_fclk_state(struct mmc_omap_host *host, unsigned int state)
 +{
 +      unsigned long flags;
 +      int ret = 0;
 +
 +      spin_lock_irqsave(&host->clk_lock, flags);
 +      del_timer(&host->idle_timer);
 +      if (host->fclk_enabled != state) {
 +              if (state == ON) {
 +                      ret = clk_enable(host->fclk);
 +                      if (ret != 0)
 +                              goto err_out;
 +
 +                      dev_dbg(mmc_dev(host->mmc), "mmc_fclk: enabled\n");
 +              } else {
 +                      clk_disable(host->fclk);
 +                      dev_dbg(mmc_dev(host->mmc), "mmc_fclk: disabled\n");
 +              }
 +              host->fclk_enabled = state;
 +      }
 +
 +err_out:
 +      spin_unlock_irqrestore(&host->clk_lock, flags);
 +      return ret;
 +}
 +
 +static void mmc_omap_idle_timer(unsigned long data)
 +{
 +      struct mmc_omap_host *host = (struct mmc_omap_host *) data;
 +
 +      mmc_omap_fclk_state(host, OFF);
 +}
 +
 +static void mmc_omap_fclk_lazy_disable(struct mmc_omap_host *host)
 +{
 +      mod_timer(&host->idle_timer, jiffies + IDLE_TIMEOUT);
 +}
 +
 +/*
 + * Stop clock to the card
 + */
 +static void omap_mmc_stop_clock(struct mmc_omap_host *host)
 +{
 +      OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +              OMAP_HSMMC_READ(host->base, SYSCTL) & ~CEN);
 +      if ((OMAP_HSMMC_READ(host->base, SYSCTL) & CEN) != 0x0)
 +              dev_dbg(mmc_dev(host->mmc), "MMC Clock is not stoped\n");
 +}
 +
 +/*
 + * Send init stream sequence to card
 + * before sending IDLE command
 + */
 +static void send_init_stream(struct mmc_omap_host *host)
 +{
 +      int reg = 0;
 +      unsigned long timeout;
 +
 +      disable_irq(host->irq);
 +      OMAP_HSMMC_WRITE(host->base, CON,
 +              OMAP_HSMMC_READ(host->base, CON) | INIT_STREAM);
 +      OMAP_HSMMC_WRITE(host->base, CMD, INIT_STREAM_CMD);
 +
 +      timeout = jiffies + msecs_to_jiffies(MMC_TIMEOUT_MS);
 +      while ((reg != CC) && time_before(jiffies, timeout))
 +              reg = OMAP_HSMMC_READ(host->base, STAT) & CC;
 +
 +      OMAP_HSMMC_WRITE(host->base, CON,
 +              OMAP_HSMMC_READ(host->base, CON) & ~INIT_STREAM);
 +      enable_irq(host->irq);
 +}
 +
 +static inline
 +int mmc_omap_cover_is_closed(struct mmc_omap_host *host)
 +{
 +      int r = 1;
 +
 +      if (host->pdata->slots[host->slot_id].get_cover_state)
 +              r = host->pdata->slots[host->slot_id].get_cover_state(host->dev,
 +                      host->slot_id);
 +      return r;
 +}
 +
 +static ssize_t
 +mmc_omap_show_cover_switch(struct device *dev, struct device_attribute *attr,
 +                         char *buf)
 +{
 +      struct mmc_host *mmc = container_of(dev, struct mmc_host, class_dev);
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +
 +      return sprintf(buf, "%s\n", mmc_omap_cover_is_closed(host) ? "closed" :
 +                     "open");
 +}
 +
 +static DEVICE_ATTR(cover_switch, S_IRUGO, mmc_omap_show_cover_switch, NULL);
 +
 +static ssize_t
 +mmc_omap_show_slot_name(struct device *dev, struct device_attribute *attr,
 +                      char *buf)
 +{
 +      struct mmc_host *mmc = container_of(dev, struct mmc_host, class_dev);
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +      struct omap_mmc_slot_data slot = host->pdata->slots[host->slot_id];
 +
 +      return sprintf(buf, "slot:%s\n", slot.name);
 +}
 +
 +static DEVICE_ATTR(slot_name, S_IRUGO, mmc_omap_show_slot_name, NULL);
 +
 +/*
 + * Configure the response type and send the cmd.
 + */
 +static void
 +mmc_omap_start_command(struct mmc_omap_host *host, struct mmc_command *cmd,
 +      struct mmc_data *data)
 +{
 +      int cmdreg = 0, resptype = 0, cmdtype = 0;
 +
 +      dev_dbg(mmc_dev(host->mmc), "%s: CMD%d, argument 0x%08x\n",
 +              mmc_hostname(host->mmc), cmd->opcode, cmd->arg);
 +      host->cmd = cmd;
 +
 +      /*
 +       * Clear status bits and enable interrupts
 +       */
 +      OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
 +      OMAP_HSMMC_WRITE(host->base, ISE, INT_EN_MASK);
 +      OMAP_HSMMC_WRITE(host->base, IE, INT_EN_MASK);
 +
 +      if (cmd->flags & MMC_RSP_PRESENT) {
 +              if (cmd->flags & MMC_RSP_136)
 +                      resptype = 1;
 +              else
 +                      resptype = 2;
 +      }
 +
 +      /*
 +       * Unlike OMAP1 controller, the cmdtype does not seem to be based on
 +       * ac, bc, adtc, bcr. Only commands ending an open ended transfer need
 +       * a val of 0x3, rest 0x0.
 +       */
 +      if (cmd == host->mrq->stop)
 +              cmdtype = 0x3;
 +
 +      cmdreg = (cmd->opcode << 24) | (resptype << 16) | (cmdtype << 22);
 +
 +      if (data) {
 +              cmdreg |= DP_SELECT | MSBS | BCE;
 +              if (data->flags & MMC_DATA_READ)
 +                      cmdreg |= DDIR;
 +              else
 +                      cmdreg &= ~(DDIR);
 +      }
 +
 +      if (host->use_dma)
 +              cmdreg |= DMA_EN;
 +
 +      OMAP_HSMMC_WRITE(host->base, ARG, cmd->arg);
 +      OMAP_HSMMC_WRITE(host->base, CMD, cmdreg);
 +}
 +
 +/*
 + * Notify the transfer complete to MMC core
 + */
 +static void
 +mmc_omap_xfer_done(struct mmc_omap_host *host, struct mmc_data *data)
 +{
 +      host->data = NULL;
 +
 +      if (host->use_dma && host->dma_ch != -1)
 +              dma_unmap_sg(mmc_dev(host->mmc), data->sg, host->dma_len,
 +                      host->dma_dir);
 +
 +      host->datadir = OMAP_MMC_DATADIR_NONE;
 +
 +      if (!data->error)
 +              data->bytes_xfered += data->blocks * (data->blksz);
 +      else
 +              data->bytes_xfered = 0;
 +
 +      if (!data->stop) {
 +              host->mrq = NULL;
 +              mmc_omap_fclk_lazy_disable(host);
 +              mmc_request_done(host->mmc, data->mrq);
 +              return;
 +      }
 +      mmc_omap_start_command(host, data->stop, NULL);
 +}
 +
 +/*
 + * Notify the core about command completion
 + */
 +static void
 +mmc_omap_cmd_done(struct mmc_omap_host *host, struct mmc_command *cmd)
 +{
 +      host->cmd = NULL;
 +
 +      if (cmd->flags & MMC_RSP_PRESENT) {
 +              if (cmd->flags & MMC_RSP_136) {
 +                      /* response type 2 */
 +                      cmd->resp[3] = OMAP_HSMMC_READ(host->base, RSP10);
 +                      cmd->resp[2] = OMAP_HSMMC_READ(host->base, RSP32);
 +                      cmd->resp[1] = OMAP_HSMMC_READ(host->base, RSP54);
 +                      cmd->resp[0] = OMAP_HSMMC_READ(host->base, RSP76);
 +              } else {
 +                      /* response types 1, 1b, 3, 4, 5, 6 */
 +                      cmd->resp[0] = OMAP_HSMMC_READ(host->base, RSP10);
 +              }
 +      }
 +      if (host->data == NULL || cmd->error) {
 +              host->mrq = NULL;
 +              mmc_omap_fclk_lazy_disable(host);
 +              mmc_request_done(host->mmc, cmd->mrq);
 +      }
 +}
 +
 +/*
 + * DMA clean up for command errors
 + */
 +static void mmc_dma_cleanup(struct mmc_omap_host *host)
 +{
 +      host->data->error = -ETIMEDOUT;
 +
 +      if (host->use_dma && host->dma_ch != -1) {
 +              dma_unmap_sg(mmc_dev(host->mmc), host->data->sg, host->dma_len,
 +                      host->dma_dir);
 +              omap_free_dma(host->dma_ch);
 +              host->dma_ch = -1;
 +              up(&host->sem);
 +      }
 +      host->data = NULL;
 +      host->datadir = OMAP_MMC_DATADIR_NONE;
 +}
 +
 +/*
 + * Readable error output
 + */
 +#ifdef CONFIG_MMC_DEBUG
 +static void mmc_omap_report_irq(struct mmc_omap_host *host, u32 status)
 +{
 +      /* --- means reserved bit without definition at documentation */
 +      static const char *mmc_omap_status_bits[] = {
 +              "CC", "TC", "BGE", "---", "BWR", "BRR", "---", "---", "CIRQ",
 +              "OBI", "---", "---", "---", "---", "---", "ERRI", "CTO", "CCRC",
 +              "CEB", "CIE", "DTO", "DCRC", "DEB", "---", "ACE", "---",
 +              "---", "---", "---", "CERR", "CERR", "BADA", "---", "---", "---"
 +      };
 +      char res[256];
 +      char *buf = res;
 +      int len, i;
 +
 +      len = sprintf(buf, "MMC IRQ 0x%x :", status);
 +      buf += len;
 +
 +      for (i = 0; i < ARRAY_SIZE(mmc_omap_status_bits); i++)
 +              if (status & (1 << i)) {
 +                      len = sprintf(buf, " %s", mmc_omap_status_bits[i]);
 +                      buf += len;
 +              }
 +
 +      dev_dbg(mmc_dev(host->mmc), "%s\n", res);
 +}
 +#endif  /* CONFIG_MMC_DEBUG */
 +
 +
 +/*
 + * MMC controller IRQ handler
 + */
 +static irqreturn_t mmc_omap_irq(int irq, void *dev_id)
 +{
 +      struct mmc_omap_host *host = dev_id;
 +      struct mmc_data *data;
 +      int end_cmd = 0, end_trans = 0, status;
 +
 +      if (host->cmd == NULL && host->data == NULL) {
 +              OMAP_HSMMC_WRITE(host->base, STAT,
 +                      OMAP_HSMMC_READ(host->base, STAT));
 +              return IRQ_HANDLED;
 +      }
 +
 +      data = host->data;
 +      status = OMAP_HSMMC_READ(host->base, STAT);
 +      dev_dbg(mmc_dev(host->mmc), "IRQ Status is %x\n", status);
 +
 +      if (status & ERR) {
 +#ifdef CONFIG_MMC_DEBUG
 +              mmc_omap_report_irq(host, status);
 +#endif
 +              if ((status & CMD_TIMEOUT) ||
 +                      (status & CMD_CRC)) {
 +                      if (host->cmd) {
 +                              if (status & CMD_TIMEOUT) {
 +                                      OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +                                              OMAP_HSMMC_READ(host->base,
 +                                                              SYSCTL) | SRC);
 +                                      while (OMAP_HSMMC_READ(host->base,
 +                                                      SYSCTL) & SRC)
 +                                              ;
 +
 +                                      host->cmd->error = -ETIMEDOUT;
 +                              } else {
 +                                      host->cmd->error = -EILSEQ;
 +                              }
 +                              end_cmd = 1;
 +                      }
 +                      if (host->data)
 +                              mmc_dma_cleanup(host);
 +              }
 +              if ((status & DATA_TIMEOUT) ||
 +                      (status & DATA_CRC)) {
 +                      if (host->data) {
 +                              if (status & DATA_TIMEOUT)
 +                                      mmc_dma_cleanup(host);
 +                              else
 +                                      host->data->error = -EILSEQ;
 +                              OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +                                      OMAP_HSMMC_READ(host->base,
 +                                                      SYSCTL) | SRD);
 +                              while (OMAP_HSMMC_READ(host->base,
 +                                              SYSCTL) & SRD)
 +                                      ;
 +                              end_trans = 1;
 +                      }
 +              }
 +              if (status & CARD_ERR) {
 +                      dev_dbg(mmc_dev(host->mmc),
 +                              "Ignoring card err CMD%d\n", host->cmd->opcode);
 +                      if (host->cmd)
 +                              end_cmd = 1;
 +                      if (host->data)
 +                              end_trans = 1;
 +              }
 +      }
 +
 +      OMAP_HSMMC_WRITE(host->base, STAT, status);
 +
 +      if (end_cmd || (status & CC))
 +              mmc_omap_cmd_done(host, host->cmd);
 +      if (end_trans || (status & TC))
 +              mmc_omap_xfer_done(host, data);
 +
 +      return IRQ_HANDLED;
 +}
 +
 +/*
 + * Switch MMC operating voltage
 + */
 +static int omap_mmc_switch_opcond(struct mmc_omap_host *host, int vdd)
 +{
 +      u32 reg_val = 0;
 +      int ret;
 +
 +      /* Disable the clocks */
 +      mmc_omap_fclk_state(host, OFF);
 +      clk_disable(host->iclk);
 +      clk_disable(host->dbclk);
 +
 +      /* Turn the power off */
 +      ret = mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0);
 +      if (ret != 0)
 +              goto err;
 +
 +      /* Turn the power ON with given VDD 1.8 or 3.0v */
 +      ret = mmc_slot(host).set_power(host->dev, host->slot_id, 1, vdd);
 +      if (ret != 0)
 +              goto err;
 +
 +      mmc_omap_fclk_state(host, ON);
 +      clk_enable(host->iclk);
 +      clk_enable(host->dbclk);
 +
 +      OMAP_HSMMC_WRITE(host->base, HCTL,
 +              OMAP_HSMMC_READ(host->base, HCTL) & SDVSCLR);
 +      reg_val = OMAP_HSMMC_READ(host->base, HCTL);
 +      /*
 +       * If a MMC dual voltage card is detected, the set_ios fn calls
 +       * this fn with VDD bit set for 1.8V. Upon card removal from the
 +       * slot, omap_mmc_set_ios sets the VDD back to 3V on MMC_POWER_OFF.
 +       *
 +       * Only MMC1 supports 3.0V.  MMC2 will not function if SDVS30 is
 +       * set in HCTL.
 +       */
 +      if (host->id == OMAP_MMC1_DEVID) {
 +              if (((1 << vdd) == MMC_VDD_32_33) ||
 +                  ((1 << vdd) == MMC_VDD_33_34))
 +                      reg_val |= SDVS30;
 +              else if ((1 << vdd) == MMC_VDD_165_195)
 +                      reg_val |= SDVS18;
 +      } else
 +              reg_val |= SDVS18;
 +
 +      OMAP_HSMMC_WRITE(host->base, HCTL, reg_val);
 +
 +      OMAP_HSMMC_WRITE(host->base, HCTL,
 +              OMAP_HSMMC_READ(host->base, HCTL) | SDBP);
 +
 +      return 0;
 +err:
 +      dev_dbg(mmc_dev(host->mmc), "Unable to switch operating voltage\n");
 +      return ret;
 +}
 +
 +/*
 + * Work Item to notify the core about card insertion/removal
 + */
 +static void mmc_omap_detect(struct work_struct *work)
 +{
 +      struct mmc_omap_host *host = container_of(work, struct mmc_omap_host,
 +                                              mmc_carddetect_work);
 +
 +      sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch");
 +      mmc_omap_fclk_state(host, ON);
 +      if (host->carddetect) {
 +              mmc_detect_change(host->mmc, (HZ * 200) / 1000);
 +      } else {
 +              OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +                      OMAP_HSMMC_READ(host->base, SYSCTL) | SRD);
 +              while (OMAP_HSMMC_READ(host->base, SYSCTL) & SRD)
 +                      ;
 +
 +              mmc_detect_change(host->mmc, (HZ * 50) / 1000);
 +      }
 +      mmc_omap_fclk_lazy_disable(host);
 +}
 +
 +/*
 + * ISR for handling card insertion and removal
 + */
 +static irqreturn_t omap_mmc_cd_handler(int irq, void *dev_id)
 +{
 +      struct mmc_omap_host *host = (struct mmc_omap_host *)dev_id;
 +
 +      host->carddetect = mmc_slot(host).card_detect(irq);
 +      schedule_work(&host->mmc_carddetect_work);
 +
 +      return IRQ_HANDLED;
 +}
 +
 +/*
 + * DMA call back function
 + */
 +static void mmc_omap_dma_cb(int lch, u16 ch_status, void *data)
 +{
 +      struct mmc_omap_host *host = data;
 +
 +      if (ch_status & OMAP2_DMA_MISALIGNED_ERR_IRQ)
 +              dev_dbg(mmc_dev(host->mmc), "MISALIGNED_ADRS_ERR\n");
 +
 +      if (host->dma_ch < 0)
 +              return;
 +
 +      omap_free_dma(host->dma_ch);
 +      host->dma_ch = -1;
 +      /*
 +       * DMA Callback: run in interrupt context.
 +       * mutex_unlock will through a kernel warning if used.
 +       */
 +      up(&host->sem);
 +}
 +
 +/*
 + * Configure dma src and destination parameters
 + */
 +static int mmc_omap_config_dma_param(int sync_dir, struct mmc_omap_host *host,
 +                              struct mmc_data *data)
 +{
 +      if (sync_dir == 0) {
 +              omap_set_dma_dest_params(host->dma_ch, 0,
 +                      OMAP_DMA_AMODE_CONSTANT,
 +                      (host->mapbase + OMAP_HSMMC_DATA), 0, 0);
 +              omap_set_dma_src_params(host->dma_ch, 0,
 +                      OMAP_DMA_AMODE_POST_INC,
 +                      sg_dma_address(&data->sg[0]), 0, 0);
 +      } else {
 +              omap_set_dma_src_params(host->dma_ch, 0,
 +                      OMAP_DMA_AMODE_CONSTANT,
 +                      (host->mapbase + OMAP_HSMMC_DATA), 0, 0);
 +              omap_set_dma_dest_params(host->dma_ch, 0,
 +                      OMAP_DMA_AMODE_POST_INC,
 +                      sg_dma_address(&data->sg[0]), 0, 0);
 +      }
 +      return 0;
 +}
 +/*
 + * Routine to configure and start DMA for the MMC card
 + */
 +static int
 +mmc_omap_start_dma_transfer(struct mmc_omap_host *host, struct mmc_request *req)
 +{
 +      int sync_dev, sync_dir = 0;
 +      int dma_ch = 0, ret = 0, err = 1;
 +      struct mmc_data *data = req->data;
 +
 +      /*
 +       * If for some reason the DMA transfer is still active,
 +       * we wait for timeout period and free the dma
 +       */
 +      if (host->dma_ch != -1) {
 +              set_current_state(TASK_UNINTERRUPTIBLE);
 +              schedule_timeout(100);
 +              if (down_trylock(&host->sem)) {
 +                      omap_free_dma(host->dma_ch);
 +                      host->dma_ch = -1;
 +                      up(&host->sem);
 +                      return err;
 +              }
 +      } else {
 +              if (down_trylock(&host->sem))
 +                      return err;
 +      }
 +
 +      if (!(data->flags & MMC_DATA_WRITE)) {
 +              host->dma_dir = DMA_FROM_DEVICE;
 +              if (host->id == OMAP_MMC1_DEVID)
 +                      sync_dev = OMAP24XX_DMA_MMC1_RX;
 +              else
 +                      sync_dev = OMAP24XX_DMA_MMC2_RX;
 +      } else {
 +              host->dma_dir = DMA_TO_DEVICE;
 +              if (host->id == OMAP_MMC1_DEVID)
 +                      sync_dev = OMAP24XX_DMA_MMC1_TX;
 +              else
 +                      sync_dev = OMAP24XX_DMA_MMC2_TX;
 +      }
 +
 +      ret = omap_request_dma(sync_dev, "MMC/SD", mmc_omap_dma_cb,
 +                      host, &dma_ch);
 +      if (ret != 0) {
 +              dev_dbg(mmc_dev(host->mmc),
 +                      "%s: omap_request_dma() failed with %d\n",
 +                      mmc_hostname(host->mmc), ret);
 +              return ret;
 +      }
 +
 +      host->dma_len = dma_map_sg(mmc_dev(host->mmc), data->sg,
 +                      data->sg_len, host->dma_dir);
 +      host->dma_ch = dma_ch;
 +
 +      if (!(data->flags & MMC_DATA_WRITE))
 +              mmc_omap_config_dma_param(1, host, data);
 +      else
 +              mmc_omap_config_dma_param(0, host, data);
 +
 +      if ((data->blksz % 4) == 0)
 +              omap_set_dma_transfer_params(dma_ch, OMAP_DMA_DATA_TYPE_S32,
 +                      (data->blksz / 4), data->blocks, OMAP_DMA_SYNC_FRAME,
 +                      sync_dev, sync_dir);
 +      else
 +              /* REVISIT: The MMC buffer increments only when MSB is written.
 +               * Return error for blksz which is non multiple of four.
 +               */
 +              return -EINVAL;
 +
 +      omap_start_dma(dma_ch);
 +      return 0;
 +}
 +
 +static void set_data_timeout(struct mmc_omap_host *host,
 +                           struct mmc_request *req)
 +{
 +      unsigned int timeout, cycle_ns;
 +      uint32_t reg, clkd, dto = 0;
 +
 +      reg = OMAP_HSMMC_READ(host->base, SYSCTL);
 +      clkd = (reg & CLKD_MASK) >> CLKD_SHIFT;
 +      if (clkd == 0)
 +              clkd = 1;
 +
 +      cycle_ns = 1000000000 / (clk_get_rate(host->fclk) / clkd);
 +      timeout = req->data->timeout_ns / cycle_ns;
 +      timeout += req->data->timeout_clks;
 +      if (timeout) {
 +              while ((timeout & 0x80000000) == 0) {
 +                      dto += 1;
 +                      timeout <<= 1;
 +              }
 +              dto = 31 - dto;
 +              timeout <<= 1;
 +              if (timeout && dto)
 +                      dto += 1;
 +              if (dto >= 13)
 +                      dto -= 13;
 +              else
 +                      dto = 0;
 +              if (dto > 14)
 +                      dto = 14;
 +      }
 +
 +      reg &= ~DTO_MASK;
 +      reg |= dto << DTO_SHIFT;
 +      OMAP_HSMMC_WRITE(host->base, SYSCTL, reg);
 +}
 +
 +/*
 + * Configure block length for MMC/SD cards and initiate the transfer.
 + */
 +static int
 +mmc_omap_prepare_data(struct mmc_omap_host *host, struct mmc_request *req)
 +{
 +      int ret;
 +      host->data = req->data;
 +
 +      if (req->data == NULL) {
 +              host->datadir = OMAP_MMC_DATADIR_NONE;
 +              OMAP_HSMMC_WRITE(host->base, BLK, 0);
 +              return 0;
 +      }
 +
 +      OMAP_HSMMC_WRITE(host->base, BLK, (req->data->blksz)
 +                                      | (req->data->blocks << 16));
 +      set_data_timeout(host, req);
 +
 +      host->datadir = (req->data->flags & MMC_DATA_WRITE) ?
 +                      OMAP_MMC_DATADIR_WRITE : OMAP_MMC_DATADIR_READ;
 +
 +      if (host->use_dma) {
 +              ret = mmc_omap_start_dma_transfer(host, req);
 +              if (ret != 0) {
 +                      dev_dbg(mmc_dev(host->mmc), "MMC start dma failure\n");
 +                      return ret;
 +              }
 +      }
 +      return 0;
 +}
 +
 +/*
 + * Request function. for read/write operation
 + */
 +static void omap_mmc_request(struct mmc_host *mmc, struct mmc_request *req)
 +{
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +
 +      WARN_ON(host->mrq != NULL);
 +      host->mrq = req;
 +      mmc_omap_fclk_state(host, ON);
 +      mmc_omap_prepare_data(host, req);
 +      mmc_omap_start_command(host, req->cmd, req->data);
 +}
 +
 +/* Routine to configure clock values. Exposed API to core */
 +static void omap_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 +{
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +      u16 dsor = 0;
 +      unsigned long regval;
 +      unsigned long timeout;
 +
 +      mmc_omap_fclk_state(host, ON);
 +
 +      switch (ios->power_mode) {
 +      case MMC_POWER_OFF:
 +              mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0);
 +              /*
 +               * Reset bus voltage to 3V if it got set to 1.8V earlier.
 +               * REVISIT: If we are able to detect cards after unplugging
 +               * a 1.8V card, this code should not be needed.
 +               */
 +              if (!(OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET)) {
 +                      int vdd = fls(host->mmc->ocr_avail) - 1;
 +                      if (omap_mmc_switch_opcond(host, vdd) != 0)
 +                              host->mmc->ios.vdd = vdd;
 +              }
 +              break;
 +      case MMC_POWER_UP:
 +              mmc_slot(host).set_power(host->dev, host->slot_id, 1, ios->vdd);
 +              break;
 +      }
 +
 +      switch (mmc->ios.bus_width) {
 +      case MMC_BUS_WIDTH_4:
 +              OMAP_HSMMC_WRITE(host->base, HCTL,
 +                      OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
 +              break;
 +      case MMC_BUS_WIDTH_1:
 +              OMAP_HSMMC_WRITE(host->base, HCTL,
 +                      OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
 +              break;
 +      }
 +
 +      if (host->id == OMAP_MMC1_DEVID) {
 +              /* Only MMC1 can operate at 3V/1.8V */
 +              if ((OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET) &&
 +                      (ios->vdd == DUAL_VOLT_OCR_BIT)) {
 +                              /*
 +                               * The mmc_select_voltage fn of the core does
 +                               * not seem to set the power_mode to
 +                               * MMC_POWER_UP upon recalculating the voltage.
 +                               * vdd 1.8v.
 +                               */
 +                              if (omap_mmc_switch_opcond(host, ios->vdd) != 0)
 +                                      dev_dbg(mmc_dev(host->mmc),
 +                                              "Switch operation failed\n");
 +              }
 +      }
 +
 +      if (ios->clock) {
 +              dsor = OMAP_MMC_MASTER_CLOCK / ios->clock;
 +              if (dsor < 1)
 +                      dsor = 1;
 +
 +              if (OMAP_MMC_MASTER_CLOCK / dsor > ios->clock)
 +                      dsor++;
 +
 +              if (dsor > 250)
 +                      dsor = 250;
 +      }
 +      omap_mmc_stop_clock(host);
 +      regval = OMAP_HSMMC_READ(host->base, SYSCTL);
 +      regval = regval & ~(CLKD_MASK);
 +      regval = regval | (dsor << 6) | (DTO << 16);
 +      OMAP_HSMMC_WRITE(host->base, SYSCTL, regval);
 +      OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +              OMAP_HSMMC_READ(host->base, SYSCTL) | ICE);
 +
 +      /* Wait till the ICS bit is set */
 +      timeout = jiffies + msecs_to_jiffies(MMC_TIMEOUT_MS);
 +      while ((OMAP_HSMMC_READ(host->base, SYSCTL) & ICS) != 0x2
 +              && time_before(jiffies, timeout))
 +              msleep(1);
 +
 +      OMAP_HSMMC_WRITE(host->base, SYSCTL,
 +              OMAP_HSMMC_READ(host->base, SYSCTL) | CEN);
 +
 +      if (ios->power_mode == MMC_POWER_ON)
 +              send_init_stream(host);
 +
 +      if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
 +              OMAP_HSMMC_WRITE(host->base, CON,
 +                              OMAP_HSMMC_READ(host->base, CON) | OD);
 +
 +      mmc_omap_fclk_lazy_disable(host);
 +}
 +
 +static int omap_hsmmc_get_cd(struct mmc_host *mmc)
 +{
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +      struct omap_mmc_platform_data *pdata = host->pdata;
 +
 +      if (!pdata->slots[0].card_detect)
 +              return -ENOSYS;
 +      return pdata->slots[0].card_detect(pdata->slots[0].card_detect_irq);
 +}
 +
 +static int omap_hsmmc_get_ro(struct mmc_host *mmc)
 +{
 +      struct mmc_omap_host *host = mmc_priv(mmc);
 +      struct omap_mmc_platform_data *pdata = host->pdata;
 +
 +      if (!pdata->slots[0].get_ro)
 +              return -ENOSYS;
 +      return pdata->slots[0].get_ro(host->dev, 0);
 +}
 +
 +static struct mmc_host_ops mmc_omap_ops = {
 +      .request = omap_mmc_request,
 +      .set_ios = omap_mmc_set_ios,
 +      .get_cd = omap_hsmmc_get_cd,
 +      .get_ro = omap_hsmmc_get_ro,
 +      /* NYET -- enable_sdio_irq */
 +};
 +
 +static int __init omap_mmc_probe(struct platform_device *pdev)
 +{
 +      struct omap_mmc_platform_data *pdata = pdev->dev.platform_data;
 +      struct mmc_host *mmc;
 +      struct mmc_omap_host *host = NULL;
 +      struct resource *res;
 +      int ret = 0, irq;
 +      u32 hctl, capa;
 +
 +      if (pdata == NULL) {
 +              dev_err(&pdev->dev, "Platform Data is missing\n");
 +              return -ENXIO;
 +      }
 +
 +      if (pdata->nr_slots == 0) {
 +              dev_err(&pdev->dev, "No Slots\n");
 +              return -ENXIO;
 +      }
 +
 +      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 +      irq = platform_get_irq(pdev, 0);
 +      if (res == NULL || irq < 0)
 +              return -ENXIO;
 +
 +      res = request_mem_region(res->start, res->end - res->start + 1,
 +                                                      pdev->name);
 +      if (res == NULL)
 +              return -EBUSY;
 +
 +      mmc = mmc_alloc_host(sizeof(struct mmc_omap_host), &pdev->dev);
 +      if (!mmc) {
 +              ret = -ENOMEM;
 +              goto err;
 +      }
 +
 +      host            = mmc_priv(mmc);
 +      host->mmc       = mmc;
 +      host->pdata     = pdata;
 +      host->dev       = &pdev->dev;
 +      host->use_dma   = 1;
 +      host->dev->dma_mask = &pdata->dma_mask;
 +      host->dma_ch    = -1;
 +      host->irq       = irq;
 +      host->id        = pdev->id;
 +      host->slot_id   = 0;
 +      host->mapbase   = res->start;
 +      host->base      = ioremap(host->mapbase, SZ_4K);
 +
 +      platform_set_drvdata(pdev, host);
 +      INIT_WORK(&host->mmc_carddetect_work, mmc_omap_detect);
 +
 +      mmc->ops        = &mmc_omap_ops;
 +      mmc->f_min      = 400000;
 +      mmc->f_max      = 52000000;
 +
 +      sema_init(&host->sem, 1);
 +
 +      host->iclk = clk_get(&pdev->dev, "mmchs_ick");
 +      if (IS_ERR(host->iclk)) {
 +              ret = PTR_ERR(host->iclk);
 +              host->iclk = NULL;
 +              goto err1;
 +      }
 +      host->fclk = clk_get(&pdev->dev, "mmchs_fck");
 +      if (IS_ERR(host->fclk)) {
 +              ret = PTR_ERR(host->fclk);
 +              host->fclk = NULL;
 +              clk_put(host->iclk);
 +              goto err1;
 +      }
 +
 +      spin_lock_init(&host->clk_lock);
 +      setup_timer(&host->idle_timer, mmc_omap_idle_timer,
 +                  (unsigned long) host);
 +
 +      if (mmc_omap_fclk_state(host, ON) != 0) {
 +              clk_put(host->iclk);
 +              clk_put(host->fclk);
 +              goto err1;
 +      }
 +      if (clk_enable(host->iclk) != 0) {
 +              mmc_omap_fclk_state(host, OFF);
 +              clk_put(host->iclk);
 +              clk_put(host->fclk);
 +              goto err1;
 +      }
 +
 +      host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck");
 +      /*
 +       * MMC can still work without debounce clock.
 +       */
 +      if (IS_ERR(host->dbclk))
 +              dev_warn(mmc_dev(host->mmc), "Failed to get debounce clock\n");
 +      else
 +              if (clk_enable(host->dbclk) != 0)
 +                      dev_dbg(mmc_dev(host->mmc), "Enabling debounce"
 +                                                      " clk failed\n");
 +              else
 +                      host->dbclk_enabled = 1;
 +
 +#ifdef CONFIG_MMC_BLOCK_BOUNCE
 +      mmc->max_phys_segs = 1;
 +      mmc->max_hw_segs = 1;
 +#endif
 +      mmc->max_blk_size = 512;       /* Block Length at max can be 1024 */
 +      mmc->max_blk_count = 0xFFFF;    /* No. of Blocks is 16 bits */
 +      mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
 +      mmc->max_seg_size = mmc->max_req_size;
 +
 +      mmc->ocr_avail = mmc_slot(host).ocr_mask;
 +      mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;
 +
 +      if (pdata->slots[host->slot_id].wires >= 4)
 +              mmc->caps |= MMC_CAP_4_BIT_DATA;
 +
 +      /* Only MMC1 supports 3.0V */
 +      if (host->id == OMAP_MMC1_DEVID) {
 +              hctl = SDVS30;
 +              capa = VS30 | VS18;
 +      } else {
 +              hctl = SDVS18;
 +              capa = VS18;
 +      }
 +
 +      OMAP_HSMMC_WRITE(host->base, HCTL,
 +                      OMAP_HSMMC_READ(host->base, HCTL) | hctl);
 +
 +      OMAP_HSMMC_WRITE(host->base, CAPA,
 +                      OMAP_HSMMC_READ(host->base, CAPA) | capa);
 +
 +      /* Set the controller to AUTO IDLE mode */
 +      OMAP_HSMMC_WRITE(host->base, SYSCONFIG,
 +                      OMAP_HSMMC_READ(host->base, SYSCONFIG) | AUTOIDLE);
 +
 +      /* Set SD bus power bit */
 +      OMAP_HSMMC_WRITE(host->base, HCTL,
 +                      OMAP_HSMMC_READ(host->base, HCTL) | SDBP);
 +
 +      /* Request IRQ for MMC operations */
 +      ret = request_irq(host->irq, mmc_omap_irq, IRQF_DISABLED,
 +                      mmc_hostname(mmc), host);
 +      if (ret) {
 +              dev_dbg(mmc_dev(host->mmc), "Unable to grab HSMMC IRQ\n");
 +              goto err_irq;
 +      }
 +
 +      if (pdata->init != NULL) {
 +              if (pdata->init(&pdev->dev) != 0) {
 +                      dev_dbg(mmc_dev(host->mmc),
 +                              "Unable to configure MMC IRQs\n");
 +                      goto err_irq_cd_init;
 +              }
 +      }
 +
 +      /* Request IRQ for card detect */
 +      if ((mmc_slot(host).card_detect_irq) && (mmc_slot(host).card_detect)) {
 +              ret = request_irq(mmc_slot(host).card_detect_irq,
 +                                omap_mmc_cd_handler,
 +                                IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
 +                                        | IRQF_DISABLED,
 +                                mmc_hostname(mmc), host);
 +              if (ret) {
 +                      dev_dbg(mmc_dev(host->mmc),
 +                              "Unable to grab MMC CD IRQ\n");
 +                      goto err_irq_cd;
 +              }
 +      }
 +
 +      OMAP_HSMMC_WRITE(host->base, ISE, INT_EN_MASK);
 +      OMAP_HSMMC_WRITE(host->base, IE, INT_EN_MASK);
 +
 +      mmc_add_host(mmc);
 +
 +      if (host->pdata->slots[host->slot_id].name != NULL) {
 +              ret = device_create_file(&mmc->class_dev, &dev_attr_slot_name);
 +              if (ret < 0)
 +                      goto err_slot_name;
 +      }
 +      if (mmc_slot(host).card_detect_irq && mmc_slot(host).card_detect &&
 +                      host->pdata->slots[host->slot_id].get_cover_state) {
 +              ret = device_create_file(&mmc->class_dev,
 +                                      &dev_attr_cover_switch);
 +              if (ret < 0)
 +                      goto err_cover_switch;
 +      }
 +      mmc_omap_fclk_lazy_disable(host);
 +
 +      return 0;
 +
 +err_cover_switch:
 +      device_remove_file(&mmc->class_dev, &dev_attr_cover_switch);
 +err_slot_name:
 +      mmc_remove_host(mmc);
 +err_irq_cd:
 +      free_irq(mmc_slot(host).card_detect_irq, host);
 +err_irq_cd_init:
 +      free_irq(host->irq, host);
 +err_irq:
 +      mmc_omap_fclk_state(host, OFF);
 +      clk_disable(host->iclk);
 +      clk_put(host->fclk);
 +      clk_put(host->iclk);
 +      if (host->dbclk_enabled) {
 +              clk_disable(host->dbclk);
 +              clk_put(host->dbclk);
 +      }
 +
 +err1:
 +      iounmap(host->base);
 +err:
 +      dev_dbg(mmc_dev(host->mmc), "Probe Failed\n");
 +      release_mem_region(res->start, res->end - res->start + 1);
 +      if (host)
 +              mmc_free_host(mmc);
 +      return ret;
 +}
 +
 +static int omap_mmc_remove(struct platform_device *pdev)
 +{
 +      struct mmc_omap_host *host = platform_get_drvdata(pdev);
 +      struct resource *res;
 +
 +      if (host) {
 +              mmc_remove_host(host->mmc);
 +              if (host->pdata->cleanup)
 +                      host->pdata->cleanup(&pdev->dev);
 +              free_irq(host->irq, host);
 +              if (mmc_slot(host).card_detect_irq)
 +                      free_irq(mmc_slot(host).card_detect_irq, host);
 +              flush_scheduled_work();
 +
 +              mmc_omap_fclk_state(host, OFF);
 +              clk_disable(host->iclk);
 +              clk_put(host->fclk);
 +              clk_put(host->iclk);
 +              if (host->dbclk_enabled) {
 +                      clk_disable(host->dbclk);
 +                      clk_put(host->dbclk);
 +              }
 +
 +              mmc_free_host(host->mmc);
 +              iounmap(host->base);
 +      }
 +
 +      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 +      if (res)
 +              release_mem_region(res->start, res->end - res->start + 1);
 +      platform_set_drvdata(pdev, NULL);
 +
 +      return 0;
 +}
 +
 +#ifdef CONFIG_PM
 +static int omap_mmc_suspend(struct platform_device *pdev, pm_message_t state)
 +{
 +      int ret = 0;
 +      struct mmc_omap_host *host = platform_get_drvdata(pdev);
 +
 +      if (host && host->suspended)
 +              return 0;
 +
 +      if (host) {
 +              ret = mmc_suspend_host(host->mmc, state);
 +              if (ret == 0) {
 +                      host->suspended = 1;
 +
 +                      mmc_omap_fclk_state(host, ON);
 +                      OMAP_HSMMC_WRITE(host->base, ISE, 0);
 +                      OMAP_HSMMC_WRITE(host->base, IE, 0);
 +
 +                      if (host->pdata->suspend) {
 +                              ret = host->pdata->suspend(&pdev->dev,
 +                                                              host->slot_id);
 +                              if (ret)
 +                                      dev_dbg(mmc_dev(host->mmc),
 +                                              "Unable to handle MMC board"
 +                                              " level suspend\n");
 +                      }
 +
 +                      OMAP_HSMMC_WRITE(host->base, HCTL,
 +                                       OMAP_HSMMC_READ(host->base, HCTL) & ~SDBP);
 +                      mmc_omap_fclk_state(host, OFF);
 +                      clk_disable(host->iclk);
 +                      clk_disable(host->dbclk);
 +              }
 +
 +      }
 +      return ret;
 +}
 +
 +/* Routine to resume the MMC device */
 +static int omap_mmc_resume(struct platform_device *pdev)
 +{
 +      int ret = 0;
 +      struct mmc_omap_host *host = platform_get_drvdata(pdev);
 +
 +      if (host && !host->suspended)
 +              return 0;
 +
 +      if (host) {
 +              int i;
 +              if (mmc_omap_fclk_state(host, ON) != 0)
 +                      goto clk_en_err;
 +
 +              ret = clk_enable(host->iclk);
 +              if (ret) {
 +                      mmc_omap_fclk_state(host, OFF);
 +                      clk_put(host->fclk);
 +                      goto clk_en_err;
 +              }
 +
 +              if (clk_enable(host->dbclk) != 0)
 +                      dev_dbg(mmc_dev(host->mmc),
 +                                      "Enabling debounce clk failed\n");
 +
 +              OMAP_HSMMC_WRITE(host->base, HCTL,
 +                               OMAP_HSMMC_READ(host->base, HCTL) | SDBP);
 +
 +              for (i = 0; i < 100; i++)
 +                      if (OMAP_HSMMC_READ(host->base, HCTL) & SDBP)
 +                              break;
 +
 +              if (host->pdata->resume) {
 +                      ret = host->pdata->resume(&pdev->dev, host->slot_id);
 +                      if (ret)
 +                              dev_dbg(mmc_dev(host->mmc),
 +                                      "Unmask interrupt failed\n");
 +              }
 +
 +              /* Notify the core to resume the host */
 +              ret = mmc_resume_host(host->mmc);
 +              if (ret == 0)
 +                      host->suspended = 0;
 +
 +              mmc_omap_fclk_lazy_disable(host);
 +      }
 +
 +      return ret;
 +
 +clk_en_err:
 +      dev_dbg(mmc_dev(host->mmc),
 +              "Failed to enable MMC clocks during resume\n");
 +      return ret;
 +}
 +
 +#else
 +#define omap_mmc_suspend      NULL
 +#define omap_mmc_resume               NULL
 +#endif
 +
 +static struct platform_driver omap_mmc_driver = {
 +      .probe          = omap_mmc_probe,
 +      .remove         = omap_mmc_remove,
 +      .suspend        = omap_mmc_suspend,
 +      .resume         = omap_mmc_resume,
 +      .driver         = {
 +              .name = DRIVER_NAME,
 +              .owner = THIS_MODULE,
 +      },
 +};
 +
 +static int __init omap_mmc_init(void)
 +{
 +      /* Register the MMC driver */
 +      return platform_driver_register(&omap_mmc_driver);
 +}
 +
 +static void __exit omap_mmc_cleanup(void)
 +{
 +      /* Unregister MMC driver */
 +      platform_driver_unregister(&omap_mmc_driver);
 +}
 +
 +module_init(omap_mmc_init);
 +module_exit(omap_mmc_cleanup);
 +
 +MODULE_DESCRIPTION("OMAP High Speed Multimedia Card driver");
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS("platform:" DRIVER_NAME);
 +MODULE_AUTHOR("Texas Instruments Inc");
diff --combined drivers/mtd/maps/Kconfig
index 74c17d5d04b5e06e77da5bc09aaadea5b10df8c5,0225cbbf22de3ceb21b14a6bb8cf05cb3987817a..6b1ffea3da617cce12bb3831778a54aeecf25eff
@@@ -10,8 -10,8 +10,8 @@@ config MTD_COMPLEX_MAPPING
          paged mappings of flash chips.
  
  config MTD_PHYSMAP
-       tristate "CFI Flash device in physical memory map"
-       depends on MTD_CFI || MTD_JEDECPROBE || MTD_ROM
+       tristate "Flash device in physical memory map"
+       depends on MTD_CFI || MTD_JEDECPROBE || MTD_ROM || MTD_LPDDR
        help
          This provides a 'mapping' driver which allows the NOR Flash and
          ROM driver code to communicate with chips which are mapped
          To compile this driver as a module, choose M here: the
          module will be called physmap.
  
+ config MTD_PHYSMAP_COMPAT
+       bool "Physmap compat support"
+       depends on MTD_PHYSMAP
+       default n
+       help
+         Setup a simple mapping via the Kconfig options.  Normally the
+         physmap configuration options are done via your board's
+         resource file.
+         If unsure, say N here.
  config MTD_PHYSMAP_START
        hex "Physical start address of flash mapping"
-       depends on MTD_PHYSMAP
+       depends on MTD_PHYSMAP_COMPAT
        default "0x8000000"
        help
          This is the physical memory location at which the flash chips
@@@ -37,7 -48,7 +48,7 @@@
  
  config MTD_PHYSMAP_LEN
        hex "Physical length of flash mapping"
-       depends on MTD_PHYSMAP
+       depends on MTD_PHYSMAP_COMPAT
        default "0"
        help
          This is the total length of the mapping of the flash chips on
@@@ -51,7 -62,7 +62,7 @@@
  
  config MTD_PHYSMAP_BANKWIDTH
        int "Bank width in octets"
-       depends on MTD_PHYSMAP
+       depends on MTD_PHYSMAP_COMPAT
        default "2"
        help
          This is the total width of the data bus of the flash devices
@@@ -434,13 -445,6 +445,13 @@@ config MTD_CEIV
          PhotoMax Digital Picture Frame.
          If you have such a device, say 'Y'.
  
 +config MTD_NOR_TOTO
 +      tristate "NOR Flash device on TOTO board"
 +      depends on ARCH_OMAP && OMAP_TOTO
 +      help
 +        This enables access to the NOR flash on the Texas Instruments
 +        TOTO board.
 +
  config MTD_H720X
        tristate "Hynix evaluation board mappings"
        depends on MTD_CFI && ( ARCH_H7201 || ARCH_H7202 )
index 73bc2771aa905970bdff1d5254d55e7404cca0d8,7e50e9b1b781fa964893d2a44b017c6a84facfde..1273d5738447428c4b92b42854cff8985a0461cd
@@@ -101,7 -101,7 +101,7 @@@ static int __init omapflash_probe(struc
                err = -ENOMEM;
                goto out_release_mem_region;
        }
-       info->map.name          = pdev->dev.bus_id;
+       info->map.name          = dev_name(&pdev->dev);
        info->map.phys          = res->start;
        info->map.size          = size;
        info->map.bankwidth     = pdata->width;
@@@ -142,12 -142,11 +142,12 @@@ out_free_info
  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
diff --combined drivers/mtd/nand/Kconfig
index 59b29b222defd9149b844bd62e33eb99e8dde1cc,8b12e6e109d3721d12d8aff35d8a225ddd6873be..08e168f84bd17c40ead70576fc2cbfd9e6d4c4be
@@@ -74,31 -74,6 +74,31 @@@ config MTD_NAND_AMS_DELT
        help
          Support for NAND flash on Amstrad E3 (Delta).
  
 +config MTD_NAND_OMAP2
 +      tristate "NAND Flash device on OMAP2 and OMAP3"
 +      depends on ARM && MTD_NAND && (ARCH_OMAP2 || ARCH_OMAP3)
 +      help
 +          Support for NAND flash on Texas Instruments OMAP2 and OMAP3 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
 +      help
 +        Support for NAND flash on Texas Instruments Toto platform.
 +
  config MTD_NAND_TS7250
        tristate "NAND Flash device on TS-7250 board"
        depends on MACH_TS72XX
@@@ -188,6 -163,13 +188,13 @@@ config MTD_NAND_S3C2410_HWEC
          incorrect ECC generation, and if using these, the default of
          software ECC is preferable.
  
+ config MTD_NAND_NDFC
+       tristate "NDFC NanD Flash Controller"
+       depends on 4xx
+       select MTD_NAND_ECC_SMC
+       help
+        NDFC Nand Flash Controllers are integrated in IBM/AMCC's 4xx SoCs
  config MTD_NAND_S3C2410_CLKSTOP
        bool "S3C2410 NAND IDLE clock stop"
        depends on MTD_NAND_S3C2410
@@@ -433,7 -415,7 +440,7 @@@ config MTD_NAND_FSL_UP
  
  config MTD_NAND_MXC
        tristate "MXC NAND support"
-       depends on ARCH_MX2
+       depends on ARCH_MX2 || ARCH_MX3
        help
          This enables the driver for the NAND flash controller on the
          MXC processors.
diff --combined drivers/net/smc911x.h
index d1b3b9b4afb3ba45e6e8a4cf2ff0b91c0943a1af,870b4c33f108d87b384b3fe46c506d4f1cb1107e..d2d1034b129fa2ae9292976685dd10fb67c73fbc
    #define SMC_USE_16BIT               0
    #define SMC_USE_32BIT               1
    #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
 +#elif defined(CONFIG_ARCH_OMAP34XX)
 +  #define SMC_USE_16BIT               0
 +  #define SMC_USE_32BIT               1
 +  #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
 +  #define SMC_MEM_RESERVED    1
 +#elif defined(CONFIG_ARCH_OMAP24XX)
 +  #define SMC_USE_16BIT               0
 +  #define SMC_USE_32BIT               1
 +  #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
 +  #define SMC_MEM_RESERVED    1
  #else
  /*
   * Default configuration
@@@ -210,6 -200,9 +210,9 @@@ static inline void SMC_outsl(struct smc
  
  
  #ifdef SMC_USE_PXA_DMA
+ #include <mach/dma.h>
  /*
   * Define the request and free functions
   * These are unfortunately architecture specific as no generic allocation
diff --combined drivers/net/smc91x.c
index 20e1277b884242245ab347055f5aa1ae1a3ec080,b215a8d85e62d5e2fc3eb54064918ae8dd90fd97..0a47bad4afeb4e88d8bf5038d01b305375218269
@@@ -90,33 -90,6 +90,6 @@@ static const char version[] 
  
  #include "smc91x.h"
  
- #ifdef CONFIG_ISA
- /*
-  * the LAN91C111 can be at any of the following port addresses.  To change,
-  * for a slightly different card, you can add it to the array.  Keep in
-  * mind that the array must end in zero.
-  */
- static unsigned int smc_portlist[] __initdata = {
-       0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
-       0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, 0
- };
- #ifndef SMC_IOADDR
- # define SMC_IOADDR           -1
- #endif
- static unsigned long io = SMC_IOADDR;
- module_param(io, ulong, 0400);
- MODULE_PARM_DESC(io, "I/O base address");
- #ifndef SMC_IRQ
- # define SMC_IRQ              -1
- #endif
- static int irq = SMC_IRQ;
- module_param(irq, int, 0400);
- MODULE_PARM_DESC(irq, "IRQ number");
- #endif  /* CONFIG_ISA */
  #ifndef SMC_NOWAIT
  # define SMC_NOWAIT           0
  #endif
@@@ -448,11 -421,6 +421,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)) {
  
                PRINT_PKT(data, packet_len - 4);
  
-               dev->last_rx = jiffies;
                skb->protocol = eth_type_trans(skb, dev);
                netif_rx(skb);
                dev->stats.rx_packets++;
@@@ -1783,7 -1750,6 +1755,6 @@@ static int __devinit smc_probe(struct n
        int retval;
        unsigned int val, revision_register;
        const char *version_string;
-       DECLARE_MAC_BUF(mac);
  
        DBG(2, "%s: %s\n", CARDNAME, __func__);
  
                               "set using ifconfig\n", dev->name);
                } else {
                        /* Print the Ethernet address */
-                       printk("%s: Ethernet addr: %s\n",
-                              dev->name, print_mac(mac, dev->dev_addr));
+                       printk("%s: Ethernet addr: %pM\n",
+                              dev->name, dev->dev_addr);
                }
  
                if (lp->phy_type == 0) {
@@@ -2321,15 -2287,6 +2292,6 @@@ static struct platform_driver smc_drive
  
  static int __init smc_init(void)
  {
- #ifdef MODULE
- #ifdef CONFIG_ISA
-       if (io == -1)
-               printk(KERN_WARNING
-                       "%s: You shouldn't use auto-probing with insmod!\n",
-                       CARDNAME);
- #endif
- #endif
        return platform_driver_register(&smc_driver);
  }
  
diff --combined drivers/power/Kconfig
index 3ad22a5bbbf5494d0f9d2ec33cfe1c0c6b6b5db3,668472405a57a9f951ef8e510082ff94db039504..d229c249d005d7425439cc4c1a600092ff4c8007
@@@ -29,6 -29,13 +29,13 @@@ config APM_POWE
          Say Y here to enable support APM status emulation using
          battery class devices.
  
+ config WM8350_POWER
+         tristate "WM8350 PMU support"
+         depends on MFD_WM8350
+         help
+           Say Y here to enable support for the power management unit
+         provided by the Wolfson Microelectronics WM8350 PMIC.
  config BATTERY_DS2760
        tristate "DS2760 battery driver (HP iPAQ & others)"
        select W1
@@@ -56,13 -63,6 +63,13 @@@ config BATTERY_TOS
          Say Y to enable support for the battery on the Sharp Zaurus
          SL-6000 (tosa) models.
  
 +config TWL4030_BCI_BATTERY
 +      tristate "OMAP TWL4030 BCI Battery driver"
 +      depends on TWL4030_CORE && TWL4030_MADC
 +      help
 +        Support for OMAP TWL4030 BCI Battery driver.
 +        This driver can give support for TWL4030 Battery Charge Interface.
 +
  config BATTERY_WM97XX
        bool "WM97xx generic battery driver"
        depends on TOUCHSCREEN_WM97XX=y
@@@ -75,4 -75,11 +82,11 @@@ config BATTERY_BQ27x0
        help
          Say Y here to enable support for batteries with BQ27200(I2C) chip.
  
+ config BATTERY_DA9030
+       tristate "DA9030 battery driver"
+       depends on PMIC_DA903X
+       help
+         Say Y here to enable support for batteries charger integrated into
+         DA9030 PMIC.
  endif # POWER_SUPPLY
diff --combined drivers/power/Makefile
index f219a2b99ce7a7e508f6843330852e15e5a181ea,eebb15505a40a80c9b4458fc3018162b0e837fd7..3b879ae54db1c8216abb0c516b10cbbecf86e8c7
@@@ -16,12 -16,12 +16,14 @@@ obj-$(CONFIG_POWER_SUPPLY) += power_sup
  
  obj-$(CONFIG_PDA_POWER)               += pda_power.o
  obj-$(CONFIG_APM_POWER)               += apm_power.o
+ obj-$(CONFIG_WM8350_POWER)    += wm8350_power.o
  
  obj-$(CONFIG_BATTERY_DS2760)  += ds2760_battery.o
  obj-$(CONFIG_BATTERY_PMU)     += pmu_battery.o
  obj-$(CONFIG_BATTERY_OLPC)    += olpc_battery.o
 +obj-$(CONFIG_BATTERY_BQ27x00)   += bq27x00_battery.o
 +obj-$(CONFIG_TWL4030_BCI_BATTERY)     += twl4030_bci_battery.o
  obj-$(CONFIG_BATTERY_TOSA)    += tosa_battery.o
  obj-$(CONFIG_BATTERY_WM97XX)  += wm97xx_battery.o
  obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
+ obj-$(CONFIG_BATTERY_DA9030)  += da9030_battery.o
index d933d097c38b3e1fe00eef7e4e74842ea0ecc6b4,8ce5f74ee45b3b09fe357fb353b5fe607f8bec4e..c77ee1f9845c986cc3ca388e9ca8321a83fcd14c
@@@ -19,6 -19,7 +19,7 @@@
   */
  
  #include <linux/kernel.h>
+ #include <linux/errno.h>
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/types.h>
@@@ -415,8 -416,8 +416,8 @@@ static int __devinit twl4030_rtc_probe(
        int irq = platform_get_irq(pdev, 0);
        u8 rd_reg;
  
-       if (irq < 0)
-               return irq;
+       if (irq <= 0)
+               return -EINVAL;
  
        rtc = rtc_device_register(pdev->name,
                                  &pdev->dev, &twl4030_rtc_ops, THIS_MODULE);
@@@ -505,9 -506,8 +506,9 @@@ static int __devexit twl4030_rtc_remove
  
  static void twl4030_rtc_shutdown(struct platform_device *pdev)
  {
 -      mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M |
 -                       BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
 +      /* mask timer interrupts, but leave alarm interrupts on to enable
 +         power-on when alarm is triggered */
 +      mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
  }
  
  #ifdef CONFIG_PM
diff --combined drivers/serial/8250.c
index 5f383d8d248ba8364e434f5a2393b12b89a1d4d9,1889a63ebc2293cdcaa2b1f403f41ea142caf6af..acea5623b2281159ee59003d82ac8e286489622c
@@@ -279,6 -279,13 +279,13 @@@ static const struct serial8250_config u
                .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
                .flags          = UART_CAP_FIFO,
        },
+       [PORT_OCTEON] = {
+               .name           = "OCTEON",
+               .fifo_size      = 64,
+               .tx_loadsz      = 64,
+               .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
+               .flags          = UART_CAP_FIFO,
+       },
  };
  
  #if defined (CONFIG_SERIAL_8250_AU1X00)
@@@ -303,16 -310,16 +310,16 @@@ static const u8 au_io_out_map[] = 
  };
  
  /* sane hardware needs no mapping */
- static inline int map_8250_in_reg(struct uart_8250_port *up, int offset)
+ static inline int map_8250_in_reg(struct uart_port *p, int offset)
  {
-       if (up->port.iotype != UPIO_AU)
+       if (p->iotype != UPIO_AU)
                return offset;
        return au_io_in_map[offset];
  }
  
- static inline int map_8250_out_reg(struct uart_8250_port *up, int offset)
+ static inline int map_8250_out_reg(struct uart_port *p, int offset)
  {
-       if (up->port.iotype != UPIO_AU)
+       if (p->iotype != UPIO_AU)
                return offset;
        return au_io_out_map[offset];
  }
@@@ -341,16 -348,16 +348,16 @@@ static const u
                [UART_SCR]      = 0x2c
        };
  
- static inline int map_8250_in_reg(struct uart_8250_port *up, int offset)
+ static inline int map_8250_in_reg(struct uart_port *p, int offset)
  {
-       if (up->port.iotype != UPIO_RM9000)
+       if (p->iotype != UPIO_RM9000)
                return offset;
        return regmap_in[offset];
  }
  
- static inline int map_8250_out_reg(struct uart_8250_port *up, int offset)
+ static inline int map_8250_out_reg(struct uart_port *p, int offset)
  {
-       if (up->port.iotype != UPIO_RM9000)
+       if (p->iotype != UPIO_RM9000)
                return offset;
        return regmap_out[offset];
  }
  
  #endif
  
- static unsigned int serial_in(struct uart_8250_port *up, int offset)
+ static unsigned int hub6_serial_in(struct uart_port *p, int offset)
  {
-       unsigned int tmp;
-       offset = map_8250_in_reg(up, offset) << up->port.regshift;
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       outb(p->hub6 - 1 + offset, p->iobase);
+       return inb(p->iobase + 1);
+ }
  
-       switch (up->port.iotype) {
-       case UPIO_HUB6:
-               outb(up->port.hub6 - 1 + offset, up->port.iobase);
-               return inb(up->port.iobase + 1);
+ static void hub6_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       outb(p->hub6 - 1 + offset, p->iobase);
+       outb(value, p->iobase + 1);
+ }
  
-       case UPIO_MEM:
-       case UPIO_DWAPB:
-               return readb(up->port.membase + offset);
+ static unsigned int mem_serial_in(struct uart_port *p, int offset)
+ {
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       return readb(p->membase + offset);
+ }
  
-       case UPIO_RM9000:
-       case UPIO_MEM32:
-               return readl(up->port.membase + offset);
+ static void mem_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       writeb(value, p->membase + offset);
+ }
+ static void mem32_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       writel(value, p->membase + offset);
+ }
+ static unsigned int mem32_serial_in(struct uart_port *p, int offset)
+ {
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       return readl(p->membase + offset);
+ }
  
  #ifdef CONFIG_SERIAL_8250_AU1X00
-       case UPIO_AU:
-               return __raw_readl(up->port.membase + offset);
+ static unsigned int au_serial_in(struct uart_port *p, int offset)
+ {
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       return __raw_readl(p->membase + offset);
+ }
+ static void au_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       __raw_writel(value, p->membase + offset);
+ }
  #endif
  
-       case UPIO_TSI:
-               if (offset == UART_IIR) {
-                       tmp = readl(up->port.membase + (UART_IIR & ~3));
-                       return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */
-               } else
-                       return readb(up->port.membase + offset);
+ static unsigned int tsi_serial_in(struct uart_port *p, int offset)
+ {
+       unsigned int tmp;
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       if (offset == UART_IIR) {
+               tmp = readl(p->membase + (UART_IIR & ~3));
+               return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */
+       } else
+               return readb(p->membase + offset);
+ }
  
-       default:
-               return inb(up->port.iobase + offset);
-       }
+ static void tsi_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       if (!((offset == UART_IER) && (value & UART_IER_UUE)))
+               writeb(value, p->membase + offset);
  }
  
- static void
- serial_out(struct uart_8250_port *up, int offset, int value)
+ static void dwapb_serial_out(struct uart_port *p, int offset, int value)
  {
-       /* Save the offset before it's remapped */
        int save_offset = offset;
-       offset = map_8250_out_reg(up, offset) << up->port.regshift;
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       /* Save the LCR value so it can be re-written when a
+        * Busy Detect interrupt occurs. */
+       if (save_offset == UART_LCR) {
+               struct uart_8250_port *up = (struct uart_8250_port *)p;
+               up->lcr = value;
+       }
+       writeb(value, p->membase + offset);
+       /* Read the IER to ensure any interrupt is cleared before
+        * returning from ISR. */
+       if (save_offset == UART_TX || save_offset == UART_IER)
+               value = p->serial_in(p, UART_IER);
+ }
  
-       switch (up->port.iotype) {
+ static unsigned int io_serial_in(struct uart_port *p, int offset)
+ {
+       offset = map_8250_in_reg(p, offset) << p->regshift;
+       return inb(p->iobase + offset);
+ }
+ static void io_serial_out(struct uart_port *p, int offset, int value)
+ {
+       offset = map_8250_out_reg(p, offset) << p->regshift;
+       outb(value, p->iobase + offset);
+ }
+ static void set_io_from_upio(struct uart_port *p)
+ {
+       switch (p->iotype) {
        case UPIO_HUB6:
-               outb(up->port.hub6 - 1 + offset, up->port.iobase);
-               outb(value, up->port.iobase + 1);
+               p->serial_in = hub6_serial_in;
+               p->serial_out = hub6_serial_out;
                break;
  
        case UPIO_MEM:
-               writeb(value, up->port.membase + offset);
+               p->serial_in = mem_serial_in;
+               p->serial_out = mem_serial_out;
                break;
  
        case UPIO_RM9000:
        case UPIO_MEM32:
-               writel(value, up->port.membase + offset);
+               p->serial_in = mem32_serial_in;
+               p->serial_out = mem32_serial_out;
                break;
  
  #ifdef CONFIG_SERIAL_8250_AU1X00
        case UPIO_AU:
-               __raw_writel(value, up->port.membase + offset);
+               p->serial_in = au_serial_in;
+               p->serial_out = au_serial_out;
                break;
  #endif
        case UPIO_TSI:
-               if (!((offset == UART_IER) && (value & UART_IER_UUE)))
-                       writeb(value, up->port.membase + offset);
+               p->serial_in = tsi_serial_in;
+               p->serial_out = tsi_serial_out;
                break;
  
        case UPIO_DWAPB:
-               /* Save the LCR value so it can be re-written when a
-                * Busy Detect interrupt occurs. */
-               if (save_offset == UART_LCR)
-                       up->lcr = value;
-               writeb(value, up->port.membase + offset);
-               /* Read the IER to ensure any interrupt is cleared before
-                * returning from ISR. */
-               if (save_offset == UART_TX || save_offset == UART_IER)
-                       value = serial_in(up, UART_IER);
+               p->serial_in = mem_serial_in;
+               p->serial_out = dwapb_serial_out;
                break;
  
        default:
-               outb(value, up->port.iobase + offset);
+               p->serial_in = io_serial_in;
+               p->serial_out = io_serial_out;
+               break;
        }
  }
  
  static void
  serial_out_sync(struct uart_8250_port *up, int offset, int value)
  {
-       switch (up->port.iotype) {
+       struct uart_port *p = &up->port;
+       switch (p->iotype) {
        case UPIO_MEM:
        case UPIO_MEM32:
  #ifdef CONFIG_SERIAL_8250_AU1X00
        case UPIO_AU:
  #endif
        case UPIO_DWAPB:
-               serial_out(up, offset, value);
-               serial_in(up, UART_LCR);        /* safe, no side-effects */
+               p->serial_out(p, offset, value);
+               p->serial_in(p, UART_LCR);      /* safe, no side-effects */
                break;
        default:
-               serial_out(up, offset, value);
+               p->serial_out(p, offset, value);
        }
  }
  
+ #define serial_in(up, offset)         \
+       (up->port.serial_in(&(up)->port, (offset)))
+ #define serial_out(up, offset, value) \
+       (up->port.serial_out(&(up)->port, (offset), (value)))
  /*
   * We used to support using pause I/O for certain machines.  We
   * haven't supported this for a while, but just in case it's badly
@@@ -1527,11 -1596,7 +1596,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
  }
  
  /*
@@@ -2307,19 -2372,6 +2376,19 @@@ 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);
@@@ -2593,6 -2645,7 +2662,7 @@@ static void __init serial8250_isa_init_
                up->port.membase  = old_serial_port[i].iomem_base;
                up->port.iotype   = old_serial_port[i].io_type;
                up->port.regshift = old_serial_port[i].iomem_reg_shift;
+               set_io_from_upio(&up->port);
                if (share_irqs)
                        up->port.flags |= UPF_SHARE_IRQ;
        }
@@@ -2769,12 -2822,30 +2839,30 @@@ static struct uart_driver serial8250_re
   */
  int __init early_serial_setup(struct uart_port *port)
  {
+       struct uart_port *p;
        if (port->line >= ARRAY_SIZE(serial8250_ports))
                return -ENODEV;
  
        serial8250_isa_init_ports();
-       serial8250_ports[port->line].port       = *port;
-       serial8250_ports[port->line].port.ops   = &serial8250_pops;
+       p = &serial8250_ports[port->line].port;
+       p->iobase       = port->iobase;
+       p->membase      = port->membase;
+       p->irq          = port->irq;
+       p->uartclk      = port->uartclk;
+       p->fifosize     = port->fifosize;
+       p->regshift     = port->regshift;
+       p->iotype       = port->iotype;
+       p->flags        = port->flags;
+       p->mapbase      = port->mapbase;
+       p->private_data = port->private_data;
+       set_io_from_upio(p);
+       if (port->serial_in)
+               p->serial_in = port->serial_in;
+       if (port->serial_out)
+               p->serial_out = port->serial_out;
        return 0;
  }
  
@@@ -2839,6 -2910,9 +2927,9 @@@ static int __devinit serial8250_probe(s
                port.mapbase            = p->mapbase;
                port.hub6               = p->hub6;
                port.private_data       = p->private_data;
+               port.type               = p->type;
+               port.serial_in          = p->serial_in;
+               port.serial_out         = p->serial_out;
                port.dev                = &dev->dev;
                if (share_irqs)
                        port.flags |= UPF_SHARE_IRQ;
@@@ -2993,6 -3067,20 +3084,20 @@@ int serial8250_register_port(struct uar
                if (port->dev)
                        uart->port.dev = port->dev;
  
+               if (port->flags & UPF_FIXED_TYPE) {
+                       uart->port.type = port->type;
+                       uart->port.fifosize = uart_config[port->type].fifo_size;
+                       uart->capabilities = uart_config[port->type].flags;
+                       uart->tx_loadsz = uart_config[port->type].tx_loadsz;
+               }
+               set_io_from_upio(&uart->port);
+               /* Possibly override default I/O functions.  */
+               if (port->serial_in)
+                       uart->port.serial_in = port->serial_in;
+               if (port->serial_out)
+                       uart->port.serial_out = port->serial_out;
                ret = uart_add_one_port(&serial8250_reg, &uart->port);
                if (ret == 0)
                        ret = uart->port.line;
@@@ -3035,7 -3123,7 +3140,7 @@@ static int __init serial8250_init(void
        if (nr_uarts > UART_NR)
                nr_uarts = UART_NR;
  
-       printk(KERN_INFO "Serial: 8250/16550 driver"
+       printk(KERN_INFO "Serial: 8250/16550 driver"
                "%d ports, IRQ sharing %sabled\n", nr_uarts,
                share_irqs ? "en" : "dis");
  
diff --combined drivers/spi/Kconfig
index c891c1e1191c0652a2ff302ebc0fa3d3ee12ff8c,4a6fe01831a8d82354765d256858fca8f760a8df..c203657178abd2478856067031eab348e97ea109
@@@ -78,7 -78,7 +78,7 @@@ config SPI_AU155
          will be called au1550_spi.
  
  config SPI_BITBANG
-       tristate "Bitbanging SPI master"
+       tristate "Utilities for Bitbanging SPI masters"
        help
          With a few GPIO pins, your system can bitbang the SPI protocol.
          Select this to get SPI support through I/O pins (GPIO, parallel
@@@ -100,6 -100,22 +100,22 @@@ config SPI_BUTTERFL
          inexpensive battery powered microcontroller evaluation board.
          This same cable can be used to flash new firmware.
  
+ config SPI_GPIO
+       tristate "GPIO-based bitbanging SPI Master"
+       depends on GENERIC_GPIO
+       select SPI_BITBANG
+       help
+         This simple GPIO bitbanging SPI master uses the arch-neutral GPIO
+         interface to manage MOSI, MISO, SCK, and chipselect signals.  SPI
+         slaves connected to a bus using this driver are configured as usual,
+         except that the spi_board_info.controller_data holds the GPIO number
+         for the chipselect used by this controller driver.
+         Note that this driver often won't achieve even 1 Mbit/sec speeds,
+         making it unusually slow for SPI.  If your platform can inline
+         GPIO operations, you should be able to leverage that for better
+         speed with a custom version of this driver; see the source code.
  config SPI_IMX
        tristate "Freescale iMX SPI controller"
        depends on ARCH_IMX && EXPERIMENTAL
@@@ -225,47 -241,6 +241,47 @@@ config SPI_AT2
          This driver can also be built as a module.  If so, the module
          will be called at25.
  
 +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 EXPERIMENTAL
diff --combined drivers/spi/Makefile
index 141c84eee6f51ab6f6ec3adc7d1e8d75a669626a,5e9f521b8844b9b23e25f1dcb165811a96051954..525abc3dcb9fe9c656192cdc70c0070369ac9c97
@@@ -16,6 -16,7 +16,7 @@@ obj-$(CONFIG_SPI_BFIN)                        += spi_bfin5xx
  obj-$(CONFIG_SPI_BITBANG)             += spi_bitbang.o
  obj-$(CONFIG_SPI_AU1550)              += au1550_spi.o
  obj-$(CONFIG_SPI_BUTTERFLY)           += spi_butterfly.o
+ obj-$(CONFIG_SPI_GPIO)                        += spi_gpio.o
  obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
  obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
  obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
@@@ -35,9 -36,6 +36,9 @@@ obj-$(CONFIG_SPI_SH_SCI)              += spi_sh_sci
  obj-$(CONFIG_SPI_AT25)                += at25.o
  obj-$(CONFIG_SPI_SPIDEV)      += spidev.o
  obj-$(CONFIG_SPI_TLE62X0)     += tle62x0.o
 +obj-$(CONFIG_SPI_TSC210X)     += tsc210x.o
 +obj-$(CONFIG_SPI_TSC2301)     += tsc2301.o
 +tsc2301-objs                  := tsc2301-core.o
  #     ... add above this line ...
  
  # SPI slave controller drivers (upstream link)
diff --combined drivers/usb/host/Kconfig
index 2094de4c54f8b41e34ba7069d2428feee48f4bf1,2b476b6b3d4d3e1ed6ad2b24ff082178e0d3e147..8905cc098746690fc5d07b2666c0a1458a3966d6
@@@ -41,25 -41,6 +41,25 @@@ config USB_EHCI_HC
  
          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"
@@@ -115,6 -96,19 +115,19 @@@ config USB_EHCI_HCD_PPC_O
          Enables support for the USB controller present on the PowerPC
          OpenFirmware platform bus.
  
+ config USB_OXU210HP_HCD
+       tristate "OXU210HP HCD support"
+       depends on USB
+       ---help---
+         The OXU210HP is an USB host/OTG/device controller. Enable this
+         option if your board has this chip. If unsure, say N.
+         This driver does not support isochronous transfers and doesn't
+         implement OTG nor USB device controllers.
+         To compile this driver as a module, choose M here: the
+         module will be called oxu210hp-hcd.
  config USB_ISP116X_HCD
        tristate "ISP116X HCD support"
        depends on USB
diff --combined drivers/watchdog/Kconfig
index 0926dd44ed1383a9fa6e8e37ab1ae0b60a8c615c,ec68c741b5645eddd206df2a02b492b3ee783650..ee731d2a9f10e20f851afe38dbace7979cce13f1
@@@ -55,6 -55,13 +55,13 @@@ config SOFT_WATCHDO
          To compile this driver as a module, choose M here: the
          module will be called softdog.
  
+ config WM8350_WATCHDOG
+       tristate "WM8350 watchdog"
+       depends on MFD_WM8350
+       help
+         Support for the watchdog in the WM8350 AudioPlus PMIC.  When
+         the watchdog triggers the system will be reset.
  # ALPHA Architecture
  
  # ARM Architecture
@@@ -180,10 -187,10 +187,10 @@@ config EP93XX_WATCHDO
  
  config OMAP_WATCHDOG
        tristate "OMAP Watchdog"
 -      depends on ARCH_OMAP16XX || ARCH_OMAP24XX
 +      depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
        help
 -        Support for TI OMAP1610/OMAP1710/OMAP2420 watchdog.  Say 'Y' here to
 -        enable the OMAP1610/OMAP1710 watchdog timer.
 +        Support for TI OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog.  Say 'Y'
 +        here to enable the OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog timer.
  
  config PNX4008_WATCHDOG
        tristate "PNX4008 Watchdog"
@@@ -551,6 -558,18 +558,18 @@@ config CPU5_WD
          To compile this driver as a module, choose M here: the
          module will be called cpu5wdt.
  
+ config SMSC_SCH311X_WDT
+       tristate "SMSC SCH311X Watchdog Timer"
+       depends on X86
+       ---help---
+         This is the driver for the hardware watchdog timer on the
+         SMSC SCH3112, SCH3114 and SCH3116 Super IO chipset
+         (LPC IO with 8042 KBC, Reset Generation, HWM and multiple
+         serial ports).
+         To compile this driver as a module, choose M here: the
+         module will be called sch311x_wdt.
  config SMSC37B787_WDT
        tristate "Winbond SMsC37B787 Watchdog Timer"
        depends on X86
index 93d483d1096782489061aedff1c84d062b1d0a77,8137f660a5cc58a3768d498d6b77ed9dc25ad12f..17bd4007fa3430de51e0594a822353084d3b695d
@@@ -168,7 -168,7 +168,7 @@@ int twl4030_i2c_read(u8 mod_no, u8 *val
  /*----------------------------------------------------------------------*/
  
  /*
-  * Monitoring ADC register offsets (use TWL4030_MODULE_MADC)
+  * Multichannel ADC register offsets (use TWL4030_MODULE_MADC)
   * ... SIH/interrupt only
   */
  
  
  /*----------------------------------------------------------------------*/
  
 +/* Power bus message definitions */
 +
 +#define DEV_GRP_NULL          0x0
 +#define DEV_GRP_P1            0x1
 +#define DEV_GRP_P2            0x2
 +#define DEV_GRP_P3            0x4
 +
 +#define RES_GRP_RES           0x0
 +#define RES_GRP_PP            0x1
 +#define RES_GRP_RC            0x2
 +#define RES_GRP_PP_RC         0x3
 +#define RES_GRP_PR            0x4
 +#define RES_GRP_PP_PR         0x5
 +#define RES_GRP_RC_PR         0x6
 +#define RES_GRP_ALL           0x7
 +
 +#define RES_TYPE2_R0          0x0
 +
 +#define RES_TYPE_ALL          0x7
 +
 +#define RES_STATE_WRST                0xF
 +#define RES_STATE_ACTIVE      0xE
 +#define RES_STATE_SLEEP               0x8
 +#define RES_STATE_OFF         0x0
 +
 +/*
 + * Power Bus Message Format ... these can be sent individually by Linux,
 + * but are usually part of downloaded scripts that are run when various
 + * power events are triggered.
 + *
 + *  Broadcast Message (16 Bits):
 + *    DEV_GRP[15:13] MT[12]  RES_GRP[11:9]  RES_TYPE2[8:7] RES_TYPE[6:4]
 + *    RES_STATE[3:0]
 + *
 + *  Singular Message (16 Bits):
 + *    DEV_GRP[15:13] MT[12]  RES_ID[11:4]  RES_STATE[3:0]
 + */
 +
 +#define MSG_BROADCAST(devgrp, grp, type, type2, state) \
 +      ( (devgrp) << 13 | 1 << 12 | (grp) << 9 | (type2) << 7 \
 +      | (type) << 4 | (state))
 +
 +#define MSG_SINGULAR(devgrp, id, state) \
 +      ((devgrp) << 13 | 0 << 12 | (id) << 4 | (state))
 +
 +/*----------------------------------------------------------------------*/
 +
  struct twl4030_bci_platform_data {
        int *battery_tmp_tbl;
        unsigned int tblsize;
@@@ -306,6 -259,7 +306,6 @@@ struct twl4030_keypad_data 
        int rows;
        int cols;
        int *keymap;
 -      int irq;
        unsigned int keymapsize;
        unsigned int rep:1;
  };
@@@ -319,26 -273,6 +319,26 @@@ struct twl4030_usb_data 
        enum twl4030_usb_mode   usb_mode;
  };
  
 +struct twl4030_ins {
 +      u16 pmb_message;
 +      u8 delay;
 +};
 +
 +struct twl4030_script {
 +      struct twl4030_ins *script;
 +      unsigned size;
 +      u8 flags;
 +#define TRITON_WRST_SCRIPT    (1<<0)
 +#define TRITON_WAKEUP12_SCRIPT        (1<<1)
 +#define TRITON_WAKEUP3_SCRIPT (1<<2)
 +#define TRITON_SLEEP_SCRIPT   (1<<3)
 +};
 +
 +struct twl4030_power_data {
 +      struct twl4030_script **scripts;
 +      unsigned size;
 +};
 +
  struct twl4030_platform_data {
        unsigned                                irq_base, irq_end;
        struct twl4030_bci_platform_data        *bci;
        struct twl4030_madc_platform_data       *madc;
        struct twl4030_keypad_data              *keypad;
        struct twl4030_usb_data                 *usb;
 +      struct twl4030_power_data               *power;
  
        /* LDO regulators */
        struct regulator_init_data              *vdac;
@@@ -377,6 -310,7 +377,6 @@@ int twl4030_sih_setup(int module)
  #define TWL4030_VAUX3_DEV_GRP         0x1F
  #define TWL4030_VAUX3_DEDICATED               0x22
  
 -
  #if defined(CONFIG_TWL4030_BCI_BATTERY) || \
        defined(CONFIG_TWL4030_BCI_BATTERY_MODULE)
        extern int twl4030charger_usb_en(int enable);
diff --combined kernel/printk.c
index d6b1c48a2baadd8a65760a4c7fcc48c94ae58f06,7015733793e8c2fc71097b49875cdf11f25203a1..86c8f00befd1285d813d6819c64801075569913f
@@@ -44,10 -44,6 +44,10 @@@ void asmlinkage __attribute__((weak)) e
  
  #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 */
  
@@@ -623,7 -619,7 +623,7 @@@ static int acquire_console_semaphore_fo
  static const char recursion_bug_msg [] =
                KERN_CRIT "BUG: recent printk recursion!\n";
  static int recursion_bug;
      static int new_text_line = 1;
+ static int new_text_line = 1;
  static char printk_buf[1024];
  
  asmlinkage int vprintk(const char *fmt, va_list args)
        if (recursion_bug) {
                recursion_bug = 0;
                strcpy(printk_buf, recursion_bug_msg);
-               printed_len = sizeof(recursion_bug_msg);
+               printed_len = strlen(recursion_bug_msg);
        }
        /* Emit the output into the temporary buffer */
        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
diff --combined security/Kconfig
index c518fcd60bc2a7f9002cb130db396f633339630d,9438535d7fd0f2bec51905538bd27b7f73f3ad25..a837ef536a93e92d867bb3e1d79bfc0c027e31ae
@@@ -81,6 -81,15 +81,15 @@@ config SECURITY_NETWORK_XFR
          IPSec.
          If you are unsure how to answer this question, answer N.
  
+ config SECURITY_PATH
+       bool "Security hooks for pathname based access control"
+       depends on SECURITY
+       help
+         This enables the security hooks for pathname based access control.
+         If enabled, a security module can use these hooks to
+         implement pathname based access controls.
+         If you are unsure how to answer this question, answer N.
  config SECURITY_FILE_CAPABILITIES
        bool "File POSIX Capabilities"
        default n
@@@ -103,14 -112,6 +112,14 @@@ config SECURITY_ROOTPLU
          
          If you are unsure how to answer this question, answer N.
  
 +config SECURITY_LOWMEM
 +      tristate "Low memory watermark support"
 +      depends on SECURITY
 +      help
 +        Implements low memory watermark support
 +
 +        If you are unsure how to answer this question, answer N.
 +
  config SECURITY_DEFAULT_MMAP_MIN_ADDR
          int "Low address space to protect from user allocation"
          depends on SECURITY