From nobody Mon May 25 02:57:57 2026 Received: from s1.g1.infrastructure.qtmlabs.xyz (s1.g1.infrastructure.qtmlabs.xyz [107.172.1.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DDF8352014; Tue, 19 May 2026 11:51:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=107.172.1.117 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779191483; cv=none; b=G/d6mLoVngcJywrq8qGfpnaekK+5FfmQZfaV72VwmWmAa9rnbkqK53VHRifFYM8zRvKAUY6KC1THj37iLREDxXxHvwWdIpi0foDcGAgnSLprox3bdlzYgXjbnXmrt9HNIKcFbbL8BCe5XL/SzB8N845vHFv8MIQ+t9s8wRyL+HE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779191483; c=relaxed/simple; bh=paM6vdPGJA7P+/dgFbqX2Qi9b+I3osbE2ZVrd4bDiHE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eHOx16Ae6rJQDhlC+EcUxVsIX7NJ7pwQYH9jKagT8M59fmHn5Yy1VSQkigCQLv6GH2cV65x4xJHFTkiwgQDgvfHTbgeBYCpf2gxP+JXclgDI/J5ByxhzB4lAuALMDbTv/KSOhBBH1/3TvU+WFjcwLrc359fMNb6LmMprJmi/9AM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=qtmlabs.xyz; spf=pass smtp.mailfrom=qtmlabs.xyz; dkim=pass (2048-bit key) header.d=qtmlabs.xyz header.i=@qtmlabs.xyz header.b=XB3b9wLY; arc=none smtp.client-ip=107.172.1.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=qtmlabs.xyz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qtmlabs.xyz Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qtmlabs.xyz header.i=@qtmlabs.xyz header.b="XB3b9wLY" From: Myrrh Periwinkle DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtmlabs.xyz; s=dkim; t=1779190911; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+PEXucm4+KvhT3oPCGhF+lrQv1vgkPmwJXzkJIzEa/A=; b=XB3b9wLYOArOYHetq2Wti57zfMnE4rRgkSCCk/I9VKtUa3iJ7uWYrIT/YuGvY56+iixDhr VF4vgY2t0hP84RCca+/EIrShtyoc3t/7Avietv+cxFapU+kzdOh9A2Cc5QEf0lEfqQwLJW 7sKmrZyhiaWAyokcU8V+U4lI07D6ueDFyND1x1/QK4xolsQ1vI1IqT5QaQrV81R4DXRsmM /y7RMcTkcviuG12ULQ9zmeGiLbRxd7GoUgHXxA+PkvVLK4QUh/WlokL7IjGRp6ZGUbiVVi L3r3obDA1kd7oG2tPJJEbKwBNgE1kVdqq1wnyLTE8LUXLMH1Y6a5K/sOJzzQZQ== Authentication-Results: s1.g1.infrastructure.qtmlabs.xyz; auth=pass smtp.mailfrom=myrrhperiwinkle@qtmlabs.xyz Date: Tue, 19 May 2026 18:41:39 +0700 Subject: [PATCH 1/2] usb: typec: ucsi: Check if power role change actually happened before handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-ucsi-fix-2-v1-1-6f1239535187@qtmlabs.xyz> References: <20260519-ucsi-fix-2-v1-0-6f1239535187@qtmlabs.xyz> In-Reply-To: <20260519-ucsi-fix-2-v1-0-6f1239535187@qtmlabs.xyz> To: Heikki Krogerus , Greg Kroah-Hartman Cc: Sergey Senozhatsky , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Myrrh Periwinkle , stable@vger.kernel.org X-Spamd-Bar: ------- The CrOS EC may send a connector status change event with the power direction changed flag set even if the power direction hasn't actually changed after initiating a SET_PDR command internally [1]. In practice this happens on every system suspend due to other changes performed by the EC [2][3][4], causing suspend to fail. Fix this by checking if the power role change actually happened before handling it. [1]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:sr= c/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=3D1689;drc=3D2= d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794 [2]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:sr= c/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=3D3923;drc=3D2= d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794 [3]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:sr= c/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=3D5094;drc=3D2= d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794 [4]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:sr= c/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=3D2229;drc=3D2= d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794 Cc: stable@vger.kernel.org Fixes: 7616f006db07 ("usb: typec: ucsi: Update power_supply on power role c= hange") Signed-off-by: Myrrh Periwinkle Reviewed-by: Heikki Krogerus --- drivers/usb/typec/ucsi/ucsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 5b7ad9e99cb9..e19b656609e4 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -1277,7 +1277,7 @@ static void ucsi_handle_connector_change(struct work_= struct *work) work); struct ucsi *ucsi =3D con->ucsi; u8 curr_scale, volt_scale; - enum typec_role role; + enum typec_role role, prev_role; u16 change; int ret; u32 val; @@ -1288,6 +1288,8 @@ static void ucsi_handle_connector_change(struct work_= struct *work) dev_err_once(ucsi->dev, "%s entered without EVENT_PENDING\n", __func__); =20 + prev_role =3D UCSI_CONSTAT(con, PWR_DIR); + ret =3D ucsi_get_connector_status(con, true); if (ret) { dev_err(ucsi->dev, "%s: GET_CONNECTOR_STATUS failed (%d)\n", @@ -1304,7 +1306,7 @@ static void ucsi_handle_connector_change(struct work_= struct *work) change =3D UCSI_CONSTAT(con, CHANGE); role =3D UCSI_CONSTAT(con, PWR_DIR); =20 - if (change & UCSI_CONSTAT_POWER_DIR_CHANGE) { + if ((change & UCSI_CONSTAT_POWER_DIR_CHANGE) && role !=3D prev_role) { typec_set_pwr_role(con->port, role); ucsi_port_psy_changed(con); =20 --=20 2.54.0 From nobody Mon May 25 02:57:57 2026 Received: from s1.g1.infrastructure.qtmlabs.xyz (s1.g1.infrastructure.qtmlabs.xyz [107.172.1.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7321A4968EA; Tue, 19 May 2026 11:41:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=107.172.1.117 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779190918; cv=none; b=Ty3n7XL9XzvM8nsT1xDwnoVviGYuWC2EKl+wgLcIFcguprWPf9BNE0BJin360UxsP5+v9u60CSiyzzWeUVHpC7zGmgB4Z1GOvDj2B9x7JIWxqzBdMkHXMTSqgQQUrR+XWhYydm9ay9idnjIhaaOS0O520hck+9UvZbqcd4ASuH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779190918; c=relaxed/simple; bh=YjUy2YDdRmRqudKJsGT2J8c3flweY8fiADAo4FpfS6M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=swi1z9lSFjCvnb1y+ls9HVhfSGQQy6FkGLaEIEDeQ/NjcLfmqikm6ljREkx6GCtT3KppOOX+MEY9OqHk6q+9Pa6iJrAKmnT6tKkGQmS4R8c1SL2r8n52PTwTrVwYwLAfMae4CC3nkcq8D2TKcWr+p2/fs1C6iP0s6mJmD1ldLmE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=qtmlabs.xyz; spf=pass smtp.mailfrom=qtmlabs.xyz; dkim=pass (2048-bit key) header.d=qtmlabs.xyz header.i=@qtmlabs.xyz header.b=pZ9+DDUN; arc=none smtp.client-ip=107.172.1.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=qtmlabs.xyz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qtmlabs.xyz Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qtmlabs.xyz header.i=@qtmlabs.xyz header.b="pZ9+DDUN" From: Myrrh Periwinkle DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtmlabs.xyz; s=dkim; t=1779190915; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t6F5wUe5+M16cP+CoQiPBEbtaaRqMELGGUG6lgqwbMs=; b=pZ9+DDUNXeWlTPPvXVtp3OyCmlmAxrSxFFtLmBNxFlaf2irIPamGMbgTZ01gWj68DspBiV Cw9DdDqs+P1dvMBbfKGJnmLE4heFE6sgKeWKvdpxIXpjs8ww0yiBfXUCWoG0NBKy/6YbHh pMFmhQD9NlQO9eNe2/UWgSalEgd5CptdpUdiwJqPgy1Ge6RCEK9PxfRTxEJnbPnXksfq6D ccGSCantQu3VC/j+fDmxz8qznvf1d6y4VV4V464LE27tT3i9edIroSx//EOI8Lmnr3K1LH 8MniuG6gQR30YwdVLaazOAtIPu+nICiGiI7MIfgHwpV3skB7xFwC6NWKSxhiKg== Authentication-Results: s1.g1.infrastructure.qtmlabs.xyz; auth=pass smtp.mailfrom=myrrhperiwinkle@qtmlabs.xyz Date: Tue, 19 May 2026 18:41:40 +0700 Subject: [PATCH 2/2] usb: typec: ucsi: Don't update power_supply on power role change if not connected Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-ucsi-fix-2-v1-2-6f1239535187@qtmlabs.xyz> References: <20260519-ucsi-fix-2-v1-0-6f1239535187@qtmlabs.xyz> In-Reply-To: <20260519-ucsi-fix-2-v1-0-6f1239535187@qtmlabs.xyz> To: Heikki Krogerus , Greg Kroah-Hartman Cc: Sergey Senozhatsky , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Myrrh Periwinkle , stable@vger.kernel.org X-Spamd-Bar: ------- We only need to update the power_supply on power role change if the port is connected, because otherwise the online status should be the same for both cases. Cc: stable@vger.kernel.org Fixes: 7616f006db07 ("usb: typec: ucsi: Update power_supply on power role c= hange") Signed-off-by: Myrrh Periwinkle --- drivers/usb/typec/ucsi/ucsi.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index e19b656609e4..c59c4d8ee076 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -1308,7 +1308,12 @@ static void ucsi_handle_connector_change(struct work= _struct *work) =20 if ((change & UCSI_CONSTAT_POWER_DIR_CHANGE) && role !=3D prev_role) { typec_set_pwr_role(con->port, role); - ucsi_port_psy_changed(con); + + /* Some power_supply properties vary depending on the power direction wh= en + * connected + */ + if (UCSI_CONSTAT(con, CONNECTED)) + ucsi_port_psy_changed(con); =20 /* Complete pending power role swap */ if (!completion_done(&con->complete)) --=20 2.54.0