Merge tag 'mfd-next-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 16 Jul 2019 03:18:40 +0000 (20:18 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 16 Jul 2019 03:18:40 +0000 (20:18 -0700)
Pull MFD updates from Lee Jones:
 "Core Frameworks:
   - Set 'struct device' fwnode when registering a new device

  New Drivers:
   - Add support for ROHM BD70528 PMIC

  New Device Support:
   - Add support for LP87561 4-Phase Regulator to TI LP87565 PMIC
   - Add support for RK809 and RK817 to Rockchip RK808
   - Add support for Lid Angle to ChromeOS core
   - Add support for CS47L15 CODEC to Madera core
   - Add support for CS47L92 CODEC to Madera core
   - Add support for ChromeOS (legacy) Accelerometers in ChromeOS core
   - Add support for Add Intel Elkhart Lake PCH to Intel LPSS

  New Functionality:
   - Provide regulator supply information when registering; madera-core
   - Additional Device Tree support; lp87565, madera, cros-ec, rohm,bd71837-pmic
   - Allow over-riding power button press via Device Tree; rohm-bd718x7
   - Differentiate between running processors; cros_ec_dev

  Fix-ups:
   - Big header file update; cros_ec_commands.h
   - Split header per-subsystem; rohm-bd718x7
   - Remove superfluous code; menelaus, cs5535-mfd, cs47lXX-tables
   - Trivial; sorting, coding style; intel-lpss-pci
   - Only remove Power Off functionality if set locally; rk808
   - Make use for Power Off Prepare(); rk808
   - Fix spelling mistake in header guards; stmfx
   - Properly free IDA resources
   - SPDX fixups; cs47lXX-tables, madera
   - Error path fixups; hi655x-pmic

  Bug Fixes:
   - Add missing break in case() statement
   - Repair undefined behaviour when not initialising variables; arizona-core, madera-core
   - Fix reference to Device Tree documentation; madera"

* tag 'mfd-next-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (45 commits)
  mfd: hi655x-pmic: Fix missing return value check for devm_regmap_init_mmio_clk
  mfd: madera: Fixup SPDX headers
  mfd: madera: Remove some unused registers and fix some defaults
  mfd: intel-lpss: Release IDA resources
  mfd: intel-lpss: Add Intel Elkhart Lake PCH PCI IDs
  mfd: cs5535-mfd: Remove ifdef OLPC noise
  mfd: stmfx: Fix macro definition spelling
  dt-bindings: mfd: Add link to ROHM BD71847 Datasheet
  MAINAINERS: Swap words in INTEL PMIC MULTIFUNCTION DEVICE DRIVERS
  mfd: cros_ec_dev: Register cros_ec_accel_legacy driver as a subdevice
  mfd: rk808: Prepare rk805 for poweroff
  mfd: rk808: Check pm_power_off pointer
  mfd: cros_ec: differentiate SCP from EC by feature bit
  dt-bindings: Add binding for cros-ec-rpmsg
  mfd: madera: Add Madera core support for CS47L92
  mfd: madera: Add Madera core support for CS47L15
  mfd: madera: Update DT bindings to add additional CODECs
  mfd: madera: Add supply mapping for MICVDD
  mfd: madera: Fix potential uninitialised use of variable
  mfd: madera: Fix bad reference to pinctrl.txt file
  ...

27 files changed:
1  2 
MAINTAINERS
drivers/clk/clk-rk808.c
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/mfd/Kconfig
drivers/mfd/arizona-core.c
drivers/mfd/cros_ec_dev.c
drivers/mfd/cs5535-mfd.c
drivers/mfd/hi655x-pmic.c
drivers/mfd/intel-lpss-pci.c
drivers/mfd/intel-lpss.c
drivers/mfd/lp87565.c
drivers/mfd/madera.h
drivers/mfd/menelaus.c
drivers/mfd/mfd-core.c
drivers/mfd/rk808.c
drivers/power/supply/Kconfig
drivers/regulator/Kconfig
drivers/regulator/bd718x7-regulator.c
drivers/regulator/lp87565-regulator.c
drivers/regulator/rk808-regulator.c
drivers/rtc/Kconfig
drivers/rtc/rtc-rk808.c
include/linux/mfd/cros_ec.h
include/linux/mfd/lp87565.h
include/linux/mfd/madera/pdata.h
include/linux/mfd/rk808.h

diff --combined MAINTAINERS
index 8478de80b23d73ce34bc28fe8f6606d412069cd4,bf10f2fb20bc8618c268587e37f5e2b5f6fac155..a7901e1df0584166f9d777e5e84a418a614a239b
@@@ -321,7 -321,7 +321,7 @@@ F: drivers/pnp/pnpacpi
  F:    include/linux/acpi.h
  F:    include/linux/fwnode.h
  F:    include/acpi/
 -F:    Documentation/acpi/
 +F:    Documentation/firmware-guide/acpi/
  F:    Documentation/ABI/testing/sysfs-bus-acpi
  F:    Documentation/ABI/testing/configfs-acpi
  F:    drivers/pci/*acpi*
@@@ -364,7 -364,7 +364,7 @@@ F: drivers/acpi/fan.
  
  ACPI FOR ARM64 (ACPI/arm64)
  M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 -M:    Hanjun Guo <hanjun.guo@linaro.org>
 +M:    Hanjun Guo <guohanjun@huawei.com>
  M:    Sudeep Holla <sudeep.holla@arm.com>
  L:    linux-acpi@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -551,7 -551,6 +551,7 @@@ W: http://wiki.analog.com/ADXL34
  W:    http://ez.analog.com/community/linux-device-drivers
  S:    Supported
  F:    drivers/input/misc/adxl34x.c
 +F:    Documentation/devicetree/bindings/iio/accel/adi,adxl345.yaml
  
  ADXL372 THREE-AXIS DIGITAL ACCELEROMETER DRIVER
  M:    Stefan Popa <stefan.popa@analog.com>
@@@ -560,7 -559,7 +560,7 @@@ S: Supporte
  F:    drivers/iio/accel/adxl372.c
  F:    drivers/iio/accel/adxl372_spi.c
  F:    drivers/iio/accel/adxl372_i2c.c
 -F:    Documentation/devicetree/bindings/iio/accel/adxl372.txt
 +F:    Documentation/devicetree/bindings/iio/accel/adi,adxl372.yaml
  
  AF9013 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
@@@ -669,13 -668,6 +669,13 @@@ S:       Maintaine
  F:    Documentation/i2c/busses/i2c-ali1563
  F:    drivers/i2c/busses/i2c-ali1563.c
  
 +ALLEGRO DVT VIDEO IP CORE DRIVER
 +M:    Michael Tretter <m.tretter@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/staging/media/allegro-dvt/
 +
  ALLWINNER SECURITY SYSTEM
  M:    Corentin Labbe <clabbe.montjoie@gmail.com>
  L:    linux-crypto@vger.kernel.org
@@@ -704,7 -696,6 +704,7 @@@ F: drivers/input/mouse/alps.
  ALTERA I2C CONTROLLER DRIVER
  M:    Thor Thayer <thor.thayer@linux.intel.com>
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-altera.txt
  F:    drivers/i2c/busses/i2c-altera.c
  
  ALTERA MAILBOX DRIVER
@@@ -917,17 -908,8 +917,17 @@@ S:       Supporte
  F:    drivers/iio/adc/ad7768-1.c
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7768-1.txt
  
 +ANALOG DEVICES INC AD7780 DRIVER
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
 +M:    Renato Lui Geh <renatogeh@gmail.com>
 +L:    linux-iio@vger.kernel.org
 +W:    http://ez.analog.com/community/linux-device-drivers
 +S:    Supported
 +F:    drivers/iio/adc/ad7780.c
 +F:    Documentation/devicetree/bindings/iio/adc/adi,ad7780.yaml
 +
  ANALOG DEVICES INC AD9389B DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/i2c/ad9389b*
@@@ -938,13 -920,6 +938,13 @@@ S:       Supporte
  F:    drivers/mux/adgs1408.c
  F:    Documentation/devicetree/bindings/mux/adi,adgs1408.txt
  
 +ANALOG DEVICES INC ADIS DRIVER LIBRARY
 +M:    Alexandru Ardelean <alexandru.ardelean@analog.com>
 +S:    Supported
 +L:    linux-iio@vger.kernel.org
 +F:    include/linux/iio/imu/adis.h
 +F:    drivers/iio/imu/adis.c
 +
  ANALOG DEVICES INC ADP5061 DRIVER
  M:    Stefan Popa <stefan.popa@analog.com>
  L:    linux-pm@vger.kernel.org
@@@ -966,19 -941,19 +966,19 @@@ S:      Maintaine
  F:    drivers/media/i2c/adv748x/*
  
  ANALOG DEVICES INC ADV7511 DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/i2c/adv7511*
  
  ANALOG DEVICES INC ADV7604 DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/i2c/adv7604*
  
  ANALOG DEVICES INC ADV7842 DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/i2c/adv7842*
@@@ -1164,15 -1139,6 +1164,15 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/i2c/aptina-pll.*
  
 +AQUANTIA ETHERNET DRIVER (atlantic)
 +M:    Igor Russkikh <igor.russkikh@aquantia.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +W:    http://www.aquantia.com
 +Q:    http://patchwork.ozlabs.org/project/netdev/list/
 +F:    drivers/net/ethernet/aquantia/atlantic/
 +F:    Documentation/networking/device_drivers/aquantia/atlantic.txt
 +
  ARC FRAMEBUFFER DRIVER
  M:    Jaya Kumar <jayalk@intworks.biz>
  S:    Maintained
@@@ -1208,7 -1174,6 +1208,7 @@@ S:      Maintaine
  F:    Documentation/devicetree/bindings/arm/arm-boards
  F:    Documentation/devicetree/bindings/auxdisplay/arm-charlcd.txt
  F:    Documentation/devicetree/bindings/clock/arm-integrator.txt
 +F:    Documentation/devicetree/bindings/i2c/i2c-versatile.txt
  F:    Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.txt
  F:    Documentation/devicetree/bindings/mtd/arm-versatile.txt
  F:    arch/arm/mach-integrator/
@@@ -1268,7 -1233,7 +1268,7 @@@ F:      arch/arm/lib/floppydma.
  F:    arch/arm/include/asm/floppy.h
  
  ARM PMU PROFILING AND DEBUGGING
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  M:    Mark Rutland <mark.rutland@arm.com>
  S:    Maintained
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1323,7 -1288,7 +1323,7 @@@ ARM PRIMECELL SSP PL022 SPI DRIVE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/spi_pl022.txt
 +F:    Documentation/devicetree/bindings/spi/spi-pl022.yaml
  F:    drivers/spi/spi-pl022.c
  
  ARM PRIMECELL UART PL010 AND PL011 DRIVERS
@@@ -1339,14 -1304,8 +1339,14 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/interrupt-controller/arm,vic.txt
  F:    drivers/irqchip/irq-vic.c
  
 +AMAZON ANNAPURNA LABS FIC DRIVER
 +M:    Talel Shenhar <talel@amazon.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.txt
 +F:    drivers/irqchip/irq-al-fic.c
 +
  ARM SMMU DRIVERS
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  R:    Robin Murphy <robin.murphy@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1822,7 -1781,6 +1822,7 @@@ ARM/LPC18XX ARCHITECTUR
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
  F:    arch/arm/boot/dts/lpc43*
  F:    drivers/i2c/busses/i2c-lpc2k.c
  F:    drivers/memory/pl172.c
@@@ -1836,7 -1794,6 +1836,7 @@@ M:      Sylvain Lemieux <slemieux.tyco@gmail
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  T:    git git://github.com/vzapolskiy/linux-lpc32xx.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-pnx.txt
  F:    arch/arm/boot/dts/lpc32*
  F:    arch/arm/mach-lpc32xx/
  F:    drivers/i2c/busses/i2c-pnx.c
@@@ -1961,8 -1918,6 +1961,8 @@@ ARM/NOMADIK/U300/Ux500 ARCHITECTURE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-nomadik.txt
 +F:    Documentation/devicetree/bindings/i2c/i2c-stu300.txt
  F:    arch/arm/mach-nomadik/
  F:    arch/arm/mach-u300/
  F:    arch/arm/mach-ux500/
@@@ -2124,7 -2079,7 +2124,7 @@@ F:      drivers/tty/serial/msm_serial.
  F:    drivers/usb/dwc3/dwc3-qcom.c
  F:    include/dt-bindings/*/qcom*
  F:    include/linux/*/qcom*
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git
  
  ARM/RADISYS ENP2611 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -2140,7 -2095,7 +2140,7 @@@ F:      arch/arm/boot/dts/rda8810pl-
  F:    drivers/clocksource/timer-rda.c
  F:    drivers/irqchip/irq-rda-intc.c
  F:    drivers/tty/serial/rda-uart.c
 -F:    Documentation/devicetree/bindings/arm/rda.txt
 +F:    Documentation/devicetree/bindings/arm/rda.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt
  F:    Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt
  F:    Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt
@@@ -2185,7 -2140,6 +2185,7 @@@ L:      linux-arm-kernel@lists.infradead.or
  L:    linux-rockchip@lists.infradead.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-rk3x.txt
  F:    arch/arm/boot/dts/rk3*
  F:    arch/arm/boot/dts/rv1108*
  F:    arch/arm/mach-rockchip/
@@@ -2321,7 -2275,6 +2321,7 @@@ M:      Patrice Chotard <patrice.chotard@st.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.stlinux.com
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-st.txt
  F:    arch/arm/mach-sti/
  F:    arch/arm/boot/dts/sti*
  F:    drivers/char/hw_random/st-rng.c
@@@ -2383,7 -2336,7 +2383,7 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  
  ARM/TEGRA HDMI CEC SUBSYSTEM SUPPORT
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-tegra@vger.kernel.org
  L:    linux-media@vger.kernel.org
  S:    Maintained
@@@ -2513,7 -2466,6 +2513,7 @@@ ARM/VT8500 ARM ARCHITECTUR
  M:    Tony Prisk <linux@prisktech.co.nz>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-wmt.txt
  F:    arch/arm/mach-vt8500/
  F:    drivers/clocksource/timer-vt8500.c
  F:    drivers/i2c/busses/i2c-wmt.c
@@@ -2579,8 -2531,6 +2579,8 @@@ F:      drivers/cpuidle/cpuidle-zynq.
  F:    drivers/block/xsysace.c
  N:    zynq
  N:    xilinx
 +F:    Documentation/devicetree/bindings/i2c/i2c-cadence.txt
 +F:    Documentation/devicetree/bindings/i2c/i2c-xiic.txt
  F:    drivers/clocksource/timer-cadence-ttc.c
  F:    drivers/i2c/busses/i2c-cadence.c
  F:    drivers/mmc/host/sdhci-of-arasan.c
@@@ -2589,7 -2539,7 +2589,7 @@@ F:      drivers/i2c/busses/i2c-xiic.
  
  ARM64 PORT (AARCH64 ARCHITECTURE)
  M:    Catalin Marinas <catalin.marinas@arm.com>
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git
  S:    Maintained
@@@ -2625,15 -2575,6 +2625,15 @@@ S:    Maintaine
  F:    Documentation/hwmon/asc7621.rst
  F:    drivers/hwmon/asc7621.c
  
 +ASPEED PINCTRL DRIVERS
 +M:    Andrew Jeffery <andrew@aj.id.au>
 +L:    linux-aspeed@lists.ozlabs.org (moderated for non-subscribers)
 +L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/pinctrl/aspeed/
 +F:    Documentation/devicetree/bindings/pinctrl/aspeed,*
 +
  ASPEED VIDEO ENGINE DRIVER
  M:    Eddie James <eajames@linux.ibm.com>
  L:    linux-media@vger.kernel.org
@@@ -2686,7 -2627,7 +2686,7 @@@ F:      Documentation/devicetree/bindings/ee
  F:    drivers/misc/eeprom/at24.c
  
  ATA OVER ETHERNET (AOE) DRIVER
 -M:    "Ed L. Cashin" <ed.cashin@acm.org>
 +M:    "Justin Sanders" <justin@coraid.com>
  W:    http://www.openaoe.org/
  S:    Supported
  F:    Documentation/aoe/
@@@ -2782,7 -2723,7 +2782,7 @@@ S:      Maintaine
  F:    drivers/net/wireless/atmel/atmel*
  
  ATOMIC INFRASTRUCTURE
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  M:    Peter Zijlstra <peterz@infradead.org>
  R:    Boqun Feng <boqun.feng@gmail.com>
  L:    linux-kernel@vger.kernel.org
@@@ -2827,7 -2768,7 +2827,7 @@@ AVIA HX711 ANALOG DIGITAL CONVERTER II
  M:    Andreas Klinger <ak@it-klinger.de>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/adc/avia-hx711.txt
 +F:    Documentation/devicetree/bindings/iio/adc/avia-hx711.yaml
  F:    drivers/iio/adc/hx711.c
  
  AX.25 NETWORK LAYER
@@@ -3108,9 -3049,8 +3108,9 @@@ S:      Maintaine
  F:    arch/riscv/net/
  
  BPF JIT for S390
 -M:    Martin Schwidefsky <schwidefsky@de.ibm.com>
  M:    Heiko Carstens <heiko.carstens@de.ibm.com>
 +M:    Vasily Gorbik <gor@linux.ibm.com>
 +M:    Christian Borntraeger <borntraeger@de.ibm.com>
  L:    netdev@vger.kernel.org
  L:    bpf@vger.kernel.org
  S:    Maintained
@@@ -3169,8 -3109,7 +3169,8 @@@ F:      arch/arm/mach-bcm
  
  BROADCOM BCM2835 ARM ARCHITECTURE
  M:    Eric Anholt <eric@anholt.net>
 -M:    Stefan Wahren <stefan.wahren@i2se.com>
 +M:    Stefan Wahren <wahrenst@gmx.net>
 +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)
  T:    git git://github.com/anholt/linux
@@@ -3200,7 -3139,6 +3200,7 @@@ F:      arch/arm/boot/dts/bcm953012
  
  BROADCOM BCM53573 ARM ARCHITECTURE
  M:    RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
 +L:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
  F:    arch/arm/boot/dts/bcm53573*
@@@ -3727,7 -3665,7 +3727,7 @@@ F:      drivers/crypto/ccree
  W:    https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family
  
  CEC FRAMEWORK
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
@@@ -3744,7 -3682,7 +3744,7 @@@ F:      Documentation/devicetree/bindings/me
  F:    Documentation/ABI/testing/debugfs-cec-error-inj
  
  CEC GPIO DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
@@@ -3801,7 -3739,7 +3801,7 @@@ F:      scripts/extract-cert.
  CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM:
  L:    linux-usb@vger.kernel.org
  S:    Orphan
 -F:    Documentation/usb/WUSB-Design-overview.txt
 +F:    Documentation/usb/wusb-design-overview.rst
  F:    Documentation/usb/wusb-cbaf
  F:    drivers/usb/host/hwa-hc.c
  F:    drivers/usb/host/whci/
@@@ -3936,7 -3874,7 +3936,7 @@@ F:      Documentation/devicetree/bindings/hw
  F:    Documentation/devicetree/bindings/pinctrl/cirrus,lochnagar.txt
  F:    Documentation/devicetree/bindings/regulator/cirrus,lochnagar.txt
  F:    Documentation/devicetree/bindings/sound/cirrus,lochnagar.txt
 -F:    Documentation/hwmon/lochnagar
 +F:    Documentation/hwmon/lochnagar.rst
  
  CISCO FCOE HBA DRIVER
  M:    Satish Kharat <satishkh@cisco.com>
@@@ -3977,32 -3915,19 +3977,32 @@@ W:   https://github.com/CirrusLogic/linux
  S:    Supported
  F:    Documentation/devicetree/bindings/mfd/madera.txt
  F:    Documentation/devicetree/bindings/pinctrl/cirrus,madera-pinctrl.txt
 +F:    Documentation/devicetree/bindings/sound/madera.txt
 +F:    include/dt-bindings/sound/madera*
  F:    include/linux/irqchip/irq-madera*
  F:    include/linux/mfd/madera/*
 +F:    include/sound/madera*
  F:    drivers/gpio/gpio-madera*
  F:    drivers/irqchip/irq-madera*
  F:    drivers/mfd/madera*
  F:    drivers/mfd/cs47l*
  F:    drivers/pinctrl/cirrus/*
 +F:    sound/soc/codecs/cs47l*
 +F:    sound/soc/codecs/madera*
  
  CLANG-FORMAT FILE
  M:    Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
  S:    Maintained
  F:    .clang-format
  
 +CLANG/LLVM BUILD SUPPORT
 +L:    clang-built-linux@googlegroups.com
 +W:    https://clangbuiltlinux.github.io/
 +B:    https://github.com/ClangBuiltLinux/linux/issues
 +C:    irc://chat.freenode.net/clangbuiltlinux
 +S:    Supported
 +K:    \b(?i:clang|llvm)\b
 +
  CLEANCACHE API
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  L:    linux-kernel@vger.kernel.org
@@@ -4033,7 -3958,7 +4033,7 @@@ S:      Supporte
  F:    drivers/platform/x86/classmate-laptop.c
  
  COBALT MEDIA DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    https://linuxtv.org
@@@ -4169,7 -4094,7 +4169,7 @@@ W:      http://www.bullopensource.org/cpuset
  W:    http://oss.sgi.com/projects/cpusets/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
  S:    Maintained
 -F:    Documentation/cgroup-v1/cpusets.txt
 +F:    Documentation/cgroup-v1/cpusets.rst
  F:    include/linux/cpuset.h
  F:    kernel/cgroup/cpuset.c
  
@@@ -4304,7 -4229,6 +4304,7 @@@ F:      crypto
  F:    drivers/crypto/
  F:    include/crypto/
  F:    include/linux/crypto*
 +F:    lib/crypto/
  
  CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
  M:    Neil Horman <nhorman@tuxdriver.com>
@@@ -4761,7 -4685,6 +4761,7 @@@ F:      Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/input/da90??-onkey.txt
  F:    Documentation/devicetree/bindings/thermal/da90??-thermal.txt
  F:    Documentation/devicetree/bindings/regulator/da92*.txt
 +F:    Documentation/devicetree/bindings/regulator/slg51000.txt
  F:    Documentation/devicetree/bindings/watchdog/da90??-wdt.txt
  F:    Documentation/devicetree/bindings/sound/da[79]*.txt
  F:    drivers/gpio/gpio-da90??.c
@@@ -4777,7 -4700,6 +4777,7 @@@ F:      drivers/power/supply/da9052-battery.
  F:    drivers/power/supply/da91??-*.c
  F:    drivers/regulator/da903x.c
  F:    drivers/regulator/da9???-regulator.[ch]
 +F:    drivers/regulator/slg51000-regulator.[ch]
  F:    drivers/thermal/da90??-thermal.c
  F:    drivers/rtc/rtc-da90??.c
  F:    drivers/video/backlight/da90??_bl.c
@@@ -4855,7 -4777,7 +4855,7 @@@ S:      Maintaine
  W:    http://plugable.com/category/projects/udlfb/
  F:    drivers/video/fbdev/udlfb.c
  F:    include/video/udlfb.h
 -F:    Documentation/fb/udlfb.txt
 +F:    Documentation/fb/udlfb.rst
  
  DISTRIBUTED LOCK MANAGER (DLM)
  M:    Christine Caulfield <ccaulfie@redhat.com>
@@@ -4928,7 -4850,7 +4928,7 @@@ S:      Maintaine
  F:    Documentation/
  F:    scripts/kernel-doc
  X:    Documentation/ABI/
 -X:    Documentation/acpi/
 +X:    Documentation/firmware-guide/acpi/
  X:    Documentation/devicetree/
  X:    Documentation/i2c/
  X:    Documentation/media/
@@@ -4988,6 -4910,13 +4988,6 @@@ L:     linux-kernel@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/fsl-dpaa2/ethsw
  
 -DPAA2 PTP CLOCK DRIVER
 -M:    Yangbo Lu <yangbo.lu@nxp.com>
 -L:    netdev@vger.kernel.org
 -S:    Maintained
 -F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp*
 -F:    drivers/net/ethernet/freescale/dpaa2/dprtc*
 -
  DPT_I2O SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@microsemi.com>
  L:    linux-scsi@vger.kernel.org
@@@ -5199,13 -5128,6 +5199,13 @@@ S:    Maintaine
  F:    drivers/gpu/drm/tinydrm/st7735r.c
  F:    Documentation/devicetree/bindings/display/sitronix,st7735r.txt
  
 +DRM DRIVER FOR ST-ERICSSON MCDE
 +M:    Linus Walleij <linus.walleij@linaro.org>
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +S:    Maintained
 +F:    drivers/gpu/drm/mcde/
 +F:    Documentation/devicetree/bindings/display/ste,mcde.txt
 +
  DRM DRIVER FOR TDFX VIDEO CARDS
  S:    Orphan / Obsolete
  F:    drivers/gpu/drm/tdfx/
@@@ -5491,7 -5413,6 +5491,7 @@@ T:      git git://anongit.freedesktop.org/dr
  
  DRM PANEL DRIVERS
  M:    Thierry Reding <thierry.reding@gmail.com>
 +R:    Sam Ravnborg <sam@ravnborg.org>
  L:    dri-devel@lists.freedesktop.org
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  S:    Maintained
@@@ -5520,6 -5441,7 +5520,6 @@@ F:      Documentation/gpu/xen-front.rs
  DRM TTM SUBSYSTEM
  M:    Christian Koenig <christian.koenig@amd.com>
  M:    Huang Rui <ray.huang@amd.com>
 -M:    Junwei Zhang <Jerry.Zhang@amd.com>
  T:    git git://people.freedesktop.org/~agd5f/linux
  S:    Maintained
  L:    dri-devel@lists.freedesktop.org
@@@ -5666,8 -5588,7 +5666,8 @@@ F:      include/linux/dynamic_debug.
  DYNAMIC INTERRUPT MODERATION
  M:    Tal Gilboa <talgi@mellanox.com>
  S:    Maintained
 -F:    include/linux/net_dim.h
 +F:    include/linux/dim.h
 +F:    lib/dim/
  
  DZ DECSTATION DZ11 SERIAL DRIVER
  M:    "Maciej W. Rozycki" <macro@linux-mips.org>
@@@ -5876,12 -5797,6 +5876,12 @@@ L:    linux-edac@vger.kernel.or
  S:    Maintained
  F:    drivers/edac/sb_edac.c
  
 +EDAC-SIFIVE
 +M:    Yash Shah <yash.shah@sifive.com>
 +L:    linux-edac@vger.kernel.org
 +S:    Supported
 +F:    drivers/edac/sifive_edac.c
 +
  EDAC-SKYLAKE
  M:    Tony Luck <tony.luck@intel.com>
  L:    linux-edac@vger.kernel.org
@@@ -6041,7 -5956,6 +6041,7 @@@ M:      Heiner Kallweit <hkallweit1@gmail.co
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-mdio
 +F:    Documentation/devicetree/bindings/net/ethernet-phy.yaml
  F:    Documentation/devicetree/bindings/net/mdio*
  F:    Documentation/networking/phy.rst
  F:    drivers/net/phy/
@@@ -6106,7 -6020,7 +6106,7 @@@ S:      Maintaine
  F:    drivers/extcon/
  F:    include/linux/extcon/
  F:    include/linux/extcon.h
 -F:    Documentation/extcon/
 +F:    Documentation/firmware-guide/acpi/extcon-intel-int3496.rst
  F:    Documentation/devicetree/bindings/extcon/
  
  EXYNOS DP DRIVER
@@@ -6292,14 -6206,6 +6292,14 @@@ M:    Philip Kelleher <pjk1939@linux.ibm.c
  S:    Maintained
  F:    drivers/block/rsxx/
  
 +FLEXTIMER FTM-QUADDEC DRIVER
 +M:    Patrick Havelange <patrick.havelange@essensium.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-bus-counter-ftm-quadddec
 +F:    Documentation/devicetree/bindings/counter/ftm-quaddec.txt
 +F:    drivers/counter/ftm-quaddec.c
 +
  FLOPPY DRIVER
  M:    Jiri Kosina <jikos@kernel.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/floppy.git
@@@ -6316,6 -6222,7 +6316,6 @@@ F:      include/linux/ipmi-fru.
  K:    fmc_d.*register
  
  FPGA MANAGER FRAMEWORK
 -M:    Alan Tull <atull@kernel.org>
  M:    Moritz Fischer <mdf@kernel.org>
  L:    linux-fpga@vger.kernel.org
  S:    Maintained
@@@ -6332,7 -6239,7 +6332,7 @@@ FPGA DFL DRIVER
  M:    Wu Hao <hao.wu@intel.com>
  L:    linux-fpga@vger.kernel.org
  S:    Maintained
 -F:    Documentation/fpga/dfl.txt
 +F:    Documentation/fpga/dfl.rst
  F:    include/uapi/linux/fpga-dfl.h
  F:    drivers/fpga/dfl*
  
@@@ -6409,13 -6316,6 +6409,13 @@@ L:    linux-i2c@vger.kernel.or
  S:    Maintained
  F:    drivers/i2c/busses/i2c-cpm.c
  
 +FREESCALE IMX DDR PMU DRIVER
 +M:    Frank Li <Frank.li@nxp.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +S:    Maintained
 +F:    drivers/perf/fsl_imx8_ddr_perf.c
 +F:    Documentation/devicetree/bindings/perf/fsl-imx-ddr.txt
 +
  FREESCALE IMX LPI2C DRIVER
  M:    Dong Aisheng <aisheng.dong@nxp.com>
  L:    linux-i2c@vger.kernel.org
@@@ -6459,8 -6359,6 +6459,8 @@@ FREESCALE QORIQ PTP CLOCK DRIVE
  M:    Yangbo Lu <yangbo.lu@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 +F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp*
 +F:    drivers/net/ethernet/freescale/dpaa2/dprtc*
  F:    drivers/net/ethernet/freescale/enetc/enetc_ptp.c
  F:    drivers/ptp/ptp_qoriq.c
  F:    drivers/ptp/ptp_qoriq_debugfs.c
@@@ -6579,19 -6477,6 +6579,19 @@@ F:    fs/crypto
  F:    include/linux/fscrypt*.h
  F:    Documentation/filesystems/fscrypt.rst
  
 +FSI SUBSYSTEM
 +M:    Jeremy Kerr <jk@ozlabs.org>
 +M:    Joel Stanley <joel@jms.id.au>
 +R:    Alistar Popple <alistair@popple.id.au>
 +R:    Eddie James <eajames@linux.ibm.com>
 +L:    linux-fsi@lists.ozlabs.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/joel/fsi.git
 +Q:    http://patchwork.ozlabs.org/project/linux-fsi/list/
 +S:    Supported
 +F:    drivers/fsi/
 +F:    include/linux/fsi*.h
 +F:    include/trace/events/fsi*.h
 +
  FSI-ATTACHED I2C DRIVER
  M:    Eddie James <eajames@linux.ibm.com>
  L:    linux-i2c@vger.kernel.org
@@@ -6768,18 -6653,6 +6768,18 @@@ L:    kvm@vger.kernel.or
  S:    Supported
  F:    drivers/uio/uio_pci_generic.c
  
 +GENERIC VDSO LIBRARY:
 +M:    Andy Lutomirski <luto@kernel.org>
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +M:    Vincenzo Frascino <vincenzo.frascino@arm.com>
 +L:    linux-kernel@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/vdso
 +S:    Maintained
 +F:    lib/vdso/
 +F:    kernel/time/vsyscall.c
 +F:    include/vdso/
 +F:    include/asm-generic/vdso/vsyscall.h
 +
  GENWQE (IBM Generic Workqueue Card)
  M:    Frank Haverkamp <haver@linux.ibm.com>
  S:    Supported
@@@ -6806,7 -6679,9 +6806,7 @@@ M:      Paul Bolle <pebolle@tiscali.nl
  L:    gigaset307x-common@lists.sourceforge.net
  W:    http://gigaset307x.sourceforge.net/
  S:    Odd Fixes
 -F:    Documentation/isdn/README.gigaset
 -F:    drivers/isdn/gigaset/
 -F:    include/uapi/linux/gigaset_dev.h
 +F:    drivers/staging/isdn/gigaset/
  
  GNSS SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
@@@ -6818,7 -6693,7 +6818,7 @@@ F:      drivers/gnss
  F:    include/linux/gnss.h
  
  GO7007 MPEG CODEC
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/usb/go7007/
@@@ -6829,15 -6704,6 +6829,15 @@@ L:    linux-input@vger.kernel.or
  S:    Maintained
  F:    drivers/input/touchscreen/goodix.c
  
 +GOOGLE ETHERNET DRIVERS
 +M:    Catherine Sullivan <csully@google.com>
 +R:    Sagi Shahar <sagis@google.com>
 +R:    Jon Olson <jonolson@google.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    Documentation/networking/device_drivers/google/gve.txt
 +F:    drivers/net/ethernet/google
 +
  GPD POCKET FAN DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7131,7 -6997,7 +7131,7 @@@ F:      drivers/media/usb/hdpvr
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
  M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
 -F:    Documentation/watchdog/hpwdt.txt
 +F:    Documentation/watchdog/hpwdt.rst
  F:    drivers/watchdog/hpwdt.c
  
  HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
@@@ -7314,7 -7180,7 +7314,7 @@@ F:      drivers/net/ethernet/hp/hp100.
  HPET: High Precision Event Timers driver
  M:    Clemens Ladisch <clemens@ladisch.de>
  S:    Maintained
 -F:    Documentation/timers/hpet.txt
 +F:    Documentation/timers/hpet.rst
  F:    drivers/char/hpet.c
  F:    include/linux/hpet.h
  F:    include/uapi/linux/hpet.h
@@@ -7424,7 -7290,6 +7424,7 @@@ F:      arch/x86/include/asm/trace/hyperv.
  F:    arch/x86/include/asm/hyperv-tlfs.h
  F:    arch/x86/kernel/cpu/mshyperv.c
  F:    arch/x86/hyperv
 +F:    drivers/clocksource/hyperv_timer.c
  F:    drivers/hid/hid-hyperv.c
  F:    drivers/hv/
  F:    drivers/input/serio/hyperv-keyboard.c
@@@ -7435,21 -7300,11 +7435,21 @@@ F:   drivers/uio/uio_hv_generic.
  F:    drivers/video/fbdev/hyperv_fb.c
  F:    drivers/iommu/hyperv_iommu.c
  F:    net/vmw_vsock/hyperv_transport.c
 +F:    include/clocksource/hyperv_timer.h
  F:    include/linux/hyperv.h
  F:    include/uapi/linux/hyperv.h
 +F:    include/asm-generic/mshyperv.h
  F:    tools/hv/
  F:    Documentation/ABI/stable/sysfs-bus-vmbus
  
 +HYPERBUS SUPPORT
 +M:    Vignesh Raghavendra <vigneshr@ti.com>
 +S:    Supported
 +F:    drivers/mtd/hyperbus/
 +F:    include/linux/mtd/hyperbus.h
 +F:    Documentation/devicetree/bindings/mtd/cypress,hyperflash.txt
 +F:    Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt
 +
  HYPERVISOR VIRTUAL CONSOLE DRIVER
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Odd Fixes
@@@ -7486,7 -7341,6 +7486,7 @@@ I2C MV64XXX MARVELL AND ALLWINNER DRIVE
  M:    Gregory CLEMENT <gregory.clement@bootlin.com>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
  F:    drivers/i2c/busses/i2c-mv64xxx.c
  
  I2C OVER PARALLEL PORT
@@@ -7743,7 -7597,7 +7743,7 @@@ IDE/ATAPI DRIVER
  M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
  S:    Maintained
 -F:    Documentation/cdrom/ide-cd
 +F:    Documentation/cdrom/ide-cd.rst
  F:    drivers/ide/ide-cd*
  
  IDEAPAD LAPTOP EXTRAS DRIVER
@@@ -7906,12 -7760,6 +7906,12 @@@ W:    http://industrypack.sourceforge.ne
  S:    Maintained
  F:    drivers/ipack/
  
 +INFINEON DPS310 Driver
 +M:    Eddie James <eajames@linux.ibm.com>
 +L:    linux-iio@vger.kernel.org
 +F:    drivers/iio/pressure/dps310.c
 +S:    Maintained
 +
  INFINIBAND SUBSYSTEM
  M:    Doug Ledford <dledford@redhat.com>
  M:    Jason Gunthorpe <jgg@mellanox.com>
@@@ -7940,7 -7788,7 +7940,7 @@@ INGENIC JZ4780 NAND DRIVE
  M:    Harvey Hunt <harveyhuntnexus@gmail.com>
  L:    linux-mtd@lists.infradead.org
  S:    Maintained
 -F:    drivers/mtd/nand/raw/jz4780_*
 +F:    drivers/mtd/nand/raw/ingenic/
  
  INOTIFY
  M:    Jan Kara <jack@suse.cz>
@@@ -8062,7 -7910,7 +8062,7 @@@ INTEL FRAMEBUFFER DRIVER (excluding 81
  M:    Maik Broemme <mbroemme@libmpq.org>
  L:    linux-fbdev@vger.kernel.org
  S:    Maintained
 -F:    Documentation/fb/intelfb.txt
 +F:    Documentation/fb/intelfb.rst
  F:    drivers/video/fbdev/intelfb/
  
  INTEL GPIO DRIVERS
@@@ -8173,7 -8021,7 +8173,7 @@@ F:      include/uapi/linux/mei.
  F:    include/linux/mei_cl_bus.h
  F:    drivers/misc/mei/*
  F:    drivers/watchdog/mei_wdt.c
 -F:    Documentation/misc-devices/mei/*
 +F:    Documentation/driver-api/mei/*
  F:    samples/mei/*
  
  INTEL MENLOW THERMAL DRIVER
@@@ -8222,7 -8070,7 +8222,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  F:    drivers/gpio/gpio-*cove.c
  F:    drivers/gpio/gpio-msic.c
  
- INTEL MULTIFUNCTION PMIC DEVICE DRIVERS
+ INTEL PMIC MULTIFUNCTION DEVICE DRIVERS
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  S:    Maintained
  F:    drivers/mfd/intel_msic.c
@@@ -8253,14 -8101,6 +8253,14 @@@ S:    Supporte
  F:    drivers/infiniband/hw/i40iw/
  F:    include/uapi/rdma/i40iw-abi.h
  
 +INTEL SPEED SELECT TECHNOLOGY
 +M:    Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/intel_speed_select_if/
 +F:    tools/power/x86/intel-speed-select/
 +F:    include/uapi/linux/isst_if.h
 +
  INTEL TELEMETRY DRIVER
  M:    Rajneesh Bhardwaj <rajneesh.bhardwaj@linux.intel.com>
  M:    "David E. Box" <david.e.box@linux.intel.com>
@@@ -8522,26 -8362,18 +8522,26 @@@ S:   Supporte
  W:    http://www.linux-iscsi.org
  F:    drivers/infiniband/ulp/isert
  
 -ISDN SUBSYSTEM
 +ISDN/mISDN SUBSYSTEM
  M:    Karsten Keil <isdn@linux-pingi.de>
  L:    isdn4linux@listserv.isdn4linux.de (subscribers-only)
  L:    netdev@vger.kernel.org
  W:    http://www.isdn4linux.de
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git
  S:    Maintained
 +F:    drivers/isdn/mISDN
 +F:    drivers/isdn/hardware
 +
 +ISDN/CAPI SUBSYSTEM
 +M:    Karsten Keil <isdn@linux-pingi.de>
 +L:    isdn4linux@listserv.isdn4linux.de (subscribers-only)
 +L:    netdev@vger.kernel.org
 +W:    http://www.isdn4linux.de
 +S:    Odd Fixes
  F:    Documentation/isdn/
 -F:    drivers/isdn/
 -F:    include/linux/isdn.h
 +F:    drivers/isdn/capi/
 +F:    drivers/staging/isdn/
 +F:    net/bluetooth/cmtp/
  F:    include/linux/isdn/
 -F:    include/uapi/linux/isdn.h
  F:    include/uapi/linux/isdn/
  
  IT87 HARDWARE MONITORING DRIVER
@@@ -8721,7 -8553,7 +8721,7 @@@ S:      Odd Fixe
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
  M:    "J. Bruce Fields" <bfields@fieldses.org>
 -M:    Jeff Layton <jlayton@kernel.org>
 +M:    Chuck Lever <chuck.lever@oracle.com>
  L:    linux-nfs@vger.kernel.org
  W:    http://nfs.sourceforge.net/
  T:    git git://linux-nfs.org/~bfields/linux.git
@@@ -8779,12 -8611,14 +8779,12 @@@ F:   arch/x86/include/asm/svm.
  F:    arch/x86/kvm/svm.c
  
  KERNEL VIRTUAL MACHINE FOR ARM/ARM64 (KVM/arm, KVM/arm64)
 -M:    Christoffer Dall <christoffer.dall@arm.com>
  M:    Marc Zyngier <marc.zyngier@arm.com>
  R:    James Morse <james.morse@arm.com>
  R:    Julien Thierry <julien.thierry@arm.com>
  R:    Suzuki K Pouloze <suzuki.poulose@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    kvmarm@lists.cs.columbia.edu
 -W:    http://systems.cs.columbia.edu/projects/kvm-arm
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git
  S:    Maintained
  F:    arch/arm/include/uapi/asm/kvm*
@@@ -9014,7 -8848,7 +9014,7 @@@ F:      include/linux/leds.
  LEGACY EEPROM DRIVER
  M:    Jean Delvare <jdelvare@suse.com>
  S:    Maintained
 -F:    Documentation/misc-devices/eeprom
 +F:    Documentation/misc-devices/eeprom.rst
  F:    drivers/misc/eeprom/eeprom.c
  
  LEGO MINDSTORMS EV3
@@@ -9276,7 -9110,7 +9276,7 @@@ F:      drivers/misc/lkdtm/
  LINUX KERNEL MEMORY CONSISTENCY MODEL (LKMM)
  M:    Alan Stern <stern@rowland.harvard.edu>
  M:    Andrea Parri <andrea.parri@amarulasolutions.com>
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Boqun Feng <boqun.feng@gmail.com>
  M:    Nicholas Piggin <npiggin@gmail.com>
@@@ -9300,7 -9134,7 +9300,7 @@@ F:      Documentation/memory-barriers.tx
  LIS3LV02D ACCELEROMETER DRIVER
  M:    Eric Piel <eric.piel@tremplin-utc.net>
  S:    Maintained
 -F:    Documentation/misc-devices/lis3lv02d
 +F:    Documentation/misc-devices/lis3lv02d.rst
  F:    drivers/misc/lis3lv02d/
  F:    drivers/platform/x86/hp_accel.c
  
@@@ -9384,7 -9218,7 +9384,7 @@@ F:      Documentation/admin-guide/LSM/LoadPi
  LOCKING PRIMITIVES
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
  S:    Maintained
@@@ -9791,17 -9625,6 +9791,17 @@@ L:    linux-iio@vger.kernel.or
  S:    Maintained
  F:    drivers/iio/dac/cio-dac.c
  
 +MEDIA CONTROLLER FRAMEWORK
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    linux-media@vger.kernel.org
 +W:    https://www.linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    drivers/media/mc/
 +F:    include/media/media-*.h
 +F:    include/uapi/linux/media.h
 +
  MEDIA DRIVERS FOR ASCOT2E
  M:    Sergey Kozlov <serjk@netup.ru>
  M:    Abylay Ospan <aospan@netup.ru>
@@@ -10268,7 -10091,6 +10268,7 @@@ Q:   http://patchwork.ozlabs.org/project/
  S:    Supported
  F:    drivers/net/ethernet/mellanox/mlx5/core/
  F:    include/linux/mlx5/
 +F:    Documentation/networking/device_drivers/mellanox/
  
  MELLANOX MLX5 IB driver
  M:    Leon Romanovsky <leonro@mellanox.com>
@@@ -10295,7 -10117,7 +10295,7 @@@ L:   linux-leds@vger.kernel.or
  S:    Supported
  F:    drivers/leds/leds-mlxcpld.c
  F:    drivers/leds/leds-mlxreg.c
 -F:    Documentation/leds/leds-mlxcpld.txt
 +F:    Documentation/leds/leds-mlxcpld.rst
  
  MELLANOX PLATFORM DRIVER
  M:    Vadim Pasternak <vadimp@mellanox.com>
@@@ -10379,7 -10201,7 +10379,7 @@@ F:   drivers/watchdog/menz69_wdt.
  
  MESON AO CEC DRIVER FOR AMLOGIC SOCS
  M:    Neil Armstrong <narmstrong@baylibre.com>
 -L:    linux-media@lists.freedesktop.org
 +L:    linux-media@vger.kernel.org
  L:    linux-amlogic@lists.infradead.org
  W:    http://linux-meson.com/
  S:    Supported
@@@ -10395,14 -10217,6 +10395,14 @@@ S: Maintaine
  F:    drivers/mtd/nand/raw/meson_*
  F:    Documentation/devicetree/bindings/mtd/amlogic,meson-nand.txt
  
 +MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS
 +M:    Maxime Jourdan <mjourdan@baylibre.com>
 +L:    linux-media@vger.kernel.org
 +L:    linux-amlogic@lists.infradead.org
 +S:    Supported
 +F:    drivers/staging/media/meson/vdec/
 +T:    git git://linuxtv.org/media_tree.git
 +
  METHODE UDPU SUPPORT
  M:    Vladimir Vid <vladimir.vid@sartura.hr>
  S:    Maintained
@@@ -10456,9 -10270,7 +10456,9 @@@ MICROCHIP ISC DRIVE
  M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
 -F:    drivers/media/platform/atmel/atmel-isc.c
 +F:    drivers/media/platform/atmel/atmel-sama5d2-isc.c
 +F:    drivers/media/platform/atmel/atmel-isc.h
 +F:    drivers/media/platform/atmel/atmel-isc-base.c
  F:    drivers/media/platform/atmel/atmel-isc-regs.h
  F:    Documentation/devicetree/bindings/media/atmel-isc.txt
  
@@@ -10727,7 -10539,7 +10727,7 @@@ F:   arch/arm/boot/dts/mmp
  F:    arch/arm/mach-mmp/
  
  MMU GATHER AND TLB INVALIDATION
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  M:    "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
  M:    Andrew Morton <akpm@linux-foundation.org>
  M:    Nick Piggin <npiggin@gmail.com>
@@@ -11042,7 -10854,7 +11042,7 @@@ F:   drivers/net/ethernet/neterion
  
  NETFILTER
  M:    Pablo Neira Ayuso <pablo@netfilter.org>
 -M:    Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
 +M:    Jozsef Kadlecsik <kadlec@netfilter.org>
  M:    Florian Westphal <fw@strlen.de>
  L:    netfilter-devel@vger.kernel.org
  L:    coreteam@netfilter.org
@@@ -11255,18 -11067,11 +11255,18 @@@ L:        netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/qlogic/netxen/
  
 +NEXTHOP
 +M:    David Ahern <dsahern@kernel.org>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    include/net/nexthop.h
 +F:    include/uapi/linux/nexthop.h
 +F:    include/net/netns/nexthop.h
 +F:    net/ipv4/nexthop.c
 +
  NFC SUBSYSTEM
 -M:    Samuel Ortiz <sameo@linux.intel.com>
 -L:    linux-wireless@vger.kernel.org
 -L:    linux-nfc@lists.01.org (subscribers-only)
 -S:    Supported
 +L:    netdev@vger.kernel.org
 +S:    Orphan
  F:    net/nfc/
  F:    include/net/nfc/
  F:    include/uapi/linux/nfc.h
@@@ -11293,7 -11098,7 +11293,7 @@@ F:   include/uapi/linux/nfs
  F:    include/uapi/linux/sunrpc/
  
  NILFS2 FILESYSTEM
 -M:    Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
 +M:    Ryusuke Konishi <konishi.ryusuke@gmail.com>
  L:    linux-nilfs@vger.kernel.org
  W:    https://nilfs.sourceforge.io/
  W:    https://nilfs.osdn.jp/
@@@ -11423,7 -11228,7 +11423,7 @@@ F:   drivers/video/fbdev/riva
  F:    drivers/video/fbdev/nvidia/
  
  NVM EXPRESS DRIVER
 -M:    Keith Busch <keith.busch@intel.com>
 +M:    Keith Busch <kbusch@kernel.org>
  M:    Jens Axboe <axboe@fb.com>
  M:    Christoph Hellwig <hch@lst.de>
  M:    Sagi Grimberg <sagi@grimberg.me>
@@@ -11467,7 -11272,7 +11467,7 @@@ NXP FXAS21002C DRIVE
  M:    Rui Miguel Silva <rmfrfs@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/gyroscope/fxas21002c.txt
 +F:    Documentation/devicetree/bindings/iio/gyroscope/nxp,fxas21002c.txt
  F:    drivers/iio/gyro/fxas21002c_core.c
  F:    drivers/iio/gyro/fxas21002c.h
  F:    drivers/iio/gyro/fxas21002c_i2c.c
@@@ -11857,6 -11662,16 +11857,6 @@@ S:  Maintaine
  F:    drivers/mtd/nand/onenand/
  F:    include/linux/mtd/onenand*.h
  
 -ONSTREAM SCSI TAPE DRIVER
 -M:    Willem Riede <osst@riede.org>
 -L:    osst-users@lists.sourceforge.net
 -L:    linux-scsi@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/scsi/osst.txt
 -F:    drivers/scsi/osst.*
 -F:    drivers/scsi/osst_*.h
 -F:    drivers/scsi/st.h
 -
  OP-TEE DRIVER
  M:    Jens Wiklander <jens.wiklander@linaro.org>
  S:    Maintained
@@@ -11913,7 -11728,6 +11913,7 @@@ M:   Peter Korsgaard <peter@korsgaard.com
  M:    Andrew Lunn <andrew@lunn.ch>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-ocores.txt
  F:    Documentation/i2c/busses/i2c-ocores
  F:    drivers/i2c/busses/i2c-ocores.c
  F:    include/linux/platform_data/i2c-ocores.h
@@@ -12047,14 -11861,6 +12047,14 @@@ F: kernel/padata.
  F:    include/linux/padata.h
  F:    Documentation/padata.txt
  
 +PAGE POOL
 +M:    Jesper Dangaard Brouer <hawk@kernel.org>
 +M:    Ilias Apalodimas <ilias.apalodimas@linaro.org>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    net/core/page_pool.c
 +F:    include/net/page_pool.h
 +
  PANASONIC LAPTOP ACPI EXTRAS DRIVER
  M:    Harald Welte <laforge@gnumonks.org>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12223,7 -12029,7 +12223,7 @@@ S:   Maintaine
  F:    drivers/pci/controller/dwc/*layerscape*
  
  PCI DRIVER FOR GENERIC OF HOSTS
 -M:    Will Deacon <will.deacon@arm.com>
 +M:    Will Deacon <will@kernel.org>
  L:    linux-pci@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -12748,7 -12554,8 +12748,7 @@@ S:   Orpha
  F:    drivers/scsi/pmcraid.*
  
  PMC SIERRA PM8001 DRIVER
 -M:    Jack Wang <jinpu.wang@profitbricks.com>
 -M:    lindar_liu@usish.com
 +M:    Jack Wang <jinpu.wang@cloud.ionos.com>
  L:    linux-scsi@vger.kernel.org
  S:    Supported
  F:    drivers/scsi/pm8001/
@@@ -12842,7 -12649,7 +12842,7 @@@ M:   Rodolfo Giometti <giometti@enneenne.
  W:    http://wiki.enneenne.com/index.php/LinuxPPS_support
  L:    linuxpps@ml.enneenne.com (subscribers-only)
  S:    Maintained
 -F:    Documentation/pps/
 +F:    Documentation/driver-api/pps.rst
  F:    Documentation/devicetree/bindings/pps/pps-gpio.txt
  F:    Documentation/ABI/testing/sysfs-pps
  F:    drivers/pps/
@@@ -12948,7 -12755,7 +12948,7 @@@ L:   netdev@vger.kernel.or
  S:    Maintained
  W:    http://linuxptp.sourceforge.net/
  F:    Documentation/ABI/testing/sysfs-ptp
 -F:    Documentation/ptp/*
 +F:    Documentation/driver-api/ptp.rst
  F:    drivers/net/phy/dp83640*
  F:    drivers/ptp/*
  F:    include/linux/ptp_cl*
@@@ -12962,6 -12769,7 +12962,6 @@@ F:   include/linux/regset.
  F:    include/linux/tracehook.h
  F:    include/uapi/linux/ptrace.h
  F:    include/uapi/linux/ptrace.h
 -F:    include/asm-generic/ptrace.h
  F:    kernel/ptrace.c
  F:    arch/*/ptrace*.c
  F:    arch/*/*/ptrace*.c
@@@ -13239,6 -13047,7 +13239,6 @@@ F:   Documentation/devicetree/bindings/ne
  
  QUALCOMM GENERIC INTERFACE I2C DRIVER
  M:    Alok Chauhan <alokc@codeaurora.org>
 -M:    Karthikeyan Ramasubramanian <kramasub@codeaurora.org>
  L:    linux-i2c@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Supported
@@@ -13558,7 -13367,6 +13558,7 @@@ F:   drivers/clk/renesas
  RENESAS EMEV2 I2C DRIVER
  M:    Wolfram Sang <wsa+renesas@sang-engineering.com>
  S:    Supported
 +F:    Documentation/devicetree/bindings/i2c/i2c-emev2.txt
  F:    drivers/i2c/busses/i2c-emev2.c
  
  RENESAS ETHERNET DRIVERS
@@@ -13580,8 -13388,6 +13580,8 @@@ F:   drivers/iio/adc/rcar-gyroadc.
  RENESAS R-CAR I2C DRIVERS
  M:    Wolfram Sang <wsa+renesas@sang-engineering.com>
  S:    Supported
 +F:    Documentation/devicetree/bindings/i2c/i2c-rcar.txt
 +F:    Documentation/devicetree/bindings/i2c/i2c-sh_mobile.txt
  F:    drivers/i2c/busses/i2c-rcar.c
  F:    drivers/i2c/busses/i2c-sh_mobile.c
  
@@@ -13679,11 -13485,11 +13679,11 @@@ S:        Maintaine
  F:    drivers/media/platform/rockchip/rga/
  F:    Documentation/devicetree/bindings/media/rockchip-rga.txt
  
 -ROCKCHIP VPU CODEC DRIVER
 +HANTRO VPU CODEC DRIVER
  M:    Ezequiel Garcia <ezequiel@collabora.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/media/platform/rockchip/vpu/
 +F:    drivers/staging/media/platform/hantro/
  F:    Documentation/devicetree/bindings/media/rockchip-vpu.txt
  
  ROCKER DRIVER
@@@ -13812,9 -13618,8 +13812,9 @@@ S:   Maintaine
  F:    drivers/video/fbdev/savage/
  
  S390
 -M:    Martin Schwidefsky <schwidefsky@de.ibm.com>
  M:    Heiko Carstens <heiko.carstens@de.ibm.com>
 +M:    Vasily Gorbik <gor@linux.ibm.com>
 +M:    Christian Borntraeger <borntraeger@de.ibm.com>
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git
@@@ -13884,7 -13689,7 +13884,7 @@@ L:   linux-s390@vger.kernel.or
  L:    kvm@vger.kernel.org
  S:    Supported
  F:    drivers/s390/cio/vfio_ccw*
 -F:    Documentation/s390/vfio-ccw.txt
 +F:    Documentation/s390/vfio-ccw.rst
  F:    include/uapi/linux/vfio_ccw.h
  
  S390 ZCRYPT DRIVER
@@@ -13904,7 -13709,7 +13904,7 @@@ S:   Supporte
  F:    drivers/s390/crypto/vfio_ap_drv.c
  F:    drivers/s390/crypto/vfio_ap_private.h
  F:    drivers/s390/crypto/vfio_ap_ops.c
 -F:    Documentation/s390/vfio-ap.txt
 +F:    Documentation/s390/vfio-ap.rst
  
  S390 ZFCP DRIVER
  M:    Steffen Maier <maier@linux.ibm.com>
@@@ -14343,12 -14148,6 +14343,12 @@@ S: Maintaine
  F:    drivers/misc/phantom.c
  F:    include/uapi/linux/phantom.h
  
 +SENSIRION SPS30 AIR POLLUTION SENSOR DRIVER
 +M:    Tomasz Duszynski <tduszyns@gmail.com>
 +S:    Maintained
 +F:    drivers/iio/chemical/sps30.c
 +F:    Documentation/devicetree/bindings/iio/chemical/sensirion,sps30.yaml
 +
  SERIAL DEVICE BUS
  M:    Rob Herring <robh@kernel.org>
  L:    linux-serial@vger.kernel.org
@@@ -14523,15 -14322,6 +14523,15 @@@ S: Supporte
  K:    sifive
  N:    sifive
  
 +SIFIVE FU540 SYSTEM-ON-CHIP
 +M:    Paul Walmsley <paul.walmsley@sifive.com>
 +M:    Palmer Dabbelt <palmer@sifive.com>
 +L:    linux-riscv@lists.infradead.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pjw/sifive.git
 +S:    Supported
 +K:    fu540
 +N:    fu540
 +
  SILEAD TOUCHSCREEN DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-input@vger.kernel.org
@@@ -14547,7 -14337,7 +14547,7 @@@ M:   Sudip Mukherjee <sudip.mukherjee@cod
  L:    linux-fbdev@vger.kernel.org
  S:    Maintained
  F:    drivers/video/fbdev/sm712*
 -F:    Documentation/fb/sm712fb.txt
 +F:    Documentation/fb/sm712fb.rst
  
  SIMPLE FIRMWARE INTERFACE (SFI)
  M:    Len Brown <lenb@kernel.org>
@@@ -14563,7 -14353,7 +14563,7 @@@ SIMPLEFB FB DRIVE
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-fbdev@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/simple-framebuffer.txt
 +F:    Documentation/devicetree/bindings/display/simple-framebuffer.yaml
  F:    drivers/video/fbdev/simplefb.c
  F:    include/linux/platform_data/simplefb.h
  
@@@ -14592,7 -14382,7 +14592,7 @@@ F:   lib/test_siphash.
  F:    include/linux/siphash.h
  
  SIOX
 -M:    Gavin Schenk <g.schenk@eckelmann.de>
 +M:    Thorsten Scherer <t.scherer@eckelmann.de>
  M:    Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  S:    Supported
@@@ -14617,7 -14407,7 +14617,7 @@@ SIS FRAMEBUFFER DRIVE
  M:    Thomas Winischhofer <thomas@winischhofer.net>
  W:    http://www.winischhofer.net/linuxsisvga.shtml
  S:    Maintained
 -F:    Documentation/fb/sisfb.txt
 +F:    Documentation/fb/sisfb.rst
  F:    drivers/video/fbdev/sis/
  F:    include/video/sisfb.h
  
@@@ -14809,14 -14599,6 +14809,14 @@@ S: Maintaine
  F:    drivers/net/ethernet/socionext/netsec.c
  F:    Documentation/devicetree/bindings/net/socionext-netsec.txt
  
 +SOCIONEXT (SNI) Synquacer SPI DRIVER
 +M:    Masahisa Kojima <masahisa.kojima@linaro.org>
 +M:    Jassi Brar <jaswinder.singh@linaro.org>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/spi/spi-synquacer.c
 +F:    Documentation/devicetree/bindings/spi/spi-synquacer.txt
 +
  SOLIDRUN CLEARFOG SUPPORT
  M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
@@@ -15123,17 -14905,6 +15123,17 @@@ L: linux-erofs@lists.ozlabs.or
  S:    Maintained
  F:    drivers/staging/erofs/
  
 +STAGING - FIELDBUS SUBSYSTEM
 +M:    Sven Van Asbroeck <TheSven73@gmail.com>
 +S:    Maintained
 +F:    drivers/staging/fieldbus/*
 +F:    drivers/staging/fieldbus/Documentation/
 +
 +STAGING - HMS ANYBUS-S BUS
 +M:    Sven Van Asbroeck <TheSven73@gmail.com>
 +S:    Maintained
 +F:    drivers/staging/fieldbus/anybuss/
 +
  STAGING - INDUSTRIAL IO
  M:    Jonathan Cameron <jic23@kernel.org>
  L:    linux-iio@vger.kernel.org
@@@ -15210,7 -14981,7 +15210,7 @@@ S:   Odd Fixe
  F:    drivers/net/ethernet/adaptec/starfire*
  
  STEC S1220 SKD DRIVER
 -M:    Bart Van Assche <bart.vanassche@wdc.com>
 +M:    Damien Le Moal <Damien.LeMoal@wdc.com>
  L:    linux-block@vger.kernel.org
  S:    Maintained
  F:    drivers/block/skd*[ch]
@@@ -15701,7 -15472,6 +15701,7 @@@ F:   drivers/dma/tegra
  
  TEGRA I2C DRIVER
  M:    Laxman Dewangan <ldewangan@nvidia.com>
 +R:    Dmitry Osipenko <digetx@gmail.com>
  S:    Supported
  F:    drivers/i2c/busses/i2c-tegra.c
  
@@@ -15906,7 -15676,6 +15906,7 @@@ R:   Bartosz Golaszewski <bgolaszewski@ba
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/i2c/i2c-davinci.txt
  F:    arch/arm/mach-davinci/
  F:    drivers/i2c/busses/i2c-davinci.c
  F:    arch/arm/boot/dts/da850*
@@@ -16455,7 -16224,7 +16455,7 @@@ USB ACM DRIVE
  M:    Oliver Neukum <oneukum@suse.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    Documentation/usb/acm.txt
 +F:    Documentation/usb/acm.rst
  F:    drivers/usb/class/cdc-acm.*
  
  USB AR5523 WIRELESS DRIVER
@@@ -16508,7 -16277,7 +16508,7 @@@ USB EHCI DRIVE
  M:    Alan Stern <stern@rowland.harvard.edu>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    Documentation/usb/ehci.txt
 +F:    Documentation/usb/ehci.rst
  F:    drivers/usb/host/ehci*
  
  USB GADGET/PERIPHERAL SUBSYSTEM
@@@ -16526,7 -16295,7 +16526,7 @@@ M:   Benjamin Tissoires <benjamin.tissoir
  L:    linux-usb@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
  S:    Maintained
 -F:    Documentation/hid/hiddev.txt
 +F:    Documentation/hid/hiddev.rst
  F:    drivers/hid/usbhid/
  
  USB INTEL XHCI ROLE MUX DRIVER
@@@ -16582,7 -16351,7 +16582,7 @@@ USB OHCI DRIVE
  M:    Alan Stern <stern@rowland.harvard.edu>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    Documentation/usb/ohci.txt
 +F:    Documentation/usb/ohci.rst
  F:    drivers/usb/host/ohci*
  
  USB OTG FSM (Finite State Machine)
@@@ -16598,7 -16367,7 +16598,7 @@@ M:   Shuah Khan <shuah@kernel.org
  M:    Shuah Khan <skhan@linuxfoundation.org>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    Documentation/usb/usbip_protocol.txt
 +F:    Documentation/usb/usbip_protocol.rst
  F:    drivers/usb/usbip/
  F:    tools/usb/usbip/
  F:    tools/testing/selftests/drivers/usb/usbip/
@@@ -16646,7 -16415,7 +16646,7 @@@ M:   Johan Hovold <johan@kernel.org
  L:    linux-usb@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git
  S:    Maintained
 -F:    Documentation/usb/usb-serial.txt
 +F:    Documentation/usb/usb-serial.rst
  F:    drivers/usb/serial/
  F:    include/linux/usb/serial.h
  
@@@ -16825,7 -16594,7 +16825,7 @@@ M:   Michal Januszewski <spock@gentoo.org
  L:    linux-fbdev@vger.kernel.org
  W:    https://github.com/mjanusz/v86d
  S:    Maintained
 -F:    Documentation/fb/uvesafb.txt
 +F:    Documentation/fb/uvesafb.rst
  F:    drivers/video/fbdev/uvesafb.*
  
  VF610 NAND DRIVER
@@@ -16900,7 -16669,7 +16900,7 @@@ S:   Maintaine
  F:    drivers/net/ethernet/via/via-velocity.*
  
  VICODEC VIRTUAL CODEC DRIVER
 -M:    Hans Verkuil <hans.verkuil@cisco.com>
 +M:    Hans Verkuil <hverkuil-cisco@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    https://linuxtv.org
@@@ -16923,7 -16692,6 +16923,7 @@@ VIDEOBUF2 FRAMEWOR
  M:    Pawel Osciak <pawel@osciak.com>
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
  M:    Kyungmin Park <kyungmin.park@samsung.com>
 +R:    Tomasz Figa <tfiga@chromium.org>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    drivers/media/common/videobuf2/*
@@@ -17482,7 -17250,6 +17482,7 @@@ N:   xd
  XDP SOCKETS (AF_XDP)
  M:    Björn Töpel <bjorn.topel@intel.com>
  M:    Magnus Karlsson <magnus.karlsson@intel.com>
 +R:    Jonathan Lemon <jonathan.lemon@gmail.com>
  L:    netdev@vger.kernel.org
  L:    bpf@vger.kernel.org
  S:    Maintained
@@@ -17530,7 -17297,7 +17530,7 @@@ F:   Documentation/ABI/stable/sysfs-hyper
  F:    Documentation/ABI/testing/sysfs-hypervisor-xen
  
  XEN NETWORK BACKEND DRIVER
 -M:    Wei Liu <wei.liu2@citrix.com>
 +M:    Wei Liu <wei.liu@kernel.org>
  M:    Paul Durrant <paul.durrant@citrix.com>
  L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  L:    netdev@vger.kernel.org
@@@ -17576,13 -17343,7 +17576,13 @@@ W: http://xfs.org
  T:    git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git
  S:    Supported
  F:    Documentation/filesystems/xfs.txt
 +F:    Documentation/ABI/testing/sysfs-fs-xfs
 +F:    Documentation/filesystems/xfs.txt
 +F:    Documentation/filesystems/xfs-delayed-logging-design.txt
 +F:    Documentation/filesystems/xfs-self-describing-metadata.txt
  F:    fs/xfs/
 +F:    include/uapi/linux/dqblk_xfs.h
 +F:    include/uapi/linux/fsmap.h
  
  XILINX AXI ETHERNET DRIVER
  M:    Anirudha Sarangi <anirudh@xilinx.com>
@@@ -17618,7 -17379,6 +17618,7 @@@ M:   Jan Glauber <jglauber@cavium.com
  L:    linux-i2c@vger.kernel.org
  W:    http://www.cavium.com
  S:    Supported
 +F:    Documentation/devicetree/bindings/i2c/i2c-xlp9xx.txt
  F:    drivers/i2c/busses/i2c-xlp9xx.c
  
  XRA1403 GPIO EXPANDER
@@@ -17702,12 -17462,6 +17702,12 @@@ Q: https://patchwork.linuxtv.org/projec
  S:    Maintained
  F:    drivers/media/dvb-frontends/zd1301_demod*
  
 +ZHAOXIN PROCESSOR SUPPORT
 +M:    Tony W Wang-oc <TonyWWang-oc@zhaoxin.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    arch/x86/kernel/cpu/zhaoxin.c
 +
  ZPOOL COMPRESSED PAGE STORAGE API
  M:    Dan Streetman <ddstreet@ieee.org>
  L:    linux-mm@kvack.org
diff --combined drivers/clk/clk-rk808.c
index b1d7e4a296ef635ddbe4245265b720cc60832552,75f2cf0dfc9f3831881eda9aff0cf832e5798ee9..32f833d732ed5655fdcd7419ea626cc2fa04654d
@@@ -1,10 -1,18 +1,10 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Clkout driver for Rockchip RK808
   *
   * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
   *
   * Author:Chris Zhong <zyw@rock-chips.com>
 - *
 - * This program is free software; you can redistribute it and/or modify it
 - * under the terms and conditions of the GNU General Public License,
 - * version 2, as published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope it will be useful, but WITHOUT
 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 - * more details.
   */
  
  #include <linux/clk-provider.h>
@@@ -88,6 -96,68 +88,68 @@@ of_clk_rk808_get(struct of_phandle_arg
        return idx ? &rk808_clkout->clkout2_hw : &rk808_clkout->clkout1_hw;
  }
  
+ static int rk817_clkout2_enable(struct clk_hw *hw, bool enable)
+ {
+       struct rk808_clkout *rk808_clkout = container_of(hw,
+                                                        struct rk808_clkout,
+                                                        clkout2_hw);
+       struct rk808 *rk808 = rk808_clkout->rk808;
+       return regmap_update_bits(rk808->regmap, RK817_SYS_CFG(1),
+                                 RK817_CLK32KOUT2_EN,
+                                 enable ? RK817_CLK32KOUT2_EN : 0);
+ }
+ static int rk817_clkout2_prepare(struct clk_hw *hw)
+ {
+       return rk817_clkout2_enable(hw, true);
+ }
+ static void rk817_clkout2_unprepare(struct clk_hw *hw)
+ {
+       rk817_clkout2_enable(hw, false);
+ }
+ static int rk817_clkout2_is_prepared(struct clk_hw *hw)
+ {
+       struct rk808_clkout *rk808_clkout = container_of(hw,
+                                                        struct rk808_clkout,
+                                                        clkout2_hw);
+       struct rk808 *rk808 = rk808_clkout->rk808;
+       unsigned int val;
+       int ret = regmap_read(rk808->regmap, RK817_SYS_CFG(1), &val);
+       if (ret < 0)
+               return 0;
+       return (val & RK817_CLK32KOUT2_EN) ? 1 : 0;
+ }
+ static const struct clk_ops rk817_clkout2_ops = {
+       .prepare = rk817_clkout2_prepare,
+       .unprepare = rk817_clkout2_unprepare,
+       .is_prepared = rk817_clkout2_is_prepared,
+       .recalc_rate = rk808_clkout_recalc_rate,
+ };
+ static const struct clk_ops *rkpmic_get_ops(long variant)
+ {
+       switch (variant) {
+       case RK809_ID:
+       case RK817_ID:
+               return &rk817_clkout2_ops;
+       /*
+        * For the default case, it match the following PMIC type.
+        * RK805_ID
+        * RK808_ID
+        * RK818_ID
+        */
+       default:
+               return &rk808_clkout2_ops;
+       }
+ }
  static int rk808_clkout_probe(struct platform_device *pdev)
  {
        struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
                return ret;
  
        init.name = "rk808-clkout2";
-       init.ops = &rk808_clkout2_ops;
+       init.ops = rkpmic_get_ops(rk808->variant);
        rk808_clkout->clkout2_hw.init = &init;
  
        /* optional override of the clockname */
diff --combined drivers/gpio/Kconfig
index e4fee216d5a46c832e676c612523c2f8ff7e7263,87dbbd03910df2ffd7a3d2c8baa2c0f5b4ebc957..43d7d6a9d9ab0dbda5bb52725e9df20a6b60c65a
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  #
  # GPIO infrastructure and drivers
  #
@@@ -62,12 -61,16 +62,12 @@@ config GPIO_SYSF
        bool "/sys/class/gpio/... (sysfs interface)"
        depends on SYSFS
        help
 -        Say Y here to add a sysfs interface for GPIOs.
 +        Say Y here to add the legacy sysfs interface for GPIOs.
  
 -        This is mostly useful to work around omissions in a system's
 -        kernel support.  Those are common in custom and semicustom
 -        hardware assembled using standard kernels with a minimum of
 -        custom patches.  In those cases, userspace code may import
 -        a given GPIO from the kernel, if no kernel driver requested it.
 -
 -        Kernel drivers may also request that a particular GPIO be
 -        exported to userspace; this can be useful when debugging.
 +        This ABI is deprecated. If you want to use GPIO from userspace,
 +        use the character device /dev/gpiochipN with the appropriate
 +        ioctl() operations instead. The character device is always
 +        available.
  
  config GPIO_GENERIC
        depends on HAS_IOMEM # Only for IOMEM drivers
@@@ -174,7 -177,7 +174,7 @@@ config GPIO_CLPS711
  config GPIO_DAVINCI
        bool "TI Davinci/Keystone GPIO support"
        default y if ARCH_DAVINCI
 -      depends on ARM && (ARCH_DAVINCI || ARCH_KEYSTONE)
 +      depends on (ARM || ARM64) && (ARCH_DAVINCI || ARCH_KEYSTONE || ARCH_K3)
        help
          Say yes here to enable GPIO support for TI Davinci/Keystone SoCs.
  
@@@ -489,8 -492,7 +489,8 @@@ config GPIO_STA2X1
  
  config GPIO_STP_XWAY
        bool "XWAY STP GPIOs"
 -      depends on SOC_XWAY
 +      depends on SOC_XWAY || COMPILE_TEST
 +      depends on OF_GPIO
        help
          This enables support for the Serial To Parallel (STP) unit found on
          XWAY SoC. The STP allows the SoC to drive a shift registers cascade,
@@@ -599,6 -601,7 +599,6 @@@ config GPIO_XGENE_S
  
  config GPIO_XILINX
        tristate "Xilinx GPIO support"
 -      depends on OF_GPIO
        help
          Say yes here to support the Xilinx FPGA GPIO device
  
@@@ -819,7 -822,6 +819,7 @@@ config GPIO_ADP558
  config GPIO_ADP5588_IRQ
        bool "Interrupt controller support for ADP5588"
        depends on GPIO_ADP5588=y
 +      select GPIOLIB_IRQCHIP
        help
          Say yes here to enable the adp5588 to be used as an interrupt
          controller. It requires the driver to be built in the kernel.
@@@ -975,6 -977,17 +975,17 @@@ config GPIO_ARIZON
        help
          Support for GPIOs on Wolfson Arizona class devices.
  
+ config GPIO_BD70528
+       tristate "ROHM BD70528 GPIO support"
+       depends on MFD_ROHM_BD70528
+       help
+         Support for GPIOs on ROHM BD70528 PMIC. There are four GPIOs
+         available on the ROHM PMIC in total. The GPIOs can also
+         generate interrupts.
+         This driver can also be built as a module. If so, the module
+         will be called gpio-bd70528.
  config GPIO_BD9571MWV
        tristate "ROHM BD9571 GPIO support"
        depends on MFD_BD9571MWV
diff --combined drivers/gpio/Makefile
index 9e400e34e3003ed70f23e1b8f4be31cc60b05027,10efc4f743fe661b5e5d23144edd83d06b671cf6..a4e91175c70805508d2bfe90c567102264bb59ca
@@@ -17,154 -17,155 +17,155 @@@ obj-$(CONFIG_GPIO_GENERIC)      += gpio-gene
  # directly supported by gpio-generic
  gpio-generic-$(CONFIG_GPIO_GENERIC)   += gpio-mmio.o
  
 -obj-$(CONFIG_GPIO_104_DIO_48E)        += gpio-104-dio-48e.o
 -obj-$(CONFIG_GPIO_104_IDIO_16)        += gpio-104-idio-16.o
 -obj-$(CONFIG_GPIO_104_IDI_48) += gpio-104-idi-48.o
 -obj-$(CONFIG_GPIO_74X164)     += gpio-74x164.o
 -obj-$(CONFIG_GPIO_74XX_MMIO)  += gpio-74xx-mmio.o
 -obj-$(CONFIG_GPIO_ADNP)               += gpio-adnp.o
 -obj-$(CONFIG_GPIO_ADP5520)    += gpio-adp5520.o
 -obj-$(CONFIG_GPIO_ADP5588)    += gpio-adp5588.o
 -obj-$(CONFIG_GPIO_ALTERA)     += gpio-altera.o
 -obj-$(CONFIG_GPIO_ALTERA_A10SR)       += gpio-altera-a10sr.o
 -obj-$(CONFIG_GPIO_AMD_FCH)    += gpio-amd-fch.o
 -obj-$(CONFIG_GPIO_AMD8111)    += gpio-amd8111.o
 -obj-$(CONFIG_GPIO_AMDPT)      += gpio-amdpt.o
 -obj-$(CONFIG_GPIO_ARIZONA)    += gpio-arizona.o
 -obj-$(CONFIG_GPIO_ATH79)      += gpio-ath79.o
 -obj-$(CONFIG_GPIO_ASPEED)     += gpio-aspeed.o
 -obj-$(CONFIG_GPIO_RASPBERRYPI_EXP)    += gpio-raspberrypi-exp.o
 -obj-$(CONFIG_GPIO_BCM_KONA)   += gpio-bcm-kona.o
 -obj-$(CONFIG_GPIO_BD70528)    += gpio-bd70528.o
 -obj-$(CONFIG_GPIO_BD9571MWV)  += gpio-bd9571mwv.o
 -obj-$(CONFIG_GPIO_BRCMSTB)    += gpio-brcmstb.o
 -obj-$(CONFIG_GPIO_BT8XX)      += gpio-bt8xx.o
 -obj-$(CONFIG_GPIO_CADENCE)    += gpio-cadence.o
 -obj-$(CONFIG_GPIO_CLPS711X)   += gpio-clps711x.o
 -obj-$(CONFIG_GPIO_CS5535)     += gpio-cs5535.o
 -obj-$(CONFIG_GPIO_CRYSTAL_COVE)       += gpio-crystalcove.o
 -obj-$(CONFIG_GPIO_DA9052)     += gpio-da9052.o
 -obj-$(CONFIG_GPIO_DA9055)     += gpio-da9055.o
 -obj-$(CONFIG_GPIO_DAVINCI)    += gpio-davinci.o
 -obj-$(CONFIG_GPIO_DLN2)               += gpio-dln2.o
 -obj-$(CONFIG_GPIO_DWAPB)      += gpio-dwapb.o
 -obj-$(CONFIG_GPIO_EIC_SPRD)   += gpio-eic-sprd.o
 -obj-$(CONFIG_GPIO_EM)         += gpio-em.o
 -obj-$(CONFIG_GPIO_EP93XX)     += gpio-ep93xx.o
 -obj-$(CONFIG_GPIO_EXAR)               += gpio-exar.o
 -obj-$(CONFIG_GPIO_F7188X)     += gpio-f7188x.o
 -obj-$(CONFIG_GPIO_FTGPIO010)  += gpio-ftgpio010.o
 -obj-$(CONFIG_GPIO_GE_FPGA)    += gpio-ge.o
 -obj-$(CONFIG_GPIO_GPIO_MM)    += gpio-gpio-mm.o
 -obj-$(CONFIG_GPIO_GRGPIO)     += gpio-grgpio.o
 -obj-$(CONFIG_GPIO_GW_PLD)     += gpio-gw-pld.o
 -obj-$(CONFIG_GPIO_HLWD)               += gpio-hlwd.o
 -obj-$(CONFIG_HTC_EGPIO)               += gpio-htc-egpio.o
 -obj-$(CONFIG_GPIO_ICH)                += gpio-ich.o
 -obj-$(CONFIG_GPIO_IOP)                += gpio-iop.o
 -obj-$(CONFIG_GPIO_IXP4XX)     += gpio-ixp4xx.o
 -obj-$(CONFIG_GPIO_IT87)               += gpio-it87.o
 -obj-$(CONFIG_GPIO_JANZ_TTL)   += gpio-janz-ttl.o
 -obj-$(CONFIG_GPIO_KEMPLD)     += gpio-kempld.o
 -obj-$(CONFIG_ARCH_KS8695)     += gpio-ks8695.o
 -obj-$(CONFIG_GPIO_INTEL_MID)  += gpio-intel-mid.o
 -obj-$(CONFIG_GPIO_LOONGSON)   += gpio-loongson.o
 -obj-$(CONFIG_GPIO_LP3943)     += gpio-lp3943.o
 -obj-$(CONFIG_GPIO_LPC18XX)    += gpio-lpc18xx.o
 -obj-$(CONFIG_ARCH_LPC32XX)    += gpio-lpc32xx.o
 -obj-$(CONFIG_GPIO_LP873X)     += gpio-lp873x.o
 -obj-$(CONFIG_GPIO_LP87565)    += gpio-lp87565.o
 -obj-$(CONFIG_GPIO_LYNXPOINT)  += gpio-lynxpoint.o
 -obj-$(CONFIG_GPIO_MADERA)     += gpio-madera.o
 -obj-$(CONFIG_GPIO_MAX3191X)   += gpio-max3191x.o
 -obj-$(CONFIG_GPIO_MAX730X)    += gpio-max730x.o
 -obj-$(CONFIG_GPIO_MAX7300)    += gpio-max7300.o
 -obj-$(CONFIG_GPIO_MAX7301)    += gpio-max7301.o
 -obj-$(CONFIG_GPIO_MAX732X)    += gpio-max732x.o
 -obj-$(CONFIG_GPIO_MAX77620)   += gpio-max77620.o
 -obj-$(CONFIG_GPIO_MAX77650)   += gpio-max77650.o
 -obj-$(CONFIG_GPIO_MB86S7X)    += gpio-mb86s7x.o
 -obj-$(CONFIG_GPIO_MENZ127)    += gpio-menz127.o
 -obj-$(CONFIG_GPIO_MERRIFIELD) += gpio-merrifield.o
 -obj-$(CONFIG_GPIO_MC33880)    += gpio-mc33880.o
 -obj-$(CONFIG_GPIO_MC9S08DZ60) += gpio-mc9s08dz60.o
 -obj-$(CONFIG_GPIO_MLXBF)      += gpio-mlxbf.o
 -obj-$(CONFIG_GPIO_ML_IOH)     += gpio-ml-ioh.o
 -obj-$(CONFIG_GPIO_MM_LANTIQ)  += gpio-mm-lantiq.o
 -obj-$(CONFIG_GPIO_MOCKUP)      += gpio-mockup.o
 -obj-$(CONFIG_GPIO_MPC5200)    += gpio-mpc5200.o
 -obj-$(CONFIG_GPIO_MPC8XXX)    += gpio-mpc8xxx.o
 -obj-$(CONFIG_GPIO_MSIC)               += gpio-msic.o
 +obj-$(CONFIG_GPIO_104_DIO_48E)                += gpio-104-dio-48e.o
 +obj-$(CONFIG_GPIO_104_IDI_48)         += gpio-104-idi-48.o
 +obj-$(CONFIG_GPIO_104_IDIO_16)                += gpio-104-idio-16.o
 +obj-$(CONFIG_GPIO_74X164)             += gpio-74x164.o
 +obj-$(CONFIG_GPIO_74XX_MMIO)          += gpio-74xx-mmio.o
 +obj-$(CONFIG_GPIO_ADNP)                       += gpio-adnp.o
 +obj-$(CONFIG_GPIO_ADP5520)            += gpio-adp5520.o
 +obj-$(CONFIG_GPIO_ADP5588)            += gpio-adp5588.o
 +obj-$(CONFIG_GPIO_ALTERA_A10SR)               += gpio-altera-a10sr.o
 +obj-$(CONFIG_GPIO_ALTERA)             += gpio-altera.o
 +obj-$(CONFIG_GPIO_AMD8111)            += gpio-amd8111.o
 +obj-$(CONFIG_GPIO_AMD_FCH)            += gpio-amd-fch.o
 +obj-$(CONFIG_GPIO_AMDPT)              += gpio-amdpt.o
 +obj-$(CONFIG_GPIO_ARIZONA)            += gpio-arizona.o
 +obj-$(CONFIG_GPIO_ASPEED)             += gpio-aspeed.o
 +obj-$(CONFIG_GPIO_ATH79)              += gpio-ath79.o
 +obj-$(CONFIG_GPIO_BCM_KONA)           += gpio-bcm-kona.o
++obj-$(CONFIG_GPIO_BD70528)            += gpio-bd70528.o
 +obj-$(CONFIG_GPIO_BD9571MWV)          += gpio-bd9571mwv.o
 +obj-$(CONFIG_GPIO_BRCMSTB)            += gpio-brcmstb.o
 +obj-$(CONFIG_GPIO_BT8XX)              += gpio-bt8xx.o
 +obj-$(CONFIG_GPIO_CADENCE)            += gpio-cadence.o
 +obj-$(CONFIG_GPIO_CLPS711X)           += gpio-clps711x.o
 +obj-$(CONFIG_GPIO_SNPS_CREG)          += gpio-creg-snps.o
 +obj-$(CONFIG_GPIO_CRYSTAL_COVE)               += gpio-crystalcove.o
 +obj-$(CONFIG_GPIO_CS5535)             += gpio-cs5535.o
 +obj-$(CONFIG_GPIO_DA9052)             += gpio-da9052.o
 +obj-$(CONFIG_GPIO_DA9055)             += gpio-da9055.o
 +obj-$(CONFIG_GPIO_DAVINCI)            += gpio-davinci.o
 +obj-$(CONFIG_GPIO_DLN2)                       += gpio-dln2.o
 +obj-$(CONFIG_GPIO_DWAPB)              += gpio-dwapb.o
 +obj-$(CONFIG_GPIO_EIC_SPRD)           += gpio-eic-sprd.o
 +obj-$(CONFIG_GPIO_EM)                 += gpio-em.o
 +obj-$(CONFIG_GPIO_EP93XX)             += gpio-ep93xx.o
 +obj-$(CONFIG_GPIO_EXAR)                       += gpio-exar.o
 +obj-$(CONFIG_GPIO_F7188X)             += gpio-f7188x.o
 +obj-$(CONFIG_GPIO_FTGPIO010)          += gpio-ftgpio010.o
 +obj-$(CONFIG_GPIO_GE_FPGA)            += gpio-ge.o
 +obj-$(CONFIG_GPIO_GPIO_MM)            += gpio-gpio-mm.o
 +obj-$(CONFIG_GPIO_GRGPIO)             += gpio-grgpio.o
 +obj-$(CONFIG_GPIO_GW_PLD)             += gpio-gw-pld.o
 +obj-$(CONFIG_GPIO_HLWD)                       += gpio-hlwd.o
 +obj-$(CONFIG_HTC_EGPIO)                       += gpio-htc-egpio.o
 +obj-$(CONFIG_GPIO_ICH)                        += gpio-ich.o
 +obj-$(CONFIG_GPIO_INTEL_MID)          += gpio-intel-mid.o
 +obj-$(CONFIG_GPIO_IOP)                        += gpio-iop.o
 +obj-$(CONFIG_GPIO_IT87)                       += gpio-it87.o
 +obj-$(CONFIG_GPIO_IXP4XX)             += gpio-ixp4xx.o
 +obj-$(CONFIG_GPIO_JANZ_TTL)           += gpio-janz-ttl.o
 +obj-$(CONFIG_GPIO_KEMPLD)             += gpio-kempld.o
 +obj-$(CONFIG_ARCH_KS8695)             += gpio-ks8695.o
 +obj-$(CONFIG_GPIO_LOONGSON1)          += gpio-loongson1.o
 +obj-$(CONFIG_GPIO_LOONGSON)           += gpio-loongson.o
 +obj-$(CONFIG_GPIO_LP3943)             += gpio-lp3943.o
 +obj-$(CONFIG_GPIO_LP873X)             += gpio-lp873x.o
 +obj-$(CONFIG_GPIO_LP87565)            += gpio-lp87565.o
 +obj-$(CONFIG_GPIO_LPC18XX)            += gpio-lpc18xx.o
 +obj-$(CONFIG_ARCH_LPC32XX)            += gpio-lpc32xx.o
 +obj-$(CONFIG_GPIO_LYNXPOINT)          += gpio-lynxpoint.o
 +obj-$(CONFIG_GPIO_MADERA)             += gpio-madera.o
 +obj-$(CONFIG_GPIO_MAX3191X)           += gpio-max3191x.o
 +obj-$(CONFIG_GPIO_MAX7300)            += gpio-max7300.o
 +obj-$(CONFIG_GPIO_MAX7301)            += gpio-max7301.o
 +obj-$(CONFIG_GPIO_MAX730X)            += gpio-max730x.o
 +obj-$(CONFIG_GPIO_MAX732X)            += gpio-max732x.o
 +obj-$(CONFIG_GPIO_MAX77620)           += gpio-max77620.o
 +obj-$(CONFIG_GPIO_MAX77650)           += gpio-max77650.o
 +obj-$(CONFIG_GPIO_MB86S7X)            += gpio-mb86s7x.o
 +obj-$(CONFIG_GPIO_MC33880)            += gpio-mc33880.o
 +obj-$(CONFIG_GPIO_MC9S08DZ60)         += gpio-mc9s08dz60.o
 +obj-$(CONFIG_GPIO_MENZ127)            += gpio-menz127.o
 +obj-$(CONFIG_GPIO_MERRIFIELD)         += gpio-merrifield.o
 +obj-$(CONFIG_GPIO_ML_IOH)             += gpio-ml-ioh.o
 +obj-$(CONFIG_GPIO_MLXBF)              += gpio-mlxbf.o
 +obj-$(CONFIG_GPIO_MM_LANTIQ)          += gpio-mm-lantiq.o
 +obj-$(CONFIG_GPIO_MOCKUP)             += gpio-mockup.o
 +obj-$(CONFIG_GPIO_MPC5200)            += gpio-mpc5200.o
 +obj-$(CONFIG_GPIO_MPC8XXX)            += gpio-mpc8xxx.o
 +obj-$(CONFIG_GPIO_MSIC)                       += gpio-msic.o
  obj-$(CONFIG_GPIO_MT7621)             += gpio-mt7621.o
 -obj-$(CONFIG_GPIO_MVEBU)        += gpio-mvebu.o
 -obj-$(CONFIG_GPIO_MXC)                += gpio-mxc.o
 -obj-$(CONFIG_GPIO_MXS)                += gpio-mxs.o
 -obj-$(CONFIG_GPIO_OCTEON)     += gpio-octeon.o
 -obj-$(CONFIG_GPIO_OMAP)               += gpio-omap.o
 -obj-$(CONFIG_GPIO_PCA953X)    += gpio-pca953x.o
 -obj-$(CONFIG_GPIO_PCF857X)    += gpio-pcf857x.o
 -obj-$(CONFIG_GPIO_PCH)                += gpio-pch.o
 -obj-$(CONFIG_GPIO_PCI_IDIO_16)        += gpio-pci-idio-16.o
 -obj-$(CONFIG_GPIO_PCIE_IDIO_24)       += gpio-pcie-idio-24.o
 -obj-$(CONFIG_GPIO_PISOSR)     += gpio-pisosr.o
 -obj-$(CONFIG_GPIO_PL061)      += gpio-pl061.o
 +obj-$(CONFIG_GPIO_MVEBU)              += gpio-mvebu.o
 +obj-$(CONFIG_GPIO_MXC)                        += gpio-mxc.o
 +obj-$(CONFIG_GPIO_MXS)                        += gpio-mxs.o
 +obj-$(CONFIG_GPIO_OCTEON)             += gpio-octeon.o
 +obj-$(CONFIG_GPIO_OMAP)                       += gpio-omap.o
 +obj-$(CONFIG_GPIO_PALMAS)             += gpio-palmas.o
 +obj-$(CONFIG_GPIO_PCA953X)            += gpio-pca953x.o
 +obj-$(CONFIG_GPIO_PCF857X)            += gpio-pcf857x.o
 +obj-$(CONFIG_GPIO_PCH)                        += gpio-pch.o
 +obj-$(CONFIG_GPIO_PCIE_IDIO_24)               += gpio-pcie-idio-24.o
 +obj-$(CONFIG_GPIO_PCI_IDIO_16)                += gpio-pci-idio-16.o
 +obj-$(CONFIG_GPIO_PISOSR)             += gpio-pisosr.o
 +obj-$(CONFIG_GPIO_PL061)              += gpio-pl061.o
  obj-$(CONFIG_GPIO_PMIC_EIC_SPRD)      += gpio-pmic-eic-sprd.o
 -obj-$(CONFIG_GPIO_PXA)                += gpio-pxa.o
 -obj-$(CONFIG_GPIO_RC5T583)    += gpio-rc5t583.o
 -obj-$(CONFIG_GPIO_RDC321X)    += gpio-rdc321x.o
 -obj-$(CONFIG_GPIO_RCAR)               += gpio-rcar.o
 -obj-$(CONFIG_GPIO_REG)                += gpio-reg.o
 -obj-$(CONFIG_ARCH_SA1100)     += gpio-sa1100.o
 +obj-$(CONFIG_GPIO_PXA)                        += gpio-pxa.o
 +obj-$(CONFIG_GPIO_RASPBERRYPI_EXP)    += gpio-raspberrypi-exp.o
 +obj-$(CONFIG_GPIO_RC5T583)            += gpio-rc5t583.o
 +obj-$(CONFIG_GPIO_RCAR)                       += gpio-rcar.o
 +obj-$(CONFIG_GPIO_RDC321X)            += gpio-rdc321x.o
 +obj-$(CONFIG_GPIO_REG)                        += gpio-reg.o
 +obj-$(CONFIG_ARCH_SA1100)             += gpio-sa1100.o
  obj-$(CONFIG_GPIO_SAMA5D2_PIOBU)      += gpio-sama5d2-piobu.o
 -obj-$(CONFIG_GPIO_SCH)                += gpio-sch.o
 -obj-$(CONFIG_GPIO_SCH311X)    += gpio-sch311x.o
 -obj-$(CONFIG_GPIO_SNPS_CREG)  += gpio-creg-snps.o
 -obj-$(CONFIG_GPIO_SODAVILLE)  += gpio-sodaville.o
 -obj-$(CONFIG_GPIO_SPEAR_SPICS)        += gpio-spear-spics.o
 -obj-$(CONFIG_GPIO_SPRD)               += gpio-sprd.o
 -obj-$(CONFIG_GPIO_STA2X11)    += gpio-sta2x11.o
 -obj-$(CONFIG_GPIO_STMPE)      += gpio-stmpe.o
 -obj-$(CONFIG_GPIO_STP_XWAY)   += gpio-stp-xway.o
 -obj-$(CONFIG_GPIO_SYSCON)     += gpio-syscon.o
 -obj-$(CONFIG_GPIO_TB10X)      += gpio-tb10x.o
 -obj-$(CONFIG_GPIO_TC3589X)    += gpio-tc3589x.o
 -obj-$(CONFIG_GPIO_TEGRA)      += gpio-tegra.o
 -obj-$(CONFIG_GPIO_TEGRA186)   += gpio-tegra186.o
 -obj-$(CONFIG_GPIO_THUNDERX)   += gpio-thunderx.o
 -obj-$(CONFIG_GPIO_TIMBERDALE) += gpio-timberdale.o
 -obj-$(CONFIG_GPIO_PALMAS)     += gpio-palmas.o
 -obj-$(CONFIG_GPIO_SIOX)               += gpio-siox.o
 -obj-$(CONFIG_GPIO_TPIC2810)   += gpio-tpic2810.o
 -obj-$(CONFIG_GPIO_TPS65086)   += gpio-tps65086.o
 -obj-$(CONFIG_GPIO_TPS65218)   += gpio-tps65218.o
 -obj-$(CONFIG_GPIO_TPS6586X)   += gpio-tps6586x.o
 -obj-$(CONFIG_GPIO_TPS65910)   += gpio-tps65910.o
 -obj-$(CONFIG_GPIO_TPS65912)   += gpio-tps65912.o
 -obj-$(CONFIG_GPIO_TPS68470)   += gpio-tps68470.o
 -obj-$(CONFIG_GPIO_TQMX86)     += gpio-tqmx86.o
 -obj-$(CONFIG_GPIO_TS4800)     += gpio-ts4800.o
 -obj-$(CONFIG_GPIO_TS4900)     += gpio-ts4900.o
 -obj-$(CONFIG_GPIO_TS5500)     += gpio-ts5500.o
 -obj-$(CONFIG_GPIO_TWL4030)    += gpio-twl4030.o
 -obj-$(CONFIG_GPIO_TWL6040)    += gpio-twl6040.o
 -obj-$(CONFIG_GPIO_UCB1400)    += gpio-ucb1400.o
 -obj-$(CONFIG_GPIO_UNIPHIER)   += gpio-uniphier.o
 -obj-$(CONFIG_GPIO_VF610)      += gpio-vf610.o
 -obj-$(CONFIG_GPIO_VIPERBOARD) += gpio-viperboard.o
 -obj-$(CONFIG_GPIO_VR41XX)     += gpio-vr41xx.o
 -obj-$(CONFIG_GPIO_VX855)      += gpio-vx855.o
 -obj-$(CONFIG_GPIO_WHISKEY_COVE)       += gpio-wcove.o
 -obj-$(CONFIG_GPIO_WINBOND)    += gpio-winbond.o
 -obj-$(CONFIG_GPIO_WM831X)     += gpio-wm831x.o
 -obj-$(CONFIG_GPIO_WM8350)     += gpio-wm8350.o
 -obj-$(CONFIG_GPIO_WM8994)     += gpio-wm8994.o
 -obj-$(CONFIG_GPIO_WS16C48)    += gpio-ws16c48.o
 -obj-$(CONFIG_GPIO_XGENE)      += gpio-xgene.o
 -obj-$(CONFIG_GPIO_XGENE_SB)   += gpio-xgene-sb.o
 -obj-$(CONFIG_GPIO_XILINX)     += gpio-xilinx.o
 -obj-$(CONFIG_GPIO_XLP)                += gpio-xlp.o
 -obj-$(CONFIG_GPIO_XRA1403)    += gpio-xra1403.o
 -obj-$(CONFIG_GPIO_XTENSA)     += gpio-xtensa.o
 -obj-$(CONFIG_GPIO_ZEVIO)      += gpio-zevio.o
 -obj-$(CONFIG_GPIO_ZYNQ)               += gpio-zynq.o
 -obj-$(CONFIG_GPIO_ZX)         += gpio-zx.o
 -obj-$(CONFIG_GPIO_LOONGSON1)  += gpio-loongson1.o
 +obj-$(CONFIG_GPIO_SCH311X)            += gpio-sch311x.o
 +obj-$(CONFIG_GPIO_SCH)                        += gpio-sch.o
 +obj-$(CONFIG_GPIO_SIOX)                       += gpio-siox.o
 +obj-$(CONFIG_GPIO_SODAVILLE)          += gpio-sodaville.o
 +obj-$(CONFIG_GPIO_SPEAR_SPICS)                += gpio-spear-spics.o
 +obj-$(CONFIG_GPIO_SPRD)                       += gpio-sprd.o
 +obj-$(CONFIG_GPIO_STA2X11)            += gpio-sta2x11.o
 +obj-$(CONFIG_GPIO_STMPE)              += gpio-stmpe.o
 +obj-$(CONFIG_GPIO_STP_XWAY)           += gpio-stp-xway.o
 +obj-$(CONFIG_GPIO_SYSCON)             += gpio-syscon.o
 +obj-$(CONFIG_GPIO_TB10X)              += gpio-tb10x.o
 +obj-$(CONFIG_GPIO_TC3589X)            += gpio-tc3589x.o
 +obj-$(CONFIG_GPIO_TEGRA186)           += gpio-tegra186.o
 +obj-$(CONFIG_GPIO_TEGRA)              += gpio-tegra.o
 +obj-$(CONFIG_GPIO_THUNDERX)           += gpio-thunderx.o
 +obj-$(CONFIG_GPIO_TIMBERDALE)         += gpio-timberdale.o
 +obj-$(CONFIG_GPIO_TPIC2810)           += gpio-tpic2810.o
 +obj-$(CONFIG_GPIO_TPS65086)           += gpio-tps65086.o
 +obj-$(CONFIG_GPIO_TPS65218)           += gpio-tps65218.o
 +obj-$(CONFIG_GPIO_TPS6586X)           += gpio-tps6586x.o
 +obj-$(CONFIG_GPIO_TPS65910)           += gpio-tps65910.o
 +obj-$(CONFIG_GPIO_TPS65912)           += gpio-tps65912.o
 +obj-$(CONFIG_GPIO_TPS68470)           += gpio-tps68470.o
 +obj-$(CONFIG_GPIO_TQMX86)             += gpio-tqmx86.o
 +obj-$(CONFIG_GPIO_TS4800)             += gpio-ts4800.o
 +obj-$(CONFIG_GPIO_TS4900)             += gpio-ts4900.o
 +obj-$(CONFIG_GPIO_TS5500)             += gpio-ts5500.o
 +obj-$(CONFIG_GPIO_TWL4030)            += gpio-twl4030.o
 +obj-$(CONFIG_GPIO_TWL6040)            += gpio-twl6040.o
 +obj-$(CONFIG_GPIO_UCB1400)            += gpio-ucb1400.o
 +obj-$(CONFIG_GPIO_UNIPHIER)           += gpio-uniphier.o
 +obj-$(CONFIG_GPIO_VF610)              += gpio-vf610.o
 +obj-$(CONFIG_GPIO_VIPERBOARD)         += gpio-viperboard.o
 +obj-$(CONFIG_GPIO_VR41XX)             += gpio-vr41xx.o
 +obj-$(CONFIG_GPIO_VX855)              += gpio-vx855.o
 +obj-$(CONFIG_GPIO_WHISKEY_COVE)               += gpio-wcove.o
 +obj-$(CONFIG_GPIO_WINBOND)            += gpio-winbond.o
 +obj-$(CONFIG_GPIO_WM831X)             += gpio-wm831x.o
 +obj-$(CONFIG_GPIO_WM8350)             += gpio-wm8350.o
 +obj-$(CONFIG_GPIO_WM8994)             += gpio-wm8994.o
 +obj-$(CONFIG_GPIO_WS16C48)            += gpio-ws16c48.o
 +obj-$(CONFIG_GPIO_XGENE)              += gpio-xgene.o
 +obj-$(CONFIG_GPIO_XGENE_SB)           += gpio-xgene-sb.o
 +obj-$(CONFIG_GPIO_XILINX)             += gpio-xilinx.o
 +obj-$(CONFIG_GPIO_XLP)                        += gpio-xlp.o
 +obj-$(CONFIG_GPIO_XRA1403)            += gpio-xra1403.o
 +obj-$(CONFIG_GPIO_XTENSA)             += gpio-xtensa.o
 +obj-$(CONFIG_GPIO_ZEVIO)              += gpio-zevio.o
 +obj-$(CONFIG_GPIO_ZX)                 += gpio-zx.o
 +obj-$(CONFIG_GPIO_ZYNQ)                       += gpio-zynq.o
diff --combined drivers/mfd/Kconfig
index 6855ff443e0411986119d793dbbb4c474e5b7573,760100c7d5f964f1f2506e842237b9fdd79f7154..f129f9678940599329a1673ac29a082ce48ab1f4
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  #
  # Multifunction miscellaneous devices
  #
@@@ -261,6 -260,13 +261,13 @@@ config MFD_MADERA_SP
          Support for the Cirrus Logic Madera platform audio SoC
          core functionality controlled via SPI.
  
+ config MFD_CS47L15
+       bool "Cirrus Logic CS47L15"
+       select PINCTRL_CS47L15
+       depends on MFD_MADERA
+       help
+         Support for Cirrus Logic CS47L15 Smart Codec
  config MFD_CS47L35
        bool "Cirrus Logic CS47L35"
        select PINCTRL_CS47L35
@@@ -282,6 -288,13 +289,13 @@@ config MFD_CS47L9
        help
          Support for Cirrus Logic CS47L90 and CS47L91 Smart Codecs
  
+ config MFD_CS47L92
+       bool "Cirrus Logic CS47L92/93"
+       select PINCTRL_CS47L92
+       depends on MFD_MADERA
+       help
+         Support for Cirrus Logic CS42L92, CS47L92 and CS47L93 Smart Codecs
  config MFD_ASIC3
        bool "Compaq ASIC3"
        depends on GPIOLIB && ARM
@@@ -1031,14 -1044,14 +1045,14 @@@ config MFD_RC5T58
          different functionality of the device.
  
  config MFD_RK808
-       tristate "Rockchip RK805/RK808/RK818 Power Management Chip"
+       tristate "Rockchip RK805/RK808/RK809/RK817/RK818 Power Management Chip"
        depends on I2C && OF
        select MFD_CORE
        select REGMAP_I2C
        select REGMAP_IRQ
        help
-         If you say yes here you get support for the RK805, RK808 and RK818
-         Power Management chips.
+         If you say yes here you get support for the RK805, RK808, RK809,
+         RK817 and RK818 Power Management chips.
          This driver provides common support for accessing the device
          through I2C interface. The device supports multiple sub-devices
          including interrupts, RTC, LDO & DCDC regulators, and onkey.
@@@ -1336,8 -1349,9 +1350,8 @@@ config MFD_TI_LM
        select REGMAP_I2C
        help
          Say yes here to enable support for TI LMU chips.
 -
 -        TI LMU MFD supports LM3532, LM3631, LM3632, LM3633, LM3695 and LM3697.
 -        It consists of backlight, LED and regulator driver.
 +        TI LMU MFD supports LM3532, LM3631, LM3632, LM3633, LM3695 and
 +        LM36274.  It consists of backlight, LED and regulator driver.
          It provides consistent device controls for lighting functions.
  
  config MFD_OMAP_USB_HOST
@@@ -1890,6 -1904,23 +1904,23 @@@ config MFD_ROHM_BD718X
          NXP i.MX8. It contains 8 BUCK outputs and 7 LDOs, voltage monitoring
          and emergency shut down as well as 32,768KHz clock output.
  
+ config MFD_ROHM_BD70528
+       tristate "ROHM BD70528 Power Management IC"
+       depends on I2C=y
+       depends on OF
+       select REGMAP_I2C
+       select REGMAP_IRQ
+       select MFD_CORE
+       help
+         Select this option to get support for the ROHM BD70528 Power
+         Management IC. BD71837 is general purpose single-chip power
+         management IC for battery-powered portable devices. It contains
+         3 ultra-low current consumption buck converters, 3 LDOs and 2 LED
+         drivers. Also included are 4 GPIOs, a real-time clock (RTC), a 32kHz
+         crystal oscillator, high-accuracy VREF for use with an external ADC,
+         10 bits SAR ADC for battery temperature monitor and 1S battery
+         charger.
  config MFD_STM32_LPTIMER
        tristate "Support for STM32 Low-Power Timer"
        depends on (ARCH_STM32 && OF) || COMPILE_TEST
index 2bdc7b02157abd95e4ad68424cad66e9e4664707,0ca0fc9a67fd9bf5e64074d5688ace009f031156..4a31907a4525fabf7e59f188ddc48e3e5006b935
@@@ -1,10 -1,13 +1,10 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Arizona core driver
   *
   * Copyright 2012 Wolfson Microelectronics plc
   *
   * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
   */
  
  #include <linux/clk.h>
@@@ -993,7 -996,7 +993,7 @@@ int arizona_dev_init(struct arizona *ar
        unsigned int reg, val;
        int (*apply_patch)(struct arizona *) = NULL;
        const struct mfd_cell *subdevs = NULL;
-       int n_subdevs, ret, i;
+       int n_subdevs = 0, ret, i;
  
        dev_set_drvdata(arizona->dev, arizona);
        mutex_init(&arizona->clk_lock);
index a5391f96eafd14c2b3b7f1b93fb82ce82523807c,eb77bf6406f3abbba5c3e5dc3c5c1cf507194ca5..41dccced502668d9cd4f49ce41496471b4c7adf2
@@@ -1,8 -1,20 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * cros_ec_dev - expose the Chrome OS Embedded Controller to user-space
   *
   * Copyright (C) 2014 Google, Inc.
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program. If not, see <http://www.gnu.org/licenses/>.
   */
  
  #include <linux/fs.h>
@@@ -285,13 -297,15 +285,15 @@@ static void cros_ec_sensors_register(st
  
        resp = (struct ec_response_motion_sense *)msg->data;
        sensor_num = resp->dump.sensor_count;
-       /* Allocate 1 extra sensors in FIFO are needed */
-       sensor_cells = kcalloc(sensor_num + 1, sizeof(struct mfd_cell),
+       /*
+        * Allocate 2 extra sensors if lid angle sensor and/or FIFO are needed.
+        */
+       sensor_cells = kcalloc(sensor_num + 2, sizeof(struct mfd_cell),
                               GFP_KERNEL);
        if (sensor_cells == NULL)
                goto error;
  
-       sensor_platforms = kcalloc(sensor_num + 1,
+       sensor_platforms = kcalloc(sensor_num,
                                   sizeof(struct cros_ec_sensor_platform),
                                   GFP_KERNEL);
        if (sensor_platforms == NULL)
                sensor_cells[id].name = "cros-ec-ring";
                id++;
        }
+       if (cros_ec_check_features(ec,
+                               EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS)) {
+               sensor_cells[id].name = "cros-ec-lid-angle";
+               id++;
+       }
  
        ret = mfd_add_devices(ec->dev, 0, sensor_cells, id,
                              NULL, 0, NULL);
@@@ -364,6 -383,72 +371,72 @@@ error
        kfree(msg);
  }
  
+ static struct cros_ec_sensor_platform sensor_platforms[] = {
+       { .sensor_num = 0 },
+       { .sensor_num = 1 }
+ };
+ static const struct mfd_cell cros_ec_accel_legacy_cells[] = {
+       {
+               .name = "cros-ec-accel-legacy",
+               .platform_data = &sensor_platforms[0],
+               .pdata_size = sizeof(struct cros_ec_sensor_platform),
+       },
+       {
+               .name = "cros-ec-accel-legacy",
+               .platform_data = &sensor_platforms[1],
+               .pdata_size = sizeof(struct cros_ec_sensor_platform),
+       }
+ };
+ static void cros_ec_accel_legacy_register(struct cros_ec_dev *ec)
+ {
+       struct cros_ec_device *ec_dev = ec->ec_dev;
+       u8 status;
+       int ret;
+       /*
+        * ECs that need legacy support are the main EC, directly connected to
+        * the AP.
+        */
+       if (ec->cmd_offset != 0)
+               return;
+       /*
+        * Check if EC supports direct memory reads and if EC has
+        * accelerometers.
+        */
+       if (ec_dev->cmd_readmem) {
+               ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS, 1,
+                                         &status);
+               if (ret < 0) {
+                       dev_warn(ec->dev, "EC direct read error.\n");
+                       return;
+               }
+               /* Check if EC has accelerometers. */
+               if (!(status & EC_MEMMAP_ACC_STATUS_PRESENCE_BIT)) {
+                       dev_info(ec->dev, "EC does not have accelerometers.\n");
+                       return;
+               }
+       }
+       /*
+        * The device may still support accelerometers:
+        * it would be an older ARM based device that do not suppor the
+        * EC_CMD_GET_FEATURES command.
+        *
+        * Register 2 accelerometers, we will fail in the IIO driver if there
+        * are no sensors.
+        */
+       ret = mfd_add_devices(ec->dev, PLATFORM_DEVID_AUTO,
+                             cros_ec_accel_legacy_cells,
+                             ARRAY_SIZE(cros_ec_accel_legacy_cells),
+                             NULL, 0, NULL);
+       if (ret)
+               dev_err(ec_dev->dev, "failed to add EC sensors\n");
+ }
  static const struct mfd_cell cros_ec_cec_cells[] = {
        { .name = "cros-ec-cec" }
  };
@@@ -440,6 -525,16 +513,16 @@@ static int ec_device_probe(struct platf
                ec_platform->ec_name = CROS_EC_DEV_TP_NAME;
        }
  
+       /* Check whether this is actually a SCP rather than an EC. */
+       if (cros_ec_check_features(ec, EC_FEATURE_SCP)) {
+               dev_info(dev, "CrOS SCP MCU detected.\n");
+               /*
+                * Help userspace differentiating ECs from SCP,
+                * regardless of the probing order.
+                */
+               ec_platform->ec_name = CROS_EC_DEV_SCP_NAME;
+       }
        /*
         * Add the class device
         * Link to the character device for creating the /dev entry
        /* check whether this EC is a sensor hub. */
        if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
                cros_ec_sensors_register(ec);
+       else
+               /* Workaroud for older EC firmware */
+               cros_ec_accel_legacy_register(ec);
  
        /* Check whether this EC instance has CEC host command support */
        if (cros_ec_check_features(ec, EC_FEATURE_CEC)) {
diff --combined drivers/mfd/cs5535-mfd.c
index 0b49940c490e00f0936ac0a84fdf8ced5ef7c94d,2e77b6147baa67581e926547b1c8d8e11a6d0784..f1825c0ccbd04ead1f03fc3b4188f952a4dca67c
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * cs5535-mfd.c - core MFD driver for CS5535/CS5536 southbridges
   *
@@@ -8,6 -7,19 +8,6 @@@
   * hardcoded in the CS553x specifications.
   *
   * Copyright (c) 2010  Andres Salomon <dilinger@queued.net>
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  #include <linux/kernel.h>
@@@ -100,22 -112,10 +100,10 @@@ static struct mfd_cell cs5535_mfd_cells
        },
  };
  
- #ifdef CONFIG_OLPC
- static void cs5535_clone_olpc_cells(void)
- {
-       static const char *acpi_clones[] = {
-               "olpc-xo1-pm-acpi",
-               "olpc-xo1-sci-acpi"
-       };
-       if (!machine_is_olpc())
-               return;
-       mfd_clone_cell("cs5535-acpi", acpi_clones, ARRAY_SIZE(acpi_clones));
- }
- #else
- static void cs5535_clone_olpc_cells(void) { }
- #endif
+ static const char *olpc_acpi_clones[] = {
+       "olpc-xo1-pm-acpi",
+       "olpc-xo1-sci-acpi"
+ };
  
  static int cs5535_mfd_probe(struct pci_dev *pdev,
                const struct pci_device_id *id)
                dev_err(&pdev->dev, "MFD add devices failed: %d\n", err);
                goto err_disable;
        }
-       cs5535_clone_olpc_cells();
+       if (machine_is_olpc())
+               mfd_clone_cell("cs5535-acpi", olpc_acpi_clones, ARRAY_SIZE(olpc_acpi_clones));
  
        dev_info(&pdev->dev, "%zu devices registered.\n",
                        ARRAY_SIZE(cs5535_mfd_cells));
index f1c51ce309faef935089b00801ba840f731eb1b6,6693f74aa6ab9a41307b1838ce21011e0fc0fc68..7e3959aaa2858e8b6c08be193c4a6c1d548f3c32
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Device driver for MFD hi655x PMIC
   *
@@@ -7,6 -6,10 +7,6 @@@
   * Authors:
   * Chen Feng <puck.chen@hisilicon.com>
   * Fei  Wang <w.f@huawei.com>
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
   */
  
  #include <linux/gpio.h>
@@@ -109,6 -112,8 +109,8 @@@ static int hi655x_pmic_probe(struct pla
  
        pmic->regmap = devm_regmap_init_mmio_clk(dev, NULL, base,
                                                 &hi655x_regmap_config);
+       if (IS_ERR(pmic->regmap))
+               return PTR_ERR(pmic->regmap);
  
        regmap_read(pmic->regmap, HI655X_BUS_ADDR(HI655X_VER_REG), &pmic->ver);
        if ((pmic->ver < PMU_VER_START) || (pmic->ver > PMU_VER_END)) {
index aed2c04479663bcdf1fbf907eb7a32d65f98069f,8485fe6721eb46a613adac045d4be4100ab94f66..ade6e1ce5a983d140b36fe484abce49d2a47739e
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Intel LPSS PCI support.
   *
@@@ -6,6 -5,10 +6,6 @@@
   *
   * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
   *          Mika Westerberg <mika.westerberg@linux.intel.com>
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
   */
  
  #include <linux/ioport.h>
@@@ -183,10 -186,10 +183,10 @@@ static const struct pci_device_id intel
        { PCI_VDEVICE(INTEL, 0x31bc), (kernel_ulong_t)&bxt_uart_info },
        { PCI_VDEVICE(INTEL, 0x31be), (kernel_ulong_t)&bxt_uart_info },
        { PCI_VDEVICE(INTEL, 0x31c0), (kernel_ulong_t)&bxt_uart_info },
-       { PCI_VDEVICE(INTEL, 0x31ee), (kernel_ulong_t)&bxt_uart_info },
        { PCI_VDEVICE(INTEL, 0x31c2), (kernel_ulong_t)&bxt_info },
        { PCI_VDEVICE(INTEL, 0x31c4), (kernel_ulong_t)&bxt_info },
        { PCI_VDEVICE(INTEL, 0x31c6), (kernel_ulong_t)&bxt_info },
+       { PCI_VDEVICE(INTEL, 0x31ee), (kernel_ulong_t)&bxt_uart_info },
        /* ICL-LP */
        { PCI_VDEVICE(INTEL, 0x34a8), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0x34a9), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0x34ea), (kernel_ulong_t)&bxt_i2c_info },
        { PCI_VDEVICE(INTEL, 0x34eb), (kernel_ulong_t)&bxt_i2c_info },
        { PCI_VDEVICE(INTEL, 0x34fb), (kernel_ulong_t)&spt_info },
+       /* EHL */
+       { PCI_VDEVICE(INTEL, 0x4b28), (kernel_ulong_t)&bxt_uart_info },
+       { PCI_VDEVICE(INTEL, 0x4b29), (kernel_ulong_t)&bxt_uart_info },
+       { PCI_VDEVICE(INTEL, 0x4b2a), (kernel_ulong_t)&bxt_info },
+       { PCI_VDEVICE(INTEL, 0x4b2b), (kernel_ulong_t)&bxt_info },
+       { PCI_VDEVICE(INTEL, 0x4b37), (kernel_ulong_t)&bxt_info },
+       { PCI_VDEVICE(INTEL, 0x4b44), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b45), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b4b), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b4c), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b4d), (kernel_ulong_t)&bxt_uart_info },
+       { PCI_VDEVICE(INTEL, 0x4b78), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b79), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b7a), (kernel_ulong_t)&bxt_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x4b7b), (kernel_ulong_t)&bxt_i2c_info },
        /* APL */
        { PCI_VDEVICE(INTEL, 0x5aac), (kernel_ulong_t)&apl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x5aae), (kernel_ulong_t)&apl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x9da9), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0x9daa), (kernel_ulong_t)&spt_info },
        { PCI_VDEVICE(INTEL, 0x9dab), (kernel_ulong_t)&spt_info },
-       { PCI_VDEVICE(INTEL, 0x9dfb), (kernel_ulong_t)&spt_info },
        { PCI_VDEVICE(INTEL, 0x9dc5), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x9dc6), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x9dc7), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0x9de9), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x9dea), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0x9deb), (kernel_ulong_t)&cnl_i2c_info },
+       { PCI_VDEVICE(INTEL, 0x9dfb), (kernel_ulong_t)&spt_info },
        /* SPT-H */
        { PCI_VDEVICE(INTEL, 0xa127), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0xa128), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0xa329), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0xa32a), (kernel_ulong_t)&spt_info },
        { PCI_VDEVICE(INTEL, 0xa32b), (kernel_ulong_t)&spt_info },
-       { PCI_VDEVICE(INTEL, 0xa37b), (kernel_ulong_t)&spt_info },
        { PCI_VDEVICE(INTEL, 0xa347), (kernel_ulong_t)&spt_uart_info },
        { PCI_VDEVICE(INTEL, 0xa368), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0xa369), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0xa36a), (kernel_ulong_t)&cnl_i2c_info },
        { PCI_VDEVICE(INTEL, 0xa36b), (kernel_ulong_t)&cnl_i2c_info },
+       { PCI_VDEVICE(INTEL, 0xa37b), (kernel_ulong_t)&spt_info },
        { }
  };
  MODULE_DEVICE_TABLE(pci, intel_lpss_pci_ids);
diff --combined drivers/mfd/intel-lpss.c
index a475cbd2b9ef15f9106fcacb1198a215dfb6ea69,2ba6df9d83afe46089ea24e59723f2dc0e04c4d5..277f48f1cc1c808f7356d7d8005ece67f8746cbc
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Intel Sunrisepoint LPSS core support.
   *
@@@ -8,6 -7,10 +8,6 @@@
   *          Mika Westerberg <mika.westerberg@linux.intel.com>
   *          Heikki Krogerus <heikki.krogerus@linux.intel.com>
   *          Jarkko Nikula <jarkko.nikula@linux.intel.com>
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
   */
  
  #include <linux/clk.h>
@@@ -543,6 -546,7 +543,7 @@@ module_init(intel_lpss_init)
  
  static void __exit intel_lpss_exit(void)
  {
+       ida_destroy(&intel_lpss_devid_ida);
        debugfs_remove(intel_lpss_debugfs);
  }
  module_exit(intel_lpss_exit);
diff --combined drivers/mfd/lp87565.c
index 7960109c05e325bb37d43b7f3394f59663d381b4,8ad688fe75f90a19d8378542c9058ad5403ba333..4a5c8ade4ae032ff792064aa6a6435c1005a11c5
@@@ -1,8 -1,11 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
   *
   * Author: Keerthy <j-keerthy@ti.com>
 - *
 - * This program is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU General Public License as
 - * published by the Free Software Foundation version 2.
   */
  
  #include <linux/interrupt.h>
@@@ -30,6 -33,10 +30,10 @@@ static const struct of_device_id of_lp8
                .compatible = "ti,lp87565-q1",
                .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
        },
+       {
+               .compatible = "ti,lp87561-q1",
+               .data = (void *)LP87565_DEVICE_TYPE_LP87561_Q1,
+       },
        {}
  };
  MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
diff --combined drivers/mfd/madera.h
index 0ff05cd74211ecf90fbd280ddaf7f025217c1c93,69a40aba7e69fb0a2be979ee920d7f56a0002f31..9002056785a2cfcfaf491893d99380c287b2d2d1
@@@ -1,8 -1,11 +1,8 @@@
 +/* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * MFD internals for Cirrus Logic Madera codecs
   *
   * Copyright 2015-2018 Cirrus Logic
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
   */
  
  #ifndef MADERA_MFD_H
@@@ -21,6 -24,12 +21,12 @@@ int madera_dev_exit(struct madera *made
  
  const char *madera_name_from_type(enum madera_type type);
  
+ extern const struct regmap_config cs47l15_16bit_spi_regmap;
+ extern const struct regmap_config cs47l15_32bit_spi_regmap;
+ extern const struct regmap_config cs47l15_16bit_i2c_regmap;
+ extern const struct regmap_config cs47l15_32bit_i2c_regmap;
+ int cs47l15_patch(struct madera *madera);
  extern const struct regmap_config cs47l35_16bit_spi_regmap;
  extern const struct regmap_config cs47l35_32bit_spi_regmap;
  extern const struct regmap_config cs47l35_16bit_i2c_regmap;
@@@ -38,4 -47,11 +44,11 @@@ extern const struct regmap_config cs47l
  extern const struct regmap_config cs47l90_16bit_i2c_regmap;
  extern const struct regmap_config cs47l90_32bit_i2c_regmap;
  int cs47l90_patch(struct madera *madera);
+ extern const struct regmap_config cs47l92_16bit_spi_regmap;
+ extern const struct regmap_config cs47l92_32bit_spi_regmap;
+ extern const struct regmap_config cs47l92_16bit_i2c_regmap;
+ extern const struct regmap_config cs47l92_32bit_i2c_regmap;
+ int cs47l92_patch(struct madera *madera);
  #endif
diff --combined drivers/mfd/menelaus.c
index 5c77787efe3d3a84a111daa181834d1aff2ffb9f,91c568ef5857be3bc5d21dfb33f5150db9c6e775..b64d3315a5e13b58521b7d637b9868f89a3ea39c
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Copyright (C) 2004 Texas Instruments, Inc.
   *
   * Added support for controlling VCORE and regulator sleep states,
   * Amit Kucheria <amit.kucheria@nokia.com>
   * Copyright (C) 2005, 2006 Nokia Corporation
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
  
  #include <linux/module.h>
@@@ -1125,8 -1138,6 +1125,6 @@@ static inline void menelaus_rtc_init(st
                        menelaus_remove_irq_work(MENELAUS_RTCALM_IRQ);
                        device_init_wakeup(&m->client->dev, 0);
                }
-               dev_err(&m->client->dev, "can't register RTC: %d\n",
-                               (int) PTR_ERR(m->rtc));
                the_menelaus->rtc = NULL;
        }
  }
diff --combined drivers/mfd/mfd-core.c
index dbf684c4ebfb228979e5cd4d61bb2d4f393f8187,9ce909b821ecc7e0ee6bc4b3070894606d40a73a..23276a80e3b48334b39735807be139f054fbc420
@@@ -1,10 -1,14 +1,10 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * drivers/mfd/mfd-core.c
   *
   * core MFD support
   * Copyright (c) 2006 Ian Molton
   * Copyright (c) 2007,2008 Dmitry Baryshkov
 - *
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License version 2 as
 - * published by the Free Software Foundation.
 - *
   */
  
  #include <linux/kernel.h>
@@@ -175,6 -179,7 +175,7 @@@ static int mfd_add_device(struct devic
                for_each_child_of_node(parent->of_node, np) {
                        if (of_device_is_compatible(np, cell->of_compatible)) {
                                pdev->dev.of_node = np;
+                               pdev->dev.fwnode = &np->fwnode;
                                break;
                        }
                }
diff --combined drivers/mfd/rk808.c
index 908c1f45e64aa9b5a953bd57b8cf681e3a0852b8,09fc8d3da54171caf35beffbb9591ac85e04d9bc..601cefb5c9d8eb2b24e6f2c194cf446a3477b680
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * MFD core driver for Rockchip RK808/RK818
   *
@@@ -10,6 -9,15 +10,6 @@@
   * Copyright (C) 2016 PHYTEC Messtechnik GmbH
   *
   * Author: Wadim Egorov <w.egorov@phytec.de>
 - *
 - * This program is free software; you can redistribute it and/or modify it
 - * under the terms and conditions of the GNU General Public License,
 - * version 2, as published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope it will be useful, but WITHOUT
 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 - * more details.
   */
  
  #include <linux/i2c.h>
@@@ -19,6 -27,7 +19,7 @@@
  #include <linux/module.h>
  #include <linux/of_device.h>
  #include <linux/regmap.h>
+ #include <linux/syscore_ops.h>
  
  struct rk808_reg_data {
        int addr;
@@@ -54,6 -63,27 +55,27 @@@ static bool rk808_is_volatile_reg(struc
        return false;
  }
  
+ static bool rk817_is_volatile_reg(struct device *dev, unsigned int reg)
+ {
+       /*
+        * Notes:
+        * - Technically the ROUND_30s bit makes RTC_CTRL_REG volatile, but
+        *   we don't use that feature.  It's better to cache.
+        */
+       switch (reg) {
+       case RK817_SECONDS_REG ... RK817_WEEKS_REG:
+       case RK817_RTC_STATUS_REG:
+       case RK817_INT_STS_REG0:
+       case RK817_INT_STS_REG1:
+       case RK817_INT_STS_REG2:
+       case RK817_SYS_STS:
+               return true;
+       }
+       return true;
+ }
  static const struct regmap_config rk818_regmap_config = {
        .reg_bits = 8,
        .val_bits = 8,
@@@ -78,6 -108,14 +100,14 @@@ static const struct regmap_config rk808
        .volatile_reg = rk808_is_volatile_reg,
  };
  
+ static const struct regmap_config rk817_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+       .max_register = RK817_GPIO_INT_CFG,
+       .cache_type = REGCACHE_NONE,
+       .volatile_reg = rk817_is_volatile_reg,
+ };
  static struct resource rtc_resources[] = {
        {
                .start  = RK808_IRQ_RTC_ALARM,
        }
  };
  
+ static struct resource rk817_rtc_resources[] = {
+       DEFINE_RES_IRQ(RK817_IRQ_RTC_ALARM),
+ };
  static struct resource rk805_key_resources[] = {
        {
                .start  = RK805_IRQ_PWRON_FALL,
        }
  };
  
+ static struct resource rk817_pwrkey_resources[] = {
+       DEFINE_RES_IRQ(RK817_IRQ_PWRON_RISE),
+       DEFINE_RES_IRQ(RK817_IRQ_PWRON_FALL),
+ };
  static const struct mfd_cell rk805s[] = {
        { .name = "rk808-clkout", },
        { .name = "rk808-regulator", },
@@@ -124,6 -171,21 +163,21 @@@ static const struct mfd_cell rk808s[] 
        },
  };
  
+ static const struct mfd_cell rk817s[] = {
+       { .name = "rk808-clkout",},
+       { .name = "rk808-regulator",},
+       {
+               .name = "rk8xx-pwrkey",
+               .num_resources = ARRAY_SIZE(rk817_pwrkey_resources),
+               .resources = &rk817_pwrkey_resources[0],
+       },
+       {
+               .name = "rk808-rtc",
+               .num_resources = ARRAY_SIZE(rk817_rtc_resources),
+               .resources = &rk817_rtc_resources[0],
+       },
+ };
  static const struct mfd_cell rk818s[] = {
        { .name = "rk808-clkout", },
        { .name = "rk808-regulator", },
@@@ -159,6 -221,13 +213,13 @@@ static const struct rk808_reg_data rk80
                                                    VB_LO_SEL_3500MV },
  };
  
+ static const struct rk808_reg_data rk817_pre_init_reg[] = {
+       {RK817_RTC_CTRL_REG, RTC_STOP, RTC_STOP},
+       {RK817_GPIO_INT_CFG, RK817_INT_POL_MSK, RK817_INT_POL_H},
+       {RK817_SYS_CFG(1), RK817_HOTDIE_TEMP_MSK | RK817_TSD_TEMP_MSK,
+                                          RK817_HOTDIE_105 | RK817_TSD_140},
+ };
  static const struct rk808_reg_data rk818_pre_init_reg[] = {
        /* improve efficiency */
        { RK818_BUCK2_CONFIG_REG, BUCK2_RATE_MASK,  BUCK_ILMIN_250MA },
@@@ -324,6 -393,33 +385,33 @@@ static const struct regmap_irq rk818_ir
        },
  };
  
+ static const struct regmap_irq rk817_irqs[RK817_IRQ_END] = {
+       REGMAP_IRQ_REG_LINE(0, 8),
+       REGMAP_IRQ_REG_LINE(1, 8),
+       REGMAP_IRQ_REG_LINE(2, 8),
+       REGMAP_IRQ_REG_LINE(3, 8),
+       REGMAP_IRQ_REG_LINE(4, 8),
+       REGMAP_IRQ_REG_LINE(5, 8),
+       REGMAP_IRQ_REG_LINE(6, 8),
+       REGMAP_IRQ_REG_LINE(7, 8),
+       REGMAP_IRQ_REG_LINE(8, 8),
+       REGMAP_IRQ_REG_LINE(9, 8),
+       REGMAP_IRQ_REG_LINE(10, 8),
+       REGMAP_IRQ_REG_LINE(11, 8),
+       REGMAP_IRQ_REG_LINE(12, 8),
+       REGMAP_IRQ_REG_LINE(13, 8),
+       REGMAP_IRQ_REG_LINE(14, 8),
+       REGMAP_IRQ_REG_LINE(15, 8),
+       REGMAP_IRQ_REG_LINE(16, 8),
+       REGMAP_IRQ_REG_LINE(17, 8),
+       REGMAP_IRQ_REG_LINE(18, 8),
+       REGMAP_IRQ_REG_LINE(19, 8),
+       REGMAP_IRQ_REG_LINE(20, 8),
+       REGMAP_IRQ_REG_LINE(21, 8),
+       REGMAP_IRQ_REG_LINE(22, 8),
+       REGMAP_IRQ_REG_LINE(23, 8)
+ };
  static struct regmap_irq_chip rk805_irq_chip = {
        .name = "rk805",
        .irqs = rk805_irqs,
@@@ -347,6 -443,18 +435,18 @@@ static const struct regmap_irq_chip rk8
        .init_ack_masked = true,
  };
  
+ static struct regmap_irq_chip rk817_irq_chip = {
+       .name = "rk817",
+       .irqs = rk817_irqs,
+       .num_irqs = ARRAY_SIZE(rk817_irqs),
+       .num_regs = 3,
+       .irq_reg_stride = 2,
+       .status_base = RK817_INT_STS_REG0,
+       .mask_base = RK817_INT_STS_MSK_REG0,
+       .ack_base = RK817_INT_STS_REG0,
+       .init_ack_masked = true,
+ };
  static const struct regmap_irq_chip rk818_irq_chip = {
        .name = "rk818",
        .irqs = rk818_irqs,
@@@ -366,17 -474,29 +466,29 @@@ static void rk805_device_shutdown(void
        int ret;
        struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
  
-       if (!rk808) {
-               dev_warn(&rk808_i2c_client->dev,
-                        "have no rk805, so do nothing here\n");
+       if (!rk808)
                return;
-       }
  
        ret = regmap_update_bits(rk808->regmap,
                                 RK805_DEV_CTRL_REG,
                                 DEV_OFF, DEV_OFF);
        if (ret)
-               dev_err(&rk808_i2c_client->dev, "power off error!\n");
+               dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n");
+ }
+ static void rk805_device_shutdown_prepare(void)
+ {
+       int ret;
+       struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
+       if (!rk808)
+               return;
+       ret = regmap_update_bits(rk808->regmap,
+                                RK805_GPIO_IO_POL_REG,
+                                SLP_SD_MSK, SHUTDOWN_FUN);
+       if (ret)
+               dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n");
  }
  
  static void rk808_device_shutdown(void)
        int ret;
        struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
  
-       if (!rk808) {
-               dev_warn(&rk808_i2c_client->dev,
-                        "have no rk808, so do nothing here\n");
+       if (!rk808)
                return;
-       }
  
        ret = regmap_update_bits(rk808->regmap,
                                 RK808_DEVCTRL_REG,
                                 DEV_OFF_RST, DEV_OFF_RST);
        if (ret)
-               dev_err(&rk808_i2c_client->dev, "power off error!\n");
+               dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n");
  }
  
  static void rk818_device_shutdown(void)
        int ret;
        struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
  
-       if (!rk808) {
-               dev_warn(&rk808_i2c_client->dev,
-                        "have no rk818, so do nothing here\n");
+       if (!rk808)
                return;
-       }
  
        ret = regmap_update_bits(rk808->regmap,
                                 RK818_DEVCTRL_REG,
                                 DEV_OFF, DEV_OFF);
        if (ret)
-               dev_err(&rk808_i2c_client->dev, "power off error!\n");
+               dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n");
+ }
+ static void rk8xx_syscore_shutdown(void)
+ {
+       struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
+       int ret;
+       if (system_state == SYSTEM_POWER_OFF &&
+           (rk808->variant == RK809_ID || rk808->variant == RK817_ID)) {
+               ret = regmap_update_bits(rk808->regmap,
+                                        RK817_SYS_CFG(3),
+                                        RK817_SLPPIN_FUNC_MSK,
+                                        SLPPIN_DN_FUN);
+               if (ret) {
+                       dev_warn(&rk808_i2c_client->dev,
+                                "Cannot switch to power down function\n");
+               }
+       }
  }
  
+ static struct syscore_ops rk808_syscore_ops = {
+       .shutdown = rk8xx_syscore_shutdown,
+ };
  static const struct of_device_id rk808_of_match[] = {
        { .compatible = "rockchip,rk805" },
        { .compatible = "rockchip,rk808" },
+       { .compatible = "rockchip,rk809" },
+       { .compatible = "rockchip,rk817" },
        { .compatible = "rockchip,rk818" },
        { },
  };
@@@ -430,10 -568,10 +560,10 @@@ static int rk808_probe(struct i2c_clien
        struct rk808 *rk808;
        const struct rk808_reg_data *pre_init_reg;
        const struct mfd_cell *cells;
-       void (*pm_pwroff_fn)(void);
        int nr_pre_init_regs;
        int nr_cells;
        int pm_off = 0, msb, lsb;
+       unsigned char pmic_id_msb, pmic_id_lsb;
        int ret;
        int i;
  
        if (!rk808)
                return -ENOMEM;
  
+       if (of_device_is_compatible(np, "rockchip,rk817") ||
+           of_device_is_compatible(np, "rockchip,rk809")) {
+               pmic_id_msb = RK817_ID_MSB;
+               pmic_id_lsb = RK817_ID_LSB;
+       } else {
+               pmic_id_msb = RK808_ID_MSB;
+               pmic_id_lsb = RK808_ID_LSB;
+       }
        /* Read chip variant */
-       msb = i2c_smbus_read_byte_data(client, RK808_ID_MSB);
+       msb = i2c_smbus_read_byte_data(client, pmic_id_msb);
        if (msb < 0) {
                dev_err(&client->dev, "failed to read the chip id at 0x%x\n",
                        RK808_ID_MSB);
                return msb;
        }
  
-       lsb = i2c_smbus_read_byte_data(client, RK808_ID_LSB);
+       lsb = i2c_smbus_read_byte_data(client, pmic_id_lsb);
        if (lsb < 0) {
                dev_err(&client->dev, "failed to read the chip id at 0x%x\n",
                        RK808_ID_LSB);
                nr_pre_init_regs = ARRAY_SIZE(rk805_pre_init_reg);
                cells = rk805s;
                nr_cells = ARRAY_SIZE(rk805s);
-               pm_pwroff_fn = rk805_device_shutdown;
+               rk808->pm_pwroff_fn = rk805_device_shutdown;
+               rk808->pm_pwroff_prep_fn = rk805_device_shutdown_prepare;
                break;
        case RK808_ID:
                rk808->regmap_cfg = &rk808_regmap_config;
                nr_pre_init_regs = ARRAY_SIZE(rk808_pre_init_reg);
                cells = rk808s;
                nr_cells = ARRAY_SIZE(rk808s);
-               pm_pwroff_fn = rk808_device_shutdown;
+               rk808->pm_pwroff_fn = rk808_device_shutdown;
                break;
        case RK818_ID:
                rk808->regmap_cfg = &rk818_regmap_config;
                nr_pre_init_regs = ARRAY_SIZE(rk818_pre_init_reg);
                cells = rk818s;
                nr_cells = ARRAY_SIZE(rk818s);
-               pm_pwroff_fn = rk818_device_shutdown;
+               rk808->pm_pwroff_fn = rk818_device_shutdown;
+               break;
+       case RK809_ID:
+       case RK817_ID:
+               rk808->regmap_cfg = &rk817_regmap_config;
+               rk808->regmap_irq_chip = &rk817_irq_chip;
+               pre_init_reg = rk817_pre_init_reg;
+               nr_pre_init_regs = ARRAY_SIZE(rk817_pre_init_reg);
+               cells = rk817s;
+               nr_cells = ARRAY_SIZE(rk817s);
+               register_syscore_ops(&rk808_syscore_ops);
                break;
        default:
                dev_err(&client->dev, "Unsupported RK8XX ID %lu\n",
                                "rockchip,system-power-controller");
        if (pm_off && !pm_power_off) {
                rk808_i2c_client = client;
-               pm_power_off = pm_pwroff_fn;
+               pm_power_off = rk808->pm_pwroff_fn;
+       }
+       if (pm_off && !pm_power_off_prepare) {
+               if (!rk808_i2c_client)
+                       rk808_i2c_client = client;
+               pm_power_off_prepare = rk808->pm_pwroff_prep_fn;
        }
  
        return 0;
@@@ -555,15 -719,70 +711,70 @@@ static int rk808_remove(struct i2c_clie
        struct rk808 *rk808 = i2c_get_clientdata(client);
  
        regmap_del_irq_chip(client->irq, rk808->irq_data);
-       pm_power_off = NULL;
+       /**
+        * pm_power_off may points to a function from another module.
+        * Check if the pointer is set by us and only then overwrite it.
+        */
+       if (rk808->pm_pwroff_fn && pm_power_off == rk808->pm_pwroff_fn)
+               pm_power_off = NULL;
+       /**
+        * As above, check if the pointer is set by us before overwrite.
+        */
+       if (rk808->pm_pwroff_prep_fn &&
+           pm_power_off_prepare == rk808->pm_pwroff_prep_fn)
+               pm_power_off_prepare = NULL;
  
        return 0;
  }
  
+ static int rk8xx_suspend(struct device *dev)
+ {
+       struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
+       int ret = 0;
+       switch (rk808->variant) {
+       case RK809_ID:
+       case RK817_ID:
+               ret = regmap_update_bits(rk808->regmap,
+                                        RK817_SYS_CFG(3),
+                                        RK817_SLPPIN_FUNC_MSK,
+                                        SLPPIN_SLP_FUN);
+               break;
+       default:
+               break;
+       }
+       return ret;
+ }
+ static int rk8xx_resume(struct device *dev)
+ {
+       struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
+       int ret = 0;
+       switch (rk808->variant) {
+       case RK809_ID:
+       case RK817_ID:
+               ret = regmap_update_bits(rk808->regmap,
+                                        RK817_SYS_CFG(3),
+                                        RK817_SLPPIN_FUNC_MSK,
+                                        SLPPIN_NULL_FUN);
+               break;
+       default:
+               break;
+       }
+       return ret;
+ }
+ SIMPLE_DEV_PM_OPS(rk8xx_pm_ops, rk8xx_suspend, rk8xx_resume);
  static struct i2c_driver rk808_i2c_driver = {
        .driver = {
                .name = "rk808",
                .of_match_table = rk808_of_match,
+               .pm = &rk8xx_pm_ops,
        },
        .probe    = rk808_probe,
        .remove   = rk808_remove,
index c00c33ce06ce9f2869773a5c5fbdfbede3da5176,045ae83169c5706dfde34ea4ce0fabec7b33073b..a873a0038cc87cdf4e6aed35020ac9b4e62bfea4
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  menuconfig POWER_SUPPLY
        bool "Power supply class support"
        help
@@@ -152,7 -151,7 +152,7 @@@ config BATTERY_PM
  
  config BATTERY_OLPC
        tristate "One Laptop Per Child battery"
 -      depends on X86_32 && OLPC
 +      depends on OLPC_EC
        help
          Say Y to enable support for the battery on the OLPC laptop.
  
@@@ -689,4 -688,13 +689,13 @@@ config CHARGER_UCS100
          Say Y to enable support for Microchip UCS1002 Programmable
          USB Port Power Controller with Charger Emulation.
  
+ config CHARGER_BD70528
+       tristate "ROHM bd70528 charger driver"
+       depends on MFD_ROHM_BD70528
+       default n
+       help
+        Say Y here to enable support for getting battery status
+        information and altering charger configurations from charger
+        block of the ROHM BD70528 Power Management IC.
  endif # POWER_SUPPLY
index 7928960563e6a83f46cf3155ee80c24ce320edbb,214a958ff3e5a61502c45ae88ac4e38472a82d11..b57093d7c01f660ff65da897f64133944f5058e1
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  menuconfig REGULATOR
        bool "Voltage and Current Regulator Support"
        help
@@@ -136,20 -135,19 +136,20 @@@ config REGULATOR_AB850
          signal AB8500 PMIC
  
  config REGULATOR_ARIZONA_LDO1
 -      tristate "Wolfson Arizona class devices LDO1"
 -      depends on MFD_ARIZONA
 +      tristate "Cirrus Madera and Wolfson Arizona class devices LDO1"
 +      depends on MFD_ARIZONA || MFD_MADERA
        depends on SND_SOC
        help
 -        Support for the LDO1 regulators found on Wolfson Arizona class
 -        devices.
 +        Support for the LDO1 regulators found on Cirrus Logic Madera codecs
 +        and Wolfson Microelectronic Arizona codecs.
  
  config REGULATOR_ARIZONA_MICSUPP
 -      tristate "Wolfson Arizona class devices MICSUPP"
 -      depends on MFD_ARIZONA
 +      tristate "Cirrus Madera and Wolfson Arizona class devices MICSUPP"
 +      depends on MFD_ARIZONA || MFD_MADERA
        depends on SND_SOC
        help
 -        Support for the MICSUPP regulators found on Wolfson Arizona class
 +        Support for the MICSUPP regulators found on Cirrus Logic Madera codecs
 +        and Wolfson Microelectronic Arizona codecs
          devices.
  
  config REGULATOR_AS3711
@@@ -259,7 -257,7 +259,7 @@@ config REGULATOR_DA906
  
  config REGULATOR_DA9063
        tristate "Dialog Semiconductor DA9063 regulators"
 -      depends on MFD_DA9063
 +      depends on MFD_DA9063 && OF
        help
          Say y here to support the BUCKs and LDOs regulators found on
          DA9063 PMICs.
@@@ -365,7 -363,7 +365,7 @@@ config REGULATOR_LM363
        tristate "TI LM363X voltage regulators"
        depends on MFD_TI_LMU
        help
 -        This driver supports LM3631 and LM3632 voltage regulators for
 +        This driver supports LM3631, LM3632 and LM36274 voltage regulators for
          the LCD bias.
          One boost output voltage is configurable and always on.
          Other LDOs are used for the display module.
@@@ -764,11 -762,11 +764,11 @@@ config REGULATOR_RC5T58
          outputs which can be controlled by i2c communication.
  
  config REGULATOR_RK808
-       tristate "Rockchip RK805/RK808/RK818 Power regulators"
+       tristate "Rockchip RK805/RK808/RK809/RK817/RK818 Power regulators"
        depends on MFD_RK808
        help
          Select this option to enable the power regulator of ROCKCHIP
-         PMIC RK805,RK808 and RK818.
+         PMIC RK805,RK809&RK817,RK808 and RK818.
          This driver supports the control of different power rails of device
          through regulator interface. The device supports multiple DCDC/LDO
          outputs which can be controlled by i2c communication.
@@@ -830,26 -828,6 +830,26 @@@ config REGULATOR_SKY8145
          This driver can also be built as a module. If so, the module
          will be called sky81452-regulator.
  
 +config REGULATOR_SLG51000
 +        tristate "Dialog Semiconductor SLG51000 regulators"
 +        depends on I2C
 +        select REGMAP_I2C
 +        help
 +        Say y here to support for the Dialog Semiconductor SLG51000.
 +        The SLG51000 is seven compact and customizable low dropout
 +        regulators.
 +
 +config REGULATOR_STM32_BOOSTER
 +      tristate "STMicroelectronics STM32 BOOSTER"
 +      depends on ARCH_STM32 || COMPILE_TEST
 +      help
 +        This driver supports internal booster (3V3) embedded in some
 +        STMicroelectronics STM32 chips. It can be used to supply ADC analog
 +        input switches when vdda supply is below 2.7V.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called stm32-booster.
 +
  config REGULATOR_STM32_VREFBUF
        tristate "STMicroelectronics STM32 VREFBUF"
        depends on ARCH_STM32 || COMPILE_TEST
index 8c22cfb7617392daacc72807218eb472c2ed7747,ef2fc175a9ae231e71679922c21f3696ad4aa14e..bdab46a5c4617376e17d40418ab2c03d89bbc0c8
@@@ -4,6 -4,7 +4,6 @@@
  
  #include <linux/delay.h>
  #include <linux/err.h>
 -#include <linux/gpio.h>
  #include <linux/interrupt.h>
  #include <linux/kernel.h>
  #include <linux/mfd/rohm-bd718x7.h>
@@@ -1151,12 -1152,12 +1151,12 @@@ static int bd718xx_probe(struct platfor
  {
        struct bd718xx *mfd;
        struct regulator_config config = { 0 };
-       struct bd718xx_pmic_inits pmic_regulators[] = {
-               [BD718XX_TYPE_BD71837] = {
+       struct bd718xx_pmic_inits pmic_regulators[ROHM_CHIP_TYPE_AMOUNT] = {
+               [ROHM_CHIP_TYPE_BD71837] = {
                        .r_datas = bd71837_regulators,
                        .r_amount = ARRAY_SIZE(bd71837_regulators),
                },
-               [BD718XX_TYPE_BD71847] = {
+               [ROHM_CHIP_TYPE_BD71847] = {
                        .r_datas = bd71847_regulators,
                        .r_amount = ARRAY_SIZE(bd71847_regulators),
                },
                goto err;
        }
  
-       if (mfd->chip_type >= BD718XX_TYPE_AMOUNT ||
-           !pmic_regulators[mfd->chip_type].r_datas) {
+       if (mfd->chip.chip_type >= ROHM_CHIP_TYPE_AMOUNT ||
+           !pmic_regulators[mfd->chip.chip_type].r_datas) {
                dev_err(&pdev->dev, "Unsupported chip type\n");
                err = -EINVAL;
                goto err;
        }
  
        /* Register LOCK release */
-       err = regmap_update_bits(mfd->regmap, BD718XX_REG_REGLOCK,
+       err = regmap_update_bits(mfd->chip.regmap, BD718XX_REG_REGLOCK,
                                 (REGLOCK_PWRSEQ | REGLOCK_VREG), 0);
        if (err) {
                dev_err(&pdev->dev, "Failed to unlock PMIC (%d)\n", err);
         * bit allowing HW defaults for power rails to be used
         */
        if (!use_snvs) {
-               err = regmap_update_bits(mfd->regmap, BD718XX_REG_TRANS_COND1,
+               err = regmap_update_bits(mfd->chip.regmap,
+                                        BD718XX_REG_TRANS_COND1,
                                         BD718XX_ON_REQ_POWEROFF_MASK |
                                         BD718XX_SWRESET_POWEROFF_MASK |
                                         BD718XX_WDOG_POWEROFF_MASK |
                }
        }
  
-       for (i = 0; i < pmic_regulators[mfd->chip_type].r_amount; i++) {
+       for (i = 0; i < pmic_regulators[mfd->chip.chip_type].r_amount; i++) {
  
                const struct regulator_desc *desc;
                struct regulator_dev *rdev;
                const struct bd718xx_regulator_data *r;
  
-               r = &pmic_regulators[mfd->chip_type].r_datas[i];
+               r = &pmic_regulators[mfd->chip.chip_type].r_datas[i];
                desc = &r->desc;
  
                config.dev = pdev->dev.parent;
-               config.regmap = mfd->regmap;
+               config.regmap = mfd->chip.regmap;
  
                rdev = devm_regulator_register(&pdev->dev, desc, &config);
                if (IS_ERR(rdev)) {
                 */
                if (!use_snvs || !rdev->constraints->always_on ||
                    !rdev->constraints->boot_on) {
-                       err = regmap_update_bits(mfd->regmap, r->init.reg,
+                       err = regmap_update_bits(mfd->chip.regmap, r->init.reg,
                                                 r->init.mask, r->init.val);
                        if (err) {
                                dev_err(&pdev->dev,
                        }
                }
                for (j = 0; j < r->additional_init_amnt; j++) {
-                       err = regmap_update_bits(mfd->regmap,
+                       err = regmap_update_bits(mfd->chip.regmap,
                                                 r->additional_inits[j].reg,
                                                 r->additional_inits[j].mask,
                                                 r->additional_inits[j].val);
index 225e5448c9260cd1b2838e4febf542fb658ea010,142b6f17dcfeffe94ff5b0a532ce60430e947a86..5d067f7c2116601a5ff558e194963a82a3869d9d
@@@ -1,8 -1,11 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Regulator driver for LP87565 PMIC
   *
   * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
 - *
 - *  This program is free software; you can redistribute  it and/or modify it
 - *  under  the terms of  the GNU General  Public License as published by the
 - *  Free Software Foundation version 2. 
   */
  
  #include <linux/module.h>
@@@ -150,6 -153,12 +150,12 @@@ static const struct lp87565_regulator r
                          LP87565_REG_BUCK2_CTRL_1,
                          LP87565_BUCK_CTRL_1_EN, 3230,
                          buck0_1_2_3_ranges, LP87565_REG_BUCK2_CTRL_2),
+       LP87565_REGULATOR("BUCK3210", LP87565_BUCK_3210, "buck3210",
+                         lp87565_buck_ops, 256, LP87565_REG_BUCK0_VOUT,
+                         LP87565_BUCK_VSET, LP87565_REG_BUCK0_CTRL_1,
+                         LP87565_BUCK_CTRL_1_EN |
+                         LP87565_BUCK_CTRL_1_FPWM_MP_0_2, 3230,
+                         buck0_1_2_3_ranges, LP87565_REG_BUCK0_CTRL_2),
  };
  
  static int lp87565_regulator_probe(struct platform_device *pdev)
        config.driver_data = lp87565;
        config.regmap = lp87565->regmap;
  
-       if (lp87565->dev_type == LP87565_DEVICE_TYPE_LP87565_Q1) {
+       switch (lp87565->dev_type) {
+       case LP87565_DEVICE_TYPE_LP87565_Q1:
                min_idx = LP87565_BUCK_10;
                max_idx = LP87565_BUCK_23;
+               break;
+       case LP87565_DEVICE_TYPE_LP87561_Q1:
+               min_idx = LP87565_BUCK_3210;
+               max_idx = LP87565_BUCK_3210;
+               break;
+       default:
+               dev_err(lp87565->dev, "Invalid lp config %d\n",
+                       lp87565->dev_type);
+               return -EINVAL;
        }
  
        for (i = min_idx; i <= max_idx; i++) {
index 061ebc4b3477aaad9113c520ab4bf0d97543ef40,e9b0bb996fc450e765e12cfad9510d98365002e9..e7af0c53d4496f5ddafdfad971ff1c9aa66dc4dc
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Regulator driver for Rockchip RK805/RK808/RK818
   *
@@@ -10,6 -9,15 +10,6 @@@
   * Copyright (C) 2016 PHYTEC Messtechnik GmbH
   *
   * Author: Wadim Egorov <w.egorov@phytec.de>
 - *
 - * This program is free software; you can redistribute it and/or modify it
 - * under the terms and conditions of the GNU General Public License,
 - * version 2, as published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope it will be useful, but WITHOUT
 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 - * more details.
   */
  
  #include <linux/delay.h>
  #define RK808_BUCK4_VSEL_MASK 0xf
  #define RK808_LDO_VSEL_MASK   0x1f
  
+ #define RK809_BUCK5_VSEL_MASK         0x7
+ #define RK817_LDO_VSEL_MASK           0x7f
+ #define RK817_BOOST_VSEL_MASK         0x7
+ #define RK817_BUCK_VSEL_MASK          0x7f
  #define RK818_BUCK_VSEL_MASK          0x3f
  #define RK818_BUCK4_VSEL_MASK         0x1f
  #define RK818_LDO_VSEL_MASK           0x1f
  /* max steps for increase voltage of Buck1/2, equal 100mv*/
  #define MAX_STEPS_ONE_TIME 8
  
- #define RK805_DESC(_id, _match, _supply, _min, _max, _step, _vreg,      \
-       _vmask, _ereg, _emask, _etime)                                  \
-       [_id] = {                                                       \
-               .name           = (_match),                             \
-               .supply_name    = (_supply),                            \
-               .of_match       = of_match_ptr(_match),                 \
-               .regulators_node = of_match_ptr("regulators"),          \
-               .type           = REGULATOR_VOLTAGE,                    \
-               .id             = (_id),                                \
-               .n_voltages     = (((_max) - (_min)) / (_step) + 1),    \
-               .owner          = THIS_MODULE,                          \
-               .min_uV         = (_min) * 1000,                        \
-               .uV_step        = (_step) * 1000,                       \
-               .vsel_reg       = (_vreg),                              \
-               .vsel_mask      = (_vmask),                             \
-               .enable_reg     = (_ereg),                              \
-               .enable_mask    = (_emask),                             \
-               .enable_time    = (_etime),                             \
-               .ops            = &rk805_reg_ops,                       \
+ #define ENABLE_MASK(id)                       (BIT(id) | BIT(4 + (id)))
+ #define DISABLE_VAL(id)                       (BIT(4 + (id)))
+ #define RK817_BOOST_DESC(_id, _match, _supply, _min, _max, _step, _vreg,\
+       _vmask, _ereg, _emask, _enval, _disval, _etime, m_drop)         \
+       {                                                       \
+               .name           = (_match),                             \
+               .supply_name    = (_supply),                            \
+               .of_match       = of_match_ptr(_match),                 \
+               .regulators_node = of_match_ptr("regulators"),          \
+               .type           = REGULATOR_VOLTAGE,                    \
+               .id             = (_id),                                \
+               .n_voltages     = (((_max) - (_min)) / (_step) + 1),    \
+               .owner          = THIS_MODULE,                          \
+               .min_uV         = (_min) * 1000,                        \
+               .uV_step        = (_step) * 1000,                       \
+               .vsel_reg       = (_vreg),                              \
+               .vsel_mask      = (_vmask),                             \
+               .enable_reg     = (_ereg),                              \
+               .enable_mask    = (_emask),                             \
+               .enable_val     = (_enval),                             \
+               .disable_val     = (_disval),                           \
+               .enable_time    = (_etime),                             \
+               .min_dropout_uV = (m_drop) * 1000,                      \
+               .ops            = &rk817_boost_ops,                     \
        }
  
- #define RK8XX_DESC(_id, _match, _supply, _min, _max, _step, _vreg,    \
-       _vmask, _ereg, _emask, _etime)                                  \
-       [_id] = {                                                       \
+ #define RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg,        \
+       _vmask, _ereg, _emask, _enval, _disval, _etime, _ops)           \
+       {                                                               \
                .name           = (_match),                             \
                .supply_name    = (_supply),                            \
                .of_match       = of_match_ptr(_match),                 \
                .vsel_mask      = (_vmask),                             \
                .enable_reg     = (_ereg),                              \
                .enable_mask    = (_emask),                             \
+               .enable_val     = (_enval),                             \
+               .disable_val     = (_disval),                           \
                .enable_time    = (_etime),                             \
-               .ops            = &rk808_reg_ops,                       \
+               .ops            = _ops,                 \
        }
  
- #define RK8XX_DESC_SWITCH(_id, _match, _supply, _ereg, _emask)                \
-       [_id] = {                                                       \
+ #define RK805_DESC(_id, _match, _supply, _min, _max, _step, _vreg,    \
+       _vmask, _ereg, _emask, _etime)                                  \
+       RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg,  \
+       _vmask, _ereg, _emask, 0, 0, _etime, &rk805_reg_ops)
+ #define RK8XX_DESC(_id, _match, _supply, _min, _max, _step, _vreg,    \
+       _vmask, _ereg, _emask, _etime)                                  \
+       RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg,  \
+       _vmask, _ereg, _emask, 0, 0, _etime, &rk808_reg_ops)
+ #define RK817_DESC(_id, _match, _supply, _min, _max, _step, _vreg,    \
+       _vmask, _ereg, _emask, _disval, _etime)                         \
+       RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg,  \
+       _vmask, _ereg, _emask, _emask, _disval, _etime, &rk817_reg_ops)
+ #define RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask,     \
+       _enval, _disval, _ops)                                          \
+       {                                                               \
                .name           = (_match),                             \
                .supply_name    = (_supply),                            \
                .of_match       = of_match_ptr(_match),                 \
                .id             = (_id),                                \
                .enable_reg     = (_ereg),                              \
                .enable_mask    = (_emask),                             \
+               .enable_val     = (_enval),                             \
+               .disable_val     = (_disval),                           \
                .owner          = THIS_MODULE,                          \
-               .ops            = &rk808_switch_ops                     \
+               .ops            = _ops                                  \
        }
  
+ #define RK817_DESC_SWITCH(_id, _match, _supply, _ereg, _emask,                \
+       _disval)                                                        \
+       RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask,       \
+       _emask, _disval, &rk817_switch_ops)
+ #define RK8XX_DESC_SWITCH(_id, _match, _supply, _ereg, _emask)                \
+       RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask,       \
+       0, 0, &rk808_switch_ops)
  
  struct rk808_regulator_data {
        struct gpio_desc *dvs_gpio[2];
@@@ -130,6 -178,51 +170,51 @@@ static const struct regulator_linear_ra
        REGULATOR_LINEAR_RANGE(2500000, 15, 15, 0),
  };
  
+ #define RK809_BUCK5_SEL_CNT           (8)
+ static const struct regulator_linear_range rk809_buck5_voltage_ranges[] = {
+       REGULATOR_LINEAR_RANGE(1500000, 0, 0, 0),
+       REGULATOR_LINEAR_RANGE(1800000, 1, 3, 200000),
+       REGULATOR_LINEAR_RANGE(2800000, 4, 5, 200000),
+       REGULATOR_LINEAR_RANGE(3300000, 6, 7, 300000),
+ };
+ #define RK817_BUCK1_MIN0 500000
+ #define RK817_BUCK1_MAX0 1500000
+ #define RK817_BUCK1_MIN1 1600000
+ #define RK817_BUCK1_MAX1 2400000
+ #define RK817_BUCK3_MAX1 3400000
+ #define RK817_BUCK1_STP0 12500
+ #define RK817_BUCK1_STP1 100000
+ #define RK817_BUCK1_SEL0 ((RK817_BUCK1_MAX0 - RK817_BUCK1_MIN0) /\
+                                                 RK817_BUCK1_STP0)
+ #define RK817_BUCK1_SEL1 ((RK817_BUCK1_MAX1 - RK817_BUCK1_MIN1) /\
+                                                 RK817_BUCK1_STP1)
+ #define RK817_BUCK3_SEL1 ((RK817_BUCK3_MAX1 - RK817_BUCK1_MIN1) /\
+                                                 RK817_BUCK1_STP1)
+ #define RK817_BUCK1_SEL_CNT (RK817_BUCK1_SEL0 + RK817_BUCK1_SEL1 + 1)
+ #define RK817_BUCK3_SEL_CNT (RK817_BUCK1_SEL0 + RK817_BUCK3_SEL1 + 1)
+ static const struct regulator_linear_range rk817_buck1_voltage_ranges[] = {
+       REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN0, 0,
+                              RK817_BUCK1_SEL0, RK817_BUCK1_STP0),
+       REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN1, RK817_BUCK1_SEL0 + 1,
+                              RK817_BUCK1_SEL_CNT, RK817_BUCK1_STP1),
+ };
+ static const struct regulator_linear_range rk817_buck3_voltage_ranges[] = {
+       REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN0, 0,
+                              RK817_BUCK1_SEL0, RK817_BUCK1_STP0),
+       REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN1, RK817_BUCK1_SEL0 + 1,
+                              RK817_BUCK3_SEL_CNT, RK817_BUCK1_STP1),
+ };
  static int rk808_buck1_2_get_voltage_sel_regmap(struct regulator_dev *rdev)
  {
        struct rk808_regulator_data *pdata = rdev_get_drvdata(rdev);
@@@ -281,6 -374,36 +366,36 @@@ static int rk808_set_ramp_delay(struct 
                                  RK808_RAMP_RATE_MASK, ramp_value);
  }
  
+ /*
+  * RK817 RK809
+  */
+ static int rk817_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
+ {
+       unsigned int ramp_value = RK817_RAMP_RATE_25MV_PER_US;
+       unsigned int reg = RK817_BUCK_CONFIG_REG(rdev_get_id(rdev));
+       switch (ramp_delay) {
+       case 0 ... 3000:
+               ramp_value = RK817_RAMP_RATE_3MV_PER_US;
+               break;
+       case 3001 ... 6300:
+               ramp_value = RK817_RAMP_RATE_6_3MV_PER_US;
+               break;
+       case 6301 ... 12500:
+               ramp_value = RK817_RAMP_RATE_12_5MV_PER_US;
+               break;
+       case 12501 ... 25000:
+               break;
+       default:
+               dev_warn(&rdev->dev,
+                        "%s ramp_delay: %d not supported, setting 10000\n",
+                        rdev->desc->name, ramp_delay);
+       }
+       return regmap_update_bits(rdev->regmap, reg,
+                                 RK817_RAMP_RATE_MASK, ramp_value);
+ }
  static int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv)
  {
        unsigned int reg;
                                  sel);
  }
  
+ static int rk817_set_suspend_voltage(struct regulator_dev *rdev, int uv)
+ {
+       unsigned int reg;
+       int sel = regulator_map_voltage_linear(rdev, uv, uv);
+       /* only ldo1~ldo9 */
+       if (sel < 0)
+               return -EINVAL;
+       reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET;
+       return regmap_update_bits(rdev->regmap, reg,
+                                 rdev->desc->vsel_mask,
+                                 sel);
+ }
  static int rk808_set_suspend_voltage_range(struct regulator_dev *rdev, int uv)
  {
        unsigned int reg;
@@@ -355,6 -493,131 +485,131 @@@ static int rk808_set_suspend_disable(st
                                  rdev->desc->enable_mask);
  }
  
+ static int rk817_set_suspend_enable_ctrl(struct regulator_dev *rdev,
+                                        unsigned int en)
+ {
+       unsigned int reg;
+       int id = rdev_get_id(rdev);
+       unsigned int id_slp, msk, val;
+       if (id >= RK817_ID_DCDC1 && id <= RK817_ID_DCDC4)
+               id_slp = id;
+       else if (id >= RK817_ID_LDO1 && id <= RK817_ID_LDO8)
+               id_slp = 8 + (id - RK817_ID_LDO1);
+       else if (id >= RK817_ID_LDO9 && id <= RK809_ID_SW2)
+               id_slp = 4 + (id - RK817_ID_LDO9);
+       else
+               return -EINVAL;
+       reg = RK817_POWER_SLP_EN_REG(id_slp / 8);
+       msk = BIT(id_slp % 8);
+       if (en)
+               val = msk;
+       else
+               val = 0;
+       return regmap_update_bits(rdev->regmap, reg, msk, val);
+ }
+ static int rk817_set_suspend_enable(struct regulator_dev *rdev)
+ {
+       return rk817_set_suspend_enable_ctrl(rdev, 1);
+ }
+ static int rk817_set_suspend_disable(struct regulator_dev *rdev)
+ {
+       return rk817_set_suspend_enable_ctrl(rdev, 0);
+ }
+ static int rk8xx_set_suspend_mode(struct regulator_dev *rdev, unsigned int mode)
+ {
+       unsigned int reg;
+       reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET;
+       switch (mode) {
+       case REGULATOR_MODE_FAST:
+               return regmap_update_bits(rdev->regmap, reg,
+                                         PWM_MODE_MSK, FPWM_MODE);
+       case REGULATOR_MODE_NORMAL:
+               return regmap_update_bits(rdev->regmap, reg,
+                                         PWM_MODE_MSK, AUTO_PWM_MODE);
+       default:
+               dev_err(&rdev->dev, "do not support this mode\n");
+               return -EINVAL;
+       }
+       return 0;
+ }
+ static int rk8xx_set_mode(struct regulator_dev *rdev, unsigned int mode)
+ {
+       switch (mode) {
+       case REGULATOR_MODE_FAST:
+               return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg,
+                                         PWM_MODE_MSK, FPWM_MODE);
+       case REGULATOR_MODE_NORMAL:
+               return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg,
+                                         PWM_MODE_MSK, AUTO_PWM_MODE);
+       default:
+               dev_err(&rdev->dev, "do not support this mode\n");
+               return -EINVAL;
+       }
+       return 0;
+ }
+ static unsigned int rk8xx_get_mode(struct regulator_dev *rdev)
+ {
+       unsigned int val;
+       int err;
+       err = regmap_read(rdev->regmap, rdev->desc->vsel_reg, &val);
+       if (err)
+               return err;
+       if (val & FPWM_MODE)
+               return REGULATOR_MODE_FAST;
+       else
+               return REGULATOR_MODE_NORMAL;
+ }
+ static int rk8xx_is_enabled_wmsk_regmap(struct regulator_dev *rdev)
+ {
+       unsigned int val;
+       int ret;
+       ret = regmap_read(rdev->regmap, rdev->desc->enable_reg, &val);
+       if (ret != 0)
+               return ret;
+       /* add write mask bit */
+       val |= (rdev->desc->enable_mask & 0xf0);
+       val &= rdev->desc->enable_mask;
+       if (rdev->desc->enable_is_inverted) {
+               if (rdev->desc->enable_val)
+                       return val != rdev->desc->enable_val;
+               return (val == 0);
+       }
+       if (rdev->desc->enable_val)
+               return val == rdev->desc->enable_val;
+       return val != 0;
+ }
+ static unsigned int rk8xx_regulator_of_map_mode(unsigned int mode)
+ {
+       switch (mode) {
+       case 1:
+               return REGULATOR_MODE_FAST;
+       case 2:
+               return REGULATOR_MODE_NORMAL;
+       default:
+               return -EINVAL;
+       }
+ }
  static const struct regulator_ops rk805_reg_ops = {
        .list_voltage           = regulator_list_voltage_linear,
        .map_voltage            = regulator_map_voltage_linear,
@@@ -431,6 -694,71 +686,71 @@@ static const struct regulator_linear_ra
        REGULATOR_LINEAR_RANGE(2300000, 63, 63, 0),
  };
  
+ static struct regulator_ops rk809_buck5_ops_range = {
+       .list_voltage           = regulator_list_voltage_linear_range,
+       .map_voltage            = regulator_map_voltage_linear_range,
+       .get_voltage_sel        = regulator_get_voltage_sel_regmap,
+       .set_voltage_sel        = regulator_set_voltage_sel_regmap,
+       .set_voltage_time_sel   = regulator_set_voltage_time_sel,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .is_enabled             = rk8xx_is_enabled_wmsk_regmap,
+       .set_suspend_voltage    = rk808_set_suspend_voltage_range,
+       .set_suspend_enable     = rk817_set_suspend_enable,
+       .set_suspend_disable    = rk817_set_suspend_disable,
+ };
+ static struct regulator_ops rk817_reg_ops = {
+       .list_voltage           = regulator_list_voltage_linear,
+       .map_voltage            = regulator_map_voltage_linear,
+       .get_voltage_sel        = regulator_get_voltage_sel_regmap,
+       .set_voltage_sel        = regulator_set_voltage_sel_regmap,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .is_enabled             = rk8xx_is_enabled_wmsk_regmap,
+       .set_suspend_voltage    = rk817_set_suspend_voltage,
+       .set_suspend_enable     = rk817_set_suspend_enable,
+       .set_suspend_disable    = rk817_set_suspend_disable,
+ };
+ static struct regulator_ops rk817_boost_ops = {
+       .list_voltage           = regulator_list_voltage_linear,
+       .map_voltage            = regulator_map_voltage_linear,
+       .get_voltage_sel        = regulator_get_voltage_sel_regmap,
+       .set_voltage_sel        = regulator_set_voltage_sel_regmap,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .is_enabled             = rk8xx_is_enabled_wmsk_regmap,
+       .set_suspend_enable     = rk817_set_suspend_enable,
+       .set_suspend_disable    = rk817_set_suspend_disable,
+ };
+ static struct regulator_ops rk817_buck_ops_range = {
+       .list_voltage           = regulator_list_voltage_linear_range,
+       .map_voltage            = regulator_map_voltage_linear_range,
+       .get_voltage_sel        = regulator_get_voltage_sel_regmap,
+       .set_voltage_sel        = regulator_set_voltage_sel_regmap,
+       .set_voltage_time_sel   = regulator_set_voltage_time_sel,
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .is_enabled             = rk8xx_is_enabled_wmsk_regmap,
+       .set_mode               = rk8xx_set_mode,
+       .get_mode               = rk8xx_get_mode,
+       .set_suspend_mode       = rk8xx_set_suspend_mode,
+       .set_ramp_delay         = rk817_set_ramp_delay,
+       .set_suspend_voltage    = rk808_set_suspend_voltage_range,
+       .set_suspend_enable     = rk817_set_suspend_enable,
+       .set_suspend_disable    = rk817_set_suspend_disable,
+ };
+ static struct regulator_ops rk817_switch_ops = {
+       .enable                 = regulator_enable_regmap,
+       .disable                = regulator_disable_regmap,
+       .is_enabled             = rk8xx_is_enabled_wmsk_regmap,
+       .set_suspend_enable     = rk817_set_suspend_enable,
+       .set_suspend_disable    = rk817_set_suspend_disable,
+ };
  static const struct regulator_desc rk805_reg[] = {
        {
                .name = "DCDC_REG1",
@@@ -587,6 -915,271 +907,271 @@@ static const struct regulator_desc rk80
                RK808_DCDC_EN_REG, BIT(6)),
  };
  
+ static const struct regulator_desc rk809_reg[] = {
+       {
+               .name = "DCDC_REG1",
+               .supply_name = "vcc1",
+               .of_match = of_match_ptr("DCDC_REG1"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC1,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK1_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC1),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC1),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC1),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG2",
+               .supply_name = "vcc2",
+               .of_match = of_match_ptr("DCDC_REG2"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC2,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK2_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC2),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC2),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC2),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG3",
+               .supply_name = "vcc3",
+               .of_match = of_match_ptr("DCDC_REG3"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC3,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK3_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC3),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC3),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC3),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG4",
+               .supply_name = "vcc4",
+               .of_match = of_match_ptr("DCDC_REG4"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC4,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK3_SEL_CNT + 1,
+               .linear_ranges = rk817_buck3_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck3_voltage_ranges),
+               .vsel_reg = RK817_BUCK4_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC4),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC4),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC4),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       },
+       {
+               .name = "DCDC_REG5",
+               .supply_name = "vcc9",
+               .of_match = of_match_ptr("DCDC_REG5"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK809_ID_DCDC5,
+               .ops = &rk809_buck5_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK809_BUCK5_SEL_CNT,
+               .linear_ranges = rk809_buck5_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk809_buck5_voltage_ranges),
+               .vsel_reg = RK809_BUCK5_CONFIG(0),
+               .vsel_mask = RK809_BUCK5_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(3),
+               .enable_mask = ENABLE_MASK(1),
+               .enable_val = ENABLE_MASK(1),
+               .disable_val = DISABLE_VAL(1),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       },
+       RK817_DESC(RK817_ID_LDO1, "LDO_REG1", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(0), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_DESC(RK817_ID_LDO2, "LDO_REG2", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(1), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(1),
+                  DISABLE_VAL(1), 400),
+       RK817_DESC(RK817_ID_LDO3, "LDO_REG3", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(2), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(2),
+                  DISABLE_VAL(2), 400),
+       RK817_DESC(RK817_ID_LDO4, "LDO_REG4", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(3), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(3),
+                  DISABLE_VAL(3), 400),
+       RK817_DESC(RK817_ID_LDO5, "LDO_REG5", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(4), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_DESC(RK817_ID_LDO6, "LDO_REG6", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(5), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(1),
+                  DISABLE_VAL(1), 400),
+       RK817_DESC(RK817_ID_LDO7, "LDO_REG7", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(6), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(2),
+                  DISABLE_VAL(2), 400),
+       RK817_DESC(RK817_ID_LDO8, "LDO_REG8", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(7), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(3),
+                  DISABLE_VAL(3), 400),
+       RK817_DESC(RK817_ID_LDO9, "LDO_REG9", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(8), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(3), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_DESC_SWITCH(RK809_ID_SW1, "SWITCH_REG1", "vcc9",
+                         RK817_POWER_EN_REG(3), ENABLE_MASK(2),
+                         DISABLE_VAL(2)),
+       RK817_DESC_SWITCH(RK809_ID_SW2, "SWITCH_REG2", "vcc8",
+                         RK817_POWER_EN_REG(3), ENABLE_MASK(3),
+                         DISABLE_VAL(3)),
+ };
+ static const struct regulator_desc rk817_reg[] = {
+       {
+               .name = "DCDC_REG1",
+               .supply_name = "vcc1",
+               .of_match = of_match_ptr("DCDC_REG1"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC1,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK1_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC1),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC1),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC1),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG2",
+               .supply_name = "vcc2",
+               .of_match = of_match_ptr("DCDC_REG2"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC2,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK2_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC2),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC2),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC2),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG3",
+               .supply_name = "vcc3",
+               .of_match = of_match_ptr("DCDC_REG3"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC3,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK1_SEL_CNT + 1,
+               .linear_ranges = rk817_buck1_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges),
+               .vsel_reg = RK817_BUCK3_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC3),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC3),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC3),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       }, {
+               .name = "DCDC_REG4",
+               .supply_name = "vcc4",
+               .of_match = of_match_ptr("DCDC_REG4"),
+               .regulators_node = of_match_ptr("regulators"),
+               .id = RK817_ID_DCDC4,
+               .ops = &rk817_buck_ops_range,
+               .type = REGULATOR_VOLTAGE,
+               .n_voltages = RK817_BUCK3_SEL_CNT + 1,
+               .linear_ranges = rk817_buck3_voltage_ranges,
+               .n_linear_ranges = ARRAY_SIZE(rk817_buck3_voltage_ranges),
+               .vsel_reg = RK817_BUCK4_ON_VSEL_REG,
+               .vsel_mask = RK817_BUCK_VSEL_MASK,
+               .enable_reg = RK817_POWER_EN_REG(0),
+               .enable_mask = ENABLE_MASK(RK817_ID_DCDC4),
+               .enable_val = ENABLE_MASK(RK817_ID_DCDC4),
+               .disable_val = DISABLE_VAL(RK817_ID_DCDC4),
+               .of_map_mode = rk8xx_regulator_of_map_mode,
+               .owner = THIS_MODULE,
+       },
+       RK817_DESC(RK817_ID_LDO1, "LDO_REG1", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(0), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_DESC(RK817_ID_LDO2, "LDO_REG2", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(1), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(1),
+                  DISABLE_VAL(1), 400),
+       RK817_DESC(RK817_ID_LDO3, "LDO_REG3", "vcc5", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(2), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(2),
+                  DISABLE_VAL(2), 400),
+       RK817_DESC(RK817_ID_LDO4, "LDO_REG4", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(3), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(1), ENABLE_MASK(3),
+                  DISABLE_VAL(3), 400),
+       RK817_DESC(RK817_ID_LDO5, "LDO_REG5", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(4), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_DESC(RK817_ID_LDO6, "LDO_REG6", "vcc6", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(5), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(1),
+                  DISABLE_VAL(1), 400),
+       RK817_DESC(RK817_ID_LDO7, "LDO_REG7", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(6), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(2),
+                  DISABLE_VAL(2), 400),
+       RK817_DESC(RK817_ID_LDO8, "LDO_REG8", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(7), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(2), ENABLE_MASK(3),
+                  DISABLE_VAL(3), 400),
+       RK817_DESC(RK817_ID_LDO9, "LDO_REG9", "vcc7", 600, 3400, 25,
+                  RK817_LDO_ON_VSEL_REG(8), RK817_LDO_VSEL_MASK,
+                  RK817_POWER_EN_REG(3), ENABLE_MASK(0),
+                  DISABLE_VAL(0), 400),
+       RK817_BOOST_DESC(RK817_ID_BOOST, "BOOST", "vcc8", 4700, 5400, 100,
+                        RK817_BOOST_OTG_CFG, RK817_BOOST_VSEL_MASK,
+                        RK817_POWER_EN_REG(3), ENABLE_MASK(1), ENABLE_MASK(1),
+                  DISABLE_VAL(1), 400, 3500 - 5400),
+       RK817_DESC_SWITCH(RK817_ID_BOOST_OTG_SW, "OTG_SWITCH", "vcc9",
+                         RK817_POWER_EN_REG(3), ENABLE_MASK(2),
+                         DISABLE_VAL(2)),
+ };
  static const struct regulator_desc rk818_reg[] = {
        {
                .name = "DCDC_REG1",
@@@ -757,6 -1350,14 +1342,14 @@@ static int rk808_regulator_probe(struc
                regulators = rk808_reg;
                nregulators = RK808_NUM_REGULATORS;
                break;
+       case RK809_ID:
+               regulators = rk809_reg;
+               nregulators = RK809_NUM_REGULATORS;
+               break;
+       case RK817_ID:
+               regulators = rk817_reg;
+               nregulators = RK817_NUM_REGULATORS;
+               break;
        case RK818_ID:
                regulators = rk818_reg;
                nregulators = RK818_NUM_REGULATORS;
@@@ -795,6 -1396,7 +1388,7 @@@ static struct platform_driver rk808_reg
  module_platform_driver(rk808_regulator_driver);
  
  MODULE_DESCRIPTION("regulator driver for the RK805/RK808/RK818 series PMICs");
+ MODULE_AUTHOR("Tony xie <tony.xie@rock-chips.com>");
  MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>");
  MODULE_AUTHOR("Zhang Qing <zhangqing@rock-chips.com>");
  MODULE_AUTHOR("Wadim Egorov <w.egorov@phytec.de>");
diff --combined drivers/rtc/Kconfig
index 5c0790eed6567c79d68fb6915a79a052a498fd00,bd673dd80dcd28356504a92423072b52c6758b01..3254a30ebb1b1df75709a11de2f271ff197517e8
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  #
  # RTC class/drivers configuration
  #
@@@ -374,11 -373,11 +374,11 @@@ config RTC_DRV_MAX7768
          will be called rtc-max77686.
  
  config RTC_DRV_RK808
-       tristate "Rockchip RK805/RK808/RK818 RTC"
+       tristate "Rockchip RK805/RK808/RK809/RK817/RK818 RTC"
        depends on MFD_RK808
        help
          If you say yes here you will get support for the
-         RTC of RK805, RK808 and RK818 PMIC.
+         RTC of RK805, RK809 and RK817, RK808 and RK818 PMIC.
  
          This driver can also be built as a module. If so, the module
          will be called rk808-rtc.
@@@ -498,6 -497,14 +498,14 @@@ config RTC_DRV_M41T80_WD
        help
          If you say Y here you will get support for the
          watchdog timer in the ST M41T60 and M41T80 RTC chips series.
+ config RTC_DRV_BD70528
+       tristate "ROHM BD70528 PMIC RTC"
+       help
+         If you say Y here you will get support for the RTC
+         on ROHM BD70528 Power Management IC.
+         This driver can also be built as a module. If so, the module
+         will be called rtc-bd70528.
  
  config RTC_DRV_BQ32K
        tristate "TI BQ32000"
diff --combined drivers/rtc/rtc-rk808.c
index 2316b0343b03851160a641e607f5b9c6743202a0,6c6d674dad8dfa29f84d621e7f02982b7148bd46..c34540baa12af0197fd18587b34cbad96a5842a7
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * RTC driver for Rockchip RK808
   *
@@@ -6,6 -5,15 +6,6 @@@
   *
   * Author: Chris Zhong <zyw@rock-chips.com>
   * Author: Zhang Qing <zhangqing@rock-chips.com>
 - *
 - * This program is free software; you can redistribute it and/or modify it
 - * under the terms and conditions of the GNU General Public License,
 - * version 2, as published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope it will be useful, but WITHOUT
 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 - * more details.
   */
  
  #include <linux/module.h>
  #define NUM_TIME_REGS (RK808_WEEKS_REG - RK808_SECONDS_REG + 1)
  #define NUM_ALARM_REGS        (RK808_ALARM_YEARS_REG - RK808_ALARM_SECONDS_REG + 1)
  
+ struct rk_rtc_compat_reg {
+       unsigned int ctrl_reg;
+       unsigned int status_reg;
+       unsigned int alarm_seconds_reg;
+       unsigned int int_reg;
+       unsigned int seconds_reg;
+ };
  struct rk808_rtc {
        struct rk808 *rk808;
        struct rtc_device *rtc;
+       struct rk_rtc_compat_reg *creg;
        int irq;
  };
  
@@@ -93,7 -110,7 +102,7 @@@ static int rk808_rtc_readtime(struct de
        int ret;
  
        /* Force an update of the shadowed registers right now */
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_CTRL_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
                                 BIT_RTC_CTRL_REG_RTC_GET_TIME,
                                 BIT_RTC_CTRL_REG_RTC_GET_TIME);
        if (ret) {
         * 32khz. If we clear the GET_TIME bit here, the time of i2c transfer
         * certainly more than 31.25us: 16 * 2.5us at 400kHz bus frequency.
         */
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_CTRL_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
                                 BIT_RTC_CTRL_REG_RTC_GET_TIME,
                                 0);
        if (ret) {
                return ret;
        }
  
-       ret = regmap_bulk_read(rk808->regmap, RK808_SECONDS_REG,
+       ret = regmap_bulk_read(rk808->regmap, rk808_rtc->creg->seconds_reg,
                               rtc_data, NUM_TIME_REGS);
        if (ret) {
                dev_err(dev, "Failed to bulk read rtc_data: %d\n", ret);
@@@ -154,7 -171,7 +163,7 @@@ static int rk808_rtc_set_time(struct de
        rtc_data[6] = bin2bcd(tm->tm_wday);
  
        /* Stop RTC while updating the RTC registers */
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_CTRL_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
                                 BIT_RTC_CTRL_REG_STOP_RTC_M,
                                 BIT_RTC_CTRL_REG_STOP_RTC_M);
        if (ret) {
                return ret;
        }
  
-       ret = regmap_bulk_write(rk808->regmap, RK808_SECONDS_REG,
+       ret = regmap_bulk_write(rk808->regmap, rk808_rtc->creg->seconds_reg,
                                rtc_data, NUM_TIME_REGS);
        if (ret) {
                dev_err(dev, "Failed to bull write rtc_data: %d\n", ret);
                return ret;
        }
        /* Start RTC again */
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_CTRL_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
                                 BIT_RTC_CTRL_REG_STOP_RTC_M, 0);
        if (ret) {
                dev_err(dev, "Failed to update RTC control: %d\n", ret);
@@@ -187,8 -204,13 +196,13 @@@ static int rk808_rtc_readalarm(struct d
        uint32_t int_reg;
        int ret;
  
-       ret = regmap_bulk_read(rk808->regmap, RK808_ALARM_SECONDS_REG,
+       ret = regmap_bulk_read(rk808->regmap,
+                              rk808_rtc->creg->alarm_seconds_reg,
                               alrm_data, NUM_ALARM_REGS);
+       if (ret) {
+               dev_err(dev, "Failed to read RTC alarm date REG: %d\n", ret);
+               return ret;
+       }
  
        alrm->time.tm_sec = bcd2bin(alrm_data[0] & SECONDS_REG_MSK);
        alrm->time.tm_min = bcd2bin(alrm_data[1] & MINUTES_REG_MAK);
        alrm->time.tm_year = (bcd2bin(alrm_data[5] & YEARS_REG_MSK)) + 100;
        rockchip_to_gregorian(&alrm->time);
  
-       ret = regmap_read(rk808->regmap, RK808_RTC_INT_REG, &int_reg);
+       ret = regmap_read(rk808->regmap, rk808_rtc->creg->int_reg, &int_reg);
        if (ret) {
                dev_err(dev, "Failed to read RTC INT REG: %d\n", ret);
                return ret;
@@@ -217,7 -239,7 +231,7 @@@ static int rk808_rtc_stop_alarm(struct 
        struct rk808 *rk808 = rk808_rtc->rk808;
        int ret;
  
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_INT_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
                                 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M, 0);
  
        return ret;
@@@ -228,7 -250,7 +242,7 @@@ static int rk808_rtc_start_alarm(struc
        struct rk808 *rk808 = rk808_rtc->rk808;
        int ret;
  
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_INT_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->int_reg,
                                 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M,
                                 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
  
@@@ -258,7 -280,8 +272,8 @@@ static int rk808_rtc_setalarm(struct de
        alrm_data[4] = bin2bcd(alrm->time.tm_mon + 1);
        alrm_data[5] = bin2bcd(alrm->time.tm_year - 100);
  
-       ret = regmap_bulk_write(rk808->regmap, RK808_ALARM_SECONDS_REG,
+       ret = regmap_bulk_write(rk808->regmap,
+                               rk808_rtc->creg->alarm_seconds_reg,
                                alrm_data, NUM_ALARM_REGS);
        if (ret) {
                dev_err(dev, "Failed to bulk write: %d\n", ret);
@@@ -302,7 -325,7 +317,7 @@@ static irqreturn_t rk808_alarm_irq(int 
        struct i2c_client *client = rk808->i2c;
        int ret;
  
-       ret = regmap_write(rk808->regmap, RK808_RTC_STATUS_REG,
+       ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
                           RTC_STATUS_MASK);
        if (ret) {
                dev_err(&client->dev,
@@@ -353,6 -376,22 +368,22 @@@ static int rk808_rtc_resume(struct devi
  static SIMPLE_DEV_PM_OPS(rk808_rtc_pm_ops,
        rk808_rtc_suspend, rk808_rtc_resume);
  
+ static struct rk_rtc_compat_reg rk808_creg = {
+       .ctrl_reg = RK808_RTC_CTRL_REG,
+       .status_reg = RK808_RTC_STATUS_REG,
+       .alarm_seconds_reg = RK808_ALARM_SECONDS_REG,
+       .int_reg = RK808_RTC_INT_REG,
+       .seconds_reg = RK808_SECONDS_REG,
+ };
+ static struct rk_rtc_compat_reg rk817_creg = {
+       .ctrl_reg = RK817_RTC_CTRL_REG,
+       .status_reg = RK817_RTC_STATUS_REG,
+       .alarm_seconds_reg = RK817_ALARM_SECONDS_REG,
+       .int_reg = RK817_RTC_INT_REG,
+       .seconds_reg = RK817_SECONDS_REG,
+ };
  static int rk808_rtc_probe(struct platform_device *pdev)
  {
        struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
        if (rk808_rtc == NULL)
                return -ENOMEM;
  
+       switch (rk808->variant) {
+       case RK809_ID:
+       case RK817_ID:
+               rk808_rtc->creg = &rk817_creg;
+               break;
+       default:
+               rk808_rtc->creg = &rk808_creg;
+               break;
+       }
        platform_set_drvdata(pdev, rk808_rtc);
        rk808_rtc->rk808 = rk808;
  
        /* start rtc running by default, and use shadowed timer. */
-       ret = regmap_update_bits(rk808->regmap, RK808_RTC_CTRL_REG,
+       ret = regmap_update_bits(rk808->regmap, rk808_rtc->creg->ctrl_reg,
                                 BIT_RTC_CTRL_REG_STOP_RTC_M |
                                 BIT_RTC_CTRL_REG_RTC_READSEL_M,
                                 BIT_RTC_CTRL_REG_RTC_READSEL_M);
                return ret;
        }
  
-       ret = regmap_write(rk808->regmap, RK808_RTC_STATUS_REG,
+       ret = regmap_write(rk808->regmap, rk808_rtc->creg->status_reg,
                           RTC_STATUS_MASK);
        if (ret) {
                dev_err(&pdev->dev,
index 45aba26db964376d10ee7a97fe999b2b0698dd0b,751cb3756d49c035eafc43f60c9b112c974bc1a1..77805c3f2de713b7ce6f02748e0161efa93a4664
@@@ -1,8 -1,16 +1,8 @@@
 +/* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * ChromeOS EC multi-function device
   *
   * Copyright (C) 2012 Google, Inc
 - *
 - * This software is licensed under the terms of the GNU General Public
 - * License version 2, as published by the Free Software Foundation, and
 - * may be copied, distributed, and modified under those terms.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
   */
  
  #ifndef __LINUX_MFD_CROS_EC_H
@@@ -19,6 -27,7 +19,7 @@@
  #define CROS_EC_DEV_PD_NAME "cros_pd"
  #define CROS_EC_DEV_TP_NAME "cros_tp"
  #define CROS_EC_DEV_ISH_NAME "cros_ish"
+ #define CROS_EC_DEV_SCP_NAME "cros_scp"
  
  /*
   * The EC is unresponsive for a time after a reboot command.  Add a
@@@ -155,7 -164,6 +156,7 @@@ struct cros_ec_device 
        struct ec_response_get_next_event_v1 event_data;
        int event_size;
        u32 host_event_wake_mask;
 +      u32 last_resume_result;
  };
  
  /**
index e619def115b4d53f81d56d1d0f7dc5abf68a593f,976447607ea2cc4279513c4cd7f1d69aaa831231..ce965354bbadc699c6a7f1c8dc7c85c4cac777d5
@@@ -1,8 -1,11 +1,8 @@@
 +/* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * Functions to access LP87565 power management chip.
   *
   * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
 - *
 - * This program is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU General Public License as
 - * published by the Free Software Foundation version 2.
   */
  
  #ifndef __LINUX_MFD_LP87565_H
@@@ -14,6 -17,7 +14,7 @@@
  
  enum lp87565_device_type {
        LP87565_DEVICE_TYPE_UNKNOWN     = 0,
+       LP87565_DEVICE_TYPE_LP87561_Q1,
        LP87565_DEVICE_TYPE_LP87565_Q1,
  };
  
@@@ -246,6 -250,7 +247,7 @@@ enum LP87565_regulator_id 
        LP87565_BUCK_3,
        LP87565_BUCK_10,
        LP87565_BUCK_23,
+       LP87565_BUCK_3210,
  };
  
  /**
index 60cd8ec985637f8a902feb9b5056293e94bc449d,ec0711bcad50300e9e3e64258e3a2cbe1f050a20..fa9595dd42ba5d3aea7732fae9cec354805f0f6c
@@@ -1,12 -1,8 +1,8 @@@
- // SPDX-License-Identifier: GPL-2.0
+ /* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * Platform data for Cirrus Logic Madera codecs
   *
   * Copyright (C) 2015-2018 Cirrus Logic
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by the
-  * Free Software Foundation; version 2.
   */
  
  #ifndef MADERA_PDATA_H
@@@ -16,7 -12,6 +12,7 @@@
  #include <linux/regulator/arizona-ldo1.h>
  #include <linux/regulator/arizona-micsupp.h>
  #include <linux/regulator/machine.h>
 +#include <sound/madera-pdata.h>
  
  #define MADERA_MAX_MICBIAS            4
  #define MADERA_MAX_CHILD_MICBIAS      4
@@@ -35,12 -30,12 +31,13 @@@ struct madera_codec_pdata
   * @micvdd:       Substruct of pdata for the MICVDD regulator
   * @irq_flags:            Mode for primary IRQ (defaults to active low)
   * @gpio_base:            Base GPIO number
-  * @gpio_configs:   Array of GPIO configurations (See Documentation/pinctrl.txt)
+  * @gpio_configs:   Array of GPIO configurations (See
+  *                Documentation/driver-api/pinctl.rst)
   * @n_gpio_configs: Number of entries in gpio_configs
   * @gpsw:         General purpose switch mode setting. Depends on the external
   *                hardware connected to the switch. (See the SW1_MODE field
   *                in the datasheet for the available values for your codec)
 + * @codec:        Substruct of pdata for the ASoC codec driver
   */
  struct madera_pdata {
        struct gpio_desc *reset;
@@@ -55,8 -50,6 +52,8 @@@
        int n_gpio_configs;
  
        u32 gpsw[MADERA_MAX_GPSW];
 +
 +      struct madera_codec_pdata codec;
  };
  
  #endif
index 1d831c7222b96b1abeb82cdf22a45facb5ef5ed8,b264ac794c74d25a8c4479143a6dad1c1a5dcd60..7cfd2b0504dfa578e33541a12d14bde8bfbfeee9
@@@ -1,4 -1,3 +1,4 @@@
 +/* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * Register definitions for Rockchip's RK808/RK818 PMIC
   *
@@@ -10,6 -9,15 +10,6 @@@
   * Copyright (C) 2016 PHYTEC Messtechnik GmbH
   *
   * Author: Wadim Egorov <w.egorov@phytec.de>
 - *
 - * This program is free software; you can redistribute it and/or modify it
 - * under the terms and conditions of the GNU General Public License,
 - * version 2, as published by the Free Software Foundation.
 - *
 - * This program is distributed in the hope it will be useful, but WITHOUT
 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 - * more details.
   */
  
  #ifndef __LINUX_REGULATOR_RK808_H
@@@ -374,6 -382,7 +374,7 @@@ enum rk805_reg 
  #define SWITCH1_EN    BIT(5)
  #define DEV_OFF_RST   BIT(3)
  #define DEV_OFF               BIT(0)
+ #define RTC_STOP      BIT(0)
  
  #define VB_LO_ACT             BIT(4)
  #define VB_LO_SEL_3500MV      (7 << 0)
  #define SHUTDOWN_FUN                  (0x2 << 2)
  #define SLEEP_FUN                     (0x1 << 2)
  #define RK8XX_ID_MSK                  0xfff0
+ #define PWM_MODE_MSK                  BIT(7)
  #define FPWM_MODE                     BIT(7)
+ #define AUTO_PWM_MODE                 0
+ enum rk817_reg_id {
+       RK817_ID_DCDC1 = 0,
+       RK817_ID_DCDC2,
+       RK817_ID_DCDC3,
+       RK817_ID_DCDC4,
+       RK817_ID_LDO1,
+       RK817_ID_LDO2,
+       RK817_ID_LDO3,
+       RK817_ID_LDO4,
+       RK817_ID_LDO5,
+       RK817_ID_LDO6,
+       RK817_ID_LDO7,
+       RK817_ID_LDO8,
+       RK817_ID_LDO9,
+       RK817_ID_BOOST,
+       RK817_ID_BOOST_OTG_SW,
+       RK817_NUM_REGULATORS
+ };
+ enum rk809_reg_id {
+       RK809_ID_DCDC5 = RK817_ID_BOOST,
+       RK809_ID_SW1,
+       RK809_ID_SW2,
+       RK809_NUM_REGULATORS
+ };
+ #define RK817_SECONDS_REG             0x00
+ #define RK817_MINUTES_REG             0x01
+ #define RK817_HOURS_REG                       0x02
+ #define RK817_DAYS_REG                        0x03
+ #define RK817_MONTHS_REG              0x04
+ #define RK817_YEARS_REG                       0x05
+ #define RK817_WEEKS_REG                       0x06
+ #define RK817_ALARM_SECONDS_REG               0x07
+ #define RK817_ALARM_MINUTES_REG               0x08
+ #define RK817_ALARM_HOURS_REG         0x09
+ #define RK817_ALARM_DAYS_REG          0x0a
+ #define RK817_ALARM_MONTHS_REG                0x0b
+ #define RK817_ALARM_YEARS_REG         0x0c
+ #define RK817_RTC_CTRL_REG            0xd
+ #define RK817_RTC_STATUS_REG          0xe
+ #define RK817_RTC_INT_REG             0xf
+ #define RK817_RTC_COMP_LSB_REG                0x10
+ #define RK817_RTC_COMP_MSB_REG                0x11
+ #define RK817_POWER_EN_REG(i)         (0xb1 + (i))
+ #define RK817_POWER_SLP_EN_REG(i)     (0xb5 + (i))
+ #define RK817_POWER_CONFIG            (0xb9)
+ #define RK817_BUCK_CONFIG_REG(i)      (0xba + (i) * 3)
+ #define RK817_BUCK1_ON_VSEL_REG               0xBB
+ #define RK817_BUCK1_SLP_VSEL_REG      0xBC
+ #define RK817_BUCK2_CONFIG_REG                0xBD
+ #define RK817_BUCK2_ON_VSEL_REG               0xBE
+ #define RK817_BUCK2_SLP_VSEL_REG      0xBF
+ #define RK817_BUCK3_CONFIG_REG                0xC0
+ #define RK817_BUCK3_ON_VSEL_REG               0xC1
+ #define RK817_BUCK3_SLP_VSEL_REG      0xC2
+ #define RK817_BUCK4_CONFIG_REG                0xC3
+ #define RK817_BUCK4_ON_VSEL_REG               0xC4
+ #define RK817_BUCK4_SLP_VSEL_REG      0xC5
+ #define RK817_LDO_ON_VSEL_REG(idx)    (0xcc + (idx) * 2)
+ #define RK817_BOOST_OTG_CFG           (0xde)
+ #define RK817_ID_MSB                  0xed
+ #define RK817_ID_LSB                  0xee
+ #define RK817_SYS_STS                 0xf0
+ #define RK817_SYS_CFG(i)              (0xf1 + (i))
+ #define RK817_ON_SOURCE_REG           0xf5
+ #define RK817_OFF_SOURCE_REG          0xf6
+ /* INTERRUPT REGISTER */
+ #define RK817_INT_STS_REG0            0xf8
+ #define RK817_INT_STS_MSK_REG0                0xf9
+ #define RK817_INT_STS_REG1            0xfa
+ #define RK817_INT_STS_MSK_REG1                0xfb
+ #define RK817_INT_STS_REG2            0xfc
+ #define RK817_INT_STS_MSK_REG2                0xfd
+ #define RK817_GPIO_INT_CFG            0xfe
+ /* IRQ Definitions */
+ #define RK817_IRQ_PWRON_FALL          0
+ #define RK817_IRQ_PWRON_RISE          1
+ #define RK817_IRQ_PWRON                       2
+ #define RK817_IRQ_PWMON_LP            3
+ #define RK817_IRQ_HOTDIE              4
+ #define RK817_IRQ_RTC_ALARM           5
+ #define RK817_IRQ_RTC_PERIOD          6
+ #define RK817_IRQ_VB_LO                       7
+ #define RK817_IRQ_PLUG_IN             8
+ #define RK817_IRQ_PLUG_OUT            9
+ #define RK817_IRQ_CHRG_TERM           10
+ #define RK817_IRQ_CHRG_TIME           11
+ #define RK817_IRQ_CHRG_TS             12
+ #define RK817_IRQ_USB_OV              13
+ #define RK817_IRQ_CHRG_IN_CLMP                14
+ #define RK817_IRQ_BAT_DIS_ILIM                15
+ #define RK817_IRQ_GATE_GPIO           16
+ #define RK817_IRQ_TS_GPIO             17
+ #define RK817_IRQ_CODEC_PD            18
+ #define RK817_IRQ_CODEC_PO            19
+ #define RK817_IRQ_CLASSD_MUTE_DONE    20
+ #define RK817_IRQ_CLASSD_OCP          21
+ #define RK817_IRQ_BAT_OVP               22
+ #define RK817_IRQ_CHRG_BAT_HI         23
+ #define RK817_IRQ_END                 (RK817_IRQ_CHRG_BAT_HI + 1)
+ /*
+  * rtc_ctrl 0xd
+  * same as 808, except bit4
+  */
+ #define RK817_RTC_CTRL_RSV4           BIT(4)
+ /* power config 0xb9 */
+ #define RK817_BUCK3_FB_RES_MSK                BIT(6)
+ #define RK817_BUCK3_FB_RES_INTER      BIT(6)
+ #define RK817_BUCK3_FB_RES_EXT                0
+ /* buck config 0xba */
+ #define RK817_RAMP_RATE_OFFSET                6
+ #define RK817_RAMP_RATE_MASK          (0x3 << RK817_RAMP_RATE_OFFSET)
+ #define RK817_RAMP_RATE_3MV_PER_US    (0x0 << RK817_RAMP_RATE_OFFSET)
+ #define RK817_RAMP_RATE_6_3MV_PER_US  (0x1 << RK817_RAMP_RATE_OFFSET)
+ #define RK817_RAMP_RATE_12_5MV_PER_US (0x2 << RK817_RAMP_RATE_OFFSET)
+ #define RK817_RAMP_RATE_25MV_PER_US   (0x3 << RK817_RAMP_RATE_OFFSET)
+ /* sys_cfg1 0xf2 */
+ #define RK817_HOTDIE_TEMP_MSK         (0x3 << 4)
+ #define RK817_HOTDIE_85                       (0x0 << 4)
+ #define RK817_HOTDIE_95                       (0x1 << 4)
+ #define RK817_HOTDIE_105              (0x2 << 4)
+ #define RK817_HOTDIE_115              (0x3 << 4)
+ #define RK817_TSD_TEMP_MSK            BIT(6)
+ #define RK817_TSD_140                 0
+ #define RK817_TSD_160                 BIT(6)
+ #define RK817_CLK32KOUT2_EN           BIT(7)
+ /* sys_cfg3 0xf4 */
+ #define RK817_SLPPIN_FUNC_MSK         (0x3 << 3)
+ #define SLPPIN_NULL_FUN                       (0x0 << 3)
+ #define SLPPIN_SLP_FUN                        (0x1 << 3)
+ #define SLPPIN_DN_FUN                 (0x2 << 3)
+ #define SLPPIN_RST_FUN                        (0x3 << 3)
+ #define RK817_RST_FUNC_MSK            (0x3 << 6)
+ #define RK817_RST_FUNC_SFT            (6)
+ #define RK817_RST_FUNC_CNT            (3)
+ #define RK817_RST_FUNC_DEV            (0) /* reset the dev */
+ #define RK817_RST_FUNC_REG            (0x1 << 6) /* reset the reg only */
+ #define RK817_SLPPOL_MSK              BIT(5)
+ #define RK817_SLPPOL_H                        BIT(5)
+ #define RK817_SLPPOL_L                        (0)
+ /* gpio&int 0xfe */
+ #define RK817_INT_POL_MSK             BIT(1)
+ #define RK817_INT_POL_H                       BIT(1)
+ #define RK817_INT_POL_L                       0
+ #define RK809_BUCK5_CONFIG(i)         (RK817_BOOST_OTG_CFG + (i) * 1)
  
  enum {
        BUCK_ILMIN_50MA,
@@@ -435,6 -616,8 +608,8 @@@ enum 
  enum {
        RK805_ID = 0x8050,
        RK808_ID = 0x0000,
+       RK809_ID = 0x8090,
+       RK817_ID = 0x8170,
        RK818_ID = 0x8181,
  };
  
@@@ -445,5 -628,7 +620,7 @@@ struct rk808 
        long                            variant;
        const struct regmap_config      *regmap_cfg;
        const struct regmap_irq_chip    *regmap_irq_chip;
+       void                            (*pm_pwroff_fn)(void);
+       void                            (*pm_pwroff_prep_fn)(void);
  };
  #endif /* __LINUX_REGULATOR_RK808_H */