Merge tag 'pinctrl-v5.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 30 Apr 2021 20:04:30 +0000 (13:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 30 Apr 2021 20:04:30 +0000 (13:04 -0700)
Pull pin control updates from Linus Walleij:
 "There is a lot going on!

  Core changes:

   - A semantic change to handle pinmux and pinconf in explicit order
     while up until now we depended on the semantic order in the device
     tree. The device tree is a functional programming language and does
     not imply any order, so the right thing is for the pin control core
     to provide these semantics.

   - Add a new pinmux-select debugfs file which makes it possible to go
     in and select functions for a pin manually (iteratively, at the
     prompt) for debugging purposes.

   - Fixes to gpio regmap handling for a new pin control driver making
     use of regmap-gpio.

   - Use octal permissions on debugfs files.

  New drivers:

   - A massive rewrite of the former custom pin control driver for MIPS
     Broadcom devices to instead use the pin control subsystem. New pin
     control drivers for BCM6345, BCM6328, BCM6358, BCM6362, BCM6368,
     BCM63268 and BCM6318 SoC variants are implemented.

   - Support for PM8350, PM8350B, PM8350C, PMK8350, PMR735A and PMR735B
     in the Qualcomm PMIC GPIO driver. Also the two GPIOs on PM8008 are
     supported.

   - Support for the Rockchip RK3568/RK3566 pin controller.

   - Support for Ingenic JZ4730, JZ4750, JZ4755, JZ4775 and X2000.

   - Support for Mediatek MTK8195.

   - Add a new Xilinx ZynqMP pin control driver.

  Driver improvements and non-urgent fixes:

   - Modularization and improvements of the Rockchip drivers.

   - Some new pins added to the description of new Renesas SoCs.

   - Clarifications of the GPIO base calculation in the Intel driver.

   - Fix the function names for the MPP54 and MPP55 pins in the Armada
     CP110 pin controller.

   - GPIO wakeup interrupt map for Qualcomm SC7280 and SM8350.

   - Support for ACPI probing of the Qualcomm SC8180x.

   - Fix interrupt clear status on rockchip

   - Fix some missing pins on the Ingenic JZ4770, some semantic fixes
     for the behaviour of the Ingenic pin controller. Add DMIC pins for
     JZ4780, X1000, X1500 and X1830.

   - A slew of janitorial like of_node_put() calls"

* tag 'pinctrl-v5.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (99 commits)
  pinctrl: Add Xilinx ZynqMP pinctrl driver support
  firmware: xilinx: Add pinctrl support
  pinctrl: rockchip: do coding style for mux route struct
  pinctrl: Add PIN_CONFIG_MODE_PWM to enum pin_config_param
  pinctrl: Introduce MODE group in enum pin_config_param
  pinctrl: Keep enum pin_config_param ordered by name
  dt-bindings: pinctrl: Add binding for ZynqMP pinctrl driver
  pinctrl: core: Fix kernel doc string for pin_get_name()
  pinctrl: mediatek: use spin lock in mtk_rmw
  pinctrl: add drive for I2C related pins on MT8195
  pinctrl: add pinctrl driver on mt8195
  dt-bindings: pinctrl: mt8195: add pinctrl file and binding document
  pinctrl: Ingenic: Add pinctrl driver for X2000.
  pinctrl: Ingenic: Add pinctrl driver for JZ4775.
  pinctrl: Ingenic: Add pinctrl driver for JZ4755.
  pinctrl: Ingenic: Add pinctrl driver for JZ4750.
  pinctrl: Ingenic: Add pinctrl driver for JZ4730.
  dt-bindings: pinctrl: Add bindings for new Ingenic SoCs.
  pinctrl: Ingenic: Reformat the code.
  pinctrl: Ingenic: Add DMIC pins support for Ingenic SoCs.
  ...

1  2 
MAINTAINERS
arch/arm64/Kconfig.platforms
drivers/firmware/xilinx/zynqmp.c
drivers/pinctrl/core.c
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/pinctrl-rockchip.c
drivers/pinctrl/qcom/pinctrl-sc7280.c
drivers/soc/tegra/pmc.c
include/linux/firmware/xlnx-zynqmp.h

diff --combined MAINTAINERS
@@@ -261,8 -261,8 +261,8 @@@ ABI/AP
  L:    linux-api@vger.kernel.org
  F:    include/linux/syscalls.h
  F:    kernel/sys_ni.c
 -F:    include/uapi/
 -F:    arch/*/include/uapi/
 +X:    include/uapi/
 +X:    arch/*/include/uapi/
  
  ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
@@@ -300,6 -300,7 +300,6 @@@ M: Syed Nayyar Waris <syednwaris@gmail.
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-counter-104-quad-8
 -F:    Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8
  F:    drivers/counter/104-quad-8.c
  
  ACCES PCI-IDIO-16 GPIO DRIVER
@@@ -572,12 -573,6 +572,12 @@@ S:       Maintaine
  F:    Documentation/scsi/advansys.rst
  F:    drivers/scsi/advansys.c
  
 +ADVANTECH SWBTN DRIVER
 +M:    Andrea Ho <Andrea.Ho@advantech.com.tw>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/adv_swbutton.c
 +
  ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
@@@ -702,11 -697,6 +702,11 @@@ S:       Maintaine
  F:    Documentation/i2c/busses/i2c-ali1563.rst
  F:    drivers/i2c/busses/i2c-ali1563.c
  
 +ALIENWARE WMI DRIVER
 +L:    Dell.Client.Kernel@dell.com
 +S:    Maintained
 +F:    drivers/platform/x86/dell/alienware-wmi.c
 +
  ALL SENSORS DLH SERIES PRESSURE SENSORS DRIVER
  M:    Tomislav Denis <tomislav.denis@avl.com>
  L:    linux-iio@vger.kernel.org
@@@ -880,6 -870,13 +880,6 @@@ S:        Supporte
  T:    git git://people.freedesktop.org/~agd5f/linux
  F:    drivers/gpu/drm/amd/display/
  
 -AMD ENERGY DRIVER
 -M:    Naveen Krishna Chatradhi <nchatrad@amd.com>
 -L:    linux-hwmon@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/hwmon/amd_energy.rst
 -F:    drivers/hwmon/amd_energy.c
 -
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
  M:    Huang Rui <ray.huang@amd.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -1145,7 -1142,7 +1145,7 @@@ W:      http://ez.analog.com/community/linux
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-ad9523
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-adf4350
  F:    Documentation/devicetree/bindings/iio/*/adi,*
 -F:    Documentation/devicetree/bindings/iio/dac/ad5758.txt
 +F:    Documentation/devicetree/bindings/iio/dac/adi,ad5758.yaml
  F:    drivers/iio/*/ad*
  F:    drivers/iio/adc/ltc249*
  F:    drivers/iio/amplifiers/hmc425a.c
@@@ -1184,7 -1181,7 +1184,7 @@@ M:      Joel Fernandes <joel@joelfernandes.o
  M:    Christian Brauner <christian@brauner.io>
  M:    Hridya Valsaraju <hridya@google.com>
  M:    Suren Baghdasaryan <surenb@google.com>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-kernel@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  F:    drivers/android/
@@@ -1326,7 -1323,7 +1326,7 @@@ ARC PGU DRM DRIVE
  M:    Alexey Brodkin <abrodkin@synopsys.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/display/snps,arcpgu.txt
 -F:    drivers/gpu/drm/arc/
 +F:    drivers/gpu/drm/tiny/arcpgu.c
  
  ARCNET NETWORK LAYER
  M:    Michael Grzeschik <m.grzeschik@pengutronix.de>
@@@ -1533,7 -1530,6 +1533,7 @@@ F:      Documentation/devicetree/bindings/dm
  F:    Documentation/devicetree/bindings/i2c/i2c-owl.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/actions,owl-sirq.yaml
  F:    Documentation/devicetree/bindings/mmc/owl-mmc.yaml
 +F:    Documentation/devicetree/bindings/net/actions,owl-emac.yaml
  F:    Documentation/devicetree/bindings/pinctrl/actions,*
  F:    Documentation/devicetree/bindings/power/actions,owl-sps.txt
  F:    Documentation/devicetree/bindings/timer/actions,owl-timer.txt
@@@ -1546,7 -1542,6 +1546,7 @@@ F:      drivers/dma/owl-dma.
  F:    drivers/i2c/busses/i2c-owl.c
  F:    drivers/irqchip/irq-owl-sirq.c
  F:    drivers/mmc/host/owl-mmc.c
 +F:    drivers/net/ethernet/actions/
  F:    drivers/pinctrl/actions/*
  F:    drivers/soc/actions/
  F:    include/dt-bindings/power/owl-*
@@@ -1581,13 -1576,11 +1581,13 @@@ R:   Jernej Skrabec <jernej.skrabec@siol.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
 +L:    linux-sunxi@lists.linux.dev
  F:    arch/arm/mach-sunxi/
  F:    arch/arm64/boot/dts/allwinner/
  F:    drivers/clk/sunxi-ng/
  F:    drivers/pinctrl/sunxi/
  F:    drivers/soc/sunxi/
 +N:    allwinner
  N:    sun[x456789]i
  N:    sun50i
  
@@@ -1644,20 -1637,6 +1644,20 @@@ F:    arch/arm/mach-alpine
  F:    arch/arm64/boot/dts/amazon/
  F:    drivers/*/*alpine*
  
 +ARM/APPLE MACHINE SUPPORT
 +M:    Hector Martin <marcan@marcan.st>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +W:    https://asahilinux.org
 +B:    https://github.com/AsahiLinux/linux/issues
 +C:    irc://chat.freenode.net/asahi-dev
 +T:    git https://github.com/AsahiLinux/linux.git
 +F:    Documentation/devicetree/bindings/arm/apple.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
 +F:    arch/arm64/boot/dts/apple/
 +F:    drivers/irqchip/irq-apple-aic.c
 +F:    include/dt-bindings/interrupt-controller/apple-aic.h
 +
  ARM/ARTPEC MACHINE SUPPORT
  M:    Jesper Nilsson <jesper.nilsson@axis.com>
  M:    Lars Persson <lars.persson@axis.com>
@@@ -1785,7 -1764,6 +1785,7 @@@ F:      Documentation/devicetree/bindings/ar
  F:    Documentation/trace/coresight/*
  F:    drivers/hwtracing/coresight/*
  F:    include/dt-bindings/arm/coresight-cti-dt.h
 +F:    include/linux/coresight*
  F:    tools/perf/arch/arm/util/auxtrace.c
  F:    tools/perf/arch/arm/util/cs-etm.c
  F:    tools/perf/arch/arm/util/cs-etm.h
@@@ -1812,26 -1790,19 +1812,26 @@@ F:   drivers/net/ethernet/cortina
  F:    drivers/pinctrl/pinctrl-gemini.c
  F:    drivers/rtc/rtc-ftrtc010.c
  
 -ARM/CZ.NIC TURRIS MOX SUPPORT
 -M:    Marek Behun <marek.behun@nic.cz>
 +ARM/CZ.NIC TURRIS SUPPORT
 +M:    Marek Behun <kabel@kernel.org>
  S:    Maintained
 -W:    http://mox.turris.cz
 +W:    https://www.turris.cz/
  F:    Documentation/ABI/testing/debugfs-moxtet
  F:    Documentation/ABI/testing/sysfs-bus-moxtet-devices
  F:    Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm
  F:    Documentation/devicetree/bindings/bus/moxtet.txt
  F:    Documentation/devicetree/bindings/firmware/cznic,turris-mox-rwtm.txt
  F:    Documentation/devicetree/bindings/gpio/gpio-moxtet.txt
 +F:    Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
 +F:    Documentation/devicetree/bindings/watchdog/armada-37xx-wdt.txt
  F:    drivers/bus/moxtet.c
  F:    drivers/firmware/turris-mox-rwtm.c
 +F:    drivers/leds/leds-turris-omnia.c
 +F:    drivers/mailbox/armada-37xx-rwtm-mailbox.c
  F:    drivers/gpio/gpio-moxtet.c
 +F:    drivers/watchdog/armada_37xx_wdt.c
 +F:    include/dt-bindings/bus/moxtet.h
 +F:    include/linux/armada-37xx-rwtm-mailbox.h
  F:    include/linux/moxtet.h
  
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
@@@ -2223,15 -2194,6 +2223,15 @@@ F:    drivers/*/*npcm
  F:    drivers/*/*/*npcm*
  F:    include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
  
 +ARM/NUVOTON WPCM450 ARCHITECTURE
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/*/*wpcm*
 +F:    arch/arm/boot/dts/nuvoton-wpcm450*
 +F:    arch/arm/mach-npcm/wpcm450.c
 +F:    drivers/*/*wpcm*
 +
  ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
  L:    openmoko-kernel@lists.openmoko.org (subscribers-only)
  S:    Orphan
@@@ -2334,7 -2296,6 +2334,7 @@@ F:      drivers/tty/serial/msm_serial.
  F:    drivers/usb/dwc3/dwc3-qcom.c
  F:    include/dt-bindings/*/qcom*
  F:    include/linux/*/qcom*
 +F:    include/linux/soc/qcom/
  
  ARM/RADISYS ENP2611 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -2414,7 -2375,7 +2414,7 @@@ F:      sound/soc/rockchip
  N:    rockchip
  
  ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -2528,7 -2489,7 +2528,7 @@@ N:      sc27x
  N:    sc2731
  
  ARM/STI ARCHITECTURE
 -M:    Patrice Chotard <patrice.chotard@st.com>
 +M:    Patrice Chotard <patrice.chotard@foss.st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  W:    http://www.stlinux.com
@@@ -2561,7 -2522,7 +2561,7 @@@ F:      include/linux/remoteproc/st_slim_rpr
  
  ARM/STM32 ARCHITECTURE
  M:    Maxime Coquelin <mcoquelin.stm32@gmail.com>
 -M:    Alexandre Torgue <alexandre.torgue@st.com>
 +M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  L:    linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2670,10 -2631,8 +2670,10 @@@ F:    drivers/watchdog/visconti_wdt.
  N:    visconti
  
  ARM/UNIPHIER ARCHITECTURE
 +M:    Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
 +M:    Masami Hiramatsu <mhiramat@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Orphan
 +S:    Maintained
  F:    Documentation/devicetree/bindings/arm/socionext/uniphier.yaml
  F:    Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml
  F:    Documentation/devicetree/bindings/pinctrl/socionext,uniphier-pinctrl.yaml
@@@ -2758,6 -2717,7 +2758,6 @@@ F:      Documentation/devicetree/bindings/i2
  F:    Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml
  F:    Documentation/devicetree/bindings/spi/xlnx,zynq-qspi.yaml
  F:    arch/arm/mach-zynq/
 -F:    drivers/block/xsysace.c
  F:    drivers/clocksource/timer-cadence-ttc.c
  F:    drivers/cpuidle/cpuidle-zynq.c
  F:    drivers/edac/synopsys_edac.c
@@@ -2896,18 -2856,6 +2896,18 @@@ W:    http://www.openaoe.org
  F:    Documentation/admin-guide/aoe/
  F:    drivers/block/aoe/
  
 +ATC260X PMIC MFD DRIVER
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +M:    Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
 +L:    linux-actions@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/actions,atc260x.yaml
 +F:    drivers/input/misc/atc260x-onkey.c
 +F:    drivers/mfd/atc260*
 +F:    drivers/power/reset/atc260x-poweroff.c
 +F:    drivers/regulator/atc260x-regulator.c
 +F:    include/linux/mfd/atc260x/*
 +
  ATHEROS 71XX/9XXX GPIO DRIVER
  M:    Alban Bedel <albeu@free.fr>
  S:    Maintained
@@@ -3031,11 -2979,9 +3031,11 @@@ L:    linux-audit@redhat.com (moderated fo
  S:    Supported
  W:    https://github.com/linux-audit
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
 +F:    include/asm-generic/audit_*.h
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
  F:    kernel/audit*
 +F:    lib/*audit.c
  
  AUXILIARY DISPLAY DRIVERS
  M:    Miguel Ojeda <ojeda@kernel.org>
@@@ -3169,7 -3115,7 +3169,7 @@@ C:      irc://irc.oftc.net/bcach
  F:    drivers/md/bcache/
  
  BDISP ST MEDIA DRIVER
 -M:    Fabien Dessenne <fabien.dessenne@st.com>
 +M:    Fabien Dessenne <fabien.dessenne@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -3287,7 -3233,6 +3287,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
  F:    Documentation/bpf/
  F:    Documentation/networking/filter.rst
 +F:    Documentation/userspace-api/ebpf/
  F:    arch/*/net/*
  F:    include/linux/bpf*
  F:    include/linux/filter.h
@@@ -3302,7 -3247,6 +3302,7 @@@ F:      net/core/filter.
  F:    net/sched/act_bpf.c
  F:    net/sched/cls_bpf.c
  F:    samples/bpf/
 +F:    scripts/bpf_doc.py
  F:    tools/bpf/
  F:    tools/lib/bpf/
  F:    tools/testing/selftests/bpf/
@@@ -3425,7 -3369,7 +3425,7 @@@ F:      include/linux/dsa/brcm.
  F:    include/linux/platform_data/b53.h
  
  BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE
 -M:    Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
 +M:    Nicolas Saenz Julienne <nsaenz@kernel.org>
  L:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -3614,14 -3558,6 +3614,14 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml
  F:    drivers/i2c/busses/i2c-brcmstb.c
  
 +BROADCOM BRCMSTB UART DRIVER
 +M:    Al Cooper <alcooperx@gmail.com>
 +L:    linux-serial@vger.kernel.org
 +L:    bcm-kernel-feedback-list@broadcom.com
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml
 +F:    drivers/tty/serial/8250/8250_bcm7271.c
 +
  BROADCOM BRCMSTB USB EHCI DRIVER
  M:    Al Cooper <alcooperx@gmail.com>
  L:    linux-usb@vger.kernel.org
@@@ -3739,7 -3675,7 +3739,7 @@@ M:      bcm-kernel-feedback-list@broadcom.co
  L:    linux-pm@vger.kernel.org
  S:    Maintained
  T:    git git://github.com/broadcom/stblinux.git
 -F:    drivers/soc/bcm/bcm-pmb.c
 +F:    drivers/soc/bcm/bcm63xx/bcm-pmb.c
  F:    include/dt-bindings/soc/bcm-pmb.h
  
  BROADCOM SPECIFIC AMBA DRIVER (BCMA)
@@@ -3753,7 -3689,7 +3753,7 @@@ BROADCOM SPI DRIVE
  M:    Kamal Dasu <kdasu.kdev@gmail.com>
  M:    bcm-kernel-feedback-list@broadcom.com
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt
 +F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
  F:    drivers/spi/spi-bcm-qspi.*
  F:    drivers/spi/spi-brcmstb-qspi.c
  F:    drivers/spi/spi-iproc-qspi.c
@@@ -4245,20 -4181,13 +4245,20 @@@ X:   drivers/char/tpm
  CHECKPATCH
  M:    Andy Whitcroft <apw@canonical.com>
  M:    Joe Perches <joe@perches.com>
 +R:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +R:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
  S:    Maintained
  F:    scripts/checkpatch.pl
  
 +CHECKPATCH DOCUMENTATION
 +M:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +M:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
 +R:    Joe Perches <joe@perches.com>
 +S:    Maintained
 +F:    Documentation/dev-tools/checkpatch.rst
 +
  CHINESE DOCUMENTATION
 -M:    Harry Wei <harryxiyou@gmail.com>
 -M:    Alex Shi <alex.shi@linux.alibaba.com>
 -L:    xiyoulinuxkernelgroup@googlegroups.com (subscribers-only)
 +M:    Alex Shi <alexs@kernel.org>
  S:    Maintained
  F:    Documentation/translations/zh_CN/
  
@@@ -4491,12 -4420,6 +4491,12 @@@ S:    Supporte
  F:    Documentation/process/code-of-conduct-interpretation.rst
  F:    Documentation/process/code-of-conduct.rst
  
 +COMEDI DRIVERS
 +M:    Ian Abbott <abbotti@mev.co.uk>
 +M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 +S:    Odd Fixes
 +F:    drivers/comedi/
 +
  COMMON CLK FRAMEWORK
  M:    Michael Turquette <mturquette@baylibre.com>
  M:    Stephen Boyd <sboyd@kernel.org>
@@@ -4662,11 -4585,6 +4662,11 @@@ F:    drivers/counter
  F:    include/linux/counter.h
  F:    include/linux/counter_enum.h
  
 +CP2615 I2C DRIVER
 +M:    Bence Csókás <bence98@sch.bme.hu>
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-cp2615.c
 +
  CPMAC ETHERNET DRIVER
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -4958,8 -4876,16 +4958,8 @@@ S:     Maintaine
  W:    http://www.armlinux.org.uk/
  F:    drivers/video/fbdev/cyber2000fb.*
  
 -CYCLADES ASYNC MUX DRIVER
 -S:    Orphan
 -W:    http://www.cyclades.com/
 -F:    drivers/tty/cyclades.c
 -F:    include/linux/cyclades.h
 -F:    include/uapi/linux/cyclades.h
 -
  CYCLADES PC300 DRIVER
  S:    Orphan
 -W:    http://www.cyclades.com/
  F:    drivers/net/wan/pc300*
  
  CYPRESS_FIRMWARE MEDIA DRIVER
@@@ -5108,19 -5034,19 +5108,19 @@@ F:   drivers/platform/x86/dell/dell_rbu.
  
  DELL SMBIOS DRIVER
  M:    Pali Rohár <pali@kernel.org>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios.*
  
  DELL SMBIOS SMM DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-smm.c
  
  DELL SMBIOS WMI DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-wmi.c
@@@ -5134,14 -5060,14 +5134,14 @@@ F:   Documentation/driver-api/dcdbas.rs
  F:    drivers/platform/x86/dell/dcdbas.*
  
  DELL WMI DESCRIPTOR DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-wmi-descriptor.c
  
  DELL WMI SYSMAN DRIVER
  M:    Divya Bharathi <divya.bharathi@dell.com>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
  M:    Prasanth Ksr <prasanth.ksr@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-firmware-attributes
@@@ -5154,7 -5080,7 +5154,7 @@@ S:      Maintaine
  F:    drivers/platform/x86/dell/dell-wmi.c
  
  DELTA ST MEDIA DRIVER
 -M:    Hugues Fruchet <hugues.fruchet@st.com>
 +M:    Hugues Fruchet <hugues.fruchet@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -5173,13 -5099,6 +5173,13 @@@ S:    Maintaine
  F:    drivers/dma/dw-edma/
  F:    include/linux/dma/edma.h
  
 +DESIGNWARE XDATA IP DRIVER
 +M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +L:    linux-pci@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/misc-devices/dw-xdata-pcie.rst
 +F:    drivers/misc/dw-xdata-pcie.c
 +
  DESIGNWARE USB2 DRD IP DRIVER
  M:    Minas Harutyunyan <hminas@synopsys.com>
  L:    linux-usb@vger.kernel.org
@@@ -5250,12 -5169,6 +5250,12 @@@ M:    Torben Mathiasen <device@lanana.org
  S:    Maintained
  W:    http://lanana.org/docs/device-list/index.html
  
 +DEVICE RESOURCE MANAGEMENT HELPERS
 +M:    Hans de Goede <hdegoede@redhat.com>
 +R:    Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
 +S:    Maintained
 +F:    include/linux/devm-helpers.h
 +
  DEVICE-MAPPER  (LVM)
  M:    Alasdair Kergon <agk@redhat.com>
  M:    Mike Snitzer <snitzer@redhat.com>
@@@ -5465,7 -5378,7 +5465,7 @@@ F:      drivers/hwmon/dme1737.
  DMI/SMBIOS SUPPORT
  M:    Jean Delvare <jdelvare@suse.com>
  S:    Maintained
 -T:    quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging.git dmi-for-next
  F:    Documentation/ABI/testing/sysfs-firmware-dmi-tables
  F:    drivers/firmware/dmi-id.c
  F:    drivers/firmware/dmi_scan.c
@@@ -5491,12 -5404,6 +5491,12 @@@ X:    Documentation/power
  X:    Documentation/spi/
  X:    Documentation/userspace-api/media/
  
 +DOCUMENTATION REPORTING ISSUES
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    linux-doc@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/admin-guide/reporting-issues.rst
 +
  DOCUMENTATION SCRIPTS
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-doc@vger.kernel.org
@@@ -5564,11 -5471,11 +5564,11 @@@ F:   drivers/net/ethernet/freescale/dpaa2
  F:    drivers/net/ethernet/freescale/dpaa2/dpni*
  
  DPAA2 ETHERNET SWITCH DRIVER
 -M:    Ioana Radulescu <ruxandra.radulescu@nxp.com>
  M:    Ioana Ciornei <ioana.ciornei@nxp.com>
 -L:    linux-kernel@vger.kernel.org
 +L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/fsl-dpaa2/ethsw
 +F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-switch*
 +F:    drivers/net/ethernet/freescale/dpaa2/dpsw*
  
  DPT_I2O SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@microsemi.com>
@@@ -5661,12 -5568,6 +5661,12 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
  F:    drivers/gpu/drm/panel/panel-boe-himax8279d.c
  
 +DRM DRIVER FOR CHIPONE ICN6211 MIPI-DSI to RGB CONVERTER BRIDGE
 +M:    Jagan Teki <jagan@amarulasolutions.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/display/bridge/chipone,icn6211.yaml
 +F:    drivers/gpu/drm/bridge/chipone-icn6211.c
 +
  DRM DRIVER FOR FARADAY TVE200 TV ENCODER
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
@@@ -5685,14 -5586,6 +5685,14 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/display/panel/feiyang,fy07024di26a30d.yaml
  F:    drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
  
 +DRM DRIVER FOR GENERIC USB DISPLAY
 +M:    Noralf Trønnes <noralf@tronnes.org>
 +S:    Maintained
 +W:    https://github.com/notro/gud/wiki
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    drivers/gpu/drm/gud/
 +F:    include/drm/gud.h
 +
  DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS
  M:    Hans de Goede <hdegoede@redhat.com>
  S:    Maintained
@@@ -5886,7 -5779,7 +5886,7 @@@ DRM DRIVER FOR ST-ERICSSON MCD
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/ste,mcde.txt
 +F:    Documentation/devicetree/bindings/display/ste,mcde.yaml
  F:    drivers/gpu/drm/mcde/
  
  DRM DRIVER FOR TDFX VIDEO CARDS
@@@ -5942,7 -5835,7 +5942,7 @@@ M:      David Airlie <airlied@linux.ie
  M:    Daniel Vetter <daniel@ffwll.ch>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
 -B:    https://bugs.freedesktop.org/
 +B:    https://gitlab.freedesktop.org/drm
  C:    irc://chat.freenode.net/dri-devel
  T:    git git://anongit.freedesktop.org/drm/drm
  F:    Documentation/devicetree/bindings/display/
@@@ -6001,7 -5894,6 +6001,7 @@@ F:      drivers/gpu/drm/atmel-hlcdc
  DRM DRIVERS FOR BRIDGE CHIPS
  M:    Andrzej Hajda <a.hajda@samsung.com>
  M:    Neil Armstrong <narmstrong@baylibre.com>
 +M:    Robert Foss <robert.foss@linaro.org>
  R:    Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
  R:    Jonas Karlman <jonas@kwiboo.se>
  R:    Jernej Skrabec <jernej.skrabec@siol.net>
@@@ -6071,7 -5963,6 +6071,7 @@@ DRM DRIVERS FOR MEDIATE
  M:    Chun-Kuang Hu <chunkuang.hu@kernel.org>
  M:    Philipp Zabel <p.zabel@pengutronix.de>
  L:    dri-devel@lists.freedesktop.org
 +L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/display/mediatek/
  F:    drivers/gpu/drm/mediatek/
@@@ -6097,9 -5988,9 +6097,9 @@@ L:      dri-devel@lists.freedesktop.or
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/pinchartl/media drm/du/next
 -F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
 +F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.yaml
  F:    Documentation/devicetree/bindings/display/bridge/renesas,lvds.yaml
 -F:    Documentation/devicetree/bindings/display/renesas,du.txt
 +F:    Documentation/devicetree/bindings/display/renesas,du.yaml
  F:    drivers/gpu/drm/rcar-du/
  F:    drivers/gpu/drm/shmobile/
  F:    include/linux/platform_data/shmob_drm.h
@@@ -6115,6 -6006,7 +6115,6 @@@ F:      drivers/gpu/drm/rockchip
  
  DRM DRIVERS FOR STI
  M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 -M:    Vincent Abriou <vincent.abriou@st.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6122,9 -6014,10 +6122,9 @@@ F:     Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/sti
  
  DRM DRIVERS FOR STM
 -M:    Yannick Fertre <yannick.fertre@st.com>
 -M:    Philippe Cornu <philippe.cornu@st.com>
 +M:    Yannick Fertre <yannick.fertre@foss.st.com>
 +M:    Philippe Cornu <philippe.cornu@foss.st.com>
  M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 -M:    Vincent Abriou <vincent.abriou@st.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6161,7 -6054,7 +6161,7 @@@ DRM DRIVERS FOR V3
  M:    Eric Anholt <eric@anholt.net>
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.txt
 +F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.yaml
  F:    drivers/gpu/drm/v3d/
  F:    include/uapi/drm/v3d_drm.h
  
@@@ -7099,7 -6992,6 +7099,7 @@@ S:      Maintaine
  F:    Documentation/ABI/testing/sysfs-bus-dfl*
  F:    Documentation/fpga/dfl.rst
  F:    drivers/fpga/dfl*
 +F:    drivers/uio/uio_dfl.c
  F:    include/linux/dfl.h
  F:    include/uapi/linux/fpga-dfl.h
  
@@@ -7199,7 -7091,7 +7199,7 @@@ S:      Maintaine
  F:    drivers/i2c/busses/i2c-cpm.c
  
  FREESCALE IMX / MXC FEC DRIVER
 -M:    Fugang Duan <fugang.duan@nxp.com>
 +M:    Joakim Zhang <qiangqing.zhang@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/fsl-fec.txt
@@@ -7240,13 -7132,6 +7240,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/i2c/i2c-imx-lpi2c.yaml
  F:    drivers/i2c/busses/i2c-imx-lpi2c.c
  
 +FREESCALE MPC I2C DRIVER
 +M:    Chris Packham <chris.packham@alliedtelesis.co.nz>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-mpc.yaml
 +F:    drivers/i2c/busses/i2c-mpc.c
 +
  FREESCALE QORIQ DPAA ETHERNET DRIVER
  M:    Madalin Bucur <madalin.bucur@nxp.com>
  L:    netdev@vger.kernel.org
@@@ -7276,7 -7161,6 +7276,7 @@@ FREESCALE QUAD SPI DRIVE
  M:    Han Xu <han.xu@nxp.com>
  L:    linux-spi@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/fsl,spi-fsl-qspi.yaml
  F:    drivers/spi/spi-fsl-qspi.c
  
  FREESCALE QUICC ENGINE LIBRARY
@@@ -7312,7 -7196,7 +7312,7 @@@ M:      Li Yang <leoyang.li@nxp.com
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.txt
 +F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.yaml
  F:    Documentation/devicetree/bindings/soc/fsl/
  F:    drivers/soc/fsl/
  F:    include/linux/fsl/
@@@ -7444,13 -7328,6 +7444,13 @@@ F:    fs/verity
  F:    include/linux/fsverity.h
  F:    include/uapi/linux/fsverity.h
  
 +FT260 FTDI USB-HID TO I2C BRIDGE DRIVER
 +M:    Michael Zaidman <michael.zaidman@gmail.com>
 +L:    linux-i2c@vger.kernel.org
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/hid-ft260.c
 +
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@just42.net>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7486,7 -7363,6 +7486,7 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  M:    Ingo Molnar <mingo@redhat.com>
  R:    Peter Zijlstra <peterz@infradead.org>
  R:    Darren Hart <dvhart@infradead.org>
 +R:    Davidlohr Bueso <dave@stgolabs.net>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
@@@ -7509,6 -7385,14 +7509,6 @@@ F:     Documentation/hwmon/gsc-hwmon.rs
  F:    drivers/hwmon/gsc-hwmon.c
  F:    include/linux/platform_data/gsc_hwmon.h
  
 -GASKET DRIVER FRAMEWORK
 -M:    Rob Springer <rspringer@google.com>
 -M:    Todd Poynor <toddpoynor@google.com>
 -M:    Ben Chan <benchan@chromium.org>
 -M:    Richard Yeh <rcy@google.com>
 -S:    Maintained
 -F:    drivers/staging/gasket/
 -
  GCC PLUGINS
  M:    Kees Cook <keescook@chromium.org>
  L:    linux-hardening@vger.kernel.org
@@@ -7592,9 -7476,8 +7592,9 @@@ F:      include/uapi/asm-generic
  GENERIC PHY FRAMEWORK
  M:    Kishon Vijay Abraham I <kishon@ti.com>
  M:    Vinod Koul <vkoul@kernel.org>
 -L:    linux-kernel@vger.kernel.org
 +L:    linux-phy@lists.infradead.org
  S:    Supported
 +Q:    https://patchwork.kernel.org/project/linux-phy/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
  F:    Documentation/devicetree/bindings/phy/
  F:    drivers/phy/
@@@ -7660,12 -7543,6 +7660,12 @@@ F:    Documentation/filesystems/gfs2
  F:    fs/gfs2/
  F:    include/uapi/linux/gfs2_ondisk.h
  
 +GIGABYTE WMI DRIVER
 +M:    Thomas Weißschuh <thomas@weissschuh.net>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/gigabyte-wmi.c
 +
  GNSS SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
  S:    Maintained
@@@ -7974,7 -7851,6 +7974,7 @@@ F:      Documentation/hwmon
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
  F:    include/trace/events/hwmon*.h
 +K:    (devm_)?hwmon_device_(un)?register(|_with_groups|_with_info)
  
  HARDWARE RANDOM NUMBER GENERATOR CORE
  M:    Matt Mackall <mpm@selenic.com>
@@@ -8016,11 -7892,6 +8016,11 @@@ W:    https://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/usb/hdpvr/
  
 +HEWLETT PACKARD ENTERPRISE ILO CHIF DRIVER
 +M:    Matt Hsiao <matt.hsiao@hpe.com>
 +S:    Supported
 +F:    drivers/misc/hpilo.[ch]
 +
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
  M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
@@@ -8169,13 -8040,6 +8169,13 @@@ F:    drivers/crypto/hisilicon/hpre/hpre.
  F:    drivers/crypto/hisilicon/hpre/hpre_crypto.c
  F:    drivers/crypto/hisilicon/hpre/hpre_main.c
  
 +HISILICON I2C CONTROLLER DRIVER
 +M:    Yicong Yang <yangyicong@hisilicon.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +W:    https://www.hisilicon.com
 +F:    drivers/i2c/busses/i2c-hisi.c
 +
  HISILICON LPC BUS DRIVER
  M:    john.garry@huawei.com
  S:    Maintained
@@@ -8250,15 -8114,9 +8250,15 @@@ F:    drivers/crypto/hisilicon/sec2/sec_cr
  F:    drivers/crypto/hisilicon/sec2/sec_crypto.h
  F:    drivers/crypto/hisilicon/sec2/sec_main.c
  
 +HISILICON SPI Controller DRIVER FOR KUNPENG SOCS
 +M:    Jay Fang <f.fangjian@huawei.com>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +W:    http://www.hisilicon.com
 +F:    drivers/spi/spi-hisi-kunpeng.c
 +
  HISILICON STAGING DRIVERS FOR HIKEY 960/970
  M:    Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
 -L:    devel@driverdev.osuosl.org
  S:    Maintained
  F:    drivers/staging/hikey9xx/
  
@@@ -8351,7 -8209,7 +8351,7 @@@ M:      Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/humidity/hts221.txt
 +F:    Documentation/devicetree/bindings/iio/humidity/st,hts221.yaml
  F:    drivers/iio/humidity/hts221*
  
  HUAWEI ETHERNET DRIVER
@@@ -8373,7 -8231,7 +8373,7 @@@ F:      include/linux/hugetlb.
  F:    mm/hugetlb.c
  
  HVA ST MEDIA DRIVER
 -M:    Jean-Christophe Trotin <jean-christophe.trotin@st.com>
 +M:    Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -8400,12 -8258,11 +8400,12 @@@ S:   Maintaine
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/i2c/hi556.c
  
 -Hyper-V CORE AND DRIVERS
 +Hyper-V/Azure CORE AND DRIVERS
  M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
  M:    Stephen Hemminger <sthemmin@microsoft.com>
  M:    Wei Liu <wei.liu@kernel.org>
 +M:    Dexuan Cui <decui@microsoft.com>
  L:    linux-hyperv@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
@@@ -8422,7 -8279,6 +8422,7 @@@ F:      drivers/hid/hid-hyperv.
  F:    drivers/hv/
  F:    drivers/input/serio/hyperv-keyboard.c
  F:    drivers/iommu/hyperv-iommu.c
 +F:    drivers/net/ethernet/microsoft/
  F:    drivers/net/hyperv/
  F:    drivers/pci/controller/pci-hyperv-intf.c
  F:    drivers/pci/controller/pci-hyperv.c
@@@ -8663,8 -8519,8 +8663,8 @@@ F:      drivers/pci/hotplug/rpaphp
  
  IBM Power SRIOV Virtual NIC Device Driver
  M:    Dany Madden <drt@linux.ibm.com>
 -M:    Lijun Pan <ljp@linux.ibm.com>
  M:    Sukadev Bhattiprolu <sukadev@linux.ibm.com>
 +R:    Thomas Falcon <tlfalcon@linux.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmvnic.*
@@@ -8690,8 -8546,7 +8690,8 @@@ S:      Supporte
  F:    drivers/scsi/ibmvscsi/ibmvfc*
  
  IBM Power Virtual Management Channel Driver
 -M:    Steven Royer <seroyer@linux.ibm.com>
 +M:    Brad Warrum <bwarrum@linux.ibm.com>
 +M:    Ritu Agarwal <rituagar@linux.ibm.com>
  S:    Supported
  F:    drivers/misc/ibmvmc.*
  
@@@ -8749,8 -8604,9 +8749,8 @@@ F:      drivers/ide
  F:    include/linux/ide.h
  
  IDE/ATAPI DRIVERS
 -M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/cdrom/ide-cd.rst
  F:    drivers/ide/ide-cd*
  
@@@ -8818,7 -8674,7 +8818,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-dac-dpot-dac
 -F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.txt
 +F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.yaml
  F:    drivers/iio/dac/dpot-dac.c
  
  IIO ENVELOPE DETECTOR
@@@ -8826,7 -8682,7 +8826,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-adc-envelope-detector
 -F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.txt
 +F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.yaml
  F:    drivers/iio/adc/envelope-detector.c
  
  IIO MULTIPLEXER
@@@ -8836,15 -8692,10 +8836,15 @@@ S:   Maintaine
  F:    Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
  F:    drivers/iio/multiplexer/iio-mux.c
  
 +IIO SCMI BASED DRIVER
 +M:    Jyoti Bhayana <jbhayana@google.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/iio/common/scmi_sensors/scmi_iio.c
 +
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@kernel.org>
  R:    Lars-Peter Clausen <lars@metafoo.de>
 -R:    Peter Meerwald-Stadler <pmeerw@pmeerw.net>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
@@@ -8860,9 -8711,9 +8860,9 @@@ IIO UNIT CONVERTE
  M:    Peter Rosin <peda@axentia.se>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.txt
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.txt
 -F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.txt
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.yaml
  F:    drivers/iio/afe/iio-rescale.c
  
  IKANOS/ADI EAGLE ADSL USB DRIVER
@@@ -9264,26 -9115,6 +9264,26 @@@ F:    include/linux/mei_cl_bus.
  F:    include/uapi/linux/mei.h
  F:    samples/mei/*
  
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
  INTEL MENLOW THERMAL DRIVER
  M:    Sujith Thomas <sujith.thomas@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -9303,7 -9134,6 +9303,7 @@@ M:      Rajneesh Bhardwaj <irenic.rajneesh@g
  M:    David E Box <david.e.box@intel.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-platform-intel-pmc
  F:    drivers/platform/x86/intel_pmc_core*
  
  INTEL PMIC GPIO DRIVERS
@@@ -9414,7 -9244,7 +9414,7 @@@ W:      https://slimbootloader.github.io/sec
  F:    drivers/platform/x86/intel-wmi-sbl-fw-update.c
  
  INTEL WMI THUNDERBOLT FORCE POWER DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/intel-wmi-thunderbolt.c
  
@@@ -9444,7 -9274,6 +9444,7 @@@ Q:      https://patchwork.kernel.org/project
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
  F:    Documentation/x86/sgx.rst
  F:    arch/x86/entry/vdso/vsgx.S
 +F:    arch/x86/include/asm/sgx.h
  F:    arch/x86/include/uapi/asm/sgx.h
  F:    arch/x86/kernel/cpu/sgx/*
  F:    tools/testing/selftests/sgx/*
@@@ -9454,7 -9283,6 +9454,7 @@@ INTERCONNECT AP
  M:    Georgi Djakov <djakov@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc.git
  F:    Documentation/devicetree/bindings/interconnect/
  F:    Documentation/driver-api/interconnect.rst
  F:    drivers/interconnect/
@@@ -9462,13 -9290,6 +9462,13 @@@ F:    include/dt-bindings/interconnect
  F:    include/linux/interconnect-provider.h
  F:    include/linux/interconnect.h
  
 +INTERRUPT COUNTER DRIVER
 +M:    Oleksij Rempel <o.rempel@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-iio@vger.kernel.org
 +F:    Documentation/devicetree/bindings/counter/interrupt-counter.yaml
 +F:    drivers/counter/interrupt-cnt.c
 +
  INVENSENSE ICM-426xx IMU DRIVER
  M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
  L:    linux-iio@vger.kernel.org
@@@ -9481,7 -9302,7 +9481,7 @@@ INVENSENSE MPU-3050 GYROSCOPE DRIVE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.txt
 +F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.yaml
  F:    drivers/iio/gyro/mpu3050*
  
  IOC3 ETHERNET DRIVER
@@@ -9870,7 -9691,6 +9870,7 @@@ F:      scripts/*vmlinux
  F:    scripts/Kbuild*
  F:    scripts/Makefile*
  F:    scripts/basic/
 +F:    scripts/dummy-tools/
  F:    scripts/mk*
  F:    scripts/mod/
  F:    scripts/package/
@@@ -9897,11 -9717,6 +9897,11 @@@ F:    include/uapi/linux/sunrpc
  F:    net/sunrpc/
  F:    Documentation/filesystems/nfs/
  
 +KERNEL REGRESSIONS
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    regressions@lists.linux.dev
 +S:    Supported
 +
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuah@kernel.org>
  M:    Shuah Khan <skhan@linuxfoundation.org>
@@@ -10064,14 -9879,6 +10064,14 @@@ F:  include/keys/trusted-type.
  F:    include/keys/trusted_tpm.h
  F:    security/keys/trusted-keys/
  
 +KEYS-TRUSTED-TEE
 +M:    Sumit Garg <sumit.garg@linaro.org>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    include/keys/trusted_tee.h
 +F:    security/keys/trusted-keys/trusted_tee.c
 +
  KEYS/KEYRINGS
  M:    David Howells <dhowells@redhat.com>
  M:    Jarkko Sakkinen <jarkko@kernel.org>
@@@ -10223,6 -10030,7 +10223,6 @@@ F:   scripts/leaking_addresses.p
  
  LED SUBSYSTEM
  M:    Pavel Machek <pavel@ucw.cz>
 -R:    Dan Murphy <dmurphy@ti.com>
  L:    linux-leds@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
@@@ -10239,7 -10047,7 +10239,7 @@@ F:   drivers/misc/eeprom/eeprom.
  LEGO MINDSTORMS EV3
  R:    David Lechner <david@lechnology.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/power/supply/lego_ev3_battery.txt
 +F:    Documentation/devicetree/bindings/power/supply/lego,ev3-battery.yaml
  F:    arch/arm/boot/dts/da850-lego-ev3.dts
  F:    drivers/power/supply/lego_ev3_battery.c
  
@@@ -10652,12 -10460,6 +10652,12 @@@ S: Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
  F:    drivers/hid/hid-lg-g15.c
  
 +LONTIUM LT8912B MIPI TO HDMI BRIDGE
 +M:    Adrien Grassein <adrien.grassein@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/display/bridge/lontium,lt8912b.yaml
 +F:    drivers/gpu/drm/bridge/lontium-lt8912b.c
 +
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
  M:    Sathya Prakash <sathya.prakash@broadcom.com>
  M:    Sreekanth Reddy <sreekanth.reddy@broadcom.com>
@@@ -10804,7 -10606,6 +10804,7 @@@ S:   Maintaine
  F:    drivers/mailbox/
  F:    include/linux/mailbox_client.h
  F:    include/linux/mailbox_controller.h
 +F:    Documentation/devicetree/bindings/mailbox/
  
  MAILBOX ARM MHUv2
  M:    Viresh Kumar <viresh.kumar@linaro.org>
@@@ -10890,7 -10691,6 +10890,7 @@@ F:   include/linux/mv643xx.
  
  MARVELL MV88X3310 PHY DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 +M:    Marek Behun <marek.behun@nic.cz>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/phy/marvell10g.c
@@@ -10916,8 -10716,7 +10916,8 @@@ F:   drivers/net/ethernet/marvell/mvpp2
  
  MARVELL MWIFIEX WIRELESS DRIVER
  M:    Amitkumar Karwar <amitkarwar@gmail.com>
 -M:    Ganapathi Bhat <ganapathi.bhat@nxp.com>
 +M:    Ganapathi Bhat <ganapathi017@gmail.com>
 +M:    Sharvari Harisangam <sharvari.harisangam@nxp.com>
  M:    Xinming Hu <huxinming820@gmail.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
@@@ -10990,13 -10789,6 +10990,13 @@@ S: Orpha
  F:    drivers/video/fbdev/matrox/matroxfb_*
  F:    include/uapi/linux/matroxfb.h
  
 +MAX15301 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/max15301.rst
 +F:    drivers/hwmon/pmbus/max15301.c
 +
  MAX16065 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -11076,7 -10868,7 +11076,7 @@@ F:   drivers/regulator/max77802-regulator
  F:    include/dt-bindings/*/*max77802.h
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
@@@ -11085,7 -10877,7 +11085,7 @@@ F:   drivers/power/supply/max77693_charge
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
@@@ -11113,7 -10905,8 +11113,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/radio/radio-maxiradio*
  
  MCAN MMIO DEVICE DRIVER
 -M:    Dan Murphy <dmurphy@ti.com>
 -M:    Pankaj Sharma <pankj.sharma@samsung.com>
 +M:    Chandrasekar Ramakrishnan <rcsekar@samsung.com>
  L:    linux-can@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
@@@ -11311,12 -11104,12 +11311,12 @@@ F:        drivers/media/platform/renesas-ceu.
  F:    include/media/drv-intf/renesas-ceu.h
  
  MEDIA DRIVERS FOR RENESAS - DRIF
 -M:    Ramesh Shanmugasundaram <rashanmu@gmail.com>
 +M:    Fabrizio Castro <fabrizio.castro.jz@renesas.com>
  L:    linux-media@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/renesas,drif.txt
 +F:    Documentation/devicetree/bindings/media/renesas,drif.yaml
  F:    drivers/media/platform/rcar_drif.c
  
  MEDIA DRIVERS FOR RENESAS - FCP
@@@ -11373,7 -11166,7 +11373,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/dvb-frontends/stv6111*
  
  MEDIA DRIVERS FOR STM32 - DCMI
 -M:    Hugues Fruchet <hugues.fruchet@st.com>
 +M:    Hugues Fruchet <hugues.fruchet@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
@@@ -11485,7 -11278,7 +11485,7 @@@ F:   drivers/media/platform/mtk-vpu
  MEDIATEK MMC/SD/SDIO DRIVER
  M:    Chaotian Jing <chaotian.jing@mediatek.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/mmc/mtk-sd.txt
 +F:    Documentation/devicetree/bindings/mmc/mtk-sd.yaml
  F:    drivers/mmc/host/mtk-sd.c
  
  MEDIATEK MT76 WIRELESS LAN DRIVER
@@@ -11502,12 -11295,6 +11502,12 @@@ L: linux-wireless@vger.kernel.or
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt7601u/
  
 +MEDIATEK MT7621 CLOCK DRIVER
 +M:    Sergio Paracuellos <sergio.paracuellos@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/clock/mediatek,mt7621-sysc.yaml
 +F:    drivers/clk/ralink/clk-mt7621.c
 +
  MEDIATEK MT7621/28/88 I2C DRIVER
  M:    Stefan Roese <sr@denx.de>
  L:    linux-i2c@vger.kernel.org
@@@ -11650,8 -11437,8 +11650,8 @@@ Q:   https://patchwork.kernel.org/project
  F:    drivers/net/ethernet/mellanox/mlxfw/
  
  MELLANOX HARDWARE PLATFORM SUPPORT
 -M:    Andy Shevchenko <andy@infradead.org>
 -M:    Darren Hart <dvhart@infradead.org>
 +M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Mark Gross <mgross@linux.intel.com>
  M:    Vadim Pasternak <vadimp@nvidia.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Supported
@@@ -11742,7 -11529,7 +11742,7 @@@ F:   include/linux/memblock.
  F:    mm/memblock.c
  
  MEMORY CONTROLLER DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
@@@ -12010,7 -11797,7 +12010,7 @@@ MICROCHIP SAMA5D2-COMPATIBLE ADC DRIVE
  M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/at91-sama5d2_adc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/atmel,sama5d2-adc.yaml
  F:    drivers/iio/adc/at91-sama5d2_adc.c
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
@@@ -12074,22 -11861,6 +12074,22 @@@ F: drivers/scsi/smartpqi/smartpqi*.[ch
  F:    include/linux/cciss*.h
  F:    include/uapi/linux/cciss*.h
  
 +MICROSOFT SURFACE BATTERY AND AC DRIVERS
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-pm@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/power/supply/surface_battery.c
 +F:    drivers/power/supply/surface_charger.c
 +
 +MICROSOFT SURFACE DTX DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/driver-api/surface_aggregator/clients/dtx.rst
 +F:    drivers/platform/surface/surface_dtx.c
 +F:    include/uapi/linux/surface_aggregator/dtx.h
 +
  MICROSOFT SURFACE GPE LID SUPPORT DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12105,25 -11876,12 +12105,25 @@@ S:        Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
  F:    drivers/platform/surface/
  
 +MICROSOFT SURFACE HID TRANSPORT DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-input@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/surface-hid/
 +
  MICROSOFT SURFACE HOT-PLUG DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/surface/surface_hotplug.c
  
 +MICROSOFT SURFACE PLATFORM PROFILE DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/surface/surface_platform_profile.c
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12139,7 -11897,6 +12139,7 @@@ F:   Documentation/driver-api/surface_agg
  F:    drivers/platform/surface/aggregator/
  F:    drivers/platform/surface/surface_acpi_notify.c
  F:    drivers/platform/surface/surface_aggregator_cdev.c
 +F:    drivers/platform/surface/surface_aggregator_registry.c
  F:    include/linux/surface_acpi_notify.h
  F:    include/linux/surface_aggregator/
  F:    include/uapi/linux/surface_aggregator/
@@@ -12331,7 -12088,8 +12331,7 @@@ F:   drivers/media/pci/meye
  F:    include/uapi/linux/meye.h
  
  MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
 -M:    Jiri Slaby <jirislaby@kernel.org>
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/driver-api/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
  
@@@ -12475,6 -12233,11 +12475,6 @@@ F:  drivers/mux
  F:    include/dt-bindings/mux/
  F:    include/linux/mux/
  
 -MULTITECH MULTIPORT CARD (ISICOM)
 -S:    Orphan
 -F:    drivers/tty/isicom.c
 -F:    include/linux/isicom.h
 -
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
  M:    Bin Liu <b-liu@ti.com>
  L:    linux-usb@vger.kernel.org
@@@ -12503,7 -12266,7 +12503,7 @@@ M:   Stefan Agner <stefan@agner.ch
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/mxsfb.txt
 +F:    Documentation/devicetree/bindings/display/fsl,lcdif.yaml
  F:    drivers/gpu/drm/mxsfb/
  
  MYLEX DAC960 PCI RAID Controller
@@@ -12622,15 -12385,6 +12622,15 @@@ F: include/net/netrom.
  F:    include/uapi/linux/netrom.h
  F:    net/netrom/
  
 +NETRONIX EMBEDDED CONTROLLER
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
 +F:    drivers/mfd/ntxec.c
 +F:    drivers/pwm/pwm-ntxec.c
 +F:    drivers/rtc/rtc-ntxec.c
 +F:    include/linux/mfd/ntxec.h
 +
  NETRONOME ETHERNET DRIVERS
  M:    Simon Horman <simon.horman@netronome.com>
  R:    Jakub Kicinski <kuba@kernel.org>
@@@ -12783,13 -12537,12 +12783,13 @@@ 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
 +L:    mptcp@lists.linux.dev
  S:    Maintained
  W:    https://github.com/multipath-tcp/mptcp_net-next/wiki
  B:    https://github.com/multipath-tcp/mptcp_net-next/issues
  F:    Documentation/networking/mptcp-sysctl.rst
  F:    include/net/mptcp.h
 +F:    include/trace/events/mptcp.h
  F:    include/uapi/linux/mptcp.h
  F:    net/mptcp/
  F:    tools/testing/selftests/net/mptcp/
@@@ -13074,12 -12827,6 +13074,12 @@@ F: drivers/nvmem
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
 +NXP C45 TJA11XX PHY DRIVER
 +M:    Radu Pirea <radu-nicolae.pirea@oss.nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/phy/nxp-c45-tja11xx.c
 +
  NXP FSPI DRIVER
  M:    Ashish Kumar <ashish.kumar@nxp.com>
  R:    Yogesh Gaur <yogeshgaur.83@gmail.com>
@@@ -13120,7 -12867,7 +13120,7 @@@ F:   Documentation/devicetree/bindings/re
  F:    drivers/regulator/pf8x00-regulator.c
  
  NXP PTN5150A CC LOGIC AND EXTCON DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
@@@ -13163,21 -12910,6 +13163,21 @@@ L: linux-nfc@lists.01.org (moderated fo
  S:    Supported
  F:    drivers/nfc/nxp-nci
  
 +NXP i.MX 8QXP/8QM JPEG V4L2 DRIVER
 +M:    Mirela Rabulea <mirela.rabulea@nxp.com>
 +R:    NXP Linux Team <linux-imx@nxp.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/imx8-jpeg.yaml
 +F:    drivers/media/platform/imx-jpeg
 +
 +NZXT-KRAKEN2 HARDWARE MONITORING DRIVER
 +M:    Jonas Malaco <jonas@protocubo.io>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/nzxt-kraken2.rst
 +F:    drivers/hwmon/nzxt-kraken2.c
 +
  OBJAGG
  M:    Jiri Pirko <jiri@nvidia.com>
  L:    netdev@vger.kernel.org
@@@ -13452,7 -13184,7 +13452,7 @@@ M:   Rui Miguel Silva <rmfrfs@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov2680.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov2680.yaml
  F:    drivers/media/i2c/ov2680.c
  
  OMNIVISION OV2685 SENSOR DRIVER
@@@ -14371,7 -14103,7 +14371,7 @@@ L:   linux-gpio@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  F:    Documentation/devicetree/bindings/pinctrl/
- F:    Documentation/driver-api/pinctl.rst
+ F:    Documentation/driver-api/pin-control.rst
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
@@@ -14426,7 -14158,7 +14426,7 @@@ F:   drivers/pinctrl/renesas
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  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
@@@ -14547,7 -14279,7 +14547,7 @@@ PNI RM3100 IIO DRIVE
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.txt
 +F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.yaml
  F:    drivers/iio/magnetometer/rm3100*
  
  PNP SUPPORT
@@@ -14582,15 -14314,6 +14582,15 @@@ F: include/linux/pm_
  F:    include/linux/powercap.h
  F:    kernel/configs/nopm.config
  
 +DYNAMIC THERMAL POWER MANAGEMENT (DTPM)
 +M:    Daniel Lezcano <daniel.lezcano@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +S:    Supported
 +B:    https://bugzilla.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 +F:    drivers/powercap/dtpm*
 +F:    include/linux/dtpm.h
 +
  POWER STATE COORDINATION INTERFACE (PSCI)
  M:    Mark Rutland <mark.rutland@arm.com>
  M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
@@@ -14668,7 -14391,7 +14668,7 @@@ F:   kernel/sched/psi.
  
  PRINTK
  M:    Petr Mladek <pmladek@suse.com>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    John Ogness <john.ogness@linutronix.de>
  S:    Maintained
@@@ -14985,11 -14708,15 +14985,11 @@@ F:        drivers/net/ethernet/qlogic/qlcnic
  QLOGIC QLGE 10Gb ETHERNET DRIVER
  M:    Manish Chopra <manishc@marvell.com>
  M:    GR-Linux-NIC-Dev@marvell.com
 -L:    netdev@vger.kernel.org
 -S:    Supported
 -F:    drivers/staging/qlge/
 -
 -QLOGIC QLGE 10Gb ETHERNET DRIVER
  M:    Coiby Xu <coiby.xu@gmail.com>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Supported
  F:    Documentation/networking/device_drivers/qlogic/qlge.rst
 +F:    drivers/staging/qlge/
  
  QM1D1B0004 MEDIA DRIVER
  M:    Akihiro Tsukada <tskd08@gmail.com>
@@@ -15060,7 -14787,7 +15060,7 @@@ M:   Todor Tomov <todor.too@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/media/qcom_camss.rst
 -F:    Documentation/devicetree/bindings/media/qcom,camss.txt
 +F:    Documentation/devicetree/bindings/media/*camss*
  F:    drivers/media/platform/qcom/camss/
  
  QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
@@@ -15129,14 -14856,6 +15129,14 @@@ L: linux-arm-msm@vger.kernel.or
  S:    Maintained
  F:    drivers/iommu/arm/arm-smmu/qcom_iommu.c
  
 +QUALCOMM IPC ROUTER (QRTR) DRIVER
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +L:    linux-arm-msm@vger.kernel.org
 +S:    Maintained
 +F:    include/trace/events/qrtr.h
 +F:    include/uapi/linux/qrtr.h
 +F:    net/qrtr/
 +
  QUALCOMM IPCC MAILBOX DRIVER
  M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-arm-msm@vger.kernel.org
@@@ -15359,7 -15078,7 +15359,7 @@@ M:   Laurent Pinchart <laurent.pinchart+r
  M:    Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/rdacm2x-gmsl.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/imi,rdacm2x-gmsl.yaml
  F:    drivers/media/i2c/max9271.c
  F:    drivers/media/i2c/max9271.h
  F:    drivers/media/i2c/rdacm21.c
@@@ -15486,7 -15205,6 +15486,7 @@@ F:   fs/reiserfs
  REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM
  M:    Ohad Ben-Cohen <ohad@wizery.com>
  M:    Bjorn Andersson <bjorn.andersson@linaro.org>
 +M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  L:    linux-remoteproc@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rproc-next
@@@ -15500,7 -15218,6 +15500,7 @@@ F:   include/linux/remoteproc
  REMOTE PROCESSOR MESSAGING (RPMSG) SUBSYSTEM
  M:    Ohad Ben-Cohen <ohad@wizery.com>
  M:    Bjorn Andersson <bjorn.andersson@linaro.org>
 +M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  L:    linux-remoteproc@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rpmsg-next
@@@ -15538,7 -15255,7 +15538,7 @@@ RENESAS R-CAR GYROADC DRIVE
  M:    Marek Vasut <marek.vasut@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/renesas,gyroadc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/renesas,rcar-gyroadc.yaml
  F:    drivers/iio/adc/rcar-gyroadc.c
  
  RENESAS R-CAR I2C DRIVERS
@@@ -15642,8 -15359,8 +15642,8 @@@ N:   risc
  K:    riscv
  
  RNBD BLOCK DRIVERS
 -M:    Danil Kipnis <danil.kipnis@cloud.ionos.com>
 -M:    Jack Wang <jinpu.wang@cloud.ionos.com>
 +M:    Md. Haris Iqbal <haris.iqbal@ionos.com>
 +M:    Jack Wang <jinpu.wang@ionos.com>
  L:    linux-block@vger.kernel.org
  S:    Maintained
  F:    drivers/block/rnbd/
@@@ -15691,6 -15408,12 +15691,6 @@@ L:  netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/rocker/
  
 -ROCKETPORT DRIVER
 -S:    Maintained
 -W:    http://www.comtrol.com
 -F:    Documentation/driver-api/serial/rocket.rst
 -F:    drivers/tty/rocket*
 -
  ROCKETPORT EXPRESS/INFINITY DRIVER
  M:    Kevin Cernekee <cernekee@gmail.com>
  L:    linux-serial@vger.kernel.org
@@@ -15729,27 -15452,20 +15729,27 @@@ F:        Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt
  F:    drivers/clk/clk-bd718x7.c
  F:    drivers/gpio/gpio-bd70528.c
 +F:    drivers/gpio/gpio-bd71815.c
  F:    drivers/gpio/gpio-bd71828.c
  F:    drivers/mfd/rohm-bd70528.c
  F:    drivers/mfd/rohm-bd71828.c
  F:    drivers/mfd/rohm-bd718x7.c
 +F:    drivers/mfd/rohm-bd9576.c
  F:    drivers/power/supply/bd70528-charger.c
  F:    drivers/regulator/bd70528-regulator.c
 +F:    drivers/regulator/bd71815-regulator.c
  F:    drivers/regulator/bd71828-regulator.c
  F:    drivers/regulator/bd718x7-regulator.c
 +F:    drivers/regulator/bd9576-regulator.c
  F:    drivers/regulator/rohm-regulator.c
  F:    drivers/rtc/rtc-bd70528.c
  F:    drivers/watchdog/bd70528_wdt.c
 +F:    drivers/watchdog/bd9576_wdt.c
  F:    include/linux/mfd/rohm-bd70528.h
 +F:    include/linux/mfd/rohm-bd71815.h
  F:    include/linux/mfd/rohm-bd71828.h
  F:    include/linux/mfd/rohm-bd718x7.h
 +F:    include/linux/mfd/rohm-bd957x.h
  F:    include/linux/mfd/rohm-generic.h
  F:    include/linux/mfd/rohm-shared.h
  
@@@ -15918,8 -15634,8 +15918,8 @@@ F:   Documentation/s390/pci.rs
  
  S390 VFIO AP DRIVER
  M:    Tony Krowiak <akrowiak@linux.ibm.com>
 -M:    Pierre Morel <pmorel@linux.ibm.com>
  M:    Halil Pasic <pasic@linux.ibm.com>
 +M:    Jason Herne <jjherne@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -15931,7 -15647,6 +15931,7 @@@ F:   drivers/s390/crypto/vfio_ap_private.
  S390 VFIO-CCW DRIVER
  M:    Cornelia Huck <cohuck@redhat.com>
  M:    Eric Farman <farman@linux.ibm.com>
 +M:    Matthew Rosato <mjrosato@linux.ibm.com>
  R:    Halil Pasic <pasic@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  L:    kvm@vger.kernel.org
@@@ -15942,7 -15657,6 +15942,7 @@@ F:   include/uapi/linux/vfio_ccw.
  
  S390 VFIO-PCI DRIVER
  M:    Matthew Rosato <mjrosato@linux.ibm.com>
 +M:    Eric Farman <farman@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  L:    kvm@vger.kernel.org
  S:    Supported
@@@ -15964,13 -15678,6 +15964,13 @@@ S: Supporte
  W:    http://www.ibm.com/developerworks/linux/linux390/
  F:    drivers/s390/scsi/zfcp_*
  
 +S3C ADC BATTERY DRIVER
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Odd Fixes
 +F:    drivers/power/supply/s3c_adc_battery.c
 +F:    include/linux/s3c_adc_battery.h
 +
  S3C24XX SD/MMC Driver
  M:    Ben Dooks <ben-linux@fluff.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -16010,7 -15717,7 +16010,7 @@@ F:   Documentation/admin-guide/LSM/SafeSe
  F:    security/safesetid/
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
@@@ -16018,7 -15725,7 +16018,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/samsung/
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -16053,7 -15760,7 +16053,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16078,7 -15785,7 +16078,7 @@@ F:   drivers/media/platform/s3c-camif
  F:    include/media/drv-intf/s3c_camif.h
  
  SAMSUNG S3FWRN5 NFC DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Krzysztof Opasiak <k.opasiak@samsung.com>
  L:    linux-nfc@lists.01.org (moderated for non-subscribers)
  S:    Maintained
@@@ -16098,7 -15805,7 +16098,7 @@@ S:   Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16130,7 -15837,7 +16130,7 @@@ F:   include/linux/clk/samsung.
  F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16893,13 -16600,6 +16893,13 @@@ F: drivers/firmware/arm_sdei.
  F:    include/linux/arm_sdei.h
  F:    include/uapi/linux/arm_sdei.h
  
 +SOFTWARE NODES
 +R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +R:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
 +L:    linux-acpi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/base/swnode.c
 +
  SOFTWARE RAID (Multiple Disks) SUPPORT
  M:    Song Liu <song@kernel.org>
  L:    linux-raid@vger.kernel.org
@@@ -17162,8 -16862,6 +17162,8 @@@ F:   arch/arm/mach-spear
  
  SPI NOR SUBSYSTEM
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +R:    Michael Walle <michael@walle.cc>
 +R:    Pratyush Yadav <p.yadav@ti.com>
  L:    linux-mtd@lists.infradead.org
  S:    Maintained
  W:    http://www.linux-mtd.infradead.org/
@@@ -17188,10 -16886,8 +17188,10 @@@ F: tools/spi
  
  SPIDERNET NETWORK DRIVER for CELL
  M:    Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
 +M:    Geoff Levand <geoff@infradead.org>
  L:    netdev@vger.kernel.org
 -S:    Supported
 +L:    linuxppc-dev@lists.ozlabs.org
 +S:    Maintained
  F:    Documentation/networking/device_drivers/ethernet/toshiba/spider_net.rst
  F:    drivers/net/ethernet/toshiba/spider_net*
  
@@@ -17233,7 -16929,7 +17233,7 @@@ M:   Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/imu/st_lsm6dsx.txt
 +F:    Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml
  F:    drivers/iio/imu/st_lsm6dsx/
  
  ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
@@@ -17245,24 -16941,16 +17245,24 @@@ F:        Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/st-mipid02.c
  
  ST STM32 I2C/SMBUS DRIVER
 -M:    Pierre-Yves MORDRET <pierre-yves.mordret@st.com>
 +M:    Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
 +M:    Alain Volmat <alain.volmat@foss.st.com>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
  F:    drivers/i2c/busses/i2c-stm32*
  
 +ST STPDDC60 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/stpddc60.rst
 +F:    drivers/hwmon/pmbus/stpddc60.c
 +
  ST VL53L0X ToF RANGER(I2C) IIO DRIVER
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt
 +F:    Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
  F:    drivers/iio/proximity/vl53l0x-i2c.c
  
  STABLE BRANCH
@@@ -17279,6 -16967,12 +17279,6 @@@ L:  linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/media/atomisp/
  
 -STAGING - COMEDI
 -M:    Ian Abbott <abbotti@mev.co.uk>
 -M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 -S:    Odd Fixes
 -F:    drivers/staging/comedi/
 -
  STAGING - FIELDBUS SUBSYSTEM
  M:    Sven Van Asbroeck <TheSven73@gmail.com>
  S:    Maintained
@@@ -17345,7 -17039,7 +17345,7 @@@ F:   drivers/staging/vt665?
  
  STAGING SUBSYSTEM
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-staging@lists.linux.dev
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  F:    drivers/staging/
@@@ -17372,7 -17066,7 +17372,7 @@@ F:   kernel/jump_label.
  F:    kernel/static_call.c
  
  STI AUDIO (ASoC) DRIVERS
 -M:    Arnaud Pouliquen <arnaud.pouliquen@st.com>
 +M:    Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt
@@@ -17392,15 -17086,15 +17392,15 @@@ T:        git git://linuxtv.org/media_tree.gi
  F:    drivers/media/usb/stk1160/
  
  STM32 AUDIO (ASoC) DRIVERS
 -M:    Olivier Moysan <olivier.moysan@st.com>
 -M:    Arnaud Pouliquen <arnaud.pouliquen@st.com>
 +M:    Olivier Moysan <olivier.moysan@foss.st.com>
 +M:    Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml
  F:    sound/soc/stm/
  
  STM32 TIMER/LPTIMER DRIVERS
 -M:    Fabrice Gasnier <fabrice.gasnier@st.com>
 +M:    Fabrice Gasnier <fabrice.gasnier@foss.st.com>
  S:    Maintained
  F:    Documentation/ABI/testing/*timer-stm32
  F:    Documentation/devicetree/bindings/*/*stm32-*timer*
@@@ -17410,7 -17104,7 +17410,7 @@@ F:   include/linux/*/stm32-*tim
  
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
 -M:    Alexandre Torgue <alexandre.torgue@st.com>
 +M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  M:    Jose Abreu <joabreu@synopsys.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -17576,7 -17270,7 +17576,7 @@@ F:   drivers/spi/spi-dw
  SYNOPSYS DESIGNWARE AXI DMAC DRIVER
  M:    Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.txt
 +F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.yaml
  F:    drivers/dma/dw-axi-dmac/
  
  SYNOPSYS DESIGNWARE DMAC DRIVER
@@@ -17992,7 -17686,7 +17992,7 @@@ TEXAS INSTRUMENTS' DAC7612 DAC DRIVE
  M:    Ricardo Ribalda <ribalda@kernel.org>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt
 +F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.yaml
  F:    drivers/iio/dac/ti-dac7612.c
  
  TEXAS INSTRUMENTS DMA DRIVERS
@@@ -18134,13 -17828,6 +18134,13 @@@ M: Robert Richter <rric@kernel.org
  S:    Odd Fixes
  F:    drivers/gpio/gpio-thunderx.c
  
 +TI ADS131E0X ADC SERIES DRIVER
 +M:    Tomislav Denis <tomislav.denis@avl.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/adc/ti,ads131e08.yaml
 +F:    drivers/iio/adc/ti-ads131e08.c
 +
  TI AM437X VPFE DRIVER
  M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -18159,6 -17846,7 +18159,6 @@@ S:   Maintaine
  F:    drivers/thermal/ti-soc-thermal/
  
  TI BQ27XXX POWER SUPPLY DRIVER
 -R:    Dan Murphy <dmurphy@ti.com>
  F:    drivers/power/supply/bq27xxx_battery.c
  F:    drivers/power/supply/bq27xxx_battery_i2c.c
  F:    include/linux/power/bq27xxx_battery.h
@@@ -18249,6 -17937,29 +18249,6 @@@ S:  Maintaine
  F:    sound/soc/codecs/isabelle*
  F:    sound/soc/codecs/lm49453*
  
 -TI LP855x BACKLIGHT DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    Documentation/driver-api/backlight/lp855x-driver.rst
 -F:    drivers/video/backlight/lp855x_bl.c
 -F:    include/linux/platform_data/lp855x.h
 -
 -TI LP8727 CHARGER DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/power/supply/lp8727_charger.c
 -F:    include/linux/platform_data/lp8727.h
 -
 -TI LP8788 MFD DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/iio/adc/lp8788_adc.c
 -F:    drivers/leds/leds-lp8788.c
 -F:    drivers/mfd/lp8788*.c
 -F:    drivers/power/supply/lp8788-charger.c
 -F:    drivers/regulator/lp8788-*.c
 -F:    include/linux/mfd/lp8788*.h
 -
  TI NETCP ETHERNET DRIVER
  M:    Wingman Kwok <w-kwok2@ti.com>
  M:    Murali Karicheri <m-karicheri2@ti.com>
@@@ -18269,6 -17980,13 +18269,6 @@@ L:  alsa-devel@alsa-project.org (moderat
  S:    Odd Fixes
  F:    sound/soc/codecs/tas571x*
  
 -TI TCAN4X5X DEVICE DRIVER
 -M:    Dan Murphy <dmurphy@ti.com>
 -L:    linux-can@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/net/can/tcan4x5x.txt
 -F:    drivers/net/can/m_can/tcan4x5x*
 -
  TI TRF7970A NFC DRIVER
  M:    Mark Greer <mgreer@animalcreek.com>
  L:    linux-wireless@vger.kernel.org
@@@ -19368,15 -19086,6 +19368,15 @@@ W: https://virtio-mem.gitlab.io
  F:    drivers/virtio/virtio_mem.c
  F:    include/uapi/linux/virtio_mem.h
  
 +VIRTIO SOUND DRIVER
 +M:    Anton Yakovlev <anton.yakovlev@opensynergy.com>
 +M:    "Michael S. Tsirkin" <mst@redhat.com>
 +L:    virtualization@lists.linux-foundation.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    include/uapi/linux/virtio_snd.h
 +F:    sound/virtio/*
 +
  VIRTUAL BOX GUEST DEVICE DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  M:    Arnd Bergmann <arnd@arndb.de>
@@@ -19425,7 -19134,7 +19425,7 @@@ VME SUBSYSTE
  M:    Martyn Welch <martyn@welchs.me.uk>
  M:    Manohar Vanga <manohar.vanga@gmail.com>
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
  F:    Documentation/driver-api/vme.rst
@@@ -19456,7 -19165,7 +19456,7 @@@ S:   Maintaine
  F:    drivers/infiniband/hw/vmw_pvrdma/
  
  VMware PVSCSI driver
 -M:    Jim Gill <jgill@vmware.com>
 +M:    Vishal Bhakta <vbhakta@vmware.com>
  M:    VMware PV-Drivers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
@@@ -19515,7 -19224,7 +19515,7 @@@ F:   drivers/net/vrf.
  VSPRINTF
  M:    Petr Mladek <pmladek@suse.com>
  M:    Steven Rostedt <rostedt@goodmis.org>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  R:    Rasmus Villemoes <linux@rasmusvillemoes.dk>
  S:    Maintained
@@@ -19669,6 -19378,7 +19669,6 @@@ F:   Documentation/devicetree/bindings/so
  F:    Documentation/hwmon/wm83??.rst
  F:    arch/arm/mach-s3c/mach-crag6410*
  F:    drivers/clk/clk-wm83*.c
 -F:    drivers/extcon/extcon-arizona.c
  F:    drivers/gpio/gpio-*wm*.c
  F:    drivers/gpio/gpio-arizona.c
  F:    drivers/hwmon/wm83??-hwmon.c
@@@ -19692,7 -19402,7 +19692,7 @@@ F:   include/linux/mfd/wm8400
  F:    include/linux/regulator/arizona*
  F:    include/linux/wm97xx.h
  F:    include/sound/wm????.h
 -F:    sound/soc/codecs/arizona.?
 +F:    sound/soc/codecs/arizona*
  F:    sound/soc/codecs/cs47l24*
  F:    sound/soc/codecs/wm*
  
@@@ -20165,7 -19875,7 +20165,7 @@@ F:   drivers/staging/media/zoran
  ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/blockdev/zram.rst
@@@ -20179,7 -19889,7 +20179,7 @@@ F:   drivers/tty/serial/zs.
  ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    Documentation/vm/zsmalloc.rst
@@@ -8,6 -8,16 +8,6 @@@ config ARCH_ACTION
        help
          This enables support for the Actions Semiconductor S900 SoC family.
  
 -config ARCH_AGILEX
 -      bool "Intel's Agilex SoCFPGA Family"
 -      help
 -        This enables support for Intel's Agilex SoCFPGA Family.
 -
 -config ARCH_N5X
 -      bool "Intel's eASIC N5X SoCFPGA Family"
 -      help
 -        This enables support for Intel's eASIC N5X SoCFPGA Family.
 -
  config ARCH_SUNXI
        bool "Allwinner sunxi 64-bit SoC Family"
        select ARCH_HAS_RESET_CONTROLLER
@@@ -26,13 -36,6 +26,13 @@@ config ARCH_ALPIN
          This enables support for the Annapurna Labs Alpine
          Soc family.
  
 +config ARCH_APPLE
 +      bool "Apple Silicon SoC family"
 +      select APPLE_AIC
 +      help
 +        This enables support for Apple's in-house ARM SoC family, starting
 +        with the Apple M1.
 +
  config ARCH_BCM2835
        bool "Broadcom BCM2835 family"
        select TIMER_OF
@@@ -232,9 -235,7 +232,7 @@@ config ARCH_RENESA
  config ARCH_ROCKCHIP
        bool "Rockchip Platforms"
        select ARCH_HAS_RESET_CONTROLLER
-       select GPIOLIB
        select PINCTRL
-       select PINCTRL_ROCKCHIP
        select PM
        select ROCKCHIP_TIMER
        help
@@@ -251,11 -252,10 +249,11 @@@ config ARCH_SEATTL
        help
          This enables support for AMD Seattle SOC Family
  
 -config ARCH_STRATIX10
 -      bool "Altera's Stratix 10 SoCFPGA Family"
 +config ARCH_INTEL_SOCFPGA
 +      bool "Intel's SoCFPGA ARMv8 Families"
        help
 -        This enables support for Altera's Stratix 10 SoCFPGA Family.
 +        This enables support for Intel's SoCFPGA ARMv8 families:
 +        Stratix 10 (ex. Altera), Agilex and eASIC N5X.
  
  config ARCH_SYNQUACER
        bool "Socionext SynQuacer SoC Family"
@@@ -2,7 -2,7 +2,7 @@@
  /*
   * Xilinx Zynq MPSoC Firmware layer
   *
 - *  Copyright (C) 2014-2020 Xilinx, Inc.
 + *  Copyright (C) 2014-2021 Xilinx, Inc.
   *
   *  Michal Simek <michal.simek@xilinx.com>
   *  Davorin Mista <davorin.mista@aggios.com>
@@@ -812,6 -812,120 +812,120 @@@ int zynqmp_pm_fpga_get_status(u32 *valu
  EXPORT_SYMBOL_GPL(zynqmp_pm_fpga_get_status);
  
  /**
+  * zynqmp_pm_pinctrl_request - Request Pin from firmware
+  * @pin: Pin number to request
+  *
+  * This function requests pin from firmware.
+  *
+  * Return: Returns status, either success or error+reason.
+  */
+ int zynqmp_pm_pinctrl_request(const u32 pin)
+ {
+       return zynqmp_pm_invoke_fn(PM_PINCTRL_REQUEST, pin, 0, 0, 0, NULL);
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_request);
+ /**
+  * zynqmp_pm_pinctrl_release - Inform firmware that Pin control is released
+  * @pin: Pin number to release
+  *
+  * This function release pin from firmware.
+  *
+  * Return: Returns status, either success or error+reason.
+  */
+ int zynqmp_pm_pinctrl_release(const u32 pin)
+ {
+       return zynqmp_pm_invoke_fn(PM_PINCTRL_RELEASE, pin, 0, 0, 0, NULL);
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_release);
+ /**
+  * zynqmp_pm_pinctrl_get_function - Read function id set for the given pin
+  * @pin: Pin number
+  * @id: Buffer to store function ID
+  *
+  * This function provides the function currently set for the given pin.
+  *
+  * Return: Returns status, either success or error+reason
+  */
+ int zynqmp_pm_pinctrl_get_function(const u32 pin, u32 *id)
+ {
+       u32 ret_payload[PAYLOAD_ARG_CNT];
+       int ret;
+       if (!id)
+               return -EINVAL;
+       ret = zynqmp_pm_invoke_fn(PM_PINCTRL_GET_FUNCTION, pin, 0,
+                                 0, 0, ret_payload);
+       *id = ret_payload[1];
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_get_function);
+ /**
+  * zynqmp_pm_pinctrl_set_function - Set requested function for the pin
+  * @pin: Pin number
+  * @id: Function ID to set
+  *
+  * This function sets requested function for the given pin.
+  *
+  * Return: Returns status, either success or error+reason.
+  */
+ int zynqmp_pm_pinctrl_set_function(const u32 pin, const u32 id)
+ {
+       return zynqmp_pm_invoke_fn(PM_PINCTRL_SET_FUNCTION, pin, id,
+                                  0, 0, NULL);
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_set_function);
+ /**
+  * zynqmp_pm_pinctrl_get_config - Get configuration parameter for the pin
+  * @pin: Pin number
+  * @param: Parameter to get
+  * @value: Buffer to store parameter value
+  *
+  * This function gets requested configuration parameter for the given pin.
+  *
+  * Return: Returns status, either success or error+reason.
+  */
+ int zynqmp_pm_pinctrl_get_config(const u32 pin, const u32 param,
+                                u32 *value)
+ {
+       u32 ret_payload[PAYLOAD_ARG_CNT];
+       int ret;
+       if (!value)
+               return -EINVAL;
+       ret = zynqmp_pm_invoke_fn(PM_PINCTRL_CONFIG_PARAM_GET, pin, param,
+                                 0, 0, ret_payload);
+       *value = ret_payload[1];
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_get_config);
+ /**
+  * zynqmp_pm_pinctrl_set_config - Set configuration parameter for the pin
+  * @pin: Pin number
+  * @param: Parameter to set
+  * @value: Parameter value to set
+  *
+  * This function sets requested configuration parameter for the given pin.
+  *
+  * Return: Returns status, either success or error+reason.
+  */
+ int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
+                                u32 value)
+ {
+       return zynqmp_pm_invoke_fn(PM_PINCTRL_CONFIG_PARAM_SET, pin,
+                                  param, value, 0, NULL);
+ }
+ EXPORT_SYMBOL_GPL(zynqmp_pm_pinctrl_set_config);
+ /**
   * zynqmp_pm_init_finalize() - PM call to inform firmware that the caller
   *                           master has initialized its own power management
   *
@@@ -1280,13 -1394,12 +1394,13 @@@ static int zynqmp_firmware_probe(struc
  static int zynqmp_firmware_remove(struct platform_device *pdev)
  {
        struct pm_api_feature_data *feature_data;
 +      struct hlist_node *tmp;
        int i;
  
        mfd_remove_devices(&pdev->dev);
        zynqmp_pm_api_debugfs_exit();
  
 -      hash_for_each(pm_api_features_map, i, feature_data, hentry) {
 +      hash_for_each_safe(pm_api_features_map, i, tmp, feature_data, hentry) {
                hash_del(&feature_data->hentry);
                kfree(feature_data);
        }
diff --combined drivers/pinctrl/core.c
@@@ -160,7 -160,7 +160,7 @@@ int pin_get_from_name(struct pinctrl_de
  }
  
  /**
-  * pin_get_name_from_id() - look up a pin name from a pin id
+  * pin_get_name() - look up a pin name from a pin id
   * @pctldev: the pin control device to lookup the pin on
   * @pin: pin number/id to look up
   */
@@@ -1258,7 -1258,7 +1258,7 @@@ static int pinctrl_commit_state(struct 
  
        p->state = NULL;
  
-       /* Apply all the settings for the new state */
+       /* Apply all the settings for the new state - pinmux first */
        list_for_each_entry(setting, &state->settings, node) {
                switch (setting->type) {
                case PIN_MAP_TYPE_MUX_GROUP:
                        break;
                case PIN_MAP_TYPE_CONFIGS_PIN:
                case PIN_MAP_TYPE_CONFIGS_GROUP:
+                       ret = 0;
+                       break;
+               default:
+                       ret = -EINVAL;
+                       break;
+               }
+               if (ret < 0)
+                       goto unapply_new_state;
+               /* Do not link hogs (circular dependency) */
+               if (p != setting->pctldev->p)
+                       pinctrl_link_add(setting->pctldev, p->dev);
+       }
+       /* Apply all the settings for the new state - pinconf after */
+       list_for_each_entry(setting, &state->settings, node) {
+               switch (setting->type) {
+               case PIN_MAP_TYPE_MUX_GROUP:
+                       ret = 0;
+                       break;
+               case PIN_MAP_TYPE_CONFIGS_PIN:
+               case PIN_MAP_TYPE_CONFIGS_GROUP:
                        ret = pinconf_apply_setting(setting);
                        break;
                default:
@@@ -1604,8 -1627,8 +1627,8 @@@ static int pinctrl_pins_show(struct seq
        unsigned i, pin;
  #ifdef CONFIG_GPIOLIB
        struct pinctrl_gpio_range *range;
 -      unsigned int gpio_num;
        struct gpio_chip *chip;
 +      int gpio_num;
  #endif
  
        seq_printf(s, "registered pins: %d\n", pctldev->desc->npins);
                seq_printf(s, "pin %d (%s) ", pin, desc->name);
  
  #ifdef CONFIG_GPIOLIB
 -              gpio_num = 0;
 +              gpio_num = -1;
                list_for_each_entry(range, &pctldev->gpio_ranges, node) {
                        if ((pin >= range->pin_base) &&
                            (pin < (range->pin_base + range->npins))) {
                                break;
                        }
                }
 -              chip = gpio_to_chip(gpio_num);
 -              if (chip && chip->gpiodev && chip->gpiodev->base)
 -                      seq_printf(s, "%u:%s ", gpio_num -
 -                              chip->gpiodev->base, chip->label);
 +              if (gpio_num >= 0)
 +                      chip = gpio_to_chip(gpio_num);
 +              else
 +                      chip = NULL;
 +              if (chip)
 +                      seq_printf(s, "%u:%s ", gpio_num - chip->gpiodev->base, chip->label);
                else
                        seq_puts(s, "0:? ");
  #endif
@@@ -1892,11 -1913,11 +1915,11 @@@ static void pinctrl_init_device_debugfs
                        dev_name(pctldev->dev));
                return;
        }
-       debugfs_create_file("pins", S_IFREG | S_IRUGO,
+       debugfs_create_file("pins", 0444,
                            device_root, pctldev, &pinctrl_pins_fops);
-       debugfs_create_file("pingroups", S_IFREG | S_IRUGO,
+       debugfs_create_file("pingroups", 0444,
                            device_root, pctldev, &pinctrl_groups_fops);
-       debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
+       debugfs_create_file("gpio-ranges", 0444,
                            device_root, pctldev, &pinctrl_gpioranges_fops);
        if (pctldev->desc->pmxops)
                pinmux_init_device_debugfs(device_root, pctldev);
@@@ -1918,11 -1939,11 +1941,11 @@@ static void pinctrl_init_debugfs(void
                return;
        }
  
-       debugfs_create_file("pinctrl-devices", S_IFREG | S_IRUGO,
+       debugfs_create_file("pinctrl-devices", 0444,
                            debugfs_root, NULL, &pinctrl_devices_fops);
-       debugfs_create_file("pinctrl-maps", S_IFREG | S_IRUGO,
+       debugfs_create_file("pinctrl-maps", 0444,
                            debugfs_root, NULL, &pinctrl_maps_fops);
-       debugfs_create_file("pinctrl-handles", S_IFREG | S_IRUGO,
+       debugfs_create_file("pinctrl-handles", 0444,
                            debugfs_root, NULL, &pinctrl_fops);
  }
  
@@@ -1173,16 -1173,15 +1173,15 @@@ static int intel_gpio_community_irq_han
        for (gpp = 0; gpp < community->ngpps; gpp++) {
                const struct intel_padgroup *padgrp = &community->gpps[gpp];
                unsigned long pending, enabled, gpp_offset;
-               unsigned long flags;
  
-               raw_spin_lock_irqsave(&pctrl->lock, flags);
+               raw_spin_lock(&pctrl->lock);
  
                pending = readl(community->regs + community->is_offset +
                                padgrp->reg_num * 4);
                enabled = readl(community->regs + community->ie_offset +
                                padgrp->reg_num * 4);
  
-               raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+               raw_spin_unlock(&pctrl->lock);
  
                /* Only interrupts that are enabled */
                pending &= enabled;
@@@ -1493,13 -1492,8 +1492,13 @@@ static int intel_pinctrl_probe(struct p
                if (IS_ERR(regs))
                        return PTR_ERR(regs);
  
 -              /* Determine community features based on the revision */
 +              /*
 +               * Determine community features based on the revision.
 +               * A value of all ones means the device is not present.
 +               */
                value = readl(regs + REVID);
 +              if (value == ~0u)
 +                      return -ENODEV;
                if (((value & REVID_MASK) >> REVID_SHIFT) >= 0x94) {
                        community->features |= PINCTRL_FEATURE_DEBOUNCE;
                        community->features |= PINCTRL_FEATURE_1K_PD;
   */
  
  #include <linux/init.h>
+ #include <linux/module.h>
  #include <linux/platform_device.h>
  #include <linux/io.h>
  #include <linux/bitops.h>
  #include <linux/gpio/driver.h>
+ #include <linux/of_device.h>
  #include <linux/of_address.h>
  #include <linux/of_irq.h>
  #include <linux/pinctrl/machine.h>
@@@ -61,8 -63,17 +63,17 @@@ enum rockchip_pinctrl_type 
        RK3308,
        RK3368,
        RK3399,
+       RK3568,
  };
  
+ /**
+  * Generate a bitmask for setting a value (v) with a write mask bit in hiword
+  * register 31:16 area.
+  */
+ #define WRITE_MASK_VAL(h, l, v) \
+       (GENMASK(((h) + 16), ((l) + 16)) | (((v) << (l)) & GENMASK((h), (l))))
  /*
   * Encode variants of iomux registers into a type variable
   */
@@@ -290,6 -301,25 +301,25 @@@ struct rockchip_pin_bank 
                .pull_type[3] = pull3,                                  \
        }
  
+ #define PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, FLAG)               \
+       {                                                               \
+               .bank_num       = ID,                                   \
+               .pin            = PIN,                                  \
+               .func           = FUNC,                                 \
+               .route_offset   = REG,                                  \
+               .route_val      = VAL,                                  \
+               .route_location = FLAG,                                 \
+       }
+ #define RK_MUXROUTE_SAME(ID, PIN, FUNC, REG, VAL)     \
+       PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_SAME)
+ #define RK_MUXROUTE_GRF(ID, PIN, FUNC, REG, VAL)      \
+       PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_GRF)
+ #define RK_MUXROUTE_PMU(ID, PIN, FUNC, REG, VAL)      \
+       PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_PMU)
  /**
   * struct rockchip_mux_recalced_data: represent a pin iomux data.
   * @num: bank number.
@@@ -801,597 -831,203 +831,203 @@@ static void rockchip_get_recalced_mux(s
  }
  
  static struct rockchip_mux_route_data px30_mux_route_data[] = {
-       {
-               /* cif-d2m0 */
-               .bank_num = 2,
-               .pin = 0,
-               .func = 1,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 7),
-       }, {
-               /* cif-d2m1 */
-               .bank_num = 3,
-               .pin = 3,
-               .func = 3,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 7) | BIT(7),
-       }, {
-               /* pdm-m0 */
-               .bank_num = 3,
-               .pin = 22,
-               .func = 2,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 8),
-       }, {
-               /* pdm-m1 */
-               .bank_num = 2,
-               .pin = 22,
-               .func = 1,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 8) | BIT(8),
-       }, {
-               /* uart2-rxm0 */
-               .bank_num = 1,
-               .pin = 27,
-               .func = 2,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 10),
-       }, {
-               /* uart2-rxm1 */
-               .bank_num = 2,
-               .pin = 14,
-               .func = 2,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 10) | BIT(10),
-       }, {
-               /* uart3-rxm0 */
-               .bank_num = 0,
-               .pin = 17,
-               .func = 2,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 9),
-       }, {
-               /* uart3-rxm1 */
-               .bank_num = 1,
-               .pin = 15,
-               .func = 2,
-               .route_offset = 0x184,
-               .route_val = BIT(16 + 9) | BIT(9),
-       },
+       RK_MUXROUTE_SAME(2, RK_PA0, 1, 0x184, BIT(16 + 7)), /* cif-d2m0 */
+       RK_MUXROUTE_SAME(3, RK_PA3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d2m1 */
+       RK_MUXROUTE_SAME(3, RK_PC6, 2, 0x184, BIT(16 + 8)), /* pdm-m0 */
+       RK_MUXROUTE_SAME(2, RK_PC6, 1, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-m1 */
+       RK_MUXROUTE_SAME(1, RK_PD3, 2, 0x184, BIT(16 + 10)), /* uart2-rxm0 */
+       RK_MUXROUTE_SAME(2, RK_PB6, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-rxm1 */
+       RK_MUXROUTE_SAME(0, RK_PC1, 2, 0x184, BIT(16 + 9)), /* uart3-rxm0 */
+       RK_MUXROUTE_SAME(1, RK_PB7, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rxm1 */
  };
  
  static struct rockchip_mux_route_data rk3128_mux_route_data[] = {
-       {
-               /* spi-0 */
-               .bank_num = 1,
-               .pin = 10,
-               .func = 1,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 3) | BIT(16 + 4),
-       }, {
-               /* spi-1 */
-               .bank_num = 1,
-               .pin = 27,
-               .func = 3,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 3) | BIT(16 + 4) | BIT(3),
-       }, {
-               /* spi-2 */
-               .bank_num = 0,
-               .pin = 13,
-               .func = 2,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 3) | BIT(16 + 4) | BIT(4),
-       }, {
-               /* i2s-0 */
-               .bank_num = 1,
-               .pin = 5,
-               .func = 1,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 5),
-       }, {
-               /* i2s-1 */
-               .bank_num = 0,
-               .pin = 14,
-               .func = 1,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 5) | BIT(5),
-       }, {
-               /* emmc-0 */
-               .bank_num = 1,
-               .pin = 22,
-               .func = 2,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 6),
-       }, {
-               /* emmc-1 */
-               .bank_num = 2,
-               .pin = 4,
-               .func = 2,
-               .route_offset = 0x144,
-               .route_val = BIT(16 + 6) | BIT(6),
-       },
+       RK_MUXROUTE_SAME(1, RK_PB2, 1, 0x144, BIT(16 + 3) | BIT(16 + 4)), /* spi-0 */
+       RK_MUXROUTE_SAME(1, RK_PD3, 3, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(3)), /* spi-1 */
+       RK_MUXROUTE_SAME(0, RK_PB5, 2, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(4)), /* spi-2 */
+       RK_MUXROUTE_SAME(1, RK_PA5, 1, 0x144, BIT(16 + 5)), /* i2s-0 */
+       RK_MUXROUTE_SAME(0, RK_PB6, 1, 0x144, BIT(16 + 5) | BIT(5)), /* i2s-1 */
+       RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x144, BIT(16 + 6)), /* emmc-0 */
+       RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x144, BIT(16 + 6) | BIT(6)), /* emmc-1 */
  };
  
  static struct rockchip_mux_route_data rk3188_mux_route_data[] = {
-       {
-               /* non-iomuxed emmc/flash pins on flash-dqs */
-               .bank_num = 0,
-               .pin = 24,
-               .func = 1,
-               .route_location = ROCKCHIP_ROUTE_GRF,
-               .route_offset = 0xa0,
-               .route_val = BIT(16 + 11),
-       }, {
-               /* non-iomuxed emmc/flash pins on emmc-clk */
-               .bank_num = 0,
-               .pin = 24,
-               .func = 2,
-               .route_location = ROCKCHIP_ROUTE_GRF,
-               .route_offset = 0xa0,
-               .route_val = BIT(16 + 11) | BIT(11),
-       },
+       RK_MUXROUTE_SAME(0, RK_PD0, 1, 0xa0, BIT(16 + 11)), /* non-iomuxed emmc/flash pins on flash-dqs */
+       RK_MUXROUTE_SAME(0, RK_PD0, 2, 0xa0, BIT(16 + 11) | BIT(11)), /* non-iomuxed emmc/flash pins on emmc-clk */
  };
  
  static struct rockchip_mux_route_data rk3228_mux_route_data[] = {
-       {
-               /* pwm0-0 */
-               .bank_num = 0,
-               .pin = 26,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16),
-       }, {
-               /* pwm0-1 */
-               .bank_num = 3,
-               .pin = 21,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16) | BIT(0),
-       }, {
-               /* pwm1-0 */
-               .bank_num = 0,
-               .pin = 27,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 1),
-       }, {
-               /* pwm1-1 */
-               .bank_num = 0,
-               .pin = 30,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 1) | BIT(1),
-       }, {
-               /* pwm2-0 */
-               .bank_num = 0,
-               .pin = 28,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 2),
-       }, {
-               /* pwm2-1 */
-               .bank_num = 1,
-               .pin = 12,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 2) | BIT(2),
-       }, {
-               /* pwm3-0 */
-               .bank_num = 3,
-               .pin = 26,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 3),
-       }, {
-               /* pwm3-1 */
-               .bank_num = 1,
-               .pin = 11,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 3) | BIT(3),
-       }, {
-               /* sdio-0_d0 */
-               .bank_num = 1,
-               .pin = 1,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 4),
-       }, {
-               /* sdio-1_d0 */
-               .bank_num = 3,
-               .pin = 2,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 4) | BIT(4),
-       }, {
-               /* spi-0_rx */
-               .bank_num = 0,
-               .pin = 13,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 5),
-       }, {
-               /* spi-1_rx */
-               .bank_num = 2,
-               .pin = 0,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 5) | BIT(5),
-       }, {
-               /* emmc-0_cmd */
-               .bank_num = 1,
-               .pin = 22,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 7),
-       }, {
-               /* emmc-1_cmd */
-               .bank_num = 2,
-               .pin = 4,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 7) | BIT(7),
-       }, {
-               /* uart2-0_rx */
-               .bank_num = 1,
-               .pin = 19,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 8),
-       }, {
-               /* uart2-1_rx */
-               .bank_num = 1,
-               .pin = 10,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 8) | BIT(8),
-       }, {
-               /* uart1-0_rx */
-               .bank_num = 1,
-               .pin = 10,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 11),
-       }, {
-               /* uart1-1_rx */
-               .bank_num = 3,
-               .pin = 13,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 11) | BIT(11),
-       },
+       RK_MUXROUTE_SAME(0, RK_PD2, 1, 0x50, BIT(16)), /* pwm0-0 */
+       RK_MUXROUTE_SAME(3, RK_PC5, 1, 0x50, BIT(16) | BIT(0)), /* pwm0-1 */
+       RK_MUXROUTE_SAME(0, RK_PD3, 1, 0x50, BIT(16 + 1)), /* pwm1-0 */
+       RK_MUXROUTE_SAME(0, RK_PD6, 2, 0x50, BIT(16 + 1) | BIT(1)), /* pwm1-1 */
+       RK_MUXROUTE_SAME(0, RK_PD4, 1, 0x50, BIT(16 + 2)), /* pwm2-0 */
+       RK_MUXROUTE_SAME(1, RK_PB4, 2, 0x50, BIT(16 + 2) | BIT(2)), /* pwm2-1 */
+       RK_MUXROUTE_SAME(3, RK_PD2, 1, 0x50, BIT(16 + 3)), /* pwm3-0 */
+       RK_MUXROUTE_SAME(1, RK_PB3, 2, 0x50, BIT(16 + 3) | BIT(3)), /* pwm3-1 */
+       RK_MUXROUTE_SAME(1, RK_PA1, 1, 0x50, BIT(16 + 4)), /* sdio-0_d0 */
+       RK_MUXROUTE_SAME(3, RK_PA2, 1, 0x50, BIT(16 + 4) | BIT(4)), /* sdio-1_d0 */
+       RK_MUXROUTE_SAME(0, RK_PB5, 2, 0x50, BIT(16 + 5)), /* spi-0_rx */
+       RK_MUXROUTE_SAME(2, RK_PA0, 2, 0x50, BIT(16 + 5) | BIT(5)), /* spi-1_rx */
+       RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x50, BIT(16 + 7)), /* emmc-0_cmd */
+       RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x50, BIT(16 + 7) | BIT(7)), /* emmc-1_cmd */
+       RK_MUXROUTE_SAME(1, RK_PC3, 2, 0x50, BIT(16 + 8)), /* uart2-0_rx */
+       RK_MUXROUTE_SAME(1, RK_PB2, 2, 0x50, BIT(16 + 8) | BIT(8)), /* uart2-1_rx */
+       RK_MUXROUTE_SAME(1, RK_PB2, 1, 0x50, BIT(16 + 11)), /* uart1-0_rx */
+       RK_MUXROUTE_SAME(3, RK_PB5, 1, 0x50, BIT(16 + 11) | BIT(11)), /* uart1-1_rx */
  };
  
  static struct rockchip_mux_route_data rk3288_mux_route_data[] = {
-       {
-               /* edphdmi_cecinoutt1 */
-               .bank_num = 7,
-               .pin = 16,
-               .func = 2,
-               .route_offset = 0x264,
-               .route_val = BIT(16 + 12) | BIT(12),
-       }, {
-               /* edphdmi_cecinout */
-               .bank_num = 7,
-               .pin = 23,
-               .func = 4,
-               .route_offset = 0x264,
-               .route_val = BIT(16 + 12),
-       },
+       RK_MUXROUTE_SAME(7, RK_PC0, 2, 0x264, BIT(16 + 12) | BIT(12)), /* edphdmi_cecinoutt1 */
+       RK_MUXROUTE_SAME(7, RK_PC7, 4, 0x264, BIT(16 + 12)), /* edphdmi_cecinout */
  };
  
  static struct rockchip_mux_route_data rk3308_mux_route_data[] = {
-       {
-               /* rtc_clk */
-               .bank_num = 0,
-               .pin = 19,
-               .func = 1,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 0) | BIT(0),
-       }, {
-               /* uart2_rxm0 */
-               .bank_num = 1,
-               .pin = 22,
-               .func = 2,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 2) | BIT(16 + 3),
-       }, {
-               /* uart2_rxm1 */
-               .bank_num = 4,
-               .pin = 26,
-               .func = 2,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 2) | BIT(16 + 3) | BIT(2),
-       }, {
-               /* i2c3_sdam0 */
-               .bank_num = 0,
-               .pin = 15,
-               .func = 2,
-               .route_offset = 0x608,
-               .route_val = BIT(16 + 8) | BIT(16 + 9),
-       }, {
-               /* i2c3_sdam1 */
-               .bank_num = 3,
-               .pin = 12,
-               .func = 2,
-               .route_offset = 0x608,
-               .route_val = BIT(16 + 8) | BIT(16 + 9) | BIT(8),
-       }, {
-               /* i2c3_sdam2 */
-               .bank_num = 2,
-               .pin = 0,
-               .func = 3,
-               .route_offset = 0x608,
-               .route_val = BIT(16 + 8) | BIT(16 + 9) | BIT(9),
-       }, {
-               /* i2s-8ch-1-sclktxm0 */
-               .bank_num = 1,
-               .pin = 3,
-               .func = 2,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 3),
-       }, {
-               /* i2s-8ch-1-sclkrxm0 */
-               .bank_num = 1,
-               .pin = 4,
-               .func = 2,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 3),
-       }, {
-               /* i2s-8ch-1-sclktxm1 */
-               .bank_num = 1,
-               .pin = 13,
-               .func = 2,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 3) | BIT(3),
-       }, {
-               /* i2s-8ch-1-sclkrxm1 */
-               .bank_num = 1,
-               .pin = 14,
-               .func = 2,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 3) | BIT(3),
-       }, {
-               /* pdm-clkm0 */
-               .bank_num = 1,
-               .pin = 4,
-               .func = 3,
-               .route_offset = 0x308,
-               .route_val =  BIT(16 + 12) | BIT(16 + 13),
-       }, {
-               /* pdm-clkm1 */
-               .bank_num = 1,
-               .pin = 14,
-               .func = 4,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(12),
-       }, {
-               /* pdm-clkm2 */
-               .bank_num = 2,
-               .pin = 6,
-               .func = 2,
-               .route_offset = 0x308,
-               .route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(13),
-       }, {
-               /* pdm-clkm-m2 */
-               .bank_num = 2,
-               .pin = 4,
-               .func = 3,
-               .route_offset = 0x600,
-               .route_val = BIT(16 + 2) | BIT(2),
-       }, {
-               /* spi1_miso */
-               .bank_num = 3,
-               .pin = 10,
-               .func = 3,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 9),
-       }, {
-               /* spi1_miso_m1 */
-               .bank_num = 2,
-               .pin = 4,
-               .func = 2,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 9) | BIT(9),
-       }, {
-               /* owire_m0 */
-               .bank_num = 0,
-               .pin = 11,
-               .func = 3,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 10) | BIT(16 + 11),
-       }, {
-               /* owire_m1 */
-               .bank_num = 1,
-               .pin = 22,
-               .func = 7,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(10),
-       }, {
-               /* owire_m2 */
-               .bank_num = 2,
-               .pin = 2,
-               .func = 5,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(11),
-       }, {
-               /* can_rxd_m0 */
-               .bank_num = 0,
-               .pin = 11,
-               .func = 2,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 12) | BIT(16 + 13),
-       }, {
-               /* can_rxd_m1 */
-               .bank_num = 1,
-               .pin = 22,
-               .func = 5,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(12),
-       }, {
-               /* can_rxd_m2 */
-               .bank_num = 2,
-               .pin = 2,
-               .func = 4,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 12) | BIT(16 + 13) | BIT(13),
-       }, {
-               /* mac_rxd0_m0 */
-               .bank_num = 1,
-               .pin = 20,
-               .func = 3,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 14),
-       }, {
-               /* mac_rxd0_m1 */
-               .bank_num = 4,
-               .pin = 2,
-               .func = 2,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 14) | BIT(14),
-       }, {
-               /* uart3_rx */
-               .bank_num = 3,
-               .pin = 12,
-               .func = 4,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 15),
-       }, {
-               /* uart3_rx_m1 */
-               .bank_num = 0,
-               .pin = 17,
-               .func = 3,
-               .route_offset = 0x314,
-               .route_val = BIT(16 + 15) | BIT(15),
-       },
+       RK_MUXROUTE_SAME(0, RK_PC3, 1, 0x314, BIT(16 + 0) | BIT(0)), /* rtc_clk */
+       RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x314, BIT(16 + 2) | BIT(16 + 3)), /* uart2_rxm0 */
+       RK_MUXROUTE_SAME(4, RK_PD2, 2, 0x314, BIT(16 + 2) | BIT(16 + 3) | BIT(2)), /* uart2_rxm1 */
+       RK_MUXROUTE_SAME(0, RK_PB7, 2, 0x608, BIT(16 + 8) | BIT(16 + 9)), /* i2c3_sdam0 */
+       RK_MUXROUTE_SAME(3, RK_PB4, 2, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(8)), /* i2c3_sdam1 */
+       RK_MUXROUTE_SAME(2, RK_PA0, 3, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(9)), /* i2c3_sdam2 */
+       RK_MUXROUTE_SAME(1, RK_PA3, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclktxm0 */
+       RK_MUXROUTE_SAME(1, RK_PA4, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclkrxm0 */
+       RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1-sclktxm1 */
+       RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1-sclkrxm1 */
+       RK_MUXROUTE_SAME(1, RK_PA4, 3, 0x308, BIT(16 + 12) | BIT(16 + 13)), /* pdm-clkm0 */
+       RK_MUXROUTE_SAME(1, RK_PB6, 4, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(12)), /* pdm-clkm1 */
+       RK_MUXROUTE_SAME(2, RK_PA6, 2, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(13)), /* pdm-clkm2 */
+       RK_MUXROUTE_SAME(2, RK_PA4, 3, 0x600, BIT(16 + 2) | BIT(2)), /* pdm-clkm-m2 */
+       RK_MUXROUTE_SAME(3, RK_PB2, 3, 0x314, BIT(16 + 9)), /* spi1_miso */
+       RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x314, BIT(16 + 9) | BIT(9)), /* spi1_miso_m1 */
+       RK_MUXROUTE_SAME(0, RK_PB3, 3, 0x314, BIT(16 + 10) | BIT(16 + 11)), /* owire_m0 */
+       RK_MUXROUTE_SAME(1, RK_PC6, 7, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(10)), /* owire_m1 */
+       RK_MUXROUTE_SAME(2, RK_PA2, 5, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(11)), /* owire_m2 */
+       RK_MUXROUTE_SAME(0, RK_PB3, 2, 0x314, BIT(16 + 12) | BIT(16 + 13)), /* can_rxd_m0 */
+       RK_MUXROUTE_SAME(1, RK_PC6, 5, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(12)), /* can_rxd_m1 */
+       RK_MUXROUTE_SAME(2, RK_PA2, 4, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(13)), /* can_rxd_m2 */
+       RK_MUXROUTE_SAME(1, RK_PC4, 3, 0x314, BIT(16 + 14)), /* mac_rxd0_m0 */
+       RK_MUXROUTE_SAME(4, RK_PA2, 2, 0x314, BIT(16 + 14) | BIT(14)), /* mac_rxd0_m1 */
+       RK_MUXROUTE_SAME(3, RK_PB4, 4, 0x314, BIT(16 + 15)), /* uart3_rx */
+       RK_MUXROUTE_SAME(0, RK_PC1, 3, 0x314, BIT(16 + 15) | BIT(15)), /* uart3_rx_m1 */
  };
  
  static struct rockchip_mux_route_data rk3328_mux_route_data[] = {
-       {
-               /* uart2dbg_rxm0 */
-               .bank_num = 1,
-               .pin = 1,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16) | BIT(16 + 1),
-       }, {
-               /* uart2dbg_rxm1 */
-               .bank_num = 2,
-               .pin = 1,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16) | BIT(16 + 1) | BIT(0),
-       }, {
-               /* gmac-m1_rxd0 */
-               .bank_num = 1,
-               .pin = 11,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 2) | BIT(2),
-       }, {
-               /* gmac-m1-optimized_rxd3 */
-               .bank_num = 1,
-               .pin = 14,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 10) | BIT(10),
-       }, {
-               /* pdm_sdi0m0 */
-               .bank_num = 2,
-               .pin = 19,
-               .func = 2,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 3),
-       }, {
-               /* pdm_sdi0m1 */
-               .bank_num = 1,
-               .pin = 23,
-               .func = 3,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 3) | BIT(3),
-       }, {
-               /* spi_rxdm2 */
-               .bank_num = 3,
-               .pin = 2,
-               .func = 4,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 4) | BIT(16 + 5) | BIT(5),
-       }, {
-               /* i2s2_sdim0 */
-               .bank_num = 1,
-               .pin = 24,
-               .func = 1,
-               .route_offset = 0x50,
-               .route_val = BIT(16 + 6),
-       }, {
-               /* i2s2_sdim1 */
-               .bank_num = 3,
-               .pin = 2,
-               .func = 6,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 6) | BIT(6),
-       }, {
-               /* card_iom1 */
-               .bank_num = 2,
-               .pin = 22,
-               .func = 3,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 7) | BIT(7),
-       }, {
-               /* tsp_d5m1 */
-               .bank_num = 2,
-               .pin = 16,
-               .func = 3,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 8) | BIT(8),
-       }, {
-               /* cif_data5m1 */
-               .bank_num = 2,
-               .pin = 16,
-               .func = 4,
-               .route_offset = 0x50,
-               .route_val =  BIT(16 + 9) | BIT(9),
-       },
+       RK_MUXROUTE_SAME(1, RK_PA1, 2, 0x50, BIT(16) | BIT(16 + 1)), /* uart2dbg_rxm0 */
+       RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x50, BIT(16) | BIT(16 + 1) | BIT(0)), /* uart2dbg_rxm1 */
+       RK_MUXROUTE_SAME(1, RK_PB3, 2, 0x50, BIT(16 + 2) | BIT(2)), /* gmac-m1_rxd0 */
+       RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x50, BIT(16 + 10) | BIT(10)), /* gmac-m1-optimized_rxd3 */
+       RK_MUXROUTE_SAME(2, RK_PC3, 2, 0x50, BIT(16 + 3)), /* pdm_sdi0m0 */
+       RK_MUXROUTE_SAME(1, RK_PC7, 3, 0x50, BIT(16 + 3) | BIT(3)), /* pdm_sdi0m1 */
+       RK_MUXROUTE_SAME(3, RK_PA2, 4, 0x50, BIT(16 + 4) | BIT(16 + 5) | BIT(5)), /* spi_rxdm2 */
+       RK_MUXROUTE_SAME(1, RK_PD0, 1, 0x50, BIT(16 + 6)), /* i2s2_sdim0 */
+       RK_MUXROUTE_SAME(3, RK_PA2, 6, 0x50, BIT(16 + 6) | BIT(6)), /* i2s2_sdim1 */
+       RK_MUXROUTE_SAME(2, RK_PC6, 3, 0x50, BIT(16 + 7) | BIT(7)), /* card_iom1 */
+       RK_MUXROUTE_SAME(2, RK_PC0, 3, 0x50, BIT(16 + 8) | BIT(8)), /* tsp_d5m1 */
+       RK_MUXROUTE_SAME(2, RK_PC0, 4, 0x50, BIT(16 + 9) | BIT(9)), /* cif_data5m1 */
  };
  
  static struct rockchip_mux_route_data rk3399_mux_route_data[] = {
-       {
-               /* uart2dbga_rx */
-               .bank_num = 4,
-               .pin = 8,
-               .func = 2,
-               .route_offset = 0xe21c,
-               .route_val = BIT(16 + 10) | BIT(16 + 11),
-       }, {
-               /* uart2dbgb_rx */
-               .bank_num = 4,
-               .pin = 16,
-               .func = 2,
-               .route_offset = 0xe21c,
-               .route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(10),
-       }, {
-               /* uart2dbgc_rx */
-               .bank_num = 4,
-               .pin = 19,
-               .func = 1,
-               .route_offset = 0xe21c,
-               .route_val = BIT(16 + 10) | BIT(16 + 11) | BIT(11),
-       }, {
-               /* pcie_clkreqn */
-               .bank_num = 2,
-               .pin = 26,
-               .func = 2,
-               .route_offset = 0xe21c,
-               .route_val = BIT(16 + 14),
-       }, {
-               /* pcie_clkreqnb */
-               .bank_num = 4,
-               .pin = 24,
-               .func = 1,
-               .route_offset = 0xe21c,
-               .route_val = BIT(16 + 14) | BIT(14),
-       },
+       RK_MUXROUTE_SAME(4, RK_PB0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11)), /* uart2dbga_rx */
+       RK_MUXROUTE_SAME(4, RK_PC0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(10)), /* uart2dbgb_rx */
+       RK_MUXROUTE_SAME(4, RK_PC3, 1, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(11)), /* uart2dbgc_rx */
+       RK_MUXROUTE_SAME(2, RK_PD2, 2, 0xe21c, BIT(16 + 14)), /* pcie_clkreqn */
+       RK_MUXROUTE_SAME(4, RK_PD0, 1, 0xe21c, BIT(16 + 14) | BIT(14)), /* pcie_clkreqnb */
+ };
+ static struct rockchip_mux_route_data rk3568_mux_route_data[] = {
+       RK_MUXROUTE_PMU(0, RK_PB7, 1, 0x0110, WRITE_MASK_VAL(1, 0, 0)), /* PWM0 IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PC7, 2, 0x0110, WRITE_MASK_VAL(1, 0, 1)), /* PWM0 IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PC0, 1, 0x0110, WRITE_MASK_VAL(3, 2, 0)), /* PWM1 IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PB5, 4, 0x0110, WRITE_MASK_VAL(3, 2, 1)), /* PWM1 IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PC1, 1, 0x0110, WRITE_MASK_VAL(5, 4, 0)), /* PWM2 IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PB6, 4, 0x0110, WRITE_MASK_VAL(5, 4, 1)), /* PWM2 IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PB3, 2, 0x0300, WRITE_MASK_VAL(0, 0, 0)), /* CAN0 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PA1, 4, 0x0300, WRITE_MASK_VAL(0, 0, 1)), /* CAN0 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA1, 3, 0x0300, WRITE_MASK_VAL(2, 2, 0)), /* CAN1 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC3, 3, 0x0300, WRITE_MASK_VAL(2, 2, 1)), /* CAN1 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PB5, 3, 0x0300, WRITE_MASK_VAL(4, 4, 0)), /* CAN2 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PB2, 4, 0x0300, WRITE_MASK_VAL(4, 4, 1)), /* CAN2 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PC4, 1, 0x0300, WRITE_MASK_VAL(6, 6, 0)), /* HPDIN IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PC2, 2, 0x0300, WRITE_MASK_VAL(6, 6, 1)), /* HPDIN IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB1, 3, 0x0300, WRITE_MASK_VAL(8, 8, 0)), /* GMAC1 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PA7, 3, 0x0300, WRITE_MASK_VAL(8, 8, 1)), /* GMAC1 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PD1, 1, 0x0300, WRITE_MASK_VAL(10, 10, 0)), /* HDMITX IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PC7, 1, 0x0300, WRITE_MASK_VAL(10, 10, 1)), /* HDMITX IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PB6, 1, 0x0300, WRITE_MASK_VAL(14, 14, 0)), /* I2C2 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PB4, 1, 0x0300, WRITE_MASK_VAL(14, 14, 1)), /* I2C2 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA0, 1, 0x0304, WRITE_MASK_VAL(0, 0, 0)), /* I2C3 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PB6, 4, 0x0304, WRITE_MASK_VAL(0, 0, 1)), /* I2C3 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PB2, 1, 0x0304, WRITE_MASK_VAL(2, 2, 0)), /* I2C4 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PB1, 2, 0x0304, WRITE_MASK_VAL(2, 2, 1)), /* I2C4 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB4, 4, 0x0304, WRITE_MASK_VAL(4, 4, 0)), /* I2C5 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PD0, 2, 0x0304, WRITE_MASK_VAL(4, 4, 1)), /* I2C5 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB1, 5, 0x0304, WRITE_MASK_VAL(14, 14, 0)), /* PWM8 IO mux M0 */
+       RK_MUXROUTE_GRF(1, RK_PD5, 4, 0x0304, WRITE_MASK_VAL(14, 14, 1)), /* PWM8 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB2, 5, 0x0308, WRITE_MASK_VAL(0, 0, 0)), /* PWM9 IO mux M0 */
+       RK_MUXROUTE_GRF(1, RK_PD6, 4, 0x0308, WRITE_MASK_VAL(0, 0, 1)), /* PWM9 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB5, 5, 0x0308, WRITE_MASK_VAL(2, 2, 0)), /* PWM10 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PA1, 2, 0x0308, WRITE_MASK_VAL(2, 2, 1)), /* PWM10 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB6, 5, 0x0308, WRITE_MASK_VAL(4, 4, 0)), /* PWM11 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC0, 3, 0x0308, WRITE_MASK_VAL(4, 4, 1)), /* PWM11 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PB7, 2, 0x0308, WRITE_MASK_VAL(6, 6, 0)), /* PWM12 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC5, 1, 0x0308, WRITE_MASK_VAL(6, 6, 1)), /* PWM12 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PC0, 2, 0x0308, WRITE_MASK_VAL(8, 8, 0)), /* PWM13 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC6, 1, 0x0308, WRITE_MASK_VAL(8, 8, 1)), /* PWM13 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PC4, 1, 0x0308, WRITE_MASK_VAL(10, 10, 0)), /* PWM14 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC2, 1, 0x0308, WRITE_MASK_VAL(10, 10, 1)), /* PWM14 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PC5, 1, 0x0308, WRITE_MASK_VAL(12, 12, 0)), /* PWM15 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC3, 1, 0x0308, WRITE_MASK_VAL(12, 12, 1)), /* PWM15 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PD2, 3, 0x0308, WRITE_MASK_VAL(14, 14, 0)), /* SDMMC2 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PA5, 5, 0x0308, WRITE_MASK_VAL(14, 14, 1)), /* SDMMC2 IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PB5, 2, 0x030c, WRITE_MASK_VAL(0, 0, 0)), /* SPI0 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PD3, 3, 0x030c, WRITE_MASK_VAL(0, 0, 1)), /* SPI0 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PB5, 3, 0x030c, WRITE_MASK_VAL(2, 2, 0)), /* SPI1 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PC3, 3, 0x030c, WRITE_MASK_VAL(2, 2, 1)), /* SPI1 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PC1, 4, 0x030c, WRITE_MASK_VAL(4, 4, 0)), /* SPI2 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PA0, 3, 0x030c, WRITE_MASK_VAL(4, 4, 1)), /* SPI2 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PB3, 4, 0x030c, WRITE_MASK_VAL(6, 6, 0)), /* SPI3 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC2, 2, 0x030c, WRITE_MASK_VAL(6, 6, 1)), /* SPI3 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PB4, 2, 0x030c, WRITE_MASK_VAL(8, 8, 0)), /* UART1 IO mux M0 */
+       RK_MUXROUTE_PMU(0, RK_PD1, 1, 0x030c, WRITE_MASK_VAL(8, 8, 1)), /* UART1 IO mux M1 */
+       RK_MUXROUTE_PMU(0, RK_PD1, 1, 0x030c, WRITE_MASK_VAL(10, 10, 0)), /* UART2 IO mux M0 */
+       RK_MUXROUTE_GRF(1, RK_PD5, 2, 0x030c, WRITE_MASK_VAL(10, 10, 1)), /* UART2 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA1, 2, 0x030c, WRITE_MASK_VAL(12, 12, 0)), /* UART3 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PB7, 4, 0x030c, WRITE_MASK_VAL(12, 12, 1)), /* UART3 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA6, 2, 0x030c, WRITE_MASK_VAL(14, 14, 0)), /* UART4 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PB2, 4, 0x030c, WRITE_MASK_VAL(14, 14, 1)), /* UART4 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PA2, 3, 0x0310, WRITE_MASK_VAL(0, 0, 0)), /* UART5 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PC2, 4, 0x0310, WRITE_MASK_VAL(0, 0, 1)), /* UART5 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PA4, 3, 0x0310, WRITE_MASK_VAL(2, 2, 0)), /* UART6 IO mux M0 */
+       RK_MUXROUTE_GRF(1, RK_PD5, 3, 0x0310, WRITE_MASK_VAL(2, 2, 1)), /* UART6 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PA6, 3, 0x0310, WRITE_MASK_VAL(5, 4, 0)), /* UART7 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PC4, 4, 0x0310, WRITE_MASK_VAL(5, 4, 1)), /* UART7 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PA2, 4, 0x0310, WRITE_MASK_VAL(5, 4, 2)), /* UART7 IO mux M2 */
+       RK_MUXROUTE_GRF(2, RK_PC5, 3, 0x0310, WRITE_MASK_VAL(6, 6, 0)), /* UART8 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PD7, 4, 0x0310, WRITE_MASK_VAL(6, 6, 1)), /* UART8 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PB0, 3, 0x0310, WRITE_MASK_VAL(9, 8, 0)), /* UART9 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC5, 4, 0x0310, WRITE_MASK_VAL(9, 8, 1)), /* UART9 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PA4, 4, 0x0310, WRITE_MASK_VAL(9, 8, 2)), /* UART9 IO mux M2 */
+       RK_MUXROUTE_GRF(1, RK_PA2, 1, 0x0310, WRITE_MASK_VAL(11, 10, 0)), /* I2S1 IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PC6, 4, 0x0310, WRITE_MASK_VAL(11, 10, 1)), /* I2S1 IO mux M1 */
+       RK_MUXROUTE_GRF(2, RK_PD0, 5, 0x0310, WRITE_MASK_VAL(11, 10, 2)), /* I2S1 IO mux M2 */
+       RK_MUXROUTE_GRF(2, RK_PC1, 1, 0x0310, WRITE_MASK_VAL(12, 12, 0)), /* I2S2 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PB6, 5, 0x0310, WRITE_MASK_VAL(12, 12, 1)), /* I2S2 IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PA2, 4, 0x0310, WRITE_MASK_VAL(14, 14, 0)), /* I2S3 IO mux M0 */
+       RK_MUXROUTE_GRF(4, RK_PC2, 5, 0x0310, WRITE_MASK_VAL(14, 14, 1)), /* I2S3 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA4, 3, 0x0314, WRITE_MASK_VAL(1, 0, 0)), /* PDM IO mux M0 */
+       RK_MUXROUTE_GRF(1, RK_PA6, 3, 0x0314, WRITE_MASK_VAL(1, 0, 0)), /* PDM IO mux M0 */
+       RK_MUXROUTE_GRF(3, RK_PD6, 5, 0x0314, WRITE_MASK_VAL(1, 0, 1)), /* PDM IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PA0, 4, 0x0314, WRITE_MASK_VAL(1, 0, 1)), /* PDM IO mux M1 */
+       RK_MUXROUTE_GRF(3, RK_PC4, 5, 0x0314, WRITE_MASK_VAL(1, 0, 2)), /* PDM IO mux M2 */
+       RK_MUXROUTE_PMU(0, RK_PA5, 3, 0x0314, WRITE_MASK_VAL(3, 2, 0)), /* PCIE20 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PD0, 4, 0x0314, WRITE_MASK_VAL(3, 2, 1)), /* PCIE20 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PB0, 4, 0x0314, WRITE_MASK_VAL(3, 2, 2)), /* PCIE20 IO mux M2 */
+       RK_MUXROUTE_PMU(0, RK_PA4, 3, 0x0314, WRITE_MASK_VAL(5, 4, 0)), /* PCIE30X1 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PD2, 4, 0x0314, WRITE_MASK_VAL(5, 4, 1)), /* PCIE30X1 IO mux M1 */
+       RK_MUXROUTE_GRF(1, RK_PA5, 4, 0x0314, WRITE_MASK_VAL(5, 4, 2)), /* PCIE30X1 IO mux M2 */
+       RK_MUXROUTE_PMU(0, RK_PA6, 2, 0x0314, WRITE_MASK_VAL(7, 6, 0)), /* PCIE30X2 IO mux M0 */
+       RK_MUXROUTE_GRF(2, RK_PD4, 4, 0x0314, WRITE_MASK_VAL(7, 6, 1)), /* PCIE30X2 IO mux M1 */
+       RK_MUXROUTE_GRF(4, RK_PC2, 4, 0x0314, WRITE_MASK_VAL(7, 6, 2)), /* PCIE30X2 IO mux M2 */
  };
  
  static bool rockchip_get_mux_route(struct rockchip_pin_bank *bank, int pin,
@@@ -2102,6 -1738,68 +1738,68 @@@ static void rk3399_calc_drv_reg_and_bit
                *bit = (pin_num % 8) * 2;
  }
  
+ #define RK3568_PULL_PMU_OFFSET                0x20
+ #define RK3568_PULL_GRF_OFFSET                0x80
+ #define RK3568_PULL_BITS_PER_PIN      2
+ #define RK3568_PULL_PINS_PER_REG      8
+ #define RK3568_PULL_BANK_STRIDE               0x10
+ static void rk3568_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
+                                        int pin_num, struct regmap **regmap,
+                                        int *reg, u8 *bit)
+ {
+       struct rockchip_pinctrl *info = bank->drvdata;
+       if (bank->bank_num == 0) {
+               *regmap = info->regmap_pmu;
+               *reg = RK3568_PULL_PMU_OFFSET;
+               *reg += bank->bank_num * RK3568_PULL_BANK_STRIDE;
+               *reg += ((pin_num / RK3568_PULL_PINS_PER_REG) * 4);
+               *bit = pin_num % RK3568_PULL_PINS_PER_REG;
+               *bit *= RK3568_PULL_BITS_PER_PIN;
+       } else {
+               *regmap = info->regmap_base;
+               *reg = RK3568_PULL_GRF_OFFSET;
+               *reg += (bank->bank_num - 1) * RK3568_PULL_BANK_STRIDE;
+               *reg += ((pin_num / RK3568_PULL_PINS_PER_REG) * 4);
+               *bit = (pin_num % RK3568_PULL_PINS_PER_REG);
+               *bit *= RK3568_PULL_BITS_PER_PIN;
+       }
+ }
+ #define RK3568_DRV_PMU_OFFSET         0x70
+ #define RK3568_DRV_GRF_OFFSET         0x200
+ #define RK3568_DRV_BITS_PER_PIN               8
+ #define RK3568_DRV_PINS_PER_REG               2
+ #define RK3568_DRV_BANK_STRIDE                0x40
+ static void rk3568_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
+                                       int pin_num, struct regmap **regmap,
+                                       int *reg, u8 *bit)
+ {
+       struct rockchip_pinctrl *info = bank->drvdata;
+       /* The first 32 pins of the first bank are located in PMU */
+       if (bank->bank_num == 0) {
+               *regmap = info->regmap_pmu;
+               *reg = RK3568_DRV_PMU_OFFSET;
+               *reg += ((pin_num / RK3568_DRV_PINS_PER_REG) * 4);
+               *bit = pin_num % RK3568_DRV_PINS_PER_REG;
+               *bit *= RK3568_DRV_BITS_PER_PIN;
+       } else {
+               *regmap = info->regmap_base;
+               *reg = RK3568_DRV_GRF_OFFSET;
+               *reg += (bank->bank_num - 1) * RK3568_DRV_BANK_STRIDE;
+               *reg += ((pin_num / RK3568_DRV_PINS_PER_REG) * 4);
+               *bit = (pin_num % RK3568_DRV_PINS_PER_REG);
+               *bit *= RK3568_DRV_BITS_PER_PIN;
+       }
+ }
  static int rockchip_perpin_drv_list[DRV_TYPE_MAX][8] = {
        { 2, 4, 8, 12, -1, -1, -1, -1 },
        { 3, 6, 9, 12, -1, -1, -1, -1 },
@@@ -2202,6 -1900,11 +1900,11 @@@ static int rockchip_set_drive_perpin(st
                bank->bank_num, pin_num, strength);
  
        ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
+       if (ctrl->type == RK3568) {
+               rmask_bits = RK3568_DRV_BITS_PER_PIN;
+               ret = (1 << (strength + 1)) - 1;
+               goto config;
+       }
  
        ret = -EINVAL;
        for (i = 0; i < ARRAY_SIZE(rockchip_perpin_drv_list[drv_type]); i++) {
                return -EINVAL;
        }
  
+ config:
        /* enable the write to the equivalent lower bits */
        data = ((1 << rmask_bits) - 1) << (bit + 16);
        rmask = data | (data >> 16);
@@@ -2373,6 -2077,7 +2077,7 @@@ static int rockchip_set_pull(struct roc
        case RK3308:
        case RK3368:
        case RK3399:
+       case RK3568:
                pull_type = bank->pull_type[pin_num / 8];
                ret = -EINVAL;
                for (i = 0; i < ARRAY_SIZE(rockchip_pull_list[pull_type]);
                                break;
                        }
                }
+               /*
+                * In the TRM, pull-up being 1 for everything except the GPIO0_D0-D6,
+                * where that pull up value becomes 3.
+                */
+               if (ctrl->type == RK3568 && bank->bank_num == 0 && pin_num >= 27 && pin_num <= 30) {
+                       if (ret == 1)
+                               ret = 3;
+               }
  
                if (ret < 0) {
                        dev_err(info->dev, "unsupported pull setting %d\n",
@@@ -2426,6 -2139,35 +2139,35 @@@ static int rk3328_calc_schmitt_reg_and_
        return 0;
  }
  
+ #define RK3568_SCHMITT_BITS_PER_PIN           2
+ #define RK3568_SCHMITT_PINS_PER_REG           8
+ #define RK3568_SCHMITT_BANK_STRIDE            0x10
+ #define RK3568_SCHMITT_GRF_OFFSET             0xc0
+ #define RK3568_SCHMITT_PMUGRF_OFFSET          0x30
+ static int rk3568_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
+                                          int pin_num,
+                                          struct regmap **regmap,
+                                          int *reg, u8 *bit)
+ {
+       struct rockchip_pinctrl *info = bank->drvdata;
+       if (bank->bank_num == 0) {
+               *regmap = info->regmap_pmu;
+               *reg = RK3568_SCHMITT_PMUGRF_OFFSET;
+       } else {
+               *regmap = info->regmap_base;
+               *reg = RK3568_SCHMITT_GRF_OFFSET;
+               *reg += (bank->bank_num - 1) * RK3568_SCHMITT_BANK_STRIDE;
+       }
+       *reg += ((pin_num / RK3568_SCHMITT_PINS_PER_REG) * 4);
+       *bit = pin_num % RK3568_SCHMITT_PINS_PER_REG;
+       *bit *= RK3568_SCHMITT_BITS_PER_PIN;
+       return 0;
+ }
  static int rockchip_get_schmitt(struct rockchip_pin_bank *bank, int pin_num)
  {
        struct rockchip_pinctrl *info = bank->drvdata;
                return ret;
  
        data >>= bit;
+       switch (ctrl->type) {
+       case RK3568:
+               return data & ((1 << RK3568_SCHMITT_BITS_PER_PIN) - 1);
+       default:
+               break;
+       }
        return data & 0x1;
  }
  
@@@ -2465,8 -2214,17 +2214,17 @@@ static int rockchip_set_schmitt(struct 
                return ret;
  
        /* enable the write to the equivalent lower bits */
-       data = BIT(bit + 16) | (enable << bit);
-       rmask = BIT(bit + 16) | BIT(bit);
+       switch (ctrl->type) {
+       case RK3568:
+               data = ((1 << RK3568_SCHMITT_BITS_PER_PIN) - 1) << (bit + 16);
+               rmask = data | (data >> 16);
+               data |= ((enable ? 0x2 : 0x1) << bit);
+               break;
+       default:
+               data = BIT(bit + 16) | (enable << bit);
+               rmask = BIT(bit + 16) | BIT(bit);
+               break;
+       }
  
        return regmap_update_bits(regmap, reg, rmask, data);
  }
@@@ -2640,6 -2398,7 +2398,7 @@@ static bool rockchip_pinconf_pull_valid
        case RK3308:
        case RK3368:
        case RK3399:
+       case RK3568:
                return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT);
        }
  
@@@ -3433,6 -3192,7 +3192,7 @@@ static int rockchip_interrupts_register
                 * things enabled, so for us that's all masked and all enabled.
                 */
                writel_relaxed(0xffffffff, bank->reg_base + GPIO_INTMASK);
+               writel_relaxed(0xffffffff, bank->reg_base + GPIO_PORTS_EOI);
                writel_relaxed(0xffffffff, bank->reg_base + GPIO_INTEN);
                gc->mask_cache = 0xffffffff;
  
@@@ -3727,15 -3487,12 +3487,15 @@@ static int __maybe_unused rockchip_pinc
  static int __maybe_unused rockchip_pinctrl_resume(struct device *dev)
  {
        struct rockchip_pinctrl *info = dev_get_drvdata(dev);
 -      int ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
 -                             rk3288_grf_gpio6c_iomux |
 -                             GPIO6C6_SEL_WRITE_ENABLE);
 +      int ret;
  
 -      if (ret)
 -              return ret;
 +      if (info->ctrl->type == RK3288) {
 +              ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
 +                                 rk3288_grf_gpio6c_iomux |
 +                                 GPIO6C6_SEL_WRITE_ENABLE);
 +              if (ret)
 +                      return ret;
 +      }
  
        return pinctrl_force_default(info->pctl_dev);
  }
@@@ -4213,6 -3970,45 +3973,45 @@@ static struct rockchip_pin_ctrl rk3399_
                .drv_calc_reg           = rk3399_calc_drv_reg_and_bit,
  };
  
+ static struct rockchip_pin_bank rk3568_pin_banks[] = {
+       PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
+                                            IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
+                                            IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
+                                            IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT),
+       PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT),
+       PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT),
+       PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT),
+       PIN_BANK_IOMUX_FLAGS(4, 32, "gpio4", IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT,
+                                            IOMUX_WIDTH_4BIT),
+ };
+ static struct rockchip_pin_ctrl rk3568_pin_ctrl = {
+       .pin_banks              = rk3568_pin_banks,
+       .nr_banks               = ARRAY_SIZE(rk3568_pin_banks),
+       .label                  = "RK3568-GPIO",
+       .type                   = RK3568,
+       .grf_mux_offset         = 0x0,
+       .pmu_mux_offset         = 0x0,
+       .grf_drv_offset         = 0x0200,
+       .pmu_drv_offset         = 0x0070,
+       .iomux_routes           = rk3568_mux_route_data,
+       .niomux_routes          = ARRAY_SIZE(rk3568_mux_route_data),
+       .pull_calc_reg          = rk3568_calc_pull_reg_and_bit,
+       .drv_calc_reg           = rk3568_calc_drv_reg_and_bit,
+       .schmitt_calc_reg       = rk3568_calc_schmitt_reg_and_bit,
+ };
  static const struct of_device_id rockchip_pinctrl_dt_match[] = {
        { .compatible = "rockchip,px30-pinctrl",
                .data = &px30_pin_ctrl },
                .data = &rk3368_pin_ctrl },
        { .compatible = "rockchip,rk3399-pinctrl",
                .data = &rk3399_pin_ctrl },
+       { .compatible = "rockchip,rk3568-pinctrl",
+               .data = &rk3568_pin_ctrl },
        {},
  };
  
@@@ -4259,3 -4057,14 +4060,14 @@@ static int __init rockchip_pinctrl_drv_
        return platform_driver_register(&rockchip_pinctrl_driver);
  }
  postcore_initcall(rockchip_pinctrl_drv_register);
+ static void __exit rockchip_pinctrl_drv_unregister(void)
+ {
+       platform_driver_unregister(&rockchip_pinctrl_driver);
+ }
+ module_exit(rockchip_pinctrl_drv_unregister);
+ MODULE_DESCRIPTION("ROCKCHIP Pin Controller Driver");
+ MODULE_LICENSE("GPL");
+ MODULE_ALIAS("platform:pinctrl-rockchip");
+ MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match);
@@@ -1439,16 -1439,38 +1439,38 @@@ static const struct msm_pingroup sc7280
        [172] = PINGROUP(172, qdss, _, _, _, _, _, _, _, _),
        [173] = PINGROUP(173, qdss, _, _, _, _, _, _, _, _),
        [174] = PINGROUP(174, qdss, _, _, _, _, _, _, _, _),
 -      [175] = UFS_RESET(ufs_reset, 0x1be000),
 -      [176] = SDC_QDSD_PINGROUP(sdc1_rclk, 0x1b3000, 15, 0),
 -      [177] = SDC_QDSD_PINGROUP(sdc1_clk, 0x1b3000, 13, 6),
 -      [178] = SDC_QDSD_PINGROUP(sdc1_cmd, 0x1b3000, 11, 3),
 -      [179] = SDC_QDSD_PINGROUP(sdc1_data, 0x1b3000, 9, 0),
 -      [180] = SDC_QDSD_PINGROUP(sdc2_clk, 0x1b4000, 14, 6),
 -      [181] = SDC_QDSD_PINGROUP(sdc2_cmd, 0x1b4000, 11, 3),
 -      [182] = SDC_QDSD_PINGROUP(sdc2_data, 0x1b4000, 9, 0),
 +      [175] = UFS_RESET(ufs_reset, 0xbe000),
 +      [176] = SDC_QDSD_PINGROUP(sdc1_rclk, 0xb3004, 0, 6),
 +      [177] = SDC_QDSD_PINGROUP(sdc1_clk, 0xb3000, 13, 6),
 +      [178] = SDC_QDSD_PINGROUP(sdc1_cmd, 0xb3000, 11, 3),
 +      [179] = SDC_QDSD_PINGROUP(sdc1_data, 0xb3000, 9, 0),
 +      [180] = SDC_QDSD_PINGROUP(sdc2_clk, 0xb4000, 14, 6),
 +      [181] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xb4000, 11, 3),
 +      [182] = SDC_QDSD_PINGROUP(sdc2_data, 0xb4000, 9, 0),
  };
  
+ static const struct msm_gpio_wakeirq_map sc7280_pdc_map[] = {
+       { 0, 134 }, { 3, 131 }, { 4, 121 }, { 7, 103 }, { 8, 155 },
+       { 11, 93 }, { 12, 78 }, { 15, 79 }, { 16, 80 }, { 18, 81 },
+       { 19, 107 }, { 20, 82 }, { 21, 83 }, { 23, 99 }, { 24, 86 },
+       { 25, 95 }, { 27, 158 }, { 28, 159 }, { 31, 90 }, { 32, 144 },
+       { 34, 77 }, { 35, 92 }, { 36, 157 }, { 39, 73 }, { 40, 97 },
+       { 41, 98 }, { 43, 85 }, { 44, 100 }, { 45, 101 }, { 47, 102 },
+       { 48, 74 }, { 51, 112 }, { 52, 156 }, { 54, 117 }, { 55, 84 },
+       { 56, 108 }, { 59, 110 }, { 60, 111 }, { 61, 123 }, { 63, 104 },
+       { 68, 127 }, { 72, 150 }, { 75, 133 }, { 77, 125 }, { 78, 105 },
+       { 79, 106 }, { 80, 118 }, { 81, 119 }, { 82, 162 }, { 83, 122 },
+       { 86, 75 }, { 88, 154 }, { 89, 124 }, { 90, 149 }, { 91, 76 },
+       { 93, 128 }, { 95, 160 }, { 101, 126 }, { 102, 96 }, { 103, 116 },
+       { 104, 114 }, { 112, 72 }, { 116, 135 }, { 117, 163 }, { 119, 137 },
+       { 121, 138 }, { 123, 139 }, { 125, 140 }, { 127, 141 }, { 128, 165 },
+       { 129, 143 }, { 130, 94 }, { 131, 145 }, { 133, 146 }, { 136, 147 },
+       { 140, 148 }, { 141, 115 }, { 142, 113 }, { 145, 130 }, { 148, 132 },
+       { 150, 87 }, { 151, 88 }, { 153, 89 }, { 155, 164 }, { 156, 129 },
+       { 157, 161 }, { 158, 120 }, { 161, 136 }, { 163, 142 }, { 172, 166 },
+       { 174, 167 },
+ };
  static const struct msm_pinctrl_soc_data sc7280_pinctrl = {
        .pins = sc7280_pins,
        .npins = ARRAY_SIZE(sc7280_pins),
        .groups = sc7280_groups,
        .ngroups = ARRAY_SIZE(sc7280_groups),
        .ngpios = 176,
+       .wakeirq_map = sc7280_pdc_map,
+       .nwakeirq_map = ARRAY_SIZE(sc7280_pdc_map),
  };
  
  static int sc7280_pinctrl_probe(struct platform_device *pdev)
diff --combined drivers/soc/tegra/pmc.c
@@@ -39,7 -39,6 +39,7 @@@
  #include <linux/platform_device.h>
  #include <linux/pm_domain.h>
  #include <linux/reboot.h>
 +#include <linux/regmap.h>
  #include <linux/reset.h>
  #include <linux/seq_file.h>
  #include <linux/slab.h>
  
  #define PMC_PWR_DET_VALUE             0xe4
  
 +#define PMC_USB_DEBOUNCE_DEL          0xec
 +#define PMC_USB_AO                    0xf0
 +
  #define PMC_SCRATCH41                 0x140
  
  #define PMC_WAKE2_MASK                        0x160
  #define IO_DPD2_STATUS                        0x1c4
  #define SEL_DPD_TIM                   0x1c8
  
 +#define PMC_UTMIP_UHSIC_TRIGGERS      0x1ec
 +#define PMC_UTMIP_UHSIC_SAVED_STATE   0x1f0
 +
 +#define PMC_UTMIP_TERM_PAD_CFG                0x1f8
 +#define PMC_UTMIP_UHSIC_SLEEP_CFG     0x1fc
 +#define PMC_UTMIP_UHSIC_FAKE          0x218
 +
  #define PMC_SCRATCH54                 0x258
  #define  PMC_SCRATCH54_DATA_SHIFT     8
  #define  PMC_SCRATCH54_ADDR_SHIFT     0
  #define  PMC_SCRATCH55_CHECKSUM_SHIFT 16
  #define  PMC_SCRATCH55_I2CSLV1_SHIFT  0
  
 +#define  PMC_UTMIP_UHSIC_LINE_WAKEUP  0x26c
 +
 +#define PMC_UTMIP_BIAS_MASTER_CNTRL   0x270
 +#define PMC_UTMIP_MASTER_CONFIG               0x274
 +#define PMC_UTMIP_UHSIC2_TRIGGERS     0x27c
 +#define PMC_UTMIP_MASTER2_CONFIG      0x29c
 +
  #define GPU_RG_CNTRL                  0x2d4
  
 +#define PMC_UTMIP_PAD_CFG0            0x4c0
 +#define PMC_UTMIP_UHSIC_SLEEP_CFG1    0x4d0
 +#define PMC_UTMIP_SLEEPWALK_P3                0x4e0
  /* Tegra186 and later */
  #define WAKE_AOWAKE_CNTRL(x) (0x000 + ((x) << 2))
  #define WAKE_AOWAKE_CNTRL_LEVEL (1 << 3)
@@@ -258,7 -237,6 +258,7 @@@ struct tegra_powergate 
        unsigned int id;
        struct clk **clks;
        unsigned int num_clks;
 +      unsigned long *clk_rates;
        struct reset_control *reset;
  };
  
@@@ -339,8 -317,6 +339,8 @@@ struct tegra_pmc_soc 
                                   bool invert);
        int (*irq_set_wake)(struct irq_data *data, unsigned int on);
        int (*irq_set_type)(struct irq_data *data, unsigned int type);
 +      int (*powergate_set)(struct tegra_pmc *pmc, unsigned int id,
 +                           bool new_state);
  
        const char * const *reset_sources;
        unsigned int num_reset_sources;
        const struct pmc_clk_init_data *pmc_clks_data;
        unsigned int num_pmc_clks;
        bool has_blink_output;
 +      bool has_usb_sleepwalk;
  };
  
  /**
@@@ -542,63 -517,6 +542,63 @@@ static int tegra_powergate_lookup(struc
        return -ENODEV;
  }
  
 +static int tegra20_powergate_set(struct tegra_pmc *pmc, unsigned int id,
 +                               bool new_state)
 +{
 +      unsigned int retries = 100;
 +      bool status;
 +      int ret;
 +
 +      /*
 +       * As per TRM documentation, the toggle command will be dropped by PMC
 +       * if there is contention with a HW-initiated toggling (i.e. CPU core
 +       * power-gated), the command should be retried in that case.
 +       */
 +      do {
 +              tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
 +
 +              /* wait for PMC to execute the command */
 +              ret = readx_poll_timeout(tegra_powergate_state, id, status,
 +                                       status == new_state, 1, 10);
 +      } while (ret == -ETIMEDOUT && retries--);
 +
 +      return ret;
 +}
 +
 +static inline bool tegra_powergate_toggle_ready(struct tegra_pmc *pmc)
 +{
 +      return !(tegra_pmc_readl(pmc, PWRGATE_TOGGLE) & PWRGATE_TOGGLE_START);
 +}
 +
 +static int tegra114_powergate_set(struct tegra_pmc *pmc, unsigned int id,
 +                                bool new_state)
 +{
 +      bool status;
 +      int err;
 +
 +      /* wait while PMC power gating is contended */
 +      err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
 +                               status == true, 1, 100);
 +      if (err)
 +              return err;
 +
 +      tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
 +
 +      /* wait for PMC to accept the command */
 +      err = readx_poll_timeout(tegra_powergate_toggle_ready, pmc, status,
 +                               status == true, 1, 100);
 +      if (err)
 +              return err;
 +
 +      /* wait for PMC to execute the command */
 +      err = readx_poll_timeout(tegra_powergate_state, id, status,
 +                               status == new_state, 10, 100000);
 +      if (err)
 +              return err;
 +
 +      return 0;
 +}
 +
  /**
   * tegra_powergate_set() - set the state of a partition
   * @pmc: power management controller
  static int tegra_powergate_set(struct tegra_pmc *pmc, unsigned int id,
                               bool new_state)
  {
 -      bool status;
        int err;
  
        if (id == TEGRA_POWERGATE_3D && pmc->soc->has_gpu_clamps)
                return 0;
        }
  
 -      tegra_pmc_writel(pmc, PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
 -
 -      err = readx_poll_timeout(tegra_powergate_state, id, status,
 -                               status == new_state, 10, 100000);
 +      err = pmc->soc->powergate_set(pmc, id, new_state);
  
        mutex_unlock(&pmc->powergates_lock);
  
@@@ -664,57 -586,6 +664,57 @@@ out
        return 0;
  }
  
 +static int tegra_powergate_prepare_clocks(struct tegra_powergate *pg)
 +{
 +      unsigned long safe_rate = 100 * 1000 * 1000;
 +      unsigned int i;
 +      int err;
 +
 +      for (i = 0; i < pg->num_clks; i++) {
 +              pg->clk_rates[i] = clk_get_rate(pg->clks[i]);
 +
 +              if (!pg->clk_rates[i]) {
 +                      err = -EINVAL;
 +                      goto out;
 +              }
 +
 +              if (pg->clk_rates[i] <= safe_rate)
 +                      continue;
 +
 +              /*
 +               * We don't know whether voltage state is okay for the
 +               * current clock rate, hence it's better to temporally
 +               * switch clock to a safe rate which is suitable for
 +               * all voltages, before enabling the clock.
 +               */
 +              err = clk_set_rate(pg->clks[i], safe_rate);
 +              if (err)
 +                      goto out;
 +      }
 +
 +      return 0;
 +
 +out:
 +      while (i--)
 +              clk_set_rate(pg->clks[i], pg->clk_rates[i]);
 +
 +      return err;
 +}
 +
 +static int tegra_powergate_unprepare_clocks(struct tegra_powergate *pg)
 +{
 +      unsigned int i;
 +      int err;
 +
 +      for (i = 0; i < pg->num_clks; i++) {
 +              err = clk_set_rate(pg->clks[i], pg->clk_rates[i]);
 +              if (err)
 +                      return err;
 +      }
 +
 +      return 0;
 +}
 +
  static void tegra_powergate_disable_clocks(struct tegra_powergate *pg)
  {
        unsigned int i;
@@@ -765,13 -636,9 +765,13 @@@ static int tegra_powergate_power_up(str
  
        usleep_range(10, 20);
  
 +      err = tegra_powergate_prepare_clocks(pg);
 +      if (err)
 +              goto powergate_off;
 +
        err = tegra_powergate_enable_clocks(pg);
        if (err)
 -              goto disable_clks;
 +              goto unprepare_clks;
  
        usleep_range(10, 20);
  
        if (disable_clocks)
                tegra_powergate_disable_clocks(pg);
  
 +      err = tegra_powergate_unprepare_clocks(pg);
 +      if (err)
 +              return err;
 +
        return 0;
  
  disable_clks:
        tegra_powergate_disable_clocks(pg);
        usleep_range(10, 20);
  
 +unprepare_clks:
 +      tegra_powergate_unprepare_clocks(pg);
 +
  powergate_off:
        tegra_powergate_set(pg->pmc, pg->id, false);
  
@@@ -818,14 -678,10 +818,14 @@@ static int tegra_powergate_power_down(s
  {
        int err;
  
 -      err = tegra_powergate_enable_clocks(pg);
 +      err = tegra_powergate_prepare_clocks(pg);
        if (err)
                return err;
  
 +      err = tegra_powergate_enable_clocks(pg);
 +      if (err)
 +              goto unprepare_clks;
 +
        usleep_range(10, 20);
  
        err = reset_control_assert(pg->reset);
        if (err)
                goto assert_resets;
  
 +      err = tegra_powergate_unprepare_clocks(pg);
 +      if (err)
 +              return err;
 +
        return 0;
  
  assert_resets:
  disable_clks:
        tegra_powergate_disable_clocks(pg);
  
 +unprepare_clks:
 +      tegra_powergate_unprepare_clocks(pg);
 +
        return err;
  }
  
@@@ -890,8 -739,7 +890,8 @@@ static int tegra_genpd_power_off(struc
  
        err = reset_control_acquire(pg->reset);
        if (err < 0) {
 -              pr_err("failed to acquire resets: %d\n", err);
 +              dev_err(dev, "failed to acquire resets for PM domain %s: %d\n",
 +                      pg->genpd.name, err);
                return err;
        }
  
@@@ -978,12 -826,6 +978,12 @@@ int tegra_powergate_sequence_power_up(u
        if (!pg)
                return -ENOMEM;
  
 +      pg->clk_rates = kzalloc(sizeof(*pg->clk_rates), GFP_KERNEL);
 +      if (!pg->clk_rates) {
 +              kfree(pg->clks);
 +              return -ENOMEM;
 +      }
 +
        pg->id = id;
        pg->clks = &clk;
        pg->num_clks = 1;
                dev_err(pmc->dev, "failed to turn on partition %d: %d\n", id,
                        err);
  
 +      kfree(pg->clk_rates);
        kfree(pg);
  
        return err;
@@@ -1146,12 -987,6 +1146,12 @@@ static int tegra_powergate_of_get_clks(
        if (!pg->clks)
                return -ENOMEM;
  
 +      pg->clk_rates = kcalloc(count, sizeof(*pg->clk_rates), GFP_KERNEL);
 +      if (!pg->clk_rates) {
 +              kfree(pg->clks);
 +              return -ENOMEM;
 +      }
 +
        for (i = 0; i < count; i++) {
                pg->clks[i] = of_clk_get(np, i);
                if (IS_ERR(pg->clks[i])) {
@@@ -1168,7 -1003,6 +1168,7 @@@ err
        while (i--)
                clk_put(pg->clks[i]);
  
 +      kfree(pg->clk_rates);
        kfree(pg->clks);
  
        return err;
@@@ -1904,7 -1738,7 +1904,7 @@@ static int tegra_io_pad_pinconf_get(str
                arg = ret;
                break;
  
-       case PIN_CONFIG_LOW_POWER_MODE:
+       case PIN_CONFIG_MODE_LOW_POWER:
                ret = tegra_io_pad_is_powered(pmc, pad->id);
                if (ret < 0)
                        return ret;
@@@ -1941,7 -1775,7 +1941,7 @@@ static int tegra_io_pad_pinconf_set(str
                arg = pinconf_to_config_argument(configs[i]);
  
                switch (param) {
-               case PIN_CONFIG_LOW_POWER_MODE:
+               case PIN_CONFIG_MODE_LOW_POWER:
                        if (arg)
                                err = tegra_io_pad_power_disable(pad->id);
                        else
@@@ -2609,67 -2443,6 +2609,67 @@@ static void tegra_pmc_clock_register(st
                         err);
  }
  
 +static const struct regmap_range pmc_usb_sleepwalk_ranges[] = {
 +      regmap_reg_range(PMC_USB_DEBOUNCE_DEL, PMC_USB_AO),
 +      regmap_reg_range(PMC_UTMIP_UHSIC_TRIGGERS, PMC_UTMIP_UHSIC_SAVED_STATE),
 +      regmap_reg_range(PMC_UTMIP_TERM_PAD_CFG, PMC_UTMIP_UHSIC_FAKE),
 +      regmap_reg_range(PMC_UTMIP_UHSIC_LINE_WAKEUP, PMC_UTMIP_UHSIC_LINE_WAKEUP),
 +      regmap_reg_range(PMC_UTMIP_BIAS_MASTER_CNTRL, PMC_UTMIP_MASTER_CONFIG),
 +      regmap_reg_range(PMC_UTMIP_UHSIC2_TRIGGERS, PMC_UTMIP_MASTER2_CONFIG),
 +      regmap_reg_range(PMC_UTMIP_PAD_CFG0, PMC_UTMIP_UHSIC_SLEEP_CFG1),
 +      regmap_reg_range(PMC_UTMIP_SLEEPWALK_P3, PMC_UTMIP_SLEEPWALK_P3),
 +};
 +
 +static const struct regmap_access_table pmc_usb_sleepwalk_table = {
 +      .yes_ranges = pmc_usb_sleepwalk_ranges,
 +      .n_yes_ranges = ARRAY_SIZE(pmc_usb_sleepwalk_ranges),
 +};
 +
 +static int tegra_pmc_regmap_readl(void *context, unsigned int offset, unsigned int *value)
 +{
 +      struct tegra_pmc *pmc = context;
 +
 +      *value = tegra_pmc_readl(pmc, offset);
 +      return 0;
 +}
 +
 +static int tegra_pmc_regmap_writel(void *context, unsigned int offset, unsigned int value)
 +{
 +      struct tegra_pmc *pmc = context;
 +
 +      tegra_pmc_writel(pmc, value, offset);
 +      return 0;
 +}
 +
 +static const struct regmap_config usb_sleepwalk_regmap_config = {
 +      .name = "usb_sleepwalk",
 +      .reg_bits = 32,
 +      .val_bits = 32,
 +      .reg_stride = 4,
 +      .fast_io = true,
 +      .rd_table = &pmc_usb_sleepwalk_table,
 +      .wr_table = &pmc_usb_sleepwalk_table,
 +      .reg_read = tegra_pmc_regmap_readl,
 +      .reg_write = tegra_pmc_regmap_writel,
 +};
 +
 +static int tegra_pmc_regmap_init(struct tegra_pmc *pmc)
 +{
 +      struct regmap *regmap;
 +      int err;
 +
 +      if (pmc->soc->has_usb_sleepwalk) {
 +              regmap = devm_regmap_init(pmc->dev, NULL, pmc, &usb_sleepwalk_regmap_config);
 +              if (IS_ERR(regmap)) {
 +                      err = PTR_ERR(regmap);
 +                      dev_err(pmc->dev, "failed to allocate register map (%d)\n", err);
 +                      return err;
 +              }
 +      }
 +
 +      return 0;
 +}
 +
  static int tegra_pmc_probe(struct platform_device *pdev)
  {
        void __iomem *base;
        if (err)
                goto cleanup_restart_handler;
  
 +      err = tegra_pmc_regmap_init(pmc);
 +      if (err < 0)
 +              goto cleanup_restart_handler;
 +
        err = tegra_powergate_init(pmc, pdev->dev.of_node);
        if (err < 0)
                goto cleanup_powergates;
@@@ -2930,7 -2699,6 +2930,7 @@@ static const struct tegra_pmc_soc tegra
        .regs = &tegra20_pmc_regs,
        .init = tegra20_pmc_init,
        .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
 +      .powergate_set = tegra20_powergate_set,
        .reset_sources = NULL,
        .num_reset_sources = 0,
        .reset_levels = NULL,
        .pmc_clks_data = NULL,
        .num_pmc_clks = 0,
        .has_blink_output = true,
 +      .has_usb_sleepwalk = false,
  };
  
  static const char * const tegra30_powergates[] = {
@@@ -2990,7 -2757,6 +2990,7 @@@ static const struct tegra_pmc_soc tegra
        .regs = &tegra20_pmc_regs,
        .init = tegra20_pmc_init,
        .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
 +      .powergate_set = tegra20_powergate_set,
        .reset_sources = tegra30_reset_sources,
        .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
        .reset_levels = NULL,
        .pmc_clks_data = tegra_pmc_clks_data,
        .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
        .has_blink_output = true,
 +      .has_usb_sleepwalk = false,
  };
  
  static const char * const tegra114_powergates[] = {
@@@ -3046,7 -2811,6 +3046,7 @@@ static const struct tegra_pmc_soc tegra
        .regs = &tegra20_pmc_regs,
        .init = tegra20_pmc_init,
        .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
 +      .powergate_set = tegra114_powergate_set,
        .reset_sources = tegra30_reset_sources,
        .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
        .reset_levels = NULL,
        .pmc_clks_data = tegra_pmc_clks_data,
        .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
        .has_blink_output = true,
 +      .has_usb_sleepwalk = false,
  };
  
  static const char * const tegra124_powergates[] = {
@@@ -3162,7 -2925,6 +3162,7 @@@ static const struct tegra_pmc_soc tegra
        .regs = &tegra20_pmc_regs,
        .init = tegra20_pmc_init,
        .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
 +      .powergate_set = tegra114_powergate_set,
        .reset_sources = tegra30_reset_sources,
        .num_reset_sources = ARRAY_SIZE(tegra30_reset_sources),
        .reset_levels = NULL,
        .pmc_clks_data = tegra_pmc_clks_data,
        .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
        .has_blink_output = true,
 +      .has_usb_sleepwalk = true,
  };
  
  static const char * const tegra210_powergates[] = {
@@@ -3287,7 -3048,6 +3287,7 @@@ static const struct tegra_pmc_soc tegra
        .regs = &tegra20_pmc_regs,
        .init = tegra20_pmc_init,
        .setup_irq_polarity = tegra20_pmc_setup_irq_polarity,
 +      .powergate_set = tegra114_powergate_set,
        .irq_set_wake = tegra210_pmc_irq_set_wake,
        .irq_set_type = tegra210_pmc_irq_set_type,
        .reset_sources = tegra210_reset_sources,
        .pmc_clks_data = tegra_pmc_clks_data,
        .num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
        .has_blink_output = true,
 +      .has_usb_sleepwalk = true,
  };
  
  #define TEGRA186_IO_PAD_TABLE(_pad)                                          \
@@@ -3455,7 -3214,6 +3455,7 @@@ static const struct tegra_pmc_soc tegra
        .pmc_clks_data = NULL,
        .num_pmc_clks = 0,
        .has_blink_output = false,
 +      .has_usb_sleepwalk = false,
  };
  
  #define TEGRA194_IO_PAD_TABLE(_pad)                                              \
@@@ -3589,7 -3347,6 +3589,7 @@@ static const struct tegra_pmc_soc tegra
        .pmc_clks_data = NULL,
        .num_pmc_clks = 0,
        .has_blink_output = false,
 +      .has_usb_sleepwalk = false,
  };
  
  static const struct tegra_pmc_regs tegra234_pmc_regs = {
@@@ -72,6 -72,12 +72,12 @@@ enum pm_api_id 
        PM_FPGA_LOAD = 22,
        PM_FPGA_GET_STATUS = 23,
        PM_GET_CHIPID = 24,
+       PM_PINCTRL_REQUEST = 28,
+       PM_PINCTRL_RELEASE = 29,
+       PM_PINCTRL_GET_FUNCTION = 30,
+       PM_PINCTRL_SET_FUNCTION = 31,
+       PM_PINCTRL_CONFIG_PARAM_GET = 32,
+       PM_PINCTRL_CONFIG_PARAM_SET = 33,
        PM_IOCTL = 34,
        PM_QUERY_DATA = 35,
        PM_CLOCK_ENABLE = 36,
@@@ -122,6 -128,12 +128,12 @@@ enum pm_query_id 
        PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS = 3,
        PM_QID_CLOCK_GET_PARENTS = 4,
        PM_QID_CLOCK_GET_ATTRIBUTES = 5,
+       PM_QID_PINCTRL_GET_NUM_PINS = 6,
+       PM_QID_PINCTRL_GET_NUM_FUNCTIONS = 7,
+       PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS = 8,
+       PM_QID_PINCTRL_GET_FUNCTION_NAME = 9,
+       PM_QID_PINCTRL_GET_FUNCTION_GROUPS = 10,
+       PM_QID_PINCTRL_GET_PIN_GROUPS = 11,
        PM_QID_CLOCK_GET_NUM_CLOCKS = 12,
        PM_QID_CLOCK_GET_MAX_DIVISOR = 13,
  };
@@@ -285,6 -297,44 +297,44 @@@ enum dll_reset_type 
        PM_DLL_RESET_PULSE = 2,
  };
  
+ enum pm_pinctrl_config_param {
+       PM_PINCTRL_CONFIG_SLEW_RATE = 0,
+       PM_PINCTRL_CONFIG_BIAS_STATUS = 1,
+       PM_PINCTRL_CONFIG_PULL_CTRL = 2,
+       PM_PINCTRL_CONFIG_SCHMITT_CMOS = 3,
+       PM_PINCTRL_CONFIG_DRIVE_STRENGTH = 4,
+       PM_PINCTRL_CONFIG_VOLTAGE_STATUS = 5,
+       PM_PINCTRL_CONFIG_TRI_STATE = 6,
+       PM_PINCTRL_CONFIG_MAX = 7,
+ };
+ enum pm_pinctrl_slew_rate {
+       PM_PINCTRL_SLEW_RATE_FAST = 0,
+       PM_PINCTRL_SLEW_RATE_SLOW = 1,
+ };
+ enum pm_pinctrl_bias_status {
+       PM_PINCTRL_BIAS_DISABLE = 0,
+       PM_PINCTRL_BIAS_ENABLE = 1,
+ };
+ enum pm_pinctrl_pull_ctrl {
+       PM_PINCTRL_BIAS_PULL_DOWN = 0,
+       PM_PINCTRL_BIAS_PULL_UP = 1,
+ };
+ enum pm_pinctrl_schmitt_cmos {
+       PM_PINCTRL_INPUT_TYPE_CMOS = 0,
+       PM_PINCTRL_INPUT_TYPE_SCHMITT = 1,
+ };
+ enum pm_pinctrl_drive_strength {
+       PM_PINCTRL_DRIVE_STRENGTH_2MA = 0,
+       PM_PINCTRL_DRIVE_STRENGTH_4MA = 1,
+       PM_PINCTRL_DRIVE_STRENGTH_8MA = 2,
+       PM_PINCTRL_DRIVE_STRENGTH_12MA = 3,
+ };
  enum zynqmp_pm_shutdown_type {
        ZYNQMP_PM_SHUTDOWN_TYPE_SHUTDOWN = 0,
        ZYNQMP_PM_SHUTDOWN_TYPE_RESET = 1,
@@@ -353,7 -403,20 +403,15 @@@ int zynqmp_pm_write_pggs(u32 index, u3
  int zynqmp_pm_read_pggs(u32 index, u32 *value);
  int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype);
  int zynqmp_pm_set_boot_health_status(u32 value);
+ int zynqmp_pm_pinctrl_request(const u32 pin);
+ int zynqmp_pm_pinctrl_release(const u32 pin);
+ int zynqmp_pm_pinctrl_get_function(const u32 pin, u32 *id);
+ int zynqmp_pm_pinctrl_set_function(const u32 pin, const u32 id);
+ int zynqmp_pm_pinctrl_get_config(const u32 pin, const u32 param,
+                                u32 *value);
+ int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
+                                u32 value);
  #else
 -static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
 -{
 -      return ERR_PTR(-ENODEV);
 -}
 -
  static inline int zynqmp_pm_get_api_version(u32 *version)
  {
        return -ENODEV;
@@@ -532,6 -595,38 +590,38 @@@ static inline int zynqmp_pm_set_boot_he
  {
        return -ENODEV;
  }
+ static inline int zynqmp_pm_pinctrl_request(const u32 pin)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_pinctrl_release(const u32 pin)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_pinctrl_get_function(const u32 pin, u32 *id)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_pinctrl_set_function(const u32 pin, const u32 id)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_pinctrl_get_config(const u32 pin, const u32 param,
+                                              u32 *value)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
+                                              u32 value)
+ {
+       return -ENODEV;
+ }
  #endif
  
  #endif /* __FIRMWARE_ZYNQMP_H__ */