Re: [PATCH] i2c: tegra: Don't mark devices with pins as IRQ safe

From: Mikko Perttunen

Date: Mon Feb 02 2026 - 00:09:10 EST


On Monday, February 2, 2026 1:42 PM Mikko Perttunen wrote:
> I2C devices with associated pinctrl states (DPAUX I2C controllers)
> will change pinctrl state during runtime PM. This requires taking
> a mutex, so these devices cannot be marked as IRQ safe.
>
> Discovered through lockdep.

Eh, I guess not lockdep, just normal lock debugging..

>
> Signed-off-by: Mikko Perttunen <mperttunen@xxxxxxxxxx>
> ---
> drivers/i2c/busses/i2c-tegra.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
> index bec619b9af4e..4eaeb395d5db 100644
> --- a/drivers/i2c/busses/i2c-tegra.c
> +++ b/drivers/i2c/busses/i2c-tegra.c
> @@ -2047,8 +2047,11 @@ static int tegra_i2c_probe(struct platform_device *pdev)
> *
> * VI I2C device shouldn't be marked as IRQ-safe because VI I2C won't
> * be used for atomic transfers. ACPI device is not IRQ safe also.
> + *
> + * Devices with pinctrl states cannot be marked IRQ-safe as the pinctrl
> + * state transitions during runtime PM require mutexes.
> */
> - if (!IS_VI(i2c_dev) && !has_acpi_companion(i2c_dev->dev))
> + if (!IS_VI(i2c_dev) && !has_acpi_companion(i2c_dev->dev) && !i2c_dev->dev->pins)
> pm_runtime_irq_safe(i2c_dev->dev);
>
> pm_runtime_enable(i2c_dev->dev);
>
> ---
> base-commit: 4f938c7d3b25d87b356af4106c2682caf8c835a2
> change-id: 20260202-i2c-dpaux-irqsafe-edc04628b401
>
>