linux/drivers/i2c
Akhil R 09e41cebb5 i2c: tegra: Fix NOIRQ suspend/resume
commit 656646b384 upstream.

The Tegra I2C driver relies on runtime PM to wake up the controller before
each transfer. However, runtime PM is disabled between the system suspend
and NOIRQ suspend. If an I2C device initiates a transfer during this
window, the I2C controller fails to wake up and the transfer fails. To
handle this, the controller must be kept available for this period to
allow transfers.

Rework the I2C controller's system PM callbacks such that the controller
is resumed from runtime suspend during system suspend and it stays
RPM_ACTIVE throughout the suspend-resume cycle until it is runtime
suspended back in the system resume. The clocks are disabled in NOIRQ
suspend and enabled back in NOIRQ resume by calling the controller's
runtime PM functions directly.

Fixes: 8ebf15e9c8 ("i2c: tegra: Move suspend handling to NOIRQ phase")
Assisted-by: Cursor:claude-4.6-opus
Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
Cc: <stable@vger.kernel.org> # v5.4+
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20260518114013.62065-5-akhilrajeev@nvidia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-06-19 13:33:38 +02:00
..
algos i2c: algo: bit: use new macro to specifiy capabilities 2021-01-22 09:59:21 +01:00
busses i2c: tegra: Fix NOIRQ suspend/resume 2026-06-19 13:33:38 +02:00
muxes i2c: mux: demux-pinctrl: check initial mux selection, too 2025-01-23 17:16:00 +01:00
i2c-boardinfo.c i2c: Remove support for dangling device properties 2021-04-10 21:43:02 +02:00
i2c-core-acpi.c i2c: Force DLL0945 touchpad i2c freq to 100khz 2025-08-28 16:24:24 +02:00
i2c-core-base.c i2c: core: Lock address during client device instantiation 2024-10-17 15:11:43 +02:00
i2c-core-of.c i2c: add fwnode APIs 2024-07-05 09:14:12 +02:00
i2c-core-slave.c i2c: slave: add sanity check when unregistering 2020-07-28 18:37:17 +02:00
i2c-core-smbus.c i2c: smbus: Check for parent device before dereference 2024-10-17 15:12:01 +02:00
i2c-core.h i2c: core: Fix atomic xfer check for non-preempt config 2024-01-15 18:51:22 +01:00
i2c-dev.c i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl 2026-06-19 13:33:32 +02:00
i2c-mux.c i2c: mux: Avoid potential false error message in i2c_mux_add_adapter 2023-10-25 11:58:59 +02:00
i2c-slave-eeprom.c i2c: busses: Use fallthrough pseudo-keyword 2020-07-23 22:04:08 +02:00
i2c-slave-testunit.c i2c: testunit: avoid re-issued work after read message 2024-07-18 13:07:44 +02:00
i2c-smbus.c i2c: smbus: Use device_*() functions instead of of_*() 2024-10-17 15:11:43 +02:00
i2c-stub.c i2c: stub: remove definition of DEBUG 2021-01-17 13:00:10 +01:00
Kconfig i2c: add slave testunit driver 2020-09-21 11:02:17 +02:00
Makefile i2c: add slave testunit driver 2020-09-21 11:02:17 +02:00