From 93e7024e0a161a69c4d9ac63099b9d139951f88a Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Fri, 11 Jul 2025 17:23:08 +0100 Subject: [PATCH] usb: typec: Disable async suspend for fusb301 Upstream commit aa7a9275ab81 ("PM: sleep: Suspend async parents after suspending children") triggers a suspend issue on Tegra234 Jetson Orin Nano boards because it had reordered the suspend of devices with async suspend enabled with respect to some other devices. This commit is present in Linux v6.16 kernels. The same issue was observed with the cypd4226 Type-C controller used on other Jetson platforms and due to its dependencies on other devices it is necessary to disable async suspend to fix the issue [0]. Fix suspend for Tegra234 Jetson Nano platforms by disabling 'async' suspend for the fusb301 device. Note that it is safe to disable this for all kernel versions. [0] https://lore.kernel.org/lkml/6180608.lOV4Wx5bFT@rjwysocki.net/ JIRA LINQPJ14-73 Change-Id: If08932406c43bca2736164a2fdd96a5a4b9fa81c Signed-off-by: Jon Hunter Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3404885 (cherry picked from commit 21686177a6d395701cc8f19088090142657899a0) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3411825 GVS: buildbot_gerritrpt Reviewed-by: Brad Griffis --- drivers/usb/typec/fusb301.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/fusb301.c b/drivers/usb/typec/fusb301.c index 717ec17f..b87f0e01 100644 --- a/drivers/usb/typec/fusb301.c +++ b/drivers/usb/typec/fusb301.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2021, LGE Inc. All rights reserved. * - * SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. * All rights reserved. * * This program is free software; you can redistribute it and/or modify it @@ -1463,6 +1463,8 @@ static int fusb301_probe(struct i2c_client *client, goto destroy_workqueue; } + device_disable_async_suspend(cdev); + enable_irq_wake(client->irq); fusb301_reset_device(chip);