]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge tag 'pinctrl-v4.12-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 May 2017 00:59:33 +0000 (17:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 May 2017 00:59:33 +0000 (17:59 -0700)
Pull pin control updates from Linus Walleij:
 "This is the bulk of pin control changes for the v4.12 cycle.

  The extra week before the merge window actually resulted in some of
  the type of fixes that usually arrive after the merge window already
  starting to trickle in from eager developers using -next, I'm
  impressed.

  I have recruited a Samsung subsubsystem maintainer (Krzysztof) to deal
  with the onset of Samsung patches. It works great.

  Apart from that it is a boring round, just incremental updates and
  fixes all over the place, no serious core changes or anything exciting
  like that. The most pleasing to see is Julia Cartwrights work to audit
  the irqchip-providing drivers for realtime locking compliance. It's
  one of those "I should really get around to looking into that" things
  that have been on my TODO list since forever.

  Summary:

  Core changes:

   - add bi-directional and output-enable pin configurations to the
     generic bindings and generic pin controlling core.

  New drivers or subdrivers:

   - Armada 37xx SoC pin controller and GPIO support.

   - Axis ARTPEC-6 SoC pin controller support.

   - AllWinner A64 R_PIO controller support, and opening up the
     AllWinner sunxi driver for ARM64 use.

   - Rockchip RK3328 support.

   - Renesas R-Car H3 ES2.0 support.

   - STM32F469 support in the STM32 driver.

   - Aspeed G4 and G5 pin controller support.

  Improvements:

   - a whole slew of realtime improvements to drivers implementing
     irqchips: BCM, AMD, SiRF, sunxi, rockchip.

   - switch meson driver to get the GPIO ranges from the device tree.

   - input schmitt trigger support on the Rockchip driver.

   - enable the sunxi (AllWinner) driver to also be used on ARM64
     silicon.

   - name the Qualcomm QDF2xxx GPIO lines.

   - support GMMR GPIO regions on the Intel Cherryview. This fixes a
     serialization problem on these platforms.

   - pad retention support for the Samsung Exynos 5433.

   - handle suspend-to-ram in the AT91-pio4 driver.

   - pin configuration support in the Aspeed driver.

  Cleanups:

   - the final name of Rockchip RK1108 was RV1108 so rename the driver
     and variables to stay consistent"

* tag 'pinctrl-v4.12-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (80 commits)
  pinctrl: mediatek: Add missing pinctrl bindings for mt7623
  pinctrl: artpec6: Fix return value check in artpec6_pmx_probe()
  pinctrl: artpec6: Remove .owner field for driver
  pinctrl: tegra: xusb: Silence sparse warnings
  ARM: at91/at91-pinctrl documentation: fix spelling mistake: "contoller" -> "controller"
  pinctrl: make artpec6 explicitly non-modular
  pinctrl: aspeed: g5: Add pinconf support
  pinctrl: aspeed: g4: Add pinconf support
  pinctrl: aspeed: Add core pinconf support
  pinctrl: aspeed: Document pinconf in devicetree bindings
  pinctrl: Add st,stm32f469-pinctrl compatible to stm32-pinctrl
  pinctrl: stm32: Add STM32F469 MCU support
  Documentation: dt: Remove ngpios from stm32-pinctrl binding
  pinctrl: stm32: replace device_initcall() with arch_initcall()
  pinctrl: stm32: add possibility to use gpio-ranges to declare bank range
  pinctrl: armada-37xx: Add gpio support
  pinctrl: armada-37xx: Add pin controller support for Armada 37xx
  pinctrl: dt-bindings: Add documentation for Armada 37xx pin controllers
  pinctrl: core: Make pinctrl_init_controller() static
  pinctrl: generic: Add bi-directional and output-enable
  ...

1  2 
MAINTAINERS
drivers/pinctrl/core.c
drivers/pinctrl/intel/pinctrl-cherryview.c
drivers/pinctrl/meson/pinctrl-meson-gxbb.c
drivers/pinctrl/samsung/pinctrl-exynos.c
drivers/pinctrl/samsung/pinctrl-samsung.c
drivers/pinctrl/uniphier/pinctrl-uniphier-ld11.c

diff --combined MAINTAINERS
index 06d01a0a8a484d3dfcb808520532e436044acca9,1d5bc9757dc1b70e208a50ec13feac4e4be1c591..bb4c9773a83cf974facf1ddada525ae1d996a703
@@@ -896,19 -896,12 +896,19 @@@ F:      arch/arm64/boot/dts/apm
  APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER
  M:    Iyappan Subramanian <isubramanian@apm.com>
  M:    Keyur Chudgar <kchudgar@apm.com>
 +M:    Quan Nguyen <qnguyen@apm.com>
  S:    Supported
  F:    drivers/net/ethernet/apm/xgene/
  F:    drivers/net/phy/mdio-xgene.c
  F:    Documentation/devicetree/bindings/net/apm-xgene-enet.txt
  F:    Documentation/devicetree/bindings/net/apm-xgene-mdio.txt
  
 +APPLIED MICRO (APM) X-GENE SOC ETHERNET (V2) DRIVER
 +M:    Iyappan Subramanian <isubramanian@apm.com>
 +M:    Keyur Chudgar <kchudgar@apm.com>
 +S:    Supported
 +F:    drivers/net/ethernet/apm/xgene-v2/
 +
  APPLIED MICRO (APM) X-GENE SOC PMU
  M:    Tai Nguyen <ttnguyen@apm.com>
  S:    Supported
@@@ -1095,6 -1088,8 +1095,8 @@@ L:      linux-arm-kernel@axis.co
  F:    arch/arm/mach-artpec
  F:    arch/arm/boot/dts/artpec6*
  F:    drivers/clk/axis
+ F:    drivers/pinctrl/pinctrl-artpec*
+ F:    Documentation/devicetree/bindings/pinctrl/axis,artpec6-pinctrl.txt
  
  ARM/ASPEED MACHINE SUPPORT
  M:    Joel Stanley <joel@jms.id.au>
@@@ -2334,6 -2329,21 +2336,6 @@@ S:     Maintaine
  F:    drivers/auxdisplay/
  F:    include/linux/cfag12864b.h
  
 -AVR32 ARCHITECTURE
 -M:    Haavard Skinnemoen <hskinnemoen@gmail.com>
 -M:    Hans-Christian Egtvedt <egtvedt@samfundet.no>
 -W:    http://www.atmel.com/products/AVR32/
 -W:    http://mirror.egtvedt.no/avr32linux.org/
 -W:    http://avrfreaks.net/
 -S:    Maintained
 -F:    arch/avr32/
 -
 -AVR32/AT32AP MACHINE SUPPORT
 -M:    Haavard Skinnemoen <hskinnemoen@gmail.com>
 -M:    Hans-Christian Egtvedt <egtvedt@samfundet.no>
 -S:    Maintained
 -F:    arch/avr32/mach-at32ap/
 -
  AX.25 NETWORK LAYER
  M:    Ralf Baechle <ralf@linux-mips.org>
  L:    linux-hams@vger.kernel.org
@@@ -2536,14 -2546,6 +2538,14 @@@ F:    block
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
  
 +BFQ I/O SCHEDULER
 +M:    Paolo Valente <paolo.valente@linaro.org>
 +M:    Jens Axboe <axboe@kernel.dk>
 +L:    linux-block@vger.kernel.org
 +S:    Maintained
 +F:    block/bfq-*
 +F:    Documentation/block/bfq-iosched.txt
 +
  BLOCK2MTD DRIVER
  M:    Joern Engel <joern@lazybastard.org>
  L:    linux-mtd@lists.infradead.org
@@@ -2585,26 -2587,12 +2587,26 @@@ F:   include/uapi/linux/if_bonding.
  
  BPF (Safe dynamic programs and tools)
  M:    Alexei Starovoitov <ast@kernel.org>
 +M:    Daniel Borkmann <daniel@iogearbox.net>
  L:    netdev@vger.kernel.org
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 +F:    arch/x86/net/bpf_jit*
 +F:    Documentation/networking/filter.txt
 +F:    include/linux/bpf*
 +F:    include/linux/filter.h
 +F:    include/uapi/linux/bpf*
 +F:    include/uapi/linux/filter.h
  F:    kernel/bpf/
 -F:    tools/testing/selftests/bpf/
 +F:    kernel/trace/bpf_trace.c
  F:    lib/test_bpf.c
 +F:    net/bpf/
 +F:    net/core/filter.c
 +F:    net/sched/act_bpf.c
 +F:    net/sched/cls_bpf.c
 +F:    samples/bpf/
 +F:    tools/net/bpf*
 +F:    tools/testing/selftests/bpf/
  
  BROADCOM B44 10/100 ETHERNET DRIVER
  M:    Michael Chan <michael.chan@broadcom.com>
@@@ -2951,15 -2939,6 +2953,15 @@@ W:    http://www.linux-c6x.org/wiki/index.
  S:    Maintained
  F:    arch/c6x/
  
 +CA8210 IEEE-802.15.4 RADIO DRIVER
 +M:    Harry Morris <h.morris@cascoda.com>
 +M:    linuxdev@cascoda.com
 +L:    linux-wpan@vger.kernel.org
 +W:    https://github.com/Cascoda/ca8210-linux.git
 +S:    Maintained
 +F:    drivers/net/ieee802154/ca8210.c
 +F:    Documentation/devicetree/bindings/net/ieee802154/ca8210.txt
 +
  CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com (moderated for non-subscribers)
@@@ -3064,14 -3043,6 +3066,14 @@@ S:    Supporte
  F:    drivers/i2c/busses/i2c-octeon*
  F:    drivers/i2c/busses/i2c-thunderx*
  
 +CAVIUM MMC DRIVER
 +M:    Jan Glauber <jglauber@cavium.com>
 +M:    David Daney <david.daney@cavium.com>
 +M:    Steven J. Hill <Steven.Hill@cavium.com>
 +W:    http://www.cavium.com
 +S:    Supported
 +F:    drivers/mmc/host/cavium*
 +
  CAVIUM LIQUIDIO NETWORK DRIVER
  M:     Derek Chickles <derek.chickles@caviumnetworks.com>
  M:     Satanand Burla <satananda.burla@caviumnetworks.com>
@@@ -3247,6 -3218,7 +3249,6 @@@ F:      drivers/platform/chrome
  
  CISCO VIC ETHERNET NIC DRIVER
  M:    Christian Benvenuti <benve@cisco.com>
 -M:    Sujith Sankar <ssujith@cisco.com>
  M:    Govindarajulu Varadarajan <_govind@gmx.com>
  M:    Neel Patel <neepatel@cisco.com>
  S:    Supported
@@@ -3480,7 -3452,6 +3482,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.linaro.org/people/vireshk/linux.git (For ARM Updates)
  B:    https://bugzilla.kernel.org
  F:    Documentation/cpu-freq/
 +F:    Documentation/devicetree/bindings/cpufreq/
  F:    drivers/cpufreq/
  F:    include/linux/cpufreq.h
  F:    tools/testing/selftests/cpufreq/
@@@ -4149,13 -4120,14 +4151,13 @@@ F:   drivers/block/drbd
  F:    lib/lru_cache.c
  F:    Documentation/blockdev/drbd/
  
 -DRIVER CORE, KOBJECTS, DEBUGFS, KERNFS AND SYSFS
 +DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
  S:    Supported
  F:    Documentation/kobject.txt
  F:    drivers/base/
  F:    fs/debugfs/
 -F:    fs/kernfs/
  F:    fs/sysfs/
  F:    include/linux/debugfs.h
  F:    include/linux/kobj*
@@@ -4725,7 -4697,6 +4727,7 @@@ L:      linux-edac@vger.kernel.or
  L:    linux-mips@linux-mips.org
  S:    Supported
  F:    drivers/edac/octeon_edac*
 +F:    drivers/edac/thunderx_edac*
  
  EDAC-E752X
  M:    Mark Gross <mark.gross@intel.com>
@@@ -4807,12 -4778,6 +4809,12 @@@ L:    linux-edac@vger.kernel.or
  S:    Maintained
  F:    drivers/edac/mpc85xx_edac.[ch]
  
 +EDAC-PND2
 +M:    Tony Luck <tony.luck@intel.com>
 +L:    linux-edac@vger.kernel.org
 +S:    Maintained
 +F:    drivers/edac/pnd2_edac.[ch]
 +
  EDAC-PASEMI
  M:    Egor Martovetsky <egor@pasemi.com>
  L:    linux-edac@vger.kernel.org
@@@ -4960,7 -4925,6 +4962,7 @@@ F:      include/linux/netfilter_bridge
  F:    net/bridge/
  
  ETHERNET PHY LIBRARY
 +M:    Andrew Lunn <andrew@lunn.ch>
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -5439,23 -5403,6 +5441,23 @@@ F:    fs/fuse
  F:    include/uapi/linux/fuse.h
  F:    Documentation/filesystems/fuse.txt
  
 +FUTEX SUBSYSTEM
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +M:    Ingo Molnar <mingo@redhat.com>
 +R:    Peter Zijlstra <peterz@infradead.org>
 +R:    Darren Hart <dvhart@infradead.org>
 +L:    linux-kernel@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
 +S:    Maintained
 +F:    kernel/futex.c
 +F:    kernel/futex_compat.c
 +F:    include/asm-generic/futex.h
 +F:    include/linux/futex.h
 +F:    include/uapi/linux/futex.h
 +F:    tools/testing/selftests/futex/
 +F:    tools/perf/bench/futex*
 +F:    Documentation/*futex*
 +
  FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
  M:    Rik Faith <faith@cs.unc.edu>
  L:    linux-scsi@vger.kernel.org
@@@ -6060,7 -6007,7 +6062,7 @@@ M:      Sebastian Reichel <sre@kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-hsi
 -F:    Documentation/device-drivers/serial-interfaces.rst
 +F:    Documentation/driver-api/hsi.rst
  F:    drivers/hsi/
  F:    include/linux/hsi/
  F:    include/uapi/linux/hsi/
@@@ -6266,7 -6213,7 +6268,7 @@@ F:      drivers/crypto/nx/nx_csbcpb.
  F:    drivers/crypto/nx/nx_debugfs.h
  
  IBM Power 842 compression accelerator
 -M:    Dan Streetman <ddstreet@ieee.org>
 +M:    Haren Myneni <haren@us.ibm.com>
  S:    Supported
  F:    drivers/crypto/nx/Makefile
  F:    drivers/crypto/nx/Kconfig
@@@ -7139,9 -7086,9 +7141,9 @@@ S:      Maintaine
  F:    fs/autofs4/
  
  KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
 +M:    Masahiro Yamada <yamada.masahiro@socionext.com>
  M:    Michal Marek <mmarek@suse.com>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git for-next
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git rc-fixes
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
  L:    linux-kbuild@vger.kernel.org
  S:    Maintained
  F:    Documentation/kbuild/
@@@ -7225,7 -7172,6 +7227,7 @@@ S:      Supporte
  F:    Documentation/s390/kvm.txt
  F:    arch/s390/include/asm/kvm*
  F:    arch/s390/kvm/
 +F:    arch/s390/mm/gmap.c
  
  KERNEL VIRTUAL MACHINE (KVM) FOR ARM
  M:    Christoffer Dall <christoffer.dall@linaro.org>
@@@ -7259,14 -7205,6 +7261,14 @@@ F:    arch/mips/include/uapi/asm/kvm
  F:    arch/mips/include/asm/kvm*
  F:    arch/mips/kvm/
  
 +KERNFS
 +M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +M:    Tejun Heo <tj@kernel.org>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
 +S:    Supported
 +F:    include/linux/kernfs.h
 +F:    fs/kernfs/
 +
  KEXEC
  M:    Eric Biederman <ebiederm@xmission.com>
  W:    http://kernel.org/pub/linux/utils/kernel/kexec/
@@@ -7838,6 -7776,13 +7840,6 @@@ F:     include/net/mac80211.
  F:    net/mac80211/
  F:    drivers/net/wireless/mac80211_hwsim.[ch]
  
 -MACVLAN DRIVER
 -M:    Patrick McHardy <kaber@trash.net>
 -L:    netdev@vger.kernel.org
 -S:    Maintained
 -F:    drivers/net/macvlan.c
 -F:    include/linux/if_macvlan.h
 -
  MAILBOX API
  M:    Jassi Brar <jassisinghbrar@gmail.com>
  L:    linux-kernel@vger.kernel.org
@@@ -7908,10 -7853,8 +7910,10 @@@ S:    Maintaine
  F:    drivers/net/ethernet/marvell/mvneta.*
  
  MARVELL MWIFIEX WIRELESS DRIVER
 -M:    Amitkumar Karwar <akarwar@marvell.com>
 +M:    Amitkumar Karwar <amitkarwar@gmail.com>
  M:    Nishant Sarmukadam <nishants@marvell.com>
 +M:    Ganapathi Bhat <gbhat@marvell.com>
 +M:    Xinming Hu <huxm@marvell.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  F:    drivers/net/wireless/marvell/mwifiex/
@@@ -7927,13 -7870,6 +7929,13 @@@ M:    Nicolas Pitre <nico@fluxnic.net
  S:    Odd Fixes
  F:    drivers/mmc/host/mvsdio.*
  
 +MARVELL XENON MMC/SD/SDIO HOST CONTROLLER DRIVER
 +M:    Hu Ziji <huziji@marvell.com>
 +L:    linux-mmc@vger.kernel.org
 +S:    Supported
 +F:    drivers/mmc/host/sdhci-xenon*
 +F:    Documentation/devicetree/bindings/mmc/marvell,xenon-sdhci.txt
 +
  MATROX FRAMEBUFFER DRIVER
  L:    linux-fbdev@vger.kernel.org
  S:    Orphan
@@@ -8373,6 -8309,7 +8375,6 @@@ M:      Richard Leitner <richard.leitner@ski
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    drivers/usb/misc/usb251xb.c
 -F:    include/linux/platform_data/usb251xb.h
  F:    Documentation/devicetree/bindings/usb/usb251xb.txt
  
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
@@@ -8819,7 -8756,6 +8821,7 @@@ W:      http://www.linuxfoundation.org/en/Ne
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
 +B:    mailto:netdev@vger.kernel.org
  S:    Maintained
  F:    net/
  F:    include/net/
@@@ -8860,12 -8796,12 +8862,12 @@@ F:   net/core/flow.
  F:    net/xfrm/
  F:    net/key/
  F:    net/ipv4/xfrm*
 -F:    net/ipv4/esp4.c
 +F:    net/ipv4/esp4*
  F:    net/ipv4/ah4.c
  F:    net/ipv4/ipcomp.c
  F:    net/ipv4/ip_vti.c
  F:    net/ipv6/xfrm*
 -F:    net/ipv6/esp6.c
 +F:    net/ipv6/esp6*
  F:    net/ipv6/ah6.c
  F:    net/ipv6/ipcomp6.c
  F:    net/ipv6/ip6_vti.c
@@@ -8919,6 -8855,8 +8921,6 @@@ S:      Supporte
  F:    drivers/net/ethernet/qlogic/netxen/
  
  NFC SUBSYSTEM
 -M:    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
 -M:    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
  M:    Samuel Ortiz <sameo@linux.intel.com>
  L:    linux-wireless@vger.kernel.org
  L:    linux-nfc@lists.01.org (subscribers-only)
@@@ -9973,6 -9911,8 +9975,8 @@@ M:      Krzysztof Kozlowski <krzk@kernel.org
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
+ Q:    https://patchwork.kernel.org/project/linux-samsung-soc/list/
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
  S:    Maintained
  F:    drivers/pinctrl/samsung/
  F:    include/dt-bindings/pinctrl/samsung.h
@@@ -10879,7 -10819,6 +10883,7 @@@ F:   drivers/s390/block/dasd
  F:    block/partitions/ibm.c
  
  S390 NETWORK DRIVERS
 +M:    Julian Wiedmann <jwi@linux.vnet.ibm.com>
  M:    Ursula Braun <ubraun@linux.vnet.ibm.com>
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -10910,7 -10849,6 +10914,7 @@@ S:   Supporte
  F:    drivers/s390/scsi/zfcp_*
  
  S390 IUCV NETWORK LAYER
 +M:    Julian Wiedmann <jwi@linux.vnet.ibm.com>
  M:    Ursula Braun <ubraun@linux.vnet.ibm.com>
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -10926,16 -10864,6 +10930,16 @@@ W: http://www.ibm.com/developerworks/li
  S:    Supported
  F:    drivers/iommu/s390-iommu.c
  
 +S390 VFIO-CCW DRIVER
 +M:    Cornelia Huck <cornelia.huck@de.ibm.com>
 +M:    Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +L:    kvm@vger.kernel.org
 +S:    Supported
 +F:    drivers/s390/cio/vfio_ccw*
 +F:    Documentation/s390/vfio-ccw.txt
 +F:    include/uapi/linux/vfio_ccw.h
 +
  S3C24XX SD/MMC Driver
  M:    Ben Dooks <ben-linux@fluff.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -10983,14 -10911,6 +10987,14 @@@ L: alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/samsung/
  
 +SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +L:    linux-crypto@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Maintained
 +F:    drivers/crypto/exynos-rng.c
 +F:    Documentation/devicetree/bindings/rng/samsung,exynos-rng4.txt
 +
  SAMSUNG FRAMEBUFFER DRIVER
  M:    Jingoo Han <jingoohan1@gmail.com>
  L:    linux-fbdev@vger.kernel.org
@@@ -11015,14 -10935,6 +11019,14 @@@ F: Documentation/devicetree/bindings/re
  F:    Documentation/devicetree/bindings/regulator/samsung,s5m*.txt
  F:    Documentation/devicetree/bindings/clock/samsung,s2mps11.txt
  
 +SAMSUNG S5P Security SubSystem (SSS) DRIVER
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Vladimir Zapolskiy <vz@mleia.com>
 +L:    linux-crypto@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Maintained
 +F:    drivers/crypto/s5p-sss.c
 +
  SAMSUNG S5P/EXYNOS4 SOC SERIES CAMERA SUBSYSTEM DRIVERS
  M:    Kyungmin Park <kyungmin.park@samsung.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
@@@ -11154,12 -11066,6 +11158,12 @@@ F: include/linux/dma/dw.
  F:    include/linux/platform_data/dma-dw.h
  F:    drivers/dma/dw/
  
 +SYNOPSYS DESIGNWARE ENTERPRISE ETHERNET DRIVER
 +M:    Jie Deng <jiedeng@synopsys.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/synopsys/
 +
  SYNOPSYS DESIGNWARE I2C DRIVER
  M:    Jarkko Nikula <jarkko.nikula@linux.intel.com>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
@@@ -11198,7 -11104,6 +11202,7 @@@ F:   drivers/power/supply/bq27xxx_battery
  TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
  M:    John Stultz <john.stultz@linaro.org>
  M:    Thomas Gleixner <tglx@linutronix.de>
 +R:    Stephen Boyd <sboyd@codeaurora.org>
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
@@@ -12264,19 -12169,12 +12268,19 @@@ F:        Documentation/accounting/taskstats
  F:    include/linux/taskstats*
  F:    kernel/taskstats.c
  
 -TC CLASSIFIER
 +TC subsystem
  M:    Jamal Hadi Salim <jhs@mojatatu.com>
 +M:    Cong Wang <xiyou.wangcong@gmail.com>
 +M:    Jiri Pirko <jiri@resnulli.us>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    include/net/pkt_cls.h
 +F:    include/net/pkt_sched.h
 +F:    include/net/tc_act/
  F:    include/uapi/linux/pkt_cls.h
 +F:    include/uapi/linux/pkt_sched.h
 +F:    include/uapi/linux/tc_act/
 +F:    include/uapi/linux/tc_ematch/
  F:    net/sched/
  
  TCP LOW PRIORITY MODULE
@@@ -12561,6 -12459,7 +12565,6 @@@ F:   drivers/clk/ti
  F:    include/linux/clk/ti.h
  
  TI ETHERNET SWITCH DRIVER (CPSW)
 -M:    Mugunthan V N <mugunthanvnm@ti.com>
  R:    Grygorii Strashko <grygorii.strashko@ti.com>
  L:    linux-omap@vger.kernel.org
  L:    netdev@vger.kernel.org
@@@ -13372,11 -13271,8 +13376,11 @@@ L: netdev@vger.kernel.or
  S:    Maintained
  F:    include/linux/virtio_vsock.h
  F:    include/uapi/linux/virtio_vsock.h
 +F:    include/uapi/linux/vsockmon.h
 +F:    net/vmw_vsock/af_vsock_tap.c
  F:    net/vmw_vsock/virtio_transport_common.c
  F:    net/vmw_vsock/virtio_transport.c
 +F:    drivers/net/vsockmon.c
  F:    drivers/vhost/vsock.c
  F:    drivers/vhost/vsock.h
  
@@@ -13404,7 -13300,7 +13408,7 @@@ F:   drivers/virtio
  F:    tools/virtio/
  F:    drivers/net/virtio_net.c
  F:    drivers/block/virtio_blk.c
 -F:    include/linux/virtio_*.h
 +F:    include/linux/virtio*.h
  F:    include/uapi/linux/virtio_*.h
  F:    drivers/crypto/virtio/
  
@@@ -13492,6 -13388,14 +13496,6 @@@ W:  https://linuxtv.or
  S:    Maintained
  F:    drivers/media/platform/vivid/*
  
 -VLAN (802.1Q)
 -M:    Patrick McHardy <kaber@trash.net>
 -L:    netdev@vger.kernel.org
 -S:    Maintained
 -F:    drivers/net/macvlan.c
 -F:    include/linux/if_*vlan.h
 -F:    net/8021q/
 -
  VLYNQ BUS
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    openwrt-devel@lists.openwrt.org (subscribers-only)
diff --combined drivers/pinctrl/core.c
index 32822b0d9cd0f03f76eb5b96307c8b6f0ea1558a,85db6c46fe66945ff31a1b80930449aaf46ecc17..1653cbda6a8299b33b5cebae92bd4710e41412a4
@@@ -525,7 -525,7 +525,7 @@@ pinctrl_find_gpio_range_from_pin(struc
  EXPORT_SYMBOL_GPL(pinctrl_find_gpio_range_from_pin);
  
  /**
-  * pinctrl_remove_gpio_range() - remove a range of GPIOs fro a pin controller
+  * pinctrl_remove_gpio_range() - remove a range of GPIOs from a pin controller
   * @pctldev: pin controller device to remove the range from
   * @range: the GPIO range to remove
   */
@@@ -1062,7 -1062,7 +1062,7 @@@ static struct pinctrl *create_pinctrl(s
        mutex_unlock(&pinctrl_maps_mutex);
  
        if (ret < 0) {
-               /* If some other error than deferral occured, return here */
+               /* If some other error than deferral occurred, return here */
                pinctrl_free(p, false);
                return ERR_PTR(ret);
        }
@@@ -1939,9 -1939,9 +1939,9 @@@ static int pinctrl_check_ops(struct pin
   * @dev: parent device for this pin controller
   * @driver_data: private pin controller data for this pin controller
   */
- struct pinctrl_dev *pinctrl_init_controller(struct pinctrl_desc *pctldesc,
                                          struct device *dev,
-                                           void *driver_data)
+ static struct pinctrl_dev *
pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev,
+                       void *driver_data)
  {
        struct pinctrl_dev *pctldev;
        int ret;
@@@ -2010,57 -2010,29 +2010,57 @@@ out_err
        return ERR_PTR(ret);
  }
  
 -static int pinctrl_create_and_start(struct pinctrl_dev *pctldev)
 +static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev)
  {
        pctldev->p = create_pinctrl(pctldev->dev, pctldev);
 -      if (!IS_ERR(pctldev->p)) {
 -              kref_get(&pctldev->p->users);
 -              pctldev->hog_default =
 -                      pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
 -              if (IS_ERR(pctldev->hog_default)) {
 -                      dev_dbg(pctldev->dev,
 -                              "failed to lookup the default state\n");
 -              } else {
 -                      if (pinctrl_select_state(pctldev->p,
 -                                              pctldev->hog_default))
 -                              dev_err(pctldev->dev,
 -                                      "failed to select default state\n");
 -              }
 +      if (PTR_ERR(pctldev->p) == -ENODEV) {
 +              dev_dbg(pctldev->dev, "no hogs found\n");
  
 -              pctldev->hog_sleep =
 -                      pinctrl_lookup_state(pctldev->p,
 -                                                  PINCTRL_STATE_SLEEP);
 -              if (IS_ERR(pctldev->hog_sleep))
 -                      dev_dbg(pctldev->dev,
 -                              "failed to lookup the sleep state\n");
 +              return 0;
 +      }
 +
 +      if (IS_ERR(pctldev->p)) {
 +              dev_err(pctldev->dev, "error claiming hogs: %li\n",
 +                      PTR_ERR(pctldev->p));
 +
 +              return PTR_ERR(pctldev->p);
 +      }
 +
 +      kref_get(&pctldev->p->users);
 +      pctldev->hog_default =
 +              pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
 +      if (IS_ERR(pctldev->hog_default)) {
 +              dev_dbg(pctldev->dev,
 +                      "failed to lookup the default state\n");
 +      } else {
 +              if (pinctrl_select_state(pctldev->p,
 +                                       pctldev->hog_default))
 +                      dev_err(pctldev->dev,
 +                              "failed to select default state\n");
 +      }
 +
 +      pctldev->hog_sleep =
 +              pinctrl_lookup_state(pctldev->p,
 +                                   PINCTRL_STATE_SLEEP);
 +      if (IS_ERR(pctldev->hog_sleep))
 +              dev_dbg(pctldev->dev,
 +                      "failed to lookup the sleep state\n");
 +
 +      return 0;
 +}
 +
 +int pinctrl_enable(struct pinctrl_dev *pctldev)
 +{
 +      int error;
 +
 +      error = pinctrl_claim_hogs(pctldev);
 +      if (error) {
 +              dev_err(pctldev->dev, "could not claim hogs: %i\n",
 +                      error);
 +              mutex_destroy(&pctldev->mutex);
 +              kfree(pctldev);
 +
 +              return error;
        }
  
        mutex_lock(&pinctrldev_list_mutex);
  
        return 0;
  }
 +EXPORT_SYMBOL_GPL(pinctrl_enable);
  
  /**
   * pinctrl_register() - register a pin controller device
@@@ -2094,30 -2065,25 +2094,30 @@@ struct pinctrl_dev *pinctrl_register(st
        if (IS_ERR(pctldev))
                return pctldev;
  
 -      error = pinctrl_create_and_start(pctldev);
 -      if (error) {
 -              mutex_destroy(&pctldev->mutex);
 -              kfree(pctldev);
 -
 +      error = pinctrl_enable(pctldev);
 +      if (error)
                return ERR_PTR(error);
 -      }
  
        return pctldev;
  
  }
  EXPORT_SYMBOL_GPL(pinctrl_register);
  
 +/**
 + * pinctrl_register_and_init() - register and init pin controller device
 + * @pctldesc: descriptor for this pin controller
 + * @dev: parent device for this pin controller
 + * @driver_data: private pin controller data for this pin controller
 + * @pctldev: pin controller device
 + *
 + * Note that pinctrl_enable() still needs to be manually called after
 + * this once the driver is ready.
 + */
  int pinctrl_register_and_init(struct pinctrl_desc *pctldesc,
                              struct device *dev, void *driver_data,
                              struct pinctrl_dev **pctldev)
  {
        struct pinctrl_dev *p;
 -      int error;
  
        p = pinctrl_init_controller(pctldesc, dev, driver_data);
        if (IS_ERR(p))
         */
        *pctldev = p;
  
 -      error = pinctrl_create_and_start(p);
 -      if (error) {
 -              mutex_destroy(&p->mutex);
 -              kfree(p);
 -              *pctldev = NULL;
 -
 -              return error;
 -      }
 -
        return 0;
  }
  EXPORT_SYMBOL_GPL(pinctrl_register_and_init);
index 9ff790174906e46962ec9b9fa00f4f04de14aa18,83640afd825c57bea410164a2092e298064522fb..2debba62fac90d956ce37cd09805c518ee4a8da5
@@@ -13,7 -13,6 +13,7 @@@
   * published by the Free Software Foundation.
   */
  
 +#include <linux/dmi.h>
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/init.h>
@@@ -149,6 -148,7 +149,7 @@@ struct chv_community 
        size_t ngpio_ranges;
        size_t ngpios;
        size_t nirqs;
+       acpi_adr_space_type acpi_space_id;
  };
  
  struct chv_pin_context {
@@@ -405,6 -405,7 +406,7 @@@ static const struct chv_community south
         * trigger GPEs.
         */
        .nirqs = 8,
+       .acpi_space_id = 0x91,
  };
  
  static const struct pinctrl_pin_desc north_pins[] = {
@@@ -494,6 -495,7 +496,7 @@@ static const struct chv_community north
         * GPEs.
         */
        .nirqs = 8,
+       .acpi_space_id = 0x92,
  };
  
  static const struct pinctrl_pin_desc east_pins[] = {
@@@ -537,6 -539,7 +540,7 @@@ static const struct chv_community east_
        .ngpio_ranges = ARRAY_SIZE(east_gpio_ranges),
        .ngpios = ARRAY_SIZE(east_pins),
        .nirqs = 16,
+       .acpi_space_id = 0x93,
  };
  
  static const struct pinctrl_pin_desc southeast_pins[] = {
@@@ -663,6 -666,7 +667,7 @@@ static const struct chv_community south
        .ngpio_ranges = ARRAY_SIZE(southeast_gpio_ranges),
        .ngpios = ARRAY_SIZE(southeast_pins),
        .nirqs = 16,
+       .acpi_space_id = 0x94,
  };
  
  static const struct chv_community *chv_communities[] = {
@@@ -1525,31 -1529,10 +1530,31 @@@ static void chv_gpio_irq_handler(struc
        chained_irq_exit(chip, desc);
  }
  
 +/*
 + * Certain machines seem to hardcode Linux IRQ numbers in their ACPI
 + * tables. Since we leave GPIOs that are not capable of generating
 + * interrupts out of the irqdomain the numbering will be different and
 + * cause devices using the hardcoded IRQ numbers fail. In order not to
 + * break such machines we will only mask pins from irqdomain if the machine
 + * is not listed below.
 + */
 +static const struct dmi_system_id chv_no_valid_mask[] = {
 +      {
 +              /* See https://bugzilla.kernel.org/show_bug.cgi?id=194945 */
 +              .ident = "Acer Chromebook (CYAN)",
 +              .matches = {
 +                      DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
 +                      DMI_MATCH(DMI_PRODUCT_NAME, "Edgar"),
 +                      DMI_MATCH(DMI_BIOS_DATE, "05/21/2016"),
 +              },
 +      }
 +};
 +
  static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq)
  {
        const struct chv_gpio_pinrange *range;
        struct gpio_chip *chip = &pctrl->chip;
 +      bool need_valid_mask = !dmi_check_system(chv_no_valid_mask);
        int ret, i, offset;
  
        *chip = chv_gpio_chip;
        chip->label = dev_name(pctrl->dev);
        chip->parent = pctrl->dev;
        chip->base = -1;
 -      chip->irq_need_valid_mask = true;
 +      chip->irq_need_valid_mask = need_valid_mask;
  
        ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl);
        if (ret) {
                intsel &= CHV_PADCTRL0_INTSEL_MASK;
                intsel >>= CHV_PADCTRL0_INTSEL_SHIFT;
  
 -              if (intsel >= pctrl->community->nirqs)
 +              if (need_valid_mask && intsel >= pctrl->community->nirqs)
                        clear_bit(i, chip->irq_valid_mask);
        }
  
        return 0;
  }
  
+ static acpi_status chv_pinctrl_mmio_access_handler(u32 function,
+       acpi_physical_address address, u32 bits, u64 *value,
+       void *handler_context, void *region_context)
+ {
+       struct chv_pinctrl *pctrl = region_context;
+       unsigned long flags;
+       acpi_status ret = AE_OK;
+       raw_spin_lock_irqsave(&chv_lock, flags);
+       if (function == ACPI_WRITE)
+               chv_writel((u32)(*value), pctrl->regs + (u32)address);
+       else if (function == ACPI_READ)
+               *value = readl(pctrl->regs + (u32)address);
+       else
+               ret = AE_BAD_PARAMETER;
+       raw_spin_unlock_irqrestore(&chv_lock, flags);
+       return ret;
+ }
  static int chv_pinctrl_probe(struct platform_device *pdev)
  {
        struct chv_pinctrl *pctrl;
        struct acpi_device *adev;
        struct resource *res;
+       acpi_status status;
        int ret, irq, i;
  
        adev = ACPI_COMPANION(&pdev->dev);
        if (ret)
                return ret;
  
+       status = acpi_install_address_space_handler(adev->handle,
+                                       pctrl->community->acpi_space_id,
+                                       chv_pinctrl_mmio_access_handler,
+                                       NULL, pctrl);
+       if (ACPI_FAILURE(status))
+               dev_err(&pdev->dev, "failed to install ACPI addr space handler\n");
        platform_set_drvdata(pdev, pctrl);
  
        return 0;
  }
  
+ static int chv_pinctrl_remove(struct platform_device *pdev)
+ {
+       struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
+       acpi_remove_address_space_handler(ACPI_COMPANION(&pdev->dev),
+                                         pctrl->community->acpi_space_id,
+                                         chv_pinctrl_mmio_access_handler);
+       return 0;
+ }
  #ifdef CONFIG_PM_SLEEP
  static int chv_pinctrl_suspend_noirq(struct device *dev)
  {
@@@ -1780,6 -1804,7 +1826,7 @@@ MODULE_DEVICE_TABLE(acpi, chv_pinctrl_a
  
  static struct platform_driver chv_pinctrl_driver = {
        .probe = chv_pinctrl_probe,
+       .remove = chv_pinctrl_remove,
        .driver = {
                .name = "cherryview-pinctrl",
                .pm = &chv_pinctrl_pm_ops,
index 31a3a98d067caa4440a25e901eba69bdf3b0e862,9bae2e3968af254ee84b0ad684658cbd6c3f293d..9b00be15d258fc6d451c39f39b6ce2de70038551
@@@ -236,6 -236,12 +236,12 @@@ static const unsigned int hdmi_hpd_pins
  static const unsigned int hdmi_sda_pins[]     = { PIN(GPIOH_1, EE_OFF) };
  static const unsigned int hdmi_scl_pins[]     = { PIN(GPIOH_2, EE_OFF) };
  
+ static const unsigned int i2s_out_ch23_y_pins[]       = { PIN(GPIOY_8, EE_OFF) };
+ static const unsigned int i2s_out_ch45_y_pins[]       = { PIN(GPIOY_9, EE_OFF) };
+ static const unsigned int i2s_out_ch67_y_pins[]       = { PIN(GPIOY_10, EE_OFF) };
+ static const unsigned int spdif_out_y_pins[]  = { PIN(GPIOY_12, EE_OFF) };
  static const struct pinctrl_pin_desc meson_gxbb_aobus_pins[] = {
        MESON_PIN(GPIOAO_0, 0),
        MESON_PIN(GPIOAO_1, 0),
@@@ -274,6 -280,16 +280,16 @@@ static const unsigned int pwm_ao_a_6_pi
  static const unsigned int pwm_ao_a_12_pins[]  = { PIN(GPIOAO_12, 0) };
  static const unsigned int pwm_ao_b_pins[]     = { PIN(GPIOAO_13, 0) };
  
+ static const unsigned int i2s_am_clk_pins[]    = { PIN(GPIOAO_8, 0) };
+ static const unsigned int i2s_out_ao_clk_pins[]        = { PIN(GPIOAO_9, 0) };
+ static const unsigned int i2s_out_lr_clk_pins[]        = { PIN(GPIOAO_10, 0) };
+ static const unsigned int i2s_out_ch01_ao_pins[] = { PIN(GPIOAO_11, 0) };
+ static const unsigned int i2s_out_ch23_ao_pins[] = { PIN(GPIOAO_12, 0) };
+ static const unsigned int i2s_out_ch45_ao_pins[] = { PIN(GPIOAO_13, 0) };
+ static const unsigned int spdif_out_ao_6_pins[]       = { PIN(GPIOAO_6, 0) };
+ static const unsigned int spdif_out_ao_13_pins[] = { PIN(GPIOAO_13, 0) };
  static struct meson_pmx_group meson_gxbb_periphs_groups[] = {
        GPIO_GROUP(GPIOZ_0, EE_OFF),
        GPIO_GROUP(GPIOZ_1, EE_OFF),
        GROUP(uart_rx_c,        1,      16),
        GROUP(pwm_a_y,          1,      21),
        GROUP(pwm_f_y,          1,      20),
+       GROUP(i2s_out_ch23_y,   1,      5),
+       GROUP(i2s_out_ch45_y,   1,      6),
+       GROUP(i2s_out_ch67_y,   1,      7),
+       GROUP(spdif_out_y,      1,      9),
  
        /* Bank Z */
        GROUP(eth_mdio,         6,      1),
@@@ -523,6 -543,14 +543,14 @@@ static struct meson_pmx_group meson_gxb
        GROUP(pwm_ao_a_6,       0,      18),
        GROUP(pwm_ao_a_12,      0,      17),
        GROUP(pwm_ao_b,         0,      3),
+       GROUP(i2s_am_clk,       0,      30),
+       GROUP(i2s_out_ao_clk,   0,      29),
+       GROUP(i2s_out_lr_clk,   0,      28),
+       GROUP(i2s_out_ch01_ao,  0,      27),
+       GROUP(i2s_out_ch23_ao,  1,      0),
+       GROUP(i2s_out_ch45_ao,  1,      1),
+       GROUP(spdif_out_ao_6,   0,      16),
+       GROUP(spdif_out_ao_13,  0,      4),
  };
  
  static const char * const gpio_periphs_groups[] = {
@@@ -652,6 -680,14 +680,14 @@@ static const char * const hdmi_i2c_grou
        "hdmi_sda", "hdmi_scl",
  };
  
+ static const char * const i2s_out_groups[] = {
+       "i2s_out_ch23_y", "i2s_out_ch45_y", "i2s_out_ch67_y",
+ };
+ static const char * const spdif_out_groups[] = {
+       "spdif_out_y",
+ };
  static const char * const gpio_aobus_groups[] = {
        "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", "GPIOAO_4",
        "GPIOAO_5", "GPIOAO_6", "GPIOAO_7", "GPIOAO_8", "GPIOAO_9",
@@@ -667,11 -703,11 +703,11 @@@ static const char * const uart_ao_b_gro
  };
  
  static const char * const i2c_ao_groups[] = {
 -      "i2c_sdk_ao", "i2c_sda_ao",
 +      "i2c_sck_ao", "i2c_sda_ao",
  };
  
  static const char * const i2c_slave_ao_groups[] = {
 -      "i2c_slave_sdk_ao", "i2c_slave_sda_ao",
 +      "i2c_slave_sck_ao", "i2c_slave_sda_ao",
  };
  
  static const char * const remote_input_ao_groups[] = {
@@@ -694,6 -730,15 +730,15 @@@ static const char * const pwm_ao_b_grou
        "pwm_ao_b",
  };
  
+ static const char * const i2s_out_ao_groups[] = {
+       "i2s_am_clk", "i2s_out_ao_clk", "i2s_out_lr_clk",
+       "i2s_out_ch01_ao", "i2s_out_ch23_ao", "i2s_out_ch45_ao",
+ };
+ static const char * const spdif_out_ao_groups[] = {
+       "spdif_out_ao_6", "spdif_out_ao_13",
+ };
  static struct meson_pmx_func meson_gxbb_periphs_functions[] = {
        FUNCTION(gpio_periphs),
        FUNCTION(emmc),
        FUNCTION(pwm_f_y),
        FUNCTION(hdmi_hpd),
        FUNCTION(hdmi_i2c),
+       FUNCTION(i2s_out),
+       FUNCTION(spdif_out),
  };
  
  static struct meson_pmx_func meson_gxbb_aobus_functions[] = {
        FUNCTION(pwm_ao_a_6),
        FUNCTION(pwm_ao_a_12),
        FUNCTION(pwm_ao_b),
+       FUNCTION(i2s_out_ao),
+       FUNCTION(spdif_out_ao),
  };
  
  static struct meson_bank meson_gxbb_periphs_banks[] = {
index 63e51b56a22a94c528489a8d18aaf38795f0072e,c0dfd31c0fa207036eb3a5fc7307e1ef1d4362a0..7b0e6cc35e048f830a05f3a92e4bb78b4c5016d6
@@@ -777,6 -777,7 +777,7 @@@ exynos_retention_init(struct samsung_pi
  {
        struct samsung_retention_ctrl *ctrl;
        struct regmap *pmu_regs;
+       int i;
  
        ctrl = devm_kzalloc(drvdata->dev, sizeof(*ctrl), GFP_KERNEL);
        if (!ctrl)
        ctrl->enable = exynos_retention_enable;
        ctrl->disable = exynos_retention_disable;
  
+       /* Ensure that retention is disabled on driver init */
+       for (i = 0; i < ctrl->nr_regs; i++)
+               regmap_write(pmu_regs, ctrl->regs[i], ctrl->value);
        return ctrl;
  }
  
@@@ -1468,84 -1473,132 +1473,132 @@@ const struct samsung_pin_ctrl exynos542
  
  /* pin banks of exynos5433 pin-controller - ALIVE */
  static const struct samsung_pin_bank_data exynos5433_pin_banks0[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
 -      EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
 -      EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
 -      EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
 -      EXYNOS_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
 -      EXYNOS_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
 -      EXYNOS_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
 -      EXYNOS_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
 -      EXYNOS_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
 +      EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
 +      EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
 +      EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
 +      EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
 +      EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
 +      EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
 +      EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
 +      EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
  };
  
  /* pin banks of exynos5433 pin-controller - AUD */
  static const struct samsung_pin_bank_data exynos5433_pin_banks1[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
 -      EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
 +      EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
  };
  
  /* pin banks of exynos5433 pin-controller - CPIF */
  static const struct samsung_pin_bank_data exynos5433_pin_banks2[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
  };
  
  /* pin banks of exynos5433 pin-controller - eSE */
  static const struct samsung_pin_bank_data exynos5433_pin_banks3[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
  };
  
  /* pin banks of exynos5433 pin-controller - FINGER */
  static const struct samsung_pin_bank_data exynos5433_pin_banks4[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
  };
  
  /* pin banks of exynos5433 pin-controller - FSYS */
  static const struct samsung_pin_bank_data exynos5433_pin_banks5[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
 -      EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
 -      EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
 -      EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
 +      EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
 +      EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
  };
  
  /* pin banks of exynos5433 pin-controller - IMEM */
  static const struct samsung_pin_bank_data exynos5433_pin_banks6[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
  };
  
  /* pin banks of exynos5433 pin-controller - NFC */
  static const struct samsung_pin_bank_data exynos5433_pin_banks7[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
  };
  
  /* pin banks of exynos5433 pin-controller - PERIC */
  static const struct samsung_pin_bank_data exynos5433_pin_banks8[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
 -      EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
 -      EXYNOS_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
 -      EXYNOS_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
 -      EXYNOS_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
 -      EXYNOS_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
 -      EXYNOS_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
 -      EXYNOS_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
 -      EXYNOS_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
 -      EXYNOS_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
 -      EXYNOS_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
 -      EXYNOS_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
 -      EXYNOS_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
 -      EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
 +      EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
 +      EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
 +      EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
 +      EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
 +      EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
 +      EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
 +      EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
 +      EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
 +      EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
 +      EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
  };
  
  /* pin banks of exynos5433 pin-controller - TOUCH */
  static const struct samsung_pin_bank_data exynos5433_pin_banks9[] __initconst = {
 -      EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
 +      EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
  };
  
+ /* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */
+ static const u32 exynos5433_retention_regs[] = {
+       EXYNOS5433_PAD_RETENTION_TOP_OPTION,
+       EXYNOS5433_PAD_RETENTION_UART_OPTION,
+       EXYNOS5433_PAD_RETENTION_EBIA_OPTION,
+       EXYNOS5433_PAD_RETENTION_EBIB_OPTION,
+       EXYNOS5433_PAD_RETENTION_SPI_OPTION,
+       EXYNOS5433_PAD_RETENTION_MIF_OPTION,
+       EXYNOS5433_PAD_RETENTION_USBXTI_OPTION,
+       EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION,
+       EXYNOS5433_PAD_RETENTION_UFS_OPTION,
+       EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION,
+ };
+ static const struct samsung_retention_data exynos5433_retention_data __initconst = {
+       .regs    = exynos5433_retention_regs,
+       .nr_regs = ARRAY_SIZE(exynos5433_retention_regs),
+       .value   = EXYNOS_WAKEUP_FROM_LOWPWR,
+       .refcnt  = &exynos_shared_retention_refcnt,
+       .init    = exynos_retention_init,
+ };
+ /* PMU retention control for audio pins can be tied to audio pin bank */
+ static const u32 exynos5433_audio_retention_regs[] = {
+       EXYNOS5433_PAD_RETENTION_AUD_OPTION,
+ };
+ static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = {
+       .regs    = exynos5433_audio_retention_regs,
+       .nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs),
+       .value   = EXYNOS_WAKEUP_FROM_LOWPWR,
+       .init    = exynos_retention_init,
+ };
+ /* PMU retention control for mmc pins can be tied to fsys pin bank */
+ static const u32 exynos5433_fsys_retention_regs[] = {
+       EXYNOS5433_PAD_RETENTION_MMC0_OPTION,
+       EXYNOS5433_PAD_RETENTION_MMC1_OPTION,
+       EXYNOS5433_PAD_RETENTION_MMC2_OPTION,
+ };
+ static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = {
+       .regs    = exynos5433_fsys_retention_regs,
+       .nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs),
+       .value   = EXYNOS_WAKEUP_FROM_LOWPWR,
+       .init    = exynos_retention_init,
+ };
  /*
   * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
   * ten gpio/pin-mux/pinconfig controllers.
@@@ -1559,6 -1612,7 +1612,7 @@@ const struct samsung_pin_ctrl exynos543
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
                .nr_ext_resources = 1,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 1 data */
                .pin_banks      = exynos5433_pin_banks1,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_audio_retention_data,
        }, {
                /* pin-controller instance 2 data */
                .pin_banks      = exynos5433_pin_banks2,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 3 data */
                .pin_banks      = exynos5433_pin_banks3,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 4 data */
                .pin_banks      = exynos5433_pin_banks4,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 5 data */
                .pin_banks      = exynos5433_pin_banks5,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_fsys_retention_data,
        }, {
                /* pin-controller instance 6 data */
                .pin_banks      = exynos5433_pin_banks6,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 7 data */
                .pin_banks      = exynos5433_pin_banks7,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 8 data */
                .pin_banks      = exynos5433_pin_banks8,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        }, {
                /* pin-controller instance 9 data */
                .pin_banks      = exynos5433_pin_banks9,
                .eint_gpio_init = exynos_eint_gpio_init,
                .suspend        = exynos_pinctrl_suspend,
                .resume         = exynos_pinctrl_resume,
+               .retention_data = &exynos5433_retention_data,
        },
  };
  
index d7aa22cff480ed63d73c9e1e6f8fbf22d0eda290,b618dae84cec2efa7c8d14bf473b987e2edcfb5d..a4a0da5d2a321119f87ea29ffff26d3f90c8943e
@@@ -566,13 -566,11 +566,11 @@@ static int samsung_gpio_set_direction(s
  {
        const struct samsung_pin_bank_type *type;
        struct samsung_pin_bank *bank;
-       struct samsung_pinctrl_drv_data *drvdata;
        void __iomem *reg;
        u32 data, mask, shift;
  
        bank = gpiochip_get_data(gc);
        type = bank->type;
-       drvdata = bank->drvdata;
  
        reg = bank->pctl_base + bank->pctl_offset
                        + type->reg_offset[PINCFG_TYPE_FUNC];
@@@ -884,7 -882,7 +882,7 @@@ static int samsung_pinctrl_register(str
                pin_bank->grange.id = bank;
                pin_bank->grange.pin_base = drvdata->pin_base
                                                + pin_bank->pin_base;
-               pin_bank->grange.base = pin_bank->gpio_chip.base;
+               pin_bank->grange.base = pin_bank->grange.pin_base;
                pin_bank->grange.npins = pin_bank->gpio_chip.ngpio;
                pin_bank->grange.gc = &pin_bank->gpio_chip;
                pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange);
        return 0;
  }
  
+ /* unregister the pinctrl interface with the pinctrl subsystem */
+ static int samsung_pinctrl_unregister(struct platform_device *pdev,
+                                     struct samsung_pinctrl_drv_data *drvdata)
+ {
+       struct samsung_pin_bank *bank = drvdata->pin_banks;
+       int i;
+       for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
+               pinctrl_remove_gpio_range(drvdata->pctl_dev, &bank->grange);
+       return 0;
+ }
  static const struct gpio_chip samsung_gpiolib_chip = {
        .request = gpiochip_generic_request,
        .free = gpiochip_generic_free,
@@@ -917,39 -928,21 +928,21 @@@ static int samsung_gpiolib_register(str
                bank->gpio_chip = samsung_gpiolib_chip;
  
                gc = &bank->gpio_chip;
-               gc->base = drvdata->pin_base + bank->pin_base;
+               gc->base = bank->grange.base;
                gc->ngpio = bank->nr_pins;
                gc->parent = &pdev->dev;
                gc->of_node = bank->of_node;
                gc->label = bank->name;
  
-               ret = gpiochip_add_data(gc, bank);
+               ret = devm_gpiochip_add_data(&pdev->dev, gc, bank);
                if (ret) {
                        dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n",
                                                        gc->label, ret);
-                       goto fail;
+                       return ret;
                }
        }
  
        return 0;
- fail:
-       for (--i, --bank; i >= 0; --i, --bank)
-               gpiochip_remove(&bank->gpio_chip);
-       return ret;
- }
- /* unregister the gpiolib interface with the gpiolib subsystem */
- static int samsung_gpiolib_unregister(struct platform_device *pdev,
-                                     struct samsung_pinctrl_drv_data *drvdata)
- {
-       struct samsung_pin_bank *bank = drvdata->pin_banks;
-       int i;
-       for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
-               gpiochip_remove(&bank->gpio_chip);
-       return 0;
  }
  
  /* retrieve the soc specific data */
@@@ -988,16 -981,9 +981,16 @@@ samsung_pinctrl_get_soc_data(struct sam
  
        for (i = 0; i < ctrl->nr_ext_resources + 1; i++) {
                res = platform_get_resource(pdev, IORESOURCE_MEM, i);
 -              virt_base[i] = devm_ioremap_resource(&pdev->dev, res);
 -              if (IS_ERR(virt_base[i]))
 -                      return ERR_CAST(virt_base[i]);
 +              if (!res) {
 +                      dev_err(&pdev->dev, "failed to get mem%d resource\n", i);
 +                      return ERR_PTR(-EINVAL);
 +              }
 +              virt_base[i] = devm_ioremap(&pdev->dev, res->start,
 +                                              resource_size(res));
 +              if (!virt_base[i]) {
 +                      dev_err(&pdev->dev, "failed to ioremap %pR\n", res);
 +                      return ERR_PTR(-EIO);
 +              }
        }
  
        bank = d->pin_banks;
@@@ -1069,13 -1055,13 +1062,13 @@@ static int samsung_pinctrl_probe(struc
                        return PTR_ERR(drvdata->retention_ctrl);
        }
  
-       ret = samsung_gpiolib_register(pdev, drvdata);
+       ret = samsung_pinctrl_register(pdev, drvdata);
        if (ret)
                return ret;
  
-       ret = samsung_pinctrl_register(pdev, drvdata);
+       ret = samsung_gpiolib_register(pdev, drvdata);
        if (ret) {
-               samsung_gpiolib_unregister(pdev, drvdata);
+               samsung_pinctrl_unregister(pdev, drvdata);
                return ret;
        }
  
index 83f8864fa76ac5a26a1947902f691877f0510c56,18a8b3ab16febe5e43a039525fca8424bca1fc1c..706effe0a4925a676957ed39bbfb0cb0358fb64c
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Copyright (C) 2016 Socionext Inc.
+  * Copyright (C) 2016-2017 Socionext Inc.
   *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
   *
   * This program is free software; you can redistribute it and/or modify
@@@ -14,7 -14,7 +14,7 @@@
   */
  
  #include <linux/kernel.h>
- #include <linux/module.h>
+ #include <linux/init.h>
  #include <linux/pinctrl/pinctrl.h>
  #include <linux/platform_device.h>
  
@@@ -390,22 -390,22 +390,22 @@@ static const struct pinctrl_pin_desc un
        UNIPHIER_PINCTRL_PIN(140, "AO1D0", 140,
                             140, UNIPHIER_PIN_DRV_1BIT,
                             140, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(141, "TCON0", 141,
 +      UNIPHIER_PINCTRL_PIN(141, "AO1D1", 141,
                             141, UNIPHIER_PIN_DRV_1BIT,
                             141, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(142, "TCON1", 142,
 +      UNIPHIER_PINCTRL_PIN(142, "AO1D2", 142,
                             142, UNIPHIER_PIN_DRV_1BIT,
                             142, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(143, "TCON2", 143,
 +      UNIPHIER_PINCTRL_PIN(143, "XIRQ9", 143,
                             143, UNIPHIER_PIN_DRV_1BIT,
                             143, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(144, "TCON3", 144,
 +      UNIPHIER_PINCTRL_PIN(144, "XIRQ10", 144,
                             144, UNIPHIER_PIN_DRV_1BIT,
                             144, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(145, "TCON4", 145,
 +      UNIPHIER_PINCTRL_PIN(145, "XIRQ11", 145,
                             145, UNIPHIER_PIN_DRV_1BIT,
                             145, UNIPHIER_PIN_PULL_DOWN),
 -      UNIPHIER_PINCTRL_PIN(146, "TCON5", 146,
 +      UNIPHIER_PINCTRL_PIN(146, "XIRQ13", 146,
                             146, UNIPHIER_PIN_DRV_1BIT,
                             146, UNIPHIER_PIN_PULL_DOWN),
        UNIPHIER_PINCTRL_PIN(147, "PWMA", 147,
@@@ -936,7 -936,6 +936,6 @@@ static const struct of_device_id uniphi
        { .compatible = "socionext,uniphier-ld11-pinctrl" },
        { /* sentinel */ }
  };
- MODULE_DEVICE_TABLE(of, uniphier_ld11_pinctrl_match);
  
  static struct platform_driver uniphier_ld11_pinctrl_driver = {
        .probe = uniphier_ld11_pinctrl_probe,
                .of_match_table = uniphier_ld11_pinctrl_match,
        },
  };
- module_platform_driver(uniphier_ld11_pinctrl_driver);
- MODULE_AUTHOR("Masahiro Yamada <yamada.masahiro@socionext.com>");
- MODULE_DESCRIPTION("UniPhier PH1-LD11 pinctrl driver");
- MODULE_LICENSE("GPL");
+ builtin_platform_driver(uniphier_ld11_pinctrl_driver);