Merge tag 'gpio-v5.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 29 Jan 2020 17:43:39 +0000 (09:43 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 29 Jan 2020 17:43:39 +0000 (09:43 -0800)
Pull GPIO updates from Linus Walleij:
 "This is the bulk of GPIO changes for the v5.6 kernel cycle.

  This is a pretty calm cycle so far, nothing special going on really.
  Some more changes will come in from the irqchip and pin control trees.

  I also deleted an orphan include file for FMC that was dangling since
  subsystem was removed.

  Core changes:

   - Document the usecases for the kernelspace vs userspace handling of
     GPIOs.

   - Handle MSI (message signalled interrupts) properly in the core
     hierarchical irqdomain code.

   - Fix a rare race condition while initializing the descriptor array.

  New drivers:

   - Xylon LogiCVC GPIO driver.

   - WDC934x GPIO controller driver.

  Driver improvements:

   - Implemented suspend/resume in the Tegra driver.

   - MPC8xx edge detection fixup.

   - Properly convert ThunderX to use hierarchical irqdomain with
     GPIOLIB_IRQCHIP on top of the revert of the previous buggy
     switchover. This time it works (hopefully).

  Misc:

   - Drop a FMC remnant file <linux/ipmi-fru.h>

   - A slew of fixes"

* tag 'gpio-v5.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (48 commits)
  MAINTAINERS: Replace Tien Hock Loh as Altera PIO maintainer
  gpiolib: hold gpio devices lock until ->descs array is initialised
  gpio: aspeed-sgpio: fixed typos
  gpio: mvebu: clear irq in edge cause register before unmask edge irq
  gpiolib: Lower verbosity when allocating hierarchy irq
  gpiolib: Remove duplicated function gpio_do_set_config()
  gpio: Fix the no return statement warning
  gpio: wcd934x: Add support to wcd934x gpio controller
  gpiolib: remove set but not used variable 'config'
  gpio: vx855: fixed a typo
  gpio: mockup: sort headers alphabetically
  gpio: mockup: update the license tag
  gpio: Remove the unused flags
  gpiolib: Set lockdep class for hierarchical irq domains
  gpio: thunderx: Switch to GPIOLIB_IRQCHIP
  gpiolib: Add the support for the msi parent domain
  gpiolib: Add support for the irqdomain which doesn't use irq_fwspec as arg
  gpio: Add use guidance documentation
  dt-bindings: gpio: wcd934x: Add bindings for gpio
  gpio: altera: change to platform_get_irq_optional to avoid false-positive error
  ...

1  2 
Documentation/driver-api/driver-model/devres.rst
MAINTAINERS
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/gpio/gpiolib.c

@@@ -267,6 -267,8 +267,8 @@@ DR
  
  GPIO
    devm_gpiod_get()
+   devm_gpiod_get_array()
+   devm_gpiod_get_array_optional()
    devm_gpiod_get_index()
    devm_gpiod_get_index_optional()
    devm_gpiod_get_optional()
@@@ -313,6 -315,7 +315,6 @@@ IOMA
    devm_ioport_map()
    devm_ioport_unmap()
    devm_ioremap()
 -  devm_ioremap_nocache()
    devm_ioremap_uc()
    devm_ioremap_wc()
    devm_ioremap_resource() : checks resource, requests memory region, ioremaps
diff --combined MAINTAINERS
@@@ -345,7 -345,7 +345,7 @@@ F: drivers/acpi/apei
  
  ACPI COMPONENT ARCHITECTURE (ACPICA)
  M:    Robert Moore <robert.moore@intel.com>
 -M:    Erik Schmauss <erik.schmauss@intel.com>
 +M:    Erik Kaneda <erik.kaneda@intel.com>
  M:    "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
  L:    linux-acpi@vger.kernel.org
  L:    devel@acpica.org
@@@ -694,14 -694,6 +694,14 @@@ L:       linux-crypto@vger.kernel.or
  S:    Maintained
  F:    drivers/crypto/allwinner/
  
 +ALLWINNER THERMAL DRIVER
 +M:    Vasily Khoruzhick <anarsoul@gmail.com>
 +M:    Yangtao Li <tiny.windzz@gmail.com>
 +L:    linux-pm@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
 +F:    drivers/thermal/sun8i_thermal.c
 +
  ALLWINNER VPU DRIVER
  M:    Maxime Ripard <mripard@kernel.org>
  M:    Paul Kocialkowski <paul.kocialkowski@bootlin.com>
@@@ -728,13 -720,13 +728,13 @@@ F:      Documentation/devicetree/bindings/i2
  F:    drivers/i2c/busses/i2c-altera.c
  
  ALTERA MAILBOX DRIVER
 -M:    Ley Foon Tan <lftan@altera.com>
 +M:    Ley Foon Tan <ley.foon.tan@intel.com>
  L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/mailbox/mailbox-altera.c
  
  ALTERA PIO DRIVER
- M:    Tien Hock Loh <thloh@altera.com>
+ M:    Joyce Ooi <joyce.ooi@intel.com>
  L:    linux-gpio@vger.kernel.org
  S:    Maintained
  F:    drivers/gpio/gpio-altera.c
@@@ -799,6 -791,7 +799,6 @@@ F: include/uapi/rdma/efa-abi.
  
  AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER
  M:    Tom Lendacky <thomas.lendacky@amd.com>
 -M:    Gary Hook <gary.hook@amd.com>
  L:    linux-crypto@vger.kernel.org
  S:    Supported
  F:    drivers/crypto/ccp/
@@@ -984,15 -977,6 +984,15 @@@ W:       http://ez.analog.com/community/linux
  F:    drivers/iio/imu/adis16460.c
  F:    Documentation/devicetree/bindings/iio/imu/adi,adis16460.yaml
  
 +ANALOG DEVICES INC ADM1177 DRIVER
 +M:    Beniamin Bia <beniamin.bia@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
 +L:    linux-hwmon@vger.kernel.org
 +W:    http://ez.analog.com/community/linux-device-drivers
 +S:    Supported
 +F:    drivers/hwmon/adm1177.c
 +F:    Documentation/devicetree/bindings/hwmon/adi,adm1177.yaml
 +
  ANALOG DEVICES INC ADP5061 DRIVER
  M:    Stefan Popa <stefan.popa@analog.com>
  L:    linux-pm@vger.kernel.org
@@@ -1423,7 -1407,7 +1423,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  
  ARM/ACTIONS SEMI ARCHITECTURE
  M:    Andreas Färber <afaerber@suse.de>
 -R:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  N:    owl
@@@ -2258,7 -2242,6 +2258,7 @@@ L:      linux-rockchip@lists.infradead.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/i2c/i2c-rk3x.txt
 +F:    Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.yaml
  F:    arch/arm/boot/dts/rk3*
  F:    arch/arm/boot/dts/rv1108*
  F:    arch/arm/mach-rockchip/
@@@ -2711,14 -2694,6 +2711,14 @@@ S:    Maintaine
  F:    drivers/pinctrl/aspeed/
  F:    Documentation/devicetree/bindings/pinctrl/aspeed,*
  
 +ASPEED SCU INTERRUPT CONTROLLER DRIVER
 +M:    Eddie James <eajames@linux.ibm.com>
 +L:    linux-aspeed@lists.ozlabs.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2xxx-scu-ic.txt
 +F:    drivers/irqchip/irq-aspeed-scu-ic.c
 +F:    include/dt-bindings/interrupt-controller/aspeed-scu-ic.h
 +
  ASPEED VIDEO ENGINE DRIVER
  M:    Eddie James <eajames@linux.ibm.com>
  L:    linux-media@vger.kernel.org
@@@ -3175,7 -3150,7 +3175,7 @@@ S:      Maintaine
  F:    arch/mips/net/
  
  BPF JIT for NFP NICs
 -M:    Jakub Kicinski <jakub.kicinski@netronome.com>
 +M:    Jakub Kicinski <kuba@kernel.org>
  L:    netdev@vger.kernel.org
  L:    bpf@vger.kernel.org
  S:    Supported
@@@ -4873,7 -4848,6 +4873,7 @@@ S:      Supporte
  F:    net/core/devlink.c
  F:    include/net/devlink.h
  F:    include/uapi/linux/devlink.h
 +F:    Documentation/networking/devlink
  
  DIALOG SEMICONDUCTOR DRIVERS
  M:    Support Opensource <support.opensource@diasemi.com>
@@@ -6223,7 -6197,6 +6223,7 @@@ ETHERNET PHY LIBRAR
  M:    Andrew Lunn <andrew@lunn.ch>
  M:    Florian Fainelli <f.fainelli@gmail.com>
  M:    Heiner Kallweit <hkallweit1@gmail.com>
 +R:    Russell King <linux@armlinux.org.uk>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-net-phydev
@@@ -7525,12 -7498,6 +7525,12 @@@ S:    Supporte
  F:    drivers/scsi/hisi_sas/
  F:    Documentation/devicetree/bindings/scsi/hisilicon-sas.txt
  
 +HISILICON V3XX SPI NOR FLASH Controller Driver
 +M:    John Garry <john.garry@huawei.com>
 +W:    http://www.hisilicon.com
 +S:    Maintained
 +F:    drivers/spi/spi-hisi-sfc-v3xx.c
 +
  HISILICON QM AND ZIP Controller DRIVER
  M:    Zhou Wang <wangzhou1@hisilicon.com>
  L:    linux-crypto@vger.kernel.org
@@@ -7874,10 -7841,10 +7874,10 @@@ F:   Documentation/devicetree/bindings/i3
  F:    drivers/i3c/master/dw*
  
  I3C DRIVER FOR CADENCE I3C MASTER IP
 -M:      Przemysław Gaj <pgaj@cadence.com>
 -S:      Maintained
 -F:      Documentation/devicetree/bindings/i3c/cdns,i3c-master.txt
 -F:      drivers/i3c/master/i3c-master-cdns.c
 +M:    Przemysław Gaj <pgaj@cadence.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i3c/cdns,i3c-master.txt
 +F:    drivers/i3c/master/i3c-master-cdns.c
  
  IA64 (Itanium) PLATFORM
  M:    Tony Luck <tony.luck@intel.com>
@@@ -8414,14 -8381,6 +8414,14 @@@ Q:    https://patchwork.kernel.org/project
  S:    Supported
  F:    drivers/dma/ioat*
  
 +INTEL IADX DRIVER
 +M:    Dave Jiang <dave.jiang@intel.com>
 +L:    dmaengine@vger.kernel.org
 +S:    Supported
 +F:    drivers/dma/idxd/*
 +F:    include/uapi/linux/idxd.h
 +F:    include/linux/idxd.h
 +
  INTEL IDLE DRIVER
  M:    Jacob Pan <jacob.jun.pan@linux.intel.com>
  M:    Len Brown <lenb@kernel.org>
@@@ -8603,12 -8562,6 +8603,12 @@@ S:    Maintaine
  F:    arch/x86/include/asm/intel_telemetry.h
  F:    drivers/platform/x86/intel_telemetry*
  
 +INTEL UNCORE FREQUENCY CONTROL
 +M:    Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/intel-uncore-frequency.c
 +
  INTEL VIRTUAL BUTTON DRIVER
  M:    AceLan Kao <acelan.kao@canonical.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -8616,7 -8569,7 +8616,7 @@@ S:      Maintaine
  F:    drivers/platform/x86/intel-vbtn.c
  
  INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy)
 -M:    Stanislaw Gruszka <sgruszka@redhat.com>
 +M:    Stanislaw Gruszka <stf_xl@wp.pl>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/net/wireless/intel/iwlegacy/
@@@ -9179,7 -9132,7 +9179,7 @@@ F:      arch/x86/include/uapi/asm/svm.
  F:    arch/x86/include/asm/kvm*
  F:    arch/x86/include/asm/pvclock-abi.h
  F:    arch/x86/include/asm/svm.h
 -F:    arch/x86/include/asm/vmx.h
 +F:    arch/x86/include/asm/vmx*.h
  F:    arch/x86/kernel/kvm.c
  F:    arch/x86/kernel/kvmclock.c
  
@@@ -9936,7 -9889,7 +9936,7 @@@ S:      Maintaine
  F:    drivers/net/dsa/mv88e6xxx/
  F:    include/linux/platform_data/mv88e6xxx.h
  F:    Documentation/devicetree/bindings/net/dsa/marvell.txt
 -F:    Documentation/networking/devlink-params-mv88e6xxx.txt
 +F:    Documentation/networking/devlink/mv88e6xxx.rst
  
  MARVELL ARMADA DRM SUPPORT
  M:    Russell King <linux@armlinux.org.uk>
@@@ -10006,7 -9959,8 +10006,7 @@@ F:    drivers/net/ethernet/marvell/mvneta.
  
  MARVELL MWIFIEX WIRELESS DRIVER
  M:    Amitkumar Karwar <amitkarwar@gmail.com>
 -M:    Nishant Sarmukadam <nishants@marvell.com>
 -M:    Ganapathi Bhat <gbhat@marvell.com>
 +M:    Ganapathi Bhat <ganapathi.bhat@nxp.com>
  M:    Xinming Hu <huxinming820@gmail.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
@@@ -10045,16 -9999,6 +10045,16 @@@ M:  Jerin Jacob <jerinj@marvell.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/marvell/octeontx2/af/
 +F:    Documentation/networking/device_drivers/marvell/octeontx2.rst
 +
 +MARVELL OCTEONTX2 PHYSICAL FUNCTION DRIVER
 +M:    Sunil Goutham <sgoutham@marvell.com>
 +M:    Geetha sowjanya <gakula@marvell.com>
 +M:    Subbaraya Sundeep <sbhatta@marvell.com>
 +M:    hariprasad <hkelam@marvell.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/marvell/octeontx2/nic/
  
  MATROX FRAMEBUFFER DRIVER
  L:    linux-fbdev@vger.kernel.org
@@@ -11199,13 -11143,6 +11199,13 @@@ S: Maintaine
  F:    Documentation/driver-api/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
  
 +MONOLITHIC POWER SYSTEM PMIC DRIVER
 +M:    Saravanan Sekar <sravanhome@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/regulator/mpq7920.yaml
 +F:    drivers/regulator/mpq7920.c
 +F:    drivers/regulator/mpq7920.h
 +
  MR800 AVERMEDIA USB FM RADIO DRIVER
  M:    Alexey Klimov <klimov.linux@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -11449,7 -11386,7 +11449,7 @@@ F:   Documentation/networking/net_failove
  
  NETEM NETWORK EMULATOR
  M:    Stephen Hemminger <stephen@networkplumber.org>
 -L:    netem@lists.linux-foundation.org (moderated for non-subscribers)
 +L:    netdev@vger.kernel.org
  S:    Maintained
  F:    net/sched/sch_netem.c
  
@@@ -11494,7 -11431,7 +11494,7 @@@ F:   include/uapi/linux/netrom.
  F:    net/netrom/
  
  NETRONOME ETHERNET DRIVERS
 -M:    Jakub Kicinski <jakub.kicinski@netronome.com>
 +M:    Jakub Kicinski <kuba@kernel.org>
  L:    oss-drivers@netronome.com
  S:    Maintained
  F:    drivers/net/ethernet/netronome/
@@@ -11562,7 -11499,6 +11562,7 @@@ F:   drivers/net/dsa
  
  NETWORKING [GENERAL]
  M:    "David S. Miller" <davem@davemloft.net>
 +M:    Jakub Kicinski <kuba@kernel.org>
  L:    netdev@vger.kernel.org
  W:    http://www.linuxfoundation.org/en/Net
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
@@@ -11637,18 -11573,6 +11637,18 @@@ F: net/ipv6/calipso.
  F:    net/netfilter/xt_CONNSECMARK.c
  F:    net/netfilter/xt_SECMARK.c
  
 +NETWORKING [MPTCP]
 +M:    Mat Martineau <mathew.j.martineau@linux.intel.com>
 +M:    Matthieu Baerts <matthieu.baerts@tessares.net>
 +L:    netdev@vger.kernel.org
 +L:    mptcp@lists.01.org
 +W:    https://github.com/multipath-tcp/mptcp_net-next/wiki
 +B:    https://github.com/multipath-tcp/mptcp_net-next/issues
 +S:    Maintained
 +F:    include/net/mptcp.h
 +F:    net/mptcp/
 +F:    tools/testing/selftests/net/mptcp/
 +
  NETWORKING [TCP]
  M:    Eric Dumazet <edumazet@google.com>
  L:    netdev@vger.kernel.org
@@@ -11667,7 -11591,7 +11667,7 @@@ M:   Boris Pismenny <borisp@mellanox.com
  M:    Aviad Yehezkel <aviadye@mellanox.com>
  M:    John Fastabend <john.fastabend@gmail.com>
  M:    Daniel Borkmann <daniel@iogearbox.net>
 -M:    Jakub Kicinski <jakub.kicinski@netronome.com>
 +M:    Jakub Kicinski <kuba@kernel.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    net/tls/*
@@@ -11679,7 -11603,7 +11679,7 @@@ L:   linux-wireless@vger.kernel.or
  Q:    http://patchwork.kernel.org/project/linux-wireless/list/
  
  NETDEVSIM
 -M:    Jakub Kicinski <jakub.kicinski@netronome.com>
 +M:    Jakub Kicinski <kuba@kernel.org>
  S:    Maintained
  F:    drivers/net/netdevsim/*
  
@@@ -11756,7 -11680,7 +11756,7 @@@ F:   Documentation/scsi/NinjaSCSI.tx
  F:    drivers/scsi/nsp32*
  
  NIOS2 ARCHITECTURE
 -M:    Ley Foon Tan <lftan@altera.com>
 +M:    Ley Foon Tan <ley.foon.tan@intel.com>
  L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lftan/nios2.git
  S:    Maintained
@@@ -12507,7 -12431,7 +12507,7 @@@ L:   linux-crypto@vger.kernel.or
  S:    Maintained
  F:    kernel/padata.c
  F:    include/linux/padata.h
 -F:    Documentation/padata.txt
 +F:    Documentation/core-api/padata.rst
  
  PAGE POOL
  M:    Jesper Dangaard Brouer <hawk@kernel.org>
@@@ -12640,7 -12564,7 +12640,7 @@@ F:   Documentation/devicetree/bindings/pc
  F:    drivers/pci/controller/pci-aardvark.c
  
  PCI DRIVER FOR ALTERA PCIE IP
 -M:    Ley Foon Tan <lftan@altera.com>
 +M:    Ley Foon Tan <ley.foon.tan@intel.com>
  L:    rfi@lists.rocketboards.org (moderated for non-subscribers)
  L:    linux-pci@vger.kernel.org
  S:    Supported
@@@ -12819,7 -12743,7 +12819,7 @@@ S:   Supporte
  F:    Documentation/PCI/pci-error-recovery.rst
  
  PCI MSI DRIVER FOR ALTERA MSI IP
 -M:    Ley Foon Tan <lftan@altera.com>
 +M:    Ley Foon Tan <ley.foon.tan@intel.com>
  L:    rfi@lists.rocketboards.org (moderated for non-subscribers)
  L:    linux-pci@vger.kernel.org
  S:    Supported
@@@ -13220,11 -13144,6 +13220,11 @@@ S: Maintaine
  F:    drivers/iio/chemical/pms7003.c
  F:    Documentation/devicetree/bindings/iio/chemical/plantower,pms7003.yaml
  
 +PLX DMA DRIVER
 +M:    Logan Gunthorpe <logang@deltatee.com>
 +S:    Maintained
 +F:    drivers/dma/plx_dma.c
 +
  PMBUS HARDWARE MONITORING DRIVERS
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -13295,8 -13214,6 +13295,8 @@@ T:   git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    fs/timerfd.c
  F:    include/linux/timer*
 +F:    include/linux/time_namespace.h
 +F:    kernel/time_namespace.c
  F:    kernel/time/*timer*
  
  POWER MANAGEMENT CORE
@@@ -13732,13 -13649,6 +13732,13 @@@ T: git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    drivers/net/wireless/ath/ath10k/
  
 +QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
 +M:    Kalle Valo <kvalo@codeaurora.org>
 +L:    ath11k@lists.infradead.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
 +S:    Supported
 +F:    drivers/net/wireless/ath/ath11k/
 +
  QUALCOMM ATHEROS ATH9K WIRELESS DRIVER
  M:    QCA ath9k Development <ath9k-devel@qca.qualcomm.com>
  L:    linux-wireless@vger.kernel.org
@@@ -13761,14 -13671,6 +13761,14 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/opp/qcom-nvmem-cpufreq.txt
  F:    drivers/cpufreq/qcom-cpufreq-nvmem.c
  
 +QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
 +M:    Niklas Cassel <nks@flawful.org>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-arm-msm@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/power/avs/qcom,cpr.txt
 +F:    drivers/power/avs/qcom-cpr.c
 +
  QUALCOMM EMAC GIGABIT ETHERNET DRIVER
  M:    Timur Tabi <timur@kernel.org>
  L:    netdev@vger.kernel.org
@@@ -13918,7 -13820,7 +13918,7 @@@ S:   Maintaine
  F:    arch/mips/ralink
  
  RALINK RT2X00 WIRELESS LAN DRIVER
 -M:    Stanislaw Gruszka <sgruszka@redhat.com>
 +M:    Stanislaw Gruszka <stf_xl@wp.pl>
  M:    Helmut Schaa <helmut.schaa@googlemail.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
@@@ -14604,7 -14506,7 +14604,7 @@@ F:   drivers/media/i2c/s5k5baf.
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
  M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Vladimir Zapolskiy <vz@mleia.com>
 -M:    Kamil Konieczny <k.konieczny@partner.samsung.com>
 +M:    Kamil Konieczny <k.konieczny@samsung.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -14916,7 -14818,6 +14916,7 @@@ F:   include/uapi/linux/selinux_netlink.
  F:    security/selinux/
  F:    scripts/selinux/
  F:    Documentation/admin-guide/LSM/SELinux.rst
 +F:    Documentation/ABI/obsolete/sysfs-selinux-disable
  
  SENSABLE PHANTOM
  M:    Jiri Slaby <jirislaby@gmail.com>
@@@ -15867,7 -15768,6 +15867,7 @@@ M:   Jose Abreu <joabreu@synopsys.com
  L:    netdev@vger.kernel.org
  W:    http://www.stlinux.com
  S:    Supported
 +F:    Documentation/networking/device_drivers/stmicro/
  F:    drivers/net/ethernet/stmicro/stmmac/
  
  SUN3/3X
@@@ -16440,15 -16340,12 +16440,15 @@@ F:        Documentation/devicetree/bindings/th
  
  THERMAL/CPU_COOLING
  M:    Amit Daniel Kachhap <amit.kachhap@gmail.com>
 +M:    Daniel Lezcano <daniel.lezcano@linaro.org>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
  M:    Javi Merino <javi.merino@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/driver-api/thermal/cpu-cooling-api.rst
 -F:    drivers/thermal/cpu_cooling.c
 +F:    Documentation/driver-api/thermal/cpu-idle-cooling.rst
 +F:    drivers/thermal/cpufreq_cooling.c
 +F:    drivers/thermal/cpuidle_cooling.c
  F:    include/linux/cpu_cooling.h
  
  THERMAL DRIVER FOR AMLOGIC SOCS
@@@ -16704,7 -16601,7 +16704,7 @@@ F:   kernel/time/ntp.
  F:    tools/testing/selftests/timers/
  
  TIPC NETWORK LAYER
 -M:    Jon Maloy <jon.maloy@ericsson.com>
 +M:    Jon Maloy <jmaloy@redhat.com>
  M:    Ying Xue <ying.xue@windriver.com>
  L:    netdev@vger.kernel.org (core kernel code)
  L:    tipc-discussion@lists.sourceforge.net (user apps, general discussion)
@@@ -17600,7 -17497,6 +17600,7 @@@ F:   net/vmw_vsock/diag.
  F:    net/vmw_vsock/af_vsock_tap.c
  F:    net/vmw_vsock/virtio_transport_common.c
  F:    net/vmw_vsock/virtio_transport.c
 +F:    net/vmw_vsock/vsock_loopback.c
  F:    drivers/net/vsockmon.c
  F:    drivers/vhost/vsock.c
  F:    tools/testing/vsock/
@@@ -17971,14 -17867,6 +17971,14 @@@ L: linux-gpio@vger.kernel.or
  S:    Maintained
  F:    drivers/gpio/gpio-ws16c48.c
  
 +WIREGUARD SECURE NETWORK TUNNEL
 +M:    Jason A. Donenfeld <Jason@zx2c4.com>
 +S:    Maintained
 +F:    drivers/net/wireguard/
 +F:    tools/testing/selftests/wireguard/
 +L:    wireguard@lists.zx2c4.com
 +L:    netdev@vger.kernel.org
 +
  WISTRON LAPTOP BUTTON DRIVER
  M:    Miloslav Trmac <mitr@volny.cz>
  S:    Maintained
@@@ -18154,7 -18042,7 +18154,7 @@@ XDP (eXpress Data Path
  M:    Alexei Starovoitov <ast@kernel.org>
  M:    Daniel Borkmann <daniel@iogearbox.net>
  M:    David S. Miller <davem@davemloft.net>
 -M:    Jakub Kicinski <jakub.kicinski@netronome.com>
 +M:    Jakub Kicinski <kuba@kernel.org>
  M:    Jesper Dangaard Brouer <hawk@kernel.org>
  M:    John Fastabend <john.fastabend@gmail.com>
  L:    netdev@vger.kernel.org
diff --combined drivers/gpio/Kconfig
@@@ -312,6 -312,12 +312,12 @@@ config GPIO_IXP4X
          IXP4xx series of chips.
  
          If unsure, say N.
+ config GPIO_LOGICVC
+       tristate "Xylon LogiCVC GPIO support"
+       depends on MFD_SYSCON && OF
+       help
+         Say yes here to support GPIO functionality of the Xylon LogiCVC
+         programmable logic block.
  
  config GPIO_LOONGSON
        bool "Loongson-2/3 GPIO support"
@@@ -479,15 -485,6 +485,15 @@@ config GPIO_SAMA5D2_PIOB
          The difference from regular GPIOs is that they
          maintain their value during backup/self-refresh.
  
 +config GPIO_SIFIVE
 +      bool "SiFive GPIO support"
 +      depends on OF_GPIO && IRQ_DOMAIN_HIERARCHY
 +      select GPIO_GENERIC
 +      select GPIOLIB_IRQCHIP
 +      select REGMAP_MMIO
 +      help
 +        Say yes here to support the GPIO device on SiFive SoCs.
 +
  config GPIO_SIOX
        tristate "SIOX GPIO support"
        depends on SIOX
@@@ -582,6 -579,7 +588,7 @@@ config GPIO_THUNDER
        tristate "Cavium ThunderX/OCTEON-TX GPIO"
        depends on ARCH_THUNDER || (64BIT && COMPILE_TEST)
        depends on PCI_MSI
+       select GPIOLIB_IRQCHIP
        select IRQ_DOMAIN_HIERARCHY
        select IRQ_FASTEOI_HIERARCHY_HANDLERS
        help
@@@ -621,6 -619,13 +628,13 @@@ config GPIO_VX85
          additional drivers must be enabled in order to use the
          functionality of the device.
  
+ config GPIO_WCD934X
+       tristate "Qualcomm Technologies Inc WCD9340/WCD9341 gpio controller driver"
+       depends on MFD_WCD934X && OF_GPIO
+       help
+          This driver is to supprot GPIO block found on the Qualcomm Technologies
+        Inc WCD9340/WCD9341 Audio Codec.
  config GPIO_XGENE
        bool "APM X-Gene GPIO controller support"
        depends on ARM64 && OF_GPIO
diff --combined drivers/gpio/Makefile
@@@ -69,6 -69,7 +69,7 @@@ obj-$(CONFIG_GPIO_IT87)                       += gpio-it87.
  obj-$(CONFIG_GPIO_IXP4XX)             += gpio-ixp4xx.o
  obj-$(CONFIG_GPIO_JANZ_TTL)           += gpio-janz-ttl.o
  obj-$(CONFIG_GPIO_KEMPLD)             += gpio-kempld.o
+ obj-$(CONFIG_GPIO_LOGICVC)            += gpio-logicvc.o
  obj-$(CONFIG_GPIO_LOONGSON1)          += gpio-loongson1.o
  obj-$(CONFIG_GPIO_LOONGSON)           += gpio-loongson.o
  obj-$(CONFIG_GPIO_LP3943)             += gpio-lp3943.o
@@@ -124,7 -125,6 +125,7 @@@ obj-$(CONFIG_ARCH_SA1100)          += gpio-sa11
  obj-$(CONFIG_GPIO_SAMA5D2_PIOBU)      += gpio-sama5d2-piobu.o
  obj-$(CONFIG_GPIO_SCH311X)            += gpio-sch311x.o
  obj-$(CONFIG_GPIO_SCH)                        += gpio-sch.o
 +obj-$(CONFIG_GPIO_SIFIVE)             += gpio-sifive.o
  obj-$(CONFIG_GPIO_SIOX)                       += gpio-siox.o
  obj-$(CONFIG_GPIO_SODAVILLE)          += gpio-sodaville.o
  obj-$(CONFIG_GPIO_SPEAR_SPICS)                += gpio-spear-spics.o
@@@ -158,6 -158,7 +159,7 @@@ obj-$(CONFIG_GPIO_VF610)           += gpio-vf610
  obj-$(CONFIG_GPIO_VIPERBOARD)         += gpio-viperboard.o
  obj-$(CONFIG_GPIO_VR41XX)             += gpio-vr41xx.o
  obj-$(CONFIG_GPIO_VX855)              += gpio-vx855.o
+ obj-$(CONFIG_GPIO_WCD934X)            += gpio-wcd934x.o
  obj-$(CONFIG_GPIO_WHISKEY_COVE)               += gpio-wcove.o
  obj-$(CONFIG_GPIO_WINBOND)            += gpio-winbond.o
  obj-$(CONFIG_GPIO_WM831X)             += gpio-wm831x.o
diff --combined drivers/gpio/gpiolib.c
@@@ -140,7 -140,7 +140,7 @@@ EXPORT_SYMBOL_GPL(gpio_to_desc)
   * in the given chip for the specified hardware number.
   */
  struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
-                                   u16 hwnum)
+                                   unsigned int hwnum)
  {
        struct gpio_device *gdev = chip->gpiodev;
  
@@@ -232,15 -232,15 +232,15 @@@ int gpiod_get_direction(struct gpio_des
                return -ENOTSUPP;
  
        ret = chip->get_direction(chip, offset);
-       if (ret > 0) {
-               /* GPIOF_DIR_IN, or other positive */
+       if (ret < 0)
+               return ret;
+       /* GPIOF_DIR_IN or other positive, otherwise GPIOF_DIR_OUT */
+       if (ret > 0)
                ret = 1;
-               clear_bit(FLAG_IS_OUT, &desc->flags);
-       }
-       if (ret == 0) {
-               /* GPIOF_DIR_OUT */
-               set_bit(FLAG_IS_OUT, &desc->flags);
-       }
+       assign_bit(FLAG_IS_OUT, &desc->flags, !ret);
        return ret;
  }
  EXPORT_SYMBOL_GPL(gpiod_get_direction);
@@@ -492,15 -492,6 +492,6 @@@ static int linehandle_validate_flags(u3
        return 0;
  }
  
- static void linehandle_configure_flag(unsigned long *flagsp,
-                                     u32 bit, bool active)
- {
-       if (active)
-               set_bit(bit, flagsp);
-       else
-               clear_bit(bit, flagsp);
- }
  static long linehandle_set_config(struct linehandle_state *lh,
                                  void __user *ip)
  {
                desc = lh->descs[i];
                flagsp = &desc->flags;
  
-               linehandle_configure_flag(flagsp, FLAG_ACTIVE_LOW,
+               assign_bit(FLAG_ACTIVE_LOW, flagsp,
                        lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW);
  
-               linehandle_configure_flag(flagsp, FLAG_OPEN_DRAIN,
+               assign_bit(FLAG_OPEN_DRAIN, flagsp,
                        lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN);
  
-               linehandle_configure_flag(flagsp, FLAG_OPEN_SOURCE,
+               assign_bit(FLAG_OPEN_SOURCE, flagsp,
                        lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE);
  
-               linehandle_configure_flag(flagsp, FLAG_PULL_UP,
+               assign_bit(FLAG_PULL_UP, flagsp,
                        lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP);
  
-               linehandle_configure_flag(flagsp, FLAG_PULL_DOWN,
+               assign_bit(FLAG_PULL_DOWN, flagsp,
                        lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN);
  
-               linehandle_configure_flag(flagsp, FLAG_BIAS_DISABLE,
+               assign_bit(FLAG_BIAS_DISABLE, flagsp,
                        lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE);
  
                /*
@@@ -686,14 -677,13 +677,13 @@@ static int linehandle_create(struct gpi
        /* Request each GPIO */
        for (i = 0; i < handlereq.lines; i++) {
                u32 offset = handlereq.lineoffsets[i];
-               struct gpio_desc *desc;
+               struct gpio_desc *desc = gpiochip_get_desc(gdev->chip, offset);
  
-               if (offset >= gdev->ngpio) {
-                       ret = -EINVAL;
+               if (IS_ERR(desc)) {
+                       ret = PTR_ERR(desc);
                        goto out_free_descs;
                }
  
-               desc = &gdev->descs[offset];
                ret = gpiod_request(desc, lh->label);
                if (ret)
                        goto out_free_descs;
@@@ -1018,8 -1008,9 +1008,9 @@@ static int lineevent_create(struct gpio
        lflags = eventreq.handleflags;
        eflags = eventreq.eventflags;
  
-       if (offset >= gdev->ngpio)
-               return -EINVAL;
+       desc = gpiochip_get_desc(gdev->chip, offset);
+       if (IS_ERR(desc))
+               return PTR_ERR(desc);
  
        /* Return an error if a unknown flag is set */
        if ((lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) ||
                }
        }
  
-       desc = &gdev->descs[offset];
        ret = gpiod_request(desc, le->label);
        if (ret)
                goto out_free_label;
@@@ -1184,10 -1174,11 +1174,11 @@@ static long gpio_ioctl(struct file *fil
  
                if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
                        return -EFAULT;
-               if (lineinfo.line_offset >= gdev->ngpio)
-                       return -EINVAL;
  
-               desc = &gdev->descs[lineinfo.line_offset];
+               desc = gpiochip_get_desc(chip, lineinfo.line_offset);
+               if (IS_ERR(desc))
+                       return PTR_ERR(desc);
                if (desc->name) {
                        strncpy(lineinfo.name, desc->name,
                                sizeof(lineinfo.name));
@@@ -1427,7 -1418,7 +1418,7 @@@ int gpiochip_add_data_with_key(struct g
                ret = gdev->id;
                goto err_free_gdev;
        }
-       dev_set_name(&gdev->dev, "gpiochip%d", gdev->id);
+       dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
        device_initialize(&gdev->dev);
        dev_set_drvdata(&gdev->dev, gdev);
        if (chip->parent && chip->parent->driver)
  
        if (chip->ngpio > FASTPATH_NGPIO)
                chip_warn(chip, "line cnt %u is greater than fast path cnt %u\n",
-               chip->ngpio, FASTPATH_NGPIO);
+                         chip->ngpio, FASTPATH_NGPIO);
  
        gdev->label = kstrdup_const(chip->label ?: "unknown", GFP_KERNEL);
        if (!gdev->label) {
                goto err_free_label;
        }
  
-       spin_unlock_irqrestore(&gpio_lock, flags);
        for (i = 0; i < chip->ngpio; i++)
                gdev->descs[i].gdev = gdev;
  
+       spin_unlock_irqrestore(&gpio_lock, flags);
  #ifdef CONFIG_PINCTRL
        INIT_LIST_HEAD(&gdev->pin_ranges);
  #endif
                struct gpio_desc *desc = &gdev->descs[i];
  
                if (chip->get_direction && gpiochip_line_is_valid(chip, i)) {
-                       if (!chip->get_direction(chip, i))
-                               set_bit(FLAG_IS_OUT, &desc->flags);
-                       else
-                               clear_bit(FLAG_IS_OUT, &desc->flags);
+                       assign_bit(FLAG_IS_OUT,
+                                  &desc->flags, !chip->get_direction(chip, i));
                } else {
-                       if (!chip->direction_input)
-                               set_bit(FLAG_IS_OUT, &desc->flags);
-                       else
-                               clear_bit(FLAG_IS_OUT, &desc->flags);
+                       assign_bit(FLAG_IS_OUT,
+                                  &desc->flags, !chip->direction_input);
                }
        }
  
@@@ -2003,7 -1990,7 +1990,7 @@@ static int gpiochip_hierarchy_irq_domai
        irq_hw_number_t hwirq;
        unsigned int type = IRQ_TYPE_NONE;
        struct irq_fwspec *fwspec = data;
-       struct irq_fwspec parent_fwspec;
+       void *parent_arg;
        unsigned int parent_hwirq;
        unsigned int parent_type;
        struct gpio_irq_chip *girq = &gc->irq;
        if (ret)
                return ret;
  
-       chip_info(gc, "allocate IRQ %d, hwirq %lu\n", irq,  hwirq);
+       chip_dbg(gc, "allocate IRQ %d, hwirq %lu\n", irq,  hwirq);
  
        ret = girq->child_to_parent_hwirq(gc, hwirq, type,
                                          &parent_hwirq, &parent_type);
                chip_err(gc, "can't look up hwirq %lu\n", hwirq);
                return ret;
        }
-       chip_info(gc, "found parent hwirq %u\n", parent_hwirq);
+       chip_dbg(gc, "found parent hwirq %u\n", parent_hwirq);
  
        /*
         * We set handle_bad_irq because the .set_type() should
                            NULL, NULL);
        irq_set_probe(irq);
  
-       /*
-        * Create a IRQ fwspec to send up to the parent irqdomain:
-        * specify the hwirq we address on the parent and tie it
-        * all together up the chain.
-        */
-       parent_fwspec.fwnode = d->parent->fwnode;
        /* This parent only handles asserted level IRQs */
-       girq->populate_parent_fwspec(gc, &parent_fwspec, parent_hwirq,
-                                    parent_type);
-       chip_info(gc, "alloc_irqs_parent for %d parent hwirq %d\n",
+       parent_arg = girq->populate_parent_alloc_arg(gc, parent_hwirq, parent_type);
+       if (!parent_arg)
+               return -ENOMEM;
+       chip_dbg(gc, "alloc_irqs_parent for %d parent hwirq %d\n",
                  irq, parent_hwirq);
-       ret = irq_domain_alloc_irqs_parent(d, irq, 1, &parent_fwspec);
+       irq_set_lockdep_class(irq, gc->irq.lock_key, gc->irq.request_key);
+       ret = irq_domain_alloc_irqs_parent(d, irq, 1, parent_arg);
+       /*
+        * If the parent irqdomain is msi, the interrupts have already
+        * been allocated, so the EEXIST is good.
+        */
+       if (irq_domain_is_msi(d->parent) && (ret == -EEXIST))
+               ret = 0;
        if (ret)
                chip_err(gc,
                         "failed to allocate parent hwirq %d for hwirq %lu\n",
                         parent_hwirq, hwirq);
  
+       kfree(parent_arg);
        return ret;
  }
  
@@@ -2095,8 -2086,8 +2086,8 @@@ static int gpiochip_hierarchy_add_domai
        if (!gc->irq.child_offset_to_irq)
                gc->irq.child_offset_to_irq = gpiochip_child_offset_to_irq_noop;
  
-       if (!gc->irq.populate_parent_fwspec)
-               gc->irq.populate_parent_fwspec =
+       if (!gc->irq.populate_parent_alloc_arg)
+               gc->irq.populate_parent_alloc_arg =
                        gpiochip_populate_parent_fwspec_twocell;
  
        gpiochip_hierarchy_setup_domain_ops(&gc->irq.child_irq_domain_ops);
@@@ -2122,27 -2113,43 +2113,43 @@@ static bool gpiochip_hierarchy_is_hiera
        return !!gc->irq.parent_domain;
  }
  
- void gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
-                                            struct irq_fwspec *fwspec,
+ void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
                                             unsigned int parent_hwirq,
                                             unsigned int parent_type)
  {
+       struct irq_fwspec *fwspec;
+       fwspec = kmalloc(sizeof(*fwspec), GFP_KERNEL);
+       if (!fwspec)
+               return NULL;
+       fwspec->fwnode = chip->irq.parent_domain->fwnode;
        fwspec->param_count = 2;
        fwspec->param[0] = parent_hwirq;
        fwspec->param[1] = parent_type;
+       return fwspec;
  }
  EXPORT_SYMBOL_GPL(gpiochip_populate_parent_fwspec_twocell);
  
- void gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
-                                             struct irq_fwspec *fwspec,
+ void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
                                              unsigned int parent_hwirq,
                                              unsigned int parent_type)
  {
+       struct irq_fwspec *fwspec;
+       fwspec = kmalloc(sizeof(*fwspec), GFP_KERNEL);
+       if (!fwspec)
+               return NULL;
+       fwspec->fwnode = chip->irq.parent_domain->fwnode;
        fwspec->param_count = 4;
        fwspec->param[0] = 0;
        fwspec->param[1] = parent_hwirq;
        fwspec->param[2] = 0;
        fwspec->param[3] = parent_type;
+       return fwspec;
  }
  EXPORT_SYMBOL_GPL(gpiochip_populate_parent_fwspec_fourcell);
  
@@@ -2998,7 -3005,8 +3005,8 @@@ EXPORT_SYMBOL_GPL(gpiochip_is_requested
   * A pointer to the GPIO descriptor, or an ERR_PTR()-encoded negative error
   * code on failure.
   */
- struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
+ struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip,
+                                           unsigned int hwnum,
                                            const char *label,
                                            enum gpio_lookup_flags lflags,
                                            enum gpiod_flags dflags)
@@@ -3050,25 -3058,13 +3058,13 @@@ EXPORT_SYMBOL_GPL(gpiochip_free_own_des
   * rely on gpio_request() having been called beforehand.
   */
  
- static int gpio_set_config(struct gpio_chip *gc, unsigned offset,
+ static int gpio_set_config(struct gpio_chip *gc, unsigned int offset,
                           enum pin_config_param mode)
  {
-       unsigned long config;
-       unsigned arg;
-       switch (mode) {
-       case PIN_CONFIG_BIAS_DISABLE:
-       case PIN_CONFIG_BIAS_PULL_DOWN:
-       case PIN_CONFIG_BIAS_PULL_UP:
-               arg = 1;
-               break;
-       default:
-               arg = 0;
-       }
+       if (!gc->set_config)
+               return -ENOTSUPP;
  
-       config = PIN_CONF_PACKED(mode, arg);
-       return gc->set_config ? gc->set_config(gc, offset, config) : -ENOTSUPP;
+       return gc->set_config(gc, offset, mode);
  }
  
  static int gpio_set_bias(struct gpio_chip *chip, struct gpio_desc *desc)
@@@ -3302,15 -3298,9 +3298,9 @@@ int gpiod_set_debounce(struct gpio_des
  
        VALIDATE_DESC(desc);
        chip = desc->gdev->chip;
-       if (!chip->set || !chip->set_config) {
-               gpiod_dbg(desc,
-                         "%s: missing set() or set_config() operations\n",
-                         __func__);
-               return -ENOTSUPP;
-       }
  
        config = pinconf_to_config_packed(PIN_CONFIG_INPUT_DEBOUNCE, debounce);
-       return chip->set_config(chip, gpio_chip_hwgpio(desc), config);
+       return gpio_set_config(chip, gpio_chip_hwgpio(desc), config);
  }
  EXPORT_SYMBOL_GPL(gpiod_set_debounce);
  
@@@ -3334,10 -3324,7 +3324,7 @@@ int gpiod_set_transitory(struct gpio_de
         * Handle FLAG_TRANSITORY first, enabling queries to gpiolib for
         * persistence state.
         */
-       if (transitory)
-               set_bit(FLAG_TRANSITORY, &desc->flags);
-       else
-               clear_bit(FLAG_TRANSITORY, &desc->flags);
+       assign_bit(FLAG_TRANSITORY, &desc->flags, transitory);
  
        /* If the driver supports it, set the persistence state now */
        chip = desc->gdev->chip;
        packed = pinconf_to_config_packed(PIN_CONFIG_PERSIST_STATE,
                                          !transitory);
        gpio = gpio_chip_hwgpio(desc);
-       rc = chip->set_config(chip, gpio, packed);
+       rc = gpio_set_config(chip, gpio, packed);
        if (rc == -ENOTSUPP) {
                dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n",
                                gpio);
@@@ -3371,17 -3358,6 +3358,17 @@@ int gpiod_is_active_low(const struct gp
  }
  EXPORT_SYMBOL_GPL(gpiod_is_active_low);
  
 +/**
 + * gpiod_toggle_active_low - toggle whether a GPIO is active-low or not
 + * @desc: the gpio descriptor to change
 + */
 +void gpiod_toggle_active_low(struct gpio_desc *desc)
 +{
 +      VALIDATE_DESC_VOID(desc);
 +      change_bit(FLAG_ACTIVE_LOW, &desc->flags);
 +}
 +EXPORT_SYMBOL_GPL(gpiod_toggle_active_low);
 +
  /* I/O calls are only valid after configuration completed; the relevant
   * "is this a valid GPIO" error checks should already have been done.
   *
@@@ -3804,10 -3780,7 +3791,7 @@@ int gpiod_set_array_value_complex(bool 
                                gpio_set_open_source_value_commit(desc, value);
                        } else {
                                __set_bit(hwgpio, mask);
-                               if (value)
-                                       __set_bit(hwgpio, bits);
-                               else
-                                       __clear_bit(hwgpio, bits);
+                               __assign_bit(hwgpio, bits, value);
                                count++;
                        }
                        i++;
@@@ -5124,7 -5097,7 +5108,7 @@@ static int __init gpiolib_dev_init(void
                return ret;
        }
  
-       ret = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, "gpiochip");
+       ret = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, GPIOCHIP_NAME);
        if (ret < 0) {
                pr_err("gpiolib: failed to allocate char dev region\n");
                bus_unregister(&gpio_bus_type);