* [PATCH v2 09/17] i2c: Let i2c-core.h include <linux/i2c.h>
From: Uwe Kleine-König (The Capable Hub) @ 2026-06-26 18:00 UTC (permalink / raw)
To: Linus Torvalds, Greg Kroah-Hartman; +Cc: Andi Shyti, linux-i2c, linux-kernel
In-Reply-To: <cover.1782490566.git.u.kleine-koenig@baylibre.com>
The subsystem private header i2c-core.h uses several symbols defined in
<linux/i2c.h>, e.g. struct i2c_board_info and i2c_lock_bus()). This
doesn't pose a problem in practise because all files including
"i2c-core.h" also include <linux/i2c.h>.
To make this more robust add an include statement for <linux/i2c.h>
making the header self-contained.
Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
---
drivers/i2c/i2c-core.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i2c/i2c-core.h b/drivers/i2c/i2c-core.h
index 4797ba88331c..c519da536647 100644
--- a/drivers/i2c/i2c-core.h
+++ b/drivers/i2c/i2c-core.h
@@ -3,6 +3,7 @@
* i2c-core.h - interfaces internal to the I2C framework
*/
+#include <linux/i2c.h>
#include <linux/kconfig.h>
#include <linux/rwsem.h>
--
2.47.3
^ permalink raw reply related
* [PATCH v2 00/17] mod_devicetable.h: Split into per subsystem headers
From: Uwe Kleine-König (The Capable Hub) @ 2026-06-26 18:00 UTC (permalink / raw)
To: Linus Torvalds, Greg Kroah-Hartman, Mark Brown
Cc: Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Raag Jadav, Sohil Mehta, Dave Hansen, Rob Herring,
Saravana Kannan, Bjorn Helgaas, Rafael J. Wysocki, Len Brown,
Andi Shyti, linux-kernel, Yemike Abhilash Chandra,
Mauro Carvalho Chehab, linux-media, Nicolas Frattaroli,
Liam Girdwood, Jaroslav Kysela, Takashi Iwai, Heiko Stuebner,
linux-rockchip, linux-sound, linux-arm-kernel, Danilo Krummrich,
driver-core, Jonathan Cameron, Dmitry Torokhov,
Bartosz Golaszewski, Pei Xiao, Shashank Balaji, Ben Horgan,
Johan Hovold, linux-usb, Nikita Kravets, Hans de Goede,
Ilpo Järvinen, platform-driver-x86, devicetree, linux-i2c,
Daniel Scally, Sakari Ailus, Minas Harutyunyan, Tianrui Zhao,
Bibo Mao, Huacai Chen, WANG Xuerui, kvm, loongarch
Hello,
this is v2 of
https://lore.kernel.org/lkml/20260622210733.1743063-2-u.kleine-koenig@baylibre.com
which only consisted of the patch that is the first in this series.
Changes to this first patch are mostly cosmetic (whitespace cleanups)
and I renamed tee.h to tee_client.h to match tee_client_device_id.
The following 14 patches are preparations for patch #16 that replaces
the include of <linux/mod_devicetable.h> in several key header files by
a subset of the split headers that are needed for these. As there are
some drivers that rely on e.g. <linux/i2c.h> pulling in the definition
for usb_device_id, these must be prepared before <linux/i2c.h> stops
providing this definition.
patch #17 adapts various .c files to stop including
<linux/mod_devicetable.h>. These are easier as the device_ids that have
to be provided are only those used in that .c file. This last patch was
created by the Python script below. That also checks if the needed
headers are present for the files that don't explicitly include
<linux/mod_devicetable.h>. There are 131 files where the script was
unable to prove the includes to be sufficient. Most of them are covered
by build testing, the few remaining ones (12 .c files, 36 headers) were
checked semi-manually.
This series was compile tested for alpha, arc, arm64, loongarch, m68k,
mips, powerpc, riscv, s390, sh, sparc, and x86_64 using an allmodconfig
configuration.
There are a few remaining usages of <linux/mod_devicetable.h>, I plan to
tackle them for the next merge window. These also shouldn't affect so
many files any more and so these changes will annoy less (i.e. result in
less recompilation during bisection and/or development).
Preparing this series took me longer than I hoped, so it's too late to
get it into next before -rc1. I will push this series to
https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git device-id-rework
Given that there are a few merge conflicts with what is in Linus's tree
in the meantime, my plan is to rebase this branch to v7.2-rc1, retest
and then hopefully consider it ready for v7.2-rc2 after cooking in next
for a few days. This has the advantage that hardly any new conflicts
should get introduced in Linus's tree then.
Sounds like a sensible plan?
@Mark: I hope to have the rebase ready before you start working on
next-20260629. If not, just drop this branch from your list for this
day.
Best regards
Uwe
------->8--------
#!/usr/bin/env python3
import re
import os
# Maps a struct name to a set of headers that are enough to provide that struct.
symbol_header_map = {
'acpi_device_id': (
'linux/mod_device_id/acpi.h',
'linux/acpi.h', # includes <linux/mod_devicetable.h>
'linux/i2c.h', # includes <linux/acpi.h>
'linux/device.h', # includes <linux/device/driver.h> which includes linux/mod_device_id/acpi.h
'linux/spi/spi.h', # includes <linux/device.h>
'linux/backlight.h', # includes <linux/device.h>
'linux/pci.h', # includes <linux/device.h>
'linux/platform_device.h', # includes <linux/device.h>
'linux/auxiliary_bus.h', # includes <linux/device.h>
'sound/soc.h', # includes <linux/platform_device.h>
'sound/sof.h', # includes <linux/device.h>
),
'amba_id': (
'linux/mod_device_id/amba.h',
'linux/amba/bus.h', # includes <linux/mod_devicetable.h>
),
'ap_device_id': (
'linux/mod_device_id/ap.h',
),
'apr_device_id': (
'linux/mod_device_id/apr.h',
'linux/soc/qcom/apr.h', # includes <linux/mod_devicetable.h>
),
'auxiliary_device_id': (
'linux/mod_device_id/auxiliary.h',
'linux/auxiliary_bus.h', # includes <linux/mod_devicetable.h>
'linux/misc/keba.h', # includes <linux/auxiliary_bus.h>
'linux/mlx4/driver.h', # includes <linux/auxiliary_bus.h>
'linux/soc/cirrus/ep93xx.h', # includes <linux/auxiliary_bus.h>
),
'bcma_device_id': (
'linux/mod_device_id/bcma.h',
'linux/bcma/bcma.h', # includes <linux/mod_devicetable.h>
),
'ccw_device_id': (
'linux/mod_device_id/ccw.h',
'asm/ccwdev.h', # includes <linux/mod_devicetable.h>
),
'cdx_device_id': (
'linux/mod_device_id/cdx.h',
'linux/cdx/cdx_bus.h', # includes <linux/mod_devicetable.h>
),
'coreboot_device_id': (
'linux/mod_device_id/coreboot.h',
),
'css_device_id': (
'linux/mod_device_id/css.h',
'css.h',
),
'dfl_device_id': (
'linux/mod_device_id/dfl.h',
'linux/dfl.h', # includes <linux/mod_devicetable.h>
),
'dmi_(device|system)_id': (
'linux/mod_device_id/dmi.h',
'linux/dmi.h', # includes <linux/mod_devicetable.h>
),
'eisa_device_id': (
'linux/mod_device_id/eisa.h',
'linux/eisa.h', # includes <linux/mod_devicetable.h>
),
'fsl_mc_device_id': (
'linux/mod_device_id/fsl_mc.h',
'linux/fsl/mc.h', # includes <linux/mod_devicetable.h>
),
'hda_device_id': (
'linux/mod_device_id/hda.h',
'sound/hda_codec.h', # includes <linux/mod_devicetable.h>
),
'hid_device_id': (
'linux/mod_device_id/hid.h',
'linux/hid.h', # includes <linux/mod_devicetable.h>
'linux/hidraw.h', # includes <linux/hid.h> transitively
),
'hv_vmbus_device_id': (
'linux/mod_device_id/hv_vmbus.h',
'linux/hyperv.h', # includes linux/mod_devicetable.h>
'hyperv_net.h', # includes linux/hyperv.h
),
'i2c_device_id': (
'linux/mod_device_id/i2c.h',
'linux/i2c.h', # includes <linux/mod_devicetable.h>
'linux/mfd/lp873x.h', # includes <linux/i2c.h>
'media/dvb_frontend.h', # includes <linux/i2c.h>
),
'i3c_device_id': (
'linux/mod_device_id/i3c.h',
'linux/i3c/device.h', # includes <linux/mod_devicetable.h>
'linux/i3c/master.h', # includes <linux/i3c/device.h>
),
'ieee1394_device_id': (
'linux/mod_device_id/ieee1394.h',
'linux/firewire.h', # should include <linux/mod_device_id/ieee1394.h>, instead of fwd decl
),
'input_device_id': (
'linux/mod_device_id/input.h',
'linux/input.h', # includes <linux/mod_devicetable.h>
),
'ipack_device_id': (
'linux/mod_device_id/ipack.h',
'linux/ipack.h', # includes <linux/mod_devicetable.h>
),
'isapnp_device_id': (
'linux/mod_device_id/isapnp.h',
'linux/isapnp.h', # includes <linux/mod_devicetable.h>
),
'ishtp_device_id': (
'linux/mod_device_id/ishtp.h',
'linux/intel-ish-client-if.h', # includes <linux/mod_devicetable.h>
),
'mcb_device_id': (
'linux/mod_device_id/mcb.h',
'linux/mcb.h', # includes <linux/mod_devicetable.h>
),
'mdio_device_id': (
'linux/mod_device_id/mdio.h',
'linux/phy.h', # includes <linux/mod_devicetable.h>
),
'mei_cl_device_id': (
'linux/mod_device_id/mei_cl.h',
'linux/mei_cl_bus.h', # includes <linux/mod_devicetable.h>
),
'mhi_device_id': (
'linux/mod_device_id/mhi.h',
'linux/mhi.h', # should include <linux/mod_device_id/mhi.h>
),
'mips_cdmm_device_id': (
'linux/mod_device_id/mips_cdmm.h',
'asm/cdmm.h', # arch/mips/include/asm/cdmm.h includes mod_devicetable.h
),
'of_device_id': (
'linux/mod_device_id/of.h',
'linux/of.h', # includes <linux/mod_devicetable.h>
'linux/of_address.h', # includes <linux/of.h>
'linux/of_platform.h', # includes <linux/mod_devicetable.h>
'linux/device/driver.h', # includes <linux/mod_device_id/of.h>
'linux/device.h', # includes <linux/device/driver.h>
'linux/acpi.h', # includes <linux/device.h>
'linux/backlight.h', # includes <linux/device.h>
'linux/moxtet.h', # includes <linux/device.h>
'linux/greybus.h', # includes <linux/device.h>
'linux/platform_device.h', # includes <linux/device.h>
'linux/powercap.h', # includes <linux/device.h>
'linux/auxiliary_bus.h', # includes <linux/device.h>
'linux/i2c.h', # includes <linux/of.h>
'linux/reset.h', # includes <linux/of.h>
'linux/spi/spi.h', # includes <linux/device.h>
'asm/machine.h', # arch/mips/include/asm/machine.h includes <linux/of.h>
'asm/macio.h', # arch/powerpc/include/asm/macio.h includes <linux/of.h>
'sound/soc.h', # includes <linux/platform_device.h>
'sound/dmaengine_pcm.h', # includes <sound/soc.h>
'linux/pm_qos.h', # includes <linux/device.h>
'linux/clk-provider.h', # includes <linux/of.h>
),
'parisc_device_id': (
'linux/mod_device_id/parisc.h',
'asm/parisc-device.h', # should include <linux/mod_device_id/parisc.h>
'asm/hardware.h', # includes <linux/mod_devicetable.h>
),
'pci_device_id': (
'linux/mod_device_id/pci.h',
'linux/pci.h', # includes <linux/mod_devicetable.h>
'linux/comedi/comedi_pci.h', # includes <linux/pci.h>
'sound/hdaudio.h', # includes <linux/pci.h>
'sound/hdaudio_ext.h', # includes <sound/hdaudio.h>
),
'pci_epf_device_id': (
'linux/mod_device_id/pci.h',
'linux/pci-epf.h', # includes <linux/mod_devicetable.h>
),
'pcmcia_device_id': (
'linux/mod_device_id/pcmcia.h',
'pcmcia/ds.h', # includes <linux/mod_devicetable.h>
'linux/comedi/comedi_pcmcia.h', # includes <pcmcia/ds.h>
),
'platform_device_id': (
'linux/mod_device_id/platform.h',
'linux/platform_device.h', # includes <linux/mod_device_id/platform.h>
'linux/mfd/core.h', # includes <linux/platform_device.h>
'linux/ipmi_smi.h', # includes <linux/platform_device.h>
'sound/soc.h', # includes <linux/platform_device.h>
'sound/dmaengine_pcm.h', # includes <sound/soc.h>
),
'pnp_(card_)?device_id': (
'linux/mod_device_id/pnp.h',
'linux/pnp.h', # includes <linux/mod_devicetable.h>
'linux/isapnp.h', # includes <linux/pnp.h>
),
'rio_device_id': (
'linux/mod_device_id/rio.h',
'linux/rio.h', # includes <linux/mod_devicetable.h>
),
'rpmsg_device_id': (
'linux/mod_device_id/rpmsg.h',
'linux/rpmsg.h', # includes <linux/mod_devicetable.h>
),
'sdio_device_id': (
'linux/mod_device_id/sdio.h',
'linux/mmc/sdio_func.h', # includes <linux/mod_devicetable.h>
),
'sdw_device_id': (
'linux/mod_device_id/sdw.h',
'linux/soundwire/sdw.h', # includes <linux/mod_devicetable.h>
),
'serio_device_id': (
'linux/mod_device_id/serio.h',
'linux/serio.h', # includes <linux/mod_devicetable.h>
'linux/hil_mlc.h', # includes <linux/serio.h>
),
'slim_device_id': (
'linux/mod_device_id/slim.h',
'linux/slimbus.h', # includes <linux/mod_devicetable.h>
),
'spi_device_id': (
'linux/mod_device_id/spi.h',
'linux/spi/spi.h', # includes <linux/mod_devicetable.h>
),
'spmi_device_id': (
'linux/mod_device_id/spmi.h',
),
'ssam_device_id': (
'linux/mod_device_id/ssam.h',
'linux/surface_aggregator/device.h', # includes <linux/mod_devicetable.h>
),
'ssb_device_id': (
'linux/mod_device_id/ssb.h',
'linux/ssb/ssb.h', # includes <linux/mod_devicetable.h>
),
'tb_service_id': (
'linux/mod_device_id/tb.h',
'linux/thunderbolt.h', # includes <linux/mod_devicetable.h>
'tb.h', # drivers/thunderbolt/tb.h includes <linux/thunderbolt.h>
),
'tee_client_device_id': (
'linux/mod_device_id/tee_client.h',
'linux/tee_drv.h', # includes <linux/mod_devicetable.h>
'linux/tee_core.h', # includes <linux/tee_drv.h>
),
'typec_device_id': (
'linux/mod_device_id/typec.h',
'linux/usb/typec_altmode.h', # includes <linux/mod_devicetable.h>
'linux/usb/typec_dp.h', # includes <linux/usb/typec_altmode.h>
),
'ulpi_device_id': (
'linux/mod_device_id/ulpi.h',
'linux/ulpi/driver.h', # includes <linux/mod_devicetable.h>
),
'usb_device_id': (
'linux/mod_device_id/usb.h',
'linux/usb.h', # includes <linux/mod_devicetable.h>
'linux/comedi/comedi_usb.h', # includes <linux/usb.h>
'linux/usb/input.h', # includes <linux/usb.h>
),
'vchiq_device_id': (
'linux/mod_device_id/vchiq.h',
'linux/raspberrypi/vchiq_bus.h', # includes <linux/mod_devicetable.h>
),
'virtio_device_id': (
'linux/mod_device_id/virtio.h',
'linux/virtio.h', # includes <linux/mod_devicetable.h>
'linux/virtio_config.h', # includes <linux/virtio.h>
'uapi/linux/virtio_pmem.h', # includes <linux/virtio_config.h>
),
'wmi_device_id': (
'linux/mod_device_id/wmi.h',
'linux/wmi.h', # includes <linux/mod_devicetable.h>
),
'x86_(cpu|device)_id': (
'linux/mod_device_id/x86_cpu.h',
'linux/platform_data/x86/soc.h', # includes <linux/mod_devicetable.h>
'asm/cpu_device_id.h', # includes <linux/mod_devicetable.h>
),
'zorro_device_id': (
'linux/mod_device_id/zorro.h',
'linux/zorro.h', # includes <linux/mod_devicetable.h>
),
'cpu_feature': (
'linux/mod_devicetable.h',
'linux/cpufeature.h', # includes <linux/mod_devicetable.h>
),
}
for dirpath, dirnames, filenames in os.walk('.'):
for fn in (os.path.join(dirpath, f) for f in filenames if re.match(r'.*\.[ch]$', f)):
if fn in ('./scripts/mod/devicetable-offsets.c', './scripts/mod/file2alias.c'):
continue
with open(fn) as f:
try:
filecontent = f.read()
except Exception as e:
print(f"Error { e } while reading { fn }")
continue
# If the file has an include of the legacy header, drop it
if momdt := re.search(r'#[ \t]*include\s*[<"]linux/mod_devicetable.h[>"]([ \t]*/\*[^*]*\*/)?[ \t]*\n', filecontent):
filecontent = filecontent[:momdt.start()] + filecontent[momdt.end():]
for s, hs in symbol_header_map.items():
if re.search(fr'\bstruct\s*{ s }\b\s*;', filecontent):
# with a forward declaration assume we're fine (unsafe!)
continue
if re.search(fr'\bstruct\s*{ s }\b', filecontent):
if fn.endswith(tuple('/' + h for h in hs)):
break
# include local headers
seenheaders = set()
expanded_filecontent = filecontent
while mo := re.search(r'#\s*include\s*"([^"]*)"', expanded_filecontent):
start, end = mo.span(0)
lhn = mo.group(1)
if lhn in seenheaders:
expanded_filecontent = expanded_filecontent[:start] + expanded_filecontent[end:]
else:
seenheaders.add(lhn)
try:
with open(os.path.join(dirpath, lhn)) as lh:
lhcontent = lh.read()
expanded_filecontent = expanded_filecontent[:start] + lhcontent + expanded_filecontent[end:]
except Exception:
expanded_filecontent = expanded_filecontent[:start] + expanded_filecontent[end:]
for h in hs:
if re.search(fr'#\s*include\s*[<"]{ h }[>"]', expanded_filecontent):
break
else:
# only rewrite .c files, headers need more care
if momdt:
if fn.endswith('.c'):
filecontent = filecontent[:momdt.start()] + f'#include <{ hs[0] }>\n' + filecontent[momdt.start():]
else:
print(f"Header for { s } missing in { fn }")
if momdt and fn.endswith('.c'):
with open(fn, "w") as f:
f.write(filecontent)
------->8--------
Uwe Kleine-König (The Capable Hub) (17):
mod_devicetable.h: Split into per subsystem headers
media: ti: vpe: #include <linux/platform_device.h> explicitly
ASoC: rockchip: rockchip_sai: #include <linux/platform_device.h>
explicitly
driver: core: Include headers for acpi_device_id and of_device_id for
struct device_driver
driver core: platform: Include header for struct platform_device_id
usb: serial: Include <linux/usb.h> in <linux/usb/serial.h>
platform/x86: msi-ec: Ensure dmi_system_id is defined
of: Explicitly include <linux/types.h> and <linux/err.h>
i2c: Let i2c-core.h include <linux/i2c.h>
platform/x86: x86-android-tablets: Add include defining struct
dmi_system_id
platform/x86: int3472: Add include defining struct dmi_system_id
usb: dwc2: Add include defining struct pci_device_id
ALSA: hda/core: Add include defining struct hda_device_id
LoongArch: KVM: Add include defining struct cpu_feature
media: em28xx: Add include for struct usb_device_id
Replace <linux/mod_devicetable.h> by more specific
<linux/mod_device_id/*.h> (headers)
Replace <linux/mod_devicetable.h> by more specific
<linux/mod_device_id/*.h> (c files)
arch/arm/mach-omap2/board-generic.c | 1 -
arch/loongarch/kvm/main.c | 1 +
arch/mips/include/asm/cdmm.h | 2 +-
arch/mips/lantiq/xway/dcdc.c | 1 -
arch/mips/lantiq/xway/gptu.c | 1 -
arch/mips/lantiq/xway/vmmc.c | 1 -
arch/mips/pci/pci-rt2880.c | 1 -
arch/mips/ralink/timer.c | 1 -
arch/parisc/include/asm/hardware.h | 4 +-
arch/parisc/include/asm/parisc-device.h | 1 +
.../powerpc/platforms/83xx/mcu_mpc8349emitx.c | 1 -
arch/powerpc/platforms/86xx/common.c | 1 -
arch/powerpc/sysdev/fsl_lbc.c | 1 -
arch/powerpc/sysdev/fsl_pmc.c | 1 -
arch/s390/include/asm/ccwdev.h | 2 +-
arch/sh/drivers/platform_early.c | 2 +-
arch/sparc/crypto/crop_devid.c | 2 +-
arch/sparc/kernel/of_device_32.c | 1 -
arch/sparc/kernel/of_device_64.c | 1 -
arch/sparc/kernel/of_device_common.c | 1 -
arch/x86/include/asm/cpu_device_id.h | 5 +-
arch/x86/kvm/svm/svm.c | 1 -
arch/x86/kvm/vmx/vmx.c | 1 -
drivers/accel/ethosu/ethosu_drv.c | 1 -
drivers/accel/qaic/qaic_timesync.c | 1 -
drivers/accel/qaic/sahara.c | 1 -
drivers/ata/ahci_platform.c | 1 -
drivers/ata/ahci_sunxi.c | 1 -
drivers/ata/pata_buddha.c | 1 -
drivers/ata/pata_ep93xx.c | 1 -
drivers/ata/pata_imx.c | 1 -
drivers/auxdisplay/arm-charlcd.c | 1 -
drivers/auxdisplay/hd44780.c | 1 -
drivers/auxdisplay/lcd2s.c | 1 -
drivers/auxdisplay/max6959.c | 1 -
drivers/auxdisplay/seg-led-gpio.c | 1 -
drivers/block/floppy.c | 2 +-
drivers/bluetooth/hci_h5.c | 1 -
drivers/bluetooth/hci_qca.c | 1 -
drivers/bus/mhi/ep/main.c | 1 -
drivers/bus/mhi/host/init.c | 1 -
drivers/cache/hisi_soc_hha.c | 1 -
drivers/cdx/controller/cdx_controller.c | 1 -
drivers/char/hw_random/airoha-trng.c | 1 -
drivers/char/hw_random/atmel-rng.c | 1 -
drivers/char/hw_random/ba431-rng.c | 1 -
drivers/char/hw_random/bcm74110-rng.c | 1 -
drivers/char/hw_random/exynos-trng.c | 1 -
drivers/char/hw_random/histb-rng.c | 1 -
drivers/char/hw_random/imx-rngc.c | 1 -
drivers/char/hw_random/ingenic-trng.c | 1 -
drivers/char/hw_random/iproc-rng200.c | 1 -
drivers/char/hw_random/pasemi-rng.c | 1 -
drivers/char/hw_random/pic32-rng.c | 1 -
drivers/char/hw_random/powernv-rng.c | 1 -
drivers/char/hw_random/xgene-rng.c | 1 -
drivers/char/hw_random/xilinx-trng.c | 1 -
drivers/char/hw_random/xiphera-trng.c | 1 -
drivers/clk/aspeed/clk-ast2600.c | 1 -
drivers/clk/aspeed/clk-ast2700.c | 1 -
drivers/clk/clk-axi-clkgen.c | 1 -
drivers/clk/clk-bm1880.c | 1 -
drivers/clk/clk-cdce706.c | 1 -
drivers/clk/clk-eyeq.c | 1 -
drivers/clk/clk-renesas-pcie.c | 1 -
drivers/clk/clk-si521xx.c | 1 -
drivers/clk/clk-versaclock5.c | 1 -
drivers/clk/imx/clk-imx8mp-audiomix.c | 1 -
drivers/clk/mediatek/clk-mt2701-g3d.c | 1 -
drivers/clk/mediatek/clk-mt2701.c | 1 -
drivers/clk/mediatek/clk-mt2712.c | 1 -
drivers/clk/mediatek/clk-mt6765.c | 1 -
drivers/clk/mediatek/clk-mt6779-aud.c | 1 -
drivers/clk/mediatek/clk-mt7622-eth.c | 1 -
drivers/clk/mediatek/clk-mt7622-hif.c | 1 -
drivers/clk/mediatek/clk-mt7622.c | 1 -
drivers/clk/mediatek/clk-mt7629-hif.c | 1 -
drivers/clk/mediatek/clk-mt7981-apmixed.c | 1 -
drivers/clk/mediatek/clk-mt7981-eth.c | 1 -
drivers/clk/mediatek/clk-mt7981-infracfg.c | 1 -
drivers/clk/mediatek/clk-mt7981-topckgen.c | 1 -
drivers/clk/mediatek/clk-mt7986-apmixed.c | 1 -
drivers/clk/mediatek/clk-mt7986-eth.c | 1 -
drivers/clk/mediatek/clk-mt7986-infracfg.c | 1 -
drivers/clk/mediatek/clk-mt7986-topckgen.c | 1 -
drivers/clk/mediatek/clk-mt8167-aud.c | 1 -
drivers/clk/mediatek/clk-mt8167-img.c | 1 -
drivers/clk/mediatek/clk-mt8167-mfgcfg.c | 1 -
drivers/clk/mediatek/clk-mt8167-mm.c | 1 -
drivers/clk/mediatek/clk-mt8167-vdec.c | 1 -
drivers/clk/mediatek/clk-mt8173-mm.c | 1 -
drivers/clk/mediatek/clk-mt8183.c | 1 -
.../clk/mediatek/clk-mt8188-adsp_audio26m.c | 1 -
drivers/clk/mediatek/clk-mt8188-apmixedsys.c | 1 -
.../clk/mediatek/clk-mt8188-imp_iic_wrap.c | 1 -
drivers/clk/mediatek/clk-mt8188-topckgen.c | 1 -
drivers/clk/mediatek/clk-mt8188-vdo0.c | 1 -
drivers/clk/mediatek/clk-mt8188-vdo1.c | 1 -
drivers/clk/mediatek/clk-mt8188-venc.c | 1 -
drivers/clk/mediatek/clk-mt8188-wpe.c | 1 -
drivers/clk/mediatek/clk-mt8192-cam.c | 1 -
drivers/clk/mediatek/clk-mt8192-img.c | 1 -
.../clk/mediatek/clk-mt8192-imp_iic_wrap.c | 1 -
drivers/clk/mediatek/clk-mt8192-ipe.c | 1 -
drivers/clk/mediatek/clk-mt8192-mdp.c | 1 -
drivers/clk/mediatek/clk-mt8192-mfg.c | 1 -
drivers/clk/mediatek/clk-mt8192-msdc.c | 1 -
drivers/clk/mediatek/clk-mt8192-scp_adsp.c | 1 -
drivers/clk/mediatek/clk-mt8192-vdec.c | 1 -
drivers/clk/mediatek/clk-mt8192-venc.c | 1 -
drivers/clk/mediatek/clk-mt8192.c | 1 -
drivers/clk/mediatek/clk-mt8195-apmixedsys.c | 1 -
drivers/clk/mediatek/clk-mt8195-topckgen.c | 1 -
drivers/clk/mediatek/clk-mt8365.c | 1 -
drivers/clk/mediatek/clk-mt8516-aud.c | 1 -
drivers/clk/meson/a1-peripherals.c | 1 -
drivers/clk/meson/a1-pll.c | 1 -
drivers/clk/meson/axg.c | 1 -
drivers/clk/meson/gxbb.c | 1 -
drivers/clk/qcom/cambistmclkcc-kaanapali.c | 1 -
drivers/clk/qcom/cambistmclkcc-sm8750.c | 1 -
drivers/clk/qcom/camcc-kaanapali.c | 1 -
drivers/clk/qcom/camcc-milos.c | 1 -
drivers/clk/qcom/camcc-qcs615.c | 1 -
drivers/clk/qcom/camcc-sa8775p.c | 1 -
drivers/clk/qcom/camcc-sc7180.c | 1 -
drivers/clk/qcom/camcc-sc7280.c | 1 -
drivers/clk/qcom/camcc-sc8180x.c | 1 -
drivers/clk/qcom/camcc-sc8280xp.c | 1 -
drivers/clk/qcom/camcc-sdm845.c | 1 -
drivers/clk/qcom/camcc-sm4450.c | 1 -
drivers/clk/qcom/camcc-sm6350.c | 1 -
drivers/clk/qcom/camcc-sm7150.c | 1 -
drivers/clk/qcom/camcc-sm8150.c | 1 -
drivers/clk/qcom/camcc-sm8250.c | 1 -
drivers/clk/qcom/camcc-sm8450.c | 1 -
drivers/clk/qcom/camcc-sm8550.c | 1 -
drivers/clk/qcom/camcc-sm8650.c | 1 -
drivers/clk/qcom/camcc-sm8750.c | 1 -
drivers/clk/qcom/camcc-x1e80100.c | 1 -
drivers/clk/qcom/dispcc-eliza.c | 1 -
drivers/clk/qcom/dispcc-glymur.c | 1 -
drivers/clk/qcom/dispcc-kaanapali.c | 1 -
drivers/clk/qcom/dispcc-milos.c | 1 -
drivers/clk/qcom/dispcc-qcm2290.c | 1 -
drivers/clk/qcom/dispcc-qcs615.c | 1 -
drivers/clk/qcom/dispcc-sc7180.c | 1 -
drivers/clk/qcom/dispcc-sc7280.c | 1 -
drivers/clk/qcom/dispcc-sc8280xp.c | 1 -
drivers/clk/qcom/dispcc-sdm845.c | 1 -
drivers/clk/qcom/dispcc-sm4450.c | 1 -
drivers/clk/qcom/dispcc-sm6115.c | 1 -
drivers/clk/qcom/dispcc-sm6125.c | 1 -
drivers/clk/qcom/dispcc-sm6350.c | 1 -
drivers/clk/qcom/dispcc-sm6375.c | 1 -
drivers/clk/qcom/dispcc-sm7150.c | 1 -
drivers/clk/qcom/dispcc-sm8250.c | 1 -
drivers/clk/qcom/dispcc-sm8450.c | 1 -
drivers/clk/qcom/dispcc-sm8550.c | 1 -
drivers/clk/qcom/dispcc-sm8750.c | 1 -
drivers/clk/qcom/dispcc-x1e80100.c | 1 -
drivers/clk/qcom/dispcc0-sa8775p.c | 1 -
drivers/clk/qcom/dispcc1-sa8775p.c | 1 -
drivers/clk/qcom/ecpricc-qdu1000.c | 1 -
drivers/clk/qcom/gcc-eliza.c | 1 -
drivers/clk/qcom/gcc-glymur.c | 1 -
drivers/clk/qcom/gcc-ipq5018.c | 1 -
drivers/clk/qcom/gcc-ipq5332.c | 1 -
drivers/clk/qcom/gcc-kaanapali.c | 1 -
drivers/clk/qcom/gcc-milos.c | 1 -
drivers/clk/qcom/gcc-nord.c | 1 -
drivers/clk/qcom/gcc-qcs615.c | 1 -
drivers/clk/qcom/gcc-qcs8300.c | 1 -
drivers/clk/qcom/gcc-sa8775p.c | 1 -
drivers/clk/qcom/gcc-sdx75.c | 1 -
drivers/clk/qcom/gcc-sm4450.c | 1 -
drivers/clk/qcom/gcc-sm7150.c | 1 -
drivers/clk/qcom/gcc-sm8650.c | 1 -
drivers/clk/qcom/gcc-sm8750.c | 1 -
drivers/clk/qcom/gcc-x1e80100.c | 1 -
drivers/clk/qcom/gpucc-glymur.c | 1 -
drivers/clk/qcom/gpucc-kaanapali.c | 1 -
drivers/clk/qcom/gpucc-milos.c | 1 -
drivers/clk/qcom/gpucc-msm8998.c | 1 -
drivers/clk/qcom/gpucc-qcm2290.c | 1 -
drivers/clk/qcom/gpucc-qcs615.c | 1 -
drivers/clk/qcom/gpucc-sa8775p.c | 1 -
drivers/clk/qcom/gpucc-sar2130p.c | 1 -
drivers/clk/qcom/gpucc-sc7180.c | 1 -
drivers/clk/qcom/gpucc-sc7280.c | 1 -
drivers/clk/qcom/gpucc-sc8280xp.c | 1 -
drivers/clk/qcom/gpucc-sdm660.c | 1 -
drivers/clk/qcom/gpucc-sdm845.c | 1 -
drivers/clk/qcom/gpucc-sm4450.c | 1 -
drivers/clk/qcom/gpucc-sm6115.c | 1 -
drivers/clk/qcom/gpucc-sm6125.c | 1 -
drivers/clk/qcom/gpucc-sm6350.c | 1 -
drivers/clk/qcom/gpucc-sm6375.c | 1 -
drivers/clk/qcom/gpucc-sm8150.c | 1 -
drivers/clk/qcom/gpucc-sm8250.c | 1 -
drivers/clk/qcom/gpucc-sm8350.c | 1 -
drivers/clk/qcom/gpucc-sm8450.c | 1 -
drivers/clk/qcom/gpucc-sm8550.c | 1 -
drivers/clk/qcom/gpucc-sm8650.c | 1 -
drivers/clk/qcom/gpucc-sm8750.c | 1 -
drivers/clk/qcom/gpucc-x1e80100.c | 1 -
drivers/clk/qcom/gpucc-x1p42100.c | 1 -
drivers/clk/qcom/gxclkctl-kaanapali.c | 1 -
drivers/clk/qcom/ipq-cmn-pll.c | 1 -
drivers/clk/qcom/lpasscc-sc8280xp.c | 1 -
drivers/clk/qcom/lpasscc-sm6115.c | 1 -
drivers/clk/qcom/mmcc-apq8084.c | 1 -
drivers/clk/qcom/mmcc-msm8960.c | 1 -
drivers/clk/qcom/mmcc-msm8974.c | 1 -
drivers/clk/qcom/mmcc-msm8994.c | 1 -
drivers/clk/qcom/mmcc-msm8996.c | 1 -
drivers/clk/qcom/mmcc-msm8998.c | 1 -
drivers/clk/qcom/mmcc-sdm660.c | 1 -
drivers/clk/qcom/negcc-nord.c | 1 -
drivers/clk/qcom/nwgcc-nord.c | 1 -
drivers/clk/qcom/segcc-nord.c | 1 -
drivers/clk/qcom/tcsrcc-eliza.c | 1 -
drivers/clk/qcom/tcsrcc-glymur.c | 1 -
drivers/clk/qcom/tcsrcc-nord.c | 1 -
drivers/clk/qcom/tcsrcc-sm8650.c | 1 -
drivers/clk/qcom/tcsrcc-sm8750.c | 1 -
drivers/clk/qcom/tcsrcc-x1e80100.c | 1 -
drivers/clk/qcom/videocc-glymur.c | 1 -
drivers/clk/qcom/videocc-kaanapali.c | 1 -
drivers/clk/qcom/videocc-milos.c | 1 -
drivers/clk/qcom/videocc-qcs615.c | 1 -
drivers/clk/qcom/videocc-sa8775p.c | 1 -
drivers/clk/qcom/videocc-sm7150.c | 1 -
drivers/clk/qcom/videocc-sm8450.c | 1 -
drivers/clk/qcom/videocc-sm8550.c | 1 -
drivers/clk/qcom/videocc-sm8750.c | 1 -
drivers/clk/renesas/clk-vbattb.c | 1 -
drivers/clk/renesas/renesas-cpg-mssr.c | 1 -
drivers/clk/renesas/rzg2l-cpg.c | 1 -
drivers/clk/renesas/rzv2h-cpg.c | 1 -
drivers/clk/samsung/clk-exynos-audss.c | 1 -
drivers/clk/samsung/clk-exynos-clkout.c | 1 -
drivers/clk/samsung/clk-exynos2200.c | 1 -
drivers/clk/samsung/clk-exynos3250.c | 1 -
drivers/clk/samsung/clk-exynos4.c | 1 -
drivers/clk/samsung/clk-exynos4412-isp.c | 1 -
drivers/clk/samsung/clk-exynos5-subcmu.c | 1 -
drivers/clk/samsung/clk-exynos5250.c | 1 -
drivers/clk/samsung/clk-exynos5420.c | 1 -
drivers/clk/samsung/clk-exynos5433.c | 1 -
drivers/clk/samsung/clk-exynos7870.c | 1 -
drivers/clk/samsung/clk-exynos7885.c | 1 -
drivers/clk/samsung/clk-exynos850.c | 1 -
drivers/clk/samsung/clk-exynos8895.c | 1 -
drivers/clk/samsung/clk-exynos990.c | 1 -
drivers/clk/samsung/clk-exynosautov9.c | 1 -
drivers/clk/samsung/clk-exynosautov920.c | 1 -
drivers/clk/samsung/clk-fsd.c | 1 -
drivers/clk/samsung/clk-gs101.c | 1 -
drivers/clk/samsung/clk-s5pv210-audss.c | 1 -
drivers/clk/samsung/clk.c | 1 -
drivers/clk/sprd/ums512-clk.c | 1 -
.../clk/starfive/clk-starfive-jh7100-audio.c | 1 -
drivers/clk/starfive/clk-starfive-jh7100.c | 1 -
drivers/clk/tegra/clk-device.c | 1 -
drivers/clk/xilinx/xlnx_vcu.c | 1 -
drivers/counter/interrupt-cnt.c | 1 -
drivers/counter/stm32-lptimer-cnt.c | 1 -
drivers/counter/stm32-timer-cnt.c | 1 -
drivers/counter/ti-ecap-capture.c | 1 -
drivers/counter/ti-eqep.c | 1 -
drivers/cpufreq/amd_freq_sensitivity.c | 1 -
drivers/cpufreq/armada-37xx-cpufreq.c | 1 -
drivers/crypto/atmel-aes.c | 1 -
drivers/crypto/atmel-sha.c | 1 -
drivers/crypto/atmel-tdes.c | 1 -
drivers/crypto/hifn_795x.c | 1 -
drivers/crypto/img-hash.c | 1 -
.../intel/keembay/keembay-ocs-hcu-core.c | 1 -
drivers/crypto/qce/core.c | 1 -
drivers/crypto/starfive/jh7110-cryp.c | 1 -
drivers/crypto/talitos.c | 1 -
drivers/crypto/tegra/tegra-se-main.c | 1 -
drivers/crypto/ti/dthev2-common.c | 1 -
drivers/crypto/xilinx/zynqmp-aes-gcm.c | 1 -
drivers/devfreq/hisi_uncore_freq.c | 1 -
drivers/devfreq/imx8m-ddrc.c | 1 -
drivers/dma/amd/qdma/qdma.c | 1 -
drivers/dma/ep93xx_dma.c | 1 -
drivers/dma/qcom/hidma.c | 1 -
drivers/dma/sf-pdma/sf-pdma.c | 1 -
drivers/dma/xgene-dma.c | 1 -
drivers/dma/xilinx/xdma.c | 1 -
drivers/dpll/zl3073x/dpll.c | 1 -
drivers/edac/fsl_ddr_edac.c | 1 -
drivers/edac/mpc85xx_edac.c | 1 -
drivers/edac/pnd2_edac.c | 1 -
drivers/edac/sb_edac.c | 1 -
drivers/extcon/extcon-intel-cht-wc.c | 1 -
drivers/extcon/extcon-intel-mrfld.c | 1 -
drivers/extcon/extcon-max14526.c | 1 -
drivers/extcon/extcon-max3355.c | 1 -
drivers/extcon/extcon-qcom-spmi-misc.c | 1 -
drivers/extcon/extcon-usb-gpio.c | 1 -
drivers/firewire/core-device.c | 1 -
drivers/firewire/net.c | 1 -
drivers/firewire/sbp2.c | 1 -
drivers/firmware/google/cbmem.c | 2 +-
drivers/firmware/google/coreboot_table.c | 2 +-
.../firmware/google/framebuffer-coreboot.c | 2 +-
drivers/firmware/google/memconsole-coreboot.c | 2 +-
drivers/firmware/google/vpd.c | 2 +-
drivers/firmware/qemu_fw_cfg.c | 1 -
drivers/fpga/altera-freeze-bridge.c | 1 -
drivers/fpga/altera-pr-ip-core-plat.c | 1 -
drivers/fpga/ice40-spi.c | 1 -
drivers/fpga/intel-m10-bmc-sec-update.c | 1 -
drivers/fpga/xilinx-selectmap.c | 1 -
drivers/fpga/xilinx-spi.c | 1 -
drivers/fsi/fsi-master-i2cr.c | 1 -
drivers/fsi/fsi-scom.c | 2 +-
drivers/fsi/i2cr-scom.c | 1 -
drivers/gpib/eastwood/fluke_gpib.c | 1 -
drivers/gpio/gpio-74xx-mmio.c | 1 -
drivers/gpio/gpio-adnp.c | 1 -
drivers/gpio/gpio-aggregator.c | 1 -
drivers/gpio/gpio-altera-a10sr.c | 2 +-
drivers/gpio/gpio-altera.c | 1 -
drivers/gpio/gpio-ath79.c | 1 -
drivers/gpio/gpio-bcm-kona.c | 1 -
drivers/gpio/gpio-by-pinctrl.c | 1 -
drivers/gpio/gpio-cros-ec.c | 1 -
drivers/gpio/gpio-dwapb.c | 1 -
drivers/gpio/gpio-en7523.c | 1 -
drivers/gpio/gpio-ge.c | 1 -
drivers/gpio/gpio-graniterapids.c | 1 -
drivers/gpio/gpio-hisi.c | 1 -
drivers/gpio/gpio-idt3243x.c | 1 -
drivers/gpio/gpio-latch.c | 1 -
drivers/gpio/gpio-line-mux.c | 1 -
drivers/gpio/gpio-ltc4283.c | 1 -
drivers/gpio/gpio-max7360.c | 1 -
drivers/gpio/gpio-max77759.c | 1 -
drivers/gpio/gpio-mb86s7x.c | 1 -
drivers/gpio/gpio-mlxbf2.c | 1 -
drivers/gpio/gpio-mmio.c | 1 -
drivers/gpio/gpio-mockup.c | 1 -
drivers/gpio/gpio-mpc8xxx.c | 1 -
drivers/gpio/gpio-mpfs.c | 1 -
drivers/gpio/gpio-nomadik.c | 1 -
drivers/gpio/gpio-pca953x.c | 1 -
drivers/gpio/gpio-pcf857x.c | 1 -
drivers/gpio/gpio-qixis-fpga.c | 1 -
drivers/gpio/gpio-realtek-otto.c | 1 -
drivers/gpio/gpio-shared-proxy.c | 1 -
drivers/gpio/gpio-sim.c | 1 -
drivers/gpio/gpio-sl28cpld.c | 1 -
drivers/gpio/gpio-sloppy-logic-analyzer.c | 1 -
drivers/gpio/gpio-sprd.c | 1 -
drivers/gpio/gpio-tn48m.c | 1 -
drivers/gpio/gpio-virtuser.c | 1 -
drivers/gpio/gpio-wcd934x.c | 1 -
drivers/gpio/gpio-xgene-sb.c | 1 -
drivers/gpio/gpio-xra1403.c | 1 -
drivers/gpio/gpio-zevio.c | 1 -
drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 1 -
drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c | 1 -
drivers/gpu/drm/bridge/inno-hdmi.c | 1 -
drivers/gpu/drm/bridge/ssd2825.c | 1 -
drivers/gpu/drm/bridge/tc358762.c | 2 +-
drivers/gpu/drm/bridge/tc358764.c | 2 +-
drivers/gpu/drm/bridge/th1520-dw-hdmi.c | 1 -
drivers/gpu/drm/drm_panel_backlight_quirks.c | 1 -
drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 1 -
drivers/gpu/drm/exynos/exynos_drm_gsc.c | 1 -
drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 1 -
drivers/gpu/drm/imagination/pvr_drv.c | 1 -
drivers/gpu/drm/imx/dc/dc-cf.c | 1 -
drivers/gpu/drm/imx/dc/dc-de.c | 1 -
drivers/gpu/drm/imx/dc/dc-drv.c | 1 -
drivers/gpu/drm/imx/dc/dc-ed.c | 1 -
drivers/gpu/drm/imx/dc/dc-fg.c | 1 -
drivers/gpu/drm/imx/dc/dc-fl.c | 1 -
drivers/gpu/drm/imx/dc/dc-fw.c | 1 -
drivers/gpu/drm/imx/dc/dc-lb.c | 1 -
drivers/gpu/drm/imx/dc/dc-pe.c | 1 -
drivers/gpu/drm/imx/dc/dc-tc.c | 1 -
drivers/gpu/drm/imx/lcdc/imx-lcdc.c | 1 -
drivers/gpu/drm/mediatek/mtk_cec.c | 1 -
drivers/gpu/drm/mediatek/mtk_mdp_rdma.c | 1 -
drivers/gpu/drm/meson/meson_dw_mipi_dsi.c | 1 -
drivers/gpu/drm/mxsfb/mxsfb_drv.c | 1 -
drivers/gpu/drm/panel/panel-arm-versatile.c | 1 -
drivers/gpu/drm/panel/panel-auo-a030jtn01.c | 1 -
drivers/gpu/drm/panel/panel-boe-td4320.c | 2 +-
.../gpu/drm/panel/panel-feixin-k101-im2ba02.c | 2 +-
.../drm/panel/panel-feiyang-fy07024di26a30d.c | 2 +-
drivers/gpu/drm/panel/panel-himax-hx83112b.c | 1 -
drivers/gpu/drm/panel/panel-himax-hx83121a.c | 1 -
drivers/gpu/drm/panel/panel-himax-hx8394.c | 1 -
drivers/gpu/drm/panel/panel-hydis-hv101hd1.c | 2 +-
drivers/gpu/drm/panel/panel-ilitek-ili9341.c | 1 -
.../gpu/drm/panel/panel-ilitek-ili9806e-dsi.c | 1 -
drivers/gpu/drm/panel/panel-lg-ld070wx3.c | 2 +-
drivers/gpu/drm/panel/panel-motorola-mot.c | 2 +-
drivers/gpu/drm/panel/panel-novatek-nt35532.c | 2 +-
drivers/gpu/drm/panel/panel-novatek-nt37801.c | 1 -
.../gpu/drm/panel/panel-orisetech-otm8009a.c | 1 -
drivers/gpu/drm/panel/panel-raydium-rm67200.c | 2 +-
drivers/gpu/drm/panel/panel-raydium-rm68200.c | 2 +-
drivers/gpu/drm/panel/panel-renesas-r61307.c | 2 +-
drivers/gpu/drm/panel/panel-renesas-r69328.c | 2 +-
.../gpu/drm/panel/panel-samsung-ltl106hl02.c | 2 +-
drivers/gpu/drm/panel/panel-samsung-s6d16d0.c | 2 +-
.../gpu/drm/panel/panel-samsung-s6e63j0x03.c | 1 -
.../gpu/drm/panel/panel-samsung-s6e63m0-dsi.c | 2 +-
.../panel/panel-samsung-s6e88a0-ams427ap24.c | 1 -
.../drm/panel/panel-samsung-s6e8fc0-m1906f9.c | 1 -
drivers/gpu/drm/panel/panel-sitronix-st7703.c | 1 -
drivers/gpu/drm/panel/panel-summit.c | 1 -
.../gpu/drm/panel/panel-visionox-rm69299.c | 1 -
.../gpu/drm/panel/panel-visionox-rm692e5.c | 1 -
.../gpu/drm/renesas/rcar-du/rcar_dw_hdmi.c | 1 -
.../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 1 -
drivers/gpu/drm/rockchip/inno_hdmi-rockchip.c | 1 -
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 1 -
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 1 -
drivers/gpu/drm/sprd/sprd_drm.c | 1 -
drivers/gpu/drm/sti/sti_hda.c | 1 -
drivers/gpu/drm/stm/drv.c | 1 -
drivers/gpu/drm/stm/dw_mipi_dsi-stm.c | 1 -
drivers/gpu/drm/sun4i/sun6i_drc.c | 1 -
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 1 -
drivers/gpu/drm/tiny/sharp-memory.c | 1 -
drivers/gpu/drm/vc4/vc4_dpi.c | 1 -
drivers/gpu/drm/vc4/vc4_txp.c | 1 -
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 1 -
drivers/hid/intel-ish-hid/ishtp/bus.h | 2 +-
drivers/hsi/controllers/omap_ssi_port.c | 1 -
drivers/hte/hte-tegra194-test.c | 1 -
drivers/hwmon/adcxx.c | 1 -
drivers/hwmon/adt7410.c | 1 -
drivers/hwmon/adt7462.c | 1 -
drivers/hwmon/adt7475.c | 1 -
drivers/hwmon/as370-hwmon.c | 1 -
drivers/hwmon/axi-fan-control.c | 1 -
drivers/hwmon/cros_ec_hwmon.c | 1 -
drivers/hwmon/gxp-fan-ctrl.c | 1 -
drivers/hwmon/iio_hwmon.c | 1 -
drivers/hwmon/intel-m10-bmc-hwmon.c | 1 -
drivers/hwmon/jc42.c | 1 -
drivers/hwmon/lan966x-hwmon.c | 1 -
drivers/hwmon/lm70.c | 1 -
drivers/hwmon/lm75.c | 1 -
drivers/hwmon/ltc2947-core.c | 1 -
drivers/hwmon/ltc4282.c | 1 -
drivers/hwmon/ltc4283.c | 1 -
drivers/hwmon/ltq-cputemp.c | 1 -
drivers/hwmon/max197.c | 1 -
drivers/hwmon/mc13783-adc.c | 1 -
drivers/hwmon/mr75203.c | 1 -
drivers/hwmon/ntc_thermistor.c | 1 -
drivers/hwmon/occ/p9_sbe.c | 1 -
drivers/hwmon/pmbus/adp1050.c | 1 -
drivers/hwmon/pmbus/e50sn12051.c | 1 -
drivers/hwmon/pmbus/lt3074.c | 1 -
drivers/hwmon/pmbus/max17616.c | 1 -
drivers/hwmon/pmbus/max20830.c | 1 -
drivers/hwmon/pmbus/mp2975.c | 1 -
drivers/hwmon/pmbus/stef48h28.c | 1 -
drivers/hwmon/pwm-fan.c | 1 -
drivers/hwmon/sch5627.c | 1 -
drivers/hwmon/sch5636.c | 1 -
drivers/hwmon/sl28cpld-hwmon.c | 1 -
drivers/hwmon/smpro-hwmon.c | 1 -
drivers/hwmon/sparx5-temp.c | 1 -
drivers/hwmon/tmp102.c | 1 -
drivers/hwmon/tmp108.c | 1 -
drivers/hwtracing/coresight/ultrasoc-smb.c | 1 -
drivers/i2c/busses/i2c-amd-asf-plat.c | 1 -
drivers/i2c/busses/i2c-gxp.c | 1 -
drivers/i2c/busses/i2c-hisi.c | 1 -
drivers/i2c/busses/i2c-rtl9300.c | 1 -
drivers/i2c/busses/i2c-rzv2m.c | 1 -
drivers/i2c/i2c-core.h | 1 +
drivers/iio/accel/adxl313_i2c.c | 1 -
drivers/iio/accel/adxl313_spi.c | 1 -
drivers/iio/accel/adxl355_core.c | 1 -
drivers/iio/accel/adxl355_i2c.c | 1 -
drivers/iio/accel/adxl355_spi.c | 1 -
drivers/iio/accel/adxl367.c | 1 -
drivers/iio/accel/adxl367_i2c.c | 1 -
drivers/iio/accel/adxl367_spi.c | 1 -
drivers/iio/accel/adxl372_i2c.c | 1 -
drivers/iio/accel/adxl372_spi.c | 1 -
drivers/iio/accel/adxl380_i2c.c | 1 -
drivers/iio/accel/adxl380_spi.c | 1 -
drivers/iio/accel/bma180.c | 1 -
drivers/iio/accel/bma220_core.c | 1 -
drivers/iio/accel/bma220_i2c.c | 1 -
drivers/iio/accel/bma220_spi.c | 1 -
drivers/iio/accel/bma400_i2c.c | 1 -
drivers/iio/accel/bma400_spi.c | 1 -
drivers/iio/accel/bmc150-accel-i2c.c | 1 -
drivers/iio/accel/bmc150-accel-spi.c | 1 -
drivers/iio/accel/bmi088-accel-i2c.c | 1 -
drivers/iio/accel/dmard06.c | 1 -
drivers/iio/accel/fxls8962af-core.c | 1 -
drivers/iio/accel/fxls8962af-i2c.c | 1 -
drivers/iio/accel/fxls8962af-spi.c | 1 -
drivers/iio/accel/hid-sensor-accel-3d.c | 1 -
drivers/iio/accel/kxcjk-1013.c | 1 -
drivers/iio/accel/kxsd9-i2c.c | 1 -
drivers/iio/accel/kxsd9-spi.c | 1 -
drivers/iio/accel/mma7660.c | 1 -
drivers/iio/accel/mma8452.c | 1 -
drivers/iio/accel/mma9551.c | 1 -
drivers/iio/accel/mma9553.c | 1 -
drivers/iio/accel/msa311.c | 1 -
drivers/iio/accel/mxc4005.c | 1 -
drivers/iio/accel/mxc6255.c | 1 -
drivers/iio/accel/st_accel_i2c.c | 1 -
drivers/iio/accel/st_accel_spi.c | 1 -
drivers/iio/accel/stk8ba50.c | 1 -
drivers/iio/adc/88pm886-gpadc.c | 1 -
drivers/iio/adc/ad4000.c | 1 -
drivers/iio/adc/ad4080.c | 1 -
drivers/iio/adc/ad4134.c | 1 -
drivers/iio/adc/ad4851.c | 1 -
drivers/iio/adc/ad7124.c | 1 -
drivers/iio/adc/ad7173.c | 1 -
drivers/iio/adc/ad7191.c | 1 -
drivers/iio/adc/ad7192.c | 1 -
drivers/iio/adc/ad7280a.c | 1 -
drivers/iio/adc/ad7292.c | 1 -
drivers/iio/adc/ad7298.c | 1 -
drivers/iio/adc/ad7405.c | 1 -
drivers/iio/adc/ad7606_par.c | 1 -
drivers/iio/adc/ad7625.c | 1 -
drivers/iio/adc/ad7779.c | 1 -
drivers/iio/adc/adi-axi-adc.c | 1 -
drivers/iio/adc/at91-sama5d2_adc.c | 1 -
drivers/iio/adc/axp20x_adc.c | 1 -
drivers/iio/adc/bcm_iproc_adc.c | 1 -
drivers/iio/adc/berlin2-adc.c | 1 -
drivers/iio/adc/cpcap-adc.c | 1 -
drivers/iio/adc/envelope-detector.c | 1 -
drivers/iio/adc/fsl-imx25-gcq.c | 1 -
drivers/iio/adc/hi8435.c | 1 -
drivers/iio/adc/hx711.c | 1 -
drivers/iio/adc/imx7d_adc.c | 1 -
drivers/iio/adc/imx8qxp-adc.c | 1 -
drivers/iio/adc/imx93_adc.c | 1 -
drivers/iio/adc/ingenic-adc.c | 1 -
drivers/iio/adc/intel_dc_ti_adc.c | 1 -
drivers/iio/adc/intel_mrfld_adc.c | 1 -
drivers/iio/adc/lpc18xx_adc.c | 1 -
drivers/iio/adc/lpc32xx_adc.c | 1 -
drivers/iio/adc/ltc2496.c | 1 -
drivers/iio/adc/ltc2497.c | 1 -
drivers/iio/adc/max1027.c | 1 -
drivers/iio/adc/max11100.c | 1 -
drivers/iio/adc/max1118.c | 1 -
drivers/iio/adc/max1363.c | 1 -
drivers/iio/adc/max14001.c | 1 -
drivers/iio/adc/max34408.c | 1 -
drivers/iio/adc/max77541-adc.c | 1 -
drivers/iio/adc/max9611.c | 1 -
drivers/iio/adc/mcp320x.c | 1 -
drivers/iio/adc/mcp3422.c | 1 -
drivers/iio/adc/mcp3911.c | 1 -
drivers/iio/adc/mp2629_adc.c | 1 -
drivers/iio/adc/mt6359-auxadc.c | 1 -
drivers/iio/adc/mt6360-adc.c | 1 -
drivers/iio/adc/mt6370-adc.c | 1 -
drivers/iio/adc/mt6577_auxadc.c | 1 -
drivers/iio/adc/nau7802.c | 1 -
drivers/iio/adc/nct7201.c | 1 -
drivers/iio/adc/npcm_adc.c | 1 -
drivers/iio/adc/nxp-sar-adc.c | 1 -
drivers/iio/adc/qcom-pm8xxx-xoadc.c | 1 -
drivers/iio/adc/qcom-spmi-adc5-gen3.c | 1 -
drivers/iio/adc/qcom-spmi-adc5.c | 1 -
drivers/iio/adc/qcom-spmi-rradc.c | 1 -
drivers/iio/adc/qcom-spmi-vadc.c | 1 -
drivers/iio/adc/rohm-bd79112.c | 1 -
drivers/iio/adc/rohm-bd79124.c | 1 -
drivers/iio/adc/rtq6056.c | 1 -
drivers/iio/adc/rzg2l_adc.c | 1 -
drivers/iio/adc/rzn1-adc.c | 1 -
drivers/iio/adc/rzt2h_adc.c | 1 -
drivers/iio/adc/sd_adc_modulator.c | 1 -
drivers/iio/adc/sophgo-cv1800b-adc.c | 1 -
drivers/iio/adc/spear_adc.c | 1 -
drivers/iio/adc/stm32-adc.c | 1 -
drivers/iio/adc/sun20i-gpadc-iio.c | 1 -
drivers/iio/adc/ti-adc081c.c | 1 -
drivers/iio/adc/ti-adc0832.c | 1 -
drivers/iio/adc/ti-adc084s021.c | 1 -
drivers/iio/adc/ti-adc108s102.c | 1 -
drivers/iio/adc/ti-adc128s052.c | 1 -
drivers/iio/adc/ti-adc161s626.c | 1 -
drivers/iio/adc/ti-ads1018.c | 1 -
drivers/iio/adc/ti-ads124s08.c | 1 -
drivers/iio/adc/ti-ads131m02.c | 1 -
drivers/iio/adc/ti-ads8688.c | 1 -
drivers/iio/adc/ti-tlc4541.c | 1 -
drivers/iio/adc/twl4030-madc.c | 1 -
drivers/iio/adc/twl6030-gpadc.c | 1 -
drivers/iio/adc/vf610_adc.c | 1 -
drivers/iio/adc/xilinx-ams.c | 1 -
drivers/iio/adc/xilinx-xadc-core.c | 1 -
drivers/iio/addac/ad74413r.c | 1 -
drivers/iio/afe/iio-rescale.c | 1 -
drivers/iio/amplifiers/ad8366.c | 1 -
drivers/iio/amplifiers/adl8113.c | 1 -
drivers/iio/amplifiers/hmc425a.c | 1 -
drivers/iio/cdc/ad7150.c | 1 -
drivers/iio/chemical/ams-iaq-core.c | 1 -
drivers/iio/chemical/atlas-ezo-sensor.c | 1 -
drivers/iio/chemical/atlas-sensor.c | 1 -
drivers/iio/chemical/bme680_spi.c | 1 -
drivers/iio/chemical/mhz19b.c | 1 -
drivers/iio/chemical/pms7003.c | 1 -
drivers/iio/chemical/scd30_i2c.c | 1 -
drivers/iio/chemical/scd30_serial.c | 1 -
drivers/iio/chemical/sgp30.c | 1 -
drivers/iio/chemical/sps30_i2c.c | 1 -
drivers/iio/chemical/sps30_serial.c | 1 -
drivers/iio/chemical/sunrise_co2.c | 1 -
drivers/iio/chemical/vz89x.c | 1 -
.../cros_ec_sensors/cros_ec_lid_angle.c | 1 -
.../common/cros_ec_sensors/cros_ec_sensors.c | 1 -
drivers/iio/common/ssp_sensors/ssp_dev.c | 1 -
drivers/iio/dac/ad3530r.c | 1 -
drivers/iio/dac/ad3552r-hs.c | 1 -
drivers/iio/dac/ad5446-i2c.c | 1 -
drivers/iio/dac/ad5446-spi.c | 1 -
drivers/iio/dac/ad5592r.c | 1 -
drivers/iio/dac/ad5593r.c | 1 -
drivers/iio/dac/ad5758.c | 1 -
drivers/iio/dac/ad7293.c | 1 -
drivers/iio/dac/ad7303.c | 1 -
drivers/iio/dac/ad8460.c | 1 -
drivers/iio/dac/ad9739a.c | 1 -
drivers/iio/dac/adi-axi-dac.c | 1 -
drivers/iio/dac/dpot-dac.c | 1 -
drivers/iio/dac/lpc18xx_dac.c | 1 -
drivers/iio/dac/ltc2664.c | 1 -
drivers/iio/dac/ltc2688.c | 1 -
drivers/iio/dac/max22007.c | 1 -
drivers/iio/dac/max5522.c | 1 -
drivers/iio/dac/mcp4725.c | 1 -
drivers/iio/dac/mcp4728.c | 1 -
drivers/iio/dac/mcp47feb02.c | 1 -
drivers/iio/dac/mcp4821.c | 1 -
drivers/iio/dac/stm32-dac-core.c | 1 -
drivers/iio/dac/stm32-dac.c | 1 -
drivers/iio/dac/ti-dac082s085.c | 1 -
drivers/iio/dac/ti-dac5571.c | 1 -
drivers/iio/dac/vf610_dac.c | 1 -
drivers/iio/filter/admv8818.c | 1 -
drivers/iio/frequency/adf4350.c | 1 -
drivers/iio/frequency/admfm2000.c | 1 -
drivers/iio/frequency/admv1013.c | 1 -
drivers/iio/frequency/admv1014.c | 1 -
drivers/iio/frequency/adrf6780.c | 1 -
drivers/iio/gyro/bmg160_i2c.c | 1 -
drivers/iio/gyro/fxas21002c_i2c.c | 1 -
drivers/iio/gyro/fxas21002c_spi.c | 1 -
drivers/iio/gyro/hid-sensor-gyro-3d.c | 1 -
drivers/iio/gyro/st_gyro_i2c.c | 1 -
drivers/iio/gyro/st_gyro_spi.c | 1 -
drivers/iio/health/max30102.c | 1 -
drivers/iio/humidity/dht11.c | 1 -
drivers/iio/humidity/ens210.c | 1 -
drivers/iio/humidity/hdc100x.c | 1 -
drivers/iio/humidity/hid-sensor-humidity.c | 1 -
drivers/iio/humidity/hts221_i2c.c | 1 -
drivers/iio/humidity/htu21.c | 1 -
drivers/iio/humidity/si7020.c | 1 -
drivers/iio/imu/adis16475.c | 1 -
drivers/iio/imu/adis16480.c | 1 -
drivers/iio/imu/adis16550.c | 1 -
drivers/iio/imu/bmi160/bmi160_i2c.c | 1 -
drivers/iio/imu/bmi160/bmi160_spi.c | 1 -
drivers/iio/imu/bmi270/bmi270_i2c.c | 1 -
drivers/iio/imu/bmi270/bmi270_spi.c | 1 -
drivers/iio/imu/bmi323/bmi323_i2c.c | 1 -
drivers/iio/imu/bmi323/bmi323_spi.c | 1 -
drivers/iio/imu/bno055/bno055_i2c.c | 1 -
drivers/iio/imu/bno055/bno055_ser_core.c | 1 -
drivers/iio/imu/fxos8700_i2c.c | 1 -
drivers/iio/imu/fxos8700_spi.c | 1 -
.../iio/imu/inv_icm42600/inv_icm42600_i2c.c | 1 -
.../iio/imu/inv_icm42600/inv_icm42600_spi.c | 1 -
.../iio/imu/inv_icm45600/inv_icm45600_i2c.c | 1 -
.../iio/imu/inv_icm45600/inv_icm45600_i3c.c | 1 -
.../iio/imu/inv_icm45600/inv_icm45600_spi.c | 1 -
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c | 1 -
drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c | 1 -
drivers/iio/imu/kmx61.c | 1 -
drivers/iio/imu/smi330/smi330_i2c.c | 1 -
drivers/iio/imu/smi330/smi330_spi.c | 1 -
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i3c.c | 1 -
drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_i2c.c | 1 -
drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_spi.c | 1 -
drivers/iio/light/al3000a.c | 1 -
drivers/iio/light/al3010.c | 1 -
drivers/iio/light/al3320a.c | 1 -
drivers/iio/light/bh1780.c | 1 -
drivers/iio/light/cm32181.c | 1 -
drivers/iio/light/cm3232.c | 1 -
drivers/iio/light/cm3605.c | 1 -
drivers/iio/light/cros_ec_light_prox.c | 1 -
drivers/iio/light/gp2ap020a00f.c | 1 -
drivers/iio/light/hid-sensor-als.c | 1 -
drivers/iio/light/hid-sensor-prox.c | 1 -
drivers/iio/light/isl29018.c | 1 -
drivers/iio/light/jsa1212.c | 1 -
drivers/iio/light/ltr501.c | 1 -
drivers/iio/light/ltrf216a.c | 1 -
drivers/iio/light/max44000.c | 1 -
drivers/iio/light/opt3001.c | 1 -
drivers/iio/light/rpr0521.c | 1 -
drivers/iio/light/st_uvis25_i2c.c | 1 -
drivers/iio/light/st_uvis25_spi.c | 1 -
drivers/iio/light/stk3310.c | 1 -
drivers/iio/light/tsl2563.c | 1 -
drivers/iio/light/us5182d.c | 1 -
drivers/iio/light/veml6046x00.c | 1 -
drivers/iio/light/vl6180.c | 1 -
drivers/iio/magnetometer/ak8974.c | 1 -
drivers/iio/magnetometer/ak8975.c | 1 -
drivers/iio/magnetometer/bmc150_magn_i2c.c | 1 -
drivers/iio/magnetometer/bmc150_magn_spi.c | 1 -
drivers/iio/magnetometer/hid-sensor-magn-3d.c | 1 -
drivers/iio/magnetometer/mmc35240.c | 1 -
drivers/iio/magnetometer/mmc5633.c | 1 -
drivers/iio/magnetometer/si7210.c | 1 -
drivers/iio/magnetometer/st_magn_i2c.c | 1 -
drivers/iio/magnetometer/st_magn_spi.c | 1 -
drivers/iio/magnetometer/tlv493d.c | 1 -
drivers/iio/magnetometer/yamaha-yas530.c | 1 -
drivers/iio/multiplexer/iio-mux.c | 1 -
drivers/iio/orientation/hid-sensor-incl-3d.c | 1 -
drivers/iio/orientation/hid-sensor-rotation.c | 1 -
.../position/hid-sensor-custom-intel-hinge.c | 1 -
drivers/iio/potentiometer/ad5272.c | 1 -
drivers/iio/potentiometer/ds1803.c | 1 -
drivers/iio/potentiometer/max5432.c | 1 -
drivers/iio/potentiometer/max5481.c | 1 -
drivers/iio/potentiometer/max5487.c | 1 -
drivers/iio/potentiometer/mcp4018.c | 1 -
drivers/iio/potentiometer/mcp41010.c | 1 -
drivers/iio/potentiometer/mcp4131.c | 1 -
drivers/iio/potentiometer/mcp4531.c | 1 -
drivers/iio/potentiostat/lmp91000.c | 1 -
drivers/iio/pressure/abp2030pa_i2c.c | 1 -
drivers/iio/pressure/abp2030pa_spi.c | 1 -
drivers/iio/pressure/adp810.c | 1 -
drivers/iio/pressure/cros_ec_baro.c | 1 -
drivers/iio/pressure/hid-sensor-press.c | 1 -
drivers/iio/pressure/hp206c.c | 1 -
drivers/iio/pressure/hsc030pa.c | 1 -
drivers/iio/pressure/hsc030pa_i2c.c | 1 -
drivers/iio/pressure/hsc030pa_spi.c | 1 -
drivers/iio/pressure/icp10100.c | 1 -
drivers/iio/pressure/mprls0025pa.c | 1 -
drivers/iio/pressure/mprls0025pa_i2c.c | 1 -
drivers/iio/pressure/mprls0025pa_spi.c | 1 -
drivers/iio/pressure/ms5611_i2c.c | 1 -
drivers/iio/pressure/ms5611_spi.c | 1 -
drivers/iio/pressure/ms5637.c | 1 -
drivers/iio/pressure/sdp500.c | 1 -
drivers/iio/pressure/st_pressure_i2c.c | 1 -
drivers/iio/pressure/st_pressure_spi.c | 1 -
drivers/iio/pressure/zpa2326_i2c.c | 1 -
drivers/iio/pressure/zpa2326_spi.c | 1 -
drivers/iio/proximity/as3935.c | 1 -
.../iio/proximity/cros_ec_mkbp_proximity.c | 1 -
drivers/iio/proximity/d3323aa.c | 1 -
drivers/iio/proximity/hx9023s.c | 1 -
drivers/iio/proximity/isl29501.c | 1 -
drivers/iio/proximity/mb1232.c | 1 -
drivers/iio/proximity/ping.c | 1 -
.../iio/proximity/pulsedlight-lidar-lite-v2.c | 1 -
drivers/iio/proximity/srf04.c | 1 -
drivers/iio/proximity/sx9310.c | 1 -
drivers/iio/proximity/sx9324.c | 1 -
drivers/iio/proximity/sx9360.c | 1 -
drivers/iio/proximity/vl53l1x-i2c.c | 1 -
drivers/iio/resolver/ad2s1200.c | 1 -
.../iio/temperature/hid-sensor-temperature.c | 1 -
drivers/iio/temperature/ltc2983.c | 1 -
drivers/iio/temperature/max31856.c | 1 -
drivers/iio/temperature/max31865.c | 1 -
drivers/iio/temperature/maxim_thermocouple.c | 1 -
drivers/iio/temperature/mcp9600.c | 1 -
drivers/iio/temperature/mlx90614.c | 1 -
drivers/iio/temperature/mlx90632.c | 1 -
drivers/iio/temperature/mlx90635.c | 1 -
drivers/iio/temperature/tmp006.c | 1 -
drivers/iio/temperature/tmp007.c | 1 -
drivers/iio/temperature/tsys01.c | 1 -
drivers/iio/trigger/stm32-lptimer-trigger.c | 1 -
drivers/iio/trigger/stm32-timer-trigger.c | 1 -
drivers/input/keyboard/adp5585-keys.c | 1 -
drivers/input/keyboard/adp5588-keys.c | 1 -
drivers/input/keyboard/charlieplex_keypad.c | 1 -
drivers/input/keyboard/clps711x-keypad.c | 1 -
drivers/input/keyboard/ep93xx_keypad.c | 1 -
drivers/input/keyboard/max7360-keypad.c | 1 -
drivers/input/keyboard/pinephone-keyboard.c | 1 -
drivers/input/misc/ariel-pwrbutton.c | 1 -
drivers/input/misc/da9063_onkey.c | 1 -
drivers/input/misc/gpio_decoder.c | 1 -
drivers/input/misc/iqs269a.c | 1 -
drivers/input/misc/iqs626a.c | 1 -
drivers/input/misc/iqs7222.c | 1 -
drivers/input/misc/mma8450.c | 1 -
drivers/input/misc/rt5120-pwrkey.c | 1 -
drivers/input/misc/sc27xx-vibra.c | 1 -
drivers/input/misc/twl4030-pwrbutton.c | 1 -
drivers/input/serio/sun4i-ps2.c | 1 -
drivers/input/serio/xilinx_ps2.c | 1 -
drivers/input/touchscreen/cyttsp5.c | 1 -
drivers/input/touchscreen/himax_hx852x.c | 1 -
drivers/input/touchscreen/hynitron_cstxxx.c | 1 -
drivers/input/touchscreen/ili210x.c | 1 -
drivers/input/touchscreen/iqs5xx.c | 1 -
drivers/input/touchscreen/msg2638.c | 1 -
.../input/touchscreen/resistive-adc-touch.c | 1 -
drivers/input/touchscreen/tsc2007_core.c | 1 -
drivers/interconnect/mediatek/mt8183.c | 1 -
drivers/interconnect/mediatek/mt8195.c | 1 -
drivers/interconnect/mediatek/mt8196.c | 1 -
drivers/interconnect/qcom/msm8909.c | 1 -
drivers/interconnect/qcom/msm8937.c | 1 -
drivers/interconnect/qcom/msm8939.c | 1 -
drivers/interconnect/qcom/msm8953.c | 1 -
drivers/interconnect/qcom/msm8976.c | 1 -
drivers/interconnect/qcom/msm8996.c | 1 -
drivers/interconnect/qcom/qcm2290.c | 1 -
drivers/interconnect/qcom/qcs404.c | 1 -
drivers/interconnect/qcom/qdu1000.c | 1 -
drivers/interconnect/qcom/sa8775p.c | 1 -
drivers/interconnect/qcom/sc7180.c | 1 -
drivers/interconnect/qcom/sc7280.c | 1 -
drivers/interconnect/qcom/sc8180x.c | 1 -
drivers/interconnect/qcom/sc8280xp.c | 1 -
drivers/interconnect/qcom/sdm660.c | 1 -
drivers/interconnect/qcom/sdm670.c | 1 -
drivers/interconnect/qcom/sdm845.c | 1 -
drivers/interconnect/qcom/sdx55.c | 1 -
drivers/interconnect/qcom/sdx65.c | 1 -
drivers/interconnect/qcom/sm6115.c | 1 -
drivers/interconnect/qcom/sm6350.c | 1 -
drivers/interconnect/qcom/sm7150.c | 1 -
drivers/interconnect/qcom/sm8150.c | 1 -
drivers/interconnect/qcom/sm8250.c | 1 -
drivers/interconnect/qcom/sm8350.c | 1 -
drivers/interconnect/qcom/sm8450.c | 1 -
drivers/interconnect/qcom/sm8550.c | 1 -
.../iommu/arm/arm-smmu/arm-smmu-qcom-debug.c | 1 -
drivers/irqchip/irq-imx-intmux.c | 1 -
drivers/irqchip/irq-lan966x-oic.c | 1 -
drivers/irqchip/irq-sl28cpld.c | 1 -
drivers/irqchip/irq-stm32mp-exti.c | 1 -
drivers/leds/flash/leds-rt8515.c | 1 -
drivers/leds/leds-aw200xx.c | 1 -
drivers/leds/leds-bd2606mvv.c | 1 -
drivers/leds/leds-cht-wcove.c | 1 -
drivers/leds/leds-cr0014114.c | 1 -
drivers/leds/leds-cros_ec.c | 1 -
drivers/leds/leds-el15203000.c | 1 -
drivers/leds/leds-gpio.c | 1 -
drivers/leds/leds-is31fl319x.c | 1 -
drivers/leds/leds-lm36274.c | 1 -
drivers/leds/leds-lm3692x.c | 1 -
drivers/leds/leds-lm3697.c | 1 -
drivers/leds/leds-lp50xx.c | 1 -
drivers/leds/leds-lt3593.c | 1 -
drivers/leds/leds-max5970.c | 1 -
drivers/leds/leds-mlxcpld.c | 1 -
drivers/leds/leds-nic78bx.c | 1 -
drivers/leds/leds-pca995x.c | 1 -
drivers/leds/leds-regulator.c | 1 -
drivers/leds/leds-spi-byte.c | 1 -
drivers/leds/leds-sun50i-a100.c | 1 -
drivers/leds/rgb/leds-group-multicolor.c | 1 -
drivers/leds/rgb/leds-mt6370-rgb.c | 1 -
drivers/leds/rgb/leds-pwm-multicolor.c | 1 -
drivers/mailbox/mailbox-mpfs.c | 1 -
drivers/mailbox/platform_mhu.c | 1 -
.../media/cec/platform/cros-ec/cros-ec-cec.c | 1 -
drivers/media/firewire/firedtv-fw.c | 1 -
drivers/media/i2c/adv7180.c | 1 -
drivers/media/i2c/cvs/core.c | 1 -
drivers/media/i2c/gc0308.c | 1 -
drivers/media/i2c/gc05a2.c | 1 -
drivers/media/i2c/gc08a3.c | 1 -
drivers/media/i2c/lm3560.c | 1 -
drivers/media/i2c/mt9m114.c | 1 -
drivers/media/i2c/mt9p031.c | 1 -
drivers/media/i2c/mt9v032.c | 1 -
drivers/media/i2c/ov2680.c | 1 -
drivers/media/i2c/ov5640.c | 1 -
drivers/media/i2c/ov5670.c | 1 -
drivers/media/i2c/ov5675.c | 1 -
drivers/media/i2c/ov64a40.c | 1 -
drivers/media/i2c/ov7251.c | 1 -
drivers/media/i2c/ov7670.c | 1 -
drivers/media/i2c/ov8865.c | 1 -
drivers/media/i2c/t4ka3.c | 1 -
drivers/media/i2c/tvp514x.c | 1 -
drivers/media/i2c/video-i2c.c | 1 -
.../platform/arm/mali-c55/mali-c55-core.c | 1 -
.../platform/chips-media/coda/imx-vdoa.c | 1 -
.../platform/mediatek/jpeg/mtk_jpeg_enc_hw.c | 1 -
.../platform/microchip/microchip-csi2dc.c | 1 -
drivers/media/platform/qcom/venus/vdec.c | 1 -
drivers/media/platform/qcom/venus/venc.c | 1 -
drivers/media/platform/renesas/rcar-fcp.c | 1 -
.../platform/renesas/rzg2l-cru/rzg2l-core.c | 1 -
drivers/media/platform/st/sti/hva/hva-v4l2.c | 1 -
.../media/platform/sunxi/sun8i-di/sun8i-di.c | 1 -
.../sunxi/sun8i-rotate/sun8i_rotate.c | 1 -
drivers/media/platform/ti/vpe/vip.c | 1 +
drivers/media/rc/ir-spi.c | 1 -
drivers/media/usb/em28xx/em28xx.h | 1 +
drivers/memory/stm32_omm.c | 1 -
drivers/memory/tegra/tegra186-emc.c | 1 -
drivers/memory/tegra/tegra186.c | 1 -
drivers/memory/tegra/tegra210-emc-core.c | 1 -
drivers/mfd/adp5585.c | 1 -
drivers/mfd/atmel-hlcdc.c | 1 -
drivers/mfd/atmel-smc.c | 1 -
drivers/mfd/cros_ec_dev.c | 1 -
drivers/mfd/cs42l43-i2c.c | 1 -
drivers/mfd/cs42l43-sdw.c | 1 -
drivers/mfd/hi655x-pmic.c | 1 -
drivers/mfd/intel-lpss-acpi.c | 1 -
drivers/mfd/intel-lpss-pci.c | 1 -
drivers/mfd/intel_soc_pmic_bxtwc.c | 1 -
drivers/mfd/intel_soc_pmic_crc.c | 1 -
drivers/mfd/kempld-core.c | 1 -
drivers/mfd/lochnagar-i2c.c | 1 -
drivers/mfd/lp873x.c | 2 +-
drivers/mfd/lp87565.c | 1 -
drivers/mfd/max14577.c | 1 -
drivers/mfd/max7360.c | 1 -
drivers/mfd/max77759.c | 1 -
drivers/mfd/max77843.c | 1 -
drivers/mfd/mc13xxx-spi.c | 1 -
drivers/mfd/motorola-cpcap.c | 1 -
drivers/mfd/ocelot-spi.c | 1 -
drivers/mfd/rt5033.c | 3 +-
drivers/mfd/rt5120.c | 1 -
drivers/mfd/rz-mtu3.c | 1 -
drivers/mfd/sec-acpm.c | 1 -
drivers/mfd/sec-i2c.c | 1 -
drivers/mfd/simple-mfd-i2c.c | 1 -
drivers/mfd/tps6594-i2c.c | 1 -
drivers/mfd/tps6594-spi.c | 1 -
drivers/mfd/upboard-fpga.c | 1 -
drivers/mfd/wm831x-core.c | 2 +-
drivers/misc/eeprom/at24.c | 1 -
drivers/misc/eeprom/ee1004.c | 1 -
drivers/misc/eeprom/eeprom_93xx46.c | 1 -
drivers/misc/eeprom/idt_89hpesx.c | 1 -
drivers/misc/hisi_hikey_usb.c | 1 -
drivers/misc/pvpanic/pvpanic-mmio.c | 1 -
drivers/misc/pvpanic/pvpanic.c | 1 -
drivers/misc/smpro-errmon.c | 1 -
drivers/misc/smpro-misc.c | 1 -
drivers/mmc/host/litex_mmc.c | 1 -
drivers/mmc/host/owl-mmc.c | 1 -
drivers/mmc/host/renesas_sdhi_internal_dmac.c | 1 -
drivers/mmc/host/renesas_sdhi_sys_dmac.c | 1 -
drivers/mmc/host/sdhci-npcm.c | 1 -
drivers/mmc/host/sdhci-of-ma35d1.c | 1 -
drivers/mmc/host/sh_mmcif.c | 1 -
drivers/mmc/host/sunxi-mmc.c | 1 -
drivers/mtd/nand/raw/brcmnand/brcmstb_nand.c | 1 -
drivers/mux/adgs1408.c | 1 -
drivers/mux/gpio.c | 1 -
drivers/net/can/spi/hi311x.c | 1 -
.../net/can/spi/mcp251xfd/mcp251xfd-core.c | 1 -
drivers/net/dsa/microchip/ksz8863_smi.c | 2 +-
drivers/net/dsa/mt7530-mmio.c | 1 -
drivers/net/dsa/ocelot/seville_vsc9953.c | 1 -
drivers/net/ethernet/calxeda/xgmac.c | 1 -
drivers/net/ethernet/ezchip/nps_enet.c | 1 -
drivers/net/ethernet/faraday/ftmac100.c | 1 -
.../net/ethernet/freescale/dpaa/dpaa_eth.c | 1 -
.../net/ethernet/freescale/enetc/enetc_ierb.c | 1 -
drivers/net/ethernet/ibm/emac/tah.c | 1 -
drivers/net/ethernet/ibm/emac/zmii.c | 1 -
drivers/net/ethernet/marvell/mvmdio.c | 1 -
.../mellanox/mlxbf_gige/mlxbf_gige_mdio.c | 1 -
drivers/net/ethernet/mellanox/mlxsw/i2c.c | 1 -
drivers/net/ethernet/mellanox/mlxsw/minimal.c | 1 -
.../ethernet/stmicro/stmmac/dwmac-nuvoton.c | 1 -
.../ethernet/stmicro/stmmac/dwmac-sophgo.c | 1 -
.../ethernet/stmicro/stmmac/dwmac-spacemit.c | 1 -
.../ethernet/stmicro/stmmac/dwmac-starfive.c | 1 -
drivers/net/ethernet/xscale/ptp_ixp46x.c | 1 -
drivers/net/ieee802154/mrf24j40.c | 1 -
drivers/net/mdio/mdio-realtek-rtl9300.c | 1 -
drivers/net/mhi_net.c | 1 -
drivers/net/wan/fsl_qmc_hdlc.c | 1 -
drivers/net/wireless/ath/ath9k/ahb.c | 1 -
.../broadcom/brcm80211/brcmfmac/dmi.c | 1 -
drivers/net/wireless/intersil/p54/p54spi.c | 1 -
drivers/net/wireless/ti/wl1251/sdio.c | 1 -
drivers/net/wireless/ti/wl12xx/main.c | 1 -
drivers/net/wireless/ti/wl18xx/main.c | 1 -
drivers/net/wwan/mhi_wwan_ctrl.c | 1 -
drivers/net/wwan/mhi_wwan_mbim.c | 1 -
drivers/net/wwan/qcom_bam_dmux.c | 1 -
drivers/net/wwan/rpmsg_wwan_ctrl.c | 1 -
drivers/nfc/microread/mei.c | 1 -
drivers/nfc/pn544/mei.c | 1 -
drivers/nfc/s3fwrn5/uart.c | 1 -
drivers/nvmem/an8855-efuse.c | 1 -
drivers/nvmem/apple-efuses.c | 1 -
drivers/nvmem/brcm_nvram.c | 1 -
drivers/nvmem/layerscape-sfp.c | 1 -
drivers/nvmem/lpc18xx_eeprom.c | 1 -
drivers/nvmem/max77759-nvmem.c | 1 -
drivers/nvmem/mtk-efuse.c | 1 -
drivers/nvmem/nintendo-otp.c | 1 -
drivers/nvmem/qfprom.c | 1 -
drivers/nvmem/qoriq-efuse.c | 1 -
drivers/nvmem/rcar-efuse.c | 1 -
drivers/nvmem/sec-qfprom.c | 1 -
drivers/nvmem/sunplus-ocotp.c | 1 -
drivers/nvmem/u-boot-env.c | 1 -
drivers/nvmem/uniphier-efuse.c | 1 -
drivers/of/device.c | 1 -
drivers/pci/controller/cadence/pcie-sg2042.c | 1 -
drivers/pci/controller/dwc/pci-exynos.c | 1 -
drivers/pci/controller/dwc/pci-meson.c | 1 -
drivers/pci/controller/dwc/pcie-intel-gw.c | 1 -
drivers/pci/controller/dwc/pcie-keembay.c | 1 -
drivers/pci/controller/dwc/pcie-spacemit-k1.c | 1 -
drivers/pci/controller/dwc/pcie-stm32.c | 1 -
drivers/pci/pwrctrl/generic.c | 1 -
drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 1 -
drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 1 -
drivers/perf/arm-ccn.c | 1 -
drivers/perf/fujitsu_uncore_pmu.c | 1 -
drivers/perf/hisilicon/hisi_uncore_mn_pmu.c | 1 -
drivers/perf/hisilicon/hisi_uncore_noc_pmu.c | 1 -
drivers/perf/hisilicon/hisi_uncore_uc_pmu.c | 1 -
drivers/perf/riscv_pmu_legacy.c | 1 -
drivers/perf/riscv_pmu_sbi.c | 1 -
drivers/perf/starfive_starlink_pmu.c | 1 -
drivers/phy/allwinner/phy-sun50i-usb3.c | 1 -
drivers/phy/amlogic/phy-meson-axg-mipi-dphy.c | 1 -
drivers/phy/amlogic/phy-meson-axg-pcie.c | 1 -
drivers/phy/amlogic/phy-meson-gxl-usb2.c | 1 -
drivers/phy/amlogic/phy-meson8b-usb2.c | 1 -
drivers/phy/cadence/cdns-dphy-rx.c | 1 -
drivers/phy/hisilicon/phy-hi3670-pcie.c | 1 -
drivers/phy/hisilicon/phy-hi6220-usb.c | 1 -
drivers/phy/intel/phy-intel-keembay-usb.c | 1 -
drivers/phy/marvell/phy-mmp3-hsic.c | 1 -
drivers/phy/marvell/phy-mmp3-usb.c | 1 -
drivers/phy/marvell/phy-mvebu-sata.c | 1 -
drivers/phy/mediatek/phy-mtk-ufs.c | 1 -
drivers/phy/phy-snps-eusb2.c | 1 -
drivers/phy/qualcomm/phy-ath79-usb.c | 1 -
.../phy/rockchip/phy-rockchip-samsung-dcphy.c | 1 -
drivers/phy/rockchip/phy-rockchip-usbdp.c | 1 -
drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c | 1 -
drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c | 1 -
drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 1 -
drivers/pinctrl/bcm/pinctrl-bcm4908.c | 1 -
drivers/pinctrl/bcm/pinctrl-bcm63xx.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx-scmi.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx23.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx25.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx27.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx28.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx35.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx50.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx51.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx53.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx6dl.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx6q.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx6sl.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx6sll.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx6sx.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx7ulp.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx8dxl.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx8mq.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx8qxp.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx8ulp.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx91.c | 1 -
drivers/pinctrl/freescale/pinctrl-imx93.c | 1 -
drivers/pinctrl/freescale/pinctrl-vf610.c | 1 -
drivers/pinctrl/intel/pinctrl-alderlake.c | 1 -
drivers/pinctrl/intel/pinctrl-broxton.c | 1 -
drivers/pinctrl/intel/pinctrl-cannonlake.c | 1 -
drivers/pinctrl/intel/pinctrl-cedarfork.c | 1 -
drivers/pinctrl/intel/pinctrl-denverton.c | 1 -
drivers/pinctrl/intel/pinctrl-elkhartlake.c | 1 -
drivers/pinctrl/intel/pinctrl-emmitsburg.c | 1 -
drivers/pinctrl/intel/pinctrl-geminilake.c | 1 -
.../pinctrl/intel/pinctrl-intel-platform.c | 1 -
drivers/pinctrl/intel/pinctrl-jasperlake.c | 1 -
drivers/pinctrl/intel/pinctrl-lakefield.c | 1 -
drivers/pinctrl/intel/pinctrl-lewisburg.c | 1 -
drivers/pinctrl/intel/pinctrl-merrifield.c | 1 -
drivers/pinctrl/intel/pinctrl-meteorlake.c | 1 -
drivers/pinctrl/intel/pinctrl-meteorpoint.c | 1 -
drivers/pinctrl/intel/pinctrl-moorefield.c | 1 -
drivers/pinctrl/intel/pinctrl-sunrisepoint.c | 1 -
drivers/pinctrl/intel/pinctrl-tigerlake.c | 1 -
.../pinctrl/microchip/pinctrl-mpfs-iomux0.c | 1 -
.../pinctrl/microchip/pinctrl-mpfs-mssio.c | 1 -
.../pinctrl/microchip/pinctrl-pic64gx-gpio2.c | 1 -
drivers/pinctrl/nuvoton/pinctrl-ma35d1.c | 1 -
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 1 -
drivers/pinctrl/nuvoton/pinctrl-npcm8xx.c | 1 -
drivers/pinctrl/nuvoton/pinctrl-wpcm450.c | 1 -
drivers/pinctrl/pinctrl-as3722.c | 1 -
drivers/pinctrl/pinctrl-cy8c95x0.c | 1 -
drivers/pinctrl/pinctrl-da850-pupd.c | 1 -
drivers/pinctrl/pinctrl-digicolor.c | 1 -
drivers/pinctrl/pinctrl-eic7700.c | 1 -
drivers/pinctrl/pinctrl-eyeq5.c | 1 -
drivers/pinctrl/pinctrl-ingenic.c | 1 -
drivers/pinctrl/pinctrl-loongson2.c | 1 -
drivers/pinctrl/pinctrl-lpc18xx.c | 1 -
drivers/pinctrl/pinctrl-max77620.c | 1 -
drivers/pinctrl/pinctrl-mcp23s08.c | 1 -
drivers/pinctrl/pinctrl-mcp23s08_i2c.c | 1 -
drivers/pinctrl/pinctrl-mcp23s08_spi.c | 1 -
drivers/pinctrl/pinctrl-microchip-sgpio.c | 1 -
drivers/pinctrl/pinctrl-mlxbf3.c | 1 -
drivers/pinctrl/pinctrl-pistachio.c | 1 -
drivers/pinctrl/pinctrl-scmi.c | 1 -
drivers/pinctrl/pinctrl-th1520.c | 1 -
drivers/pinctrl/pinctrl-tps6594.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5018.c | 1 -
drivers/pinctrl/spear/pinctrl-spear1310.c | 1 -
drivers/pinctrl/spear/pinctrl-spear1340.c | 1 -
drivers/pinctrl/spear/pinctrl-spear300.c | 1 -
drivers/pinctrl/spear/pinctrl-spear310.c | 1 -
drivers/pinctrl/spear/pinctrl-spear320.c | 1 -
drivers/pinctrl/sprd/pinctrl-sprd-sc9860.c | 1 -
.../starfive/pinctrl-starfive-jh7100.c | 1 -
.../starfive/pinctrl-starfive-jh7110-aon.c | 1 -
.../starfive/pinctrl-starfive-jh7110-sys.c | 1 -
.../starfive/pinctrl-starfive-jh7110.c | 1 -
drivers/pinctrl/tegra/pinctrl-tegra234.c | 1 -
drivers/pinctrl/tegra/pinctrl-tegra238.c | 1 -
drivers/pinctrl/tegra/pinctrl-tegra264.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-ld11.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-ld20.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-ld4.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-ld6b.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-nx1.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-pro4.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-pro5.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-pxs2.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-pxs3.c | 1 -
.../pinctrl/uniphier/pinctrl-uniphier-sld8.c | 1 -
drivers/platform/chrome/cros_ec_chardev.c | 1 -
drivers/platform/chrome/cros_ec_debugfs.c | 1 -
drivers/platform/chrome/cros_ec_lightbar.c | 1 -
drivers/platform/chrome/cros_ec_sensorhub.c | 1 -
drivers/platform/chrome/cros_ec_sysfs.c | 1 -
drivers/platform/chrome/cros_ec_vbc.c | 1 -
.../platform/chrome/cros_kbd_led_backlight.c | 1 -
drivers/platform/chrome/cros_usbpd_logger.c | 1 -
drivers/platform/chrome/cros_usbpd_notify.c | 1 -
drivers/platform/chrome/wilco_ec/core.c | 1 -
drivers/platform/chrome/wilco_ec/debugfs.c | 1 -
drivers/platform/chrome/wilco_ec/telemetry.c | 1 -
drivers/platform/goldfish/goldfish_pipe.c | 1 -
drivers/platform/x86/asus-tf103c-dock.c | 1 -
drivers/platform/x86/intel/atomisp2/led.c | 1 -
drivers/platform/x86/intel/atomisp2/pm.c | 1 -
drivers/platform/x86/intel/bxtwc_tmu.c | 1 -
drivers/platform/x86/intel/ehl_pse_io.c | 1 -
drivers/platform/x86/intel/plr_tpmi.c | 1 -
drivers/platform/x86/intel/punit_ipc.c | 1 -
drivers/platform/x86/intel_scu_pltdrv.c | 1 -
drivers/platform/x86/msi-ec.c | 1 +
.../platform/x86/nvidia-wmi-ec-backlight.c | 1 -
drivers/platform/x86/quickstart.c | 1 -
drivers/platform/x86/uniwill/uniwill-wmi.c | 1 -
.../platform/x86/x86-android-tablets/dmi.c | 1 -
.../x86-android-tablets/x86-android-tablets.h | 1 +
drivers/pmdomain/actions/owl-sps.c | 1 -
drivers/pmdomain/imx/imx93-pd.c | 1 -
.../marvell/pxa1908-power-controller.c | 1 -
drivers/pnp/pnpacpi/core.c | 1 -
drivers/power/reset/brcm-kona-reset.c | 1 -
drivers/power/reset/ep93xx-restart.c | 1 -
drivers/power/reset/gpio-poweroff.c | 1 -
drivers/power/reset/ltc2952-poweroff.c | 1 -
drivers/power/reset/macsmc-reboot.c | 1 -
drivers/power/reset/ocelot-reset.c | 1 -
drivers/power/reset/pwr-mlxbf.c | 1 -
drivers/power/reset/qemu-virt-ctrl.c | 1 -
drivers/power/reset/sc27xx-poweroff.c | 1 -
drivers/power/reset/spacemit-p1-reboot.c | 1 -
drivers/power/reset/tdx-ec-poweroff.c | 1 -
drivers/power/reset/tps65086-restart.c | 1 -
drivers/power/sequencing/pwrseq-pcie-m2.c | 1 -
drivers/power/sequencing/pwrseq-qcom-wcn.c | 1 -
drivers/power/supply/adp5061.c | 1 -
drivers/power/supply/bd71828-power.c | 1 -
drivers/power/supply/bd99954-charger.c | 1 -
drivers/power/supply/bq24190_charger.c | 1 -
drivers/power/supply/chagall-battery.c | 1 -
drivers/power/supply/cpcap-charger.c | 1 -
drivers/power/supply/cros_charge-control.c | 1 -
.../power/supply/cros_peripheral_charger.c | 1 -
drivers/power/supply/cros_usbpd-charger.c | 1 -
drivers/power/supply/lego_ev3_battery.c | 1 -
.../power/supply/max14656_charger_detector.c | 1 -
drivers/power/supply/max17042_battery.c | 1 -
drivers/power/supply/max77759_charger.c | 1 -
drivers/power/supply/max8971_charger.c | 1 -
drivers/power/supply/max8998_charger.c | 1 -
drivers/power/supply/mp2629_charger.c | 1 -
drivers/power/supply/olpc_battery.c | 1 -
drivers/power/supply/pm8916_bms_vm.c | 1 -
drivers/power/supply/pm8916_lbc.c | 1 -
drivers/power/supply/rt5033_charger.c | 1 -
drivers/power/supply/rt9467-charger.c | 1 -
drivers/power/supply/rt9471.c | 1 -
drivers/power/supply/rt9756.c | 1 -
drivers/power/supply/s2mu005-battery.c | 1 -
drivers/power/supply/ug3105_battery.c | 1 -
drivers/pps/clients/pps-gpio.c | 1 -
drivers/pps/generators/pps_gen_tio.c | 1 -
drivers/ptp/ptp_dte.c | 1 -
drivers/pwm/pwm-adp5585.c | 1 -
drivers/pwm/pwm-airoha.c | 1 -
drivers/pwm/pwm-apple.c | 1 -
drivers/pwm/pwm-berlin.c | 1 -
drivers/pwm/pwm-ep93xx.c | 1 -
drivers/pwm/pwm-gpio.c | 1 -
drivers/pwm/pwm-intel-lgm.c | 1 -
drivers/pwm/pwm-keembay.c | 1 -
drivers/pwm/pwm-lpc18xx-sct.c | 1 -
drivers/pwm/pwm-lpss-platform.c | 1 -
drivers/pwm/pwm-max7360.c | 1 -
drivers/pwm/pwm-pxa.c | 1 -
drivers/pwm/pwm-sifive.c | 1 -
drivers/pwm/pwm-sl28cpld.c | 1 -
drivers/pwm/pwm-sprd.c | 1 -
drivers/pwm/pwm-sunplus.c | 1 -
drivers/pwm/pwm-vt8500.c | 1 -
drivers/regulator/adp5055-regulator.c | 1 -
drivers/regulator/bd71828-regulator.c | 1 -
drivers/regulator/max77541-regulator.c | 1 -
drivers/regulator/max77675-regulator.c | 1 -
drivers/regulator/mt6370-regulator.c | 1 -
drivers/regulator/pv88080-regulator.c | 1 -
drivers/regulator/rt4803.c | 1 -
drivers/regulator/rt5739.c | 1 -
drivers/regulator/rt6190-regulator.c | 1 -
drivers/regulator/rt8092.c | 1 -
drivers/regulator/rtq2208-regulator.c | 1 -
drivers/regulator/tps6287x-regulator.c | 1 -
drivers/regulator/tps65218-regulator.c | 1 -
drivers/regulator/tps65912-regulator.c | 1 -
drivers/regulator/vexpress-regulator.c | 1 -
drivers/reset/reset-ath79.c | 1 -
drivers/reset/reset-axs10x.c | 1 -
drivers/reset/reset-bcm6345.c | 1 -
drivers/reset/reset-eyeq.c | 1 -
drivers/reset/reset-gpio.c | 1 -
drivers/reset/reset-sunplus.c | 1 -
drivers/reset/reset-tn48m.c | 1 -
.../reset/starfive/reset-starfive-jh7100.c | 1 -
drivers/rtc/rtc-88pm886.c | 1 -
drivers/rtc/rtc-cpcap.c | 1 -
drivers/rtc/rtc-cros-ec.c | 1 -
drivers/rtc/rtc-ds1307.c | 1 -
drivers/rtc/rtc-ep93xx.c | 1 -
drivers/rtc/rtc-fsl-ftm-alarm.c | 1 -
drivers/rtc/rtc-ftrtc010.c | 1 -
drivers/rtc/rtc-lpc24xx.c | 1 -
drivers/rtc/rtc-m48t86.c | 1 -
drivers/rtc/rtc-mc13xxx.c | 1 -
drivers/rtc/rtc-moxart.c | 1 -
drivers/rtc/rtc-msc313.c | 1 -
drivers/rtc/rtc-mt6397.c | 1 -
drivers/rtc/rtc-mt7622.c | 1 -
drivers/rtc/rtc-mxc_v2.c | 1 -
drivers/rtc/rtc-r7301.c | 1 -
drivers/rtc/rtc-rzn1.c | 1 -
drivers/rtc/rtc-sh.c | 1 -
drivers/rtc/rtc-ssd202d.c | 1 -
drivers/rtc/rtc-tegra.c | 1 -
drivers/rtc/rtc-ti-k3.c | 1 -
drivers/rtc/rtc-tps6594.c | 1 -
drivers/s390/crypto/ap_bus.c | 2 +-
drivers/s390/crypto/vfio_ap_drv.c | 2 +-
drivers/s390/crypto/zcrypt_cex4.c | 2 +-
drivers/siox/siox-bus-gpio.c | 1 -
drivers/soc/fsl/qe/qe.c | 1 -
drivers/soc/qcom/qcom_pd_mapper.c | 1 -
drivers/soc/renesas/rzn1_irqmux.c | 1 -
drivers/soc/sophgo/sg2044-topsys.c | 2 +-
drivers/soc/tegra/fuse/fuse-tegra.c | 1 -
drivers/soc/tegra/fuse/tegra-apbmisc.c | 1 -
drivers/soc/ti/smartreflex.c | 2 +-
drivers/soundwire/bus.c | 1 -
drivers/soundwire/bus_type.c | 1 -
drivers/soundwire/cadence_master.c | 1 -
drivers/soundwire/debugfs.c | 1 -
.../soundwire/generic_bandwidth_allocation.c | 1 -
drivers/soundwire/mipi_disco.c | 1 -
drivers/soundwire/stream.c | 1 -
drivers/soundwire/sysfs_slave.c | 1 -
drivers/soundwire/sysfs_slave_dpn.c | 1 -
drivers/spi/spi-atcspi200.c | 1 -
drivers/spi/spi-cs42l43.c | 1 -
drivers/spi/spi-gpio.c | 1 -
drivers/spi/spi-hisi-sfc-v3xx.c | 1 -
drivers/spi/spi-loongson-pci.c | 1 -
drivers/spi/spi-loongson-plat.c | 1 -
drivers/spi/spi-loopback-test.c | 1 -
...spi-offload-trigger-adi-util-sigma-delta.c | 1 -
drivers/spi/spi-offload-trigger-pwm.c | 1 -
drivers/spi/spi-pxa2xx-platform.c | 1 -
drivers/spi/spi-realtek-rtl-snand.c | 1 -
drivers/spi/spi-realtek-rtl.c | 1 -
drivers/spi/spi-sc18is602.c | 1 -
drivers/spi/spi-wpcm-fiu.c | 1 -
drivers/spi/spi.c | 1 -
drivers/spi/spidev.c | 1 -
drivers/spmi/spmi-apple-controller.c | 1 -
drivers/staging/greybus/arche-apb-ctrl.c | 1 -
drivers/thermal/loongson2_thermal.c | 1 -
drivers/thermal/renesas/rzg2l_thermal.c | 1 -
drivers/tty/goldfish.c | 1 -
drivers/tty/serial/8250/8250_dfl.c | 1 -
drivers/tty/serial/8250/8250_dw.c | 1 -
drivers/tty/serial/8250/8250_em.c | 1 -
drivers/tty/serial/8250/8250_keba.c | 1 -
drivers/tty/serial/8250/8250_loongson.c | 1 -
drivers/tty/serial/8250/8250_ni.c | 1 -
drivers/tty/serial/max3100.c | 1 -
drivers/tty/serial/max310x.c | 1 -
drivers/tty/serial/sc16is7xx.c | 1 -
drivers/tty/serial/sc16is7xx_i2c.c | 1 -
drivers/tty/serial/sc16is7xx_spi.c | 1 -
drivers/tty/serial/sccnxp.c | 1 -
drivers/tty/serial/tegra-utc.c | 1 -
drivers/uio/uio_pdrv_genirq.c | 1 -
drivers/usb/dwc2/core.h | 1 +
drivers/usb/gadget/udc/renesas_usbf.c | 1 -
drivers/usb/misc/usb-ljca.c | 1 -
drivers/usb/typec/mux/tusb1046.c | 1 -
drivers/usb/typec/tcpm/qcom/qcom_pmic_typec.c | 1 -
.../typec/tcpm/qcom/qcom_pmic_typec_pdphy.c | 1 -
.../tcpm/qcom/qcom_pmic_typec_pdphy_stub.c | 1 -
.../typec/tcpm/qcom/qcom_pmic_typec_port.c | 1 -
drivers/usb/typec/tcpm/tcpci_mt6370.c | 1 -
drivers/usb/typec/tcpm/tcpci_rt1711h.c | 1 -
drivers/usb/typec/ucsi/cros_ec_ucsi.c | 1 -
drivers/vdpa/vdpa.c | 1 -
drivers/vdpa/vdpa_user/vduse_dev.c | 1 -
drivers/video/backlight/apple_dwi_bl.c | 1 -
drivers/video/backlight/da9052_bl.c | 1 -
drivers/video/backlight/hx8357.c | 1 -
drivers/video/backlight/ktd2801-backlight.c | 1 -
drivers/video/backlight/mp3309c.c | 1 -
drivers/video/backlight/mt6370-backlight.c | 1 -
drivers/video/backlight/rave-sp-backlight.c | 1 -
drivers/video/backlight/rt4831-backlight.c | 1 -
.../omap2/omapfb/displays/encoder-opa362.c | 1 -
.../omap2/omapfb/displays/encoder-tfp410.c | 1 -
.../omap2/omapfb/displays/encoder-tpd12s015.c | 1 -
.../omap2/omapfb/displays/panel-dsi-cm.c | 1 -
.../virt/coco/arm-cca-guest/arm-cca-guest.c | 2 +-
drivers/virt/coco/tdx-guest/tdx-guest.c | 1 -
drivers/virt/coco/tdx-host/tdx-host.c | 1 -
drivers/w1/masters/amd_axi_w1.c | 1 -
drivers/w1/masters/ds2490.c | 1 -
drivers/w1/masters/mxc_w1.c | 1 -
drivers/w1/masters/sgi_w1.c | 1 -
drivers/w1/masters/w1-gpio.c | 1 -
drivers/watchdog/at91rm9200_wdt.c | 1 -
drivers/watchdog/cros_ec_wdt.c | 1 -
drivers/watchdog/davinci_wdt.c | 1 -
drivers/watchdog/ftwdt010_wdt.c | 1 -
drivers/watchdog/gpio_wdt.c | 1 -
drivers/watchdog/gunyah_wdt.c | 1 -
drivers/watchdog/imgpdc_wdt.c | 1 -
drivers/watchdog/keembay_wdt.c | 1 -
drivers/watchdog/max63xx_wdt.c | 1 -
drivers/watchdog/max77620_wdt.c | 1 -
drivers/watchdog/meson_wdt.c | 1 -
drivers/watchdog/moxart_wdt.c | 1 -
drivers/watchdog/msc313e_wdt.c | 1 -
drivers/watchdog/mt7621_wdt.c | 1 -
drivers/watchdog/nic7018_wdt.c | 1 -
drivers/watchdog/omap_wdt.c | 1 -
drivers/watchdog/pseries-wdt.c | 1 -
drivers/watchdog/realtek_otto_wdt.c | 1 -
drivers/watchdog/rt2880_wdt.c | 1 -
drivers/watchdog/rti_wdt.c | 1 -
drivers/watchdog/sbsa_gwdt.c | 1 -
drivers/watchdog/sl28cpld_wdt.c | 1 -
drivers/watchdog/sunplus_wdt.c | 1 -
drivers/watchdog/ts72xx_wdt.c | 1 -
drivers/watchdog/twl4030_wdt.c | 1 -
drivers/watchdog/xilinx_wwdt.c | 1 -
include/linux/acpi.h | 2 +-
include/linux/amba/bus.h | 2 +-
include/linux/auxiliary_bus.h | 2 +-
include/linux/bcma/bcma.h | 2 +-
include/linux/cdx/cdx_bus.h | 2 +-
include/linux/device/driver.h | 2 +
include/linux/dfl.h | 2 +-
include/linux/dmi.h | 2 +-
include/linux/eisa.h | 2 +-
include/linux/firewire.h | 3 +-
include/linux/fsl/mc.h | 2 +-
include/linux/hid.h | 2 +-
include/linux/hyperv.h | 2 +-
include/linux/i2c.h | 2 +-
include/linux/i3c/device.h | 2 +-
include/linux/input.h | 2 +-
include/linux/intel-ish-client-if.h | 2 +-
include/linux/ipack.h | 2 +-
include/linux/isapnp.h | 2 +-
include/linux/mcb.h | 2 +-
include/linux/mei_cl_bus.h | 2 +-
include/linux/mhi.h | 1 +
include/linux/mmc/sdio_func.h | 2 +-
include/linux/mod_device_id/acpi.h | 31 +
include/linux/mod_device_id/amba.h | 18 +
include/linux/mod_device_id/ap.h | 19 +
include/linux/mod_device_id/apr.h | 20 +
include/linux/mod_device_id/auxiliary.h | 16 +
include/linux/mod_device_id/bcma.h | 24 +
include/linux/mod_device_id/ccw.h | 26 +
include/linux/mod_device_id/cdx.h | 39 +
include/linux/mod_device_id/coreboot.h | 19 +
include/linux/mod_device_id/css.h | 16 +
include/linux/mod_device_id/dfl.h | 33 +
include/linux/mod_device_id/dmi.h | 57 +
include/linux/mod_device_id/eisa.h | 20 +
include/linux/mod_device_id/fsl_mc.h | 21 +
include/linux/mod_device_id/hda.h | 16 +
include/linux/mod_device_id/hid.h | 21 +
include/linux/mod_device_id/hv_vmbus.h | 17 +
include/linux/mod_device_id/i2c.h | 18 +
include/linux/mod_device_id/i3c.h | 25 +
include/linux/mod_device_id/ieee1394.h | 26 +
include/linux/mod_device_id/input.h | 61 +
include/linux/mod_device_id/ipack.h | 16 +
include/linux/mod_device_id/isapnp.h | 15 +
include/linux/mod_device_id/ishtp.h | 23 +
include/linux/mod_device_id/mcb.h | 14 +
include/linux/mod_device_id/mdio.h | 34 +
include/linux/mod_device_id/mei_cl.h | 30 +
include/linux/mod_device_id/mhi.h | 23 +
include/linux/mod_device_id/mips_cdmm.h | 16 +
include/linux/mod_device_id/of.h | 14 +
include/linux/mod_device_id/parisc.h | 20 +
include/linux/mod_device_id/pci.h | 53 +
include/linux/mod_device_id/pcmcia.h | 47 +
include/linux/mod_device_id/platform.h | 16 +
include/linux/mod_device_id/pnp.h | 25 +
include/linux/mod_device_id/rio.h | 27 +
include/linux/mod_device_id/rpmsg.h | 18 +
include/linux/mod_device_id/sdio.h | 20 +
include/linux/mod_device_id/sdw.h | 17 +
include/linux/mod_device_id/serio.h | 17 +
include/linux/mod_device_id/slim.h | 22 +
include/linux/mod_device_id/spi.h | 18 +
include/linux/mod_device_id/spmi.h | 16 +
include/linux/mod_device_id/ssam.h | 27 +
include/linux/mod_device_id/ssb.h | 23 +
include/linux/mod_device_id/tb.h | 36 +
include/linux/mod_device_id/tee_client.h | 17 +
include/linux/mod_device_id/typec.h | 25 +
include/linux/mod_device_id/ulpi.h | 15 +
include/linux/mod_device_id/usb.h | 110 ++
include/linux/mod_device_id/vchiq.h | 8 +
include/linux/mod_device_id/vio.h | 10 +
include/linux/mod_device_id/virtio.h | 15 +
include/linux/mod_device_id/wmi.h | 18 +
include/linux/mod_device_id/x86_cpu.h | 43 +
include/linux/mod_device_id/zorro.h | 18 +
include/linux/mod_devicetable.h | 1014 +----------------
include/linux/of.h | 2 +-
include/linux/of_platform.h | 4 +-
include/linux/pci-epf.h | 2 +-
include/linux/pci.h | 2 +-
include/linux/phy.h | 2 +-
include/linux/platform_data/x86/int3472.h | 2 +-
include/linux/platform_data/x86/soc.h | 2 +-
include/linux/platform_device.h | 2 +-
include/linux/pnp.h | 2 +-
include/linux/raspberrypi/vchiq_bus.h | 2 +-
include/linux/rio.h | 2 +-
include/linux/rpmsg.h | 2 +-
include/linux/serio.h | 2 +-
include/linux/slimbus.h | 2 +-
include/linux/soc/qcom/apr.h | 2 +-
include/linux/soundwire/sdw.h | 2 +-
include/linux/spi/spi.h | 4 +-
include/linux/ssb/ssb.h | 2 +-
include/linux/surface_aggregator/device.h | 2 +-
include/linux/tee_drv.h | 2 +-
include/linux/thunderbolt.h | 2 +-
include/linux/ulpi/driver.h | 2 +-
include/linux/usb.h | 2 +-
include/linux/usb/serial.h | 1 +
include/linux/usb/typec_altmode.h | 2 +-
include/linux/virtio.h | 2 +-
include/linux/wmi.h | 2 +-
include/linux/zorro.h | 2 +-
include/pcmcia/ds.h | 2 +-
include/sound/hda_codec.h | 2 +-
include/sound/hdaudio.h | 1 +
net/qrtr/mhi.c | 1 -
net/rfkill/rfkill-gpio.c | 1 -
sound/atmel/ac97c.c | 1 -
sound/firewire/isight.c | 1 -
.../hda/codecs/side-codecs/cs35l41_hda_i2c.c | 1 -
.../hda/codecs/side-codecs/cs35l41_hda_spi.c | 1 -
.../hda/codecs/side-codecs/tas2781_hda_i2c.c | 1 -
.../hda/codecs/side-codecs/tas2781_hda_spi.c | 1 -
sound/hda/core/hda_bus_type.c | 2 +-
sound/soc/atmel/sam9x5_wm8731.c | 1 -
sound/soc/codecs/adau1372-i2c.c | 1 -
sound/soc/codecs/adau1372-spi.c | 1 -
sound/soc/codecs/adau1372.c | 1 -
sound/soc/codecs/adau1761-i2c.c | 1 -
sound/soc/codecs/adau1761-spi.c | 1 -
sound/soc/codecs/adau1781-i2c.c | 1 -
sound/soc/codecs/adau1781-spi.c | 1 -
sound/soc/codecs/adau1977-i2c.c | 1 -
sound/soc/codecs/adau1977-spi.c | 1 -
sound/soc/codecs/adau7118-hw.c | 1 -
sound/soc/codecs/ak4104.c | 1 -
sound/soc/codecs/audio-iio-aux.c | 1 -
sound/soc/codecs/cs4234.c | 1 -
sound/soc/codecs/cs4270.c | 1 -
sound/soc/codecs/cs42l42-sdw.c | 1 -
sound/soc/codecs/cs42l43.c | 1 -
sound/soc/codecs/cs42xx8-i2c.c | 1 -
sound/soc/codecs/cs42xx8-spi.c | 1 -
sound/soc/codecs/cs4349.c | 1 -
sound/soc/codecs/es8316.c | 1 -
sound/soc/codecs/es8323.c | 1 -
sound/soc/codecs/es9356.c | 1 -
sound/soc/codecs/max98357a.c | 1 -
sound/soc/codecs/max98373-i2c.c | 1 -
sound/soc/codecs/max98373-sdw.c | 1 -
sound/soc/codecs/max98388.c | 1 -
sound/soc/codecs/mt6351.c | 1 -
sound/soc/codecs/mt6358.c | 1 -
sound/soc/codecs/pcm3168a-i2c.c | 1 -
sound/soc/codecs/rt1017-sdca-sdw.c | 1 -
sound/soc/codecs/rt1308-sdw.c | 1 -
sound/soc/codecs/rt1316-sdw.c | 1 -
sound/soc/codecs/rt1318-sdw.c | 1 -
sound/soc/codecs/rt1320-sdw.c | 1 -
sound/soc/codecs/rt700-sdw.c | 1 -
sound/soc/codecs/rt711-sdca-sdw.c | 1 -
sound/soc/codecs/rt711-sdw.c | 1 -
sound/soc/codecs/rt712-sdca-dmic.c | 1 -
sound/soc/codecs/rt712-sdca-sdw.c | 1 -
sound/soc/codecs/rt715-sdca-sdw.c | 1 -
sound/soc/codecs/rt715-sdw.c | 1 -
sound/soc/codecs/rt721-sdca-sdw.c | 1 -
sound/soc/codecs/rt722-sdca-sdw.c | 1 -
sound/soc/codecs/rt9123.c | 1 -
sound/soc/codecs/rt9123p.c | 1 -
sound/soc/codecs/rtq9124.c | 1 -
sound/soc/codecs/rtq9128.c | 1 -
sound/soc/codecs/sdw-mockup.c | 1 -
sound/soc/codecs/simple-amplifier.c | 1 -
sound/soc/codecs/sma1303.c | 1 -
sound/soc/codecs/src4xxx-i2c.c | 1 -
sound/soc/codecs/uda1334.c | 1 -
sound/soc/codecs/wm8510.c | 1 -
sound/soc/codecs/wm8523.c | 1 -
sound/soc/codecs/wm8524.c | 1 -
sound/soc/codecs/wm8580.c | 1 -
sound/soc/codecs/wm8711.c | 1 -
sound/soc/codecs/wm8728.c | 1 -
sound/soc/codecs/wm8731-i2c.c | 1 -
sound/soc/codecs/wm8731-spi.c | 1 -
sound/soc/codecs/wm8737.c | 1 -
sound/soc/codecs/wm8753.c | 1 -
sound/soc/codecs/wm8770.c | 1 -
sound/soc/codecs/wm8776.c | 1 -
sound/soc/fsl/fsl_aud2htx.c | 1 -
sound/soc/fsl/mpc5200_psc_ac97.c | 1 -
.../generic/audio-graph-card2-custom-sample.c | 1 -
sound/soc/jz4740/jz4740-i2s.c | 1 -
sound/soc/mediatek/mt8365/mt8365-mt6357.c | 1 -
sound/soc/qcom/apq8096.c | 1 -
sound/soc/qcom/sc7280.c | 1 -
sound/soc/qcom/storm.c | 1 -
sound/soc/rockchip/rockchip_sai.c | 1 +
sound/soc/sdca/sdca_class.c | 1 -
sound/soc/sof/sof-client-ipc-flood-test.c | 1 -
.../soc/sof/sof-client-ipc-kernel-injector.c | 1 -
sound/soc/sof/sof-client-ipc-msg-injector.c | 1 -
sound/soc/sunxi/sun50i-codec-analog.c | 1 -
sound/soc/sunxi/sun50i-dmic.c | 1 -
sound/soc/tegra/tegra186_asrc.c | 1 -
sound/soc/tegra/tegra186_dspk.c | 1 -
sound/soc/tegra/tegra20_spdif.c | 1 -
sound/soc/tegra/tegra210_adx.c | 1 -
sound/soc/tegra/tegra210_amx.c | 1 -
sound/soc/tegra/tegra210_dmic.c | 1 -
sound/soc/tegra/tegra210_i2s.c | 1 -
sound/soc/tegra/tegra210_mixer.c | 1 -
sound/soc/tegra/tegra210_mvc.c | 1 -
sound/soc/tegra/tegra210_ope.c | 1 -
sound/soc/ti/omap-dmic.c | 1 -
sound/soc/ti/omap-mcpdm.c | 1 -
tools/testing/cxl/test/mem.c | 1 -
1633 files changed, 1576 insertions(+), 2527 deletions(-)
create mode 100644 include/linux/mod_device_id/acpi.h
create mode 100644 include/linux/mod_device_id/amba.h
create mode 100644 include/linux/mod_device_id/ap.h
create mode 100644 include/linux/mod_device_id/apr.h
create mode 100644 include/linux/mod_device_id/auxiliary.h
create mode 100644 include/linux/mod_device_id/bcma.h
create mode 100644 include/linux/mod_device_id/ccw.h
create mode 100644 include/linux/mod_device_id/cdx.h
create mode 100644 include/linux/mod_device_id/coreboot.h
create mode 100644 include/linux/mod_device_id/css.h
create mode 100644 include/linux/mod_device_id/dfl.h
create mode 100644 include/linux/mod_device_id/dmi.h
create mode 100644 include/linux/mod_device_id/eisa.h
create mode 100644 include/linux/mod_device_id/fsl_mc.h
create mode 100644 include/linux/mod_device_id/hda.h
create mode 100644 include/linux/mod_device_id/hid.h
create mode 100644 include/linux/mod_device_id/hv_vmbus.h
create mode 100644 include/linux/mod_device_id/i2c.h
create mode 100644 include/linux/mod_device_id/i3c.h
create mode 100644 include/linux/mod_device_id/ieee1394.h
create mode 100644 include/linux/mod_device_id/input.h
create mode 100644 include/linux/mod_device_id/ipack.h
create mode 100644 include/linux/mod_device_id/isapnp.h
create mode 100644 include/linux/mod_device_id/ishtp.h
create mode 100644 include/linux/mod_device_id/mcb.h
create mode 100644 include/linux/mod_device_id/mdio.h
create mode 100644 include/linux/mod_device_id/mei_cl.h
create mode 100644 include/linux/mod_device_id/mhi.h
create mode 100644 include/linux/mod_device_id/mips_cdmm.h
create mode 100644 include/linux/mod_device_id/of.h
create mode 100644 include/linux/mod_device_id/parisc.h
create mode 100644 include/linux/mod_device_id/pci.h
create mode 100644 include/linux/mod_device_id/pcmcia.h
create mode 100644 include/linux/mod_device_id/platform.h
create mode 100644 include/linux/mod_device_id/pnp.h
create mode 100644 include/linux/mod_device_id/rio.h
create mode 100644 include/linux/mod_device_id/rpmsg.h
create mode 100644 include/linux/mod_device_id/sdio.h
create mode 100644 include/linux/mod_device_id/sdw.h
create mode 100644 include/linux/mod_device_id/serio.h
create mode 100644 include/linux/mod_device_id/slim.h
create mode 100644 include/linux/mod_device_id/spi.h
create mode 100644 include/linux/mod_device_id/spmi.h
create mode 100644 include/linux/mod_device_id/ssam.h
create mode 100644 include/linux/mod_device_id/ssb.h
create mode 100644 include/linux/mod_device_id/tb.h
create mode 100644 include/linux/mod_device_id/tee_client.h
create mode 100644 include/linux/mod_device_id/typec.h
create mode 100644 include/linux/mod_device_id/ulpi.h
create mode 100644 include/linux/mod_device_id/usb.h
create mode 100644 include/linux/mod_device_id/vchiq.h
create mode 100644 include/linux/mod_device_id/vio.h
create mode 100644 include/linux/mod_device_id/virtio.h
create mode 100644 include/linux/mod_device_id/wmi.h
create mode 100644 include/linux/mod_device_id/x86_cpu.h
create mode 100644 include/linux/mod_device_id/zorro.h
base-commit: ef0c9f75a19532d7675384708fc8621e10850104
--
2.47.3
^ permalink raw reply
* [PATCH] fix: i2c: i2c_mux_add_adapter: fix child device_node reference leak on adapter registration failure
From: WenTao Liang @ 2026-06-26 15:03 UTC (permalink / raw)
To: Wolfram Sang, linux-i2c; +Cc: Peter Rosin, stable, linux-kernel, WenTao Liang
When the OF block successfully acquires a child device_node reference and
stores it in priv->adap.dev.of_node, but the subsequent
i2c_add_numbered_adapter or i2c_add_adapter call fails, the error path
jumps to err_free_priv which only kfree's the priv without calling
of_node_put on the stored child node, leaking the reference.
Add of_node_put(priv->adap.dev.of_node) in the err_free_priv error path.
Cc: stable@vger.kernel.org
Fixes: a7ab72390b77 ("i2c: mux: add common data for every i2c-mux instance")
Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
---
drivers/i2c/i2c-mux.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c
index 681a201c239b..68a4c34b5987 100644
--- a/drivers/i2c/i2c-mux.c
+++ b/drivers/i2c/i2c-mux.c
@@ -408,6 +408,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
return 0;
err_free_priv:
+ of_node_put(priv->adap.dev.of_node);
kfree(priv);
return ret;
}
--
2.39.5 (Apple Git-154)
^ permalink raw reply related
* RE: [PATCH v3 1/2] i2c: imx: Clear slave pointer on registration error
From: liem @ 2026-06-26 8:30 UTC (permalink / raw)
To: carlos.song
Cc: andi.shyti, biwen.li, festevam, frank.li, frank.li, imx, kernel,
liem16213, linux-arm-kernel, linux-i2c, linux-kernel, o.rempel,
s.hauer, stable, wsa
In-Reply-To: <AM0PR04MB6802B863CD9B9AE1609C1785E8EB2@AM0PR04MB6802.eurprd04.prod.outlook.com>
Hi, carlos!
Thanks for the review.
This is a good idea; this is a better way to fix it.
I'll fix Patch 1 as suggested and send a v4.
Regards,
Liem
^ permalink raw reply
* RE: [PATCH v3 2/2] i2c: imx: Cancel hrtimer before clearing slave pointer
From: Carlos Song (OSS) @ 2026-06-26 6:26 UTC (permalink / raw)
To: Liem, Frank Li (OSS)
Cc: Frank Li, andi.shyti@kernel.org, Biwen Li, festevam@gmail.com,
imx@lists.linux.dev, kernel@pengutronix.de,
linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org, o.rempel@pengutronix.de,
s.hauer@pengutronix.de, stable@vger.kernel.org, wsa@kernel.org
In-Reply-To: <20260626025846.106157-3-liem16213@gmail.com>
> -----Original Message-----
> From: Liem <liem16213@gmail.com>
> Sent: Friday, June 26, 2026 10:59 AM
> To: Frank Li (OSS) <frank.li@oss.nxp.com>
> Cc: Frank Li <frank.li@nxp.com>; andi.shyti@kernel.org; Biwen Li
> <biwen.li@nxp.com>; festevam@gmail.com; imx@lists.linux.dev;
> kernel@pengutronix.de; liem16213@gmail.com;
> linux-arm-kernel@lists.infradead.org; linux-i2c@vger.kernel.org;
> linux-kernel@vger.kernel.org; o.rempel@pengutronix.de;
> s.hauer@pengutronix.de; stable@vger.kernel.org; wsa@kernel.org
> Subject: [PATCH v3 2/2] i2c: imx: Cancel hrtimer before clearing slave pointer
>
> In i2c_imx_unreg_slave(), the slave pointer is set to NULL after disabling
> interrupts. However, a pending interrupt might already have started the
> hrtimer (i2c_imx_slave_timeout) before the pointer was cleared. If the hrtimer
> fires after i2c_imx->slave is set to NULL, the timer callback
> i2c_imx_slave_finish_op() will call
> i2c_imx_slave_event() with a NULL slave pointer,which results in a use-after-free /
> NULL pointer dereference.
>
> Fix by canceling the hrtimer and waiting for it to complete after disabling
> interrupts, before clearing the slave pointer.
>
> Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Liem <liem16213@gmail.com>
Hi,
LGTM, thank you very much!
Acked-by: Carlos Song <carlos.song@nxp.com>
> ---
> drivers/i2c/busses/i2c-imx.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index
> 17defb470776..f02c216ba299 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
> @@ -959,6 +959,7 @@ static int i2c_imx_unreg_slave(struct i2c_client *client)
>
> i2c_imx_reset_regs(i2c_imx);
>
> + hrtimer_cancel(&i2c_imx->slave_timer);
> i2c_imx->slave = NULL;
>
> /* Suspend */
> --
> 2.34.1
>
^ permalink raw reply
* RE: [PATCH v3 1/2] i2c: imx: Clear slave pointer on registration error
From: Carlos Song (OSS) @ 2026-06-26 6:23 UTC (permalink / raw)
To: Liem, Frank Li (OSS)
Cc: Frank Li, andi.shyti@kernel.org, Biwen Li, festevam@gmail.com,
imx@lists.linux.dev, kernel@pengutronix.de,
linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org, o.rempel@pengutronix.de,
s.hauer@pengutronix.de, stable@vger.kernel.org, wsa@kernel.org
In-Reply-To: <20260626025846.106157-2-liem16213@gmail.com>
> -----Original Message-----
> From: Liem <liem16213@gmail.com>
> Sent: Friday, June 26, 2026 10:59 AM
> To: Frank Li (OSS) <frank.li@oss.nxp.com>
> Cc: Frank Li <frank.li@nxp.com>; andi.shyti@kernel.org; Biwen Li
> <biwen.li@nxp.com>; festevam@gmail.com; imx@lists.linux.dev;
> kernel@pengutronix.de; liem16213@gmail.com;
> linux-arm-kernel@lists.infradead.org; linux-i2c@vger.kernel.org;
> linux-kernel@vger.kernel.org; o.rempel@pengutronix.de;
> s.hauer@pengutronix.de; stable@vger.kernel.org; wsa@kernel.org
> Subject: [PATCH v3 1/2] i2c: imx: Clear slave pointer on registration error
>
> In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning and the
> function returns -EBUSY if it is non-NULL. If
> pm_runtime_resume_and_get() fails later, the error path returns without clearing
> i2c_imx->slave, leaving it non-NULL. Subsequent attempts to register a slave will
> then immediately fail with -EBUSY, making it impossible to register the slave
> again.
>
> Fix by setting i2c_imx->slave = NULL on the error path.
>
> Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Liem <liem16213@gmail.com>
> ---
> drivers/i2c/busses/i2c-imx.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index
> 28313d0fad37..17defb470776 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
Hi, Liem
LGTM. But I notice Sashiko give a worth-considering topic:
Can this assignment race with the interrupt handler?
Because the driver uses a shared IRQ, i2c_imx_isr() could execute
concurrently if another device triggers the interrupt line.
If the ISR acquires slave_lock and evaluates i2c_imx->slave as valid, and
this error path locklessly sets it to NULL, wouldn't subsequent accesses
in the ISR dereference a NULL pointer?
> @@ -936,6 +936,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
> /* Resume */
> ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
> if (ret < 0) {
> + i2c_imx->slave = NULL;
> dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
> return ret;
> }
Is it helpful?
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 73317ddd5f02..e50058fd39ee 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -930,14 +930,16 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
if (i2c_imx->slave)
return -EBUSY;
- i2c_imx->slave = client;
- i2c_imx->last_slave_event = I2C_SLAVE_STOP;
-
/* Resume */
ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
if (ret < 0) {
dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
return ret;
+ }
+
+ scoped_guard(spinlock_irqsave, &i2c_imx->slave_lock) {
+ i2c_imx->slave = client;
+ i2c_imx->last_slave_event = I2C_SLAVE_STOP;
}
i2c_imx_slave_init(i2c_imx);
> --
> 2.34.1
>
^ permalink raw reply related
* [PATCH v3 2/2] i2c: imx: Cancel hrtimer before clearing slave pointer
From: Liem @ 2026-06-26 2:58 UTC (permalink / raw)
To: frank.li
Cc: Frank.Li, andi.shyti, biwen.li, festevam, imx, kernel, liem16213,
linux-arm-kernel, linux-i2c, linux-kernel, o.rempel, s.hauer,
stable, wsa
In-Reply-To: <20260626025846.106157-1-liem16213@gmail.com>
In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
disabling interrupts. However, a pending interrupt might already
have started the hrtimer (i2c_imx_slave_timeout) before the pointer
was cleared. If the hrtimer fires after i2c_imx->slave is set to
NULL, the timer callback i2c_imx_slave_finish_op() will call
i2c_imx_slave_event() with a NULL slave pointer,which results in a
use-after-free / NULL pointer dereference.
Fix by canceling the hrtimer and waiting for it to complete after
disabling interrupts, before clearing the slave pointer.
Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
Cc: stable@vger.kernel.org
Signed-off-by: Liem <liem16213@gmail.com>
---
drivers/i2c/busses/i2c-imx.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 17defb470776..f02c216ba299 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -959,6 +959,7 @@ static int i2c_imx_unreg_slave(struct i2c_client *client)
i2c_imx_reset_regs(i2c_imx);
+ hrtimer_cancel(&i2c_imx->slave_timer);
i2c_imx->slave = NULL;
/* Suspend */
--
2.34.1
^ permalink raw reply related
* [PATCH v3 1/2] i2c: imx: Clear slave pointer on registration error
From: Liem @ 2026-06-26 2:58 UTC (permalink / raw)
To: frank.li
Cc: Frank.Li, andi.shyti, biwen.li, festevam, imx, kernel, liem16213,
linux-arm-kernel, linux-i2c, linux-kernel, o.rempel, s.hauer,
stable, wsa
In-Reply-To: <20260626025846.106157-1-liem16213@gmail.com>
In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
and the function returns -EBUSY if it is non-NULL. If
pm_runtime_resume_and_get() fails later, the error path returns
without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
attempts to register a slave will then immediately fail with
-EBUSY, making it impossible to register the slave again.
Fix by setting i2c_imx->slave = NULL on the error path.
Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
Cc: stable@vger.kernel.org
Signed-off-by: Liem <liem16213@gmail.com>
---
drivers/i2c/busses/i2c-imx.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 28313d0fad37..17defb470776 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -936,6 +936,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
/* Resume */
ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
if (ret < 0) {
+ i2c_imx->slave = NULL;
dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
return ret;
}
--
2.34.1
^ permalink raw reply related
* [PATCH v3 0/2] Fix slave mode corner issues
From: Liem @ 2026-06-26 2:58 UTC (permalink / raw)
To: frank.li
Cc: Frank.Li, andi.shyti, biwen.li, festevam, imx, kernel, liem16213,
linux-arm-kernel, linux-i2c, linux-kernel, o.rempel, s.hauer,
stable, wsa
In-Reply-To: <aj1UR5ddawsdMbZC@SMW015318>
This series fixes two issues in the i2c-imx slave mode.
Patch 1 clears the slave pointer on registration failure to allow
subsequent re-registration.
Patch 2 cancels the hrtimer before clearing the slave pointer during
unregistration, preventing a potential use-after-free / NULL pointer
dereference.
Changes in v3:
- Split the original patch into two separate patches as suggested by
Frank Li.
- v2: https://lore.kernel.org/imx/
20260625160219.55116-1-liem16213@gmail.com/
Liem (2):
i2c: imx: Clear slave pointer on registration error
i2c: imx: Cancel hrtimer before clearing slave pointer
drivers/i2c/busses/i2c-imx.c | 2 ++
1 file changed, 2 insertions(+)
--
2.34.1
^ permalink raw reply
* Re: [PATCH v2] i2c: imx: Fix slave registration error path and missing timer cleanup
From: liem @ 2026-06-26 1:55 UTC (permalink / raw)
To: Frank Li
Cc: Oleksij Rempel, Andi Shyti, Pengutronix Kernel Team, Frank Li,
Sascha Hauer, Fabio Estevam, Biwen Li, Wolfram Sang, linux-i2c,
imx, linux-arm-kernel, linux-kernel, stable
In-Reply-To: <aj1UR5ddawsdMbZC@SMW015318>
Hi Frank,
Thanks for the review. I'll split this into two separate patches and
send a v3 series.
Regards,
Liem
On Fri, Jun 26, 2026 at 12:16 AM Frank Li <Frank.li@oss.nxp.com> wrote:
>
> On Fri, Jun 26, 2026 at 12:02:19AM +0800, Liem wrote:
> >
> > There are two issues that affect the i2c-imx slave handling:
> >
> > 1. In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
> > and the function returns -EBUSY if it is non-NULL. If
> > pm_runtime_resume_and_get() fails later, the error path returns
> > without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
> > attempts to register a slave will then immediately fail with
> > -EBUSY, making it impossible to register the slave again. Fix
> > by setting i2c_imx->slave = NULL on the error path.
> >
> > 2. In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
> > disabling interrupts. However, a pending interrupt might already
> > have started the hrtimer (i2c_imx_slave_timeout) before the pointer
> > was cleared. If the hrtimer fires after i2c_imx->slave is set to
> > NULL, the timer callback i2c_imx_slave_finish_op() will call
> > i2c_imx_slave_event() with a NULL slave pointer, and the
> > last_slave_event check loop in i2c_imx_slave_finish_op() may cause
> > a system hang because last_slave_event is no longer updated. Fix
> > by canceling the hrtimer and waiting for it to complete after
> > disabling interrupts, before clearing the slave pointer.
>
> Please use two patches to fix these problem. One patch fix one problem.
>
> Frank
>
> >
> > Both issues can trigger a kernel oops, system hang, or permanent
> > slave registration failure under certain race conditions. Add the
> > missing NULL assignment and the missing hrtimer cleanup to harden
> > the slave path.
> >
> > Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Liem <liem16213@gmail.com>
> > ---
> > v1 -> v2:
> > - Instead of adding a NULL check in i2c_imx_slave_event(), cancel
> > the hrtimer and wait for it to finish in i2c_imx_unreg_slave()
> > after disabling interrupts, as suggested by <Carlos Song>.
> > This avoids a potential hang in the last_slave_event loop in
> > i2c_imx_slave_finish_op().
> > ---
> > drivers/i2c/busses/i2c-imx.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> > index 28313d0fad37..04ffb927aba9 100644
> > --- a/drivers/i2c/busses/i2c-imx.c
> > +++ b/drivers/i2c/busses/i2c-imx.c
> > @@ -936,6 +936,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
> > /* Resume */
> > ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
> > if (ret < 0) {
> > + i2c_imx->slave = NULL;
> > dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
> > return ret;
> > }
> > @@ -957,7 +958,7 @@ static int i2c_imx_unreg_slave(struct i2c_client *client)
> > imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
> >
> > i2c_imx_reset_regs(i2c_imx);
> > -
> > + hrtimer_cancel(&i2c_imx->slave_timer);
> > i2c_imx->slave = NULL;
> >
> > /* Suspend */
> > --
> > 2.53.0
> >
> >
^ permalink raw reply
* Re: [PATCH] CREDITS: Add Wolfram Sang
From: Wolfram Sang @ 2026-06-25 20:22 UTC (permalink / raw)
To: Andi Shyti
Cc: lkml, linux-i2c, Linus Torvalds, Sebastian Reichel, Wolfram Sang
In-Reply-To: <20260625163221.183414-1-andi.shyti@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 660 bytes --]
On Thu, Jun 25, 2026 at 06:32:21PM +0200, Andi Shyti wrote:
> Wolfram Sang has decided that a decade-plus of I2C was enough and
> is moving on to new things.
>
> Thank you, Wolfram, for your years of dedication and for keeping
You are very welcome. Maintaining I2C really shaped this timeframe for
me. I hope you will have lots of valuable experiences, too :) Thank you
for this patch, Sebastian and Andi!
> the bus in line. Your legacy is now officially cemented in the
> CREDITS file.
>
> Suggested-by: Sebastian Reichel <sre@kernel.org>
> Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Wolfram Sang <wsa@kernel.org>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply
* [PATCH] CREDITS: Add Wolfram Sang
From: Andi Shyti @ 2026-06-25 16:32 UTC (permalink / raw)
To: lkml, linux-i2c
Cc: Linus Torvalds, Andi Shyti, Sebastian Reichel, Wolfram Sang
Wolfram Sang has decided that a decade-plus of I2C was enough and
is moving on to new things.
Thank you, Wolfram, for your years of dedication and for keeping
the bus in line. Your legacy is now officially cemented in the
CREDITS file.
Suggested-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Cc: Wolfram Sang <wsa@kernel.org>
---
CREDITS | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/CREDITS b/CREDITS
index 84793a967a0b..91c51c14e993 100644
--- a/CREDITS
+++ b/CREDITS
@@ -3626,6 +3626,13 @@ S: 69 rue Dunois
S: 75013 Paris
S: France
+N: Wolfram Sang
+E: wsa@kernel.org
+W: sang-engineering.com
+P: rsa4096/140DE4CC14A029B6 3991 B1EA B9E2 6751 A4F7 645D 140D E4CC 14A0 29B6
+D: I2C Maintainer 2012 - 2026
+S: Berlin, Germany
+
N: Aleksa Sarai
E: cyphar@cyphar.com
W: https://www.cyphar.com/
--
2.53.0
^ permalink raw reply related
* Re: [PATCH v2] i2c: imx: Fix slave registration error path and missing timer cleanup
From: Frank Li @ 2026-06-25 16:16 UTC (permalink / raw)
To: Liem
Cc: Oleksij Rempel, Andi Shyti, Pengutronix Kernel Team, Frank Li,
Sascha Hauer, Fabio Estevam, Biwen Li, Wolfram Sang, linux-i2c,
imx, linux-arm-kernel, linux-kernel, stable
In-Reply-To: <20260625160219.55116-1-liem16213@gmail.com>
On Fri, Jun 26, 2026 at 12:02:19AM +0800, Liem wrote:
>
> There are two issues that affect the i2c-imx slave handling:
>
> 1. In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
> and the function returns -EBUSY if it is non-NULL. If
> pm_runtime_resume_and_get() fails later, the error path returns
> without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
> attempts to register a slave will then immediately fail with
> -EBUSY, making it impossible to register the slave again. Fix
> by setting i2c_imx->slave = NULL on the error path.
>
> 2. In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
> disabling interrupts. However, a pending interrupt might already
> have started the hrtimer (i2c_imx_slave_timeout) before the pointer
> was cleared. If the hrtimer fires after i2c_imx->slave is set to
> NULL, the timer callback i2c_imx_slave_finish_op() will call
> i2c_imx_slave_event() with a NULL slave pointer, and the
> last_slave_event check loop in i2c_imx_slave_finish_op() may cause
> a system hang because last_slave_event is no longer updated. Fix
> by canceling the hrtimer and waiting for it to complete after
> disabling interrupts, before clearing the slave pointer.
Please use two patches to fix these problem. One patch fix one problem.
Frank
>
> Both issues can trigger a kernel oops, system hang, or permanent
> slave registration failure under certain race conditions. Add the
> missing NULL assignment and the missing hrtimer cleanup to harden
> the slave path.
>
> Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Liem <liem16213@gmail.com>
> ---
> v1 -> v2:
> - Instead of adding a NULL check in i2c_imx_slave_event(), cancel
> the hrtimer and wait for it to finish in i2c_imx_unreg_slave()
> after disabling interrupts, as suggested by <Carlos Song>.
> This avoids a potential hang in the last_slave_event loop in
> i2c_imx_slave_finish_op().
> ---
> drivers/i2c/busses/i2c-imx.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> index 28313d0fad37..04ffb927aba9 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
> @@ -936,6 +936,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
> /* Resume */
> ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
> if (ret < 0) {
> + i2c_imx->slave = NULL;
> dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
> return ret;
> }
> @@ -957,7 +958,7 @@ static int i2c_imx_unreg_slave(struct i2c_client *client)
> imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
>
> i2c_imx_reset_regs(i2c_imx);
> -
> + hrtimer_cancel(&i2c_imx->slave_timer);
> i2c_imx->slave = NULL;
>
> /* Suspend */
> --
> 2.53.0
>
>
^ permalink raw reply
* [PATCH v2] i2c: imx: Fix slave registration error path and missing timer cleanup
From: Liem @ 2026-06-25 16:02 UTC (permalink / raw)
To: Oleksij Rempel
Cc: Andi Shyti, Pengutronix Kernel Team, Frank Li, Sascha Hauer,
Fabio Estevam, Biwen Li, Wolfram Sang, linux-i2c, imx,
linux-arm-kernel, linux-kernel, stable, Liem
In-Reply-To: <20260625071130.93544-1-liem16213@gmail.com>
There are two issues that affect the i2c-imx slave handling:
1. In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
and the function returns -EBUSY if it is non-NULL. If
pm_runtime_resume_and_get() fails later, the error path returns
without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
attempts to register a slave will then immediately fail with
-EBUSY, making it impossible to register the slave again. Fix
by setting i2c_imx->slave = NULL on the error path.
2. In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
disabling interrupts. However, a pending interrupt might already
have started the hrtimer (i2c_imx_slave_timeout) before the pointer
was cleared. If the hrtimer fires after i2c_imx->slave is set to
NULL, the timer callback i2c_imx_slave_finish_op() will call
i2c_imx_slave_event() with a NULL slave pointer, and the
last_slave_event check loop in i2c_imx_slave_finish_op() may cause
a system hang because last_slave_event is no longer updated. Fix
by canceling the hrtimer and waiting for it to complete after
disabling interrupts, before clearing the slave pointer.
Both issues can trigger a kernel oops, system hang, or permanent
slave registration failure under certain race conditions. Add the
missing NULL assignment and the missing hrtimer cleanup to harden
the slave path.
Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
Cc: stable@vger.kernel.org
Signed-off-by: Liem <liem16213@gmail.com>
---
v1 -> v2:
- Instead of adding a NULL check in i2c_imx_slave_event(), cancel
the hrtimer and wait for it to finish in i2c_imx_unreg_slave()
after disabling interrupts, as suggested by <Carlos Song>.
This avoids a potential hang in the last_slave_event loop in
i2c_imx_slave_finish_op().
---
drivers/i2c/busses/i2c-imx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 28313d0fad37..04ffb927aba9 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -936,6 +936,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
/* Resume */
ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
if (ret < 0) {
+ i2c_imx->slave = NULL;
dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
return ret;
}
@@ -957,7 +958,7 @@ static int i2c_imx_unreg_slave(struct i2c_client *client)
imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
i2c_imx_reset_regs(i2c_imx);
-
+ hrtimer_cancel(&i2c_imx->slave_timer);
i2c_imx->slave = NULL;
/* Suspend */
--
2.53.0
^ permalink raw reply related
* Re: [PATCH] i2c: imx: Fix slave registration error path and missing NULL check
From: liem @ 2026-06-25 15:07 UTC (permalink / raw)
To: liem
Cc: Frank Li, Andi Shyti, Biwen Li, Fabio Estevam, imx,
Pengutronix Kernel Team, linux-arm-kernel, linux-i2c,
linux-kernel, Oleksij Rempel, Sascha Hauer, stable, Wolfram Sang
Hi,Carlos!
Thank you for your review.
Q: Have you meet the issue on one real platform?
A: No,I just noticed the error while reading the code.
I think your idea which cancel the slave timer and wait it finished
after disabled IRQ is better.
I'll fix the issues and send a v2.Thank you again!
^ permalink raw reply
* RE: [PATCH] i2c: imx: Fix slave registration error path and missing NULL check
From: Carlos Song (OSS) @ 2026-06-25 11:17 UTC (permalink / raw)
To: Liem, Oleksij Rempel
Cc: Andi Shyti, Pengutronix Kernel Team, Frank Li, Sascha Hauer,
Fabio Estevam, Biwen Li, Wolfram Sang, linux-i2c@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
In-Reply-To: <20260625071130.93544-1-liem16213@gmail.com>
> -----Original Message-----
> From: Liem <liem16213@gmail.com>
> Sent: Thursday, June 25, 2026 3:12 PM
> To: Oleksij Rempel <o.rempel@pengutronix.de>
> Cc: Andi Shyti <andi.shyti@kernel.org>; Pengutronix Kernel Team
> <kernel@pengutronix.de>; Frank Li <frank.li@nxp.com>; Sascha Hauer
> <s.hauer@pengutronix.de>; Fabio Estevam <festevam@gmail.com>; Biwen Li
> <biwen.li@nxp.com>; Wolfram Sang <wsa@kernel.org>;
> linux-i2c@vger.kernel.org; imx@lists.linux.dev;
> linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org;
> stable@vger.kernel.org; Liem <liem16213@gmail.com>
> Subject: [PATCH] i2c: imx: Fix slave registration error path and missing NULL check
>
> [You don't often get email from liem16213@gmail.com. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> There are two issues that affect the i2c-imx slave handling:
>
> 1. In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
> and the function returns -EBUSY if it is non-NULL. If
> pm_runtime_resume_and_get() fails later, the error path returns
> without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
> attempts to register a slave will then immediately fail with
> -EBUSY, making it impossible to register the slave again. Fix
> by setting i2c_imx->slave = NULL on the error path.
>
> 2. In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
> disabling interrupts. However, a pending interrupt might already
> have started a timer (e.g. for slave event processing) before
> the pointer was cleared. The timer callback
> i2c_imx_slave_event() dereferences i2c_imx->slave without a
> NULL check, which results in a use-after-free / NULL pointer
> dereference. Prevent this by checking that i2c_imx->slave is
> valid before calling i2c_slave_event() and updating the
> last_slave_event field.
>
> Both issues can trigger a kernel oops or permanent slave registration failure under
> certain race conditions. Add the missing NULL assignment and the missing NULL
> check to harden the slave path.
>
> Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Liem <liem16213@gmail.com>
> ---
> drivers/i2c/busses/i2c-imx.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index
> 28313d0fad37..4f7bcbeecfd0 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
Hi, Liem
Thank you very much for this fix!
Looks like you are catching a corner bug and try to fix this for i2c-imx target mode.
Have you meet the issue on one real platform?
> @@ -775,8 +775,10 @@ static void i2c_imx_enable_bus_idle(struct
> imx_i2c_struct *i2c_imx) static void i2c_imx_slave_event(struct imx_i2c_struct
> *i2c_imx,
> enum i2c_slave_event event, u8 *val) {
> - i2c_slave_event(i2c_imx->slave, event, val);
> - i2c_imx->last_slave_event = event;
> + if (i2c_imx->slave) {
> + i2c_slave_event(i2c_imx->slave, event, val);
> + i2c_imx->last_slave_event = event;
> + }
From i2c-imx.c driver, I notice this call trace is:
1. IRQ-> i2c_imx_slave_handle-> i2c_imx_slave_timeout(if in progress)-> i2c_imx_slave_finish_op
2. IRQ->i2c_imx_slave_finish_op
'''
In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
disabling interrupts. However, a pending interrupt might already
have started a timer (e.g. for slave event processing) before
the pointer was cleared.
...
Yes, this may happen, then trigger slave hrtimer running.
Go into i2c_imx_slave_finish_op().
you add a judgement in i2c_slave_event():
if (i2c_imx->slave) {
i2c_slave_event(i2c_imx->slave, event, val);
i2c_imx->last_slave_event = event;
}
At this time i2c_imx->slave= NULL,
so i2c_slave_event(i2c_imx->slave, event, val) and i2c_imx->last_slave_event = event; won't run again.
in i2c_imx_slave_finish_op(),
Fall into" while (i2c_imx->last_slave_event != I2C_SLAVE_STOP)" the loop. So system maybe hang.
My idea is just cancel the slave timer and wait it finished after disabled IRQ.
If I am wrong please correct me. Thank you again.
static int i2c_imx_unreg_slave(struct i2c_client *client)
{
imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR);
i2c_imx_reset_regs(i2c_imx);
+ hrtimer_cancel(&i2c_imx->slave_timer);
i2c_imx->slave = NULL;
}
Carlos
>
> static void i2c_imx_slave_finish_op(struct imx_i2c_struct *i2c_imx) @@ -936,6
> +938,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
> /* Resume */
> ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
> if (ret < 0) {
> + i2c_imx->slave = NULL;
This a good fix. I agree with this.
> dev_err(&i2c_imx->adapter.dev, "failed to resume i2c
> controller");
> return ret;
> }
> --
> 2.34.1
>
^ permalink raw reply
* Re: [PATCH] i2c: qcom-cci: drop custom suspend/resume and rely on runtime PM helpers
From: Vladimir Zapolskiy @ 2026-06-25 11:07 UTC (permalink / raw)
To: Wenmeng Liu, Loic Poulain, Robert Foss, Andi Shyti,
Bjorn Andersson, Wolfram Sang, Todor Tomov, Vinod Koul
Cc: linux-i2c, linux-arm-msm, linux-kernel, stable
In-Reply-To: <20260625-cci-v1-1-a100cda673ce@oss.qualcomm.com>
On 6/25/26 12:42, Wenmeng Liu wrote:
> cci_resume() unconditionally calls cci_resume_runtime() regardless of
> the runtime PM state.
>
> If the device is already runtime-suspended before system suspend,
> the clock is re-enabled while runtime_status remains RPM_SUSPENDED.
> As a result, pm_request_autosuspend() does not arm the timer,
> leaving the clock permanently enabled.
>
> Fixes: e517526195de ("i2c: Add Qualcomm CCI I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
> ---
> drivers/i2c/busses/i2c-qcom-cci.c | 18 +-----------------
> 1 file changed, 1 insertion(+), 17 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-qcom-cci.c b/drivers/i2c/busses/i2c-qcom-cci.c
> index 4d64895a9e9e4e0bd5e0ccb5c3cc04b282b1e4d5..bdeda3979c4814b5cdb463734b8361da7fffa879 100644
> --- a/drivers/i2c/busses/i2c-qcom-cci.c
> +++ b/drivers/i2c/busses/i2c-qcom-cci.c
> @@ -492,24 +492,8 @@ static int __maybe_unused cci_resume_runtime(struct device *dev)
> return 0;
> }
>
> -static int __maybe_unused cci_suspend(struct device *dev)
> -{
> - if (!pm_runtime_suspended(dev))
> - return cci_suspend_runtime(dev);
> -
> - return 0;
> -}
> -
> -static int __maybe_unused cci_resume(struct device *dev)
> -{
> - cci_resume_runtime(dev);
> - pm_request_autosuspend(dev);
> -
> - return 0;
> -}
> -
> static const struct dev_pm_ops qcom_cci_pm = {
> - SET_SYSTEM_SLEEP_PM_OPS(cci_suspend, cci_resume)
> + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
> SET_RUNTIME_PM_OPS(cci_suspend_runtime, cci_resume_runtime, NULL)
> };
>
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
--
Best wishes,
Vladimir
^ permalink raw reply
* Re: [PATCH] i2c: qcom-cci: drop custom suspend/resume and rely on runtime PM helpers
From: Konrad Dybcio @ 2026-06-25 10:22 UTC (permalink / raw)
To: Wenmeng Liu, Loic Poulain, Robert Foss, Andi Shyti,
Bjorn Andersson, Wolfram Sang, Todor Tomov, Vinod Koul
Cc: linux-i2c, linux-arm-msm, linux-kernel, stable
In-Reply-To: <20260625-cci-v1-1-a100cda673ce@oss.qualcomm.com>
On 6/25/26 11:42 AM, Wenmeng Liu wrote:
> cci_resume() unconditionally calls cci_resume_runtime() regardless of
> the runtime PM state.
>
> If the device is already runtime-suspended before system suspend,
> the clock is re-enabled while runtime_status remains RPM_SUSPENDED.
> As a result, pm_request_autosuspend() does not arm the timer,
> leaving the clock permanently enabled.
>
> Fixes: e517526195de ("i2c: Add Qualcomm CCI I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply
* Re: [PATCH] i2c: qcom-cci: drop custom suspend/resume and rely on runtime PM helpers
From: Loic Poulain @ 2026-06-25 9:51 UTC (permalink / raw)
To: Wenmeng Liu
Cc: Robert Foss, Andi Shyti, Bjorn Andersson, Wolfram Sang,
Todor Tomov, Vinod Koul, linux-i2c, linux-arm-msm, linux-kernel,
stable
In-Reply-To: <20260625-cci-v1-1-a100cda673ce@oss.qualcomm.com>
On Thu, Jun 25, 2026 at 11:42 AM Wenmeng Liu
<wenmeng.liu@oss.qualcomm.com> wrote:
>
> cci_resume() unconditionally calls cci_resume_runtime() regardless of
> the runtime PM state.
>
> If the device is already runtime-suspended before system suspend,
> the clock is re-enabled while runtime_status remains RPM_SUSPENDED.
> As a result, pm_request_autosuspend() does not arm the timer,
> leaving the clock permanently enabled.
>
> Fixes: e517526195de ("i2c: Add Qualcomm CCI I2C driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
> ---
> drivers/i2c/busses/i2c-qcom-cci.c | 18 +-----------------
> 1 file changed, 1 insertion(+), 17 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-qcom-cci.c b/drivers/i2c/busses/i2c-qcom-cci.c
> index 4d64895a9e9e4e0bd5e0ccb5c3cc04b282b1e4d5..bdeda3979c4814b5cdb463734b8361da7fffa879 100644
> --- a/drivers/i2c/busses/i2c-qcom-cci.c
> +++ b/drivers/i2c/busses/i2c-qcom-cci.c
> @@ -492,24 +492,8 @@ static int __maybe_unused cci_resume_runtime(struct device *dev)
> return 0;
> }
>
> -static int __maybe_unused cci_suspend(struct device *dev)
> -{
> - if (!pm_runtime_suspended(dev))
> - return cci_suspend_runtime(dev);
> -
> - return 0;
> -}
> -
> -static int __maybe_unused cci_resume(struct device *dev)
> -{
> - cci_resume_runtime(dev);
> - pm_request_autosuspend(dev);
> -
> - return 0;
> -}
> -
> static const struct dev_pm_ops qcom_cci_pm = {
> - SET_SYSTEM_SLEEP_PM_OPS(cci_suspend, cci_resume)
> + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
> SET_RUNTIME_PM_OPS(cci_suspend_runtime, cci_resume_runtime, NULL)
> };
>
>
> ---
> base-commit: 4e5dfb7c84012007c3c7061126491bbc92d71bf1
> change-id: 20260625-cci-3eedf766d43b
>
> Best regards,
> --
> Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
>
^ permalink raw reply
* [PATCH] i2c: qcom-cci: drop custom suspend/resume and rely on runtime PM helpers
From: Wenmeng Liu @ 2026-06-25 9:42 UTC (permalink / raw)
To: Loic Poulain, Robert Foss, Andi Shyti, Bjorn Andersson,
Wolfram Sang, Todor Tomov, Vinod Koul
Cc: linux-i2c, linux-arm-msm, linux-kernel, stable, Wenmeng Liu
cci_resume() unconditionally calls cci_resume_runtime() regardless of
the runtime PM state.
If the device is already runtime-suspended before system suspend,
the clock is re-enabled while runtime_status remains RPM_SUSPENDED.
As a result, pm_request_autosuspend() does not arm the timer,
leaving the clock permanently enabled.
Fixes: e517526195de ("i2c: Add Qualcomm CCI I2C driver")
Cc: stable@vger.kernel.org
Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
---
drivers/i2c/busses/i2c-qcom-cci.c | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/drivers/i2c/busses/i2c-qcom-cci.c b/drivers/i2c/busses/i2c-qcom-cci.c
index 4d64895a9e9e4e0bd5e0ccb5c3cc04b282b1e4d5..bdeda3979c4814b5cdb463734b8361da7fffa879 100644
--- a/drivers/i2c/busses/i2c-qcom-cci.c
+++ b/drivers/i2c/busses/i2c-qcom-cci.c
@@ -492,24 +492,8 @@ static int __maybe_unused cci_resume_runtime(struct device *dev)
return 0;
}
-static int __maybe_unused cci_suspend(struct device *dev)
-{
- if (!pm_runtime_suspended(dev))
- return cci_suspend_runtime(dev);
-
- return 0;
-}
-
-static int __maybe_unused cci_resume(struct device *dev)
-{
- cci_resume_runtime(dev);
- pm_request_autosuspend(dev);
-
- return 0;
-}
-
static const struct dev_pm_ops qcom_cci_pm = {
- SET_SYSTEM_SLEEP_PM_OPS(cci_suspend, cci_resume)
+ SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
SET_RUNTIME_PM_OPS(cci_suspend_runtime, cci_resume_runtime, NULL)
};
---
base-commit: 4e5dfb7c84012007c3c7061126491bbc92d71bf1
change-id: 20260625-cci-3eedf766d43b
Best regards,
--
Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
^ permalink raw reply related
* Re: [PATCH v2 2/2] i2c: imx: fix locked bus on SMBus block-read of 0 (IRQ)
From: Stefan Eichenberger @ 2026-06-25 9:11 UTC (permalink / raw)
To: Vincent Jardin
Cc: Oleksij Rempel, Pengutronix Kernel Team, Andi Shyti, Frank Li,
Sascha Hauer, Fabio Estevam, Wolfram Sang, Kaushal Butala,
Shawn Guo, Stefan Eichenberger, linux-i2c, imx, linux-arm-kernel,
linux-kernel, stable
In-Reply-To: <20260525-for-upstream-i2c-lx2160-fix-v1-v2-2-26a3cc8cd055@free.fr>
On Mon, May 25, 2026 at 06:43:16PM +0200, Vincent Jardin wrote:
> SMBus 3.1 6.5.7 allows a Block Read byte count of 0, but the
> interrupt-driven block-read state machine rejects it as -EPROTO. Worse,
> it returns without a NACK+STOP: the next receive cycle has already
> started, so the target keeps holding SDA and the bus stays stuck until a
> power cycle of this i2c controller.
>
> Accept count=0: NACK the in-flight dummy byte (TXAK) and set msg->len to
> 2 so i2c_imx_isr_read_continue() emits STOP via its normal last-byte
> path. The dummy byte is discarded; block-read callers only consume
> buf[0..count-1].
>
> Reading I2DR has likewise already armed the next byte on the
> count > I2C_SMBUS_BLOCK_MAX error path, so NACK it (TXAK) before aborting
> with -EPROTO; otherwise the failing transfer's STOP cannot complete and
> the bus stays held.
>
> The atomic path regressed earlier (v3.16) and is fixed separately; this
> patch covers only the v6.13 state-machine rework.
>
> Fixes: 5f5c2d4579ca ("i2c: imx: prevent rescheduling in non dma mode")
> Cc: <stable@vger.kernel.org> # v6.13+
> Signed-off-by: Vincent Jardin <vjardin@free.fr>
> ---
> drivers/i2c/busses/i2c-imx.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> index 14107e1ad413..8db8d2e10f5c 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
> @@ -1061,11 +1061,28 @@ static inline enum imx_i2c_state i2c_imx_isr_read_continue(struct imx_i2c_struct
> static inline void i2c_imx_isr_read_block_data_len(struct imx_i2c_struct *i2c_imx)
> {
> u8 len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
> + unsigned int temp;
>
> if (len == 0 || len > I2C_SMBUS_BLOCK_MAX) {
> + /*
> + * SMBus 3.1 6.5.7: support count byte of 0.
> + * I2C_SMBUS_BLOCK_MAX case should not hold the SDA either.
> + * So NACK it (TXAK) to not hold the bus.
> + */
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp |= I2CR_TXAK;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + if (len == 0) {
> + i2c_imx->msg->buf[i2c_imx->msg_buf_idx++] = 0;
> + i2c_imx->msg->len = 2;
> + return;
> + }
> +
> i2c_imx->isr_result = -EPROTO;
> i2c_imx->state = IMX_I2C_STATE_FAILED;
> wake_up(&i2c_imx->queue);
> + return;
> }
> i2c_imx->msg->len += len;
> i2c_imx->msg->buf[i2c_imx->msg_buf_idx++] = len;
>
> --
> 2.43.0
>
Reviewed-by: Stefan Eichenberger <eichest@gmail.com>
^ permalink raw reply
* Re: [PATCH v2 1/2] i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)
From: Stefan Eichenberger @ 2026-06-25 9:04 UTC (permalink / raw)
To: Vincent Jardin
Cc: Oleksij Rempel, Pengutronix Kernel Team, Andi Shyti, Frank Li,
Sascha Hauer, Fabio Estevam, Wolfram Sang, Kaushal Butala,
Shawn Guo, Stefan Eichenberger, linux-i2c, imx, linux-arm-kernel,
linux-kernel, stable
In-Reply-To: <20260525-for-upstream-i2c-lx2160-fix-v1-v2-1-26a3cc8cd055@free.fr>
Sorry for the late reply.
On Mon, May 25, 2026 at 06:43:15PM +0200, Vincent Jardin wrote:
> SMBus 3.1 6.5.7 allows a Block Read byte count of 0, but the atomic
> (polling) path rejects it as -EPROTO. Worse, it returns without a
> NACK+STOP: the next receive cycle has already started, so the target
> keeps holding SDA and the bus stays stuck until a power cycle for
> this i2c controller.
>
> Reading I2DR to obtain the count likewise arms the next byte on the
> count > I2C_SMBUS_BLOCK_MAX path, which also returned -EPROTO directly
> and left the bus held.
>
> Handle both: NACK the in-flight dummy byte (TXAK) and extend msgs->len so
> the existing last-byte handling emits STOP; the dummy byte is discarded.
> A count of 0 is a valid empty block read; a count above
> I2C_SMBUS_BLOCK_MAX is still reported as -EPROTO, but only after the bus
> has been released.
>
> The interrupt-driven path has the same flaw from a later commit and is
> fixed separately, as it carries a different Fixes: tag and stable range.
>
> Fixes: 8e8782c71595 ("i2c: imx: add SMBus block read support")
> Cc: <stable@vger.kernel.org> # v3.16+
> Signed-off-by: Vincent Jardin <vjardin@free.fr>
> ---
> drivers/i2c/busses/i2c-imx.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> index a208fefd3c3b..14107e1ad413 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
> @@ -1415,6 +1415,7 @@ static int i2c_imx_atomic_read(struct imx_i2c_struct *i2c_imx,
> int i, result;
> unsigned int temp;
> int block_data = msgs->flags & I2C_M_RECV_LEN;
> + int block_err = 0;
>
> result = i2c_imx_prepare_read(i2c_imx, msgs, false);
> if (result)
> @@ -1436,8 +1437,20 @@ static int i2c_imx_atomic_read(struct imx_i2c_struct *i2c_imx,
> */
> if ((!i) && block_data) {
> len = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
> - if ((len == 0) || (len > I2C_SMBUS_BLOCK_MAX))
> - return -EPROTO;
> + if ((len == 0) || (len > I2C_SMBUS_BLOCK_MAX)) {
> + /*
> + * SMBus 3.1 6.5.7: support count byte of 0.
> + * I2C_SMBUS_BLOCK_MAX case should not hold the SDA either.
> + */
> + if (len > I2C_SMBUS_BLOCK_MAX)
> + block_err = -EPROTO;
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp |= I2CR_TXAK;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> + msgs->buf[0] = 0;
> + msgs->len = 2;
> + continue;
> + }
> dev_dbg(&i2c_imx->adapter.dev,
> "<%s> read length: 0x%X\n",
> __func__, len);
> @@ -1485,7 +1498,7 @@ static int i2c_imx_atomic_read(struct imx_i2c_struct *i2c_imx,
> "<%s> read byte: B%d=0x%X\n",
> __func__, i, msgs->buf[i]);
> }
> - return 0;
> + return block_err;
> }
Reviewed-by: Stefan Eichenberger <eichest@gmail.com>
^ permalink raw reply
* Re: [PATCH v2 0/2] i2c: imx: fix SMBus block-read of 0 locking the bus
From: Oleksij Rempel @ 2026-06-25 7:18 UTC (permalink / raw)
To: Vincent Jardin
Cc: Pengutronix Kernel Team, Andi Shyti, Frank Li, Sascha Hauer,
Fabio Estevam, Wolfram Sang, Kaushal Butala, Shawn Guo,
Stefan Eichenberger, linux-i2c, imx, linux-arm-kernel,
linux-kernel, stable
In-Reply-To: <20260525-for-upstream-i2c-lx2160-fix-v1-v2-0-26a3cc8cd055@free.fr>
On Mon, May 25, 2026 at 06:43:14PM +0200, Vincent Jardin wrote:
> i2c-imx rejects a SMBus Block Read byte count of 0 (valid per SMBus 3.1
> 6.5.7) and it returns without a NACK+STOP, leaving the target
> holding SDA so the bus is stuck until a power cycle occur.
>
> The same bug is occuring with two independently introduced spots, so the
> fix is two patches with their respective Fixes: tags and backport ranges:
>
> 1/2 atomic/polling path Fixes: 8e8782c71595 v3.16+
> 2/2 IRQ-driven state machine Fixes: 5f5c2d4579ca v6.13+
>
> Signed-off-by: Vincent Jardin <vjardin@free.fr>
Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
Thank you!
Best Regards,
Oleksij
-
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply
* Re: [PATCH v5] i2c: imx: mark I2C adapter when hardware is powered down
From: Oleksij Rempel @ 2026-06-25 7:15 UTC (permalink / raw)
To: Carlos Song (OSS)
Cc: kernel, andi.shyti, s.hauer, festevam, carlos.song, haibo.chen,
linux-i2c, imx, linux-arm-kernel, linux-kernel, stable
In-Reply-To: <20260525030400.3182911-1-carlos.song@oss.nxp.com>
On Mon, May 25, 2026 at 11:04:00AM +0800, Carlos Song (OSS) wrote:
> From: Carlos Song <carlos.song@nxp.com>
>
> On some i.MX platforms, certain I2C client drivers keep a periodic
> workqueue which continues to trigger I2C transfers.
>
> During system suspend/resume, there exists a time window between:
> - suspend_noirq and the system entering suspend
> - the system starting to resume and resume_noirq
>
> In this window, the I2C controller resources such as clock and pinctrl
> may already be disabled or not yet restored.
>
> If a workqueue triggers an I2C transfer in this period, the driver
> attempts to access I2C registers while the hardware resources are
> unavailable, which may lead to system hang.
>
> Mark the I2C adapter as suspended during noirq suspend and block new
> transfers until resume, ensuring that I2C transfers are only issued
> when hardware resources are available.
>
> Fixes: 358025ac091e ("i2c: imx: make controller available until system suspend_noirq() and from resume_noirq()")
> Cc: stable@vger.kernel.org
> Signed-off-by: Carlos Song <carlos.song@nxp.com>
Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
Thank you!
Best Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply
* [PATCH] i2c: imx: Fix slave registration error path and missing NULL check
From: Liem @ 2026-06-25 7:11 UTC (permalink / raw)
To: Oleksij Rempel
Cc: Andi Shyti, Pengutronix Kernel Team, Frank Li, Sascha Hauer,
Fabio Estevam, Biwen Li, Wolfram Sang, linux-i2c, imx,
linux-arm-kernel, linux-kernel, stable, Liem
There are two issues that affect the i2c-imx slave handling:
1. In i2c_imx_reg_slave(), i2c_imx->slave is checked at the beginning
and the function returns -EBUSY if it is non-NULL. If
pm_runtime_resume_and_get() fails later, the error path returns
without clearing i2c_imx->slave, leaving it non-NULL. Subsequent
attempts to register a slave will then immediately fail with
-EBUSY, making it impossible to register the slave again. Fix
by setting i2c_imx->slave = NULL on the error path.
2. In i2c_imx_unreg_slave(), the slave pointer is set to NULL after
disabling interrupts. However, a pending interrupt might already
have started a timer (e.g. for slave event processing) before
the pointer was cleared. The timer callback
i2c_imx_slave_event() dereferences i2c_imx->slave without a
NULL check, which results in a use-after-free / NULL pointer
dereference. Prevent this by checking that i2c_imx->slave is
valid before calling i2c_slave_event() and updating the
last_slave_event field.
Both issues can trigger a kernel oops or permanent slave
registration failure under certain race conditions. Add the
missing NULL assignment and the missing NULL check to harden
the slave path.
Fixes: f7414cd6923f ("i2c: imx: support slave mode for imx I2C driver")
Cc: stable@vger.kernel.org
Signed-off-by: Liem <liem16213@gmail.com>
---
drivers/i2c/busses/i2c-imx.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 28313d0fad37..4f7bcbeecfd0 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -775,8 +775,10 @@ static void i2c_imx_enable_bus_idle(struct imx_i2c_struct *i2c_imx)
static void i2c_imx_slave_event(struct imx_i2c_struct *i2c_imx,
enum i2c_slave_event event, u8 *val)
{
- i2c_slave_event(i2c_imx->slave, event, val);
- i2c_imx->last_slave_event = event;
+ if (i2c_imx->slave) {
+ i2c_slave_event(i2c_imx->slave, event, val);
+ i2c_imx->last_slave_event = event;
+ }
}
static void i2c_imx_slave_finish_op(struct imx_i2c_struct *i2c_imx)
@@ -936,6 +938,7 @@ static int i2c_imx_reg_slave(struct i2c_client *client)
/* Resume */
ret = pm_runtime_resume_and_get(i2c_imx->adapter.dev.parent);
if (ret < 0) {
+ i2c_imx->slave = NULL;
dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller");
return ret;
}
--
2.34.1
^ permalink raw reply related
page: next (older)
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox