Merge tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 21 Feb 2013 20:05:51 +0000 (12:05 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 21 Feb 2013 20:05:51 +0000 (12:05 -0800)
Pull driver core patches from Greg Kroah-Hartman:
 "Here is the big driver core merge for 3.9-rc1

  There are two major series here, both of which touch lots of drivers
  all over the kernel, and will cause you some merge conflicts:

   - add a new function called devm_ioremap_resource() to properly be
     able to check return values.

   - remove CONFIG_EXPERIMENTAL

  Other than those patches, there's not much here, some minor fixes and
  updates"

Fix up trivial conflicts

* tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (221 commits)
  base: memory: fix soft/hard_offline_page permissions
  drivercore: Fix ordering between deferred_probe and exiting initcalls
  backlight: fix class_find_device() arguments
  TTY: mark tty_get_device call with the proper const values
  driver-core: constify data for class_find_device()
  firmware: Ignore abort check when no user-helper is used
  firmware: Reduce ifdef CONFIG_FW_LOADER_USER_HELPER
  firmware: Make user-mode helper optional
  firmware: Refactoring for splitting user-mode helper code
  Driver core: treat unregistered bus_types as having no devices
  watchdog: Convert to devm_ioremap_resource()
  thermal: Convert to devm_ioremap_resource()
  spi: Convert to devm_ioremap_resource()
  power: Convert to devm_ioremap_resource()
  mtd: Convert to devm_ioremap_resource()
  mmc: Convert to devm_ioremap_resource()
  mfd: Convert to devm_ioremap_resource()
  media: Convert to devm_ioremap_resource()
  iommu: Convert to devm_ioremap_resource()
  drm: Convert to devm_ioremap_resource()
  ...

53 files changed:
1  2 
arch/alpha/Kconfig
arch/arm/Kconfig
arch/blackfin/Kconfig
arch/ia64/Kconfig
arch/mips/Kconfig
arch/parisc/Kconfig
arch/powerpc/Kconfig
arch/s390/Kconfig
arch/sh/Kconfig
arch/x86/Kconfig
drivers/acpi/Kconfig
drivers/base/dd.c
drivers/cpufreq/Kconfig.arm
drivers/cpufreq/Kconfig.x86
drivers/gpio/Kconfig
drivers/gpu/drm/exynos/exynos_drm_g2d.c
drivers/gpu/drm/exynos/exynos_drm_rotator.c
drivers/gpu/drm/exynos/exynos_hdmi.c
drivers/misc/atmel-ssc.c
drivers/mtd/devices/Kconfig
drivers/net/ethernet/8390/Kconfig
drivers/net/ethernet/fujitsu/Kconfig
drivers/net/ethernet/i825xx/Kconfig
drivers/net/ethernet/intel/Kconfig
drivers/net/ethernet/seeq/Kconfig
drivers/net/wan/Kconfig
drivers/pinctrl/pinctrl-exynos5440.c
drivers/pinctrl/pinctrl-falcon.c
drivers/pinctrl/pinctrl-nomadik.c
drivers/pinctrl/pinctrl-samsung.c
drivers/pinctrl/pinctrl-xway.c
drivers/spi/Kconfig
drivers/spi/spi-ep93xx.c
drivers/spi/spi-mxs.c
drivers/spi/spi-omap2-mcspi.c
drivers/spi/spi-s3c64xx.c
drivers/spi/spi-sirf.c
drivers/spi/spi-tegra20-sflash.c
drivers/spi/spi-tegra20-slink.c
drivers/spi/spi.c
drivers/video/exynos/exynos_dp_core.c
include/linux/device.h
include/linux/power_supply.h
include/linux/printk.h
include/linux/rtc.h
init/Kconfig
lib/Kconfig.debug
net/Kconfig
net/mac80211/Kconfig
net/netfilter/Kconfig
net/nfc/core.c
sound/soc/fsl/imx-audmux.c
sound/soc/mxs/mxs-saif.c

diff --combined arch/alpha/Kconfig
index 9b504af2e9667168a0ed47143bcaac4c2517745f,3387aeba2c6f0478fe2fbc0956ea10e54926ba67..775361f67bfd38cd0d370a13e368bc8be1619185
@@@ -5,6 -5,7 +5,6 @@@ config ALPH
        select HAVE_IDE
        select HAVE_OPROFILE
        select HAVE_SYSCALL_WRAPPERS
 -      select HAVE_IRQ_WORK
        select HAVE_PCSPKR_PLATFORM
        select HAVE_PERF_EVENTS
        select HAVE_DMA_ATTRS
@@@ -555,8 -556,7 +555,7 @@@ config NR_CPU
            with working support have a maximum of 4 CPUs.
  
  config ARCH_DISCONTIGMEM_ENABLE
-       bool "Discontiguous Memory Support (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "Discontiguous Memory Support"
        help
          Say Y to support efficient handling of discontiguous physical memory,
          for architectures which are either NUMA (Non-Uniform Memory Access)
diff --combined arch/arm/Kconfig
index 2f66b2e42490e26cd95860595e4dee627c9361a5,62c53dc9d7e0e74da8cd987e3e21b18ac28b615c..f410cb16dd2232c84e65ea713a1382cb8a2d48ad
@@@ -36,6 -36,7 +36,6 @@@ config AR
        select HAVE_GENERIC_HARDIRQS
        select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
        select HAVE_IDE if PCI || ISA || PCMCIA
 -      select HAVE_IRQ_WORK
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_LZMA
        select HAVE_KERNEL_LZO
@@@ -1530,7 -1531,6 +1530,6 @@@ config SM
  
  config SMP_ON_UP
        bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
        depends on SMP && !XIP_KERNEL
        default y
        help
@@@ -1619,16 -1619,6 +1618,16 @@@ config HOTPLUG_CP
          Say Y here to experiment with turning CPUs off and on.  CPUs
          can be controlled through /sys/devices/system/cpu.
  
 +config ARM_PSCI
 +      bool "Support for the ARM Power State Coordination Interface (PSCI)"
 +      depends on CPU_V7
 +      help
 +        Say Y here if you want Linux to communicate with system firmware
 +        implementing the PSCI specification for CPU-centric power
 +        management operations described in ARM document number ARM DEN
 +        0022A ("Power State Coordination Interface System Software on
 +        ARM processors").
 +
  config LOCAL_TIMERS
        bool "Use local timer interrupts"
        depends on SMP
@@@ -1646,7 -1636,7 +1645,7 @@@ config ARCH_NR_GPI
        default 355 if ARCH_U8500
        default 264 if MACH_H4700
        default 512 if SOC_OMAP5
 -      default 288 if ARCH_VT8500
 +      default 288 if ARCH_VT8500 || ARCH_SUNXI
        default 0
        help
          Maximum number of GPIOs in the system.
@@@ -1664,9 -1654,6 +1663,9 @@@ config H
        default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
        default 100
  
 +config SCHED_HRTICK
 +      def_bool HIGH_RES_TIMERS
 +
  config THUMB2_KERNEL
        bool "Compile the kernel in Thumb-2 mode"
        depends on CPU_V7 && !CPU_V6 && !CPU_V6K
@@@ -1731,7 -1718,7 +1730,7 @@@ config AEAB
  
  config OABI_COMPAT
        bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
-       depends on AEABI && EXPERIMENTAL && !THUMB2_KERNEL
+       depends on AEABI && !THUMB2_KERNEL
        default y
        help
          This option preserves the old syscall interface along with the
@@@ -1855,7 -1842,6 +1854,6 @@@ config SECCOM
  
  config CC_STACKPROTECTOR
        bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
        help
          This option turns on the -fstack-protector GCC feature. This
          feature puts, at the beginning of functions, a canary value on
@@@ -1872,7 -1858,7 +1870,7 @@@ config XEN_DOM
  
  config XEN
        bool "Xen guest support on ARM (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && ARM && OF
+       depends on ARM && OF
        depends on CPU_V7 && !CPU_V6
        help
          Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
@@@ -1941,7 -1927,7 +1939,7 @@@ config ZBOOT_RO
  
  choice
        prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)"
-       depends on ZBOOT_ROM && ARCH_SH7372 && EXPERIMENTAL
+       depends on ZBOOT_ROM && ARCH_SH7372
        default ZBOOT_ROM_NONE
        help
          Include experimental SD/MMC loading code in the ROM-able zImage.
@@@ -1970,7 -1956,7 +1968,7 @@@ endchoic
  
  config ARM_APPENDED_DTB
        bool "Use appended device tree blob to zImage (EXPERIMENTAL)"
-       depends on OF && !ZBOOT_ROM && EXPERIMENTAL
+       depends on OF && !ZBOOT_ROM
        help
          With this option, the boot code will look for a device tree binary
          (DTB) appended to zImage
@@@ -2088,7 -2074,7 +2086,7 @@@ config XIP_PHYS_ADD
  
  config KEXEC
        bool "Kexec system call (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU)
+       depends on (!SMP || HOTPLUG_CPU)
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
@@@ -2110,7 -2096,6 +2108,6 @@@ config ATAGS_PRO
  
  config CRASH_DUMP
        bool "Build kdump crash kernel (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
        help
          Generate crash dump after being started by kexec. This should
          be normally only set in special crash dump kernels which are
@@@ -2177,7 -2162,7 +2174,7 @@@ config CPU_FREQ_S3
  
  config CPU_FREQ_S3C24XX
        bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
-       depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL
+       depends on ARCH_S3C24XX && CPU_FREQ
        select CPU_FREQ_S3C
        help
          This enables the CPUfreq driver for the Samsung S3C24XX family
  
  config CPU_FREQ_S3C24XX_PLL
        bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
-       depends on CPU_FREQ_S3C24XX && EXPERIMENTAL
+       depends on CPU_FREQ_S3C24XX
        help
          Compile in support for changing the PLL frequency from the
          S3C24XX series CPUfreq driver. The PLL takes time to settle
@@@ -2252,7 -2237,7 +2249,7 @@@ config FPE_NWFPE_X
  
  config FPE_FASTFPE
        bool "FastFPE math emulation (EXPERIMENTAL)"
-       depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 && EXPERIMENTAL
+       depends on (!AEABI || OABI_COMPAT) && !CPU_32v3
        ---help---
          Say Y here to include the FAST floating point emulator in the kernel.
          This is an experimental much faster emulator which now also has full
@@@ -2334,5 -2319,3 +2331,5 @@@ source "security/Kconfig
  source "crypto/Kconfig"
  
  source "lib/Kconfig"
 +
 +source "arch/arm/kvm/Kconfig"
diff --combined arch/blackfin/Kconfig
index 67e4aaad78f5cda89302901f80c1227f28862336,ca33c8dfe9026fad906e55ff84602bb2d05621ec..e98f3248c8aa74b502fc0b12ebfccf5464148890
@@@ -24,6 -24,7 +24,6 @@@ config BLACKFI
        select HAVE_FUNCTION_TRACER
        select HAVE_FUNCTION_TRACE_MCOUNT_TEST
        select HAVE_IDE
 -      select HAVE_IRQ_WORK
        select HAVE_KERNEL_GZIP if RAMKERNEL
        select HAVE_KERNEL_BZIP2 if RAMKERNEL
        select HAVE_KERNEL_LZMA if RAMKERNEL
@@@ -37,6 -38,7 +37,6 @@@
        select HAVE_GENERIC_HARDIRQS
        select GENERIC_ATOMIC64
        select GENERIC_IRQ_PROBE
 -      select IRQ_PER_CPU if SMP
        select USE_GENERIC_SMP_HELPERS if SMP
        select HAVE_NMI_WATCHDOG if NMI_WATCHDOG
        select GENERIC_SMP_IDLE_THREAD
@@@ -560,8 -562,7 +560,7 @@@ choic
          accurate - This option is therefore marked experimental.
  
  config BFIN_KERNEL_CLOCK_MEMINIT_CALC
-       bool "Calculate Timings (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "Calculate Timings"
  
  config BFIN_KERNEL_CLOCK_MEMINIT_SPEC
        bool "Provide accurate Timings based on target SCLK"
@@@ -1118,7 -1119,7 +1117,7 @@@ endchoic
  
  comment "Memory Protection Unit"
  config MPU
-       bool "Enable the memory protection unit (EXPERIMENTAL)"
+       bool "Enable the memory protection unit"
        default n
        help
          Use the processor's MPU to protect applications from accessing
@@@ -1440,7 -1441,6 +1439,6 @@@ config BFIN_CPU_FRE
  
  config CPU_VOLTAGE
        bool "CPU Voltage scaling"
-       depends on EXPERIMENTAL
        depends on CPU_FREQ
        default n
        help
diff --combined arch/ia64/Kconfig
index 00c2e88f77559eb9bca234936819071c83a0566b,ceed9a791e6d185c6d8c50a772fd3158f264a543..c1b80fb6938d3e9551b672d3ab7ec1382549defb
@@@ -29,6 -29,7 +29,6 @@@ config IA6
        select ARCH_DISCARD_MEMBLOCK
        select GENERIC_IRQ_PROBE
        select GENERIC_PENDING_IRQ if SMP
 -      select IRQ_PER_CPU
        select GENERIC_IRQ_SHOW
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
@@@ -374,8 -375,8 +374,8 @@@ config NR_CPU
          performance hit.
  
  config HOTPLUG_CPU
-       bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
-       depends on SMP && EXPERIMENTAL
+       bool "Support for hot-pluggable CPUs"
+       depends on SMP
        select HOTPLUG
        default n
        ---help---
@@@ -554,8 -555,8 +554,8 @@@ config IA64_HP_AML_NF
  source "drivers/sn/Kconfig"
  
  config KEXEC
-       bool "kexec system call (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
+       bool "kexec system call"
+       depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
diff --combined arch/mips/Kconfig
index 9becc44d9d7a13b5f4df1f6871de8999d6b46932,e96cf7a06d9f5afd3614449e66d820260af26e6a..5d7170bfeb28818b3a3b6f0a101b129f44c91955
@@@ -4,6 -4,7 +4,6 @@@ config MIP
        select HAVE_GENERIC_DMA_COHERENT
        select HAVE_IDE
        select HAVE_OPROFILE
 -      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select PERF_USE_VMALLOC
        select HAVE_ARCH_KGDB
@@@ -169,7 -170,7 +169,7 @@@ config MACH_DECSTATIO
        select SYS_HAS_CPU_R3000
        select SYS_HAS_CPU_R4X00
        select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
+       select SYS_SUPPORTS_64BIT_KERNEL
        select SYS_SUPPORTS_LITTLE_ENDIAN
        select SYS_SUPPORTS_128HZ
        select SYS_SUPPORTS_256HZ
@@@ -205,7 -206,7 +205,7 @@@ config MACH_JAZ
        select ISA
        select SYS_HAS_CPU_R4X00
        select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
+       select SYS_SUPPORTS_64BIT_KERNEL
        select SYS_SUPPORTS_100HZ
        help
         This a family of machines based on the MIPS R4030 chipset which was
@@@ -395,7 -396,6 +395,6 @@@ config PNX8550_STB81
  
  config PMC_MSP
        bool "PMC-Sierra MSP chipsets"
-       depends on EXPERIMENTAL
        select CEVT_R4K
        select CSRC_R4K
        select DMA_NONCOHERENT
@@@ -494,8 -494,7 +493,7 @@@ config SGI_IP2
          here.
  
  config SGI_IP28
-       bool "SGI IP28 (Indigo2 R10k) (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "SGI IP28 (Indigo2 R10k)"
        select FW_ARC
        select FW_ARC64
        select BOOT_ELF64
@@@ -553,7 -552,6 +551,6 @@@ config SGI_IP3
  
  config SIBYTE_CRHINE
        bool "Sibyte BCM91120C-CRhine"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select SIBYTE_BCM1120
  
  config SIBYTE_CARMEL
        bool "Sibyte BCM91120x-Carmel"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select SIBYTE_BCM1120
  
  config SIBYTE_CRHONE
        bool "Sibyte BCM91125C-CRhone"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select SIBYTE_BCM1125
  
  config SIBYTE_RHONE
        bool "Sibyte BCM91125E-Rhone"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select SIBYTE_BCM1125H
@@@ -612,7 -607,6 +606,6 @@@ config SIBYTE_SWAR
  
  config SIBYTE_LITTLESUR
        bool "Sibyte BCM91250C2-LittleSur"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select HAVE_PATA_PLATFORM
  
  config SIBYTE_SENTOSA
        bool "Sibyte BCM91250E-Sentosa"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select DMA_COHERENT
        select NR_CPUS_DEFAULT_2
@@@ -675,7 -668,7 +667,7 @@@ config SNI_R
        select R5000_CPU_SCACHE
        select SYS_HAS_EARLY_PRINTK
        select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
+       select SYS_SUPPORTS_64BIT_KERNEL
        select SYS_SUPPORTS_BIG_ENDIAN
        select SYS_SUPPORTS_HIGHMEM
        select SYS_SUPPORTS_LITTLE_ENDIAN
@@@ -779,7 -772,6 +771,6 @@@ config CAVIUM_OCTEON_REFERENCE_BOAR
  
  config NLM_XLR_BOARD
        bool "Netlogic XLR/XLS based systems"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select NLM_COMMON
        select SYS_HAS_CPU_XLR
  
  config NLM_XLP_BOARD
        bool "Netlogic XLP based systems"
-       depends on EXPERIMENTAL
        select BOOT_ELF32
        select NLM_COMMON
        select SYS_HAS_CPU_XLP
@@@ -1374,7 -1365,6 +1364,6 @@@ config CPU_R550
  
  config CPU_R6000
        bool "R6000"
-       depends on EXPERIMENTAL
        depends on SYS_HAS_CPU_R6000
        select CPU_SUPPORTS_32BIT_KERNEL
        help
@@@ -1392,7 -1382,6 +1381,6 @@@ config CPU_NEVAD
  
  config CPU_R8000
        bool "R8000"
-       depends on EXPERIMENTAL
        depends on SYS_HAS_CPU_R8000
        select CPU_HAS_PREFETCH
        select CPU_SUPPORTS_64BIT_KERNEL
@@@ -1767,7 -1756,7 +1755,7 @@@ config PAGE_SIZE_4K
  
  config PAGE_SIZE_8KB
        bool "8kB"
-       depends on (EXPERIMENTAL && CPU_R8000) || CPU_CAVIUM_OCTEON
+       depends on CPU_R8000 || CPU_CAVIUM_OCTEON
        help
          Using 8kB page size will result in higher performance kernel at
          the price of higher memory consumption.  This option is available
@@@ -1794,7 -1783,7 +1782,7 @@@ config PAGE_SIZE_32K
  
  config PAGE_SIZE_64KB
        bool "64kB"
-       depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX
+       depends on !CPU_R3000 && !CPU_TX39XX
        help
          Using 64kB page size will result in higher performance kernel at
          the price of higher memory consumption.  This option is available on
@@@ -2160,6 -2149,7 +2148,6 @@@ source "mm/Kconfig
  config SMP
        bool "Multi-Processing support"
        depends on SYS_SUPPORTS_SMP
 -      select IRQ_PER_CPU
        select USE_GENERIC_SMP_HELPERS
        help
          This enables support for systems with more than one CPU. If you have
@@@ -2310,8 -2300,7 +2298,7 @@@ config H
  source "kernel/Kconfig.preempt"
  
  config KEXEC
-       bool "Kexec system call (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "Kexec system call"
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
diff --combined arch/parisc/Kconfig
index a32e34ecda9e49f9d3ee88e8c94621d441026bd0,416309baf2700b141dbd84c34ea1b5a1094e3a00..9f2820659da24486af7e9788eead197a499ee044
@@@ -9,12 -9,14 +9,12 @@@ config PARIS
        select RTC_DRV_GENERIC
        select INIT_ALL_POSSIBLE
        select BUG
 -      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select GENERIC_ATOMIC64 if !64BIT
        select HAVE_GENERIC_HARDIRQS
        select BROKEN_RODATA
        select GENERIC_IRQ_PROBE
        select GENERIC_PCI_IOMAP
 -      select IRQ_PER_CPU
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select GENERIC_SMP_IDLE_THREAD
        select GENERIC_STRNCPY_FROM_USER
@@@ -192,12 -194,12 +192,12 @@@ config PARISC_PAGE_SIZE_4K
          If you don't know what to do, choose 4KB.
  
  config PARISC_PAGE_SIZE_16KB
-       bool "16KB (EXPERIMENTAL)"
-       depends on PA8X00 && EXPERIMENTAL
+       bool "16KB"
+       depends on PA8X00
  
  config PARISC_PAGE_SIZE_64KB
-       bool "64KB (EXPERIMENTAL)"
-       depends on PA8X00 && EXPERIMENTAL
+       bool "64KB"
+       depends on PA8X00
  
  endchoice
  
diff --combined arch/powerpc/Kconfig
index 561ccca7b1a7aa3c36d82beeb2f764568c45fecb,e027f04f0bf7bed489ee2bde2e9174b63cea556b..e7fb8edb629b4b2c96dee92383fedf9dc5809a40
@@@ -118,12 -118,14 +118,12 @@@ config PP
        select HAVE_SYSCALL_WRAPPERS if PPC64
        select GENERIC_ATOMIC64 if PPC32
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
 -      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
        select HAVE_GENERIC_HARDIRQS
        select ARCH_WANT_IPC_PARSE_VERSION
        select SPARSE_IRQ
 -      select IRQ_PER_CPU
        select IRQ_DOMAIN
        select GENERIC_IRQ_SHOW
        select GENERIC_IRQ_SHOW_LEVEL
@@@ -332,7 -334,7 +332,7 @@@ config SWIOTL
  
  config HOTPLUG_CPU
        bool "Support for enabling/disabling CPUs"
-       depends on SMP && HOTPLUG && EXPERIMENTAL && (PPC_PSERIES || \
+       depends on SMP && HOTPLUG && (PPC_PSERIES || \
        PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC))
        ---help---
          Say Y here to be able to disable and re-enable individual
@@@ -354,8 -356,8 +354,8 @@@ config ARCH_ENABLE_MEMORY_HOTREMOV
        def_bool y
  
  config KEXEC
-       bool "kexec system call (EXPERIMENTAL)"
-       depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) && EXPERIMENTAL
+       bool "kexec system call"
+       depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
@@@ -850,8 -852,8 +850,8 @@@ config LOWMEM_CAM_NU
        default 3
  
  config DYNAMIC_MEMSTART
-       bool "Enable page aligned dynamic load address for kernel (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
+       bool "Enable page aligned dynamic load address for kernel"
+       depends on ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
        select NONSTATIC_KERNEL
        help
          This option enables the kernel to be loaded at any page aligned
          This option is overridden by CONFIG_RELOCATABLE
  
  config RELOCATABLE
-       bool "Build a relocatable kernel (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && 44x
+       bool "Build a relocatable kernel"
+       depends on ADVANCED_OPTIONS && FLATMEM && 44x
        select NONSTATIC_KERNEL
        help
          This builds a kernel image that is capable of running at the
diff --combined arch/s390/Kconfig
index c15ba7d1be643d9251079bba0d984a11f7d3d425,76e73158bcadfa0fed30119c5d7dc8a0c1a1c331..27c91c38d1a1ce92d77ced14bd0b70539751b691
@@@ -78,6 -78,7 +78,6 @@@ config S39
        select HAVE_KVM if 64BIT
        select HAVE_ARCH_TRACEHOOK
        select INIT_ALL_POSSIBLE
 -      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select HAVE_DEBUG_KMEMLEAK
@@@ -717,8 -718,8 +717,8 @@@ source "arch/s390/kvm/Kconfig
  
  config S390_GUEST
        def_bool y
-       prompt "s390 support for virtio devices (EXPERIMENTAL)"
-       depends on 64BIT && EXPERIMENTAL
+       prompt "s390 support for virtio devices"
+       depends on 64BIT
        select VIRTUALIZATION
        select VIRTIO
        select VIRTIO_CONSOLE
diff --combined arch/sh/Kconfig
index 9c833c5858712b88897eec7c135842242d8e2d75,47653799018eeeed1b1a3b36f1c883b456facad7..87f720037ff76d0b9a1312a29f4718983e236e75
@@@ -11,6 -11,7 +11,6 @@@ config SUPER
        select HAVE_ARCH_TRACEHOOK
        select HAVE_DMA_API_DEBUG
        select HAVE_DMA_ATTRS
 -      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select HAVE_DEBUG_BUGVERBOSE
        select ARCH_HAVE_CUSTOM_GPIO_H
@@@ -90,6 -91,9 +90,6 @@@ config GENERIC_CSU
  config GENERIC_HWEIGHT
        def_bool y
  
 -config IRQ_PER_CPU
 -      def_bool y
 -
  config GENERIC_GPIO
        def_bool n
  
@@@ -644,7 -648,7 +644,7 @@@ source kernel/Kconfig.h
  
  config KEXEC
        bool "kexec system call (EXPERIMENTAL)"
-       depends on SUPERH32 && EXPERIMENTAL && MMU
+       depends on SUPERH32 && MMU
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
  
  config CRASH_DUMP
        bool "kernel crash dumps (EXPERIMENTAL)"
-       depends on SUPERH32 && EXPERIMENTAL && BROKEN_ON_SMP
+       depends on SUPERH32 && BROKEN_ON_SMP
        help
          Generate crash dump after being started by kexec.
          This should be normally only set in special crash dump kernels
  
  config KEXEC_JUMP
        bool "kexec jump (EXPERIMENTAL)"
-       depends on SUPERH32 && KEXEC && HIBERNATION && EXPERIMENTAL
+       depends on SUPERH32 && KEXEC && HIBERNATION
        help
          Jump between original kernel and kexeced kernel and invoke
          code via KEXEC
@@@ -709,7 -713,7 +709,7 @@@ config SECCOM
  
  config CC_STACKPROTECTOR
        bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
-       depends on SUPERH32 && EXPERIMENTAL
+       depends on SUPERH32
        help
          This option turns on the -fstack-protector GCC feature. This
          feature puts, at the beginning of functions, a canary value on
@@@ -760,7 -764,7 +760,7 @@@ config NR_CPU
  
  config HOTPLUG_CPU
        bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
-       depends on SMP && HOTPLUG && EXPERIMENTAL
+       depends on SMP && HOTPLUG
        help
          Say Y here to experiment with turning CPUs off and on.  CPUs
          can be controlled through /sys/devices/system/cpu.
@@@ -839,7 -843,7 +839,7 @@@ config ENTRY_OFFSE
  
  config ROMIMAGE_MMCIF
        bool "Include MMCIF loader in romImage (EXPERIMENTAL)"
-       depends on CPU_SUBTYPE_SH7724 && EXPERIMENTAL
+       depends on CPU_SUBTYPE_SH7724
        help
          Say Y here to include experimental MMCIF loading code in
          romImage. With this enabled it is possible to write the romImage
@@@ -925,7 -929,6 +925,6 @@@ source "fs/Kconfig.binfmt
  endmenu
  
  menu "Power management options (EXPERIMENTAL)"
- depends on EXPERIMENTAL
  
  source "kernel/power/Kconfig"
  
diff --combined arch/x86/Kconfig
index f7a27fdb509890096f2c4596ccec1bfe7541673b,3ac0e642bbe414604b682756ac207eacdb0d5548..63c0431daa3adc6fae5a58986df7546725d70204
@@@ -1,7 -1,7 +1,7 @@@
  # Select 32 or 64 bit
  config 64BIT
        bool "64-bit kernel" if ARCH = "x86"
 -      default ARCH = "x86_64"
 +      default ARCH != "i386"
        ---help---
          Say yes to build a 64-bit kernel - formerly known as x86_64
          Say no to build a 32-bit kernel - formerly known as i386
@@@ -28,6 -28,7 +28,6 @@@ config X8
        select HAVE_OPROFILE
        select HAVE_PCSPKR_PLATFORM
        select HAVE_PERF_EVENTS
 -      select HAVE_IRQ_WORK
        select HAVE_IOREMAP_PROT
        select HAVE_KPROBES
        select HAVE_MEMBLOCK
        select HAVE_DMA_CONTIGUOUS if !SWIOTLB
        select HAVE_KRETPROBES
        select HAVE_OPTPROBES
 +      select HAVE_KPROBES_ON_FTRACE
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_FENTRY if X86_64
        select HAVE_C_RECORDMCOUNT
        select HAVE_DYNAMIC_FTRACE
 +      select HAVE_DYNAMIC_FTRACE_WITH_REGS
        select HAVE_FUNCTION_TRACER
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_FUNCTION_GRAPH_FP_TEST
        select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC)
        select GENERIC_TIME_VSYSCALL if X86_64
        select KTIME_SCALAR if X86_32
 +      select ALWAYS_USE_PERSISTENT_CLOCK
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select HAVE_CONTEXT_TRACKING if X86_64
        select MODULES_USE_ELF_RELA if X86_64
        select CLONE_BACKWARDS if X86_32
        select GENERIC_SIGALTSTACK
 +      select ARCH_USE_BUILTIN_BSWAP
  
  config INSTRUCTION_DECODER
        def_bool y
@@@ -225,7 -222,7 +225,7 @@@ config ARCH_SUPPORTS_DEBUG_PAGEALLO
  
  config HAVE_INTEL_TXT
        def_bool y
-       depends on EXPERIMENTAL && INTEL_IOMMU && ACPI
+       depends on INTEL_IOMMU && ACPI
  
  config X86_32_SMP
        def_bool y
@@@ -323,10 -320,6 +323,10 @@@ config X86_BIGSM
        ---help---
          This option is needed for the systems that have more than 8 CPUs
  
 +config GOLDFISH
 +       def_bool y
 +       depends on X86_GOLDFISH
 +
  if X86_32
  config X86_EXTENDED_PLATFORM
        bool "Support for extended (non-PC) x86 platforms"
@@@ -409,14 -402,6 +409,14 @@@ config X86_U
  # Following is an alphabetically sorted list of 32 bit extended platforms
  # Please maintain the alphabetic order if and when there are additions
  
 +config X86_GOLDFISH
 +       bool "Goldfish (Virtual Platform)"
 +       depends on X86_32
 +       ---help---
 +       Enable support for the Goldfish virtual platform used primarily
 +       for Android development. Unless you are building for the Android
 +       Goldfish emulator say N here.
 +
  config X86_INTEL_CE
        bool "CE4100 TV platform"
        depends on PCI
@@@ -469,16 -454,6 +469,16 @@@ config X86_MDFL
  
  endif
  
 +config X86_INTEL_LPSS
 +      bool "Intel Low Power Subsystem Support"
 +      depends on ACPI
 +      select COMMON_CLK
 +      ---help---
 +        Select to build support for Intel Low Power Subsystem such as
 +        found on Intel Lynxpoint PCH. Selecting this option enables
 +        things like clock tree (common clock framework) which are needed
 +        by the LPSS peripheral drivers.
 +
  config X86_RDC321X
        bool "RDC R-321x SoC"
        depends on X86_32
@@@ -642,7 -617,7 +642,7 @@@ config PARAVIR
  
  config PARAVIRT_SPINLOCKS
        bool "Paravirtualization layer for spinlocks"
-       depends on PARAVIRT && SMP && EXPERIMENTAL
+       depends on PARAVIRT && SMP
        ---help---
          Paravirtualized spinlocks allow a pvops backend to replace the
          spinlock implementation with something virtualization-friendly
@@@ -754,7 -729,7 +754,7 @@@ config GART_IOMM
  config CALGARY_IOMMU
        bool "IBM Calgary IOMMU support"
        select SWIOTLB
-       depends on X86_64 && PCI && EXPERIMENTAL
+       depends on X86_64 && PCI
        ---help---
          Support for hardware IOMMUs in IBM's xSeries x366 and x460
          systems. Needed to run systems with more than 3GB of memory
@@@ -796,7 -771,7 +796,7 @@@ config IOMMU_HELPE
  
  config MAXSMP
        bool "Enable Maximum number of SMP Processors and NUMA Nodes"
-       depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL
+       depends on X86_64 && SMP && DEBUG_KERNEL
        select CPUMASK_OFFSTACK
        ---help---
          Enable maximum number of CPUS and NUMA Nodes for this architecture.
@@@ -1132,7 -1107,6 +1132,6 @@@ config HIGHMEM64
  endchoice
  
  choice
-       depends on EXPERIMENTAL
        prompt "Memory split" if EXPERT
        default VMSPLIT_3G
        depends on X86_32
@@@ -1209,7 -1183,7 +1208,7 @@@ config DIRECT_GBPAGE
  config NUMA
        bool "Numa Memory Allocation and Scheduler Support"
        depends on SMP
-       depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI) && EXPERIMENTAL)
+       depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI))
        default y if (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP)
        ---help---
          Enable NUMA (Non Uniform Memory Access) support.
@@@ -1304,7 -1278,7 +1303,7 @@@ config ARCH_DISCONTIGMEM_DEFAUL
  
  config ARCH_SPARSEMEM_ENABLE
        def_bool y
-       depends on X86_64 || NUMA || (EXPERIMENTAL && X86_32) || X86_32_NON_STANDARD
+       depends on X86_64 || NUMA || X86_32 || X86_32_NON_STANDARD
        select SPARSEMEM_STATIC if X86_32
        select SPARSEMEM_VMEMMAP_ENABLE if X86_64
  
@@@ -1618,8 -1592,7 +1617,7 @@@ config CRASH_DUM
          For more details see Documentation/kdump/kdump.txt
  
  config KEXEC_JUMP
-       bool "kexec jump (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "kexec jump"
        depends on KEXEC && HIBERNATION
        ---help---
          Jump between original kernel and kexeced kernel and invoke
@@@ -1937,7 -1910,6 +1935,7 @@@ config APM_DO_ENABL
          this feature.
  
  config APM_CPU_IDLE
 +      depends on CPU_IDLE
        bool "Make CPU Idle calls when idle"
        ---help---
          Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop.
@@@ -2063,7 -2035,7 +2061,7 @@@ config PCI_MMCONFI
  
  config PCI_CNB20LE_QUIRK
        bool "Read CNB20LE Host Bridge Windows" if EXPERT
-       depends on PCI && EXPERIMENTAL
+       depends on PCI
        help
          Read the PCI windows out of the CNB20LE host bridge. This allows
          PCI hotplug to work on systems with the CNB20LE chipset which do
@@@ -2164,7 -2136,6 +2162,7 @@@ config OLPC_XO1_RT
  config OLPC_XO1_SCI
        bool "OLPC XO-1 SCI extras"
        depends on OLPC && OLPC_XO1_PM
 +      depends on INPUT=y
        select POWER_SUPPLY
        select GPIO_CS5535
        select MFD_CORE
@@@ -2214,15 -2185,6 +2212,15 @@@ config GEO
        ---help---
          This option enables system support for the Traverse Technologies GEOS.
  
 +config TS5500
 +      bool "Technologic Systems TS-5500 platform support"
 +      depends on MELAN
 +      select CHECK_SIGNATURE
 +      select NEW_LEDS
 +      select LEDS_CLASS
 +      ---help---
 +        This option enables system support for the Technologic Systems TS-5500.
 +
  endif # X86_32
  
  config AMD_NB
@@@ -2267,8 -2229,8 +2265,8 @@@ config IA32_AOU
          Support old a.out binaries in the 32bit emulation.
  
  config X86_X32
-       bool "x32 ABI for 64-bit mode (EXPERIMENTAL)"
-       depends on X86_64 && IA32_EMULATION && EXPERIMENTAL
+       bool "x32 ABI for 64-bit mode"
+       depends on X86_64 && IA32_EMULATION
        ---help---
          Include code to run binaries for the x32 native 32-bit ABI
          for 64-bit processors.  An x32 process gets access to the
diff --combined drivers/acpi/Kconfig
index 78105b3a52623e9b22be90f71dcaa5b1ae33b725,7ec178e03379524c85bc914980c73f989c9f75a9..1a4ed64586a726bfd8ccc70ea6b7f8a9cde0651a
@@@ -176,7 -176,6 +176,6 @@@ config ACPI_FA
  
  config ACPI_DOCK
        bool "Dock"
-       depends on EXPERIMENTAL
        help
          This driver supports ACPI-controlled docking stations and removable
          drive bays such as the IBM Ultrabay and the Dell Module Bay.
@@@ -202,7 -201,7 +201,7 @@@ config ACPI_PROCESSO
          the module will be called processor.
  config ACPI_IPMI
        tristate "IPMI"
-       depends on EXPERIMENTAL && IPMI_SI && IPMI_HANDLER
+       depends on IPMI_SI && IPMI_HANDLER
        default n
        help
          This driver enables the ACPI to access the BMC controller. And it
  
  config ACPI_HOTPLUG_CPU
        bool
-       depends on EXPERIMENTAL && ACPI_PROCESSOR && HOTPLUG_CPU
+       depends on ACPI_PROCESSOR && HOTPLUG_CPU
        select ACPI_CONTAINER
        default y
  
  config ACPI_PROCESSOR_AGGREGATOR
        tristate "Processor Aggregator"
        depends on ACPI_PROCESSOR
-       depends on EXPERIMENTAL
        depends on X86
        help
          ACPI 4.0 defines processor Aggregator, which enables OS to perform
@@@ -337,8 -335,7 +335,7 @@@ config X86_PM_TIME
          systems require this timer. 
  
  config ACPI_CONTAINER
-       bool "Container and Module Devices (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
 -      tristate "Container and Module Devices"
++      bool "Container and Module Devices"
        default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO)
        help
          This driver supports ACPI Container and Module devices (IDs
diff --combined drivers/base/dd.c
index 656310156ddeeeabc0d709f3393b9af27e949214,61d3e1b4069487c700b18f210601f628917f1ec4..bb5645ea0282c5d37050c4f7f9c12a74c4251f37
@@@ -24,7 -24,6 +24,7 @@@
  #include <linux/wait.h>
  #include <linux/async.h>
  #include <linux/pm_runtime.h>
 +#include <linux/pinctrl/devinfo.h>
  
  #include "base.h"
  #include "power/power.h"
@@@ -173,6 -172,8 +173,8 @@@ static int deferred_probe_initcall(void
  
        driver_deferred_probe_enable = true;
        driver_deferred_probe_trigger();
+       /* Sort as many dependencies as possible before exiting initcalls */
+       flush_workqueue(deferred_wq);
        return 0;
  }
  late_initcall(deferred_probe_initcall);
@@@ -270,12 -271,6 +272,12 @@@ static int really_probe(struct device *
        WARN_ON(!list_empty(&dev->devres_head));
  
        dev->driver = drv;
 +
 +      /* If using pinctrl, bind pins now before probing */
 +      ret = pinctrl_bind_pins(dev);
 +      if (ret)
 +              goto probe_failed;
 +
        if (driver_sysfs_add(dev)) {
                printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
                        __func__, dev_name(dev));
index 7f333af1c05990f83205922298c2bd9a4225210d,ee0ef079a0aa3714e7502642b2d8aa50defb9697..030ddf6dd3f1456e70d8cd7b273e3c21b57f35ce
@@@ -21,8 -21,8 +21,8 @@@ config ARM_S3C2416_CPUFRE
          If in doubt, say N.
  
  config ARM_S3C2416_CPUFREQ_VCORESCALE
-       bool "Allow voltage scaling for S3C2416 arm core (EXPERIMENTAL)"
-       depends on ARM_S3C2416_CPUFREQ && REGULATOR && EXPERIMENTAL
+       bool "Allow voltage scaling for S3C2416 arm core"
+       depends on ARM_S3C2416_CPUFREQ && REGULATOR
        help
          Enable CPU voltage scaling when entering the dvs mode.
          It uses information gathered through existing hardware and
@@@ -77,39 -77,9 +77,39 @@@ config ARM_EXYNOS5250_CPUFRE
          This adds the CPUFreq driver for Samsung EXYNOS5250
          SoC.
  
 +config ARM_KIRKWOOD_CPUFREQ
 +      def_bool ARCH_KIRKWOOD && OF
 +      help
 +        This adds the CPUFreq driver for Marvell Kirkwood
 +        SoCs.
 +
 +config ARM_IMX6Q_CPUFREQ
 +      tristate "Freescale i.MX6Q cpufreq support"
 +      depends on SOC_IMX6Q
 +      depends on REGULATOR_ANATOP
 +      help
 +        This adds cpufreq driver support for Freescale i.MX6Q SOC.
 +
 +        If in doubt, say N.
 +
  config ARM_SPEAR_CPUFREQ
        bool "SPEAr CPUFreq support"
        depends on PLAT_SPEAR
        default y
        help
          This adds the CPUFreq driver support for SPEAr SOCs.
 +
 +config ARM_HIGHBANK_CPUFREQ
 +      tristate "Calxeda Highbank-based"
 +      depends on ARCH_HIGHBANK
 +      select CPU_FREQ_TABLE
 +      select GENERIC_CPUFREQ_CPU0
 +      select PM_OPP
 +      select REGULATOR
 +
 +      default m
 +      help
 +        This adds the CPUFreq driver for Calxeda Highbank SoC
 +        based boards.
 +
 +        If in doubt, say N.
index 98e5abbe8f26e59c933ef8fef9d3f5907381a204,4ea4e2bd4595176296d534441c29010a1c345407..d7dc0ed6adb01f700baa041a724bcba21d1f275b
@@@ -2,19 -2,6 +2,19 @@@
  # x86 CPU Frequency scaling drivers
  #
  
 +config X86_INTEL_PSTATE
 +       bool "Intel P state control"
 +       depends on X86
 +       help
 +          This driver provides a P state for Intel core processors.
 +        The driver implements an internal governor and will become
 +          the scaling driver and governor for Sandy bridge processors.
 +
 +        When this driver is enabled it will become the perferred
 +          scaling driver for Sandy bridge processors.
 +
 +        If in doubt, say N.
 +
  config X86_PCC_CPUFREQ
        tristate "Processor Clocking Control interface driver"
        depends on ACPI && ACPI_PROCESSOR
@@@ -187,7 -174,7 +187,7 @@@ config X86_SPEEDSTEP_IC
  config X86_SPEEDSTEP_SMI
        tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)"
        select CPU_FREQ_TABLE
-       depends on X86_32 && EXPERIMENTAL
+       depends on X86_32
        help
          This adds the CPUFreq driver for certain mobile Intel Pentium III
          (Coppermine), all mobile Intel Pentium III-M (Tualatin)
@@@ -219,7 -206,7 +219,7 @@@ config X86_P4_CLOCKMO
  
  config X86_CPUFREQ_NFORCE2
        tristate "nVidia nForce2 FSB changing"
-       depends on X86_32 && EXPERIMENTAL
+       depends on X86_32
        help
          This adds the CPUFreq driver for FSB changing on nVidia nForce2
          platforms.
@@@ -255,7 -242,7 +255,7 @@@ config X86_LONGHAU
  config X86_E_POWERSAVER
        tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)"
        select CPU_FREQ_TABLE
-       depends on X86_32 && EXPERIMENTAL
+       depends on X86_32
        help
          This adds the CPUFreq driver for VIA C7 processors.  However, this driver
          does not have any safeguards to prevent operating the CPU out of spec
diff --combined drivers/gpio/Kconfig
index e5116fa851406ffc57b900ba3374f2f09091216a,4c545861e3f13eb6a6a230e875002f05b1fc3e6c..1855a6fd2b0a07006af618e7aa8f15e7926336ae
@@@ -66,7 -66,7 +66,7 @@@ config DEBUG_GPI
  
  config GPIO_SYSFS
        bool "/sys/class/gpio/... (sysfs interface)"
-       depends on SYSFS && EXPERIMENTAL
+       depends on SYSFS
        help
          Say Y here to add a sysfs interface for GPIOs.
  
@@@ -657,6 -657,12 +657,6 @@@ config GPIO_JANZ_TT
          This driver provides support for driving the pins in output
          mode only. Input mode is not supported.
  
 -config GPIO_AB8500
 -      bool "ST-Ericsson AB8500 Mixed Signal Circuit gpio functions"
 -      depends on AB8500_CORE && BROKEN
 -      help
 -        Select this to enable the AB8500 IC GPIO driver
 -
  config GPIO_TPS6586X
        bool "TPS6586X GPIO"
        depends on MFD_TPS6586X
index 9a4c08e7453c35b2566c2c76b3bc7fa4406d7696,7329abda1825098b3dfe812a45bfe8595e9f6eb7..fb2f81b8063dfcf08f9c1cf47a5dfb097ecb2b0c
@@@ -324,7 -324,7 +324,7 @@@ out
        g2d_userptr = NULL;
  }
  
 -dma_addr_t *g2d_userptr_get_dma_addr(struct drm_device *drm_dev,
 +static dma_addr_t *g2d_userptr_get_dma_addr(struct drm_device *drm_dev,
                                        unsigned long userptr,
                                        unsigned long size,
                                        struct drm_file *filp,
@@@ -1136,10 -1136,9 +1136,9 @@@ static int g2d_probe(struct platform_de
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  
-       g2d->regs = devm_request_and_ioremap(&pdev->dev, res);
-       if (!g2d->regs) {
-               dev_err(dev, "failed to remap I/O memory\n");
-               ret = -ENXIO;
+       g2d->regs = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(g2d->regs)) {
+               ret = PTR_ERR(g2d->regs);
                goto err_put_clk;
        }
  
index f976e29def6effa8adc973e92b28ba9f9add4443,a6da77409944a9553db83c966530e84aa7bb77bb..a40b9fb60240c963a35c26042936b1b8a5831ca7
@@@ -656,11 -656,9 +656,9 @@@ static int rotator_probe(struct platfor
                                platform_get_device_id(pdev)->driver_data;
  
        rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       rot->regs = devm_request_and_ioremap(dev, rot->regs_res);
-       if (!rot->regs) {
-               dev_err(dev, "failed to map register\n");
-               return -ENXIO;
-       }
+       rot->regs = devm_ioremap_resource(dev, rot->regs_res);
+       if (IS_ERR(rot->regs))
+               return PTR_ERR(rot->regs);
  
        rot->irq = platform_get_irq(pdev, 0);
        if (rot->irq < 0) {
@@@ -734,7 -732,7 +732,7 @@@ static int rotator_remove(struct platfo
        return 0;
  }
  
 -struct rot_limit_table rot_limit_tbl = {
 +static struct rot_limit_table rot_limit_tbl = {
        .ycbcr420_2p = {
                .min_w = 32,
                .min_h = 32,
        },
  };
  
 -struct platform_device_id rotator_driver_ids[] = {
 +static struct platform_device_id rotator_driver_ids[] = {
        {
                .name           = "exynos-rot",
                .driver_data    = (unsigned long)&rot_limit_tbl,
index fbab3c4686031ce9c07a1b19546ab73ddb4f92e7,d4c3f3d400f5a4994f2bb50f67e5f0adf9246c00..233247505ff8096cb21cbdadbdaf1a9be3bf3ae6
@@@ -34,6 -34,7 +34,6 @@@
  #include <linux/regulator/consumer.h>
  #include <linux/io.h>
  #include <linux/of_gpio.h>
 -#include <plat/gpio-cfg.h>
  
  #include <drm/exynos_drm.h>
  
@@@ -97,7 -98,8 +97,7 @@@ struct hdmi_context 
  
        void __iomem                    *regs;
        void                            *parent_ctx;
 -      int                             external_irq;
 -      int                             internal_irq;
 +      int                             irq;
  
        struct i2c_client               *ddc_port;
        struct i2c_client               *hdmiphy_port;
@@@ -1389,7 -1391,8 +1389,7 @@@ static bool hdmi_is_connected(void *ctx
        return hdata->hpd;
  }
  
 -static int hdmi_get_edid(void *ctx, struct drm_connector *connector,
 -                              u8 *edid, int len)
 +static struct edid *hdmi_get_edid(void *ctx, struct drm_connector *connector)
  {
        struct edid *raw_edid;
        struct hdmi_context *hdata = ctx;
        DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
  
        if (!hdata->ddc_port)
 -              return -ENODEV;
 +              return ERR_PTR(-ENODEV);
  
        raw_edid = drm_get_edid(connector, hdata->ddc_port->adapter);
 -      if (raw_edid) {
 -              hdata->dvi_mode = !drm_detect_hdmi_monitor(raw_edid);
 -              memcpy(edid, raw_edid, min((1 + raw_edid->extensions)
 -                                      * EDID_LENGTH, len));
 -              DRM_DEBUG_KMS("%s : width[%d] x height[%d]\n",
 -                      (hdata->dvi_mode ? "dvi monitor" : "hdmi monitor"),
 -                      raw_edid->width_cm, raw_edid->height_cm);
 -              kfree(raw_edid);
 -      } else {
 -              return -ENODEV;
 -      }
 +      if (!raw_edid)
 +              return ERR_PTR(-ENODEV);
  
 -      return 0;
 +      hdata->dvi_mode = !drm_detect_hdmi_monitor(raw_edid);
 +      DRM_DEBUG_KMS("%s : width[%d] x height[%d]\n",
 +              (hdata->dvi_mode ? "dvi monitor" : "hdmi monitor"),
 +              raw_edid->width_cm, raw_edid->height_cm);
 +
 +      return raw_edid;
  }
  
  static int hdmi_v13_check_timing(struct fb_videomode *check_timing)
@@@ -1645,16 -1652,16 +1645,16 @@@ static void hdmi_conf_reset(struct hdmi
  
        /* resetting HDMI core */
        hdmi_reg_writemask(hdata, reg,  0, HDMI_CORE_SW_RSTOUT);
 -      mdelay(10);
 +      usleep_range(10000, 12000);
        hdmi_reg_writemask(hdata, reg, ~0, HDMI_CORE_SW_RSTOUT);
 -      mdelay(10);
 +      usleep_range(10000, 12000);
  }
  
  static void hdmi_conf_init(struct hdmi_context *hdata)
  {
        struct hdmi_infoframe infoframe;
  
 -      /* disable HPD interrupts */
 +      /* disable HPD interrupts from HDMI IP block, use GPIO instead */
        hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL |
                HDMI_INTC_EN_HPD_PLUG | HDMI_INTC_EN_HPD_UNPLUG);
  
@@@ -1772,7 -1779,7 +1772,7 @@@ static void hdmi_v13_timing_apply(struc
                u32 val = hdmi_reg_read(hdata, HDMI_V13_PHY_STATUS);
                if (val & HDMI_PHY_STATUS_READY)
                        break;
 -              mdelay(1);
 +              usleep_range(1000, 2000);
        }
        /* steady state not achieved */
        if (tries == 0) {
@@@ -1939,7 -1946,7 +1939,7 @@@ static void hdmi_v14_timing_apply(struc
                u32 val = hdmi_reg_read(hdata, HDMI_PHY_STATUS_0);
                if (val & HDMI_PHY_STATUS_READY)
                        break;
 -              mdelay(1);
 +              usleep_range(1000, 2000);
        }
        /* steady state not achieved */
        if (tries == 0) {
@@@ -1991,9 -1998,9 +1991,9 @@@ static void hdmiphy_conf_reset(struct h
  
        /* reset hdmiphy */
        hdmi_reg_writemask(hdata, reg, ~0, HDMI_PHY_SW_RSTOUT);
 -      mdelay(10);
 +      usleep_range(10000, 12000);
        hdmi_reg_writemask(hdata, reg,  0, HDMI_PHY_SW_RSTOUT);
 -      mdelay(10);
 +      usleep_range(10000, 12000);
  }
  
  static void hdmiphy_poweron(struct hdmi_context *hdata)
@@@ -2041,7 -2048,7 +2041,7 @@@ static void hdmiphy_conf_apply(struct h
                return;
        }
  
 -      mdelay(10);
 +      usleep_range(10000, 12000);
  
        /* operation mode */
        operation[0] = 0x1f;
@@@ -2163,13 -2170,6 +2163,13 @@@ static void hdmi_commit(void *ctx
  
        DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
  
 +      mutex_lock(&hdata->hdmi_mutex);
 +      if (!hdata->powered) {
 +              mutex_unlock(&hdata->hdmi_mutex);
 +              return;
 +      }
 +      mutex_unlock(&hdata->hdmi_mutex);
 +
        hdmi_conf_apply(hdata);
  }
  
@@@ -2265,7 -2265,7 +2265,7 @@@ static struct exynos_hdmi_ops hdmi_ops 
        .dpms           = hdmi_dpms,
  };
  
 -static irqreturn_t hdmi_external_irq_thread(int irq, void *arg)
 +static irqreturn_t hdmi_irq_thread(int irq, void *arg)
  {
        struct exynos_drm_hdmi_context *ctx = arg;
        struct hdmi_context *hdata = ctx->ctx;
        return IRQ_HANDLED;
  }
  
 -static irqreturn_t hdmi_internal_irq_thread(int irq, void *arg)
 -{
 -      struct exynos_drm_hdmi_context *ctx = arg;
 -      struct hdmi_context *hdata = ctx->ctx;
 -      u32 intc_flag;
 -
 -      intc_flag = hdmi_reg_read(hdata, HDMI_INTC_FLAG);
 -      /* clearing flags for HPD plug/unplug */
 -      if (intc_flag & HDMI_INTC_FLAG_HPD_UNPLUG) {
 -              DRM_DEBUG_KMS("unplugged\n");
 -              hdmi_reg_writemask(hdata, HDMI_INTC_FLAG, ~0,
 -                      HDMI_INTC_FLAG_HPD_UNPLUG);
 -      }
 -      if (intc_flag & HDMI_INTC_FLAG_HPD_PLUG) {
 -              DRM_DEBUG_KMS("plugged\n");
 -              hdmi_reg_writemask(hdata, HDMI_INTC_FLAG, ~0,
 -                      HDMI_INTC_FLAG_HPD_PLUG);
 -      }
 -
 -      if (ctx->drm_dev)
 -              drm_helper_hpd_irq_event(ctx->drm_dev);
 -
 -      return IRQ_HANDLED;
 -}
 -
  static int hdmi_resources_init(struct hdmi_context *hdata)
  {
        struct device *dev = hdata->dev;
@@@ -2501,11 -2526,9 +2501,9 @@@ static int hdmi_probe(struct platform_d
                return -ENOENT;
        }
  
-       hdata->regs = devm_request_and_ioremap(&pdev->dev, res);
-       if (!hdata->regs) {
-               DRM_ERROR("failed to map registers\n");
-               return -ENXIO;
-       }
+       hdata->regs = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(hdata->regs))
+               return PTR_ERR(hdata->regs);
  
        ret = devm_gpio_request(&pdev->dev, hdata->hpd_gpio, "HPD");
        if (ret) {
  
        hdata->hdmiphy_port = hdmi_hdmiphy;
  
 -      hdata->external_irq = gpio_to_irq(hdata->hpd_gpio);
 -      if (hdata->external_irq < 0) {
 -              DRM_ERROR("failed to get GPIO external irq\n");
 -              ret = hdata->external_irq;
 -              goto err_hdmiphy;
 -      }
 -
 -      hdata->internal_irq = platform_get_irq(pdev, 0);
 -      if (hdata->internal_irq < 0) {
 -              DRM_ERROR("failed to get platform internal irq\n");
 -              ret = hdata->internal_irq;
 +      hdata->irq = gpio_to_irq(hdata->hpd_gpio);
 +      if (hdata->irq < 0) {
 +              DRM_ERROR("failed to get GPIO irq\n");
 +              ret = hdata->irq;
                goto err_hdmiphy;
        }
  
        hdata->hpd = gpio_get_value(hdata->hpd_gpio);
  
 -      ret = request_threaded_irq(hdata->external_irq, NULL,
 -                      hdmi_external_irq_thread, IRQF_TRIGGER_RISING |
 +      ret = request_threaded_irq(hdata->irq, NULL,
 +                      hdmi_irq_thread, IRQF_TRIGGER_RISING |
                        IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
 -                      "hdmi_external", drm_hdmi_ctx);
 +                      "hdmi", drm_hdmi_ctx);
        if (ret) {
 -              DRM_ERROR("failed to register hdmi external interrupt\n");
 +              DRM_ERROR("failed to register hdmi interrupt\n");
                goto err_hdmiphy;
        }
  
 -      ret = request_threaded_irq(hdata->internal_irq, NULL,
 -                      hdmi_internal_irq_thread, IRQF_ONESHOT,
 -                      "hdmi_internal", drm_hdmi_ctx);
 -      if (ret) {
 -              DRM_ERROR("failed to register hdmi internal interrupt\n");
 -              goto err_free_irq;
 -      }
 -
        /* Attach HDMI Driver to common hdmi. */
        exynos_hdmi_drv_attach(drm_hdmi_ctx);
  
  
        return 0;
  
 -err_free_irq:
 -      free_irq(hdata->external_irq, drm_hdmi_ctx);
  err_hdmiphy:
        i2c_del_driver(&hdmiphy_driver);
  err_ddc:
@@@ -2575,7 -2615,8 +2573,7 @@@ static int hdmi_remove(struct platform_
  
        pm_runtime_disable(dev);
  
 -      free_irq(hdata->internal_irq, hdata);
 -      free_irq(hdata->external_irq, hdata);
 +      free_irq(hdata->irq, hdata);
  
  
        /* hdmiphy i2c driver */
@@@ -2594,7 -2635,8 +2592,7 @@@ static int hdmi_suspend(struct device *
  
        DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
  
 -      disable_irq(hdata->internal_irq);
 -      disable_irq(hdata->external_irq);
 +      disable_irq(hdata->irq);
  
        hdata->hpd = false;
        if (ctx->drm_dev)
@@@ -2619,7 -2661,8 +2617,7 @@@ static int hdmi_resume(struct device *d
  
        hdata->hpd = gpio_get_value(hdata->hpd_gpio);
  
 -      enable_irq(hdata->external_irq);
 -      enable_irq(hdata->internal_irq);
 +      enable_irq(hdata->irq);
  
        if (!pm_runtime_suspended(dev)) {
                DRM_DEBUG_KMS("%s : Already resumed\n", __func__);
diff --combined drivers/misc/atmel-ssc.c
index bd90dd23242e882e6e11fa1481a002e7689450d8,c208238b890a9509bd1779f4fa6db397e7402346..c09c28f92055b156245305da692e1c98582839cc
@@@ -159,11 -159,9 +159,9 @@@ static int ssc_probe(struct platform_de
                return -ENXIO;
        }
  
-       ssc->regs = devm_request_and_ioremap(&pdev->dev, regs);
-       if (!ssc->regs) {
-               dev_dbg(&pdev->dev, "ioremap failed\n");
-               return -EINVAL;
-       }
+       ssc->regs = devm_ioremap_resource(&pdev->dev, regs);
+       if (IS_ERR(ssc->regs))
+               return PTR_ERR(ssc->regs);
  
        ssc->phybase = regs->start;
  
  
        /* disable all interrupts */
        clk_enable(ssc->clk);
 -      ssc_writel(ssc->regs, IDR, ~0UL);
 +      ssc_writel(ssc->regs, IDR, -1);
        ssc_readl(ssc->regs, SR);
        clk_disable(ssc->clk);
  
index 46dcb54c32ec7994610e3c4a20fbaf85aa879b09,c1873429e4eb564429c2532b3326d581cecb9f77..12311f506ca15385c8e325cfb511ccff28b3351a
@@@ -52,7 -52,7 +52,7 @@@ config MTD_MS02N
  
  config MTD_DATAFLASH
        tristate "Support for AT45xxx DataFlash"
-       depends on SPI_MASTER && EXPERIMENTAL
+       depends on SPI_MASTER
        help
          This enables access to AT45xxx DataFlash chips, using SPI.
          Sometimes DataFlash chips are packaged inside MMC-format
@@@ -81,7 -81,7 +81,7 @@@ config MTD_DATAFLASH_OT
  
  config MTD_M25P80
        tristate "Support most SPI Flash chips (AT26DF, M25P, W25X, ...)"
-       depends on SPI_MASTER && EXPERIMENTAL
+       depends on SPI_MASTER
        help
          This enables access to most modern SPI flash chips, used for
          program and data storage.   Series supported include Atmel AT26DF,
@@@ -272,7 -272,6 +272,7 @@@ config MTD_DOCG
        tristate "M-Systems Disk-On-Chip G3"
        select BCH
        select BCH_CONST_PARAMS
 +      select BITREVERSE
        ---help---
          This provides an MTD device driver for the M-Systems DiskOnChip
          G3 devices.
index 1b78ca7a97868d78728bee1d25fc72203d1bfb28,8e15bd4c8304c2219e9daa7281b05970f96dbde0..a5f91e1e8fe3976e8186fb1603780eebd5031f44
@@@ -5,10 -5,7 +5,7 @@@
  config NET_VENDOR_8390
        bool "National Semi-conductor 8390 devices"
        default y
-       depends on NET_VENDOR_NATSEMI && (AMIGA_PCMCIA || PCI || SUPERH || \
-                  ISA || MAC || M32R || MACH_TX49XX || \
-                  H8300 || ARM || MIPS || ZORRO || PCMCIA || \
-                  EXPERIMENTAL)
+       depends on NET_VENDOR_NATSEMI
        ---help---
          If you have a network (Ethernet) card belonging to this class, say Y
          and read the Ethernet-HOWTO, available from
  
  if NET_VENDOR_8390
  
 -config EL2
 -      tristate "3c503 \"EtherLink II\" support"
 -      depends on ISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called 3c503.
 -
 -config AC3200
 -      tristate "Ansel Communications EISA 3200 support"
 -      depends on PCI && (ISA || EISA)
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called ac3200.
 -
  config PCMCIA_AXNET
        tristate "Asix AX88190 PCMCIA support"
        depends on PCMCIA
@@@ -50,6 -71,54 +47,6 @@@ config AX88796_93CX
        ---help---
          Select this if your platform comes with an external 93CX6 eeprom.
  
 -config E2100
 -      tristate "Cabletron E21xx support"
 -      depends on ISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called e2100.
 -
 -config ES3210
 -      tristate "Racal-Interlan EISA ES3210 support"
 -      depends on PCI && EISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called es3210.
 -
 -config HPLAN_PLUS
 -      tristate "HP PCLAN+ (27247B and 27252A) support"
 -      depends on ISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called hp-plus.
 -
 -config HPLAN
 -      tristate "HP PCLAN (27245 and other 27xxx series) support"
 -      depends on ISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called hp.
 -
  config HYDRA
        tristate "Hydra support"
        depends on ZORRO
@@@ -68,6 -137,18 +65,6 @@@ config ARM_ETHER
          If you have an Acorn system with one of these network cards, you
          should say Y to this option if you wish to use it with Linux.
  
 -config LNE390
 -      tristate "Mylex EISA LNE390A/B support"
 -      depends on PCI && EISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called lne390.
 -
  config MAC8390
        bool "Macintosh NS 8390 based ethernet cards"
        depends on MAC
@@@ -103,7 -184,11 +100,7 @@@ config NE200
          without a specific driver are compatible with NE2000.
  
          If you have a PCI NE2000 card however, say N here and Y to "PCI
 -        NE2000 and clone support" under "EISA, VLB, PCI and on board
 -        controllers" below. If you have a NE2000 card and are running on
 -        an MCA system (a bus system used on some IBM PS/2 computers and
 -        laptops), say N here and Y to "NE/2 (ne2000 MCA version) support",
 -        below.
 +        NE2000 and clone support" below.
  
          To compile this driver as a module, choose M here. The module
          will be called ne.
@@@ -138,6 -223,19 +135,6 @@@ config APN
          To compile this driver as a module, choose M here: the module
          will be called apne.
  
 -config NE3210
 -      tristate "Novell/Eagle/Microdyne NE3210 EISA support"
 -      depends on PCI && EISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.  Note that this driver
 -        will NOT WORK for NE3200 cards as they are completely different.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called ne3210.
 -
  config PCMCIA_PCNET
        tristate "NE2000 compatible PCMCIA support"
        depends on PCMCIA
@@@ -187,6 -285,18 +184,6 @@@ config ULTR
          To compile this driver as a module, choose M here. The module
          will be called smc-ultra.
  
 -config ULTRA32
 -      tristate "SMC Ultra32 EISA support"
 -      depends on EISA
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called smc-ultra32.
 -
  config WD80x3
        tristate "WD80*3 support"
        depends on ISA
index c6a87625898a18bf3b87c1841020d9bdc02ec515,b96ebc751b71aced41282df958db8c8b068693ee..6231bc02b9648f9c178ef984c22c362bc08c10cb
@@@ -5,7 -5,7 +5,7 @@@
  config NET_VENDOR_FUJITSU
        bool "Fujitsu devices"
        default y
-       depends on ISA || PCMCIA || (ISA && EXPERIMENTAL)
+       depends on ISA || PCMCIA
        ---help---
          If you have a network (Ethernet) card belonging to this class, say Y
          and read the Ethernet-HOWTO, available from
  
  if NET_VENDOR_FUJITSU
  
 -config AT1700
 -      tristate "AT1700/1720 support (EXPERIMENTAL)"
 -      depends on (ISA || MCA_LEGACY) && EXPERIMENTAL
 -      select CRC32
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called at1700.
 -
  config PCMCIA_FMVJ18X
        tristate "Fujitsu FMV-J18x PCMCIA support"
        depends on PCMCIA
          To compile this driver as a module, choose M here: the module will be
          called fmvj18x_cs.  If unsure, say N.
  
 -config ETH16I
 -      tristate "ICL EtherTeam 16i/32 support"
 -      depends on ISA
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called eth16i.
 -
  endif # NET_VENDOR_FUJITSU
index 955d929cd00fc8cb757ee987a4c7fb53382339f7,dedfa3a254514db26040a5b9e7aa513d531c68ef..9521e68aa3b3eb8c4b6d5fd6b02a7eab71c7a176
@@@ -5,9 -5,7 +5,7 @@@
  config NET_VENDOR_I825XX
        bool "Intel (82586/82593/82596) devices"
        default y
-       depends on NET_VENDOR_INTEL && (ISA || ISA_DMA_API || ARM || \
-                  ARCH_ACORN || SNI_RM || SUN3 || \
-                  GSC || BVME6000 || MVME16x || EXPERIMENTAL)
+       depends on NET_VENDOR_INTEL
        ---help---
          If you have a network (Ethernet) card belonging to this class, say Y
          and read the Ethernet-HOWTO, available from
  
  if NET_VENDOR_I825XX
  
 -config ELPLUS
 -      tristate "3c505 \"EtherLink Plus\" support"
 -      depends on ISA && ISA_DMA_API
 -      ---help---
 -        Information about this network (Ethernet) card can be found in
 -        <file:Documentation/networking/3c505.txt>.  If you have a card of
 -        this type, say Y and read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called 3c505.
 -
 -config EL16
 -      tristate "3c507 \"EtherLink 16\" support"
 -      depends on ISA
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called 3c507.
 -
  config ARM_ETHER1
        tristate "Acorn Ether1 support"
        depends on ARM && ARCH_ACORN
          If you have an Acorn system with one of these (AKA25) network cards,
          you should say Y to this option if you wish to use it with Linux.
  
 -config APRICOT
 -      tristate "Apricot Xen-II on board Ethernet"
 -      depends on ISA
 -      ---help---
 -        If you have a network (Ethernet) controller of this type, say Y and
 -        read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called apricot.
 -
  config BVME6000_NET
        tristate "BVME6000 Ethernet support"
        depends on BVME6000
          in your kernel.
          To compile this driver as a module, choose M here.
  
 -config EEXPRESS
 -      tristate "EtherExpress 16 support"
 -      depends on ISA
 -      ---help---
 -        If you have an EtherExpress16 network (Ethernet) card, say Y and
 -        read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.  Note that the Intel
 -        EtherExpress16 card used to be regarded as a very poor choice
 -        because the driver was very unreliable. We now have a new driver
 -        that should do better.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called eexpress.
 -
 -config EEXPRESS_PRO
 -      tristate "EtherExpressPro support/EtherExpress 10 (i82595) support"
 -      depends on ISA
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y. This
 -        driver supports Intel i82595{FX,TX} based boards. Note however
 -        that the EtherExpress PRO/100 Ethernet card has its own separate
 -        driver.  Please read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called eepro.
 -
  config LASI_82596
        tristate "Lasi ethernet"
        depends on GSC
          Say Y here to support the builtin Intel 82596 ethernet controller
          found in Hewlett-Packard PA-RISC machines with 10Mbit ethernet.
  
 -config LP486E
 -      tristate "LP486E on board Ethernet"
 -      depends on ISA
 -      ---help---
 -        Say Y here to support the 82596-based on-board Ethernet controller
 -        for the Panther motherboard, which is one of the two shipped in the
 -        Intel Professional Workstation.
 -
  config MVME16x_NET
        tristate "MVME16x Ethernet support"
        depends on MVME16x
          driver for this chip in your kernel.
          To compile this driver as a module, choose M here.
  
 -config NI52
 -      tristate "NI5210 support"
 -      depends on ISA
 -      ---help---
 -        If you have a network (Ethernet) card of this type, say Y and read
 -        the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called ni52.
 -
  config SNI_82596
        tristate "SNI RM ethernet"
        depends on SNI_RM
@@@ -68,4 -146,14 +66,4 @@@ config SUN3_8258
          that this driver does not support 82586-based adapters on additional
          VME boards.
  
 -config ZNET
 -      tristate "Zenith Z-Note support"
 -      depends on ISA_DMA_API && X86
 -      ---help---
 -        The Zenith Z-Note notebook computer has a built-in network
 -        (Ethernet) card, and this is the Linux driver for it. Note that the
 -        IBM Thinkpad 300 is compatible with the Z-Note and is also supported
 -        by this driver. Read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
  endif # NET_VENDOR_I825XX
index 3d5f6d463757ff06d95a88d6fe13b22ec2ff7788,6c7863311a2d5908b91d6bfe83d9ead8b58748f5..05f7264c51f71899c308b19d616e2a8718de152a
@@@ -5,11 -5,6 +5,6 @@@
  config NET_VENDOR_INTEL
        bool "Intel devices"
        default y
-       depends on PCI || PCI_MSI || ISA || ISA_DMA_API || ARM || \
-                  ARCH_ACORN || SNI_RM || SUN3 || \
-                  GSC || BVME6000 || MVME16x || \
-                  (ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR) || \
-                  EXPERIMENTAL
        ---help---
          If you have a network (Ethernet) card belonging to this class, say Y
          and read the Ethernet-HOWTO, available from
@@@ -74,7 -69,6 +69,7 @@@ config E1000
        tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
        depends on PCI && (!SPARC32 || BROKEN)
        select CRC32
 +      select PTP_1588_CLOCK
        ---help---
          This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
          ethernet family of adapters. For PCI or PCI-X e1000 adapters,
@@@ -95,8 -89,6 +90,8 @@@ config IG
        tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
        depends on PCI
        select PTP_1588_CLOCK
 +      select I2C
 +      select I2C_ALGOBIT
        ---help---
          This driver supports Intel(R) 82575/82576 gigabit ethernet family of
          adapters.  For more information on how to identify your adapter, go
          To compile this driver as a module, choose M here. The module
          will be called igb.
  
 +config IGB_HWMON
 +      bool "Intel(R) PCI-Express Gigabit adapters HWMON support"
 +      default y
 +      depends on IGB && HWMON && !(IGB=y && HWMON=m)
 +      ---help---
 +        Say Y if you want to expose thermal sensor data on Intel devices.
 +
 +        Some of our devices contain thermal sensors, both external and internal.
 +        This data is available via the hwmon sysfs interface and exposes
 +        the onboard sensors.
 +
  config IGB_DCA
        bool "Direct Cache Access (DCA) Support"
        default y
index a71e1ec068ed3b45652a5a30613ec9de9f9fecac,2366fa0e0533a5961b28896f2a1e8cf67968340b..11f168e46ebe0178b0534f8fcadf4636a5b2ba3f
@@@ -6,7 -6,6 +6,6 @@@ config NET_VENDOR_SEE
        bool "SEEQ devices"
        default y
        depends on HAS_IOMEM
-       depends on (ARM && ARCH_ACORN) || SGI_HAS_SEEQ || EXPERIMENTAL
        ---help---
          If you have a network (Ethernet) card belonging to this class, say Y
          and read the Ethernet-HOWTO, available from
@@@ -26,6 -25,16 +25,6 @@@ config ARM_ETHER
          If you have an Acorn system with one of these network cards, you
          should say Y to this option if you wish to use it with Linux.
  
 -config SEEQ8005
 -      tristate "SEEQ8005 support"
 -      ---help---
 -        This is a driver for the SEEQ 8005 network (Ethernet) card.  If this
 -        is for you, read the Ethernet-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        To compile this driver as a module, choose M here. The module
 -        will be called seeq8005.
 -
  config SGISEEQ
        tristate "SGI Seeq ethernet controller support"
        depends on SGI_HAS_SEEQ
diff --combined drivers/net/wan/Kconfig
index 0c077b0f7a2bf43036b912222b350704b80e2c50,c0cd88dd6bb59527e7833a489dc6a0cbb433568a..13daec88d918ddd07ba7d317c2937db8cc87c63e
@@@ -356,9 -356,63 +356,9 @@@ config SDL
          To compile this driver as a module, choose M here: the
          module will be called sdla.
  
 -# Wan router core.
 -config WAN_ROUTER_DRIVERS
 -      tristate "WAN router drivers"
 -      depends on WAN_ROUTER
 -      ---help---
 -        Connect LAN to WAN via Linux box.
 -
 -        Select driver your card and remember to say Y to "Wan Router."
 -        You will need the wan-tools package which is available from
 -        <ftp://ftp.sangoma.com/>.
 -
 -        Note that the answer to this question won't directly affect the
 -        kernel except for how subordinate drivers may be built:
 -        saying N will just cause the configurator to skip all
 -        the questions about WAN router drivers.
 -
 -        If unsure, say N.
 -
 -config CYCLADES_SYNC
 -      tristate "Cyclom 2X(tm) cards"
 -      depends on WAN_ROUTER_DRIVERS && (PCI || ISA)
 -      ---help---
 -        Cyclom 2X from Cyclades Corporation <http://www.avocent.com/> is an
 -        intelligent multiprotocol WAN adapter with data transfer rates up to
 -        512 Kbps. These cards support the X.25 and SNA related protocols.
 -
 -        While no documentation is available at this time please grab the
 -        wanconfig tarball in
 -        <http://www.conectiva.com.br/~acme/cycsyn-devel/> (with minor changes
 -        to make it compile with the current wanrouter include files; efforts
 -        are being made to use the original package available at
 -        <ftp://ftp.sangoma.com/>).
 -
 -        Feel free to contact me or the cycsyn-devel mailing list at
 -        <acme@conectiva.com.br> and <cycsyn-devel@bazar.conectiva.com.br> for
 -        additional details, I hope to have documentation available as soon as
 -        possible. (Cyclades Brazil is writing the Documentation).
 -
 -        The next questions will ask you about the protocols you want the
 -        driver to support (for now only X.25 is supported).
 -
 -        If you have one or more of these cards, say Y to this option.
 -
 -        To compile this driver as a module, choose M here: the
 -        module will be called cyclomx.
 -
 -config CYCLOMX_X25
 -      bool "Cyclom 2X X.25 support"
 -      depends on CYCLADES_SYNC
 -      help
 -        Connect a Cyclom 2X card to an X.25 network.
 -
 -        Enabling X.25 support will enlarge your kernel by about 11 kB.
 -
  # X.25 network drivers
  config LAPBETHER
-       tristate "LAPB over Ethernet driver (EXPERIMENTAL)"
+       tristate "LAPB over Ethernet driver"
        depends on LAPB && X25
        ---help---
          Driver for a pseudo device (typically called /dev/lapb0) which allows
          If unsure, say N.
  
  config X25_ASY
-       tristate "X.25 async driver (EXPERIMENTAL)"
+       tristate "X.25 async driver"
        depends on LAPB && X25
        ---help---
          Send and receive X.25 frames over regular asynchronous serial
index 142729914c347fc305e32449c11f637a44ad654f,5e77242cb0db97d18175556211f02fa3df48237b..1376eb7305dbbf8d9a20f7f723f486e8ecb066d8
@@@ -599,7 -599,7 +599,7 @@@ static int exynos5440_gpio_direction_ou
  }
  
  /* parse the pin numbers listed in the 'samsung,exynos5440-pins' property */
 -static int __init exynos5440_pinctrl_parse_dt_pins(struct platform_device *pdev,
 +static int exynos5440_pinctrl_parse_dt_pins(struct platform_device *pdev,
                        struct device_node *cfg_np, unsigned int **pin_list,
                        unsigned int *npins)
  {
   * Parse the information about all the available pin groups and pin functions
   * from device node of the pin-controller.
   */
 -static int __init exynos5440_pinctrl_parse_dt(struct platform_device *pdev,
 +static int exynos5440_pinctrl_parse_dt(struct platform_device *pdev,
                                struct exynos5440_pinctrl_priv_data *priv)
  {
        struct device *dev = &pdev->dev;
  }
  
  /* register the pinctrl interface with the pinctrl subsystem */
 -static int __init exynos5440_pinctrl_register(struct platform_device *pdev,
 +static int exynos5440_pinctrl_register(struct platform_device *pdev,
                                struct exynos5440_pinctrl_priv_data *priv)
  {
        struct device *dev = &pdev->dev;
  }
  
  /* register the gpiolib interface with the gpiolib subsystem */
 -static int __init exynos5440_gpiolib_register(struct platform_device *pdev,
 +static int exynos5440_gpiolib_register(struct platform_device *pdev,
                                struct exynos5440_pinctrl_priv_data *priv)
  {
        struct gpio_chip *gc;
  }
  
  /* unregister the gpiolib interface with the gpiolib subsystem */
 -static int __init exynos5440_gpiolib_unregister(struct platform_device *pdev,
 +static int exynos5440_gpiolib_unregister(struct platform_device *pdev,
                                struct exynos5440_pinctrl_priv_data *priv)
  {
        int ret = gpiochip_remove(priv->gc);
@@@ -866,11 -866,9 +866,9 @@@ static int exynos5440_pinctrl_probe(str
                return -ENOENT;
        }
  
-       priv->reg_base = devm_request_and_ioremap(&pdev->dev, res);
-       if (!priv->reg_base) {
-               dev_err(dev, "ioremap failed\n");
-               return -ENODEV;
-       }
+       priv->reg_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(priv->reg_base))
+               return PTR_ERR(priv->reg_base);
  
        ret = exynos5440_gpiolib_register(pdev, priv);
        if (ret)
index 4a0d54a08890c866986cc72505e96202b526ab82,a5d9d562d9663357a3b7157ad380c414dc13d0c0..af97a1f90007130bd8d710b2ef527ea830c79b52
@@@ -170,7 -170,7 +170,7 @@@ static const unsigned pins_ntr[] = {GPI
  static const unsigned pins_ntr8k[] = {GPIO5};
  static const unsigned pins_hrst[] = {GPIO6};
  static const unsigned pins_mdio[] = {GPIO7, GPIO8};
 -static const unsigned pins_bled[] = {GPIO7, GPIO10, GPIO11,
 +static const unsigned pins_bled[] = {GPIO9, GPIO10, GPIO11,
                                        GPIO12, GPIO13, GPIO14};
  static const unsigned pins_asc0[] = {GPIO32, GPIO33};
  static const unsigned pins_spi[] = {GPIO34, GPIO35, GPIO36};
@@@ -315,37 -315,6 +315,37 @@@ static int falcon_pinconf_set(struct pi
  static void falcon_pinconf_dbg_show(struct pinctrl_dev *pctrldev,
                        struct seq_file *s, unsigned offset)
  {
 +      unsigned long config;
 +      struct pin_desc *desc;
 +
 +      struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
 +      int port = PORT(offset);
 +
 +      seq_printf(s, " (port %d) mux %d -- ", port,
 +              pad_r32(info->membase[port], LTQ_PADC_MUX(PORT_PIN(offset))));
 +
 +      config = LTQ_PINCONF_PACK(LTQ_PINCONF_PARAM_PULL, 0);
 +      if (!falcon_pinconf_get(pctrldev, offset, &config))
 +              seq_printf(s, "pull %d ",
 +                      (int)LTQ_PINCONF_UNPACK_ARG(config));
 +
 +      config = LTQ_PINCONF_PACK(LTQ_PINCONF_PARAM_DRIVE_CURRENT, 0);
 +      if (!falcon_pinconf_get(pctrldev, offset, &config))
 +              seq_printf(s, "drive-current %d ",
 +                      (int)LTQ_PINCONF_UNPACK_ARG(config));
 +
 +      config = LTQ_PINCONF_PACK(LTQ_PINCONF_PARAM_SLEW_RATE, 0);
 +      if (!falcon_pinconf_get(pctrldev, offset, &config))
 +              seq_printf(s, "slew-rate %d ",
 +                      (int)LTQ_PINCONF_UNPACK_ARG(config));
 +
 +      desc = pin_desc_get(pctrldev, offset);
 +      if (desc) {
 +              if (desc->gpio_owner)
 +                      seq_printf(s, " owner: %s", desc->gpio_owner);
 +      } else {
 +              seq_printf(s, " not registered");
 +      }
  }
  
  static void falcon_pinconf_group_dbg_show(struct pinctrl_dev *pctrldev,
@@@ -391,8 -360,6 +391,8 @@@ static const struct ltq_cfg_param falco
  static struct ltq_pinmux_info falcon_info = {
        .desc           = &falcon_pctrl_desc,
        .apply_mux      = falcon_mux_apply,
 +      .params         = falcon_cfg_params,
 +      .num_params     = ARRAY_SIZE(falcon_cfg_params),
  };
  
  
@@@ -431,9 -398,6 +431,9 @@@ static int pinctrl_falcon_probe(struct 
                u32 avail;
                int pins;
  
 +              if (!of_device_is_available(np))
 +                      continue;
 +
                if (!ppdev) {
                        dev_err(&pdev->dev, "failed to find pad pdev\n");
                        continue;
                        dev_err(&ppdev->dev, "failed to get clock\n");
                        return PTR_ERR(falcon_info.clk[*bank]);
                }
-               falcon_info.membase[*bank] =
-                               devm_request_and_ioremap(&pdev->dev, &res);
-               if (!falcon_info.membase[*bank]) {
-                       dev_err(&pdev->dev,
-                               "Failed to remap memory for bank %d\n",
-                               *bank);
-                       return -ENOMEM;
-               }
+               falcon_info.membase[*bank] = devm_ioremap_resource(&pdev->dev,
+                                                                  &res);
+               if (IS_ERR(falcon_info.membase[*bank]))
+                       return PTR_ERR(falcon_info.membase[*bank]);
+               
                avail = pad_r32(falcon_info.membase[*bank],
                                        LTQ_PADC_AVAIL);
                pins = fls(avail);
index de9e8519b803570e4188bb58d5b0c77cf6ab004f,96e7cfbbce6da8793f0c5d56cab4907c3de56304..3c80dd98304bc6ce08a021b60d664cc9641b05c9
@@@ -25,8 -25,6 +25,8 @@@
  #include <linux/irqdomain.h>
  #include <linux/slab.h>
  #include <linux/of_device.h>
 +#include <linux/of_address.h>
 +#include <linux/pinctrl/machine.h>
  #include <linux/pinctrl/pinctrl.h>
  #include <linux/pinctrl/pinmux.h>
  #include <linux/pinctrl/pinconf.h>
@@@ -34,8 -32,8 +34,8 @@@
  #include <linux/pinctrl/consumer.h>
  #include <linux/platform_data/pinctrl-nomadik.h>
  #include <asm/mach/irq.h>
 -#include <mach/irqs.h>
  #include "pinctrl-nomadik.h"
 +#include "core.h"
  
  /*
   * The GPIO module in the Nomadik family of Systems-on-Chip is an
@@@ -218,7 -216,7 +218,7 @@@ nmk_gpio_disable_lazy_irq(struct nmk_gp
        u32 falling = nmk_chip->fimsc & BIT(offset);
        u32 rising = nmk_chip->rimsc & BIT(offset);
        int gpio = nmk_chip->chip.base + offset;
 -      int irq = NOMADIK_GPIO_TO_IRQ(gpio);
 +      int irq = irq_find_mapping(nmk_chip->domain, offset);
        struct irq_data *d = irq_get_irq_data(irq);
  
        if (!rising && !falling)
@@@ -678,7 -676,7 +678,7 @@@ int nmk_gpio_set_mode(int gpio, int gpi
  }
  EXPORT_SYMBOL(nmk_gpio_set_mode);
  
 -static int nmk_prcm_gpiocr_get_mode(struct pinctrl_dev *pctldev, int gpio)
 +static int __maybe_unused nmk_prcm_gpiocr_get_mode(struct pinctrl_dev *pctldev, int gpio)
  {
        int i;
        u16 reg;
@@@ -1343,7 -1341,8 +1343,7 @@@ static int nmk_gpio_probe(struct platfo
  
                if (of_property_read_u32(np, "gpio-bank", &dev->id)) {
                        dev_err(&dev->dev, "gpio-bank property not found\n");
 -                      ret = -EINVAL;
 -                      goto out;
 +                      return -EINVAL;
                }
  
                pdata->first_gpio = dev->id * NMK_GPIO_PER_CHIP;
        }
  
        res = platform_get_resource(dev, IORESOURCE_MEM, 0);
 -      if (!res) {
 -              ret = -ENOENT;
 -              goto out;
 -      }
 +      if (!res)
 +              return -ENOENT;
  
        irq = platform_get_irq(dev, 0);
 -      if (irq < 0) {
 -              ret = irq;
 -              goto out;
 -      }
 +      if (irq < 0)
 +              return irq;
  
        secondary_irq = platform_get_irq(dev, 1);
 -      if (secondary_irq >= 0 && !pdata->get_secondary_status) {
 -              ret = -EINVAL;
 -              goto out;
 -      }
 +      if (secondary_irq >= 0 && !pdata->get_secondary_status)
 +              return -EINVAL;
  
-       base = devm_request_and_ioremap(&dev->dev, res);
-       if (!base)
-               return -ENOMEM;
+       base = devm_ioremap_resource(&dev->dev, res);
 -      if (IS_ERR(base)) {
 -              ret = PTR_ERR(base);
 -              goto out;
 -      }
++      if (IS_ERR(base))
++              return PTR_ERR(base);
  
        clk = devm_clk_get(&dev->dev, NULL);
 -      if (IS_ERR(clk)) {
 -              ret = PTR_ERR(clk);
 -              goto out;
 -      }
 +      if (IS_ERR(clk))
 +              return PTR_ERR(clk);
        clk_prepare(clk);
  
        nmk_chip = devm_kzalloc(&dev->dev, sizeof(*nmk_chip), GFP_KERNEL);
 -      if (!nmk_chip) {
 -              ret = -ENOMEM;
 -              goto out;
 -      }
 +      if (!nmk_chip)
 +              return -ENOMEM;
  
        /*
         * The virt address in nmk_chip->addr is in the nomadik register space,
  
        ret = gpiochip_add(&nmk_chip->chip);
        if (ret)
 -              goto out;
 +              return ret;
  
        BUG_ON(nmk_chip->bank >= ARRAY_SIZE(nmk_gpio_chips));
  
        platform_set_drvdata(dev, nmk_chip);
  
        if (!np)
 -              irq_start = NOMADIK_GPIO_TO_IRQ(pdata->first_gpio);
 +              irq_start = pdata->first_irq;
        nmk_chip->domain = irq_domain_add_simple(np,
                                NMK_GPIO_PER_CHIP, irq_start,
                                &nmk_gpio_irq_simple_ops, nmk_chip);
        if (!nmk_chip->domain) {
                dev_err(&dev->dev, "failed to create irqdomain\n");
 -              ret = -ENOSYS;
 -              goto out;
 +              /* Just do this, no matter if it fails */
 +              ret = gpiochip_remove(&nmk_chip->chip);
 +              return -ENOSYS;
        }
  
        nmk_gpio_init_irq(nmk_chip);
        dev_info(&dev->dev, "at address %p\n", nmk_chip->addr);
  
        return 0;
 -
 -out:
 -      dev_err(&dev->dev, "Failure %i for GPIO %i-%i\n", ret,
 -                pdata->first_gpio, pdata->first_gpio+31);
 -
 -      return ret;
  }
  
  static int nmk_get_groups_cnt(struct pinctrl_dev *pctldev)
@@@ -1492,285 -1508,11 +1492,285 @@@ static void nmk_pin_dbg_show(struct pin
        nmk_gpio_dbg_show_one(s, pctldev, chip, offset - chip->base, offset);
  }
  
 +static void nmk_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
 +              struct pinctrl_map *map, unsigned num_maps)
 +{
 +      int i;
 +
 +      for (i = 0; i < num_maps; i++)
 +              if (map[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
 +                      kfree(map[i].data.configs.configs);
 +      kfree(map);
 +}
 +
 +static int nmk_dt_reserve_map(struct pinctrl_map **map, unsigned *reserved_maps,
 +              unsigned *num_maps, unsigned reserve)
 +{
 +      unsigned old_num = *reserved_maps;
 +      unsigned new_num = *num_maps + reserve;
 +      struct pinctrl_map *new_map;
 +
 +      if (old_num >= new_num)
 +              return 0;
 +
 +      new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL);
 +      if (!new_map)
 +              return -ENOMEM;
 +
 +      memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map));
 +
 +      *map = new_map;
 +      *reserved_maps = new_num;
 +
 +      return 0;
 +}
 +
 +static int nmk_dt_add_map_mux(struct pinctrl_map **map, unsigned *reserved_maps,
 +              unsigned *num_maps, const char *group,
 +              const char *function)
 +{
 +      if (*num_maps == *reserved_maps)
 +              return -ENOSPC;
 +
 +      (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
 +      (*map)[*num_maps].data.mux.group = group;
 +      (*map)[*num_maps].data.mux.function = function;
 +      (*num_maps)++;
 +
 +      return 0;
 +}
 +
 +static int nmk_dt_add_map_configs(struct pinctrl_map **map,
 +              unsigned *reserved_maps,
 +              unsigned *num_maps, const char *group,
 +              unsigned long *configs, unsigned num_configs)
 +{
 +      unsigned long *dup_configs;
 +
 +      if (*num_maps == *reserved_maps)
 +              return -ENOSPC;
 +
 +      dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs),
 +                            GFP_KERNEL);
 +      if (!dup_configs)
 +              return -ENOMEM;
 +
 +      (*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_PIN;
 +
 +      (*map)[*num_maps].data.configs.group_or_pin = group;
 +      (*map)[*num_maps].data.configs.configs = dup_configs;
 +      (*map)[*num_maps].data.configs.num_configs = num_configs;
 +      (*num_maps)++;
 +
 +      return 0;
 +}
 +
 +#define NMK_CONFIG_PIN(x,y) { .property = x, .config = y, }
 +#define NMK_CONFIG_PIN_ARRAY(x,y) { .property = x, .choice = y, \
 +      .size = ARRAY_SIZE(y), }
 +
 +static const unsigned long nmk_pin_input_modes[] = {
 +      PIN_INPUT_NOPULL,
 +      PIN_INPUT_PULLUP,
 +      PIN_INPUT_PULLDOWN,
 +};
 +
 +static const unsigned long nmk_pin_output_modes[] = {
 +      PIN_OUTPUT_LOW,
 +      PIN_OUTPUT_HIGH,
 +      PIN_DIR_OUTPUT,
 +};
 +
 +static const unsigned long nmk_pin_sleep_modes[] = {
 +      PIN_SLEEPMODE_DISABLED,
 +      PIN_SLEEPMODE_ENABLED,
 +};
 +
 +static const unsigned long nmk_pin_sleep_input_modes[] = {
 +      PIN_SLPM_INPUT_NOPULL,
 +      PIN_SLPM_INPUT_PULLUP,
 +      PIN_SLPM_INPUT_PULLDOWN,
 +      PIN_SLPM_DIR_INPUT,
 +};
 +
 +static const unsigned long nmk_pin_sleep_output_modes[] = {
 +      PIN_SLPM_OUTPUT_LOW,
 +      PIN_SLPM_OUTPUT_HIGH,
 +      PIN_SLPM_DIR_OUTPUT,
 +};
 +
 +static const unsigned long nmk_pin_sleep_wakeup_modes[] = {
 +      PIN_SLPM_WAKEUP_DISABLE,
 +      PIN_SLPM_WAKEUP_ENABLE,
 +};
 +
 +static const unsigned long nmk_pin_gpio_modes[] = {
 +      PIN_GPIOMODE_DISABLED,
 +      PIN_GPIOMODE_ENABLED,
 +};
 +
 +static const unsigned long nmk_pin_sleep_pdis_modes[] = {
 +      PIN_SLPM_PDIS_DISABLED,
 +      PIN_SLPM_PDIS_ENABLED,
 +};
 +
 +struct nmk_cfg_param {
 +      const char *property;
 +      unsigned long config;
 +      const unsigned long *choice;
 +      int size;
 +};
 +
 +static const struct nmk_cfg_param nmk_cfg_params[] = {
 +      NMK_CONFIG_PIN_ARRAY("ste,input",               nmk_pin_input_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,output",              nmk_pin_output_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,sleep",               nmk_pin_sleep_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,sleep-input",         nmk_pin_sleep_input_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,sleep-output",        nmk_pin_sleep_output_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,sleep-wakeup",        nmk_pin_sleep_wakeup_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,gpio",                nmk_pin_gpio_modes),
 +      NMK_CONFIG_PIN_ARRAY("ste,sleep-pull-disable",  nmk_pin_sleep_pdis_modes),
 +};
 +
 +static int nmk_dt_pin_config(int index, int val, unsigned long *config)
 +{
 +      int ret = 0;
 +
 +      if (nmk_cfg_params[index].choice == NULL)
 +              *config = nmk_cfg_params[index].config;
 +      else {
 +              /* test if out of range */
 +              if  (val < nmk_cfg_params[index].size) {
 +                      *config = nmk_cfg_params[index].config |
 +                              nmk_cfg_params[index].choice[val];
 +              }
 +      }
 +      return ret;
 +}
 +
 +static const char *nmk_find_pin_name(struct pinctrl_dev *pctldev, const char *pin_name)
 +{
 +      int i, pin_number;
 +      struct nmk_pinctrl *npct = pinctrl_dev_get_drvdata(pctldev);
 +
 +      if (sscanf((char *)pin_name, "GPIO%d", &pin_number) == 1)
 +              for (i = 0; i < npct->soc->npins; i++)
 +                      if (npct->soc->pins[i].number == pin_number)
 +                              return npct->soc->pins[i].name;
 +      return NULL;
 +}
 +
 +static bool nmk_pinctrl_dt_get_config(struct device_node *np,
 +              unsigned long *configs)
 +{
 +      bool has_config = 0;
 +      unsigned long cfg = 0;
 +      int i, val, ret;
 +
 +      for (i = 0; i < ARRAY_SIZE(nmk_cfg_params); i++) {
 +              ret = of_property_read_u32(np,
 +                              nmk_cfg_params[i].property, &val);
 +              if (ret != -EINVAL) {
 +                      if (nmk_dt_pin_config(i, val, &cfg) == 0) {
 +                              *configs |= cfg;
 +                              has_config = 1;
 +                      }
 +              }
 +      }
 +
 +      return has_config;
 +}
 +
 +int nmk_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
 +              struct device_node *np,
 +              struct pinctrl_map **map,
 +              unsigned *reserved_maps,
 +              unsigned *num_maps)
 +{
 +      int ret;
 +      const char *function = NULL;
 +      unsigned long configs = 0;
 +      bool has_config = 0;
 +      unsigned reserve = 0;
 +      struct property *prop;
 +      const char *group, *gpio_name;
 +      struct device_node *np_config;
 +
 +      ret = of_property_read_string(np, "ste,function", &function);
 +      if (ret >= 0)
 +              reserve = 1;
 +
 +      has_config = nmk_pinctrl_dt_get_config(np, &configs);
 +
 +      np_config = of_parse_phandle(np, "ste,config", 0);
 +      if (np_config)
 +              has_config |= nmk_pinctrl_dt_get_config(np_config, &configs);
 +
 +      ret = of_property_count_strings(np, "ste,pins");
 +      if (ret < 0)
 +              goto exit;
 +
 +      if (has_config)
 +              reserve++;
 +
 +      reserve *= ret;
 +
 +      ret = nmk_dt_reserve_map(map, reserved_maps, num_maps, reserve);
 +      if (ret < 0)
 +              goto exit;
 +
 +      of_property_for_each_string(np, "ste,pins", prop, group) {
 +              if (function) {
 +                      ret = nmk_dt_add_map_mux(map, reserved_maps, num_maps,
 +                                        group, function);
 +                      if (ret < 0)
 +                              goto exit;
 +              }
 +              if (has_config) {
 +                      gpio_name = nmk_find_pin_name(pctldev, group);
 +
 +                      ret = nmk_dt_add_map_configs(map, reserved_maps, num_maps,
 +                                            gpio_name, &configs, 1);
 +                      if (ret < 0)
 +                              goto exit;
 +              }
 +
 +      }
 +exit:
 +      return ret;
 +}
 +
 +int nmk_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 +                               struct device_node *np_config,
 +                               struct pinctrl_map **map, unsigned *num_maps)
 +{
 +      unsigned reserved_maps;
 +      struct device_node *np;
 +      int ret;
 +
 +      reserved_maps = 0;
 +      *map = NULL;
 +      *num_maps = 0;
 +
 +      for_each_child_of_node(np_config, np) {
 +              ret = nmk_pinctrl_dt_subnode_to_map(pctldev, np, map,
 +                              &reserved_maps, num_maps);
 +              if (ret < 0) {
 +                      nmk_pinctrl_dt_free_map(pctldev, *map, *num_maps);
 +                      return ret;
 +              }
 +      }
 +
 +      return 0;
 +}
 +
  static struct pinctrl_ops nmk_pinctrl_ops = {
        .get_groups_count = nmk_get_groups_cnt,
        .get_group_name = nmk_get_group_name,
        .get_group_pins = nmk_get_group_pins,
        .pin_dbg_show = nmk_pin_dbg_show,
 +      .dt_node_to_map = nmk_pinctrl_dt_node_to_map,
 +      .dt_free_map = nmk_pinctrl_dt_free_map,
  };
  
  static int nmk_pmx_get_funcs_cnt(struct pinctrl_dev *pctldev)
@@@ -2104,39 -1846,16 +2104,39 @@@ static struct pinctrl_desc nmk_pinctrl_
  
  static const struct of_device_id nmk_pinctrl_match[] = {
        {
 -              .compatible = "stericsson,nmk_pinctrl",
 +              .compatible = "stericsson,nmk-pinctrl",
                .data = (void *)PINCTRL_NMK_DB8500,
        },
        {},
  };
  
 +static int nmk_pinctrl_suspend(struct platform_device *pdev, pm_message_t state)
 +{
 +      struct nmk_pinctrl *npct;
 +
 +      npct = platform_get_drvdata(pdev);
 +      if (!npct)
 +              return -EINVAL;
 +
 +      return pinctrl_force_sleep(npct->pctl);
 +}
 +
 +static int nmk_pinctrl_resume(struct platform_device *pdev)
 +{
 +      struct nmk_pinctrl *npct;
 +
 +      npct = platform_get_drvdata(pdev);
 +      if (!npct)
 +              return -EINVAL;
 +
 +      return pinctrl_force_default(npct->pctl);
 +}
 +
  static int nmk_pinctrl_probe(struct platform_device *pdev)
  {
        const struct platform_device_id *platid = platform_get_device_id(pdev);
        struct device_node *np = pdev->dev.of_node;
 +      struct device_node *prcm_np;
        struct nmk_pinctrl *npct;
        struct resource *res;
        unsigned int version = 0;
        if (version == PINCTRL_NMK_DB8540)
                nmk_pinctrl_db8540_init(&npct->soc);
  
 +      if (np) {
 +              prcm_np = of_parse_phandle(np, "prcm", 0);
 +              if (prcm_np)
 +                      npct->prcm_base = of_iomap(prcm_np, 0);
 +      }
 +
 +      /* Allow platform passed information to over-write DT. */
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 -      if (res) {
 +      if (res)
                npct->prcm_base = devm_ioremap(&pdev->dev, res->start,
                                               resource_size(res));
 -              if (!npct->prcm_base) {
 -                      dev_err(&pdev->dev,
 -                              "failed to ioremap PRCM registers\n");
 -                      return -ENOMEM;
 +      if (!npct->prcm_base) {
 +              if (version == PINCTRL_NMK_STN8815) {
 +                      dev_info(&pdev->dev,
 +                               "No PRCM base, "
 +                               "assuming no ALT-Cx control is available\n");
 +              } else {
 +                      dev_err(&pdev->dev, "missing PRCM base address\n");
 +                      return -EINVAL;
                }
 -      } else if (version == PINCTRL_NMK_STN8815) {
 -              dev_info(&pdev->dev,
 -                       "No PRCM base, assume no ALT-Cx control is available\n");
 -      } else {
 -              dev_err(&pdev->dev, "missing PRCM base address\n");
 -              return -EINVAL;
        }
  
        /*
@@@ -2249,10 -1963,6 +2249,10 @@@ static struct platform_driver nmk_pinct
        },
        .probe = nmk_pinctrl_probe,
        .id_table = nmk_pinctrl_id,
 +#ifdef CONFIG_PM
 +      .suspend = nmk_pinctrl_suspend,
 +      .resume = nmk_pinctrl_resume,
 +#endif
  };
  
  static int __init nmk_gpio_init(void)
index 5c20ed056054035eecf80d3ed3718bf5729127a5,7e6669cfa58fa08ce240f57b6a4940ee1d85d8c3..5f8441ef59ca1aee98ec117cf13935cae19b2d73
@@@ -716,6 -716,7 +716,6 @@@ static int samsung_pinctrl_register(str
        }
        ctrldesc->pins = pindesc;
        ctrldesc->npins = drvdata->ctrl->nr_pins;
 -      ctrldesc->npins = drvdata->ctrl->nr_pins;
  
        /* dynamically populate the pin number and pin name for pindesc */
        for (pin = 0, pdesc = pindesc; pin < ctrldesc->npins; pin++, pdesc++)
@@@ -916,11 -917,9 +916,9 @@@ static int samsung_pinctrl_probe(struc
                return -ENOENT;
        }
  
-       drvdata->virt_base = devm_request_and_ioremap(&pdev->dev, res);
-       if (!drvdata->virt_base) {
-               dev_err(dev, "ioremap failed\n");
-               return -ENODEV;
-       }
+       drvdata->virt_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(drvdata->virt_base))
+               return PTR_ERR(drvdata->virt_base);
  
        res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (res)
index 53cb6a3a56edd58885985b40800e94604cb2db9c,ae8f3a02ed97c8428e7a13c7ba2e1894c7e6f5d8..068224efa6fada7cf78ecdcf76c0ea7b68112deb
@@@ -9,6 -9,7 +9,7 @@@
   *  Copyright (C) 2012 John Crispin <blogic@openwrt.org>
   */
  
+ #include <linux/err.h>
  #include <linux/slab.h>
  #include <linux/module.h>
  #include <linux/of_platform.h>
@@@ -441,17 -442,17 +442,17 @@@ static int xway_pinconf_get(struct pinc
                if (port == PORT3)
                        reg = GPIO3_OD;
                else
 -                      reg = GPIO_OD(port);
 +                      reg = GPIO_OD(pin);
                *config = LTQ_PINCONF_PACK(param,
 -                      !!gpio_getbit(info->membase[0], reg, PORT_PIN(port)));
 +                      !gpio_getbit(info->membase[0], reg, PORT_PIN(pin)));
                break;
  
        case LTQ_PINCONF_PARAM_PULL:
                if (port == PORT3)
                        reg = GPIO3_PUDEN;
                else
 -                      reg = GPIO_PUDEN(port);
 -              if (!gpio_getbit(info->membase[0], reg, PORT_PIN(port))) {
 +                      reg = GPIO_PUDEN(pin);
 +              if (!gpio_getbit(info->membase[0], reg, PORT_PIN(pin))) {
                        *config = LTQ_PINCONF_PACK(param, 0);
                        break;
                }
                if (port == PORT3)
                        reg = GPIO3_PUDSEL;
                else
 -                      reg = GPIO_PUDSEL(port);
 -              if (!gpio_getbit(info->membase[0], reg, PORT_PIN(port)))
 +                      reg = GPIO_PUDSEL(pin);
 +              if (!gpio_getbit(info->membase[0], reg, PORT_PIN(pin)))
                        *config = LTQ_PINCONF_PACK(param, 2);
                else
                        *config = LTQ_PINCONF_PACK(param, 1);
                break;
  
 +      case LTQ_PINCONF_PARAM_OUTPUT:
 +              reg = GPIO_DIR(pin);
 +              *config = LTQ_PINCONF_PACK(param,
 +                      gpio_getbit(info->membase[0], reg, PORT_PIN(pin)));
 +              break;
        default:
                dev_err(pctldev->dev, "Invalid config param %04x\n", param);
                return -ENOTSUPP;
@@@ -493,44 -489,33 +494,44 @@@ static int xway_pinconf_set(struct pinc
                if (port == PORT3)
                        reg = GPIO3_OD;
                else
 -                      reg = GPIO_OD(port);
 -              gpio_setbit(info->membase[0], reg, PORT_PIN(port));
 +                      reg = GPIO_OD(pin);
 +              if (arg == 0)
 +                      gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
 +              else
 +                      gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
                break;
  
        case LTQ_PINCONF_PARAM_PULL:
                if (port == PORT3)
                        reg = GPIO3_PUDEN;
                else
 -                      reg = GPIO_PUDEN(port);
 +                      reg = GPIO_PUDEN(pin);
                if (arg == 0) {
 -                      gpio_clearbit(info->membase[0], reg, PORT_PIN(port));
 +                      gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
                        break;
                }
 -              gpio_setbit(info->membase[0], reg, PORT_PIN(port));
 +              gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
  
                if (port == PORT3)
                        reg = GPIO3_PUDSEL;
                else
 -                      reg = GPIO_PUDSEL(port);
 +                      reg = GPIO_PUDSEL(pin);
                if (arg == 1)
 -                      gpio_clearbit(info->membase[0], reg, PORT_PIN(port));
 +                      gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
                else if (arg == 2)
 -                      gpio_setbit(info->membase[0], reg, PORT_PIN(port));
 +                      gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
                else
                        dev_err(pctldev->dev, "Invalid pull value %d\n", arg);
                break;
  
 +      case LTQ_PINCONF_PARAM_OUTPUT:
 +              reg = GPIO_DIR(pin);
 +              if (arg == 0)
 +                      gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
 +              else
 +                      gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
 +              break;
 +
        default:
                dev_err(pctldev->dev, "Invalid config param %04x\n", param);
                return -ENOTSUPP;
        return 0;
  }
  
 +int xway_pinconf_group_set(struct pinctrl_dev *pctldev,
 +                      unsigned selector,
 +                      unsigned long config)
 +{
 +      struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctldev);
 +      int i, ret = 0;
 +
 +      for (i = 0; i < info->grps[selector].npins && !ret; i++)
 +              ret = xway_pinconf_set(pctldev,
 +                              info->grps[selector].pins[i], config);
 +
 +      return ret;
 +}
 +
  static struct pinconf_ops xway_pinconf_ops = {
        .pin_config_get = xway_pinconf_get,
        .pin_config_set = xway_pinconf_set,
 +      .pin_config_group_set = xway_pinconf_group_set,
  };
  
  static struct pinctrl_desc xway_pctrl_desc = {
@@@ -589,7 -559,6 +590,7 @@@ static inline int xway_mux_apply(struc
  static const struct ltq_cfg_param xway_cfg_params[] = {
        {"lantiq,pull",         LTQ_PINCONF_PARAM_PULL},
        {"lantiq,open-drain",   LTQ_PINCONF_PARAM_OPEN_DRAIN},
 +      {"lantiq,output",       LTQ_PINCONF_PARAM_OUTPUT},
  };
  
  static struct ltq_pinmux_info xway_info = {
@@@ -719,11 -688,9 +720,9 @@@ static int pinmux_xway_probe(struct pla
                dev_err(&pdev->dev, "Failed to get resource\n");
                return -ENOENT;
        }
-       xway_info.membase[0] = devm_request_and_ioremap(&pdev->dev, res);
-       if (!xway_info.membase[0]) {
-               dev_err(&pdev->dev, "Failed to remap resource\n");
-               return -ENOMEM;
-       }
+       xway_info.membase[0] = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(xway_info.membase[0]))
+               return PTR_ERR(xway_info.membase[0]);
  
        match = of_match_device(xway_match, &pdev->dev);
        if (match)
diff --combined drivers/spi/Kconfig
index e79884e997aea118d689723d67a0870df575999a,3105ea2edecc6719627ae15e9a4579eb5ed477b4..f80eee74a3116c5a8935378d908fce904e3351f6
@@@ -88,7 -88,7 +88,7 @@@ config SPI_BFIN_SPOR
  
  config SPI_AU1550
        tristate "Au1550/Au1200/Au1300 SPI Controller"
-       depends on MIPS_ALCHEMY && EXPERIMENTAL
+       depends on MIPS_ALCHEMY
        select SPI_BITBANG
        help
          If you say yes to this option, support will be included for the
@@@ -188,7 -188,7 +188,7 @@@ config SPI_IM
  
  config SPI_LM70_LLP
        tristate "Parallel port adapter for LM70 eval board (DEVELOPMENT)"
-       depends on PARPORT && EXPERIMENTAL
+       depends on PARPORT
        select SPI_BITBANG
        help
          This driver supports the NS LM70 LLP Evaluation Board,
@@@ -204,7 -204,7 +204,7 @@@ config SPI_MPC52x
  
  config SPI_MPC52xx_PSC
        tristate "Freescale MPC52xx PSC SPI controller"
-       depends on PPC_MPC52xx && EXPERIMENTAL
+       depends on PPC_MPC52xx
        help
          This enables using the Freescale MPC52xx Programmable Serial
          Controller in master SPI mode.
@@@ -273,8 -273,8 +273,8 @@@ config SPI_OMAP_100
          OMAP SPI 100K master controller for omap7xx boards.
  
  config SPI_ORION
-       tristate "Orion SPI master (EXPERIMENTAL)"
-       depends on PLAT_ORION && EXPERIMENTAL
+       tristate "Orion SPI master"
+       depends on PLAT_ORION
        help
          This enables using the SPI master controller on the Orion chips.
  
@@@ -297,20 -297,9 +297,20 @@@ config SPI_PPC4x
        help
          This selects a driver for the PPC4xx SPI Controller.
  
 +config SPI_PXA2XX_PXADMA
 +      bool "PXA2xx SSP legacy PXA DMA API support"
 +      depends on SPI_PXA2XX && ARCH_PXA
 +      help
 +        Enable PXA private legacy DMA API support. Note that this is
 +        deprecated in favor of generic DMA engine API.
 +
 +config SPI_PXA2XX_DMA
 +      def_bool y
 +      depends on SPI_PXA2XX && !SPI_PXA2XX_PXADMA
 +
  config SPI_PXA2XX
        tristate "PXA2xx SSP SPI master"
 -      depends on (ARCH_PXA || (X86_32 && PCI))
 +      depends on ARCH_PXA || PCI || ACPI
        select PXA_SSP if ARCH_PXA
        help
          This enables using a PXA2xx or Sodaville SSP port as a SPI master
          additional documentation can be found a Documentation/spi/pxa2xx.
  
  config SPI_PXA2XX_PCI
 -      def_bool SPI_PXA2XX && X86_32 && PCI
 +      def_tristate SPI_PXA2XX && PCI
  
  config SPI_RSPI
        tristate "Renesas RSPI controller"
  
  config SPI_S3C24XX
        tristate "Samsung S3C24XX series SPI"
-       depends on ARCH_S3C24XX && EXPERIMENTAL
+       depends on ARCH_S3C24XX
        select SPI_BITBANG
        help
          SPI driver for Samsung S3C24XX series ARM SoCs
@@@ -443,7 -432,7 +443,7 @@@ config SPI_XCOM
  
  config SPI_XILINX
        tristate "Xilinx SPI controller common module"
-       depends on HAS_IOMEM && EXPERIMENTAL
+       depends on HAS_IOMEM
        select SPI_BITBANG
        help
          This exposes the SPI controller IP from the Xilinx EDK.
  
  config SPI_NUC900
        tristate "Nuvoton NUC900 series SPI"
-       depends on ARCH_W90X900 && EXPERIMENTAL
+       depends on ARCH_W90X900
        select SPI_BITBANG
        help
          SPI driver for Nuvoton NUC900 series ARM SoCs
@@@ -489,7 -478,6 +489,6 @@@ comment "SPI Protocol Masters
  
  config SPI_SPIDEV
        tristate "User mode SPI device driver support"
-       depends on EXPERIMENTAL
        help
          This supports user mode SPI protocol drivers.
  
diff --combined drivers/spi/spi-ep93xx.c
index aecbff16ad60ca3e1f99a3b8692a6a0b3b5ca7ac,2e31f32d06f1810dae620c7cd4ed933048007931..d7bac60253c9c92cd2b542b9a17e8bd9d4088291
@@@ -446,7 -446,7 +446,7 @@@ static inline int bits_per_word(const s
        struct spi_message *msg = espi->current_msg;
        struct spi_transfer *t = msg->state;
  
 -      return t->bits_per_word ? t->bits_per_word : msg->spi->bits_per_word;
 +      return t->bits_per_word;
  }
  
  static void ep93xx_do_write(struct ep93xx_spi *espi, struct spi_transfer *t)
@@@ -1085,10 -1085,9 +1085,9 @@@ static int ep93xx_spi_probe(struct plat
  
        espi->sspdr_phys = res->start + SSPDR;
  
-       espi->regs_base = devm_request_and_ioremap(&pdev->dev, res);
-       if (!espi->regs_base) {
-               dev_err(&pdev->dev, "failed to map resources\n");
-               error = -ENODEV;
+       espi->regs_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(espi->regs_base)) {
+               error = PTR_ERR(espi->regs_base);
                goto fail_put_clock;
        }
  
diff --combined drivers/spi/spi-mxs.c
index e3d8b3197d22be04f0ed9db3f4c131c1e915905a,b735988641e030b40333205d1c832fbbd31490d7..22a0af0147fb52be3fcb4111efaaafce27b80663
@@@ -241,7 -241,6 +241,7 @@@ static int mxs_spi_txrx_dma(struct mxs_
        INIT_COMPLETION(spi->c);
  
        ctrl0 = readl(ssp->base + HW_SSP_CTRL0);
 +      ctrl0 &= ~BM_SSP_CTRL0_XFER_COUNT;
        ctrl0 |= BM_SSP_CTRL0_DATA_XFER | mxs_spi_cs_to_reg(cs);
  
        if (*first)
                if ((sg_count + 1 == sgs) && *last)
                        ctrl0 |= BM_SSP_CTRL0_IGNORE_CRC;
  
 -              if (ssp->devid == IMX23_SSP)
 +              if (ssp->devid == IMX23_SSP) {
 +                      ctrl0 &= ~BM_SSP_CTRL0_XFER_COUNT;
                        ctrl0 |= min;
 +              }
  
                dma_xfer[sg_count].pio[0] = ctrl0;
                dma_xfer[sg_count].pio[3] = min;
@@@ -541,9 -538,9 +541,9 @@@ static int mxs_spi_probe(struct platfor
        if (!iores || irq_err < 0 || irq_dma < 0)
                return -EINVAL;
  
-       base = devm_request_and_ioremap(&pdev->dev, iores);
-       if (!base)
-               return -EADDRNOTAVAIL;
+       base = devm_ioremap_resource(&pdev->dev, iores);
+       if (IS_ERR(base))
+               return PTR_ERR(base);
  
        pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
        if (IS_ERR(pinctrl))
index 69945b014c969093f57e4a207f498ec287a75eb5,71a9482f0acc3a978e00002aad69a1a3a270a0af..893c3d78e426f98253308c0ff336d62dc6168b24
@@@ -298,10 -298,10 +298,10 @@@ static void omap2_mcspi_rx_callback(voi
        struct omap2_mcspi *mcspi = spi_master_get_devdata(spi->master);
        struct omap2_mcspi_dma *mcspi_dma = &mcspi->dma_channels[spi->chip_select];
  
 -      complete(&mcspi_dma->dma_rx_completion);
 -
        /* We must disable the DMA RX request */
        omap2_mcspi_set_dma_req(spi, 1, 0);
 +
 +      complete(&mcspi_dma->dma_rx_completion);
  }
  
  static void omap2_mcspi_tx_callback(void *data)
        struct omap2_mcspi *mcspi = spi_master_get_devdata(spi->master);
        struct omap2_mcspi_dma *mcspi_dma = &mcspi->dma_channels[spi->chip_select];
  
 -      complete(&mcspi_dma->dma_tx_completion);
 -
        /* We must disable the DMA TX request */
        omap2_mcspi_set_dma_req(spi, 0, 0);
 +
 +      complete(&mcspi_dma->dma_tx_completion);
  }
  
  static void omap2_mcspi_tx_dma(struct spi_device *spi,
@@@ -927,7 -927,6 +927,7 @@@ static void omap2_mcspi_work(struct oma
  
        struct spi_device               *spi;
        struct spi_transfer             *t = NULL;
 +      struct spi_master               *master;
        int                             cs_active = 0;
        struct omap2_mcspi_cs           *cs;
        struct omap2_mcspi_device_config *cd;
        u32                             chconf;
  
        spi = m->spi;
 +      master = spi->master;
        cs = spi->controller_state;
        cd = spi->controller_data;
  
                        if (!t->speed_hz && !t->bits_per_word)
                                par_override = 0;
                }
 +              if (cd && cd->cs_per_word) {
 +                      chconf = mcspi->ctx.modulctrl;
 +                      chconf &= ~OMAP2_MCSPI_MODULCTRL_SINGLE;
 +                      mcspi_write_reg(master, OMAP2_MCSPI_MODULCTRL, chconf);
 +                      mcspi->ctx.modulctrl =
 +                              mcspi_read_cs_reg(spi, OMAP2_MCSPI_MODULCTRL);
 +              }
 +
  
                if (!cs_active) {
                        omap2_mcspi_force_cs(spi, 1);
        if (cs_active)
                omap2_mcspi_force_cs(spi, 0);
  
 +      if (cd && cd->cs_per_word) {
 +              chconf = mcspi->ctx.modulctrl;
 +              chconf |= OMAP2_MCSPI_MODULCTRL_SINGLE;
 +              mcspi_write_reg(master, OMAP2_MCSPI_MODULCTRL, chconf);
 +              mcspi->ctx.modulctrl =
 +                      mcspi_read_cs_reg(spi, OMAP2_MCSPI_MODULCTRL);
 +      }
 +
        omap2_mcspi_set_enable(spi, 0);
  
        m->status = status;
  }
  
  static int omap2_mcspi_transfer_one_message(struct spi_master *master,
 -                                              struct spi_message *m)
 +              struct spi_message *m)
  {
        struct omap2_mcspi      *mcspi;
        struct spi_transfer     *t;
                                || (len && !(rx_buf || tx_buf))
                                || (t->bits_per_word &&
                                        (  t->bits_per_word < 4
 -                                      || t->bits_per_word > 32))) {
 +                                         || t->bits_per_word > 32))) {
                        dev_dbg(mcspi->dev, "transfer: %d Hz, %d %s%s, %d bpw\n",
                                        t->speed_hz,
                                        len,
                }
                if (t->speed_hz && t->speed_hz < (OMAP2_MCSPI_MAX_FREQ >> 15)) {
                        dev_dbg(mcspi->dev, "speed_hz %d below minimum %d Hz\n",
 -                              t->speed_hz,
 -                              OMAP2_MCSPI_MAX_FREQ >> 15);
 +                                      t->speed_hz,
 +                                      OMAP2_MCSPI_MAX_FREQ >> 15);
                        return -EINVAL;
                }
  
@@@ -1117,7 -1099,7 +1117,7 @@@ static int omap2_mcspi_master_setup(str
                return ret;
  
        mcspi_write_reg(master, OMAP2_MCSPI_WAKEUPENABLE,
 -                              OMAP2_MCSPI_WAKEUPENABLE_WKEN);
 +                      OMAP2_MCSPI_WAKEUPENABLE_WKEN);
        ctx->wakeupenable = OMAP2_MCSPI_WAKEUPENABLE_WKEN;
  
        omap2_mcspi_set_master_mode(master);
@@@ -1222,10 -1204,9 +1222,9 @@@ static int omap2_mcspi_probe(struct pla
        r->end += regs_offset;
        mcspi->phys = r->start;
  
-       mcspi->base = devm_request_and_ioremap(&pdev->dev, r);
-       if (!mcspi->base) {
-               dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
-               status = -ENOMEM;
+       mcspi->base = devm_ioremap_resource(&pdev->dev, r);
+       if (IS_ERR(mcspi->base)) {
+               status = PTR_ERR(mcspi->base);
                goto free_master;
        }
  
  
                sprintf(dma_ch_name, "rx%d", i);
                dma_res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
 -                                                      dma_ch_name);
 +                              dma_ch_name);
                if (!dma_res) {
                        dev_dbg(&pdev->dev, "cannot get DMA RX channel\n");
                        status = -ENODEV;
                mcspi->dma_channels[i].dma_rx_sync_dev = dma_res->start;
                sprintf(dma_ch_name, "tx%d", i);
                dma_res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
 -                                                      dma_ch_name);
 +                              dma_ch_name);
                if (!dma_res) {
                        dev_dbg(&pdev->dev, "cannot get DMA TX channel\n");
                        status = -ENODEV;
        pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
        if (IS_ERR(pinctrl))
                dev_warn(&pdev->dev,
 -                      "pins are not configured from the driver\n");
 +                              "pins are not configured from the driver\n");
  
        pm_runtime_use_autosuspend(&pdev->dev);
        pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT);
index 7cfbe9d3381f7d00b08bc74017c38ae7c0fc6d67,3d4a7c48d74d9f0237d17bfb4dfa99c00a35169e..e862ab8853aa1f9ff242cdde3bf741dc2a257dd2
@@@ -62,7 -62,7 +62,7 @@@
  #define S3C64XX_SPI_CLKSEL_SRCMSK     (3<<9)
  #define S3C64XX_SPI_CLKSEL_SRCSHFT    9
  #define S3C64XX_SPI_ENCLK_ENABLE      (1<<8)
 -#define S3C64XX_SPI_PSR_MASK          0xff
 +#define S3C64XX_SPI_PSR_MASK          0xff
  
  #define S3C64XX_SPI_MODE_CH_TSZ_BYTE          (0<<29)
  #define S3C64XX_SPI_MODE_CH_TSZ_HALFWORD      (1<<29)
@@@ -134,6 -134,7 +134,6 @@@ struct s3c64xx_spi_dma_data 
        unsigned                ch;
        enum dma_transfer_direction direction;
        enum dma_ch     dmach;
 -      struct property         *dma_prop;
  };
  
  /**
@@@ -318,15 -319,16 +318,15 @@@ static void prepare_dma(struct s3c64xx_
  static int acquire_dma(struct s3c64xx_spi_driver_data *sdd)
  {
        struct samsung_dma_req req;
 +      struct device *dev = &sdd->pdev->dev;
  
        sdd->ops = samsung_dma_get_ops();
  
        req.cap = DMA_SLAVE;
        req.client = &s3c64xx_spi_dma_client;
  
 -      req.dt_dmach_prop = sdd->rx_dma.dma_prop;
 -      sdd->rx_dma.ch = sdd->ops->request(sdd->rx_dma.dmach, &req);
 -      req.dt_dmach_prop = sdd->tx_dma.dma_prop;
 -      sdd->tx_dma.ch = sdd->ops->request(sdd->tx_dma.dmach, &req);
 +      sdd->rx_dma.ch = sdd->ops->request(sdd->rx_dma.dmach, &req, dev, "rx");
 +      sdd->tx_dma.ch = sdd->ops->request(sdd->tx_dma.dmach, &req, dev, "tx");
  
        return 1;
  }
@@@ -695,7 -697,7 +695,7 @@@ static int s3c64xx_spi_transfer_one_mes
                INIT_COMPLETION(sdd->xfer_completion);
  
                /* Only BPW and Speed may change across transfers */
 -              bpw = xfer->bits_per_word ? : spi->bits_per_word;
 +              bpw = xfer->bits_per_word;
                speed = xfer->speed_hz ? : spi->max_speed_hz;
  
                if (xfer->len % (bpw / 8)) {
                       sdd->regs + S3C64XX_SPI_SLAVE_SEL);
  
                if (status) {
 -                      dev_err(&spi->dev, "I/O Error: "
 -                              "rx-%d tx-%d res:rx-%c tx-%c len-%d\n",
 +                      dev_err(&spi->dev, "I/O Error: rx-%d tx-%d res:rx-%c tx-%c len-%d\n",
                                xfer->rx_buf ? 1 : 0, xfer->tx_buf ? 1 : 0,
                                (sdd->state & RXBUSY) ? 'f' : 'p',
                                (sdd->state & TXBUSY) ? 'f' : 'p',
@@@ -796,7 -799,7 +796,7 @@@ static int s3c64xx_spi_prepare_transfer
  
        /* Acquire DMA channels */
        while (!acquire_dma(sdd))
 -              msleep(10);
 +              usleep_range(10000, 11000);
  
        pm_runtime_get_sync(&sdd->pdev->dev);
  
@@@ -838,14 -841,16 +838,14 @@@ static struct s3c64xx_spi_csinfo *s3c64
  
        cs = kzalloc(sizeof(*cs), GFP_KERNEL);
        if (!cs) {
 -              dev_err(&spi->dev, "could not allocate memory for controller"
 -                                      " data\n");
 +              dev_err(&spi->dev, "could not allocate memory for controller data\n");
                of_node_put(data_np);
                return ERR_PTR(-ENOMEM);
        }
  
        cs->line = of_get_named_gpio(data_np, "cs-gpio", 0);
        if (!gpio_is_valid(cs->line)) {
 -              dev_err(&spi->dev, "chip select gpio is not specified or "
 -                                      "invalid\n");
 +              dev_err(&spi->dev, "chip select gpio is not specified or invalid\n");
                kfree(cs);
                of_node_put(data_np);
                return ERR_PTR(-EINVAL);
@@@ -952,8 -957,6 +952,8 @@@ static int s3c64xx_spi_setup(struct spi
                if (spi->max_speed_hz >= speed) {
                        spi->max_speed_hz = speed;
                } else {
 +                      dev_err(&spi->dev, "Can't set %dHz transfer speed\n",
 +                              spi->max_speed_hz);
                        err = -EINVAL;
                        goto setup_exit;
                }
@@@ -1051,6 -1054,49 +1051,6 @@@ static void s3c64xx_spi_hwinit(struct s
        flush_fifo(sdd);
  }
  
 -static int s3c64xx_spi_get_dmares(
 -                      struct s3c64xx_spi_driver_data *sdd, bool tx)
 -{
 -      struct platform_device *pdev = sdd->pdev;
 -      struct s3c64xx_spi_dma_data *dma_data;
 -      struct property *prop;
 -      struct resource *res;
 -      char prop_name[15], *chan_str;
 -
 -      if (tx) {
 -              dma_data = &sdd->tx_dma;
 -              dma_data->direction = DMA_MEM_TO_DEV;
 -              chan_str = "tx";
 -      } else {
 -              dma_data = &sdd->rx_dma;
 -              dma_data->direction = DMA_DEV_TO_MEM;
 -              chan_str = "rx";
 -      }
 -
 -      if (!sdd->pdev->dev.of_node) {
 -              res = platform_get_resource(pdev, IORESOURCE_DMA, tx ? 0 : 1);
 -              if (!res) {
 -                      dev_err(&pdev->dev, "Unable to get SPI-%s dma "
 -                                      "resource\n", chan_str);
 -                      return -ENXIO;
 -              }
 -              dma_data->dmach = res->start;
 -              return 0;
 -      }
 -
 -      sprintf(prop_name, "%s-dma-channel", chan_str);
 -      prop = of_find_property(pdev->dev.of_node, prop_name, NULL);
 -      if (!prop) {
 -              dev_err(&pdev->dev, "%s dma channel property not specified\n",
 -                                      chan_str);
 -              return -ENXIO;
 -      }
 -
 -      dma_data->dmach = DMACH_DT_PROP;
 -      dma_data->dma_prop = prop;
 -      return 0;
 -}
 -
  #ifdef CONFIG_OF
  static int s3c64xx_spi_parse_dt_gpio(struct s3c64xx_spi_driver_data *sdd)
  {
@@@ -1087,7 -1133,8 +1087,7 @@@ static void s3c64xx_spi_dt_gpio_free(st
                gpio_free(sdd->gpios[idx]);
  }
  
 -static struct s3c64xx_spi_info * s3c64xx_spi_parse_dt(
 -                                              struct device *dev)
 +static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev)
  {
        struct s3c64xx_spi_info *sci;
        u32 temp;
        }
  
        if (of_property_read_u32(dev->of_node, "samsung,spi-src-clk", &temp)) {
 -              dev_warn(dev, "spi bus clock parent not specified, using "
 -                              "clock at index 0 as parent\n");
 +              dev_warn(dev, "spi bus clock parent not specified, using clock at index 0 as parent\n");
                sci->src_clk_nr = 0;
        } else {
                sci->src_clk_nr = temp;
        }
  
        if (of_property_read_u32(dev->of_node, "num-cs", &temp)) {
 -              dev_warn(dev, "number of chip select lines not specified, "
 -                              "assuming 1 chip select line\n");
 +              dev_warn(dev, "number of chip select lines not specified, assuming 1 chip select line\n");
                sci->num_cs = 1;
        } else {
                sci->num_cs = temp;
@@@ -1146,10 -1195,9 +1146,10 @@@ static inline struct s3c64xx_spi_port_c
                         platform_get_device_id(pdev)->driver_data;
  }
  
 -static int __init s3c64xx_spi_probe(struct platform_device *pdev)
 +static int s3c64xx_spi_probe(struct platform_device *pdev)
  {
        struct resource *mem_res;
 +      struct resource *res;
        struct s3c64xx_spi_driver_data *sdd;
        struct s3c64xx_spi_info *sci = pdev->dev.platform_data;
        struct spi_master *master;
        if (pdev->dev.of_node) {
                ret = of_alias_get_id(pdev->dev.of_node, "spi");
                if (ret < 0) {
 -                      dev_err(&pdev->dev, "failed to get alias id, "
 -                                              "errno %d\n", ret);
 +                      dev_err(&pdev->dev, "failed to get alias id, errno %d\n",
 +                              ret);
                        goto err0;
                }
                sdd->port_id = ret;
  
        sdd->cur_bpw = 8;
  
 -      ret = s3c64xx_spi_get_dmares(sdd, true);
 -      if (ret)
 -              goto err0;
 +      if (!sdd->pdev->dev.of_node) {
 +              res = platform_get_resource(pdev, IORESOURCE_DMA,  0);
 +              if (!res) {
 +                      dev_err(&pdev->dev, "Unable to get SPI tx dma "
 +                                      "resource\n");
 +                      return -ENXIO;
 +              }
 +              sdd->tx_dma.dmach = res->start;
  
 -      ret = s3c64xx_spi_get_dmares(sdd, false);
 -      if (ret)
 -              goto err0;
 +              res = platform_get_resource(pdev, IORESOURCE_DMA,  1);
 +              if (!res) {
 +                      dev_err(&pdev->dev, "Unable to get SPI rx dma "
 +                                      "resource\n");
 +                      return -ENXIO;
 +              }
 +              sdd->rx_dma.dmach = res->start;
 +      }
 +
 +      sdd->tx_dma.direction = DMA_MEM_TO_DEV;
 +      sdd->rx_dma.direction = DMA_DEV_TO_MEM;
  
        master->dev.of_node = pdev->dev.of_node;
        master->bus_num = sdd->port_id;
        /* the spi->mode bits understood by this driver: */
        master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
  
-       sdd->regs = devm_request_and_ioremap(&pdev->dev, mem_res);
-       if (sdd->regs == NULL) {
-               dev_err(&pdev->dev, "Unable to remap IO\n");
-               ret = -ENXIO;
+       sdd->regs = devm_ioremap_resource(&pdev->dev, mem_res);
+       if (IS_ERR(sdd->regs)) {
+               ret = PTR_ERR(sdd->regs);
 -              goto err1;
 +              goto err0;
        }
  
        if (!sci->cfg_gpio && pdev->dev.of_node) {
        } else if (sci->cfg_gpio == NULL || sci->cfg_gpio()) {
                dev_err(&pdev->dev, "Unable to config gpio\n");
                ret = -EBUSY;
 -              goto err2;
 +              goto err0;
        }
  
        /* Setup clocks */
 -      sdd->clk = clk_get(&pdev->dev, "spi");
 +      sdd->clk = devm_clk_get(&pdev->dev, "spi");
        if (IS_ERR(sdd->clk)) {
                dev_err(&pdev->dev, "Unable to acquire clock 'spi'\n");
                ret = PTR_ERR(sdd->clk);
 -              goto err3;
 +              goto err1;
        }
  
        if (clk_prepare_enable(sdd->clk)) {
                dev_err(&pdev->dev, "Couldn't enable clock 'spi'\n");
                ret = -EBUSY;
 -              goto err4;
 +              goto err1;
        }
  
        sprintf(clk_name, "spi_busclk%d", sci->src_clk_nr);
 -      sdd->src_clk = clk_get(&pdev->dev, clk_name);
 +      sdd->src_clk = devm_clk_get(&pdev->dev, clk_name);
        if (IS_ERR(sdd->src_clk)) {
                dev_err(&pdev->dev,
                        "Unable to acquire clock '%s'\n", clk_name);
                ret = PTR_ERR(sdd->src_clk);
 -              goto err5;
 +              goto err2;
        }
  
        if (clk_prepare_enable(sdd->src_clk)) {
                dev_err(&pdev->dev, "Couldn't enable clock '%s'\n", clk_name);
                ret = -EBUSY;
 -              goto err6;
 +              goto err2;
        }
  
        /* Setup Deufult Mode */
        init_completion(&sdd->xfer_completion);
        INIT_LIST_HEAD(&sdd->queue);
  
 -      ret = request_irq(irq, s3c64xx_spi_irq, 0, "spi-s3c64xx", sdd);
 +      ret = devm_request_irq(&pdev->dev, irq, s3c64xx_spi_irq, 0,
 +                              "spi-s3c64xx", sdd);
        if (ret != 0) {
                dev_err(&pdev->dev, "Failed to request IRQ %d: %d\n",
                        irq, ret);
 -              goto err7;
 +              goto err3;
        }
  
        writel(S3C64XX_SPI_INT_RX_OVERRUN_EN | S3C64XX_SPI_INT_RX_UNDERRUN_EN |
        if (spi_register_master(master)) {
                dev_err(&pdev->dev, "cannot register SPI master\n");
                ret = -EBUSY;
 -              goto err8;
 +              goto err3;
        }
  
 -      dev_dbg(&pdev->dev, "Samsung SoC SPI Driver loaded for Bus SPI-%d "
 -                                      "with %d Slaves attached\n",
 +      dev_dbg(&pdev->dev, "Samsung SoC SPI Driver loaded for Bus SPI-%d with %d Slaves attached\n",
                                        sdd->port_id, master->num_chipselect);
        dev_dbg(&pdev->dev, "\tIOmem=[0x%x-0x%x]\tDMA=[Rx-%d, Tx-%d]\n",
                                        mem_res->end, mem_res->start,
  
        return 0;
  
 -err8:
 -      free_irq(irq, sdd);
 -err7:
 +err3:
        clk_disable_unprepare(sdd->src_clk);
 -err6:
 -      clk_put(sdd->src_clk);
 -err5:
 +err2:
        clk_disable_unprepare(sdd->clk);
 -err4:
 -      clk_put(sdd->clk);
 -err3:
 +err1:
        if (!sdd->cntrlr_info->cfg_gpio && pdev->dev.of_node)
                s3c64xx_spi_dt_gpio_free(sdd);
 -err2:
 -err1:
  err0:
        platform_set_drvdata(pdev, NULL);
        spi_master_put(master);
@@@ -1346,9 -1388,13 +1345,9 @@@ static int s3c64xx_spi_remove(struct pl
  
        writel(0, sdd->regs + S3C64XX_SPI_INT_EN);
  
 -      free_irq(platform_get_irq(pdev, 0), sdd);
 -
        clk_disable_unprepare(sdd->src_clk);
 -      clk_put(sdd->src_clk);
  
        clk_disable_unprepare(sdd->clk);
 -      clk_put(sdd->clk);
  
        if (!sdd->cntrlr_info->cfg_gpio && pdev->dev.of_node)
                s3c64xx_spi_dt_gpio_free(sdd);
diff --combined drivers/spi/spi-sirf.c
index 6a5626d146b77f289f4be319a67d5d60bd0ede5c,78c8842b950110e58341709186a4a157fa6862ec..f59d4177b419975378fbe00498c3e2680c3dbb47
@@@ -382,7 -382,8 +382,7 @@@ spi_sirfsoc_setup_transfer(struct spi_d
  
        sspi = spi_master_get_devdata(spi->master);
  
 -      bits_per_word = t && t->bits_per_word ? t->bits_per_word :
 -              spi->bits_per_word;
 +      bits_per_word = (t) ? t->bits_per_word : spi->bits_per_word;
        hz = t && t->speed_hz ? t->speed_hz : spi->max_speed_hz;
  
        /* Enable IO mode for RX, TX */
@@@ -534,10 -535,9 +534,9 @@@ static int spi_sirfsoc_probe(struct pla
                }
        }
  
-       sspi->base = devm_request_and_ioremap(&pdev->dev, mem_res);
-       if (!sspi->base) {
-               dev_err(&pdev->dev, "IO remap failed!\n");
-               ret = -ENOMEM;
+       sspi->base = devm_ioremap_resource(&pdev->dev, mem_res);
+       if (IS_ERR(sspi->base)) {
+               ret = PTR_ERR(sspi->base);
                goto free_master;
        }
  
                ret = -EINVAL;
                goto free_pin;
        }
 -      clk_enable(sspi->clk);
 +      clk_prepare_enable(sspi->clk);
        sspi->ctrl_freq = clk_get_rate(sspi->clk);
  
        init_completion(&sspi->done);
        return 0;
  
  free_clk:
 -      clk_disable(sspi->clk);
 +      clk_disable_unprepare(sspi->clk);
        clk_put(sspi->clk);
  free_pin:
        pinctrl_put(sspi->p);
@@@ -617,7 -617,7 +616,7 @@@ static int  spi_sirfsoc_remove(struct p
                if (sspi->chipselect[i] > 0)
                        gpio_free(sspi->chipselect[i]);
        }
 -      clk_disable(sspi->clk);
 +      clk_disable_unprepare(sspi->clk);
        clk_put(sspi->clk);
        pinctrl_put(sspi->p);
        spi_master_put(master);
@@@ -658,7 -658,6 +657,7 @@@ static const struct dev_pm_ops spi_sirf
  
  static const struct of_device_id spi_sirfsoc_of_match[] = {
        { .compatible = "sirf,prima2-spi", },
 +      { .compatible = "sirf,marco-spi", },
        {}
  };
  MODULE_DEVICE_TABLE(of, sirfsoc_spi_of_match);
index 9a42c158e2453a099bfdba610f6a389a924c0f10,69c9d23bd47253009f0c3c2aae13800e5772beb0..8a61b27a9f2de3222b7338f0f9349fabe566e1bf
@@@ -269,7 -269,9 +269,7 @@@ static int tegra_sflash_start_transfer_
        u32 speed;
        unsigned long command;
  
 -      speed = t->speed_hz ? t->speed_hz : spi->max_speed_hz;
 -      if (!speed)
 -              speed = tsd->spi_max_frequency;
 +      speed = t->speed_hz;
        if (speed != tsd->cur_speed) {
                clk_set_rate(tsd->clk, speed);
                tsd->cur_speed = speed;
        return  tegra_sflash_start_cpu_based_transfer(tsd, t);
  }
  
 +static int tegra_sflash_setup(struct spi_device *spi)
 +{
 +      struct tegra_sflash_data *tsd = spi_master_get_devdata(spi->master);
 +
 +      /* Set speed to the spi max fequency if spi device has not set */
 +      spi->max_speed_hz = spi->max_speed_hz ? : tsd->spi_max_frequency;
 +      return 0;
 +}
 +
  static int tegra_sflash_transfer_one_message(struct spi_master *master,
                        struct spi_message *msg)
  {
@@@ -499,7 -492,6 +499,7 @@@ static int tegra_sflash_probe(struct pl
  
        /* the spi->mode bits understood by this driver: */
        master->mode_bits = SPI_CPOL | SPI_CPHA;
 +      master->setup = tegra_sflash_setup;
        master->transfer_one_message = tegra_sflash_transfer_one_message;
        master->num_chipselect = MAX_CHIP_SELECT;
        master->bus_num = -1;
                ret = -ENODEV;
                goto exit_free_master;
        }
-       tsd->base = devm_request_and_ioremap(&pdev->dev, r);
-       if (!tsd->base) {
-               dev_err(&pdev->dev,
-                       "Cannot request memregion/iomap dma address\n");
-               ret = -EADDRNOTAVAIL;
+       tsd->base = devm_ioremap_resource(&pdev->dev, r);
+       if (IS_ERR(tsd->base)) {
+               ret = PTR_ERR(tsd->base);
                goto exit_free_master;
        }
  
index 8d51db8dea6d4791c6427cb2cb3d555c3bb18463,96bd6c25a0fc2ab6f465c943f3066dc9bb1fecee..8458c4bf7172bc5459ae0e3c999911d013810c22
@@@ -284,7 -284,8 +284,7 @@@ static unsigned tegra_slink_calculate_c
        unsigned max_len;
        unsigned total_fifo_words;
  
 -      bits_per_word = t->bits_per_word ? t->bits_per_word :
 -                                              spi->bits_per_word;
 +      bits_per_word = t->bits_per_word;
        tspi->bytes_per_word = (bits_per_word - 1) / 8 + 1;
  
        if (bits_per_word == 8 || bits_per_word == 16) {
@@@ -377,7 -378,8 +377,7 @@@ static unsigned int tegra_slink_read_rx
        } else {
                unsigned int bits_per_word;
  
 -              bits_per_word = t->bits_per_word ? t->bits_per_word :
 -                                              tspi->cur_spi->bits_per_word;
 +              bits_per_word = t->bits_per_word;
                for (count = 0; count < rx_full_count; count++) {
                        x = tegra_slink_readl(tspi, SLINK_RX_FIFO);
                        for (i = 0; (i < tspi->bytes_per_word); i++)
@@@ -442,7 -444,8 +442,7 @@@ static void tegra_slink_copy_spi_rxbuf_
                unsigned int x;
                unsigned int rx_mask, bits_per_word;
  
 -              bits_per_word = t->bits_per_word ? t->bits_per_word :
 -                                              tspi->cur_spi->bits_per_word;
 +              bits_per_word = t->bits_per_word;
                rx_mask = (1 << bits_per_word) - 1;
                for (count = 0; count < tspi->curr_dma_words; count++) {
                        x = tspi->rx_dma_buf[count];
@@@ -725,7 -728,9 +725,7 @@@ static int tegra_slink_start_transfer_o
        unsigned long command2;
  
        bits_per_word = t->bits_per_word;
 -      speed = t->speed_hz ? t->speed_hz : spi->max_speed_hz;
 -      if (!speed)
 -              speed = tspi->spi_max_frequency;
 +      speed = t->speed_hz;
        if (speed != tspi->cur_speed) {
                clk_set_rate(tspi->clk, speed * 4);
                tspi->cur_speed = speed;
@@@ -836,8 -841,6 +836,8 @@@ static int tegra_slink_setup(struct spi
  
        BUG_ON(spi->chip_select >= MAX_CHIP_SELECT);
  
 +      /* Set speed to the spi max fequency if spi device has not set */
 +      spi->max_speed_hz = spi->max_speed_hz ? : tspi->spi_max_frequency;
        ret = pm_runtime_get_sync(tspi->dev);
        if (ret < 0) {
                dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret);
@@@ -1169,11 -1172,9 +1169,9 @@@ static int tegra_slink_probe(struct pla
                goto exit_free_master;
        }
        tspi->phys = r->start;
-       tspi->base = devm_request_and_ioremap(&pdev->dev, r);
-       if (!tspi->base) {
-               dev_err(&pdev->dev,
-                       "Cannot request memregion/iomap dma address\n");
-               ret = -EADDRNOTAVAIL;
+       tspi->base = devm_ioremap_resource(&pdev->dev, r);
+       if (IS_ERR(tspi->base)) {
+               ret = PTR_ERR(tspi->base);
                goto exit_free_master;
        }
  
diff --combined drivers/spi/spi.c
index 6f193b02a9e835e9efa2b5a42fa86949d5053cef,493ce4a71717544ee926bb42fa5a73ff52f5ca15..f996c600eb8c6a63b0d3122dd0b267a95d032555
@@@ -33,7 -33,7 +33,7 @@@
  #include <linux/of_gpio.h>
  #include <linux/pm_runtime.h>
  #include <linux/export.h>
 -#include <linux/sched.h>
 +#include <linux/sched/rt.h>
  #include <linux/delay.h>
  #include <linux/kthread.h>
  #include <linux/ioport.h>
@@@ -1059,14 -1059,15 +1059,14 @@@ EXPORT_SYMBOL_GPL(spi_alloc_master)
  #ifdef CONFIG_OF
  static int of_spi_register_master(struct spi_master *master)
  {
 -      u16 nb;
 -      int i, *cs;
 +      int nb, i, *cs;
        struct device_node *np = master->dev.of_node;
  
        if (!np)
                return 0;
  
        nb = of_gpio_named_count(np, "cs-gpios");
 -      master->num_chipselect = max(nb, master->num_chipselect);
 +      master->num_chipselect = max(nb, (int)master->num_chipselect);
  
        if (nb < 1)
                return 0;
        if (!master->cs_gpios)
                return -ENOMEM;
  
 -      memset(cs, -EINVAL, master->num_chipselect);
 +      for (i = 0; i < master->num_chipselect; i++)
 +              cs[i] = -EINVAL;
  
        for (i = 0; i < nb; i++)
                cs[i] = of_get_named_gpio(np, "cs-gpios", i);
@@@ -1135,9 -1135,6 +1135,9 @@@ int spi_register_master(struct spi_mast
        if (master->num_chipselect == 0)
                return -EINVAL;
  
 +      if ((master->bus_num < 0) && master->dev.of_node)
 +              master->bus_num = of_alias_get_id(master->dev.of_node, "spi");
 +
        /* convention:  dynamically assigned bus IDs count down from the max */
        if (master->bus_num < 0) {
                /* FIXME switch to an IDR based scheme, something like
@@@ -1251,10 -1248,10 +1251,10 @@@ int spi_master_resume(struct spi_maste
  }
  EXPORT_SYMBOL_GPL(spi_master_resume);
  
- static int __spi_master_match(struct device *dev, void *data)
+ static int __spi_master_match(struct device *dev, const void *data)
  {
        struct spi_master *m;
-       u16 *bus_num = data;
+       const u16 *bus_num = data;
  
        m = container_of(dev, struct spi_master, dev);
        return m->bus_num == *bus_num;
@@@ -1369,14 -1366,12 +1369,14 @@@ static int __spi_async(struct spi_devic
        }
  
        /**
 -       * Set transfer bits_per_word as spi device default if it is not
 -       * set for this transfer.
 +       * Set transfer bits_per_word and max speed as spi device default if
 +       * it is not set for this transfer.
         */
        list_for_each_entry(xfer, &message->transfers, transfer_list) {
                if (!xfer->bits_per_word)
                        xfer->bits_per_word = spi->bits_per_word;
 +              if (!xfer->speed_hz)
 +                      xfer->speed_hz = spi->max_speed_hz;
        }
  
        message->spi = spi;
@@@ -1661,8 -1656,7 +1661,8 @@@ int spi_write_then_read(struct spi_devi
         * using the pre-allocated buffer or the transfer is too large.
         */
        if ((n_tx + n_rx) > SPI_BUFSIZ || !mutex_trylock(&lock)) {
 -              local_buf = kmalloc(max((unsigned)SPI_BUFSIZ, n_tx + n_rx), GFP_KERNEL);
 +              local_buf = kmalloc(max((unsigned)SPI_BUFSIZ, n_tx + n_rx),
 +                                  GFP_KERNEL | GFP_DMA);
                if (!local_buf)
                        return -ENOMEM;
        } else {
index 2d0d144add1ba21d0f2ca8eb0752774ba5586f63,7aae0bf3b3728255edfb88525857f93dc0c71e45..2ed97769aa6d8ae7d2b93149e3339760490d5000
@@@ -1076,11 -1076,9 +1076,9 @@@ static int exynos_dp_probe(struct platf
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  
-       dp->reg_base = devm_request_and_ioremap(&pdev->dev, res);
-       if (!dp->reg_base) {
-               dev_err(&pdev->dev, "failed to ioremap\n");
-               return -ENOMEM;
-       }
+       dp->reg_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(dp->reg_base))
+               return PTR_ERR(dp->reg_base);
  
        dp->irq = platform_get_irq(pdev, 0);
        if (dp->irq == -ENXIO) {
@@@ -1121,7 -1119,8 +1119,7 @@@ static int exynos_dp_remove(struct plat
  
        disable_irq(dp->irq);
  
 -      if (work_pending(&dp->hotplug_work))
 -              flush_work(&dp->hotplug_work);
 +      flush_work(&dp->hotplug_work);
  
        if (pdev->dev.of_node) {
                if (dp->phy_addr)
@@@ -1143,7 -1142,8 +1141,7 @@@ static int exynos_dp_suspend(struct dev
        struct exynos_dp_platdata *pdata = dev->platform_data;
        struct exynos_dp_device *dp = dev_get_drvdata(dev);
  
 -      if (work_pending(&dp->hotplug_work))
 -              flush_work(&dp->hotplug_work);
 +      flush_work(&dp->hotplug_work);
  
        if (dev->of_node) {
                if (dp->phy_addr)
diff --combined include/linux/device.h
index 001f6637aa476eacb7cd75b36008ecce35d3bd53,a089676084a5b0c4e2ded872b9793917690ae9ee..9d6464ea99c69ff6f39b5368ead86f10026717d7
@@@ -21,7 -21,6 +21,7 @@@
  #include <linux/compiler.h>
  #include <linux/types.h>
  #include <linux/mutex.h>
 +#include <linux/pinctrl/devinfo.h>
  #include <linux/pm.h>
  #include <linux/atomic.h>
  #include <linux/ratelimit.h>
@@@ -396,8 -395,8 +396,8 @@@ extern int class_for_each_device(struc
                                 void *data,
                                 int (*fn)(struct device *dev, void *data));
  extern struct device *class_find_device(struct class *class,
-                                       struct device *start, void *data,
-                                       int (*match)(struct device *, void *));
+                                       struct device *start, const void *data,
+                                       int (*match)(struct device *, const void *));
  
  struct class_attribute {
        struct attribute attr;
@@@ -574,6 -573,7 +574,7 @@@ extern int devres_release_group(struct 
  extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
  extern void devm_kfree(struct device *dev, void *p);
  
+ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res);
  void __iomem *devm_request_and_ioremap(struct device *dev,
                        struct resource *res);
  
@@@ -621,8 -621,6 +622,8 @@@ struct acpi_dev_node 
   * @pm_domain:        Provide callbacks that are executed during system suspend,
   *            hibernation, system resume and during runtime PM transitions
   *            along with subsystem-level and driver-level callbacks.
 + * @pins:     For device pin management.
 + *            See Documentation/pinctrl.txt for details.
   * @numa_node:        NUMA node this device is close to.
   * @dma_mask: Dma mask (if dma'ble device).
   * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all
@@@ -675,10 -673,6 +676,10 @@@ struct device 
        struct dev_pm_info      power;
        struct dev_pm_domain    *pm_domain;
  
 +#ifdef CONFIG_PINCTRL
 +      struct dev_pin_info     *pins;
 +#endif
 +
  #ifdef CONFIG_NUMA
        int             numa_node;      /* NUMA node this device is close to */
  #endif
index 25c0982eb9b13b0066ef157fba03db61d58834a0,86ecaa679ded4448b685aa51be795f63fb3d53f4..002a99f96331dd2f7e939ae24713db9c351c0fff
@@@ -54,8 -54,6 +54,8 @@@ enum 
        POWER_SUPPLY_HEALTH_OVERVOLTAGE,
        POWER_SUPPLY_HEALTH_UNSPEC_FAILURE,
        POWER_SUPPLY_HEALTH_COLD,
 +      POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
 +      POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE,
  };
  
  enum {
@@@ -226,7 -224,7 +226,7 @@@ struct power_supply_info 
        int use_for_apm;
  };
  
- extern struct power_supply *power_supply_get_by_name(char *name);
+ extern struct power_supply *power_supply_get_by_name(const char *name);
  extern void power_supply_changed(struct power_supply *psy);
  extern int power_supply_am_i_supplied(struct power_supply *psy);
  extern int power_supply_set_battery_charged(struct power_supply *psy);
diff --combined include/linux/printk.h
index 86c4b6294713a613fff6d8c3150691967baa6124,02c95cf872cdcc478908aa27e6b9435b75cb9410..5bef3045218e07b16b72c66d646058d698b7a287
@@@ -98,6 -98,9 +98,6 @@@ int no_printk(const char *fmt, ...
  extern asmlinkage __printf(1, 2)
  void early_printk(const char *fmt, ...);
  
 -extern int printk_needs_cpu(int cpu);
 -extern void printk_tick(void);
 -
  #ifdef CONFIG_PRINTK
  asmlinkage __printf(5, 0)
  int vprintk_emit(int facility, int level,
@@@ -318,8 -321,13 +318,13 @@@ extern void hex_dump_to_buffer(const vo
  extern void print_hex_dump(const char *level, const char *prefix_str,
                           int prefix_type, int rowsize, int groupsize,
                           const void *buf, size_t len, bool ascii);
+ #if defined(CONFIG_DYNAMIC_DEBUG)
+ #define print_hex_dump_bytes(prefix_str, prefix_type, buf, len)       \
+       dynamic_hex_dump(prefix_str, prefix_type, 16, 1, buf, len, true)
+ #else
  extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
                                 const void *buf, size_t len);
+ #endif /* defined(CONFIG_DYNAMIC_DEBUG) */
  #else
  static inline void print_hex_dump(const char *level, const char *prefix_str,
                                  int prefix_type, int rowsize, int groupsize,
@@@ -333,4 -341,16 +338,16 @@@ static inline void print_hex_dump_bytes
  
  #endif
  
+ #if defined(CONFIG_DYNAMIC_DEBUG)
+ #define print_hex_dump_debug(prefix_str, prefix_type, rowsize,        \
+                            groupsize, buf, len, ascii)        \
+       dynamic_hex_dump(prefix_str, prefix_type, rowsize,      \
+                        groupsize, buf, len, ascii)
+ #else
+ #define print_hex_dump_debug(prefix_str, prefix_type, rowsize,                \
+                            groupsize, buf, len, ascii)                \
+       print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, rowsize,    \
+                      groupsize, buf, len, ascii)
+ #endif /* defined(CONFIG_DYNAMIC_DEBUG) */
  #endif
diff --combined include/linux/rtc.h
index 11d05f9fe8b6485b43ecaa00395f36919fc13e33,445fe6e7c6290a834f926a4191396e1d951449ec..580b24c8b8caeef370f436bd2a8ee02018e00228
@@@ -138,7 -138,6 +138,7 @@@ extern void rtc_device_unregister(struc
  extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm);
  extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm);
  extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs);
 +extern int rtc_set_ntp_time(struct timespec now);
  int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm);
  extern int rtc_read_alarm(struct rtc_device *rtc,
                        struct rtc_wkalrm *alrm);
@@@ -149,7 -148,7 +149,7 @@@ extern int rtc_initialize_alarm(struct 
  extern void rtc_update_irq(struct rtc_device *rtc,
                        unsigned long num, unsigned long events);
  
- extern struct rtc_device *rtc_class_open(char *name);
+ extern struct rtc_device *rtc_class_open(const char *name);
  extern void rtc_class_close(struct rtc_device *rtc);
  
  extern int rtc_irq_register(struct rtc_device *rtc,
diff --combined init/Kconfig
index 7000d96574025bda58c5253cf10e92d0249de9eb,a966690e447ffa4af4621db5921ee040ff492128..335a1f680c918058e6ac4b12dadabd8f17294fb8
@@@ -20,8 -20,12 +20,8 @@@ config CONSTRUCTOR
        bool
        depends on !UML
  
 -config HAVE_IRQ_WORK
 -      bool
 -
  config IRQ_WORK
        bool
 -      depends on HAVE_IRQ_WORK
  
  config BUILDTIME_EXTABLE_SORT
        bool
  menu "General setup"
  
  config EXPERIMENTAL
-       bool "Prompt for development and/or incomplete code/drivers"
-       ---help---
-         Some of the various things that Linux supports (such as network
-         drivers, file systems, network protocols, etc.) can be in a state
-         of development where the functionality, stability, or the level of
-         testing is not yet high enough for general use. This is usually
-         known as the "alpha-test" phase among developers. If a feature is
-         currently in alpha-test, then the developers usually discourage
-         uninformed widespread use of this feature by the general public to
-         avoid "Why doesn't this work?" type mail messages. However, active
-         testing and use of these systems is welcomed. Just be aware that it
-         may not meet the normal level of reliability or it may fail to work
-         in some special cases. Detailed bug reports from people familiar
-         with the kernel internals are usually welcomed by the developers
-         (before submitting bug reports, please read the documents
-         <file:README>, <file:MAINTAINERS>, <file:REPORTING-BUGS>,
-         <file:Documentation/BUG-HUNTING>, and
-         <file:Documentation/oops-tracing.txt> in the kernel source).
-         This option will also make obsoleted drivers available. These are
-         drivers that have been replaced by something else, and/or are
-         scheduled to be removed in a future kernel release.
-         Unless you intend to help test and develop a feature or driver that
-         falls into this category, or you have a situation that requires
-         using these features, you should probably say N here, which will
-         cause the configurator to present you with fewer choices. If
-         you say Y here, you will be offered the choice of using features or
-         drivers that are currently considered to be in the alpha-test phase.
+       bool
+       default y
  
  config BROKEN
        bool
@@@ -243,7 -220,7 +216,7 @@@ config SYSVIPC_SYSCT
  
  config POSIX_MQUEUE
        bool "POSIX Message Queues"
-       depends on NET && EXPERIMENTAL
+       depends on NET
        ---help---
          POSIX variant of message queues is a part of IPC. In POSIX message
          queues every message has a priority which decides about succession
@@@ -322,13 -299,10 +295,13 @@@ source "kernel/time/Kconfig
  
  menu "CPU/Task time and stats accounting"
  
 +config VIRT_CPU_ACCOUNTING
 +      bool
 +
  choice
        prompt "Cputime accounting"
        default TICK_CPU_ACCOUNTING if !PPC64
 -      default VIRT_CPU_ACCOUNTING if PPC64
 +      default VIRT_CPU_ACCOUNTING_NATIVE if PPC64
  
  # Kind of a stub config for the pure tick based cputime accounting
  config TICK_CPU_ACCOUNTING
  
          If unsure, say Y.
  
 -config VIRT_CPU_ACCOUNTING
 +config VIRT_CPU_ACCOUNTING_NATIVE
        bool "Deterministic task and CPU time accounting"
        depends on HAVE_VIRT_CPU_ACCOUNTING
 +      select VIRT_CPU_ACCOUNTING
        help
          Select this option to enable more accurate task and CPU time
          accounting.  This is done by reading a CPU counter on each
          this also enables accounting of stolen time on logically-partitioned
          systems.
  
 +config VIRT_CPU_ACCOUNTING_GEN
 +      bool "Full dynticks CPU time accounting"
 +      depends on HAVE_CONTEXT_TRACKING && 64BIT
 +      select VIRT_CPU_ACCOUNTING
 +      select CONTEXT_TRACKING
 +      help
 +        Select this option to enable task and CPU time accounting on full
 +        dynticks systems. This accounting is implemented by watching every
 +        kernel-user boundaries using the context tracking subsystem.
 +        The accounting is thus performed at the expense of some significant
 +        overhead.
 +
 +        For now this is only useful if you are working on the full
 +        dynticks subsystem development.
 +
 +        If unsure, say N.
 +
  config IRQ_TIME_ACCOUNTING
        bool "Fine granularity task level IRQ time accounting"
        depends on HAVE_IRQ_TIME_ACCOUNTING
@@@ -410,7 -366,7 +383,7 @@@ config BSD_PROCESS_ACCT_V
          at <http://www.gnu.org/software/acct/>.
  
  config TASKSTATS
-       bool "Export task/process statistics through netlink (EXPERIMENTAL)"
+       bool "Export task/process statistics through netlink"
        depends on NET
        default n
        help
          Say N if unsure.
  
  config TASK_DELAY_ACCT
-       bool "Enable per-task delay accounting (EXPERIMENTAL)"
+       bool "Enable per-task delay accounting"
        depends on TASKSTATS
        help
          Collect information on time spent by a task waiting for system
          Say N if unsure.
  
  config TASK_XACCT
-       bool "Enable extended accounting over taskstats (EXPERIMENTAL)"
+       bool "Enable extended accounting over taskstats"
        depends on TASKSTATS
        help
          Collect extended task accounting data and send the data
          Say N if unsure.
  
  config TASK_IO_ACCOUNTING
-       bool "Enable per-task storage I/O accounting (EXPERIMENTAL)"
+       bool "Enable per-task storage I/O accounting"
        depends on TASK_XACCT
        help
          Collect information on the number of bytes of storage I/O which this
@@@ -470,7 -426,7 +443,7 @@@ config TREE_RC
  
  config TREE_PREEMPT_RCU
        bool "Preemptible tree-based hierarchical RCU"
 -      depends on PREEMPT && SMP
 +      depends on PREEMPT
        help
          This option selects the RCU implementation that is
          designed for very large SMP systems with hundreds or
          is also required.  It also scales down nicely to
          smaller systems.
  
 +        Select this option if you are unsure.
 +
  config TINY_RCU
        bool "UP-only small-memory-footprint RCU"
        depends on !PREEMPT && !SMP
@@@ -505,14 -459,6 +478,14 @@@ config PREEMPT_RC
          This option enables preemptible-RCU code that is common between
          the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations.
  
 +config RCU_STALL_COMMON
 +      def_bool ( TREE_RCU || TREE_PREEMPT_RCU || RCU_TRACE )
 +      help
 +        This option enables RCU CPU stall code that is common between
 +        the TINY and TREE variants of RCU.  The purpose is to allow
 +        the tiny variants to disable RCU CPU stall warnings, while
 +        making these warnings mandatory for the tree variants.
 +
  config CONTEXT_TRACKING
         bool
  
@@@ -907,8 -853,8 +880,8 @@@ config MEMCG_SWAP_ENABLE
          select this option (if, for some reason, they need to disable it
          then swapaccount=0 does the trick).
  config MEMCG_KMEM
-       bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)"
-       depends on MEMCG && EXPERIMENTAL
+       bool "Memory Resource Controller Kernel Memory accounting"
+       depends on MEMCG
        depends on SLUB || SLAB
        help
          The Kernel Memory extension for Memory Resource Controller can limit
  
  config CGROUP_HUGETLB
        bool "HugeTLB Resource Controller for Control Groups"
-       depends on RESOURCE_COUNTERS && HUGETLB_PAGE && EXPERIMENTAL
+       depends on RESOURCE_COUNTERS && HUGETLB_PAGE
        default n
        help
          Provides a cgroup Resource Controller for HugeTLB pages.
@@@ -959,7 -905,6 +932,6 @@@ config FAIR_GROUP_SCHE
  
  config CFS_BANDWIDTH
        bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED"
-       depends on EXPERIMENTAL
        depends on FAIR_GROUP_SCHED
        default n
        help
  
  config RT_GROUP_SCHED
        bool "Group scheduling for SCHED_RR/FIFO"
-       depends on EXPERIMENTAL
        depends on CGROUP_SCHED
        default n
        help
@@@ -1053,8 -997,7 +1024,7 @@@ config IPC_N
          different IPC objects in different namespaces.
  
  config USER_NS
-       bool "User namespace (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       bool "User namespace"
        depends on UIDGID_CONVERTED
        select UIDGID_STRICT_TYPE_CHECKS
  
@@@ -1290,7 -1233,6 +1260,7 @@@ config HOTPLU
  config PRINTK
        default y
        bool "Enable support for printk" if EXPERT
 +      select IRQ_WORK
        help
          This option enables normal printk support. Removing it
          eliminates most of the message strings from the kernel image
@@@ -1636,7 -1578,7 +1606,7 @@@ config MODULE_UNLOA
  
  config MODULE_FORCE_UNLOAD
        bool "Forced module unloading"
-       depends on MODULE_UNLOAD && EXPERIMENTAL
+       depends on MODULE_UNLOAD
        help
          This option allows you to force a module to unload, even if the
          kernel believes it is unsafe: the kernel will remove the module
diff --combined lib/Kconfig.debug
index a1714c897e3f185778ece70c9797063968dd4d4f,849ecaea2b43d826a5fb00da8109c9f769734751..bb8d9b136cf9d2ed67b61dfda299410694f36b24
@@@ -455,7 -455,7 +455,7 @@@ config HAVE_DEBUG_KMEMLEA
  
  config DEBUG_KMEMLEAK
        bool "Kernel memory leak detector"
-       depends on DEBUG_KERNEL && EXPERIMENTAL && HAVE_DEBUG_KMEMLEAK
+       depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK
        select DEBUG_FS
        select STACKTRACE if STACKTRACE_SUPPORT
        select KALLSYMS
@@@ -605,6 -605,61 +605,6 @@@ config PROVE_LOCKIN
  
         For more details, see Documentation/lockdep-design.txt.
  
 -config PROVE_RCU
 -      bool "RCU debugging: prove RCU correctness"
 -      depends on PROVE_LOCKING
 -      default n
 -      help
 -       This feature enables lockdep extensions that check for correct
 -       use of RCU APIs.  This is currently under development.  Say Y
 -       if you want to debug RCU usage or help work on the PROVE_RCU
 -       feature.
 -
 -       Say N if you are unsure.
 -
 -config PROVE_RCU_REPEATEDLY
 -      bool "RCU debugging: don't disable PROVE_RCU on first splat"
 -      depends on PROVE_RCU
 -      default n
 -      help
 -       By itself, PROVE_RCU will disable checking upon issuing the
 -       first warning (or "splat").  This feature prevents such
 -       disabling, allowing multiple RCU-lockdep warnings to be printed
 -       on a single reboot.
 -
 -       Say Y to allow multiple RCU-lockdep warnings per boot.
 -
 -       Say N if you are unsure.
 -
 -config PROVE_RCU_DELAY
 -      bool "RCU debugging: preemptible RCU race provocation"
 -      depends on DEBUG_KERNEL && PREEMPT_RCU
 -      default n
 -      help
 -       There is a class of races that involve an unlikely preemption
 -       of __rcu_read_unlock() just after ->rcu_read_lock_nesting has
 -       been set to INT_MIN.  This feature inserts a delay at that
 -       point to increase the probability of these races.
 -
 -       Say Y to increase probability of preemption of __rcu_read_unlock().
 -
 -       Say N if you are unsure.
 -
 -config SPARSE_RCU_POINTER
 -      bool "RCU debugging: sparse-based checks for pointer usage"
 -      default n
 -      help
 -       This feature enables the __rcu sparse annotation for
 -       RCU-protected pointers.  This annotation will cause sparse
 -       to flag any non-RCU used of annotated pointers.  This can be
 -       helpful when debugging RCU usage.  Please note that this feature
 -       is not intended to enforce code cleanliness; it is instead merely
 -       a debugging aid.
 -
 -       Say Y to make sparse flag questionable use of RCU-protected pointers
 -
 -       Say N if you are unsure.
 -
  config LOCKDEP
        bool
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
@@@ -882,63 -937,6 +882,63 @@@ config BOOT_PRINTK_DELA
          BOOT_PRINTK_DELAY also may cause LOCKUP_DETECTOR to detect
          what it believes to be lockup conditions.
  
 +menu "RCU Debugging"
 +
 +config PROVE_RCU
 +      bool "RCU debugging: prove RCU correctness"
 +      depends on PROVE_LOCKING
 +      default n
 +      help
 +       This feature enables lockdep extensions that check for correct
 +       use of RCU APIs.  This is currently under development.  Say Y
 +       if you want to debug RCU usage or help work on the PROVE_RCU
 +       feature.
 +
 +       Say N if you are unsure.
 +
 +config PROVE_RCU_REPEATEDLY
 +      bool "RCU debugging: don't disable PROVE_RCU on first splat"
 +      depends on PROVE_RCU
 +      default n
 +      help
 +       By itself, PROVE_RCU will disable checking upon issuing the
 +       first warning (or "splat").  This feature prevents such
 +       disabling, allowing multiple RCU-lockdep warnings to be printed
 +       on a single reboot.
 +
 +       Say Y to allow multiple RCU-lockdep warnings per boot.
 +
 +       Say N if you are unsure.
 +
 +config PROVE_RCU_DELAY
 +      bool "RCU debugging: preemptible RCU race provocation"
 +      depends on DEBUG_KERNEL && PREEMPT_RCU
 +      default n
 +      help
 +       There is a class of races that involve an unlikely preemption
 +       of __rcu_read_unlock() just after ->rcu_read_lock_nesting has
 +       been set to INT_MIN.  This feature inserts a delay at that
 +       point to increase the probability of these races.
 +
 +       Say Y to increase probability of preemption of __rcu_read_unlock().
 +
 +       Say N if you are unsure.
 +
 +config SPARSE_RCU_POINTER
 +      bool "RCU debugging: sparse-based checks for pointer usage"
 +      default n
 +      help
 +       This feature enables the __rcu sparse annotation for
 +       RCU-protected pointers.  This annotation will cause sparse
 +       to flag any non-RCU used of annotated pointers.  This can be
 +       helpful when debugging RCU usage.  Please note that this feature
 +       is not intended to enforce code cleanliness; it is instead merely
 +       a debugging aid.
 +
 +       Say Y to make sparse flag questionable use of RCU-protected pointers
 +
 +       Say N if you are unsure.
 +
  config RCU_TORTURE_TEST
        tristate "torture tests for RCU"
        depends on DEBUG_KERNEL
@@@ -972,7 -970,7 +972,7 @@@ config RCU_TORTURE_TEST_RUNNABL
  
  config RCU_CPU_STALL_TIMEOUT
        int "RCU CPU stall timeout in seconds"
 -      depends on TREE_RCU || TREE_PREEMPT_RCU
 +      depends on RCU_STALL_COMMON
        range 3 300
        default 21
        help
@@@ -1010,7 -1008,6 +1010,7 @@@ config RCU_CPU_STALL_INF
  config RCU_TRACE
        bool "Enable tracing for RCU"
        depends on DEBUG_KERNEL
 +      select TRACE_CLOCK
        help
          This option provides tracing in RCU which presents stats
          in debugfs for debugging RCU implementation.
          Say Y here if you want to enable RCU tracing
          Say N if you are unsure.
  
 +endmenu # "RCU Debugging"
 +
  config KPROBES_SANITY_TEST
        bool "Kprobes sanity tests"
        depends on DEBUG_KERNEL
diff --combined net/Kconfig
index 5a1888bb036dd42ed478137c2b3e22b867d1ee1f,7bdab2657106d84b7ea3a99bb6d4582a38c0fe94..6f676ab885be52b442fea9a0d0f0898e67da50a2
@@@ -90,7 -90,6 +90,6 @@@ config NETWORK_SECMAR
  
  config NETWORK_PHY_TIMESTAMPING
        bool "Timestamping in PHY devices"
-       depends on EXPERIMENTAL
        help
          This allows timestamping of network packets by PHYs with
          hardware timestamping capabilities. This option adds some
@@@ -209,6 -208,7 +208,6 @@@ source "net/ipx/Kconfig
  source "drivers/net/appletalk/Kconfig"
  source "net/x25/Kconfig"
  source "net/lapb/Kconfig"
 -source "net/wanrouter/Kconfig"
  source "net/phonet/Kconfig"
  source "net/ieee802154/Kconfig"
  source "net/mac802154/Kconfig"
@@@ -217,7 -217,6 +216,7 @@@ source "net/dcb/Kconfig
  source "net/dns_resolver/Kconfig"
  source "net/batman-adv/Kconfig"
  source "net/openvswitch/Kconfig"
 +source "net/vmw_vsock/Kconfig"
  
  config RPS
        boolean
@@@ -232,7 -231,7 +231,7 @@@ config RFS_ACCE
  
  config XPS
        boolean
 -      depends on SMP && SYSFS && USE_GENERIC_SMP_HELPERS
 +      depends on SMP && USE_GENERIC_SMP_HELPERS
        default y
  
  config NETPRIO_CGROUP
@@@ -278,7 -277,7 +277,7 @@@ config NET_PKTGE
  
  config NET_TCPPROBE
        tristate "TCP connection probing"
-       depends on INET && EXPERIMENTAL && PROC_FS && KPROBES
+       depends on INET && PROC_FS && KPROBES
        ---help---
        This module allows for capturing the changes to TCP connection
        state in response to incoming packets. It is used for debugging
  
  config NET_DROP_MONITOR
        tristate "Network packet drop alerting service"
-       depends on INET && EXPERIMENTAL && TRACEPOINTS
+       depends on INET && TRACEPOINTS
        ---help---
        This feature provides an alerting service to userspace in the
        event that packets are discarded in the network stack.  Alerts
diff --combined net/mac80211/Kconfig
index 0ecf947ad3783363385b9bfa0af0320e96935755,ff57ecc71be352389cf69dbf6d0975a4d742184e..62535fe9f570273d83597567e8fb360262f7f208
@@@ -81,7 -81,7 +81,7 @@@ comment "Some wireless drivers require 
  
  config MAC80211_MESH
        bool "Enable mac80211 mesh networking (pre-802.11s) support"
-       depends on MAC80211 && EXPERIMENTAL
+       depends on MAC80211
        ---help---
         This options enables support of Draft 802.11s mesh networking.
         The implementation is based on Draft 2.08 of the Mesh Networking
@@@ -258,17 -258,6 +258,17 @@@ config MAC80211_MESH_SYNC_DEBU
  
          Do not select this option.
  
 +config MAC80211_MESH_PS_DEBUG
 +      bool "Verbose mesh powersave debugging"
 +      depends on MAC80211_DEBUG_MENU
 +      depends on MAC80211_MESH
 +      ---help---
 +        Selecting this option causes mac80211 to print out very verbose mesh
 +        powersave debugging messages (when mac80211 is taking part in a
 +        mesh network).
 +
 +        Do not select this option.
 +
  config MAC80211_TDLS_DEBUG
        bool "Verbose TDLS debugging"
        depends on MAC80211_DEBUG_MENU
diff --combined net/netfilter/Kconfig
index d4dd702574e4cafeccfa4272b4da4c23bbeacb09,456833d7aaeaa205c25e083471f626b69dcd372a..56d22cae590683c9a3b530ad0152b105d5c19c2d
@@@ -124,15 -124,8 +124,14 @@@ config NF_CONNTRACK_TIMESTAM
  
          If unsure, say `N'.
  
 +config NF_CONNTRACK_LABELS
 +      bool
 +      help
 +        This option enables support for assigning user-defined flag bits
 +        to connection tracking entries.  It selected by the connlabel match.
 +
  config NF_CT_PROTO_DCCP
-       tristate 'DCCP protocol connection tracking support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate 'DCCP protocol connection tracking support'
        depends on NETFILTER_ADVANCED
        default IP_DCCP
        help
@@@ -145,8 -138,7 +144,7 @@@ config NF_CT_PROTO_GR
        tristate
  
  config NF_CT_PROTO_SCTP
-       tristate 'SCTP protocol connection tracking support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate 'SCTP protocol connection tracking support'
        depends on NETFILTER_ADVANCED
        default IP_SCTP
        help
@@@ -287,8 -279,7 +285,7 @@@ config NF_CONNTRACK_PPT
          To compile it as a module, choose M here.  If unsure, say N.
  
  config NF_CONNTRACK_SANE
-       tristate "SANE protocol support (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       tristate "SANE protocol support"
        depends on NETFILTER_ADVANCED
        help
          SANE is a protocol for remote access to scanners as implemented
@@@ -415,8 -406,7 +412,7 @@@ endif # NF_CONNTRAC
  
  # transparent proxy support
  config NETFILTER_TPROXY
-       tristate "Transparent proxying support (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       tristate "Transparent proxying support"
        depends on IP_NF_MANGLE
        depends on NETFILTER_ADVANCED
        help
@@@ -724,8 -714,7 +720,7 @@@ config NETFILTER_XT_TARGET_TE
        this clone be rerouted to another nexthop.
  
  config NETFILTER_XT_TARGET_TPROXY
-       tristate '"TPROXY" target support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate '"TPROXY" target support'
        depends on NETFILTER_TPROXY
        depends on NETFILTER_XTABLES
        depends on NETFILTER_ADVANCED
@@@ -789,8 -778,7 +784,7 @@@ config NETFILTER_XT_TARGET_TCPMS
          To compile it as a module, choose M here.  If unsure, say N.
  
  config NETFILTER_XT_TARGET_TCPOPTSTRIP
-       tristate '"TCPOPTSTRIP" target support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate '"TCPOPTSTRIP" target support'
        depends on IP_NF_MANGLE || IP6_NF_MANGLE
        depends on NETFILTER_ADVANCED
        help
@@@ -811,15 -799,6 +805,15 @@@ config NETFILTER_XT_MATCH_ADDRTYP
          If you want to compile it as a module, say M here and read
          <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
  
 +config NETFILTER_XT_MATCH_BPF
 +      tristate '"bpf" match support'
 +      depends on NETFILTER_ADVANCED
 +      help
 +        BPF matching applies a linux socket filter to each packet and
 +        accepts those for which the filter returns non-zero.
 +
 +        To compile it as a module, choose M here.  If unsure, say N.
 +
  config NETFILTER_XT_MATCH_CLUSTER
        tristate '"cluster" match support'
        depends on NF_CONNTRACK
@@@ -857,19 -836,6 +851,19 @@@ config NETFILTER_XT_MATCH_CONNBYTE
          If you want to compile it as a module, say M here and read
          <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
  
 +config NETFILTER_XT_MATCH_CONNLABEL
 +      tristate '"connlabel" match support'
 +      select NF_CONNTRACK_LABELS
 +      depends on NF_CONNTRACK
 +      depends on NETFILTER_ADVANCED
 +      ---help---
 +        This match allows you to test and assign userspace-defined labels names
 +        to a connection.  The kernel only stores bit values - mapping
 +        names to bits is done by userspace.
 +
 +        Unlike connmark, more than 32 flag bits may be assigned to a
 +        connection simultaneously.
 +
  config NETFILTER_XT_MATCH_CONNLIMIT
        tristate '"connlimit" match support"'
        depends on NF_CONNTRACK
@@@ -1173,8 -1139,7 +1167,7 @@@ config NETFILTER_XT_MATCH_RECEN
        Official Website: <http://snowman.net/projects/ipt_recent/>
  
  config NETFILTER_XT_MATCH_SCTP
-       tristate  '"sctp" protocol match support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate  '"sctp" protocol match support'
        depends on NETFILTER_ADVANCED
        default IP_SCTP
        help
          <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
  
  config NETFILTER_XT_MATCH_SOCKET
-       tristate '"socket" match support (EXPERIMENTAL)'
-       depends on EXPERIMENTAL
+       tristate '"socket" match support'
        depends on NETFILTER_TPROXY
        depends on NETFILTER_XTABLES
        depends on NETFILTER_ADVANCED
diff --combined net/nfc/core.c
index 25522e56d3507645e6aa4d89bc692da91263dad9,0f4a6de6f16183bac66baf5a5d7a4b8dd2710011..6ceee8e181ca9e4f75b1745f22d8e818ebfb1cda
@@@ -338,7 -338,7 +338,7 @@@ int nfc_activate_target(struct nfc_dev 
                dev->active_target = target;
                dev->rf_mode = NFC_RF_INITIATOR;
  
 -              if (dev->ops->check_presence)
 +              if (dev->ops->check_presence && !dev->shutting_down)
                        mod_timer(&dev->check_pres_timer, jiffies +
                                  msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
        }
@@@ -429,7 -429,7 +429,7 @@@ int nfc_data_exchange(struct nfc_dev *d
                rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb,
                                             cb_context);
  
 -              if (!rc && dev->ops->check_presence)
 +              if (!rc && dev->ops->check_presence && !dev->shutting_down)
                        mod_timer(&dev->check_pres_timer, jiffies +
                                  msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
        } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) {
@@@ -684,6 -684,11 +684,6 @@@ static void nfc_release(struct device *
  
        pr_debug("dev_name=%s\n", dev_name(&dev->dev));
  
 -      if (dev->ops->check_presence) {
 -              del_timer_sync(&dev->check_pres_timer);
 -              cancel_work_sync(&dev->check_pres_work);
 -      }
 -
        nfc_genl_data_exit(&dev->genl_data);
        kfree(dev->targets);
        kfree(dev);
@@@ -701,16 -706,15 +701,16 @@@ static void nfc_check_pres_work(struct 
                rc = dev->ops->check_presence(dev, dev->active_target);
                if (rc == -EOPNOTSUPP)
                        goto exit;
 -              if (!rc) {
 -                      mod_timer(&dev->check_pres_timer, jiffies +
 -                                msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
 -              } else {
 +              if (rc) {
                        u32 active_target_idx = dev->active_target->idx;
                        device_unlock(&dev->dev);
                        nfc_target_lost(dev, active_target_idx);
                        return;
                }
 +
 +              if (!dev->shutting_down)
 +                      mod_timer(&dev->check_pres_timer, jiffies +
 +                                msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
        }
  
  exit:
@@@ -730,10 -734,10 +730,10 @@@ struct class nfc_class = 
  };
  EXPORT_SYMBOL(nfc_class);
  
- static int match_idx(struct device *d, void *data)
+ static int match_idx(struct device *d, const void *data)
  {
        struct nfc_dev *dev = to_nfc_dev(d);
-       unsigned int *idx = data;
+       const unsigned int *idx = data;
  
        return dev->idx == *idx;
  }
@@@ -757,7 -761,6 +757,7 @@@ struct nfc_dev *nfc_get_device(unsigne
   */
  struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops,
                                    u32 supported_protocols,
 +                                  u32 supported_se,
                                    int tx_headroom, int tx_tailroom)
  {
        struct nfc_dev *dev;
  
        dev->ops = ops;
        dev->supported_protocols = supported_protocols;
 +      dev->supported_se = supported_se;
 +      dev->active_se = NFC_SE_NONE;
        dev->tx_headroom = tx_headroom;
        dev->tx_tailroom = tx_tailroom;
  
@@@ -852,27 -853,26 +852,27 @@@ void nfc_unregister_device(struct nfc_d
  
        id = dev->idx;
  
 -      mutex_lock(&nfc_devlist_mutex);
 -      nfc_devlist_generation++;
 -
 -      /* lock to avoid unregistering a device while an operation
 -         is in progress */
 -      device_lock(&dev->dev);
 -      device_del(&dev->dev);
 -      device_unlock(&dev->dev);
 +      if (dev->ops->check_presence) {
 +              device_lock(&dev->dev);
 +              dev->shutting_down = true;
 +              device_unlock(&dev->dev);
 +              del_timer_sync(&dev->check_pres_timer);
 +              cancel_work_sync(&dev->check_pres_work);
 +      }
  
 -      mutex_unlock(&nfc_devlist_mutex);
 +      rc = nfc_genl_device_removed(dev);
 +      if (rc)
 +              pr_debug("The userspace won't be notified that the device %s "
 +                       "was removed\n", dev_name(&dev->dev));
  
        nfc_llcp_unregister_device(dev);
  
 -      rc = nfc_genl_device_removed(dev);
 -      if (rc)
 -              pr_debug("The userspace won't be notified that the device %s was removed\n",
 -                       dev_name(&dev->dev));
 +      mutex_lock(&nfc_devlist_mutex);
 +      nfc_devlist_generation++;
 +      device_del(&dev->dev);
 +      mutex_unlock(&nfc_devlist_mutex);
  
        ida_simple_remove(&nfc_index_ida, id);
 -
  }
  EXPORT_SYMBOL(nfc_unregister_device);
  
index fab912ea7a5098e7d168eafd236792918a043727,c21ac9c7081e076ab2fe49aaee2d681012eb41d1..3f333e5b4673c4174355ab05cc2b1b5ea83c77a0
@@@ -176,7 -176,7 +176,7 @@@ static inline void audmux_debugfs_remov
  }
  #endif
  
 -enum imx_audmux_type {
 +static enum imx_audmux_type {
        IMX21_AUDMUX,
        IMX31_AUDMUX,
  } audmux_type;
@@@ -252,9 -252,9 +252,9 @@@ static int imx_audmux_probe(struct plat
                        of_match_device(imx_audmux_dt_ids, &pdev->dev);
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       audmux_base = devm_request_and_ioremap(&pdev->dev, res);
-       if (!audmux_base)
-               return -EADDRNOTAVAIL;
+       audmux_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(audmux_base))
+               return PTR_ERR(audmux_base);
  
        pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
        if (IS_ERR(pinctrl)) {
diff --combined sound/soc/mxs/mxs-saif.c
index e70e6c844f96b29ca631e69841aea53b51886d00,b327709eb1927d457021754b80d8068dc2a75fdc..3a2aa1d19b936d5a830513cf43ad3175eea82c2c
@@@ -32,6 -32,7 +32,6 @@@
  #include <sound/pcm.h>
  #include <sound/pcm_params.h>
  #include <sound/soc.h>
 -#include <sound/saif.h>
  #include <asm/mach-types.h>
  #include <mach/hardware.h>
  #include <mach/mxs.h>
@@@ -661,40 -662,46 +661,40 @@@ static int mxs_saif_probe(struct platfo
        struct device_node *np = pdev->dev.of_node;
        struct resource *iores, *dmares;
        struct mxs_saif *saif;
 -      struct mxs_saif_platform_data *pdata;
        struct pinctrl *pinctrl;
        int ret = 0;
 +      struct device_node *master;
  
 -
 -      if (!np && pdev->id >= ARRAY_SIZE(mxs_saif))
 +      if (!np)
                return -EINVAL;
  
        saif = devm_kzalloc(&pdev->dev, sizeof(*saif), GFP_KERNEL);
        if (!saif)
                return -ENOMEM;
  
 -      if (np) {
 -              struct device_node *master;
 -              saif->id = of_alias_get_id(np, "saif");
 -              if (saif->id < 0)
 -                      return saif->id;
 -              /*
 -               * If there is no "fsl,saif-master" phandle, it's a saif
 -               * master.  Otherwise, it's a slave and its phandle points
 -               * to the master.
 -               */
 -              master = of_parse_phandle(np, "fsl,saif-master", 0);
 -              if (!master) {
 -                      saif->master_id = saif->id;
 -              } else {
 -                      saif->master_id = of_alias_get_id(master, "saif");
 -                      if (saif->master_id < 0)
 -                              return saif->master_id;
 -              }
 +      ret = of_alias_get_id(np, "saif");
 +      if (ret < 0)
 +              return ret;
 +      else
 +              saif->id = ret;
 +
 +      /*
 +       * If there is no "fsl,saif-master" phandle, it's a saif
 +       * master.  Otherwise, it's a slave and its phandle points
 +       * to the master.
 +       */
 +      master = of_parse_phandle(np, "fsl,saif-master", 0);
 +      if (!master) {
 +              saif->master_id = saif->id;
        } else {
 -              saif->id = pdev->id;
 -              pdata = pdev->dev.platform_data;
 -              if (pdata && !pdata->master_mode)
 -                      saif->master_id = pdata->master_id;
 +              ret = of_alias_get_id(master, "saif");
 +              if (ret < 0)
 +                      return ret;
                else
 -                      saif->master_id = saif->id;
 +                      saif->master_id = ret;
        }
  
 -      if (saif->master_id < 0 || saif->master_id >= ARRAY_SIZE(mxs_saif)) {
 +      if (saif->master_id >= ARRAY_SIZE(mxs_saif)) {
                dev_err(&pdev->dev, "get wrong master id\n");
                return -EINVAL;
        }
  
        iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  
-       saif->base = devm_request_and_ioremap(&pdev->dev, iores);
-       if (!saif->base) {
-               dev_err(&pdev->dev, "ioremap failed\n");
-               return -ENODEV;
-       }
+       saif->base = devm_ioremap_resource(&pdev->dev, iores);
+       if (IS_ERR(saif->base))
+               return PTR_ERR(saif->base);
  
        dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0);
        if (!dmares) {