]> Pileus Git - ~andy/linux/commitdiff
Merge tag 'gpio-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 26 Jul 2012 20:56:38 +0000 (13:56 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 26 Jul 2012 20:56:38 +0000 (13:56 -0700)
Pull GPIO changes from Linus Walleij:
 - New driver for AMD-8111 southbridge GPIOs
 - New driver for Wolfson Micro Arizona devices
 - Propagate device tree parse errors
 - Probe deferral finalizations - all expected calls to GPIO will now
   hopefully request deferral where apropriate
 - Misc updates to TCA6424, WM8994, LPC32xx, PCF857x, Samsung MXC, OMAP
   and PCA953X drivers.

Fix up gpio_idx conflicts in drivers/gpio/gpio-mxc.c

* tag 'gpio-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
  gpio: of_get_named_gpio_flags() return -EPROBE_DEFER if GPIO not yet available
  gpiolib: Defer failed gpio requests by default
  MAINTAINERS: add entry OMAP GPIO driver
  gpio/pca953x: increase variables size to support 24 bit of data
  GPIO: PCA953X: Increase size of invert variable to support 24 bit
  gpio/omap: move bank->dbck initialization to omap_gpio_mod_init()
  gpio/mxc: use the edge_sel feature if available
  gpio: propagate of_parse_phandle_with_args errors
  gpio: samsung: add flags specifier to device-tree binding
  gpiolib: Add support for Wolfson Microelectronics Arizona class devices
  gpio: gpio-lpc32xx: Add gpio_to_irq mapping
  gpio: pcf857x: share 8/16 bit access functions
  gpio: LPC32xx: Driver cleanup
  MAINTAINERS: Add Wolfson gpiolib drivers to the Wolfson entry
  gpiolib: wm8994: Convert to devm_kzalloc()
  gpiolib: wm8994: Use irq_domain mappings for gpios
  gpio: add a driver for GPIO pins found on AMD-8111 south bridge chips
  gpio/tca6424: merge I2C transactions, remove cast
  gpio/of: fix a typo of comment message

12 files changed:
1  2 
Documentation/devicetree/bindings/gpio/fsl-imx-gpio.txt
MAINTAINERS
arch/arm/boot/dts/imx51.dtsi
arch/arm/boot/dts/imx53.dtsi
arch/arm/boot/dts/imx6q.dtsi
arch/arm/mach-imx/mm-imx25.c
arch/arm/mach-imx/mm-imx3.c
arch/arm/mach-imx/mm-imx5.c
drivers/gpio/Kconfig
drivers/gpio/gpio-mxc.c
drivers/gpio/gpio-omap.c
drivers/gpio/gpio-wm8994.c

index 4f3929713ae4d16df7f5f55dbb70459a8df02c76,33a0345eef32d08aca304fde77f81c214ffa538b..dbd22e0df21e44b953c8ffc4a6d904bd2f84e8ae
@@@ -8,25 -8,15 +8,25 @@@ Required properties
    by low 16 pins and the second one is for high 16 pins.
  - gpio-controller : Marks the device node as a gpio controller.
  - #gpio-cells : Should be two.  The first cell is the pin number and
 -  the second cell is used to specify optional parameters (currently
 -  unused).
 +  the second cell is used to specify the gpio polarity:
 +      0 = active high
 +      1 = active low
 +- interrupt-controller: Marks the device node as an interrupt controller.
 +- #interrupt-cells : Should be 2.  The first cell is the GPIO number.
 +  The second cell bits[3:0] is used to specify trigger type and level flags:
 +      1 = low-to-high edge triggered.
 +      2 = high-to-low edge triggered.
 +      4 = active high level-sensitive.
 +      8 = active low level-sensitive.
  
  Example:
  
  gpio0: gpio@73f84000 {
-       compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
+       compatible = "fsl,imx51-gpio", "fsl,imx35-gpio";
        reg = <0x73f84000 0x4000>;
        interrupts = <50 51>;
        gpio-controller;
        #gpio-cells = <2>;
 +      interrupt-controller;
 +      #interrupt-cells = <2>;
  };
diff --combined MAINTAINERS
index 429e72cc13fc5d378f56ef9c2cc7a16386dccf51,eeb9b731a474f984278c142b9e688b980e527ab0..5b41de49a324f670ca7de5672498e6606ea69cfb
@@@ -329,7 -329,7 +329,7 @@@ F: drivers/hwmon/adm1029.
  
  ADM8211 WIRELESS DRIVER
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
@@@ -894,14 -894,6 +894,14 @@@ ARM/MAGICIAN MACHINE SUPPOR
  M:    Philipp Zabel <philipp.zabel@gmail.com>
  S:    Maintained
  
 +ARM/Marvell Armada 370 and Armada XP SOC support
 +M:    Jason Cooper <jason@lakedaemon.net>
 +M:    Andrew Lunn <andrew@lunn.ch>
 +M:    Gregory Clement <gregory.clement@free-electrons.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-mvebu/
 +
  ARM/Marvell Dove/Kirkwood/MV78xx0/Orion SOC support
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
@@@ -1111,16 -1103,6 +1111,16 @@@ S:    Supporte
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
 +ARM/SOCFPGA ARCHITECTURE
 +M:    Dinh Nguyen <dinguyen@altera.com>
 +S:    Maintained
 +F:    arch/arm/mach-socfpga/
 +
 +ARM/SOCFPGA CLOCK FRAMEWORK SUPPORT
 +M:    Dinh Nguyen <dinguyen@altera.com>
 +S:    Maintained
 +F:    drivers/clk/socfpga/
 +
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1441,7 -1423,7 +1441,7 @@@ B43 WIRELESS DRIVE
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
 -W:    http://linuxwireless.org/en/users/Drivers/b43
 +W:    http://wireless.kernel.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43/
  
@@@ -1450,7 -1432,7 +1450,7 @@@ M:      Larry Finger <Larry.Finger@lwfinger.
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
 -W:    http://linuxwireless.org/en/users/Drivers/b43
 +W:    http://wireless.kernel.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43legacy/
  
@@@ -1613,7 -1595,6 +1613,7 @@@ M:      Arend van Spriel <arend@broadcom.com
  M:    Franky (Zhenhui) Lin <frankyl@broadcom.com>
  M:    Kan Yan <kanyan@broadcom.com>
  L:    linux-wireless@vger.kernel.org
 +L:    brcm80211-dev-list@broadcom.com
  S:    Supported
  F:    drivers/net/wireless/brcm80211/
  
@@@ -2728,14 -2709,6 +2728,14 @@@ M:    Mimi Zohar <zohar@us.ibm.com
  S:    Supported
  F:    security/integrity/evm/
  
 +EXTERNAL CONNECTOR SUBSYSTEM (EXTCON)
 +M:    MyungJoo Ham <myungjoo.ham@samsung.com>
 +M:    Chanwoo Choi <cw00.choi@samsung.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/extcon/
 +F:    Documentation/extcon/
 +
  EXYNOS DP DRIVER
  M:    Jingoo Han <jg1.han@samsung.com>
  L:    linux-fbdev@vger.kernel.org
@@@ -3460,14 -3433,13 +3460,14 @@@ S:   Supporte
  F:    drivers/idle/i7300_idle.c
  
  IEEE 802.15.4 SUBSYSTEM
 +M:    Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
  M:    Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
 -M:    Sergey Lapin <slapin@ossfans.org>
  L:    linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
  W:    http://apps.sourceforge.net/trac/linux-zigbee
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
  S:    Maintained
  F:    net/ieee802154/
 +F:    net/mac802154/
  F:    drivers/ieee802154/
  
  IIO SUBSYSTEM AND DRIVERS
@@@ -3688,6 -3660,14 +3688,6 @@@ T:     git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    drivers/net/wireless/iwlwifi/
  
 -INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi)
 -M:    Samuel Ortiz <samuel.ortiz@intel.com>
 -M:    Intel Linux Wireless <ilw@linux.intel.com>
 -L:    linux-wireless@vger.kernel.org
 -S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/iwmc3200wifi
 -F:    drivers/net/wireless/iwmc3200wifi/
 -
  INTEL MANAGEMENT ENGINE (mei)
  M:    Tomas Winkler <tomas.winkler@intel.com>
  L:    linux-kernel@vger.kernel.org
@@@ -4010,8 -3990,8 +4010,8 @@@ F:      arch/ia64/include/asm/kvm
  F:    arch/ia64/kvm/
  
  KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
 -M:    Carsten Otte <cotte@de.ibm.com>
  M:    Christian Borntraeger <borntraeger@de.ibm.com>
 +M:    Cornelia Huck <cornelia.huck@de.ibm.com>
  M:    linux390@de.ibm.com
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -4371,7 -4351,7 +4371,7 @@@ F:      arch/m68k/hp300
  MAC80211
  M:    Johannes Berg <johannes@sipsolutions.net>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  S:    Maintained
@@@ -4383,7 -4363,7 +4383,7 @@@ MAC80211 PID RATE CONTRO
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  M:    Mattias Nissler <mattias.nissler@gmx.de>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID
 +W:    http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/PID
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  S:    Maintained
@@@ -4612,6 -4592,7 +4612,6 @@@ S:      Maintaine
  F:    drivers/usb/musb/
  
  MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE)
 -M:    Jon Mason <mason@myri.com>
  M:    Andrew Gallatin <gallatin@myri.com>
  L:    netdev@vger.kernel.org
  W:    http://www.myri.com/scs/download-Myri10GE.html
@@@ -4656,6 -4637,8 +4656,6 @@@ F:      net/sched/sch_netem.
  NETERION 10GbE DRIVERS (s2io/vxge)
  M:    Jon Mason <jdmason@kudzu.us>
  L:    netdev@vger.kernel.org
 -W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
 -W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
  S:    Supported
  F:    Documentation/networking/s2io.txt
  F:    Documentation/networking/vxge.txt
@@@ -4671,8 -4654,8 +4671,8 @@@ L:      netfilter@vger.kernel.or
  L:    coreteam@netfilter.org
  W:    http://www.netfilter.org/
  W:    http://www.iptables.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-2.6.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next-2.6.git
 +T:    git git://1984.lsi.us.es/nf
 +T:    git git://1984.lsi.us.es/nf-next
  S:    Supported
  F:    include/linux/netfilter*
  F:    include/linux/netfilter/
@@@ -4874,7 -4857,6 +4874,7 @@@ M:      Kevin Hilman <khilman@ti.com
  L:    linux-omap@vger.kernel.org
  S:    Maintained
  F:    arch/arm/*omap*/*pm*
 +F:    drivers/cpufreq/omap-cpufreq.c
  
  OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
  M:    Rajendra Nayak <rnayak@ti.com>
@@@ -4961,6 -4943,13 +4961,13 @@@ S:    Maintaine
  F:    drivers/usb/*/*omap*
  F:    arch/arm/*omap*/usb*
  
+ OMAP GPIO DRIVER
+ M:    Santosh Shilimkar <santosh.shilimkar@ti.com>
+ M:    Kevin Hilman <khilman@ti.com>
+ L:    linux-omap@vger.kernel.org
+ S:    Maintained
+ F:    drivers/gpio/gpio-omap.c
  OMFS FILESYSTEM
  M:    Bob Copeland <me@bobcopeland.com>
  L:    linux-karma-devel@lists.sourceforge.net
@@@ -5066,7 -5055,7 +5073,7 @@@ F:      fs/ocfs2
  
  ORINOCO DRIVER
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/en/users/Drivers/orinoco
 +W:    http://wireless.kernel.org/en/users/Drivers/orinoco
  W:    http://www.nongnu.org/orinoco/
  S:    Orphan
  F:    drivers/net/wireless/orinoco/
@@@ -5218,7 -5207,7 +5225,7 @@@ PCI SUBSYSTE
  M:    Bjorn Helgaas <bhelgaas@google.com>
  L:    linux-pci@vger.kernel.org
  Q:    http://patchwork.ozlabs.org/project/linux-pci/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/linux.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git
  S:    Supported
  F:    Documentation/PCI/
  F:    drivers/pci/
@@@ -5581,7 -5570,7 +5588,7 @@@ F:      Documentation/networking/LICENSE.qla
  F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
 -M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
 +M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Sony Chacko <sony.chacko@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
@@@ -5589,6 -5578,7 +5596,6 @@@ S:      Supporte
  F:    drivers/net/ethernet/qlogic/qlcnic/
  
  QLOGIC QLGE 10Gb ETHERNET DRIVER
 -M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
  M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
@@@ -5770,7 -5760,7 +5777,7 @@@ F:      net/rose
  RTL8180 WIRELESS DRIVER
  M:    "John W. Linville" <linville@tuxdriver.com>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtl818x/rtl8180/
@@@ -5780,7 -5770,7 +5787,7 @@@ M:      Herton Ronaldo Krzesinski <herton@ca
  M:    Hin-Tak Leung <htl10@users.sourceforge.net>
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtl818x/rtl8187/
@@@ -5789,7 -5779,7 +5796,7 @@@ RTL8192CE WIRELESS DRIVE
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  M:    Chaoming Li <chaoming_li@realsil.com.cn>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtlwifi/
@@@ -5926,7 -5916,7 +5933,7 @@@ M:      Ingo Molnar <mingo@redhat.com
  M:    Peter Zijlstra <peterz@infradead.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
  S:    Maintained
 -F:    kernel/sched*
 +F:    kernel/sched/
  F:    include/linux/sched.h
  
  SCORE ARCHITECTURE
@@@ -6228,15 -6218,6 +6235,15 @@@ T:    git git://git.kernel.org/pub/scm/lin
  F:    include/linux/srcu*
  F:    kernel/srcu*
  
 +SMACK SECURITY MODULE
 +M:    Casey Schaufler <casey@schaufler-ca.com>
 +L:    linux-security-module@vger.kernel.org
 +W:    http://schaufler-ca.com
 +T:    git git://git.gitorious.org/smack-next/kernel.git
 +S:    Maintained
 +F:    Documentation/security/Smack.txt
 +F:    security/smack/
 +
  SMC91x ETHERNET DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
  S:    Odd Fixes
@@@ -6250,9 -6231,9 +6257,9 @@@ F:      Documentation/hwmon/smm66
  F:    drivers/hwmon/smm665.c
  
  SMSC EMC2103 HARDWARE MONITOR DRIVER
 -M:    Steve Glendinning <steve.glendinning@smsc.com>
 +M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    lm-sensors@lm-sensors.org
 -S:    Supported
 +S:    Maintained
  F:    Documentation/hwmon/emc2103
  F:    drivers/hwmon/emc2103.c
  
@@@ -6271,22 -6252,22 +6278,22 @@@ F:   Documentation/hwmon/smsc47b39
  F:    drivers/hwmon/smsc47b397.c
  
  SMSC911x ETHERNET DRIVER
 -M:    Steve Glendinning <steve.glendinning@smsc.com>
 +M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    netdev@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    include/linux/smsc911x.h
  F:    drivers/net/ethernet/smsc/smsc911x.*
  
  SMSC9420 PCI ETHERNET DRIVER
 -M:    Steve Glendinning <steve.glendinning@smsc.com>
 +M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    netdev@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    drivers/net/ethernet/smsc/smsc9420.*
  
  SMSC UFX6000 and UFX7000 USB to VGA DRIVER
 -M:    Steve Glendinning <steve.glendinning@smsc.com>
 +M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    linux-fbdev@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    drivers/video/smscufx.c
  
  SN-IA64 (Itanium) SUB-PLATFORM
@@@ -6773,11 -6754,9 +6780,11 @@@ F:    include/linux/tifm.
  
  TI LM49xxx FAMILY ASoC CODEC DRIVERS
  M:    M R Swami Reddy <mr.swami.reddy@ti.com>
 +M:    Vishwas A Deshpande <vishwas.a.deshpande@ti.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    sound/soc/codecs/lm49453*
 +F:    sound/soc/codecs/isabelle*
  
  TI TWL4030 SERIES SOC CODEC DRIVER
  M:    Peter Ujfalusi <peter.ujfalusi@ti.com>
@@@ -6871,11 -6850,10 +6878,11 @@@ F:   include/linux/shmem_fs.
  F:    mm/shmem.c
  
  TPM DEVICE DRIVER
 -M:    Debora Velarde <debora@linux.vnet.ibm.com>
 -M:    Rajiv Andrade <srajiv@linux.vnet.ibm.com>
 +M:    Kent Yoder <key@linux.vnet.ibm.com>
 +M:    Rajiv Andrade <mail@srajiv.net>
  W:    http://tpmdd.sourceforge.net
 -M:    Marcel Selhorst <m.selhorst@sirrix.com>
 +M:    Marcel Selhorst <tpmdd@selhorst.net>
 +M:    Sirrix AG <tpmdd@sirrix.com>
  W:    http://www.sirrix.com
  L:    tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
  S:    Maintained
@@@ -6975,13 -6953,6 +6982,13 @@@ S:    Maintaine
  F:    Documentation/filesystems/ufs.txt
  F:    fs/ufs/
  
 +UHID USERSPACE HID IO DRIVER:
 +M:    David Herrmann <dh.herrmann@googlemail.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/uhid.c
 +F:    include/linux/uhid.h
 +
  ULTRA-WIDEBAND (UWB) SUBSYSTEM:
  L:    linux-usb@vger.kernel.org
  S:    Orphan
@@@ -7242,9 -7213,9 +7249,9 @@@ S:      Supporte
  F:    drivers/usb/serial/whiteheat*
  
  USB SMSC95XX ETHERNET DRIVER
 -M:    Steve Glendinning <steve.glendinning@smsc.com>
 +M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    netdev@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    drivers/net/usb/smsc95xx.*
  
  USB SN9C1xx DRIVER
@@@ -7613,8 -7584,8 +7620,9 @@@ W:      http://opensource.wolfsonmicro.com/c
  S:    Supported
  F:    Documentation/hwmon/wm83??
  F:    arch/arm/mach-s3c64xx/mach-crag6410*
 +F:    drivers/clk/clk-wm83*.c
  F:    drivers/leds/leds-wm83*.c
+ F:    drivers/gpio/gpio-*wm*.c
  F:    drivers/hwmon/wm83??-hwmon.c
  F:    drivers/input/misc/wm831x-on.c
  F:    drivers/input/touchscreen/wm831x-ts.c
index 922adefdd29120d14e5c7456ddbf3d6144b26f11,9c95abcb3ce94c14b28599aa03386419c71400b9..53cbaa3d4f904cbe464116640824fd24a4015d81
                        };
  
                        gpio1: gpio@73f84000 {
-                               compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx51-gpio", "fsl,imx35-gpio";
                                reg = <0x73f84000 0x4000>;
                                interrupts = <50 51>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio2: gpio@73f88000 {
-                               compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx51-gpio", "fsl,imx35-gpio";
                                reg = <0x73f88000 0x4000>;
                                interrupts = <52 53>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio3: gpio@73f8c000 {
-                               compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx51-gpio", "fsl,imx35-gpio";
                                reg = <0x73f8c000 0x4000>;
                                interrupts = <54 55>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio4: gpio@73f90000 {
-                               compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx51-gpio", "fsl,imx35-gpio";
                                reg = <0x73f90000 0x4000>;
                                interrupts = <56 57>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        wdog@73f98000 { /* WDOG1 */
index 4e735edc78ed7b4f9b6e2389091a759330e5b18c,506ed5c93642741c00e9fcf8fc576cde6f3643fb..fc79cdc4b4e6a18d96138025bad146caabb04004
                        };
  
                        gpio1: gpio@53f84000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53f84000 0x4000>;
                                interrupts = <50 51>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio2: gpio@53f88000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53f88000 0x4000>;
                                interrupts = <52 53>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio3: gpio@53f8c000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53f8c000 0x4000>;
                                interrupts = <54 55>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio4: gpio@53f90000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53f90000 0x4000>;
                                interrupts = <56 57>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        wdog@53f98000 { /* WDOG1 */
                        };
  
                        gpio5: gpio@53fdc000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53fdc000 0x4000>;
                                interrupts = <103 104>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio6: gpio@53fe0000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53fe0000 0x4000>;
                                interrupts = <105 106>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio7: gpio@53fe4000 {
-                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx53-gpio", "fsl,imx35-gpio";
                                reg = <0x53fe4000 0x4000>;
                                interrupts = <107 108>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        i2c@53fec000 { /* I2C3 */
index c25d49584814aade377b4c57f964967ec1f71a09,da78fd83f62515b4104d5d124a43729b58c6dcae..3d3c64b014e61f9978072571343f6b84afb5f523
                interrupt-parent = <&intc>;
                ranges;
  
 +              dma-apbh@00110000 {
 +                      compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
 +                      reg = <0x00110000 0x2000>;
 +              };
 +
 +              gpmi-nand@00112000 {
 +                     compatible = "fsl,imx6q-gpmi-nand";
 +                     #address-cells = <1>;
 +                     #size-cells = <1>;
 +                     reg = <0x00112000 0x2000>, <0x00114000 0x2000>;
 +                     reg-names = "gpmi-nand", "bch";
 +                     interrupts = <0 13 0x04>, <0 15 0x04>;
 +                     interrupt-names = "gpmi-dma", "bch";
 +                     fsl,gpmi-dma-channel = <0>;
 +                     status = "disabled";
 +              };
 +
                timer@00a00600 {
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0x00a00600 0x20>;
                        };
  
                        gpio1: gpio@0209c000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x0209c000 0x4000>;
                                interrupts = <0 66 0x04 0 67 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio2: gpio@020a0000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020a0000 0x4000>;
                                interrupts = <0 68 0x04 0 69 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio3: gpio@020a4000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020a4000 0x4000>;
                                interrupts = <0 70 0x04 0 71 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio4: gpio@020a8000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020a8000 0x4000>;
                                interrupts = <0 72 0x04 0 73 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio5: gpio@020ac000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020ac000 0x4000>;
                                interrupts = <0 74 0x04 0 75 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio6: gpio@020b0000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020b0000 0x4000>;
                                interrupts = <0 76 0x04 0 77 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        gpio7: gpio@020b4000 {
-                               compatible = "fsl,imx6q-gpio", "fsl,imx31-gpio";
+                               compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio";
                                reg = <0x020b4000 0x4000>;
                                interrupts = <0 78 0x04 0 79 0x04>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 -                              #interrupt-cells = <1>;
 +                              #interrupt-cells = <2>;
                        };
  
                        kpp@020b8000 {
                                };
                        };
  
 -                      usbphy@020c9000 { /* USBPHY1 */
 +                      usbphy1: usbphy@020c9000 {
 +                              compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy";
                                reg = <0x020c9000 0x1000>;
                                interrupts = <0 44 0x04>;
                        };
  
 -                      usbphy@020ca000 { /* USBPHY2 */
 +                      usbphy2: usbphy@020ca000 {
 +                              compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy";
                                reg = <0x020ca000 0x1000>;
                                interrupts = <0 45 0x04>;
                        };
                                        };
                                };
  
 +                              gpmi-nand {
 +                                      pinctrl_gpmi_nand_1: gpmi-nand-1 {
 +                                              fsl,pins = <1328 0xb0b1         /* MX6Q_PAD_NANDF_CLE__RAWNAND_CLE */
 +                                                          1336 0xb0b1         /* MX6Q_PAD_NANDF_ALE__RAWNAND_ALE */
 +                                                          1344 0xb0b1         /* MX6Q_PAD_NANDF_WP_B__RAWNAND_RESETN */
 +                                                          1352 0xb000         /* MX6Q_PAD_NANDF_RB0__RAWNAND_READY0 */
 +                                                          1360 0xb0b1         /* MX6Q_PAD_NANDF_CS0__RAWNAND_CE0N */
 +                                                          1365 0xb0b1         /* MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N */
 +                                                          1371 0xb0b1         /* MX6Q_PAD_NANDF_CS2__RAWNAND_CE2N */
 +                                                          1378 0xb0b1         /* MX6Q_PAD_NANDF_CS3__RAWNAND_CE3N */
 +                                                          1387 0xb0b1         /* MX6Q_PAD_SD4_CMD__RAWNAND_RDN */
 +                                                          1393 0xb0b1         /* MX6Q_PAD_SD4_CLK__RAWNAND_WRN */
 +                                                          1397 0xb0b1         /* MX6Q_PAD_NANDF_D0__RAWNAND_D0 */
 +                                                          1405 0xb0b1         /* MX6Q_PAD_NANDF_D1__RAWNAND_D1 */
 +                                                          1413 0xb0b1         /* MX6Q_PAD_NANDF_D2__RAWNAND_D2 */
 +                                                          1421 0xb0b1         /* MX6Q_PAD_NANDF_D3__RAWNAND_D3 */
 +                                                          1429 0xb0b1         /* MX6Q_PAD_NANDF_D4__RAWNAND_D4 */
 +                                                          1437 0xb0b1         /* MX6Q_PAD_NANDF_D5__RAWNAND_D5 */
 +                                                          1445 0xb0b1         /* MX6Q_PAD_NANDF_D6__RAWNAND_D6 */
 +                                                          1453 0xb0b1         /* MX6Q_PAD_NANDF_D7__RAWNAND_D7 */
 +                                                          1463 0x00b1>;       /* MX6Q_PAD_SD4_DAT0__RAWNAND_DQS */
 +                                      };
 +                              };
 +
                                i2c1 {
                                        pinctrl_i2c1_1: i2c1grp-1 {
                                                fsl,pins = <137 0x4001b8b1      /* MX6Q_PAD_EIM_D21__I2C1_SCL */
                                                            1517 0x17059>;      /* MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 */
                                        };
                                };
 +
 +                              ecspi1 {
 +                                      pinctrl_ecspi1_1: ecspi1grp-1 {
 +                                              fsl,pins = <101 0x100b1         /* MX6Q_PAD_EIM_D17__ECSPI1_MISO */
 +                                                          109 0x100b1         /* MX6Q_PAD_EIM_D18__ECSPI1_MOSI */
 +                                                          94  0x100b1>;       /* MX6Q_PAD_EIM_D16__ECSPI1_SCLK */
 +                                      };
 +                              };
                        };
  
                        dcic@020e4000 { /* DCIC1 */
                                reg = <0x0217c000 0x4000>;
                        };
  
 +                      usb@02184000 { /* USB OTG */
 +                              compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
 +                              reg = <0x02184000 0x200>;
 +                              interrupts = <0 43 0x04>;
 +                              fsl,usbphy = <&usbphy1>;
 +                              status = "disabled";
 +                      };
 +
 +                      usb@02184200 { /* USB1 */
 +                              compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
 +                              reg = <0x02184200 0x200>;
 +                              interrupts = <0 40 0x04>;
 +                              fsl,usbphy = <&usbphy2>;
 +                              status = "disabled";
 +                      };
 +
 +                      usb@02184400 { /* USB2 */
 +                              compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
 +                              reg = <0x02184400 0x200>;
 +                              interrupts = <0 41 0x04>;
 +                              status = "disabled";
 +                      };
 +
 +                      usb@02184600 { /* USB3 */
 +                              compatible = "fsl,imx6q-usb", "fsl,imx27-usb";
 +                              reg = <0x02184600 0x200>;
 +                              interrupts = <0 42 0x04>;
 +                              status = "disabled";
 +                      };
 +
                        ethernet@02188000 {
                                compatible = "fsl,imx6q-fec";
                                reg = <0x02188000 0x4000>;
index 388928fdb11a0008ee85dfd3ad598a4668ac48c1,8e8ddb81bd0bc566384c5d424c56dc17649e2088..f3f5c6542ab4850beca756ea0168d0ed659a8c0b
@@@ -29,6 -29,7 +29,6 @@@
  #include <mach/hardware.h>
  #include <mach/mx25.h>
  #include <mach/iomux-v3.h>
 -#include <mach/irqs.h>
  
  /*
   * This table defines static virtual address mappings for I/O regions.
@@@ -89,11 -90,11 +89,11 @@@ static const struct resource imx25_audm
  
  void __init imx25_soc_init(void)
  {
-       /* i.mx25 has the i.mx31 type gpio */
-       mxc_register_gpio("imx31-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0);
-       mxc_register_gpio("imx31-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0);
-       mxc_register_gpio("imx31-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0);
-       mxc_register_gpio("imx31-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0);
+       /* i.mx25 has the i.mx35 type gpio */
+       mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0);
+       mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0);
+       mxc_register_gpio("imx35-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0);
+       mxc_register_gpio("imx35-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0);
  
        pinctrl_provide_dummies();
        /* i.mx25 has the i.mx35 type sdma */
index fe96105109b323844dc4bc688d9df9d4f0bf2047,8e51e77b3c658bf6ed7616e61fa62c034db4a29d..9d2c843bde02438ccd79b2b5552397b97aeb1b65
@@@ -30,6 -30,7 +30,6 @@@
  #include <mach/devices-common.h>
  #include <mach/hardware.h>
  #include <mach/iomux-v3.h>
 -#include <mach/irqs.h>
  
  #include "crmregs-imx3.h"
  
@@@ -272,10 -273,9 +272,9 @@@ void __init imx35_soc_init(void
  
        imx3_init_l2x0();
  
-       /* i.mx35 has the i.mx31 type gpio */
-       mxc_register_gpio("imx31-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);
-       mxc_register_gpio("imx31-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0);
-       mxc_register_gpio("imx31-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0);
+       mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);
+       mxc_register_gpio("imx35-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0);
+       mxc_register_gpio("imx35-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0);
  
        pinctrl_provide_dummies();
        if (to_version == 1) {
index f19d604e1b2aea6e89ab7c86fc6c6917e57ce48a,d70d16cb7eb5aad09e6dd54b341d7131a8b07bd6..52d8f534be101e90eacdf66df7997eb55c3dbaad
@@@ -16,6 -16,7 +16,6 @@@
  #include <linux/clk.h>
  #include <linux/pinctrl/machine.h>
  
 -#include <asm/system_misc.h>
  #include <asm/mach/map.h>
  
  #include <mach/hardware.h>
  #include <mach/devices-common.h>
  #include <mach/iomux-v3.h>
  
 -static struct clk *gpc_dvfs_clk;
 -
 -static void imx5_idle(void)
 -{
 -      /* gpc clock is needed for SRPG */
 -      if (gpc_dvfs_clk == NULL) {
 -              gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs");
 -              if (IS_ERR(gpc_dvfs_clk))
 -                      return;
 -              clk_prepare(gpc_dvfs_clk);
 -      }
 -      clk_enable(gpc_dvfs_clk);
 -      mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
 -      if (!tzic_enable_wake())
 -              cpu_do_idle();
 -      clk_disable(gpc_dvfs_clk);
 -}
 -
  /*
   * Define the MX50 memory map.
   */
@@@ -86,6 -105,7 +86,6 @@@ void __init imx51_init_early(void
        mxc_set_cpu_type(MXC_CPU_MX51);
        mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
        mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
 -      arm_pm_idle = imx5_idle;
  }
  
  void __init imx53_init_early(void)
@@@ -161,13 -181,13 +161,13 @@@ static const struct resource imx53_audm
  
  void __init imx50_soc_init(void)
  {
-       /* i.mx50 has the i.mx31 type gpio */
-       mxc_register_gpio("imx31-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH);
-       mxc_register_gpio("imx31-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH);
-       mxc_register_gpio("imx31-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH);
-       mxc_register_gpio("imx31-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH);
-       mxc_register_gpio("imx31-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH);
-       mxc_register_gpio("imx31-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH);
+       /* i.mx50 has the i.mx35 type gpio */
+       mxc_register_gpio("imx35-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH);
+       mxc_register_gpio("imx35-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH);
+       mxc_register_gpio("imx35-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH);
+       mxc_register_gpio("imx35-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH);
+       mxc_register_gpio("imx35-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH);
+       mxc_register_gpio("imx35-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH);
  
        /* i.mx50 has the i.mx31 type audmux */
        platform_device_register_simple("imx31-audmux", 0, imx50_audmux_res,
  
  void __init imx51_soc_init(void)
  {
-       /* i.mx51 has the i.mx31 type gpio */
-       mxc_register_gpio("imx31-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH);
-       mxc_register_gpio("imx31-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH);
-       mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_INT_GPIO3_LOW, MX51_INT_GPIO3_HIGH);
-       mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_INT_GPIO4_LOW, MX51_INT_GPIO4_HIGH);
+       /* i.mx51 has the i.mx35 type gpio */
+       mxc_register_gpio("imx35-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH);
+       mxc_register_gpio("imx35-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH);
+       mxc_register_gpio("imx35-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_INT_GPIO3_LOW, MX51_INT_GPIO3_HIGH);
+       mxc_register_gpio("imx35-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_INT_GPIO4_LOW, MX51_INT_GPIO4_HIGH);
  
        pinctrl_provide_dummies();
  
  
  void __init imx53_soc_init(void)
  {
-       /* i.mx53 has the i.mx31 type gpio */
-       mxc_register_gpio("imx31-gpio", 0, MX53_GPIO1_BASE_ADDR, SZ_16K, MX53_INT_GPIO1_LOW, MX53_INT_GPIO1_HIGH);
-       mxc_register_gpio("imx31-gpio", 1, MX53_GPIO2_BASE_ADDR, SZ_16K, MX53_INT_GPIO2_LOW, MX53_INT_GPIO2_HIGH);
-       mxc_register_gpio("imx31-gpio", 2, MX53_GPIO3_BASE_ADDR, SZ_16K, MX53_INT_GPIO3_LOW, MX53_INT_GPIO3_HIGH);
-       mxc_register_gpio("imx31-gpio", 3, MX53_GPIO4_BASE_ADDR, SZ_16K, MX53_INT_GPIO4_LOW, MX53_INT_GPIO4_HIGH);
-       mxc_register_gpio("imx31-gpio", 4, MX53_GPIO5_BASE_ADDR, SZ_16K, MX53_INT_GPIO5_LOW, MX53_INT_GPIO5_HIGH);
-       mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH);
-       mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH);
+       /* i.mx53 has the i.mx35 type gpio */
+       mxc_register_gpio("imx35-gpio", 0, MX53_GPIO1_BASE_ADDR, SZ_16K, MX53_INT_GPIO1_LOW, MX53_INT_GPIO1_HIGH);
+       mxc_register_gpio("imx35-gpio", 1, MX53_GPIO2_BASE_ADDR, SZ_16K, MX53_INT_GPIO2_LOW, MX53_INT_GPIO2_HIGH);
+       mxc_register_gpio("imx35-gpio", 2, MX53_GPIO3_BASE_ADDR, SZ_16K, MX53_INT_GPIO3_LOW, MX53_INT_GPIO3_HIGH);
+       mxc_register_gpio("imx35-gpio", 3, MX53_GPIO4_BASE_ADDR, SZ_16K, MX53_INT_GPIO4_LOW, MX53_INT_GPIO4_HIGH);
+       mxc_register_gpio("imx35-gpio", 4, MX53_GPIO5_BASE_ADDR, SZ_16K, MX53_INT_GPIO5_LOW, MX53_INT_GPIO5_HIGH);
+       mxc_register_gpio("imx35-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH);
+       mxc_register_gpio("imx35-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH);
  
        pinctrl_provide_dummies();
        /* i.mx53 has the i.mx35 type sdma */
  void __init imx51_init_late(void)
  {
        mx51_neon_fixup();
 +      imx51_pm_init();
 +}
 +
 +void __init imx53_init_late(void)
 +{
 +      imx53_pm_init();
  }
diff --combined drivers/gpio/Kconfig
index 542f0c04b6958037b3cf1c468e7705f779f8e11b,4002def0b524b314bbce3529c2eb71ce61c5d1bd..502b5ea43f4fae28db5a9eb65f3c37d0daf52e69
@@@ -136,7 -136,7 +136,7 @@@ config GPIO_MPC8XX
  
  config GPIO_MSM_V1
        tristate "Qualcomm MSM GPIO v1"
 -      depends on GPIOLIB && ARCH_MSM
 +      depends on GPIOLIB && ARCH_MSM && (ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50)
        help
          Say yes here to support the GPIO interface on ARM v6 based
          Qualcomm MSM chips.  Most of the pins on the MSM can be
@@@ -253,6 -253,12 +253,12 @@@ config GPIO_GE_FPG
  
  comment "I2C GPIO expanders:"
  
+ config GPIO_ARIZONA
+       tristate "Wolfson Microelectronics Arizona class devices"
+       depends on MFD_ARIZONA
+       help
+         Support for GPIOs on Wolfson Arizona class devices.
  config GPIO_MAX7300
        tristate "Maxim MAX7300 GPIO expander"
        depends on I2C
@@@ -466,6 -472,18 +472,18 @@@ config GPIO_BT8X
  
          If unsure, say N.
  
+ config GPIO_AMD8111
+       tristate "AMD 8111 GPIO driver"
+       depends on PCI
+       help
+         The AMD 8111 south bridge contains 32 GPIO pins which can be used.
+         Note, that usually system firmware/ACPI handles GPIO pins on their
+         own and users might easily break their systems with uncarefull usage
+         of this driver!
+         If unsure, say N
  config GPIO_LANGWELL
        bool "Intel Langwell/Penwell GPIO support"
        depends on PCI && X86
diff --combined drivers/gpio/gpio-mxc.c
index 04691d3abe6061feade251bf9c363fc998b1f21c,bb985e815533ca864aa522c9c74b940981117c51..4db460b6ecf7dbf1ffe7bfd14a1361d271609667
@@@ -23,7 -23,6 +23,7 @@@
  #include <linux/interrupt.h>
  #include <linux/io.h>
  #include <linux/irq.h>
 +#include <linux/irqdomain.h>
  #include <linux/gpio.h>
  #include <linux/platform_device.h>
  #include <linux/slab.h>
  #include <asm-generic/bug.h>
  #include <asm/mach/irq.h>
  
 -#define irq_to_gpio(irq)      ((irq) - MXC_GPIO_IRQ_START)
 -
  enum mxc_gpio_hwtype {
        IMX1_GPIO,      /* runs on i.mx1 */
        IMX21_GPIO,     /* runs on i.mx21 and i.mx27 */
-       IMX31_GPIO,     /* runs on all other i.mx */
+       IMX31_GPIO,     /* runs on i.mx31 */
+       IMX35_GPIO,     /* runs on all other i.mx */
  };
  
  /* device type dependent stuff */
@@@ -49,6 -51,7 +50,7 @@@ struct mxc_gpio_hwdata 
        unsigned icr2_reg;
        unsigned imr_reg;
        unsigned isr_reg;
+       int edge_sel_reg;
        unsigned low_level;
        unsigned high_level;
        unsigned rise_edge;
@@@ -60,7 -63,7 +62,7 @@@ struct mxc_gpio_port 
        void __iomem *base;
        int irq;
        int irq_high;
 -      int virtual_irq_start;
 +      struct irq_domain *domain;
        struct bgpio_chip bgc;
        u32 both_edges;
  };
@@@ -73,6 -76,7 +75,7 @@@ static struct mxc_gpio_hwdata imx1_imx2
        .icr2_reg       = 0x2c,
        .imr_reg        = 0x30,
        .isr_reg        = 0x34,
+       .edge_sel_reg   = -EINVAL,
        .low_level      = 0x03,
        .high_level     = 0x02,
        .rise_edge      = 0x00,
@@@ -87,6 -91,22 +90,22 @@@ static struct mxc_gpio_hwdata imx31_gpi
        .icr2_reg       = 0x10,
        .imr_reg        = 0x14,
        .isr_reg        = 0x18,
+       .edge_sel_reg   = -EINVAL,
+       .low_level      = 0x00,
+       .high_level     = 0x01,
+       .rise_edge      = 0x02,
+       .fall_edge      = 0x03,
+ };
+ static struct mxc_gpio_hwdata imx35_gpio_hwdata = {
+       .dr_reg         = 0x00,
+       .gdir_reg       = 0x04,
+       .psr_reg        = 0x08,
+       .icr1_reg       = 0x0c,
+       .icr2_reg       = 0x10,
+       .imr_reg        = 0x14,
+       .isr_reg        = 0x18,
+       .edge_sel_reg   = 0x1c,
        .low_level      = 0x00,
        .high_level     = 0x01,
        .rise_edge      = 0x02,
@@@ -103,12 -123,13 +122,13 @@@ static struct mxc_gpio_hwdata *mxc_gpio
  #define GPIO_ICR2             (mxc_gpio_hwdata->icr2_reg)
  #define GPIO_IMR              (mxc_gpio_hwdata->imr_reg)
  #define GPIO_ISR              (mxc_gpio_hwdata->isr_reg)
+ #define GPIO_EDGE_SEL         (mxc_gpio_hwdata->edge_sel_reg)
  
  #define GPIO_INT_LOW_LEV      (mxc_gpio_hwdata->low_level)
  #define GPIO_INT_HIGH_LEV     (mxc_gpio_hwdata->high_level)
  #define GPIO_INT_RISE_EDGE    (mxc_gpio_hwdata->rise_edge)
  #define GPIO_INT_FALL_EDGE    (mxc_gpio_hwdata->fall_edge)
- #define GPIO_INT_NONE         0x4
+ #define GPIO_INT_BOTH_EDGES   0x4
  
  static struct platform_device_id mxc_gpio_devtype[] = {
        {
        }, {
                .name = "imx31-gpio",
                .driver_data = IMX31_GPIO,
+       }, {
+               .name = "imx35-gpio",
+               .driver_data = IMX35_GPIO,
        }, {
                /* sentinel */
        }
@@@ -129,6 -153,7 +152,7 @@@ static const struct of_device_id mxc_gp
        { .compatible = "fsl,imx1-gpio", .data = &mxc_gpio_devtype[IMX1_GPIO], },
        { .compatible = "fsl,imx21-gpio", .data = &mxc_gpio_devtype[IMX21_GPIO], },
        { .compatible = "fsl,imx31-gpio", .data = &mxc_gpio_devtype[IMX31_GPIO], },
+       { .compatible = "fsl,imx35-gpio", .data = &mxc_gpio_devtype[IMX35_GPIO], },
        { /* sentinel */ }
  };
  
@@@ -143,15 -168,14 +167,15 @@@ static LIST_HEAD(mxc_gpio_ports)
  
  static int gpio_set_irq_type(struct irq_data *d, u32 type)
  {
 -      u32 gpio = irq_to_gpio(d->irq);
        struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
        struct mxc_gpio_port *port = gc->private;
        u32 bit, val;
 +      u32 gpio_idx = d->hwirq;
 +      u32 gpio = port->bgc.gc.base + gpio_idx;
        int edge;
        void __iomem *reg = port->base;
  
 -      port->both_edges &= ~(1 << (gpio & 31));
 +      port->both_edges &= ~(1 << gpio_idx);
        switch (type) {
        case IRQ_TYPE_EDGE_RISING:
                edge = GPIO_INT_RISE_EDGE;
                edge = GPIO_INT_FALL_EDGE;
                break;
        case IRQ_TYPE_EDGE_BOTH:
-               val = gpio_get_value(gpio);
-               if (val) {
-                       edge = GPIO_INT_LOW_LEV;
-                       pr_debug("mxc: set GPIO %d to low trigger\n", gpio);
+               if (GPIO_EDGE_SEL >= 0) {
+                       edge = GPIO_INT_BOTH_EDGES;
                } else {
-                       edge = GPIO_INT_HIGH_LEV;
-                       pr_debug("mxc: set GPIO %d to high trigger\n", gpio);
+                       val = gpio_get_value(gpio);
+                       if (val) {
+                               edge = GPIO_INT_LOW_LEV;
+                               pr_debug("mxc: set GPIO %d to low trigger\n", gpio);
+                       } else {
+                               edge = GPIO_INT_HIGH_LEV;
+                               pr_debug("mxc: set GPIO %d to high trigger\n", gpio);
+                       }
 -                      port->both_edges |= 1 << (gpio & 31);
++                      port->both_edges |= 1 << gpio_idx;
                }
-               port->both_edges |= 1 << gpio_idx;
                break;
        case IRQ_TYPE_LEVEL_LOW:
                edge = GPIO_INT_LOW_LEV;
                return -EINVAL;
        }
  
-       reg += GPIO_ICR1 + ((gpio_idx & 0x10) >> 2); /* ICR1 or ICR2 */
-       bit = gpio_idx & 0xf;
-       val = readl(reg) & ~(0x3 << (bit << 1));
-       writel(val | (edge << (bit << 1)), reg);
+       if (GPIO_EDGE_SEL >= 0) {
+               val = readl(port->base + GPIO_EDGE_SEL);
+               if (edge == GPIO_INT_BOTH_EDGES)
 -                      writel(val | (1 << (gpio & 0x1f)),
++                      writel(val | (1 << gpio_idx),
+                               port->base + GPIO_EDGE_SEL);
+               else
 -                      writel(val & ~(1 << (gpio & 0x1f)),
++                      writel(val & ~(1 << gpio_idx),
+                               port->base + GPIO_EDGE_SEL);
+       }
+       if (edge != GPIO_INT_BOTH_EDGES) {
 -              reg += GPIO_ICR1 + ((gpio & 0x10) >> 2); /* lower or upper register */
 -              bit = gpio & 0xf;
++              reg += GPIO_ICR1 + ((gpio_idx & 0x10) >> 2); /* lower or upper register */
++              bit = gpio_idx & 0xf;
+               val = readl(reg) & ~(0x3 << (bit << 1));
+               writel(val | (edge << (bit << 1)), reg);
+       }
 -      writel(1 << (gpio & 0x1f), port->base + GPIO_ISR);
 +      writel(1 << gpio_idx, port->base + GPIO_ISR);
  
        return 0;
  }
@@@ -217,13 -258,15 +258,13 @@@ static void mxc_flip_edge(struct mxc_gp
  /* handle 32 interrupts in one status register */
  static void mxc_gpio_irq_handler(struct mxc_gpio_port *port, u32 irq_stat)
  {
 -      u32 gpio_irq_no_base = port->virtual_irq_start;
 -
        while (irq_stat != 0) {
                int irqoffset = fls(irq_stat) - 1;
  
                if (port->both_edges & (1 << irqoffset))
                        mxc_flip_edge(port, irqoffset);
  
 -              generic_handle_irq(gpio_irq_no_base + irqoffset);
 +              generic_handle_irq(irq_find_mapping(port->domain, irqoffset));
  
                irq_stat &= ~(1 << irqoffset);
        }
@@@ -274,9 -317,10 +315,9 @@@ static void mx2_gpio_irq_handler(u32 ir
   */
  static int gpio_set_wake_irq(struct irq_data *d, u32 enable)
  {
 -      u32 gpio = irq_to_gpio(d->irq);
 -      u32 gpio_idx = gpio & 0x1F;
        struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
        struct mxc_gpio_port *port = gc->private;
 +      u32 gpio_idx = d->hwirq;
  
        if (enable) {
                if (port->irq_high && (gpio_idx >= 16))
        return 0;
  }
  
 -static void __init mxc_gpio_init_gc(struct mxc_gpio_port *port)
 +static void __init mxc_gpio_init_gc(struct mxc_gpio_port *port, int irq_base)
  {
        struct irq_chip_generic *gc;
        struct irq_chip_type *ct;
  
 -      gc = irq_alloc_generic_chip("gpio-mxc", 1, port->virtual_irq_start,
 +      gc = irq_alloc_generic_chip("gpio-mxc", 1, irq_base,
                                    port->base, handle_level_irq);
        gc->private = port;
  
@@@ -335,7 -379,9 +376,9 @@@ static void __devinit mxc_gpio_get_hw(s
                return;
        }
  
-       if (hwtype == IMX31_GPIO)
+       if (hwtype == IMX35_GPIO)
+               mxc_gpio_hwdata = &imx35_gpio_hwdata;
+       else if (hwtype == IMX31_GPIO)
                mxc_gpio_hwdata = &imx31_gpio_hwdata;
        else
                mxc_gpio_hwdata = &imx1_imx21_gpio_hwdata;
@@@ -349,7 -395,7 +392,7 @@@ static int mxc_gpio_to_irq(struct gpio_
        struct mxc_gpio_port *port =
                container_of(bgc, struct mxc_gpio_port, bgc);
  
 -      return port->virtual_irq_start + offset;
 +      return irq_find_mapping(port->domain, offset);
  }
  
  static int __devinit mxc_gpio_probe(struct platform_device *pdev)
        struct device_node *np = pdev->dev.of_node;
        struct mxc_gpio_port *port;
        struct resource *iores;
 +      int irq_base;
        int err;
  
        mxc_gpio_get_hw(pdev);
        writel(~0, port->base + GPIO_ISR);
  
        if (mxc_gpio_hwtype == IMX21_GPIO) {
 -              /* setup one handler for all GPIO interrupts */
 -              if (pdev->id == 0)
 -                      irq_set_chained_handler(port->irq,
 -                                              mx2_gpio_irq_handler);
 +              /*
 +               * Setup one handler for all GPIO interrupts. Actually setting
 +               * the handler is needed only once, but doing it for every port
 +               * is more robust and easier.
 +               */
 +              irq_set_chained_handler(port->irq, mx2_gpio_irq_handler);
        } else {
                /* setup one handler for each entry */
                irq_set_chained_handler(port->irq, mx3_gpio_irq_handler);
        if (err)
                goto out_bgpio_remove;
  
 -      /*
 -       * In dt case, we use gpio number range dynamically
 -       * allocated by gpio core.
 -       */
 -      port->virtual_irq_start = MXC_GPIO_IRQ_START + (np ? port->bgc.gc.base :
 -                                                           pdev->id * 32);
 +      irq_base = irq_alloc_descs(-1, 0, 32, numa_node_id());
 +      if (irq_base < 0) {
 +              err = irq_base;
 +              goto out_gpiochip_remove;
 +      }
 +
 +      port->domain = irq_domain_add_legacy(np, 32, irq_base, 0,
 +                                           &irq_domain_simple_ops, NULL);
 +      if (!port->domain) {
 +              err = -ENODEV;
 +              goto out_irqdesc_free;
 +      }
  
        /* gpio-mxc can be a generic irq chip */
 -      mxc_gpio_init_gc(port);
 +      mxc_gpio_init_gc(port, irq_base);
  
        list_add_tail(&port->node, &mxc_gpio_ports);
  
        return 0;
  
 +out_irqdesc_free:
 +      irq_free_descs(irq_base, 32);
 +out_gpiochip_remove:
 +      WARN_ON(gpiochip_remove(&port->bgc.gc) < 0);
  out_bgpio_remove:
        bgpio_remove(&port->bgc);
  out_iounmap:
diff --combined drivers/gpio/gpio-omap.c
index 4fbc208c32cfa213812f6356323a36a51c37087c,afecdccfc66ee597d933421862c73459b8ec5183..e6efd77668f0fb5ccab3a917629b07134885ee73
@@@ -174,22 -174,12 +174,22 @@@ static inline void _gpio_dbck_enable(st
        if (bank->dbck_enable_mask && !bank->dbck_enabled) {
                clk_enable(bank->dbck);
                bank->dbck_enabled = true;
 +
 +              __raw_writel(bank->dbck_enable_mask,
 +                           bank->base + bank->regs->debounce_en);
        }
  }
  
  static inline void _gpio_dbck_disable(struct gpio_bank *bank)
  {
        if (bank->dbck_enable_mask && bank->dbck_enabled) {
 +              /*
 +               * Disable debounce before cutting it's clock. If debounce is
 +               * enabled but the clock is not, GPIO module seems to be unable
 +               * to detect events and generate interrupts at least on OMAP3.
 +               */
 +              __raw_writel(0, bank->base + bank->regs->debounce_en);
 +
                clk_disable(bank->dbck);
                bank->dbck_enabled = false;
        }
@@@ -899,12 -889,6 +899,6 @@@ static int gpio_debounce(struct gpio_ch
  
        bank = container_of(chip, struct gpio_bank, chip);
  
-       if (!bank->dbck) {
-               bank->dbck = clk_get(bank->dev, "dbclk");
-               if (IS_ERR(bank->dbck))
-                       dev_err(bank->dev, "Could not get gpio dbck\n");
-       }
        spin_lock_irqsave(&bank->lock, flags);
        _set_gpio_debounce(bank, offset, debounce);
        spin_unlock_irqrestore(&bank->lock, flags);
@@@ -976,6 -960,10 +970,10 @@@ static void omap_gpio_mod_init(struct g
         /* Initialize interface clk ungated, module enabled */
        if (bank->regs->ctrl)
                __raw_writel(0, base + bank->regs->ctrl);
+       bank->dbck = clk_get(bank->dev, "dbclk");
+       if (IS_ERR(bank->dbck))
+               dev_err(bank->dev, "Could not get gpio dbck\n");
  }
  
  static __devinit void
@@@ -1091,6 -1079,7 +1089,6 @@@ static int __devinit omap_gpio_probe(st
        bank->is_mpuio = pdata->is_mpuio;
        bank->non_wakeup_gpios = pdata->non_wakeup_gpios;
        bank->loses_context = pdata->loses_context;
 -      bank->get_context_loss_count = pdata->get_context_loss_count;
        bank->regs = pdata->regs;
  #ifdef CONFIG_OF_GPIO
        bank->chip.of_node = of_node_get(node);
        omap_gpio_chip_init(bank);
        omap_gpio_show_rev(bank);
  
 +      if (bank->loses_context)
 +              bank->get_context_loss_count = pdata->get_context_loss_count;
 +
        pm_runtime_put(bank->dev);
  
        list_add_tail(&bank->node, &omap_gpio_list);
index aa61ad2fcaaa6573e1de350a82d08151c0040289,f2b3d19dd7a952c668ac43cdefec21ce40fa4f22..1c764e779d8009b066bb61d93426eb7384cf99d3
@@@ -19,6 -19,7 +19,7 @@@
  #include <linux/mfd/core.h>
  #include <linux/platform_device.h>
  #include <linux/seq_file.h>
+ #include <linux/regmap.h>
  
  #include <linux/mfd/wm8994/core.h>
  #include <linux/mfd/wm8994/pdata.h>
@@@ -89,11 -90,8 +90,11 @@@ static int wm8994_gpio_direction_out(st
        struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip);
        struct wm8994 *wm8994 = wm8994_gpio->wm8994;
  
 +      if (value)
 +              value = WM8994_GPN_LVL;
 +
        return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset,
 -                             WM8994_GPN_DIR, 0);
 +                             WM8994_GPN_DIR | WM8994_GPN_LVL, value);
  }
  
  static void wm8994_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
@@@ -112,10 -110,7 +113,7 @@@ static int wm8994_gpio_to_irq(struct gp
        struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip);
        struct wm8994 *wm8994 = wm8994_gpio->wm8994;
  
-       if (!wm8994->irq_base)
-               return -EINVAL;
-       return wm8994->irq_base + offset;
+       return regmap_irq_get_virq(wm8994->irq_data, offset);
  }
  
  
@@@ -254,7 -249,8 +252,8 @@@ static int __devinit wm8994_gpio_probe(
        struct wm8994_gpio *wm8994_gpio;
        int ret;
  
-       wm8994_gpio = kzalloc(sizeof(*wm8994_gpio), GFP_KERNEL);
+       wm8994_gpio = devm_kzalloc(&pdev->dev, sizeof(*wm8994_gpio),
+                                  GFP_KERNEL);
        if (wm8994_gpio == NULL)
                return -ENOMEM;
  
        return ret;
  
  err:
-       kfree(wm8994_gpio);
        return ret;
  }
  
  static int __devexit wm8994_gpio_remove(struct platform_device *pdev)
  {
        struct wm8994_gpio *wm8994_gpio = platform_get_drvdata(pdev);
-       int ret;
  
-       ret = gpiochip_remove(&wm8994_gpio->gpio_chip);
-       if (ret == 0)
-               kfree(wm8994_gpio);
-       return ret;
+       return gpiochip_remove(&wm8994_gpio->gpio_chip);
  }
  
  static struct platform_driver wm8994_gpio_driver = {