<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/i2c/busses, branch master</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Merge tag 'i2c-7.4-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux</title>
<updated>2026-10-26T17:10:03+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-10-26T17:10:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=25e7ab89f4774b0f842cee0e8a20c11f755924d5'/>
<id>25e7ab89f4774b0f842cee0e8a20c11f755924d5</id>
<content type='text'>
Pull more i2c updates from Andi Shyti:
 "This introduces dynamic transfer timeouts in the I2C core, already
  used by qcom-geni. Alongside some driver improvements and fixes, it
  also brings in the Rust I2C pull request.

  Core:
   - core, qcom-geni: add and use a dynamic timeout helper
   - acpi: fix adapter reference leak when creating I2C clients

  Drivers:
   - imx: support reversed address direction and no-start transfers
   - designware: queue block data reads once length is known
   - mt7621: skip the second data register for chunks up to 4 bytes
   - sh_mobile: ensure IRQs are freed before unmapping registers

  Rust:
   - Remove unsound device-to-client reference conversion"

* tag 'i2c-7.4-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux:
  i2c: sh_mobile: request IRQs after mapping registers
  i2c: imx: add I2C_M_REV_DIR_ADDR and I2C_M_NOSTART
  i2c: mt7621: fix copying uninitialized kernel stack with reduced page_len
  i2c: designware: queue only one read command for block reads
  i2c: acpi: Fix adapter reference leak in i2c_acpi_new_device_by_fwnode()
  i2c: qcom-geni: Add dynamic transfer timeout based on transfer length and frequency
  i2c: core: Add i2c_update_timeout() helper for dynamic transfer timeouts
  rust: i2c: remove TryFrom&lt;&amp;Device&gt; implementation for &amp;I2cClient
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull more i2c updates from Andi Shyti:
 "This introduces dynamic transfer timeouts in the I2C core, already
  used by qcom-geni. Alongside some driver improvements and fixes, it
  also brings in the Rust I2C pull request.

  Core:
   - core, qcom-geni: add and use a dynamic timeout helper
   - acpi: fix adapter reference leak when creating I2C clients

  Drivers:
   - imx: support reversed address direction and no-start transfers
   - designware: queue block data reads once length is known
   - mt7621: skip the second data register for chunks up to 4 bytes
   - sh_mobile: ensure IRQs are freed before unmapping registers

  Rust:
   - Remove unsound device-to-client reference conversion"

* tag 'i2c-7.4-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux:
  i2c: sh_mobile: request IRQs after mapping registers
  i2c: imx: add I2C_M_REV_DIR_ADDR and I2C_M_NOSTART
  i2c: mt7621: fix copying uninitialized kernel stack with reduced page_len
  i2c: designware: queue only one read command for block reads
  i2c: acpi: Fix adapter reference leak in i2c_acpi_new_device_by_fwnode()
  i2c: qcom-geni: Add dynamic transfer timeout based on transfer length and frequency
  i2c: core: Add i2c_update_timeout() helper for dynamic transfer timeouts
  rust: i2c: remove TryFrom&lt;&amp;Device&gt; implementation for &amp;I2cClient
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: sh_mobile: request IRQs after mapping registers</title>
<updated>2026-10-23T22:05:15+00:00</updated>
<author>
<name>Myeonghun Pak</name>
<email>mhun512@gmail.com</email>
</author>
<published>2026-10-18T03:35:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f7b70efba26963bf725f10574cc071f86cd5ee1d'/>
<id>f7b70efba26963bf725f10574cc071f86cd5ee1d</id>
<content type='text'>
The managed IRQ handlers are acquired before the managed register
mapping, so devres unmaps the registers before freeing the IRQs. A
transfer wakes its waiter before the ISR's final register read, and
unregistering the adapter does not synchronize these IRQs. An in-flight
handler can therefore still access the mapping when it is released
during driver detach.

With forced-threaded IRQs, the handler can be preempted after waking the
transfer waiter and before its final ICSR read.

Map the registers before requesting the IRQs so that managed cleanup
frees and synchronizes all handlers before unmapping their registers.
Keep IRQs available while unregistering the adapter because client
removal may perform transfers.

This issue was identified as part of our ongoing research while
reviewing kernel code.

Co-developed-by: Ijae Kim &lt;ae878000@gmail.com&gt;
Signed-off-by: Ijae Kim &lt;ae878000@gmail.com&gt;
Signed-off-by: Myeonghun Pak &lt;mhun512@gmail.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261017233416.47b09ffff48f.i2c-sh-mobile@gmail.com
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The managed IRQ handlers are acquired before the managed register
mapping, so devres unmaps the registers before freeing the IRQs. A
transfer wakes its waiter before the ISR's final register read, and
unregistering the adapter does not synchronize these IRQs. An in-flight
handler can therefore still access the mapping when it is released
during driver detach.

With forced-threaded IRQs, the handler can be preempted after waking the
transfer waiter and before its final ICSR read.

Map the registers before requesting the IRQs so that managed cleanup
frees and synchronizes all handlers before unmapping their registers.
Keep IRQs available while unregistering the adapter because client
removal may perform transfers.

This issue was identified as part of our ongoing research while
reviewing kernel code.

Co-developed-by: Ijae Kim &lt;ae878000@gmail.com&gt;
Signed-off-by: Ijae Kim &lt;ae878000@gmail.com&gt;
Signed-off-by: Myeonghun Pak &lt;mhun512@gmail.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261017233416.47b09ffff48f.i2c-sh-mobile@gmail.com
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'modules-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/modules/linux</title>
<updated>2026-10-23T19:32:44+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-10-23T19:32:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c0e8d301378775e6e1946389f3ff621f8601fa85'/>
<id>c0e8d301378775e6e1946389f3ff621f8601fa85</id>
<content type='text'>
Pull module updates from Petr Pavlu:

 - Ignore local labels and mapping symbols during module load

   These symbols were already ignored during kallsyms address-to-symbol
   lookups. Filter them out earlier during module loading to reduce
   lookup overhead and prevent them from appearing in /proc/kallsyms.

 - Fix potentially incorrect access of SetOnce&lt;T&gt; when setting Rust
   module parameters.

 - Fix a potential read of an uninitialized count when printing taint
   information for unloaded modules.

 - Allocate the kmod argument array using kmalloc_array() in preparation
   for conversion to type-aware allocators.

 - Clean up includes in linux/kmod.h

   Add explicit includes of linux/umh.h to files that use usermode
   helpers. Then clean up the #include list in linux/kmod.h, notably
   removing the compatibility linux/umh.h include.

 - Remove the error-injection.h include from linux/module.h

   Add explicit includes of linux/error-injection.h to files that use
   the ALLOW_ERROR_INJECTION() macro and currently rely on it being
   provided indirectly via linux/module.h. Then remove the unnecessary
   linux/error-injection.h include from linux/module.h.

 - Replace __MODULE_STRING() with __stringify() in various drivers in
   preparation for removing the former macro.

* tag 'modules-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/modules/linux:
  drivers: Replace __MODULE_STRING() with __stringify()
  module: Fix uninitialized count read of unloaded taint tracking record
  rust: module_param: Fix potentially incorrect access of `SetOnce&lt;T&gt;`
  module: Remove the error-injection.h include from linux/module.h
  drm/xe: Include error-injection.h for ALLOW_ERROR_INJECTION()
  drm/i915: Include error-injection.h for ALLOW_ERROR_INJECTION()
  syscalls: Include error-injection.h for ALLOW_ERROR_INJECTION()
  net: Include error-injection.h for ALLOW_ERROR_INJECTION()
  block: Include error-injection.h for ALLOW_ERROR_INJECTION()
  module: Bring includes in linux/kmod.h up to date
  time/jiffies: Include linux/sysctl.h for proc_int_u2k_conv_uop(), ...
  umh, treewide: Explicitly include linux/umh.h where needed
  modules/kmod: Allocate argv with kmalloc_array()
  module/kallsyms: Ignore local labels and mapping symbols during module load
  module/kallsyms: Refactor current symbol filtering into is_core_symbol()
  module/kallsyms: Rename is_mapping_symbol() to is_ignored_kernel_symbol()
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull module updates from Petr Pavlu:

 - Ignore local labels and mapping symbols during module load

   These symbols were already ignored during kallsyms address-to-symbol
   lookups. Filter them out earlier during module loading to reduce
   lookup overhead and prevent them from appearing in /proc/kallsyms.

 - Fix potentially incorrect access of SetOnce&lt;T&gt; when setting Rust
   module parameters.

 - Fix a potential read of an uninitialized count when printing taint
   information for unloaded modules.

 - Allocate the kmod argument array using kmalloc_array() in preparation
   for conversion to type-aware allocators.

 - Clean up includes in linux/kmod.h

   Add explicit includes of linux/umh.h to files that use usermode
   helpers. Then clean up the #include list in linux/kmod.h, notably
   removing the compatibility linux/umh.h include.

 - Remove the error-injection.h include from linux/module.h

   Add explicit includes of linux/error-injection.h to files that use
   the ALLOW_ERROR_INJECTION() macro and currently rely on it being
   provided indirectly via linux/module.h. Then remove the unnecessary
   linux/error-injection.h include from linux/module.h.

 - Replace __MODULE_STRING() with __stringify() in various drivers in
   preparation for removing the former macro.

* tag 'modules-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/modules/linux:
  drivers: Replace __MODULE_STRING() with __stringify()
  module: Fix uninitialized count read of unloaded taint tracking record
  rust: module_param: Fix potentially incorrect access of `SetOnce&lt;T&gt;`
  module: Remove the error-injection.h include from linux/module.h
  drm/xe: Include error-injection.h for ALLOW_ERROR_INJECTION()
  drm/i915: Include error-injection.h for ALLOW_ERROR_INJECTION()
  syscalls: Include error-injection.h for ALLOW_ERROR_INJECTION()
  net: Include error-injection.h for ALLOW_ERROR_INJECTION()
  block: Include error-injection.h for ALLOW_ERROR_INJECTION()
  module: Bring includes in linux/kmod.h up to date
  time/jiffies: Include linux/sysctl.h for proc_int_u2k_conv_uop(), ...
  umh, treewide: Explicitly include linux/umh.h where needed
  modules/kmod: Allocate argv with kmalloc_array()
  module/kallsyms: Ignore local labels and mapping symbols during module load
  module/kallsyms: Refactor current symbol filtering into is_core_symbol()
  module/kallsyms: Rename is_mapping_symbol() to is_ignored_kernel_symbol()
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: imx: add I2C_M_REV_DIR_ADDR and I2C_M_NOSTART</title>
<updated>2026-10-23T16:27:42+00:00</updated>
<author>
<name>Vincent Jardin</name>
<email>vjardin@free.fr</email>
</author>
<published>2026-10-23T14:20:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c2867bb0fa1dd1932a7a382b44df376d2085a66f'/>
<id>c2867bb0fa1dd1932a7a382b44df376d2085a66f</id>
<content type='text'>
The Realtek RTL8366SE SMI read frame per:

  S Addr Rd [A] reg[7:0] [A] reg[15:8] [A] [data[7:0]] A [data[15:8]] NA P

Linux support it using I2C_M_REV_DIR_ADDR on a write message
that inverts the transmitted R/W bit, and I2C_M_NOSTART on the following
read message that continues the frame without re-addressing.

This NXP i2c-imx is missing such support, so on an LX2160A the Realtek switch
could not be used.

Signed-off-by: Vincent Jardin &lt;vjardin@free.fr&gt;
Acked-by: Carlos Song &lt;carlos.song@nxp.com&gt;
Reviewed-by: Frank Li &lt;Frank.Li@nxp.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261023-for-upstream-i2c-imx-lx2160-reverse-v3-1-a07b249df381@free.fr
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Realtek RTL8366SE SMI read frame per:

  S Addr Rd [A] reg[7:0] [A] reg[15:8] [A] [data[7:0]] A [data[15:8]] NA P

Linux support it using I2C_M_REV_DIR_ADDR on a write message
that inverts the transmitted R/W bit, and I2C_M_NOSTART on the following
read message that continues the frame without re-addressing.

This NXP i2c-imx is missing such support, so on an LX2160A the Realtek switch
could not be used.

Signed-off-by: Vincent Jardin &lt;vjardin@free.fr&gt;
Acked-by: Carlos Song &lt;carlos.song@nxp.com&gt;
Reviewed-by: Frank Li &lt;Frank.Li@nxp.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261023-for-upstream-i2c-imx-lx2160-reverse-v3-1-a07b249df381@free.fr
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: mt7621: fix copying uninitialized kernel stack with reduced page_len</title>
<updated>2026-10-23T16:27:28+00:00</updated>
<author>
<name>Christian Marangi</name>
<email>ansuelsmth@gmail.com</email>
</author>
<published>2026-10-22T19:38:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b7fd977fec0d3f2bdd4f13bb59949c817a365652'/>
<id>b7fd977fec0d3f2bdd4f13bb59949c817a365652</id>
<content type='text'>
When a page_len is less than 5 bytes in mtk_i2c_xfer, uninitialized kernel
stack data is copied and written to REG_SM0D1_REG. Equally on the read
part, an unnecessary read is done.

Guard these extra copy/write and read for the page_len to fix leaking
uninitialized stack memory.

Fixes: d04913ec5f89 ("i2c: mt7621: Add MediaTek MT7621/7628/7688 I2C driver")
Signed-off-by: Christian Marangi &lt;ansuelsmth@gmail.com&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v5.3+
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261022193853.670625-1-ansuelsmth@gmail.com
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a page_len is less than 5 bytes in mtk_i2c_xfer, uninitialized kernel
stack data is copied and written to REG_SM0D1_REG. Equally on the read
part, an unnecessary read is done.

Guard these extra copy/write and read for the page_len to fix leaking
uninitialized stack memory.

Fixes: d04913ec5f89 ("i2c: mt7621: Add MediaTek MT7621/7628/7688 I2C driver")
Signed-off-by: Christian Marangi &lt;ansuelsmth@gmail.com&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v5.3+
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261022193853.670625-1-ansuelsmth@gmail.com
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: designware: queue only one read command for block reads</title>
<updated>2026-10-22T19:22:15+00:00</updated>
<author>
<name>Navon John Lukose</name>
<email>navonjohnlukose@gmail.com</email>
</author>
<published>2026-09-20T23:00:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=73dae605cad7921800677d982bfaeb81cc930dec'/>
<id>73dae605cad7921800677d982bfaeb81cc930dec</id>
<content type='text'>
i2c_dw_xfer_msg() pre-queues up to rx_fifo_depth read commands based
on the initial msg.len. For I2C_M_RECV_LEN transfers the real length
is unknown until the first byte arrives and i2c_dw_recv_len() runs.
When a large initial length is passed, the surplus pre-queued reads
leave rx_outstanding non-zero after i2c_dw_recv_len() adjusts
msg.len, so the completion condition is never met and the transfer
times out. In a loop, this repeatedly times out the controller and
disrupts unrelated driver-bound devices on the same adapter.

Queue only one read command while I2C_M_RECV_LEN is pending.
i2c_dw_recv_len() re-enables TX_EMPTY, and the rest are queued once
the device-reported length is known.

Fixes: c3ae106050b9 ("i2c: designware: Implement support for SMBus block read and write")
Signed-off-by: Navon John Lukose &lt;navonjohnlukose@gmail.com&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v4.10+
Acked-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
i2c_dw_xfer_msg() pre-queues up to rx_fifo_depth read commands based
on the initial msg.len. For I2C_M_RECV_LEN transfers the real length
is unknown until the first byte arrives and i2c_dw_recv_len() runs.
When a large initial length is passed, the surplus pre-queued reads
leave rx_outstanding non-zero after i2c_dw_recv_len() adjusts
msg.len, so the completion condition is never met and the transfer
times out. In a loop, this repeatedly times out the controller and
disrupts unrelated driver-bound devices on the same adapter.

Queue only one read command while I2C_M_RECV_LEN is pending.
i2c_dw_recv_len() re-enables TX_EMPTY, and the rest are queued once
the device-reported length is known.

Fixes: c3ae106050b9 ("i2c: designware: Implement support for SMBus block read and write")
Signed-off-by: Navon John Lukose &lt;navonjohnlukose@gmail.com&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v4.10+
Acked-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: qcom-geni: Add dynamic transfer timeout based on transfer length and frequency</title>
<updated>2026-10-22T19:22:14+00:00</updated>
<author>
<name>Aniket Randive</name>
<email>aniket.randive@oss.qualcomm.com</email>
</author>
<published>2026-09-11T06:59:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=02d9f7b8324d3a09b01c9a4c0ab0e6846e6691dc'/>
<id>02d9f7b8324d3a09b01c9a4c0ab0e6846e6691dc</id>
<content type='text'>
The driver uses a static XFER_TIMEOUT of HZ (1 second) for all transfers
regardless of message length or bus frequency, causing unnecessary
delays on error paths.

Use i2c_update_timeout() API to calculate transfer timeouts dynamically
based on message length and bus frequency. update the timeout per message
for FIFO, SE-DMA and GPI single descriptor transfers. For GPI multi
descriptor transfers, calculate the timeout from the combined length of
all messages, as completion is reported only after the entire batch has
finished.

A 10x safety margin over the theoretical wire time is applied, with a
300ms floor to account for I2C clock stretching and other situations where
a slave may keep SCL asserted for an extended period, including faulty
devices holding the bus.

Signed-off-by: Aniket Randive &lt;aniket.randive@oss.qualcomm.com&gt;
Reviewed-by: Mukesh Kumar Savaliya &lt;mukesh.savaliya@oss.qualcomm.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20260911-master-v9-2-77ac458344e2@oss.qualcomm.com
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The driver uses a static XFER_TIMEOUT of HZ (1 second) for all transfers
regardless of message length or bus frequency, causing unnecessary
delays on error paths.

Use i2c_update_timeout() API to calculate transfer timeouts dynamically
based on message length and bus frequency. update the timeout per message
for FIFO, SE-DMA and GPI single descriptor transfers. For GPI multi
descriptor transfers, calculate the timeout from the combined length of
all messages, as completion is reported only after the entire batch has
finished.

A 10x safety margin over the theoretical wire time is applied, with a
300ms floor to account for I2C clock stretching and other situations where
a slave may keep SCL asserted for an extended period, including faulty
devices holding the bus.

Signed-off-by: Aniket Randive &lt;aniket.randive@oss.qualcomm.com&gt;
Reviewed-by: Mukesh Kumar Savaliya &lt;mukesh.savaliya@oss.qualcomm.com&gt;
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20260911-master-v9-2-77ac458344e2@oss.qualcomm.com
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'i2c-7.4-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux</title>
<updated>2026-10-22T17:36:22+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-10-22T17:36:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=bb436f2a8568d14f176475c79b0d5069f0a6f9e3'/>
<id>bb436f2a8568d14f176475c79b0d5069f0a6f9e3</id>
<content type='text'>
Pull i2c updates from Andi Shyti:
 "The main changes are the new Novatek NT72676 driver, the qcom-cci
  clock and timing updates and a collection of smaller driver, core and
  DT binding improvements.

  Core and helpers:
   - acpi: run ASUS and Dell touchpads at 100 kHz to avoid lag
   - core: return bool from check_functionality() and update users
   - smbus: limit block reads to the caller's buffer size
   - acpi: mark I2C transfer buffers as DMA-safe

  Drivers:
   - qcom-geni: several firmware node and runtime PM improvements
   - qcom-cci: several patches rework clock selection and timings
   - qcom-cci: enable SCL clock stretching
   - imx-lpi2c: fix DMA mapping device selection and cleanup
   - designware: tune RX FIFO thresholds to reduce interrupts
   - i801: respect SPD write protection when probing DDR5 modules
   - bcm2835: fully initialize clock configuration data

  Generic cleanups:
   - mux: simplify channel lookup and firmware node handling
   - core, busses: tidy up ACPI device ID tables
   - docs: clarify adapter lookup and fix a client driver example
   - xlnx: update maintainer for Xilinx IIC bindings
   - ljca: remove redundant adapter deletion

  New support and DT bindings:
   - add DW compatibles for Synaptics SL2610 and UltraRISC DP1000
   - allow six DMA channels for R-Car Gen5
   - add Allwinner A733 compatible to mv64xxx bindings
   - add support for Novatek NT72676 (new driver)"

* tag 'i2c-7.4-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux: (37 commits)
  i2c: imx-lpi2c: remove dmaengine_desc_free()
  i2c: busses: use named initializers for acpi_device_id
  i2c: i2c-core-acpi: use named initializers for acpi_device_id
  i2c: i801: Gate SPD instantiation on SPD Write Disable bit
  i2c: acpi: Use I2C_M_DMA_SAFE in acpi_gsb_i2c_[read|write]_bytes()
  dt-bindings: i2c: dw: Add Synaptics sl2610 i2c
  i2c: designware: size the RX FIFO threshold to the queued transfer
  i2c: imx-lpi2c: use dmaengine_get_dma_device() for DMA mapping
  docs: i2c: writing-clients: Add missing end of command
  i2c: qcom-cci: skip core clock rates the clock cannot provide
  i2c: core: document preference for i2c_get_adapter_by_fwnode()
  i2c: qcom-cci: always enable SCL clock stretching
  MAINTAINERS: Add entry for Novatek NT72676 I2C controller driver
  i2c: nt72676: Add Novatek NT72676 I2C controller driver
  dt-bindings: i2c: Add Novatek NT72676 I2C controller
  i2c: acpi: Force ASUE140D touchpads to 100 kHz
  i2c: qcom-cci: Enforce the required CCI clock rate
  i2c: qcom-cci: Share the timing table across CCI revisions
  i2c: qcom-cci: Add 19.2 MHz timings for the v2 CCI
  i2c: qcom-cci: Support per-mode CCI clock rates
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull i2c updates from Andi Shyti:
 "The main changes are the new Novatek NT72676 driver, the qcom-cci
  clock and timing updates and a collection of smaller driver, core and
  DT binding improvements.

  Core and helpers:
   - acpi: run ASUS and Dell touchpads at 100 kHz to avoid lag
   - core: return bool from check_functionality() and update users
   - smbus: limit block reads to the caller's buffer size
   - acpi: mark I2C transfer buffers as DMA-safe

  Drivers:
   - qcom-geni: several firmware node and runtime PM improvements
   - qcom-cci: several patches rework clock selection and timings
   - qcom-cci: enable SCL clock stretching
   - imx-lpi2c: fix DMA mapping device selection and cleanup
   - designware: tune RX FIFO thresholds to reduce interrupts
   - i801: respect SPD write protection when probing DDR5 modules
   - bcm2835: fully initialize clock configuration data

  Generic cleanups:
   - mux: simplify channel lookup and firmware node handling
   - core, busses: tidy up ACPI device ID tables
   - docs: clarify adapter lookup and fix a client driver example
   - xlnx: update maintainer for Xilinx IIC bindings
   - ljca: remove redundant adapter deletion

  New support and DT bindings:
   - add DW compatibles for Synaptics SL2610 and UltraRISC DP1000
   - allow six DMA channels for R-Car Gen5
   - add Allwinner A733 compatible to mv64xxx bindings
   - add support for Novatek NT72676 (new driver)"

* tag 'i2c-7.4-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux: (37 commits)
  i2c: imx-lpi2c: remove dmaengine_desc_free()
  i2c: busses: use named initializers for acpi_device_id
  i2c: i2c-core-acpi: use named initializers for acpi_device_id
  i2c: i801: Gate SPD instantiation on SPD Write Disable bit
  i2c: acpi: Use I2C_M_DMA_SAFE in acpi_gsb_i2c_[read|write]_bytes()
  dt-bindings: i2c: dw: Add Synaptics sl2610 i2c
  i2c: designware: size the RX FIFO threshold to the queued transfer
  i2c: imx-lpi2c: use dmaengine_get_dma_device() for DMA mapping
  docs: i2c: writing-clients: Add missing end of command
  i2c: qcom-cci: skip core clock rates the clock cannot provide
  i2c: core: document preference for i2c_get_adapter_by_fwnode()
  i2c: qcom-cci: always enable SCL clock stretching
  MAINTAINERS: Add entry for Novatek NT72676 I2C controller driver
  i2c: nt72676: Add Novatek NT72676 I2C controller driver
  dt-bindings: i2c: Add Novatek NT72676 I2C controller
  i2c: acpi: Force ASUE140D touchpads to 100 kHz
  i2c: qcom-cci: Enforce the required CCI clock rate
  i2c: qcom-cci: Share the timing table across CCI revisions
  i2c: qcom-cci: Add 19.2 MHz timings for the v2 CCI
  i2c: qcom-cci: Support per-mode CCI clock rates
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>i2c: xiic: restore non-managed runtime PM to fix clk WARN flood</title>
<updated>2026-10-15T20:34:34+00:00</updated>
<author>
<name>Abdurrahman Hussain</name>
<email>abdurrahman@nexthop.ai</email>
</author>
<published>2026-10-14T23:56:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d33373c565af9c8a28776af02bd20ba6e5724211'/>
<id>d33373c565af9c8a28776af02bd20ba6e5724211</id>
<content type='text'>
The devres conversion replaced manual pm_runtime_enable()/disable() with
devm_pm_runtime_set_active_enabled() and dropped the remove-time runtime
PM teardown. The managed release tears runtime PM down in the wrong
order: it calls pm_runtime_dont_use_autosuspend() before
pm_runtime_disable(), i.e. while runtime PM is still enabled, and devres
is LIFO so the devm_clk_get_enabled() release runs afterwards.

At remove(), pm_runtime_put_sync() leaves the device active with the
autosuspend timer armed. Clearing use_autosuspend then makes rpm_idle()
suspend immediately, and xiic_i2c_runtime_suspend() clk_disable()s the
clock. The later devm_clk_get_enabled() release clk_disable_unprepare()s
the already-disabled clock, so clk_core_disable() WARNs ("clkN already
disabled") on every teardown.

Drop the managed helper and restore the non-managed runtime PM setup and
teardown, so runtime PM is enabled once in probe and disabled once in
remove and the clock enable count stays balanced.

Order the remove teardown so runtime PM is disabled before the usage
count is dropped: pm_runtime_disable() followed by pm_runtime_put_noidle()
instead of pm_runtime_put_sync(). Dropping the count first with autosuspend
still enabled arms the autosuspend timer, and a preemption before
pm_runtime_disable() lets it expire, suspend the device and clk_disable()
the clock, which the devm release then disables again - the same WARN.

Restore the non-managed IRQ request as well. The probe error paths now
unwind runtime PM by hand via goto, and a devm-registered handler is only
freed later during devres unwind, so it would stay live across the manual
teardown (and across any future failing step added after it). Request the
IRQ with request_threaded_irq() and free it explicitly in the probe error
path and in remove. The probe error path also clears use_autosuspend, to
match the teardown in remove().

Fixes: 50c63491ff26 ("i2c: xiic: switch to devres managed APIs")
Signed-off-by: Abdurrahman Hussain &lt;abdurrahman@nexthop.ai&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v7.1+
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261014-i2c-xiic-restore-runtime-pm-teardown-v8-1-40668c270069@nexthop.ai
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The devres conversion replaced manual pm_runtime_enable()/disable() with
devm_pm_runtime_set_active_enabled() and dropped the remove-time runtime
PM teardown. The managed release tears runtime PM down in the wrong
order: it calls pm_runtime_dont_use_autosuspend() before
pm_runtime_disable(), i.e. while runtime PM is still enabled, and devres
is LIFO so the devm_clk_get_enabled() release runs afterwards.

At remove(), pm_runtime_put_sync() leaves the device active with the
autosuspend timer armed. Clearing use_autosuspend then makes rpm_idle()
suspend immediately, and xiic_i2c_runtime_suspend() clk_disable()s the
clock. The later devm_clk_get_enabled() release clk_disable_unprepare()s
the already-disabled clock, so clk_core_disable() WARNs ("clkN already
disabled") on every teardown.

Drop the managed helper and restore the non-managed runtime PM setup and
teardown, so runtime PM is enabled once in probe and disabled once in
remove and the clock enable count stays balanced.

Order the remove teardown so runtime PM is disabled before the usage
count is dropped: pm_runtime_disable() followed by pm_runtime_put_noidle()
instead of pm_runtime_put_sync(). Dropping the count first with autosuspend
still enabled arms the autosuspend timer, and a preemption before
pm_runtime_disable() lets it expire, suspend the device and clk_disable()
the clock, which the devm release then disables again - the same WARN.

Restore the non-managed IRQ request as well. The probe error paths now
unwind runtime PM by hand via goto, and a devm-registered handler is only
freed later during devres unwind, so it would stay live across the manual
teardown (and across any future failing step added after it). Request the
IRQ with request_threaded_irq() and free it explicitly in the probe error
path and in remove. The probe error path also clears use_autosuspend, to
match the teardown in remove().

Fixes: 50c63491ff26 ("i2c: xiic: switch to devres managed APIs")
Signed-off-by: Abdurrahman Hussain &lt;abdurrahman@nexthop.ai&gt;
Cc: &lt;stable@vger.kernel.org&gt; # v7.1+
Signed-off-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Link: https://patch.msgid.link/20261014-i2c-xiic-restore-runtime-pm-teardown-v8-1-40668c270069@nexthop.ai
</pre>
</div>
</content>
</entry>
<entry>
<title>drivers: Replace __MODULE_STRING() with __stringify()</title>
<updated>2026-10-14T08:51:18+00:00</updated>
<author>
<name>Petr Pavlu</name>
<email>petr.pavlu@suse.com</email>
</author>
<published>2026-10-02T08:31:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=08abfa5a161e1b6e6244cb2090b0530bc0920798'/>
<id>08abfa5a161e1b6e6244cb2090b0530bc0920798</id>
<content type='text'>
__MODULE_STRING() has been an alias for __stringify() since "[PATCH]
MODULE_PARM support for older modules" [1] in 2002-12. That change also
moved it to the graveyard section at the end of linux/module.h

Replace the remaining uses of __MODULE_STRING() with __stringify() in
preparation for its removal.

Link: https://git.kernel.org/tglx/history/c/136839a1b4 [1]
Acked-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Acked-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Acked-by: Ian Abbott &lt;abbotti@mev.co.uk&gt;
Acked-by: Alexandre Belloni &lt;alexandre.belloni@bootlin.com&gt;
Acked-by: Mika Westerberg &lt;westeri@kernel.org&gt;
Reviewed-by: Aleksandr Loktionov &lt;aleksandr.loktionov@intel.com&gt;
Signed-off-by: Petr Pavlu &lt;petr.pavlu@suse.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
__MODULE_STRING() has been an alias for __stringify() since "[PATCH]
MODULE_PARM support for older modules" [1] in 2002-12. That change also
moved it to the graveyard section at the end of linux/module.h

Replace the remaining uses of __MODULE_STRING() with __stringify() in
preparation for its removal.

Link: https://git.kernel.org/tglx/history/c/136839a1b4 [1]
Acked-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Acked-by: Andi Shyti &lt;andi.shyti@kernel.org&gt;
Acked-by: Ian Abbott &lt;abbotti@mev.co.uk&gt;
Acked-by: Alexandre Belloni &lt;alexandre.belloni@bootlin.com&gt;
Acked-by: Mika Westerberg &lt;westeri@kernel.org&gt;
Reviewed-by: Aleksandr Loktionov &lt;aleksandr.loktionov@intel.com&gt;
Signed-off-by: Petr Pavlu &lt;petr.pavlu@suse.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
