Merge tag 'platform-drivers-x86-v5.3-1' of git://git.infradead.org/linux-platform...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 14 Jul 2019 23:51:47 +0000 (16:51 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 14 Jul 2019 23:51:47 +0000 (16:51 -0700)
Pull x86 platform driver updates from Andy Shevchenko:
 "Gathered a bunch of x86 platform driver changes. It's rather big,
  since includes two big refactors and completely new driver:

   - ASUS WMI driver got a big refactoring in order to support the TUF
     Gaming laptops. Besides that, the regression with backlight being
     permanently off on various EeePC laptops has been fixed.

   - Accelerometer on HP ProBook 450 G0 shows wrong measurements due to
     X axis being inverted. This has been fixed.

   - Intel PMC core driver has been extended to be ACPI enumerated if
     the DSDT provides device with _HID "INT33A1". This allows to
     convert the driver to be pure platform and support new hardware
     purely based on ACPI DSDT.

   - From now on the Intel Speed Select Technology is supported thru a
     corresponding driver. This driver provides an access to the
     features of the ISST, such as Performance Profile, Core Power, Base
     frequency and Turbo Frequency.

   - Mellanox platform drivers has been refactored and now extended to
     support more systems, including new coming ones.

   - The OLPC XO-1.75 platform is now supported.

   - CB4063 Beckhoff Automation board is using PMC clocks, provided via
     pmc_atom driver, for ethernet controllers in a way that they can't
     be managed by the clock driver. The quirk has been extended to
     cover this case.

   - Touchscreen on Chuwi Hi10 Plus tablet has been enabled. Meanwhile
     the information of Chuwi Hi10 Air has been fixed to cover more
     models based on the same platform.

   - Xiaomi notebooks have WMI interface enabled. Thus, the driver to
     support it has been provided. It required some extension of the
     generic WMI library, which allows to propagate opaque context to
     the ->probe() of the individual drivers.

  This release includes debugfs clean up from Greg KH for several
  drivers that drop return code check and make debugfs absence or
  failure non-fatal.

  Also miscellaneous fixes here and there, mostly for Acer WMI and
  various Intel drivers"

* tag 'platform-drivers-x86-v5.3-1' of git://git.infradead.org/linux-platform-drivers-x86: (74 commits)
  platform/x86: Fix PCENGINES_APU2 Kconfig warning
  tools/power/x86/intel-speed-select: Add .gitignore file
  platform/x86: mlx-platform: Fix error handling in mlxplat_init()
  platform/x86: intel_pmc_core: Attach using APCI HID "INT33A1"
  platform/x86: intel_pmc_core: transform Pkg C-state residency from TSC ticks into microseconds
  platform/x86: asus-wmi: Use dev_get_drvdata()
  Documentation/ABI: Add new attribute for mlxreg-io sysfs interfaces
  platform/x86: mlx-platform: Add more reset cause attributes
  platform/x86: mlx-platform: Modify DMI matching order
  platform/x86: mlx-platform: Add regmap structure for the next generation systems
  platform/x86: mlx-platform: Change API for i2c-mlxcpld driver activation
  platform/x86: mlx-platform: Move regmap initialization before all drivers activation
  MAINTAINERS: Update for Intel Speed Select Technology
  tools/power/x86: A tool to validate Intel Speed Select commands
  platform/x86: ISST: Restore state on resume
  platform/x86: ISST: Add Intel Speed Select PUNIT MSR interface
  platform/x86: ISST: Add Intel Speed Select mailbox interface via MSRs
  platform/x86: ISST: Add Intel Speed Select mailbox interface via PCI
  platform/x86: ISST: Add Intel Speed Select mmio interface
  platform/x86: ISST: Add IOCTL to Translate Linux logical CPU to PUNIT CPU number
  ...

28 files changed:
1  2 
Documentation/ABI/stable/sysfs-driver-mlxreg-io
MAINTAINERS
arch/x86/Kconfig
arch/x86/platform/olpc/olpc.c
arch/x86/platform/olpc/olpc_dt.c
drivers/hid/hid-asus.c
drivers/platform/Kconfig
drivers/platform/olpc/Makefile
drivers/platform/olpc/olpc-ec.c
drivers/platform/x86/Kconfig
drivers/platform/x86/acer-wmi.c
drivers/platform/x86/asus-nb-wmi.c
drivers/platform/x86/asus-wmi.c
drivers/platform/x86/dell-laptop.c
drivers/platform/x86/dell-smbios-wmi.c
drivers/platform/x86/dell-wmi-descriptor.c
drivers/platform/x86/dell-wmi.c
drivers/platform/x86/hp_accel.c
drivers/platform/x86/ideapad-laptop.c
drivers/platform/x86/pmc_atom.c
drivers/platform/x86/samsung-laptop.c
drivers/platform/x86/touchscreen_dmi.c
drivers/platform/x86/wmi-bmof.c
drivers/platform/x86/wmi.c
drivers/power/supply/Kconfig
drivers/power/supply/olpc_battery.c
include/linux/acpi.h
include/linux/wmi.h

@@@ -1,4 -1,5 +1,4 @@@
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      asic_health
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/asic_health
  
  Date:         June 2018
  KernelVersion:        4.19
@@@ -8,8 -9,9 +8,8 @@@ Description:     This file shows ASIC healt
  
                The files are read only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      cpld1_version
 -                                                      cpld2_version
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/cpld1_version
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/cpld2_version
  Date:         June 2018
  KernelVersion:        4.19
  Contact:      Vadim Pasternak <vadimpmellanox.com>
@@@ -18,7 -20,8 +18,7 @@@ Description:  These files show with whic
  
                The files are read only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      fan_dir
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/fan_dir
  
  Date:         December 2018
  KernelVersion:        5.0
@@@ -29,7 -32,8 +29,7 @@@ Description:  This file shows the syste
  
                The files are read only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      jtag_enable
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/jtag_enable
  
  Date:         November 2018
  KernelVersion:        5.0
@@@ -39,7 -43,8 +39,7 @@@ Description:  These files show with whic
  
                The files are read only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      jtag_enable
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/jtag_enable
  
  Date:         November 2018
  KernelVersion:        5.0
@@@ -82,15 -87,16 +82,15 @@@ Description:       These files allow assertin
  
                The files are write only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                                      reset_aux_pwr_or_ref
 -                                                      reset_asic_thermal
 -                                                      reset_hotswap_or_halt
 -                                                      reset_hotswap_or_wd
 -                                                      reset_fw_reset
 -                                                      reset_long_pb
 -                                                      reset_main_pwr_fail
 -                                                      reset_short_pb
 -                                                      reset_sw_reset
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_aux_pwr_or_ref
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_asic_thermal
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_hotswap_or_halt
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_hotswap_or_wd
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_fw_reset
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_long_pb
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_main_pwr_fail
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_short_pb
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_sw_reset
  Date:         June 2018
  KernelVersion:        4.19
  Contact:      Vadim Pasternak <vadimpmellanox.com>
@@@ -104,10 -110,11 +104,10 @@@ Description:    These files show the syste
  
                The files are read only.
  
 -What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/
 -                                              reset_comex_pwr_fail
 -                                              reset_from_comex
 -                                              reset_system
 -                                              reset_voltmon_upgrade_fail
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_comex_pwr_fail
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_from_comex
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_system
 +What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_voltmon_upgrade_fail
  
  Date:         November 2018
  KernelVersion:        5.0
@@@ -120,3 -127,23 +120,23 @@@ Description:     These files show the syste
                the last reset cause.
  
                The files are read only.
+ Date:         June 2019
+ KernelVersion:        5.3
+ Contact:      Vadim Pasternak <vadimpmellanox.com>
+ Description:  These files show the system reset cause, as following:
+               COMEX thermal shutdown; wathchdog power off or reset was derived
+               by one of the next components: COMEX, switch board or by Small Form
+               Factor mezzanine, reset requested from ASIC, reset cuased by BIOS
+               reload. Value 1 in file means this is reset cause, 0 - otherwise.
+               Only one of the above causes could be 1 at the same time, representing
+               only last reset cause.
+               The files are read only.
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_comex_thermal
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_comex_wd
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_from_asic
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_reload_bios
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_sff_wd
+ What:         /sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*/reset_swb_wd
diff --combined MAINTAINERS
@@@ -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
@@@ -5659,8 -5588,7 +5659,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>
@@@ -5869,12 -5797,6 +5869,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
@@@ -6034,7 -5956,6 +6034,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/
@@@ -6099,7 -6020,7 +6099,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
@@@ -6285,14 -6206,6 +6285,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
@@@ -6309,6 -6222,7 +6309,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
@@@ -6325,7 -6239,7 +6325,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*
  
@@@ -6402,13 -6316,6 +6402,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
@@@ -6452,8 -6359,6 +6452,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
@@@ -6572,19 -6477,6 +6572,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
@@@ -6761,18 -6653,6 +6761,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
@@@ -6799,7 -6679,9 +6799,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>
@@@ -6811,7 -6693,7 +6811,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/
@@@ -6822,15 -6704,6 +6822,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
@@@ -7124,7 -6997,7 +7124,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)
@@@ -7307,7 -7180,7 +7307,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
@@@ -7417,7 -7290,6 +7417,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
@@@ -7428,21 -7300,11 +7428,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
@@@ -7479,7 -7341,6 +7479,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
@@@ -7736,7 -7597,7 +7736,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
@@@ -7899,12 -7760,6 +7899,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>
@@@ -7933,7 -7788,7 +7933,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>
@@@ -8055,7 -7910,7 +8055,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
@@@ -8166,7 -8021,7 +8166,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
@@@ -8246,6 -8101,14 +8246,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>
@@@ -8507,26 -8370,18 +8515,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
@@@ -8706,7 -8561,7 +8714,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
@@@ -8764,12 -8619,14 +8772,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*
@@@ -8999,7 -8856,7 +9007,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
@@@ -9261,7 -9118,7 +9269,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>
@@@ -9285,7 -9142,7 +9293,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
  
@@@ -9369,7 -9226,7 +9377,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
@@@ -9776,17 -9633,6 +9784,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>
@@@ -10253,7 -10099,6 +10261,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>
@@@ -10280,7 -10125,7 +10288,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>
@@@ -10364,7 -10209,7 +10372,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
@@@ -10380,14 -10225,6 +10388,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
@@@ -10441,9 -10278,7 +10449,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
  
@@@ -10712,7 -10547,7 +10720,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>
@@@ -11027,7 -10862,7 +11035,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
@@@ -11240,18 -11075,11 +11248,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
@@@ -11278,7 -11106,7 +11286,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/
@@@ -11408,7 -11236,7 +11416,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>
@@@ -11452,7 -11280,7 +11460,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
@@@ -11842,6 -11670,16 +11850,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
@@@ -11898,7 -11736,6 +11906,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
@@@ -12032,14 -11869,6 +12040,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
@@@ -12208,7 -12037,7 +12216,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
@@@ -12733,7 -12562,8 +12741,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/
@@@ -12827,7 -12657,7 +12835,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/
@@@ -12933,7 -12763,7 +12941,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*
@@@ -12947,6 -12777,7 +12955,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
@@@ -13224,6 -13055,7 +13232,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
@@@ -13543,7 -13375,6 +13551,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
@@@ -13565,8 -13396,6 +13573,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
  
@@@ -13664,11 -13493,11 +13672,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
@@@ -13797,9 -13626,8 +13805,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
@@@ -13869,7 -13697,7 +13877,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
@@@ -13889,7 -13717,7 +13897,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>
@@@ -14328,12 -14156,6 +14336,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
@@@ -14508,15 -14330,6 +14516,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
@@@ -14532,7 -14345,7 +14540,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>
@@@ -14548,7 -14361,7 +14556,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
  
@@@ -14577,7 -14390,7 +14585,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
@@@ -14602,7 -14415,7 +14610,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
  
@@@ -14794,14 -14607,6 +14802,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
@@@ -15108,17 -14913,6 +15116,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
@@@ -15195,7 -14989,7 +15203,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]
@@@ -15686,7 -15480,6 +15694,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
  
@@@ -15891,7 -15684,6 +15899,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*
@@@ -16440,7 -16232,7 +16448,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
@@@ -16493,7 -16285,7 +16501,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
@@@ -16511,7 -16303,7 +16519,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
@@@ -16567,7 -16359,7 +16575,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)
@@@ -16583,7 -16375,7 +16591,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/
@@@ -16631,7 -16423,7 +16639,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
  
@@@ -16810,7 -16602,7 +16818,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
@@@ -16885,7 -16677,7 +16893,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
@@@ -16908,7 -16700,6 +16916,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/*
@@@ -17467,7 -17258,6 +17475,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
@@@ -17515,7 -17305,7 +17523,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
@@@ -17561,13 -17351,7 +17569,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>
@@@ -17603,7 -17387,6 +17611,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
@@@ -17687,12 -17470,6 +17695,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 arch/x86/Kconfig
@@@ -17,7 -17,6 +17,7 @@@ config X86_3
        select HAVE_DEBUG_STACKOVERFLOW
        select MODULES_USE_ELF_REL
        select OLD_SIGACTION
 +      select GENERIC_VDSO_32
  
  config X86_64
        def_bool y
@@@ -122,8 -121,6 +122,8 @@@ config X8
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select GENERIC_TIME_VSYSCALL
 +      select GENERIC_GETTIMEOFDAY
 +      select GUP_GET_PTE_LOW_HIGH             if X86_PAE
        select HARDLOCKUP_CHECK_TIMESTAMP       if X86_64
        select HAVE_ACPI_APEI                   if ACPI
        select HAVE_ACPI_APEI_NMI               if ACPI
        select HAVE_EFFICIENT_UNALIGNED_ACCESS
        select HAVE_EISA
        select HAVE_EXIT_THREAD
 +      select HAVE_FAST_GUP
        select HAVE_FENTRY                      if X86_64 || DYNAMIC_FTRACE
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_SYSCALL_TRACEPOINTS
        select HAVE_UNSTABLE_SCHED_CLOCK
        select HAVE_USER_RETURN_NOTIFIER
 +      select HAVE_GENERIC_VDSO
        select HOTPLUG_SMT                      if SMP
        select IRQ_FORCED_THREADING
        select NEED_SG_DMA_LENGTH
        select USER_STACKTRACE_SUPPORT
        select VIRT_TO_BUS
        select X86_FEATURE_NAMES                if PROC_FS
 +      select PROC_PID_ARCH_STATUS             if PROC_FS
  
  config INSTRUCTION_DECODER
        def_bool y
@@@ -401,7 -395,7 +401,7 @@@ config SM
          Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
          Management" code will be disabled if you say Y here.
  
 -        See also <file:Documentation/x86/i386/IO-APIC.txt>,
 +        See also <file:Documentation/x86/i386/IO-APIC.rst>,
          <file:Documentation/lockup-watchdogs.txt> and the SMP-HOWTO available at
          <http://www.tldp.org/docs.html#howto>.
  
@@@ -787,9 -781,6 +787,9 @@@ config PARAVIRT_SPINLOCK
  
          If you are unsure how to answer this question, answer Y.
  
 +config X86_HV_CALLBACK_VECTOR
 +      def_bool n
 +
  source "arch/x86/xen/Kconfig"
  
  config KVM_GUEST
@@@ -841,17 -832,6 +841,17 @@@ config JAILHOUSE_GUES
          cell. You can leave this option disabled if you only want to start
          Jailhouse and run Linux afterwards in the root cell.
  
 +config ACRN_GUEST
 +      bool "ACRN Guest support"
 +      depends on X86_64
 +      select X86_HV_CALLBACK_VECTOR
 +      help
 +        This option allows to run Linux as guest in the ACRN hypervisor. ACRN is
 +        a flexible, lightweight reference open-source hypervisor, built with
 +        real-time and safety-criticality in mind. It is built for embedded
 +        IOT with small footprint and real-time features. More details can be
 +        found in https://projectacrn.org/.
 +
  endif #HYPERVISOR_GUEST
  
  source "arch/x86/Kconfig.cpu"
@@@ -1310,7 -1290,7 +1310,7 @@@ config MICROCOD
          the Linux kernel.
  
          The preferred method to load microcode from a detached initrd is described
 -        in Documentation/x86/microcode.txt. For that you need to enable
 +        in Documentation/x86/microcode.rst. For that you need to enable
          CONFIG_BLK_DEV_INITRD in order for the loader to be able to scan the
          initrd for microcode blobs.
  
@@@ -1349,7 -1329,7 +1349,7 @@@ config MICROCODE_OLD_INTERFAC
          It is inadequate because it runs too late to be able to properly
          load microcode on a machine and it needs special tools. Instead, you
          should've switched to the early loading method with the initrd or
 -        builtin microcode by now: Documentation/x86/microcode.txt
 +        builtin microcode by now: Documentation/x86/microcode.rst
  
  config X86_MSR
        tristate "/dev/cpu/*/msr - Model-specific register support"
@@@ -1498,7 -1478,7 +1498,7 @@@ config X86_5LEVE
          A kernel with the option enabled can be booted on machines that
          support 4- or 5-level paging.
  
 -        See Documentation/x86/x86_64/5level-paging.txt for more
 +        See Documentation/x86/x86_64/5level-paging.rst for more
          information.
  
          Say N if unsure.
@@@ -1646,7 -1626,7 +1646,7 @@@ config ARCH_MEMORY_PROB
        depends on X86_64 && MEMORY_HOTPLUG
        help
          This option enables a sysfs memory/probe interface for testing.
 -        See Documentation/memory-hotplug.txt for more information.
 +        See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
          If you are unsure how to answer this question, answer N.
  
  config ARCH_PROC_KCORE_TEXT
@@@ -1803,7 -1783,7 +1803,7 @@@ config MTR
          You can safely say Y even if your machine doesn't have MTRRs, you'll
          just add about 9 KB to your kernel.
  
 -        See <file:Documentation/x86/mtrr.txt> for more information.
 +        See <file:Documentation/x86/mtrr.rst> for more information.
  
  config MTRR_SANITIZER
        def_bool y
@@@ -1915,7 -1895,7 +1915,7 @@@ config X86_INTEL_MP
          process and adds some branches to paths used during
          exec() and munmap().
  
 -        For details, see Documentation/x86/intel_mpx.txt
 +        For details, see Documentation/x86/intel_mpx.rst
  
          If unsure, say N.
  
@@@ -1931,7 -1911,7 +1931,7 @@@ config X86_INTEL_MEMORY_PROTECTION_KEY
          page-based protections, but without requiring modification of the
          page tables when an application changes protection domains.
  
 -        For details, see Documentation/x86/protection-keys.txt
 +        For details, see Documentation/core-api/protection-keys.rst
  
          If unsure, say y.
  
@@@ -2057,7 -2037,7 +2057,7 @@@ config CRASH_DUM
          to a memory address not used by the main kernel or BIOS using
          PHYSICAL_START, or it must be built as a relocatable image
          (CONFIG_RELOCATABLE=y).
 -        For more details see Documentation/kdump/kdump.txt
 +        For more details see Documentation/kdump/kdump.rst
  
  config KEXEC_JUMP
        bool "kexec jump"
@@@ -2094,7 -2074,7 +2094,7 @@@ config PHYSICAL_STAR
          the reserved region.  In other words, it can be set based on
          the "X" value as specified in the "crashkernel=YM@XM"
          command line boot parameter passed to the panic-ed
 -        kernel. Please take a look at Documentation/kdump/kdump.txt
 +        kernel. Please take a look at Documentation/kdump/kdump.rst
          for more details about crash dumps.
  
          Usage of bzImage for capturing the crash dump is recommended as
@@@ -2305,7 -2285,7 +2305,7 @@@ config COMPAT_VDS
  choice
        prompt "vsyscall table for legacy applications"
        depends on X86_64
 -      default LEGACY_VSYSCALL_EMULATE
 +      default LEGACY_VSYSCALL_XONLY
        help
          Legacy user code that does not know how to find the vDSO expects
          to be able to issue three syscalls by calling fixed addresses in
          it can be used to assist security vulnerability exploitation.
  
          This setting can be changed at boot time via the kernel command
 -        line parameter vsyscall=[emulate|none].
 +        line parameter vsyscall=[emulate|xonly|none].
  
          On a system with recent enough glibc (2.14 or newer) and no
          static binaries, you can say None without a performance penalty
          to improve security.
  
 -        If unsure, select "Emulate".
 +        If unsure, select "Emulate execution only".
  
        config LEGACY_VSYSCALL_EMULATE
 -              bool "Emulate"
 +              bool "Full emulation"
 +              help
 +                The kernel traps and emulates calls into the fixed vsyscall
 +                address mapping. This makes the mapping non-executable, but
 +                it still contains readable known contents, which could be
 +                used in certain rare security vulnerability exploits. This
 +                configuration is recommended when using legacy userspace
 +                that still uses vsyscalls along with legacy binary
 +                instrumentation tools that require code to be readable.
 +
 +                An example of this type of legacy userspace is running
 +                Pin on an old binary that still uses vsyscalls.
 +
 +      config LEGACY_VSYSCALL_XONLY
 +              bool "Emulate execution only"
                help
 -                The kernel traps and emulates calls into the fixed
 -                vsyscall address mapping. This makes the mapping
 -                non-executable, but it still contains known contents,
 -                which could be used in certain rare security vulnerability
 -                exploits. This configuration is recommended when userspace
 -                still uses the vsyscall area.
 +                The kernel traps and emulates calls into the fixed vsyscall
 +                address mapping and does not allow reads.  This
 +                configuration is recommended when userspace might use the
 +                legacy vsyscall area but support for legacy binary
 +                instrumentation of legacy code is not needed.  It mitigates
 +                certain uses of the vsyscall area as an ASLR-bypassing
 +                buffer.
  
        config LEGACY_VSYSCALL_NONE
                bool "None"
@@@ -2733,6 -2698,7 +2733,7 @@@ config OLP
        select OF
        select OF_PROMTREE
        select IRQ_DOMAIN
+       select OLPC_EC
        ---help---
          Add support for detecting the unique features of the OLPC
          XO hardware.
@@@ -2908,6 -2874,9 +2909,6 @@@ config HAVE_ATOMIC_IOMA
  config X86_DEV_DMA_OPS
        bool
  
 -config HAVE_GENERIC_GUP
 -      def_bool y
 -
  source "drivers/firmware/Kconfig"
  
  source "arch/x86/kvm/Kconfig"
@@@ -1,9 -1,13 +1,9 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Support for the OLPC DCON and OLPC EC access
   *
   * Copyright © 2006  Advanced Micro Devices, Inc.
   * Copyright © 2007-2008  Andres Salomon <dilinger@debian.org>
 - *
 - * 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.
   */
  
  #include <linux/kernel.h>
@@@ -26,9 -30,6 +26,6 @@@
  struct olpc_platform_t olpc_platform_info;
  EXPORT_SYMBOL_GPL(olpc_platform_info);
  
- /* EC event mask to be applied during suspend (defining wakeup sources). */
- static u16 ec_wakeup_mask;
  /* what the timeout *should* be (in ms) */
  #define EC_BASE_TIMEOUT 20
  
@@@ -182,83 -183,6 +179,6 @@@ err
        return ret;
  }
  
- void olpc_ec_wakeup_set(u16 value)
- {
-       ec_wakeup_mask |= value;
- }
- EXPORT_SYMBOL_GPL(olpc_ec_wakeup_set);
- void olpc_ec_wakeup_clear(u16 value)
- {
-       ec_wakeup_mask &= ~value;
- }
- EXPORT_SYMBOL_GPL(olpc_ec_wakeup_clear);
- /*
-  * Returns true if the compile and runtime configurations allow for EC events
-  * to wake the system.
-  */
- bool olpc_ec_wakeup_available(void)
- {
-       if (!machine_is_olpc())
-               return false;
-       /*
-        * XO-1 EC wakeups are available when olpc-xo1-sci driver is
-        * compiled in
-        */
- #ifdef CONFIG_OLPC_XO1_SCI
-       if (olpc_platform_info.boardrev < olpc_board_pre(0xd0)) /* XO-1 */
-               return true;
- #endif
-       /*
-        * XO-1.5 EC wakeups are available when olpc-xo15-sci driver is
-        * compiled in
-        */
- #ifdef CONFIG_OLPC_XO15_SCI
-       if (olpc_platform_info.boardrev >= olpc_board_pre(0xd0)) /* XO-1.5 */
-               return true;
- #endif
-       return false;
- }
- EXPORT_SYMBOL_GPL(olpc_ec_wakeup_available);
- int olpc_ec_mask_write(u16 bits)
- {
-       if (olpc_platform_info.flags & OLPC_F_EC_WIDE_SCI) {
-               __be16 ec_word = cpu_to_be16(bits);
-               return olpc_ec_cmd(EC_WRITE_EXT_SCI_MASK, (void *) &ec_word, 2,
-                                  NULL, 0);
-       } else {
-               unsigned char ec_byte = bits & 0xff;
-               return olpc_ec_cmd(EC_WRITE_SCI_MASK, &ec_byte, 1, NULL, 0);
-       }
- }
- EXPORT_SYMBOL_GPL(olpc_ec_mask_write);
- int olpc_ec_sci_query(u16 *sci_value)
- {
-       int ret;
-       if (olpc_platform_info.flags & OLPC_F_EC_WIDE_SCI) {
-               __be16 ec_word;
-               ret = olpc_ec_cmd(EC_EXT_SCI_QUERY,
-                       NULL, 0, (void *) &ec_word, 2);
-               if (ret == 0)
-                       *sci_value = be16_to_cpu(ec_word);
-       } else {
-               unsigned char ec_byte;
-               ret = olpc_ec_cmd(EC_SCI_QUERY, NULL, 0, &ec_byte, 1);
-               if (ret == 0)
-                       *sci_value = ec_byte;
-       }
-       return ret;
- }
- EXPORT_SYMBOL_GPL(olpc_ec_sci_query);
  static bool __init check_ofw_architecture(struct device_node *root)
  {
        const char *olpc_arch;
@@@ -292,6 -216,10 +212,10 @@@ static bool __init platform_detect(void
        if (success) {
                olpc_platform_info.boardrev = get_board_revision(root);
                olpc_platform_info.flags |= OLPC_F_PRESENT;
+               pr_info("OLPC board revision %s%X\n",
+                       ((olpc_platform_info.boardrev & 0xf) < 8) ? "pre" : "",
+                       olpc_platform_info.boardrev >> 4);
        }
  
        of_node_put(root);
@@@ -311,27 -239,8 +235,8 @@@ static int __init add_xo1_platform_devi
        return PTR_ERR_OR_ZERO(pdev);
  }
  
- static int olpc_xo1_ec_probe(struct platform_device *pdev)
- {
-       /* get the EC revision */
-       olpc_ec_cmd(EC_FIRMWARE_REV, NULL, 0,
-                       (unsigned char *) &olpc_platform_info.ecver, 1);
-       /* EC version 0x5f adds support for wide SCI mask */
-       if (olpc_platform_info.ecver >= 0x5f)
-               olpc_platform_info.flags |= OLPC_F_EC_WIDE_SCI;
-       pr_info("OLPC board revision %s%X (EC=%x)\n",
-                       ((olpc_platform_info.boardrev & 0xf) < 8) ? "pre" : "",
-                       olpc_platform_info.boardrev >> 4,
-                       olpc_platform_info.ecver);
-       return 0;
- }
  static int olpc_xo1_ec_suspend(struct platform_device *pdev)
  {
-       olpc_ec_mask_write(ec_wakeup_mask);
        /*
         * Squelch SCIs while suspended.  This is a fix for
         * <http://dev.laptop.org/ticket/1835>.
@@@ -355,15 -264,27 +260,27 @@@ static int olpc_xo1_ec_resume(struct pl
  }
  
  static struct olpc_ec_driver ec_xo1_driver = {
-       .probe = olpc_xo1_ec_probe,
        .suspend = olpc_xo1_ec_suspend,
        .resume = olpc_xo1_ec_resume,
        .ec_cmd = olpc_xo1_ec_cmd,
+ #ifdef CONFIG_OLPC_XO1_SCI
+       /*
+        * XO-1 EC wakeups are available when olpc-xo1-sci driver is
+        * compiled in
+        */
+       .wakeup_available = true,
+ #endif
  };
  
  static struct olpc_ec_driver ec_xo1_5_driver = {
-       .probe = olpc_xo1_ec_probe,
        .ec_cmd = olpc_xo1_ec_cmd,
+ #ifdef CONFIG_OLPC_XO1_5_SCI
+       /*
+        * XO-1.5 EC wakeups are available when olpc-xo15-sci driver is
+        * compiled in
+        */
+       .wakeup_available = true,
+ #endif
  };
  
  static int __init olpc_init(void)
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * OLPC-specific OFW device tree support code.
   *
@@@ -10,6 -9,11 +10,6 @@@
   *
   *  Adapted for sparc by David S. Miller davem@davemloft.net
   *  Adapted for x86/OLPC by 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
 - *      as published by the Free Software Foundation; either version
 - *      2 of the License, or (at your option) any later version.
   */
  
  #include <linux/kernel.h>
@@@ -216,7 -220,7 +216,7 @@@ static u32 __init olpc_dt_get_board_rev
        return be32_to_cpu(rev);
  }
  
int olpc_dt_compatible_match(phandle node, const char *compat)
static int __init olpc_dt_compatible_match(phandle node, const char *compat)
  {
        char buf[64], *p;
        int plen, len;
diff --combined drivers/hid/hid-asus.c
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   *  HID driver for Asus notebook built-in keyboard.
   *  Fixes small logical maximum to match usage maximum.
   */
  
  /*
 - * 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.
   */
  
  #include <linux/dmi.h>
@@@ -393,7 -396,7 +393,7 @@@ static bool asus_kbd_wmi_led_control_pr
        if (!IS_ENABLED(CONFIG_ASUS_WMI))
                return false;
  
-       ret = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS2,
+       ret = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS,
                                       ASUS_WMI_DEVID_KBD_BACKLIGHT, 0, &value);
        hid_dbg(hdev, "WMI backlight check: rc %d value %x", ret, value);
        if (ret)
diff --combined drivers/platform/Kconfig
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  if X86
  source "drivers/platform/x86/Kconfig"
  endif
@@@ -11,3 -10,5 +11,5 @@@ source "drivers/platform/goldfish/Kconf
  source "drivers/platform/chrome/Kconfig"
  
  source "drivers/platform/mellanox/Kconfig"
+ source "drivers/platform/olpc/Kconfig"
@@@ -1,5 -1,5 +1,6 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  #
  # OLPC XO platform-specific drivers
  #
- obj-$(CONFIG_OLPC)            += olpc-ec.o
+ obj-$(CONFIG_OLPC_EC)         += olpc-ec.o
+ obj-$(CONFIG_OLPC_XO175_EC)   += olpc-xo175-ec.o
@@@ -1,10 -1,11 +1,10 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Generic driver for the OLPC Embedded Controller.
   *
   * Author: Andres Salomon <dilinger@queued.net>
   *
   * Copyright (C) 2011-2012 One Laptop per Child Foundation.
 - *
 - * Licensed under the GPL v2 or later.
   */
  #include <linux/completion.h>
  #include <linux/debugfs.h>
@@@ -15,8 -16,8 +15,8 @@@
  #include <linux/workqueue.h>
  #include <linux/init.h>
  #include <linux/list.h>
+ #include <linux/regulator/driver.h>
  #include <linux/olpc-ec.h>
- #include <asm/olpc.h>
  
  struct ec_cmd_desc {
        u8 cmd;
  
  struct olpc_ec_priv {
        struct olpc_ec_driver *drv;
+       u8 version;
        struct work_struct worker;
        struct mutex cmd_lock;
  
+       /* DCON regulator */
+       struct regulator_dev *dcon_rdev;
+       bool dcon_enabled;
        /* Pending EC commands */
        struct list_head cmd_q;
        spinlock_t cmd_q_lock;
        struct dentry *dbgfs_dir;
  
        /*
+        * EC event mask to be applied during suspend (defining wakeup
+        * sources).
+        */
+       u16 ec_wakeup_mask;
+       /*
         * Running an EC command while suspending means we don't always finish
         * the command before the machine suspends.  This means that the EC
         * is expecting the command protocol to finish, but we after a period
@@@ -118,8 -130,11 +129,11 @@@ int olpc_ec_cmd(u8 cmd, u8 *inbuf, size
        struct olpc_ec_priv *ec = ec_priv;
        struct ec_cmd_desc desc;
  
-       /* Ensure a driver and ec hook have been registered */
-       if (WARN_ON(!ec_driver || !ec_driver->ec_cmd))
+       /* Driver not yet registered. */
+       if (!ec_driver)
+               return -EPROBE_DEFER;
+       if (WARN_ON(!ec_driver->ec_cmd))
                return -ENODEV;
  
        if (!ec)
  }
  EXPORT_SYMBOL_GPL(olpc_ec_cmd);
  
+ void olpc_ec_wakeup_set(u16 value)
+ {
+       struct olpc_ec_priv *ec = ec_priv;
+       if (WARN_ON(!ec))
+               return;
+       ec->ec_wakeup_mask |= value;
+ }
+ EXPORT_SYMBOL_GPL(olpc_ec_wakeup_set);
+ void olpc_ec_wakeup_clear(u16 value)
+ {
+       struct olpc_ec_priv *ec = ec_priv;
+       if (WARN_ON(!ec))
+               return;
+       ec->ec_wakeup_mask &= ~value;
+ }
+ EXPORT_SYMBOL_GPL(olpc_ec_wakeup_clear);
+ int olpc_ec_mask_write(u16 bits)
+ {
+       struct olpc_ec_priv *ec = ec_priv;
+       if (WARN_ON(!ec))
+               return -ENODEV;
+       /* EC version 0x5f adds support for wide SCI mask */
+       if (ec->version >= 0x5f) {
+               __be16 ec_word = cpu_to_be16(bits);
+               return olpc_ec_cmd(EC_WRITE_EXT_SCI_MASK, (void *)&ec_word, 2, NULL, 0);
+       } else {
+               u8 ec_byte = bits & 0xff;
+               return olpc_ec_cmd(EC_WRITE_SCI_MASK, &ec_byte, 1, NULL, 0);
+       }
+ }
+ EXPORT_SYMBOL_GPL(olpc_ec_mask_write);
+ /*
+  * Returns true if the compile and runtime configurations allow for EC events
+  * to wake the system.
+  */
+ bool olpc_ec_wakeup_available(void)
+ {
+       if (WARN_ON(!ec_driver))
+               return false;
+       return ec_driver->wakeup_available;
+ }
+ EXPORT_SYMBOL_GPL(olpc_ec_wakeup_available);
+ int olpc_ec_sci_query(u16 *sci_value)
+ {
+       struct olpc_ec_priv *ec = ec_priv;
+       int ret;
+       if (WARN_ON(!ec))
+               return -ENODEV;
+       /* EC version 0x5f adds support for wide SCI mask */
+       if (ec->version >= 0x5f) {
+               __be16 ec_word;
+               ret = olpc_ec_cmd(EC_EXT_SCI_QUERY, NULL, 0, (void *)&ec_word, 2);
+               if (ret == 0)
+                       *sci_value = be16_to_cpu(ec_word);
+       } else {
+               u8 ec_byte;
+               ret = olpc_ec_cmd(EC_SCI_QUERY, NULL, 0, &ec_byte, 1);
+               if (ret == 0)
+                       *sci_value = ec_byte;
+       }
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(olpc_ec_sci_query);
  #ifdef CONFIG_DEBUG_FS
  
  /*
@@@ -254,9 -351,61 +350,61 @@@ static struct dentry *olpc_ec_setup_deb
  
  #endif /* CONFIG_DEBUG_FS */
  
+ static int olpc_ec_set_dcon_power(struct olpc_ec_priv *ec, bool state)
+ {
+       unsigned char ec_byte = state;
+       int ret;
+       if (ec->dcon_enabled == state)
+               return 0;
+       ret = olpc_ec_cmd(EC_DCON_POWER_MODE, &ec_byte, 1, NULL, 0);
+       if (ret)
+               return ret;
+       ec->dcon_enabled = state;
+       return 0;
+ }
+ static int dcon_regulator_enable(struct regulator_dev *rdev)
+ {
+       struct olpc_ec_priv *ec = rdev_get_drvdata(rdev);
+       return olpc_ec_set_dcon_power(ec, true);
+ }
+ static int dcon_regulator_disable(struct regulator_dev *rdev)
+ {
+       struct olpc_ec_priv *ec = rdev_get_drvdata(rdev);
+       return olpc_ec_set_dcon_power(ec, false);
+ }
+ static int dcon_regulator_is_enabled(struct regulator_dev *rdev)
+ {
+       struct olpc_ec_priv *ec = rdev_get_drvdata(rdev);
+       return ec->dcon_enabled ? 1 : 0;
+ }
+ static struct regulator_ops dcon_regulator_ops = {
+       .enable         = dcon_regulator_enable,
+       .disable        = dcon_regulator_disable,
+       .is_enabled     = dcon_regulator_is_enabled,
+ };
+ static const struct regulator_desc dcon_desc = {
+       .name   = "dcon",
+       .id     = 0,
+       .ops    = &dcon_regulator_ops,
+       .type   = REGULATOR_VOLTAGE,
+       .owner  = THIS_MODULE,
+ };
  static int olpc_ec_probe(struct platform_device *pdev)
  {
        struct olpc_ec_priv *ec;
+       struct regulator_config config = { };
        int err;
  
        if (!ec_driver)
        ec_priv = ec;
        platform_set_drvdata(pdev, ec);
  
-       err = ec_driver->probe ? ec_driver->probe(pdev) : 0;
+       /* get the EC revision */
+       err = olpc_ec_cmd(EC_FIRMWARE_REV, NULL, 0, &ec->version, 1);
        if (err) {
                ec_priv = NULL;
                kfree(ec);
-       } else {
-               ec->dbgfs_dir = olpc_ec_setup_debugfs();
+               return err;
        }
  
+       config.dev = pdev->dev.parent;
+       config.driver_data = ec;
+       ec->dcon_enabled = true;
+       ec->dcon_rdev = devm_regulator_register(&pdev->dev, &dcon_desc,
+                                                               &config);
+       if (IS_ERR(ec->dcon_rdev)) {
+               dev_err(&pdev->dev, "failed to register DCON regulator\n");
+               return PTR_ERR(ec->dcon_rdev);
+       }
+       ec->dbgfs_dir = olpc_ec_setup_debugfs();
        return err;
  }
  
@@@ -293,6 -454,8 +453,8 @@@ static int olpc_ec_suspend(struct devic
        struct olpc_ec_priv *ec = platform_get_drvdata(pdev);
        int err = 0;
  
+       olpc_ec_mask_write(ec->ec_wakeup_mask);
        if (ec_driver->suspend)
                err = ec_driver->suspend(pdev);
        if (!err)
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
  #
  # X86 Platform Specific Drivers
  #
@@@ -341,7 -340,7 +341,7 @@@ config HP_ACCE
  
          Support for a led indicating disk protection will be provided as
          hp::hddprotect. For more information on the feature, refer to
 -        Documentation/misc-devices/lis3lv02d.
 +        Documentation/misc-devices/lis3lv02d.rst.
  
          To compile this driver as a module, choose M here: the module will
          be called hp_accel.
@@@ -433,6 -432,9 +433,6 @@@ config COMPAL_LAPTO
          It adds support for rfkill, Bluetooth, WLAN, LCD brightness, hwmon
          and battery charging level control.
  
 -        For a (possibly incomplete) list of supported laptops, please refer
 -        to: Documentation/platform/x86-laptop-drivers.txt
 -
  config SONY_LAPTOP
        tristate "Sony Laptop Extras"
        depends on ACPI
@@@ -778,6 -780,16 +778,16 @@@ config INTEL_WMI_THUNDERBOL
          To compile this driver as a module, choose M here: the module will
          be called intel-wmi-thunderbolt.
  
+ config XIAOMI_WMI
+         tristate "Xiaomi WMI key driver"
+         depends on ACPI_WMI
+         depends on INPUT
+         help
+         Say Y here if you want to support WMI-based keys on Xiaomi notebooks.
+         To compile this driver as a module, choose M here: the module will
+         be called xiaomi-wmi.
  config MSI_WMI
        tristate "MSI WMI extras"
        depends on ACPI_WMI
@@@ -903,7 -915,6 +913,6 @@@ config TOSHIBA_WM
  config ACPI_CMPC
        tristate "CMPC Laptop Extras"
        depends on ACPI && INPUT
-       depends on BACKLIGHT_LCD_SUPPORT
        depends on RFKILL || RFKILL=n
        select BACKLIGHT_CLASS_DEVICE
        help
@@@ -1127,7 -1138,6 +1136,6 @@@ config INTEL_OAKTRAI
  config SAMSUNG_Q10
        tristate "Samsung Q10 Extras"
        depends on ACPI
-       depends on BACKLIGHT_LCD_SUPPORT
        select BACKLIGHT_CLASS_DEVICE
        ---help---
          This driver provides support for backlight control on Samsung Q10
@@@ -1314,7 -1324,7 +1322,7 @@@ config HUAWEI_WM
  
  config PCENGINES_APU2
        tristate "PC Engines APUv2/3 front button and LEDs driver"
-       depends on INPUT && INPUT_KEYBOARD
+       depends on INPUT && INPUT_KEYBOARD && GPIOLIB
        depends on LEDS_CLASS
        select GPIO_AMD_FCH
        select KEYBOARD_GPIO_POLLED
          To compile this driver as a module, choose M here: the module
          will be called pcengines-apuv2.
  
+ source "drivers/platform/x86/intel_speed_select_if/Kconfig"
  endif # X86_PLATFORM_DEVICES
  
  config PMC_ATOM
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   *  Acer WMI Laptop Extras
   *
@@@ -7,6 -6,20 +7,6 @@@
   *  Based on acer_acpi:
   *    Copyright (C) 2005-2007 E.M. Smith
   *    Copyright (C) 2007-2008 Carlos Corbacho <cathectic@gmail.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; 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
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -259,7 -272,6 +259,6 @@@ struct acer_data 
  
  struct acer_debug {
        struct dentry *root;
-       struct dentry *devices;
        u32 wmid_devices;
  };
  
@@@ -1002,6 -1014,7 +1001,7 @@@ static acpi_status WMID_get_u32(u32 *va
                        *value = tmp & 0x1;
                        return 0;
                }
+               /* fall through */
        default:
                return AE_ERROR;
        }
@@@ -1328,6 -1341,7 +1328,7 @@@ static acpi_status get_u32(u32 *value, 
                        status = AMW0_get_u32(value, cap);
                        break;
                }
+               /* fall through */
        case ACER_WMID:
                status = WMID_get_u32(value, cap);
                break;
@@@ -1370,6 -1384,7 +1371,7 @@@ static acpi_status set_u32(u32 value, u
  
                                return AMW0_set_u32(value, cap);
                        }
+                       /* fall through */
                case ACER_WMID:
                        return WMID_set_u32(value, cap);
                case ACER_WMID_v2:
                                return wmid_v2_set_u32(value, cap);
                        else if (wmi_has_guid(WMID_GUID2))
                                return WMID_set_u32(value, cap);
+                       /* fall through */
                default:
                        return AE_BAD_PARAMETER;
                }
@@@ -2148,29 -2164,15 +2151,15 @@@ static struct platform_device *acer_pla
  
  static void remove_debugfs(void)
  {
-       debugfs_remove(interface->debug.devices);
-       debugfs_remove(interface->debug.root);
+       debugfs_remove_recursive(interface->debug.root);
  }
  
- static int __init create_debugfs(void)
+ static void __init create_debugfs(void)
  {
        interface->debug.root = debugfs_create_dir("acer-wmi", NULL);
-       if (!interface->debug.root) {
-               pr_err("Failed to create debugfs directory");
-               return -ENOMEM;
-       }
  
-       interface->debug.devices = debugfs_create_u32("devices", S_IRUGO,
-                                       interface->debug.root,
-                                       &interface->debug.wmid_devices);
-       if (!interface->debug.devices)
-               goto error_debugfs;
-       return 0;
- error_debugfs:
-       remove_debugfs();
-       return -ENOMEM;
+       debugfs_create_u32("devices", S_IRUGO, interface->debug.root,
+                          &interface->debug.wmid_devices);
  }
  
  static int __init acer_wmi_init(void)
  
        if (wmi_has_guid(WMID_GUID2)) {
                interface->debug.wmid_devices = get_wmid_devices();
-               err = create_debugfs();
-               if (err)
-                       goto error_create_debugfs;
+               create_debugfs();
        }
  
        /* Override any initial settings with values from the commandline */
  
        return 0;
  
- error_create_debugfs:
-       platform_device_del(acer_platform_device);
  error_device_add:
        platform_device_put(acer_platform_device);
  error_device_alloc:
@@@ -1,8 -1,21 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Asus Notebooks WMI hotkey driver
   *
   * Copyright(C) 2010 Corentin Chary <corentin.chary@gmail.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; 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
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -463,6 -476,7 +463,7 @@@ static const struct key_entry asus_nb_w
        { KE_KEY, 0x6B, { KEY_TOUCHPAD_TOGGLE } },
        { KE_IGNORE, 0x6E, },  /* Low Battery notification */
        { KE_KEY, 0x7a, { KEY_ALS_TOGGLE } }, /* Ambient Light Sensor Toggle */
+       { KE_KEY, 0x7c, { KEY_MICMUTE } },
        { KE_KEY, 0x7D, { KEY_BLUETOOTH } }, /* Bluetooth Enable */
        { KE_KEY, 0x7E, { KEY_BLUETOOTH } }, /* Bluetooth Disable */
        { KE_KEY, 0x82, { KEY_CAMERA } },
        { KE_KEY, 0x92, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + TV + DVI */
        { KE_KEY, 0x93, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + CRT + TV + DVI */
        { KE_KEY, 0x95, { KEY_MEDIA } },
-       { KE_KEY, 0x99, { KEY_PHONE } },
+       { KE_KEY, 0x99, { KEY_PHONE } }, /* Conflicts with fan mode switch */
        { KE_KEY, 0xA0, { KEY_SWITCHVIDEOMODE } }, /* SDSP HDMI only */
        { KE_KEY, 0xA1, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + HDMI */
        { KE_KEY, 0xA2, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + HDMI */
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Asus PC WMI hotkey driver
   *
@@@ -9,6 -8,20 +9,6 @@@
   * Copyright (C) 2005 Miloslav Trmac <mitr@volny.cz>
   * Copyright (C) 2005 Bernhard Rosenkraenzer <bero@arklinux.org>
   * Copyright (C) 2005 Dmitry Torokhov <dtor@mail.ru>
 - *
 - *  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
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -57,6 -70,7 +57,7 @@@ MODULE_LICENSE("GPL")
  #define NOTIFY_KBD_BRTUP              0xc4
  #define NOTIFY_KBD_BRTDWN             0xc5
  #define NOTIFY_KBD_BRTTOGGLE          0xc7
+ #define NOTIFY_KBD_FBM                        0x99
  
  #define ASUS_WMI_FNLOCK_BIOS_DISABLED BIT(0)
  
  #define ASUS_FAN_CTRL_MANUAL          1
  #define ASUS_FAN_CTRL_AUTO            2
  
+ #define ASUS_FAN_MODE_NORMAL          0
+ #define ASUS_FAN_MODE_OVERBOOST               1
+ #define ASUS_FAN_MODE_OVERBOOST_MASK  0x01
+ #define ASUS_FAN_MODE_SILENT          2
+ #define ASUS_FAN_MODE_SILENT_MASK     0x02
+ #define ASUS_FAN_MODES_MASK           0x03
  #define USB_INTEL_XUSB2PR             0xD0
  #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
  
+ #define ASUS_ACPI_UID_ASUSWMI         "ASUSWMI"
+ #define ASUS_ACPI_UID_ATK             "ATK"
+ #define WMI_EVENT_QUEUE_SIZE          0x10
+ #define WMI_EVENT_QUEUE_END           0x1
+ #define WMI_EVENT_MASK                        0xFFFF
+ /* The WMI hotkey event value is always the same. */
+ #define WMI_EVENT_VALUE_ATK           0xFF
+ #define WMI_EVENT_MASK                        0xFFFF
  static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
  
  static bool ashs_present(void)
  struct bios_args {
        u32 arg0;
        u32 arg1;
+       u32 arg2; /* At least TUF Gaming series uses 3 dword input buffer. */
  } __packed;
  
  /*
@@@ -132,6 -165,7 +152,7 @@@ struct asus_wmi 
        int dsts_id;
        int spec;
        int sfun;
+       bool wmi_event_queue;
  
        struct input_dev *inputdev;
        struct backlight_device *backlight_device;
        int asus_hwmon_num_fans;
        int asus_hwmon_pwm;
  
+       bool fan_mode_available;
+       u8 fan_mode_mask;
+       u8 fan_mode;
        struct hotplug_slot hotplug_slot;
        struct mutex hotplug_lock;
        struct mutex wmi_lock;
        struct asus_wmi_driver *driver;
  };
  
+ /* Input **********************************************************************/
  static int asus_wmi_input_init(struct asus_wmi *asus)
  {
        int err;
@@@ -211,11 -251,15 +238,15 @@@ static void asus_wmi_input_exit(struct 
        asus->inputdev = NULL;
  }
  
- int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval)
+ /* WMI ************************************************************************/
+ static int asus_wmi_evaluate_method3(u32 method_id,
+               u32 arg0, u32 arg1, u32 arg2, u32 *retval)
  {
        struct bios_args args = {
                .arg0 = arg0,
                .arg1 = arg1,
+               .arg2 = arg2,
        };
        struct acpi_buffer input = { (acpi_size) sizeof(args), &args };
        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
                                     &input, &output);
  
        if (ACPI_FAILURE(status))
-               goto exit;
+               return -EIO;
  
        obj = (union acpi_object *)output.pointer;
        if (obj && obj->type == ACPI_TYPE_INTEGER)
  
        kfree(obj);
  
- exit:
-       if (ACPI_FAILURE(status))
-               return -EIO;
        if (tmp == ASUS_WMI_UNSUPPORTED_METHOD)
                return -ENODEV;
  
        return 0;
  }
+ int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval)
+ {
+       return asus_wmi_evaluate_method3(method_id, arg0, arg1, 0, retval);
+ }
  EXPORT_SYMBOL_GPL(asus_wmi_evaluate_method);
  
  static int asus_wmi_evaluate_method_agfn(const struct acpi_buffer args)
@@@ -320,9 -365,8 +352,8 @@@ static int asus_wmi_get_devstate_simple
                                          ASUS_WMI_DSTS_STATUS_BIT);
  }
  
- /*
-  * LEDs
-  */
+ /* LEDs ***********************************************************************/
  /*
   * These functions actually update the LED's, and are called from a
   * workqueue. By doing this as separate work rather than when the LED
@@@ -427,6 -471,10 +458,10 @@@ static void do_kbd_led_set(struct led_c
  static void kbd_led_set(struct led_classdev *led_cdev,
                        enum led_brightness value)
  {
+       /* Prevent disabling keyboard backlight on module unregister */
+       if (led_cdev->flags & LED_UNREGISTERING)
+               return;
        do_kbd_led_set(led_cdev, value);
  }
  
@@@ -582,8 -630,7 +617,7 @@@ static int asus_wmi_led_init(struct asu
                        goto error;
        }
  
-       led_val = kbd_led_read(asus, NULL, NULL);
-       if (led_val >= 0) {
+       if (!kbd_led_read(asus, &led_val, NULL)) {
                asus->kbd_led_wk = led_val;
                asus->kbd_led.name = "asus::kbd_backlight";
                asus->kbd_led.flags = LED_BRIGHT_HW_CHANGED;
@@@ -633,6 -680,7 +667,7 @@@ error
        return rv;
  }
  
+ /* RF *************************************************************************/
  
  /*
   * PCI hotplug (for wlan rfkill)
@@@ -1055,6 -1103,8 +1090,8 @@@ exit
        return result;
  }
  
+ /* Quirks *********************************************************************/
  static void asus_wmi_set_xusb2pr(struct asus_wmi *asus)
  {
        struct pci_dev *xhci_pdev;
@@@ -1087,9 -1137,8 +1124,8 @@@ static void asus_wmi_set_als(void
        asus_wmi_set_devstate(ASUS_WMI_DEVID_ALS_ENABLE, 1, NULL);
  }
  
- /*
-  * Hwmon device
-  */
+ /* Hwmon device ***************************************************************/
  static int asus_hwmon_agfn_fan_speed_read(struct asus_wmi *asus, int fan,
                                          int *speed)
  {
@@@ -1353,8 -1402,7 +1389,7 @@@ static umode_t asus_hwmon_sysfs_is_visi
                                          struct attribute *attr, int idx)
  {
        struct device *dev = container_of(kobj, struct device, kobj);
-       struct platform_device *pdev = to_platform_device(dev->parent);
-       struct asus_wmi *asus = platform_get_drvdata(pdev);
+       struct asus_wmi *asus = dev_get_drvdata(dev->parent);
        int dev_id = -1;
        int fan_attr = -1;
        u32 value = ASUS_WMI_UNSUPPORTED_METHOD;
                else
                        ok = fan_attr <= asus->asus_hwmon_num_fans;
        } else if (dev_id == ASUS_WMI_DEVID_THERMAL_CTRL) {
-               /* If value is zero, something is clearly wrong */
-               if (!value)
+               /*
+                * If the temperature value in deci-Kelvin is near the absolute
+                * zero temperature, something is clearly wrong
+                */
+               if (value == 0 || value == 1)
                        ok = false;
        } else if (fan_attr <= asus->asus_hwmon_num_fans && fan_attr != -1) {
                ok = true;
@@@ -1415,11 -1466,12 +1453,12 @@@ __ATTRIBUTE_GROUPS(hwmon_attribute)
  
  static int asus_wmi_hwmon_init(struct asus_wmi *asus)
  {
+       struct device *dev = &asus->platform_device->dev;
        struct device *hwmon;
  
-       hwmon = hwmon_device_register_with_groups(&asus->platform_device->dev,
-                                                 "asus", asus,
-                                                 hwmon_attribute_groups);
+       hwmon = devm_hwmon_device_register_with_groups(dev, "asus", asus,
+                       hwmon_attribute_groups);
        if (IS_ERR(hwmon)) {
                pr_err("Could not register asus hwmon device\n");
                return PTR_ERR(hwmon);
        return 0;
  }
  
- /*
-  * Backlight
-  */
+ static int asus_wmi_fan_init(struct asus_wmi *asus)
+ {
+       int status;
+       asus->asus_hwmon_pwm = -1;
+       asus->asus_hwmon_num_fans = -1;
+       asus->asus_hwmon_fan_manual_mode = false;
+       status = asus_hwmon_get_fan_number(asus, &asus->asus_hwmon_num_fans);
+       if (status) {
+               asus->asus_hwmon_num_fans = 0;
+               pr_warn("Could not determine number of fans: %d\n", status);
+               return -ENXIO;
+       }
+       pr_info("Number of fans: %d\n", asus->asus_hwmon_num_fans);
+       return 0;
+ }
+ /* Fan mode *******************************************************************/
+ static int fan_mode_check_present(struct asus_wmi *asus)
+ {
+       u32 result;
+       int err;
+       asus->fan_mode_available = false;
+       err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_FAN_MODE, &result);
+       if (err) {
+               if (err == -ENODEV)
+                       return 0;
+               else
+                       return err;
+       }
+       if ((result & ASUS_WMI_DSTS_PRESENCE_BIT) &&
+                       (result & ASUS_FAN_MODES_MASK)) {
+               asus->fan_mode_available = true;
+               asus->fan_mode_mask = result & ASUS_FAN_MODES_MASK;
+       }
+       return 0;
+ }
+ static int fan_mode_write(struct asus_wmi *asus)
+ {
+       int err;
+       u8 value;
+       u32 retval;
+       value = asus->fan_mode;
+       pr_info("Set fan mode: %u\n", value);
+       err = asus_wmi_set_devstate(ASUS_WMI_DEVID_FAN_MODE, value, &retval);
+       if (err) {
+               pr_warn("Failed to set fan mode: %d\n", err);
+               return err;
+       }
+       if (retval != 1) {
+               pr_warn("Failed to set fan mode (retval): 0x%x\n", retval);
+               return -EIO;
+       }
+       return 0;
+ }
+ static int fan_mode_switch_next(struct asus_wmi *asus)
+ {
+       if (asus->fan_mode == ASUS_FAN_MODE_NORMAL) {
+               if (asus->fan_mode_mask & ASUS_FAN_MODE_OVERBOOST_MASK)
+                       asus->fan_mode = ASUS_FAN_MODE_OVERBOOST;
+               else if (asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK)
+                       asus->fan_mode = ASUS_FAN_MODE_SILENT;
+       } else if (asus->fan_mode == ASUS_FAN_MODE_OVERBOOST) {
+               if (asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK)
+                       asus->fan_mode = ASUS_FAN_MODE_SILENT;
+               else
+                       asus->fan_mode = ASUS_FAN_MODE_NORMAL;
+       } else {
+               asus->fan_mode = ASUS_FAN_MODE_NORMAL;
+       }
+       return fan_mode_write(asus);
+ }
+ static ssize_t fan_mode_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+ {
+       struct asus_wmi *asus = dev_get_drvdata(dev);
+       return scnprintf(buf, PAGE_SIZE, "%d\n", asus->fan_mode);
+ }
+ static ssize_t fan_mode_store(struct device *dev, struct device_attribute *attr,
+               const char *buf, size_t count)
+ {
+       int result;
+       u8 new_mode;
+       struct asus_wmi *asus = dev_get_drvdata(dev);
+       result = kstrtou8(buf, 10, &new_mode);
+       if (result < 0) {
+               pr_warn("Trying to store invalid value\n");
+               return result;
+       }
+       if (new_mode == ASUS_FAN_MODE_OVERBOOST) {
+               if (!(asus->fan_mode_mask & ASUS_FAN_MODE_OVERBOOST_MASK))
+                       return -EINVAL;
+       } else if (new_mode == ASUS_FAN_MODE_SILENT) {
+               if (!(asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK))
+                       return -EINVAL;
+       } else if (new_mode != ASUS_FAN_MODE_NORMAL) {
+               return -EINVAL;
+       }
+       asus->fan_mode = new_mode;
+       fan_mode_write(asus);
+       return result;
+ }
+ // Fan mode: 0 - normal, 1 - overboost, 2 - silent
+ static DEVICE_ATTR_RW(fan_mode);
+ /* Backlight ******************************************************************/
  static int read_backlight_power(struct asus_wmi *asus)
  {
        int ret;
@@@ -1611,6 -1791,8 +1778,8 @@@ static int is_display_toggle(int code
        return 0;
  }
  
+ /* Fn-lock ********************************************************************/
  static bool asus_wmi_has_fnlock_key(struct asus_wmi *asus)
  {
        u32 result;
@@@ -1628,88 -1810,148 +1797,148 @@@ static void asus_wmi_fnlock_update(stru
        asus_wmi_set_devstate(ASUS_WMI_DEVID_FNLOCK, mode, NULL);
  }
  
- static void asus_wmi_notify(u32 value, void *context)
+ /* WMI events *****************************************************************/
+ static int asus_wmi_get_event_code(u32 value)
  {
-       struct asus_wmi *asus = context;
        struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *obj;
        acpi_status status;
        int code;
-       int orig_code;
-       unsigned int key_value = 1;
-       bool autorelease = 1;
  
        status = wmi_get_event_data(value, &response);
-       if (status != AE_OK) {
-               pr_err("bad event status 0x%x\n", status);
-               return;
+       if (ACPI_FAILURE(status)) {
+               pr_warn("Failed to get WMI notify code: %s\n",
+                               acpi_format_exception(status));
+               return -EIO;
        }
  
        obj = (union acpi_object *)response.pointer;
  
-       if (!obj || obj->type != ACPI_TYPE_INTEGER)
-               goto exit;
+       if (obj && obj->type == ACPI_TYPE_INTEGER)
+               code = (int)(obj->integer.value & WMI_EVENT_MASK);
+       else
+               code = -EIO;
+       kfree(obj);
+       return code;
+ }
+ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
+ {
+       int orig_code;
+       unsigned int key_value = 1;
+       bool autorelease = 1;
  
-       code = obj->integer.value;
        orig_code = code;
  
        if (asus->driver->key_filter) {
                asus->driver->key_filter(asus->driver, &code, &key_value,
                                         &autorelease);
                if (code == ASUS_WMI_KEY_IGNORE)
-                       goto exit;
+                       return;
        }
  
        if (code >= NOTIFY_BRNUP_MIN && code <= NOTIFY_BRNUP_MAX)
                code = ASUS_WMI_BRN_UP;
-       else if (code >= NOTIFY_BRNDOWN_MIN &&
-                code <= NOTIFY_BRNDOWN_MAX)
+       else if (code >= NOTIFY_BRNDOWN_MIN && code <= NOTIFY_BRNDOWN_MAX)
                code = ASUS_WMI_BRN_DOWN;
  
        if (code == ASUS_WMI_BRN_DOWN || code == ASUS_WMI_BRN_UP) {
                if (acpi_video_get_backlight_type() == acpi_backlight_vendor) {
                        asus_wmi_backlight_notify(asus, orig_code);
-                       goto exit;
+                       return;
                }
        }
  
        if (code == NOTIFY_KBD_BRTUP) {
                kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1);
-               goto exit;
+               return;
        }
        if (code == NOTIFY_KBD_BRTDWN) {
                kbd_led_set_by_kbd(asus, asus->kbd_led_wk - 1);
-               goto exit;
+               return;
        }
        if (code == NOTIFY_KBD_BRTTOGGLE) {
                if (asus->kbd_led_wk == asus->kbd_led.max_brightness)
                        kbd_led_set_by_kbd(asus, 0);
                else
                        kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1);
-               goto exit;
+               return;
        }
  
        if (code == NOTIFY_FNLOCK_TOGGLE) {
                asus->fnlock_locked = !asus->fnlock_locked;
                asus_wmi_fnlock_update(asus);
-               goto exit;
+               return;
        }
  
-       if (is_display_toggle(code) &&
-           asus->driver->quirks->no_display_toggle)
-               goto exit;
+       if (asus->fan_mode_available && code == NOTIFY_KBD_FBM) {
+               fan_mode_switch_next(asus);
+               return;
+       }
+       if (is_display_toggle(code) && asus->driver->quirks->no_display_toggle)
+               return;
  
        if (!sparse_keymap_report_event(asus->inputdev, code,
                                        key_value, autorelease))
                pr_info("Unknown key %x pressed\n", code);
+ }
  
- exit:
-       kfree(obj);
+ static void asus_wmi_notify(u32 value, void *context)
+ {
+       struct asus_wmi *asus = context;
+       int code;
+       int i;
+       for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) {
+               code = asus_wmi_get_event_code(value);
+               if (code < 0) {
+                       pr_warn("Failed to get notify code: %d\n", code);
+                       return;
+               }
+               if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK)
+                       return;
+               asus_wmi_handle_event_code(code, asus);
+               /*
+                * Double check that queue is present:
+                * ATK (with queue) uses 0xff, ASUSWMI (without) 0xd2.
+                */
+               if (!asus->wmi_event_queue || value != WMI_EVENT_VALUE_ATK)
+                       return;
+       }
+       pr_warn("Failed to process event queue, last code: 0x%x\n", code);
  }
  
- /*
-  * Sys helpers
-  */
+ static int asus_wmi_notify_queue_flush(struct asus_wmi *asus)
+ {
+       int code;
+       int i;
+       for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) {
+               code = asus_wmi_get_event_code(WMI_EVENT_VALUE_ATK);
+               if (code < 0) {
+                       pr_warn("Failed to get event during flush: %d\n", code);
+                       return code;
+               }
+               if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK)
+                       return 0;
+       }
+       pr_warn("Failed to flush event queue\n");
+       return -EIO;
+ }
+ /* Sysfs **********************************************************************/
  static int parse_arg(const char *buf, unsigned long count, int *val)
  {
        if (!count)
@@@ -1805,6 -2047,7 +2034,7 @@@ static struct attribute *platform_attri
        &dev_attr_touchpad.attr,
        &dev_attr_lid_resume.attr,
        &dev_attr_als_enable.attr,
+       &dev_attr_fan_mode.attr,
        NULL
  };
  
@@@ -1826,6 -2069,8 +2056,8 @@@ static umode_t asus_sysfs_is_visible(st
                devid = ASUS_WMI_DEVID_LID_RESUME;
        else if (attr == &dev_attr_als_enable.attr)
                devid = ASUS_WMI_DEVID_ALS_ENABLE;
+       else if (attr == &dev_attr_fan_mode.attr)
+               ok = asus->fan_mode_available;
  
        if (devid != -1)
                ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0);
@@@ -1848,11 -2093,12 +2080,12 @@@ static int asus_wmi_sysfs_init(struct p
        return sysfs_create_group(&device->dev.kobj, &platform_attribute_group);
  }
  
- /*
-  * Platform device
-  */
+ /* Platform device ************************************************************/
  static int asus_wmi_platform_init(struct asus_wmi *asus)
  {
+       struct device *dev = &asus->platform_device->dev;
+       char *wmi_uid;
        int rv;
  
        /* INIT enable hotkeys on some models */
         * Note, on most Eeepc, there is no way to check if a method exist
         * or note, while on notebooks, they returns 0xFFFFFFFE on failure,
         * but once again, SPEC may probably be used for that kind of things.
+        *
+        * Additionally at least TUF Gaming series laptops return nothing for
+        * unknown methods, so the detection in this way is not possible.
+        *
+        * There is strong indication that only ACPI WMI devices that have _UID
+        * equal to "ASUSWMI" use DCTS whereas those with "ATK" use DSTS.
         */
-       if (!asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, 0, 0, NULL))
+       wmi_uid = wmi_get_acpi_device_uid(ASUS_WMI_MGMT_GUID);
+       if (!wmi_uid)
+               return -ENODEV;
+       if (!strcmp(wmi_uid, ASUS_ACPI_UID_ASUSWMI)) {
+               dev_info(dev, "Detected ASUSWMI, use DCTS\n");
+               asus->dsts_id = ASUS_WMI_METHODID_DCTS;
+       } else {
+               dev_info(dev, "Detected %s, not ASUSWMI, use DSTS\n", wmi_uid);
                asus->dsts_id = ASUS_WMI_METHODID_DSTS;
-       else
-               asus->dsts_id = ASUS_WMI_METHODID_DSTS2;
+       }
+       /*
+        * Some devices can have multiple event codes stored in a queue before
+        * the module load if it was unloaded intermittently after calling
+        * the INIT method (enables event handling). The WMI notify handler is
+        * expected to retrieve all event codes until a retrieved code equals
+        * queue end marker (One or Ones). Old codes are flushed from the queue
+        * upon module load. Not enabling this when it should be has minimal
+        * visible impact so fall back if anything goes wrong.
+        */
+       wmi_uid = wmi_get_acpi_device_uid(asus->driver->event_guid);
+       if (wmi_uid && !strcmp(wmi_uid, ASUS_ACPI_UID_ATK)) {
+               dev_info(dev, "Detected ATK, enable event queue\n");
+               if (!asus_wmi_notify_queue_flush(asus))
+                       asus->wmi_event_queue = true;
+       }
  
        /* CWAP allow to define the behavior of the Fn+F2 key,
         * this method doesn't seems to be present on Eee PCs */
                asus_wmi_set_devstate(ASUS_WMI_DEVID_CWAP,
                                      asus->driver->quirks->wapf, NULL);
  
-       return asus_wmi_sysfs_init(asus->platform_device);
+       return 0;
  }
  
- static void asus_wmi_platform_exit(struct asus_wmi *asus)
- {
-       asus_wmi_sysfs_exit(asus->platform_device);
- }
+ /* debugfs ********************************************************************/
  
- /*
-  * debugfs
-  */
  struct asus_wmi_debugfs_node {
        struct asus_wmi *asus;
        char *name;
@@@ -2005,74 -2275,33 +2262,33 @@@ static void asus_wmi_debugfs_exit(struc
        debugfs_remove_recursive(asus->debug.root);
  }
  
- static int asus_wmi_debugfs_init(struct asus_wmi *asus)
+ static void asus_wmi_debugfs_init(struct asus_wmi *asus)
  {
-       struct dentry *dent;
        int i;
  
        asus->debug.root = debugfs_create_dir(asus->driver->name, NULL);
-       if (!asus->debug.root) {
-               pr_err("failed to create debugfs directory\n");
-               goto error_debugfs;
-       }
  
-       dent = debugfs_create_x32("method_id", S_IRUGO | S_IWUSR,
-                                 asus->debug.root, &asus->debug.method_id);
-       if (!dent)
-               goto error_debugfs;
+       debugfs_create_x32("method_id", S_IRUGO | S_IWUSR, asus->debug.root,
+                          &asus->debug.method_id);
  
-       dent = debugfs_create_x32("dev_id", S_IRUGO | S_IWUSR,
-                                 asus->debug.root, &asus->debug.dev_id);
-       if (!dent)
-               goto error_debugfs;
+       debugfs_create_x32("dev_id", S_IRUGO | S_IWUSR, asus->debug.root,
+                          &asus->debug.dev_id);
  
-       dent = debugfs_create_x32("ctrl_param", S_IRUGO | S_IWUSR,
-                                 asus->debug.root, &asus->debug.ctrl_param);
-       if (!dent)
-               goto error_debugfs;
+       debugfs_create_x32("ctrl_param", S_IRUGO | S_IWUSR, asus->debug.root,
+                          &asus->debug.ctrl_param);
  
        for (i = 0; i < ARRAY_SIZE(asus_wmi_debug_files); i++) {
                struct asus_wmi_debugfs_node *node = &asus_wmi_debug_files[i];
  
                node->asus = asus;
-               dent = debugfs_create_file(node->name, S_IFREG | S_IRUGO,
-                                          asus->debug.root, node,
-                                          &asus_wmi_debugfs_io_ops);
-               if (!dent) {
-                       pr_err("failed to create debug file: %s\n", node->name);
-                       goto error_debugfs;
-               }
+               debugfs_create_file(node->name, S_IFREG | S_IRUGO,
+                                   asus->debug.root, node,
+                                   &asus_wmi_debugfs_io_ops);
        }
-       return 0;
- error_debugfs:
-       asus_wmi_debugfs_exit(asus);
-       return -ENOMEM;
  }
  
- static int asus_wmi_fan_init(struct asus_wmi *asus)
- {
-       int status;
-       asus->asus_hwmon_pwm = -1;
-       asus->asus_hwmon_num_fans = -1;
-       asus->asus_hwmon_fan_manual_mode = false;
-       status = asus_hwmon_get_fan_number(asus, &asus->asus_hwmon_num_fans);
-       if (status) {
-               asus->asus_hwmon_num_fans = 0;
-               pr_warn("Could not determine number of fans: %d\n", status);
-               return -ENXIO;
-       }
-       pr_info("Number of fans: %d\n", asus->asus_hwmon_num_fans);
-       return 0;
- }
+ /* Init / exit ****************************************************************/
  
- /*
-  * WMI Driver
-  */
  static int asus_wmi_add(struct platform_device *pdev)
  {
        struct platform_driver *pdrv = to_platform_driver(pdev->dev.driver);
        if (err)
                goto fail_platform;
  
+       err = fan_mode_check_present(asus);
+       if (err)
+               goto fail_fan_mode;
+       err = asus_wmi_sysfs_init(asus->platform_device);
+       if (err)
+               goto fail_sysfs;
        err = asus_wmi_input_init(asus);
        if (err)
                goto fail_input;
                goto fail_wmi_handler;
        }
  
-       err = asus_wmi_debugfs_init(asus);
-       if (err)
-               goto fail_debugfs;
+       asus_wmi_debugfs_init(asus);
  
        return 0;
  
- fail_debugfs:
-       wmi_remove_notify_handler(asus->driver->event_guid);
  fail_wmi_handler:
        asus_wmi_backlight_exit(asus);
  fail_backlight:
@@@ -2180,7 -2413,9 +2400,9 @@@ fail_leds
  fail_hwmon:
        asus_wmi_input_exit(asus);
  fail_input:
-       asus_wmi_platform_exit(asus);
+       asus_wmi_sysfs_exit(asus->platform_device);
+ fail_sysfs:
+ fail_fan_mode:
  fail_platform:
        kfree(asus);
        return err;
@@@ -2197,16 -2432,15 +2419,15 @@@ static int asus_wmi_remove(struct platf
        asus_wmi_led_exit(asus);
        asus_wmi_rfkill_exit(asus);
        asus_wmi_debugfs_exit(asus);
-       asus_wmi_platform_exit(asus);
+       asus_wmi_sysfs_exit(asus->platform_device);
        asus_hwmon_fan_set_auto(asus);
  
        kfree(asus);
        return 0;
  }
  
- /*
-  * Platform driver - hibernate/resume callbacks
-  */
+ /* Platform driver - hibernate/resume callbacks *******************************/
  static int asus_hotk_thaw(struct device *device)
  {
        struct asus_wmi *asus = dev_get_drvdata(device);
@@@ -2282,6 -2516,8 +2503,8 @@@ static const struct dev_pm_ops asus_pm_
        .resume = asus_hotk_resume,
  };
  
+ /* Registration ***************************************************************/
  static int asus_wmi_probe(struct platform_device *pdev)
  {
        struct platform_driver *pdrv = to_platform_driver(pdev->dev.driver);
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   *  Driver for Dell laptop extras
   *
@@@ -8,6 -7,10 +8,6 @@@
   *
   *  Based on documentation in the libsmbios package:
   *  Copyright (C) 2005-2014 Dell Inc.
 - *
 - *  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.
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -2173,9 -2176,8 +2173,8 @@@ static int __init dell_init(void
        kbd_led_init(&platform_device->dev);
  
        dell_laptop_dir = debugfs_create_dir("dell_laptop", NULL);
-       if (dell_laptop_dir != NULL)
-               debugfs_create_file("rfkill", 0444, dell_laptop_dir, NULL,
-                                   &dell_debugfs_fops);
+       debugfs_create_file("rfkill", 0444, dell_laptop_dir, NULL,
+                           &dell_debugfs_fops);
  
        dell_laptop_register_notifier(&dell_laptop_notifier);
  
@@@ -1,8 -1,11 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   *  WMI methods for use with dell-smbios
   *
   *  Copyright (c) 2017 Dell Inc.
 - *
 - *  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.
   */
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  
@@@ -143,7 -146,7 +143,7 @@@ fail_smbios_cmd
        return ret;
  }
  
- static int dell_smbios_wmi_probe(struct wmi_device *wdev)
+ static int dell_smbios_wmi_probe(struct wmi_device *wdev, const void *context)
  {
        struct wmi_driver *wdriver =
                container_of(wdev->dev.driver, struct wmi_driver, driver);
@@@ -1,8 -1,16 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Dell WMI descriptor driver
   *
   * Copyright (C) 2017 Dell Inc. All Rights Reserved.
 - *
 - *  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.
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -98,7 -106,8 +98,8 @@@ EXPORT_SYMBOL_GPL(dell_wmi_get_hotfix)
   * WMI buffer length        12       4    <length>
   * WMI hotfix number        16       4    <hotfix>
   */
- static int dell_wmi_descriptor_probe(struct wmi_device *wdev)
+ static int dell_wmi_descriptor_probe(struct wmi_device *wdev,
+                                    const void *context)
  {
        union acpi_object *obj = NULL;
        struct descriptor_priv *priv;
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Dell WMI hotkeys
   *
@@@ -9,6 -8,20 +9,6 @@@
   * Copyright (C) 2005 Miloslav Trmac <mitr@volny.cz>
   * Copyright (C) 2005 Bernhard Rosenkraenzer <bero@arklinux.org>
   * Copyright (C) 2005 Dmitry Torokhov <dtor@mail.ru>
 - *
 - *  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
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -659,7 -672,7 +659,7 @@@ static int dell_wmi_events_set_enabled(
        return dell_smbios_error(ret);
  }
  
- static int dell_wmi_probe(struct wmi_device *wdev)
+ static int dell_wmi_probe(struct wmi_device *wdev, const void *context)
  {
        struct dell_wmi_priv *priv;
        int ret;
@@@ -1,10 -1,23 +1,10 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   *  hp_accel.c - Interface between LIS3LV02DL driver and HP ACPI BIOS
   *
   *  Copyright (C) 2007-2008 Yan Burman
   *  Copyright (C) 2008 Eric Piel
   *  Copyright (C) 2008-2009 Pavel Machek
 - *
 - *  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
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -229,6 -242,7 +229,7 @@@ static const struct dmi_system_id lis3l
        AXIS_DMI_MATCH("HPB440G3", "HP ProBook 440 G3", x_inverted_usd),
        AXIS_DMI_MATCH("HPB440G4", "HP ProBook 440 G4", x_inverted),
        AXIS_DMI_MATCH("HPB442x", "HP ProBook 442", xy_rotated_left),
+       AXIS_DMI_MATCH("HPB450G0", "HP ProBook 450 G0", x_inverted),
        AXIS_DMI_MATCH("HPB452x", "HP ProBook 452", y_inverted),
        AXIS_DMI_MATCH("HPB522x", "HP ProBook 522", xy_swap),
        AXIS_DMI_MATCH("HPB532x", "HP ProBook 532", y_inverted),
@@@ -1,9 -1,23 +1,9 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   *  ideapad-laptop.c - Lenovo IdeaPad ACPI Extras
   *
   *  Copyright © 2010 Intel Corporation
   *  Copyright © 2010 David Woodhouse <dwmw2@infradead.org>
 - *
 - *  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., 51 Franklin Street, Fifth Floor, Boston, MA
 - *  02110-1301, USA.
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -316,34 -330,15 +316,15 @@@ static int debugfs_cfg_show(struct seq_
  }
  DEFINE_SHOW_ATTRIBUTE(debugfs_cfg);
  
- static int ideapad_debugfs_init(struct ideapad_private *priv)
+ static void ideapad_debugfs_init(struct ideapad_private *priv)
  {
-       struct dentry *node;
+       struct dentry *dir;
  
-       priv->debug = debugfs_create_dir("ideapad", NULL);
-       if (priv->debug == NULL) {
-               pr_err("failed to create debugfs directory");
-               goto errout;
-       }
-       node = debugfs_create_file("cfg", S_IRUGO, priv->debug, priv,
-                                  &debugfs_cfg_fops);
-       if (!node) {
-               pr_err("failed to create cfg in debugfs");
-               goto errout;
-       }
-       node = debugfs_create_file("status", S_IRUGO, priv->debug, priv,
-                                  &debugfs_status_fops);
-       if (!node) {
-               pr_err("failed to create status in debugfs");
-               goto errout;
-       }
-       return 0;
+       dir = debugfs_create_dir("ideapad", NULL);
+       priv->debug = dir;
  
- errout:
-       return -ENOMEM;
+       debugfs_create_file("cfg", S_IRUGO, dir, priv, &debugfs_cfg_fops);
+       debugfs_create_file("status", S_IRUGO, dir, priv, &debugfs_status_fops);
  }
  
  static void ideapad_debugfs_exit(struct ideapad_private *priv)
@@@ -1012,9 -1007,7 +993,7 @@@ static int ideapad_acpi_add(struct plat
        if (ret)
                return ret;
  
-       ret = ideapad_debugfs_init(priv);
-       if (ret)
-               goto debugfs_failed;
+       ideapad_debugfs_init(priv);
  
        ret = ideapad_input_init(priv);
        if (ret)
@@@ -1071,7 -1064,6 +1050,6 @@@ backlight_failed
        ideapad_input_exit(priv);
  input_failed:
        ideapad_debugfs_exit(priv);
- debugfs_failed:
        ideapad_sysfs_exit(priv);
        return ret;
  }
@@@ -1,7 -1,16 +1,7 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Intel Atom SOC Power Management Controller Driver
   * Copyright (c) 2014, Intel Corporation.
 - *
 - * 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.
 - *
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -341,45 -350,24 +341,24 @@@ static int pmc_sleep_tmr_show(struct se
  
  DEFINE_SHOW_ATTRIBUTE(pmc_sleep_tmr);
  
- static void pmc_dbgfs_unregister(struct pmc_dev *pmc)
+ static void pmc_dbgfs_register(struct pmc_dev *pmc)
  {
-       debugfs_remove_recursive(pmc->dbgfs_dir);
- }
- static int pmc_dbgfs_register(struct pmc_dev *pmc)
- {
-       struct dentry *dir, *f;
+       struct dentry *dir;
  
        dir = debugfs_create_dir("pmc_atom", NULL);
-       if (!dir)
-               return -ENOMEM;
  
        pmc->dbgfs_dir = dir;
  
-       f = debugfs_create_file("dev_state", S_IFREG | S_IRUGO,
-                               dir, pmc, &pmc_dev_state_fops);
-       if (!f)
-               goto err;
-       f = debugfs_create_file("pss_state", S_IFREG | S_IRUGO,
-                               dir, pmc, &pmc_pss_state_fops);
-       if (!f)
-               goto err;
-       f = debugfs_create_file("sleep_state", S_IFREG | S_IRUGO,
-                               dir, pmc, &pmc_sleep_tmr_fops);
-       if (!f)
-               goto err;
-       return 0;
- err:
-       pmc_dbgfs_unregister(pmc);
-       return -ENODEV;
+       debugfs_create_file("dev_state", S_IFREG | S_IRUGO, dir, pmc,
+                           &pmc_dev_state_fops);
+       debugfs_create_file("pss_state", S_IFREG | S_IRUGO, dir, pmc,
+                           &pmc_pss_state_fops);
+       debugfs_create_file("sleep_state", S_IFREG | S_IRUGO, dir, pmc,
+                           &pmc_sleep_tmr_fops);
  }
  #else
- static int pmc_dbgfs_register(struct pmc_dev *pmc)
+ static void pmc_dbgfs_register(struct pmc_dev *pmc)
  {
-       return 0;
  }
  #endif /* CONFIG_DEBUG_FS */
  
@@@ -414,6 -402,14 +393,14 @@@ static const struct dmi_system_id critc
        },
        {
                /* pmc_plt_clk* - are used for ethernet controllers */
+               .ident = "Beckhoff CB4063",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Beckhoff Automation"),
+                       DMI_MATCH(DMI_BOARD_NAME, "CB4063"),
+               },
+       },
+       {
+               /* pmc_plt_clk* - are used for ethernet controllers */
                .ident = "Beckhoff CB6263",
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Beckhoff Automation"),
@@@ -491,9 -487,7 +478,7 @@@ static int pmc_setup_dev(struct pci_de
        /* PMC hardware registers setup */
        pmc_hw_reg_setup(pmc);
  
-       ret = pmc_dbgfs_register(pmc);
-       if (ret)
-               dev_warn(&pdev->dev, "debugfs register failed\n");
+       pmc_dbgfs_register(pmc);
  
        /* Register platform clocks - PMC_PLT_CLK [0..5] */
        ret = pmc_setup_clks(pdev, pmc->regmap, data);
@@@ -1,9 -1,13 +1,9 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Samsung Laptop driver
   *
   * Copyright (C) 2009,2011 Greg Kroah-Hartman (gregkh@suse.de)
   * Copyright (C) 2009,2011 Novell Inc.
 - *
 - * 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.
 - *
   */
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  
@@@ -1276,15 -1280,12 +1276,12 @@@ static void samsung_debugfs_exit(struc
        debugfs_remove_recursive(samsung->debug.root);
  }
  
- static int samsung_debugfs_init(struct samsung_laptop *samsung)
+ static void samsung_debugfs_init(struct samsung_laptop *samsung)
  {
-       struct dentry *dent;
+       struct dentry *root;
  
-       samsung->debug.root = debugfs_create_dir("samsung-laptop", NULL);
-       if (!samsung->debug.root) {
-               pr_err("failed to create debugfs directory");
-               goto error_debugfs;
-       }
+       root = debugfs_create_dir("samsung-laptop", NULL);
+       samsung->debug.root = root;
  
        samsung->debug.f0000_wrapper.data = samsung->f0000_segment;
        samsung->debug.f0000_wrapper.size = 0xffff;
        samsung->debug.sdiag_wrapper.data = samsung->sdiag;
        samsung->debug.sdiag_wrapper.size = strlen(samsung->sdiag);
  
-       dent = debugfs_create_u16("command", S_IRUGO | S_IWUSR,
-                                 samsung->debug.root, &samsung->debug.command);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_u32("d0", S_IRUGO | S_IWUSR, samsung->debug.root,
-                                 &samsung->debug.data.d0);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_u32("d1", S_IRUGO | S_IWUSR, samsung->debug.root,
-                                 &samsung->debug.data.d1);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_u16("d2", S_IRUGO | S_IWUSR, samsung->debug.root,
-                                 &samsung->debug.data.d2);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_u8("d3", S_IRUGO | S_IWUSR, samsung->debug.root,
-                                &samsung->debug.data.d3);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_blob("data", S_IRUGO | S_IWUSR,
-                                  samsung->debug.root,
-                                  &samsung->debug.data_wrapper);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_blob("f0000_segment", S_IRUSR | S_IWUSR,
-                                  samsung->debug.root,
-                                  &samsung->debug.f0000_wrapper);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_file("call", S_IFREG | S_IRUGO,
-                                  samsung->debug.root, samsung,
-                                  &samsung_laptop_call_fops);
-       if (!dent)
-               goto error_debugfs;
-       dent = debugfs_create_blob("sdiag", S_IRUGO | S_IWUSR,
-                                  samsung->debug.root,
-                                  &samsung->debug.sdiag_wrapper);
-       if (!dent)
-               goto error_debugfs;
-       return 0;
- error_debugfs:
-       samsung_debugfs_exit(samsung);
-       return -ENOMEM;
+       debugfs_create_u16("command", S_IRUGO | S_IWUSR, root,
+                          &samsung->debug.command);
+       debugfs_create_u32("d0", S_IRUGO | S_IWUSR, root,
+                          &samsung->debug.data.d0);
+       debugfs_create_u32("d1", S_IRUGO | S_IWUSR, root,
+                          &samsung->debug.data.d1);
+       debugfs_create_u16("d2", S_IRUGO | S_IWUSR, root,
+                          &samsung->debug.data.d2);
+       debugfs_create_u8("d3", S_IRUGO | S_IWUSR, root,
+                         &samsung->debug.data.d3);
+       debugfs_create_blob("data", S_IRUGO | S_IWUSR, root,
+                           &samsung->debug.data_wrapper);
+       debugfs_create_blob("f0000_segment", S_IRUSR | S_IWUSR, root,
+                           &samsung->debug.f0000_wrapper);
+       debugfs_create_file("call", S_IFREG | S_IRUGO, root, samsung,
+                           &samsung_laptop_call_fops);
+       debugfs_create_blob("sdiag", S_IRUGO | S_IWUSR, root,
+                           &samsung->debug.sdiag_wrapper);
  }
  
  static void samsung_sabi_exit(struct samsung_laptop *samsung)
@@@ -1741,9 -1706,7 +1702,7 @@@ static int __init samsung_init(void
        if (ret)
                goto error_lid_handling;
  
-       ret = samsung_debugfs_init(samsung);
-       if (ret)
-               goto error_debugfs;
+       samsung_debugfs_init(samsung);
  
        samsung->pm_nb.notifier_call = samsung_pm_notification;
        register_pm_notifier(&samsung->pm_nb);
        samsung_platform_device = samsung->platform_device;
        return ret;
  
- error_debugfs:
-       samsung_lid_handling_exit(samsung);
  error_lid_handling:
        samsung_leds_exit(samsung);
  error_leds:
@@@ -1,9 -1,13 +1,9 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   * Touchscreen driver DMI based configuration code
   *
   * Copyright (c) 2017 Red Hat 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.
 - *
   * Red Hat authors:
   * Hans de Goede <hdegoede@redhat.com>
   */
@@@ -87,6 -91,22 +87,22 @@@ static const struct ts_dmi_data chuwi_h
        .properties     = chuwi_hi10_air_props,
  };
  
+ static const struct property_entry chuwi_hi10_plus_props[] = {
+       PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
+       PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
+       PROPERTY_ENTRY_U32("touchscreen-size-x", 1914),
+       PROPERTY_ENTRY_U32("touchscreen-size-y", 1283),
+       PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10plus.fw"),
+       PROPERTY_ENTRY_U32("silead,max-fingers", 10),
+       PROPERTY_ENTRY_BOOL("silead,home-button"),
+       { }
+ };
+ static const struct ts_dmi_data chuwi_hi10_plus_data = {
+       .acpi_name      = "MSSL0017:00",
+       .properties     = chuwi_hi10_plus_props,
+ };
  static const struct property_entry chuwi_vi8_props[] = {
        PROPERTY_ENTRY_U32("touchscreen-min-x", 4),
        PROPERTY_ENTRY_U32("touchscreen-min-y", 6),
@@@ -597,11 -617,21 +613,21 @@@ static const struct dmi_system_id touch
                /* Chuwi Hi10 Air */
                .driver_data = (void *)&chuwi_hi10_air_data,
                .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
+                       DMI_MATCH(DMI_SYS_VENDOR, "CHUWI INNOVATION AND TECHNOLOGY(SHENZHEN)CO.LTD"),
+                       DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
                        DMI_MATCH(DMI_PRODUCT_SKU, "P1W6_C109D_B"),
                },
        },
        {
+               /* Chuwi Hi10 Plus (CWI527) */
+               .driver_data = (void *)&chuwi_hi10_plus_data,
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Hi10 plus tablet"),
+                       DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
+               },
+       },
+       {
                /* Chuwi Vi8 (CWI506) */
                .driver_data = (void *)&chuwi_vi8_data,
                .matches = {
@@@ -1,9 -1,17 +1,9 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * WMI embedded Binary MOF driver
   *
   * Copyright (c) 2015 Andrew Lutomirski
   * Copyright (C) 2017 VMware, Inc. All Rights Reserved.
 - *
 - *  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.
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -46,7 -54,7 +46,7 @@@ read_bmof(struct file *filp, struct kob
        return count;
  }
  
- static int wmi_bmof_probe(struct wmi_device *wdev)
+ static int wmi_bmof_probe(struct wmi_device *wdev, const void *context)
  {
        struct bmof_priv *priv;
        int ret;
@@@ -1,4 -1,3 +1,4 @@@
 +// SPDX-License-Identifier: GPL-2.0-or-later
  /*
   *  ACPI-WMI mapping driver
   *
   *  WMI bus infrastructure by Andrew Lutomirski and Darren Hart:
   *    Copyright (C) 2015 Andrew Lutomirski
   *    Copyright (C) 2017 VMware, Inc. All Rights Reserved.
 - *
 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - *
 - *  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.
 - *
 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   */
  
  #define pr_fmt(fmt)   KBUILD_MODNAME ": " fmt
@@@ -129,6 -146,28 +129,28 @@@ static bool find_guid(const char *guid_
        return false;
  }
  
+ static const void *find_guid_context(struct wmi_block *wblock,
+                                     struct wmi_driver *wdriver)
+ {
+       const struct wmi_device_id *id;
+       uuid_le guid_input;
+       if (wblock == NULL || wdriver == NULL)
+               return NULL;
+       if (wdriver->id_table == NULL)
+               return NULL;
+       id = wdriver->id_table;
+       while (*id->guid_string) {
+               if (uuid_le_to_bin(id->guid_string, &guid_input))
+                       continue;
+               if (!memcmp(wblock->gblock.guid, &guid_input, 16))
+                       return id->context;
+               id++;
+       }
+       return NULL;
+ }
  static int get_subobj_info(acpi_handle handle, const char *pathname,
                           struct acpi_device_info **info)
  {
@@@ -618,6 -657,25 +640,25 @@@ bool wmi_has_guid(const char *guid_stri
  }
  EXPORT_SYMBOL_GPL(wmi_has_guid);
  
+ /**
+  * wmi_get_acpi_device_uid() - Get _UID name of ACPI device that defines GUID
+  * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
+  *
+  * Find the _UID of ACPI device associated with this WMI GUID.
+  *
+  * Return: The ACPI _UID field value or NULL if the WMI GUID was not found
+  */
+ char *wmi_get_acpi_device_uid(const char *guid_string)
+ {
+       struct wmi_block *wblock = NULL;
+       if (!find_guid(guid_string, &wblock))
+               return NULL;
+       return acpi_device_uid(wblock->acpi_device);
+ }
+ EXPORT_SYMBOL_GPL(wmi_get_acpi_device_uid);
  static struct wmi_block *dev_to_wblock(struct device *dev)
  {
        return container_of(dev, struct wmi_block, dev.dev);
@@@ -887,7 -945,8 +928,8 @@@ static int wmi_dev_probe(struct device 
                dev_warn(dev, "failed to enable device -- probing anyway\n");
  
        if (wdriver->probe) {
-               ret = wdriver->probe(dev_to_wdev(dev));
+               ret = wdriver->probe(dev_to_wdev(dev),
+                               find_guid_context(wblock, wdriver));
                if (ret != 0)
                        goto probe_failure;
        }
@@@ -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.
  
@@@ -1,8 -1,11 +1,8 @@@
 +// SPDX-License-Identifier: GPL-2.0-only
  /*
   * Battery driver for One Laptop Per Child board.
   *
   *    Copyright © 2006-2010  David Woodhouse <dwmw2@infradead.org>
 - *
 - * 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>
@@@ -17,7 -20,6 +17,6 @@@
  #include <linux/jiffies.h>
  #include <linux/sched.h>
  #include <linux/olpc-ec.h>
- #include <asm/olpc.h>
  
  
  #define EC_BAT_VOLTAGE        0x10    /* uint16_t,    *9.76/32,    mV   */
diff --combined include/linux/acpi.h
@@@ -1,8 -1,21 +1,8 @@@
 +/* SPDX-License-Identifier: GPL-2.0-or-later */
  /*
   * acpi.h - ACPI Interface
   *
   * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.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; 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.
 - *
 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   */
  
  #ifndef _LINUX_ACPI_H
@@@ -10,7 -23,6 +10,7 @@@
  
  #include <linux/errno.h>
  #include <linux/ioport.h>     /* for struct resource */
 +#include <linux/irqdomain.h>
  #include <linux/resource_ext.h>
  #include <linux/device.h>
  #include <linux/property.h>
@@@ -315,12 -327,6 +315,12 @@@ int acpi_isa_irq_to_gsi (unsigned isa_i
  void acpi_set_irq_model(enum acpi_irq_model_id model,
                        struct fwnode_handle *fwnode);
  
 +struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags,
 +                                           unsigned int size,
 +                                           struct fwnode_handle *fwnode,
 +                                           const struct irq_domain_ops *ops,
 +                                           void *host_data);
 +
  #ifdef CONFIG_X86_IO_APIC
  extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity);
  #else
@@@ -374,6 -380,7 +374,7 @@@ extern acpi_status wmi_install_notify_h
  extern acpi_status wmi_remove_notify_handler(const char *guid);
  extern acpi_status wmi_get_event_data(u32 event, struct acpi_buffer *out);
  extern bool wmi_has_guid(const char *guid);
+ extern char *wmi_get_acpi_device_uid(const char *guid);
  
  #endif        /* CONFIG_ACPI_WMI */
  
@@@ -920,21 -927,31 +921,21 @@@ static inline int acpi_dev_pm_attach(st
  #endif
  
  #if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP)
 -int acpi_dev_suspend_late(struct device *dev);
  int acpi_subsys_prepare(struct device *dev);
  void acpi_subsys_complete(struct device *dev);
  int acpi_subsys_suspend_late(struct device *dev);
  int acpi_subsys_suspend_noirq(struct device *dev);
 -int acpi_subsys_resume_noirq(struct device *dev);
 -int acpi_subsys_resume_early(struct device *dev);
  int acpi_subsys_suspend(struct device *dev);
  int acpi_subsys_freeze(struct device *dev);
 -int acpi_subsys_freeze_late(struct device *dev);
 -int acpi_subsys_freeze_noirq(struct device *dev);
 -int acpi_subsys_thaw_noirq(struct device *dev);
 +int acpi_subsys_poweroff(struct device *dev);
  #else
 -static inline int acpi_dev_resume_early(struct device *dev) { return 0; }
  static inline int acpi_subsys_prepare(struct device *dev) { return 0; }
  static inline void acpi_subsys_complete(struct device *dev) {}
  static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; }
  static inline int acpi_subsys_suspend_noirq(struct device *dev) { return 0; }
 -static inline int acpi_subsys_resume_noirq(struct device *dev) { return 0; }
 -static inline int acpi_subsys_resume_early(struct device *dev) { return 0; }
  static inline int acpi_subsys_suspend(struct device *dev) { return 0; }
  static inline int acpi_subsys_freeze(struct device *dev) { return 0; }
 -static inline int acpi_subsys_freeze_late(struct device *dev) { return 0; }
 -static inline int acpi_subsys_freeze_noirq(struct device *dev) { return 0; }
 -static inline int acpi_subsys_thaw_noirq(struct device *dev) { return 0; }
 +static inline int acpi_subsys_poweroff(struct device *dev) { return 0; }
  #endif
  
  #ifdef CONFIG_ACPI
@@@ -1300,7 -1317,6 +1301,7 @@@ static inline int lpit_read_residency_c
  #ifdef CONFIG_ACPI_PPTT
  int find_acpi_cpu_topology(unsigned int cpu, int level);
  int find_acpi_cpu_topology_package(unsigned int cpu);
 +int find_acpi_cpu_topology_hetero_id(unsigned int cpu);
  int find_acpi_cpu_cache_topology(unsigned int cpu, int level);
  #else
  static inline int find_acpi_cpu_topology(unsigned int cpu, int level)
@@@ -1311,10 -1327,6 +1312,10 @@@ static inline int find_acpi_cpu_topolog
  {
        return -EINVAL;
  }
 +static inline int find_acpi_cpu_topology_hetero_id(unsigned int cpu)
 +{
 +      return -EINVAL;
 +}
  static inline int find_acpi_cpu_cache_topology(unsigned int cpu, int level)
  {
        return -EINVAL;
diff --combined include/linux/wmi.h
@@@ -1,8 -1,16 +1,8 @@@
 +/* SPDX-License-Identifier: GPL-2.0-only */
  /*
   * wmi.h - ACPI WMI interface
   *
   * Copyright (c) 2015 Andrew Lutomirski
 - *
 - * 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.
   */
  
  #ifndef _LINUX_WMI_H
@@@ -36,7 -44,7 +36,7 @@@ struct wmi_driver 
        struct device_driver driver;
        const struct wmi_device_id *id_table;
  
-       int (*probe)(struct wmi_device *wdev);
+       int (*probe)(struct wmi_device *wdev, const void *context);
        int (*remove)(struct wmi_device *wdev);
        void (*notify)(struct wmi_device *device, union acpi_object *data);
        long (*filter_callback)(struct wmi_device *wdev, unsigned int cmd,