From nobody Fri Apr 3 06:11:40 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 338CC41C2EB for ; Mon, 9 Mar 2026 20:33:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773088430; cv=none; b=C9c4Tfo+kxMFPUP5dQRM420R48JjnKFx7/3H/GqT2/T3x50fdCsVhIHaDptmd0fEw6P1UZZgU1NeaAczdDtLgKNkTP0JNodkYzy3uiGAS2wC4WQUDGEaLuu09ob8RPxNbzxu+tRHC4qPycZjdjHIowtPX99YHOWrLrjWPfw4RKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773088430; c=relaxed/simple; bh=1hJpGqDTRFoURWmmoaEOGT/N7Gx5d5iN/Mc6404ctVQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hzsgA9p1dtxeMSEIvPRJRfy+nQuBW/KprhbbOA1sQaKCuD1mKNz1CcQLpliaE3bmFB/Oer+cTATfSIj6he7P+3CEoUXZBzQ5fGg1ymsZO6Jp4CXaELo1xKYQPJI5hARCDqsOgLsYpvNsI6TQUdp7zmredrnYspILYJ75F3UKQ4I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=E1bIl3/Q; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Gljdgckk; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="E1bIl3/Q"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Gljdgckk" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 629HDML71214071 for ; Mon, 9 Mar 2026 20:33:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=mBBMFcAvNte 4hAjDhm0HFRJcXN1506iQWGvqP070rO0=; b=E1bIl3/QQGzsX6K9vtGnsmBSPQD SjivA4NY43warjed/UycU71X4M49FkErpiZI6T0MK0Qj7KTdAfM14zVvP62oK1+A PO4jNjTKmPbX0//s+YgfsL3+H4H5rL6aaUFx4YGv5IlMBq2gBVLF7wtYl84c38iE too2SybTLm0+oV8xCq3Sa1aG3f7np+S84zYLRJAQYWmfhzmIU3BJwetyrPb3eC7B DBOfng0v3upR9mgMQqltjwccsWnC4xGiQyj0hYNYjI2JZfrD7eNtY7spLGQ5IXGH 8HmeEOA0N/gPOyg2AtYAiEtUM9bqJVpVQnX8GyQv/yrbqSm3F3EfLsUIkbw== Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cswwkhmdd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 20:33:45 +0000 (GMT) Received: by mail-ot1-f70.google.com with SMTP id 46e09a7af769-7d4be1dee67so123443991a34.1 for ; Mon, 09 Mar 2026 13:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773088425; x=1773693225; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mBBMFcAvNte4hAjDhm0HFRJcXN1506iQWGvqP070rO0=; b=GljdgckkLU41tV4DcuM0rrw3sAiYGOdNwMLa4vGqd7vhxmZlK6qdVz+ToEIZmDCmqh EVIKG0v4lAMjmbQ7xPqWxURKSbjMlifwbXFG6+PML3fTetY5xOm4SJf8cI4BrlPgBfQ0 s/MKPQnH2vnnXh7eCh4oSXf9ps96nney+pX4vWMQjDkpKG0D7bFGik8+3v6wg/c3uXqV 4fRhrFbTTjAbiuUBYALBC3+t083CQ3HIWXOfd76q+m/HGRAXAZCZa6t5/ZY+BIICSqip Q9YhvMqKG8loYIZNXn7mzzXe/gS6qAUcUo39RvcRRNRr7BhCqyMTJz415eHR+ovbZIkz 7sqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773088425; x=1773693225; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mBBMFcAvNte4hAjDhm0HFRJcXN1506iQWGvqP070rO0=; b=mvNyZtGsHef55AagdId/bbVhimL3nundj2mX6p3U1TXF02Cp480t1aUTqY3tkUMIyy nPYNR02OYb9UpsEJnZRjHa9/p+ztb9yPs/MgkKr5gtHEMAU/k4gxnxmrJFfkKhDeFIRw F1Tvnr+RKQR4+OS+yNs1m7UATzmdaqFDab84B6Vwu6fY/54zykwL9SW7vrK28uxJdBrG f6cBddjdTgLgYRW3I9GmHAZRogMw9bVKlDWLb/SWQaOfuIiUwh00KCTZW70ioFzsKDoK VmO6wNymYn/esgqXrHes9SLBgLIHk+XFa5scaPc8wKP1ah2d4GekJoqsGvNiMU7QQVeo wqyQ== X-Forwarded-Encrypted: i=1; AJvYcCXpgsBpA45EUuzX5S1TUSpcjOcMm6h9Ensjw7v4brJVGJsuuuVRA7DUwJ9tbXE73miK/bSZyZjXmCfwTYQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxm+Q3wxaYY807QzqC8PE0QgbD1tUdiAnt1urGeBW2qyUFeDi+C WlweCwi94OxyhBKjrZ9Qe8kphSF78jN3JKbHFShLEZakbsCEe3Xmoh6XYEXp/Xh4hjV6FH+XF7r HKyZosK9nkJbaZLzV/YmwdfoZXkzFqhkTbyoZ+FtCTxL2Zk1Z016KrFuz/UHQcXomjy8= X-Gm-Gg: ATEYQzxxwwLmETcYhBn+53kpMDhVeL9YaEXIugKR5qUxVgHI9uoK3nHBUgL9EZmMzxI lnzAXMK84H44+snQCZpOfJDzZ91d8kLOktryj4jgZ0wzQxtfeIgvmGFdgSOtiYB/anp7rbmrB3B EvUaErmQbjYJgMbOju+B2IfwtarR5/x5B949OPBjVHTwYZfR6ghvS5Y1l2qpaQYr2FqZHAYWRbP ZlBiYUKLXz5q3DpOAgu9xz36IB9h8kGodFeCCQYLqNQTJuSb+UPfmZZ+yjzIpudcyVZNNMcwt6U 3lRlCKS9Vad+waF/VyGrgGB6N2AhVPkp+04fvGEyP3TISieqrYPaRwE3on9ZnGliMI2f2FeXQEA SATQj1HyeOCmCnceOA7wMbZJOte/LZ/7w9zs8A4app9K/JQ/edHstaynlOQgTuOZIbDi+cV9PGR s= X-Received: by 2002:a05:6830:610d:b0:7c7:b4e:edb4 with SMTP id 46e09a7af769-7d726f1520dmr8306672a34.8.1773088424719; Mon, 09 Mar 2026 13:33:44 -0700 (PDT) X-Received: by 2002:a05:6830:610d:b0:7c7:b4e:edb4 with SMTP id 46e09a7af769-7d726f1520dmr8306648a34.8.1773088424304; Mon, 09 Mar 2026 13:33:44 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7d74885b5a4sm3036494a34.23.2026.03.09.13.33.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 13:33:43 -0700 (PDT) From: Elson Serrao To: Greg Kroah-Hartman , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Souradeep Chowdhury Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH RFC v3 04/10] usb: misc: qcom_eud: add per-port role switch support Date: Mon, 9 Mar 2026 13:33:31 -0700 Message-Id: <20260309203337.803986-5-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260309203337.803986-1-elson.serrao@oss.qualcomm.com> References: <20260309203337.803986-1-elson.serrao@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=cZ/fb3DM c=1 sm=1 tr=0 ts=69af2ea9 cx=c_pps a=7uPEO8VhqeOX8vTJ3z8K6Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=uchPniyQPeoRSj6hJMsA:9 a=EXS-LbY8YePsIyqnH6vw:22 X-Proofpoint-ORIG-GUID: EjXyDwk4b8ViKbaeAb61rmJpEU7oVYE1 X-Proofpoint-GUID: EjXyDwk4b8ViKbaeAb61rmJpEU7oVYE1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDE4MiBTYWx0ZWRfX1ayH2riCUgMb iQiOmlMWrBxs++VyYtsUVuREQbberby+wIf2leF5iRhr7N1OTy1OfHRzKOzchw2P8RK2+f+iwRE IRX1rJaeAGRmQ0COP2Y/FqanG+dBKFQa5YuUCmRn2gX1HS01z5nHAdQ7mfGoyuNFT2tgY+Dek7F sCMQLEK7tWTEqCdvS4SDka5xJp97BjT39BmO64yqQvDkCGfQG4IGX6hQeRt84do3F3zf2/3En3m 3j2v0P0QGCS++Be4G5XaVbggd2g8n+l+YBKflFljESpx5KqUbCxp7GbhoL5uRTkb/tOavlZAtL6 7Lfcl0aterJIMA6LPJj5bJmt3OtDo+5Qh2ygp8Ic7W5qCzD1NTsTw/k3VKdYbTDP6h5HH7hjYh0 7CWAhWTvbWWSuewwPI5OCkxNNVqRgGsc7sh6NbZV0QOAWUFgokHn4dosLsdtL4HGuRRSQ7Sh5b4 Rw6C3UoL4q8QUhrDOpA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_05,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090182 Content-Type: text/plain; charset="utf-8" The EUD hardware can support multiple High-Speed USB ports, each connected to different USB controllers. The current implementation uses a single chip-level role switch, which cannot properly handle multi-port configurations where each USB port can operate in different role. Restructure the driver to support per-port role switches. Additionally, remove the unnecessary role switch call from enable_eud() as EUD need not modify the USB role upon enabling. Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index b042e01c6ca2..1936b45791d2 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -38,7 +38,7 @@ =20 struct eud_chip { struct device *dev; - struct usb_role_switch *role_sw; + struct usb_role_switch *role_sw[EUD_MAX_PORTS]; struct phy *phy[EUD_MAX_PORTS]; void __iomem *base; phys_addr_t mode_mgr; @@ -112,7 +112,7 @@ static int enable_eud(struct eud_chip *priv) writel(EUD_INT_VBUS | EUD_INT_SAFE_MODE, priv->base + EUD_REG_INT1_EN_MASK); =20 - return usb_role_switch_set_role(priv->role_sw, USB_ROLE_DEVICE); + return 0; } =20 static int disable_eud(struct eud_chip *priv) @@ -272,9 +272,9 @@ static irqreturn_t handle_eud_irq_thread(int irq, void = *data) int ret; =20 if (chip->usb_attached) - ret =3D usb_role_switch_set_role(chip->role_sw, USB_ROLE_DEVICE); + ret =3D usb_role_switch_set_role(chip->role_sw[chip->port_idx], USB_ROLE= _DEVICE); else - ret =3D usb_role_switch_set_role(chip->role_sw, USB_ROLE_HOST); + ret =3D usb_role_switch_set_role(chip->role_sw[chip->port_idx], USB_ROLE= _HOST); if (ret) dev_err(chip->dev, "failed to set role switch\n"); =20 @@ -289,6 +289,7 @@ static int eud_parse_dt_port(struct eud_chip *chip, u8 = port_id) { struct device_node *controller_node; struct phy *phy; + struct usb_role_switch *role_sw; =20 /* * Multiply port_id by 2 to get controller port number: @@ -309,16 +310,31 @@ static int eud_parse_dt_port(struct eud_chip *chip, u= 8 port_id) } chip->phy[port_id] =3D phy; =20 + /* Only fetch role switch if usb-role-switch property exists */ + if (!of_property_read_bool(controller_node, "usb-role-switch")) { + of_node_put(controller_node); + return 0; + } + + role_sw =3D usb_role_switch_find_by_fwnode(of_fwnode_handle(controller_no= de)); of_node_put(controller_node); =20 + if (IS_ERR(role_sw)) + return dev_err_probe(chip->dev, PTR_ERR(role_sw), + "failed to get role switch for port %u\n", port_id); + + chip->role_sw[port_id] =3D role_sw; + return 0; } =20 static void eud_role_switch_release(void *data) { struct eud_chip *chip =3D data; + int i; =20 - usb_role_switch_put(chip->role_sw); + for (i =3D 0; i < EUD_MAX_PORTS; i++) + usb_role_switch_put(chip->role_sw[i]); } =20 static int eud_probe(struct platform_device *pdev) @@ -344,11 +360,6 @@ static int eud_probe(struct platform_device *pdev) /* Secondary port is optional */ eud_parse_dt_port(chip, 1); =20 - chip->role_sw =3D usb_role_switch_get(&pdev->dev); - if (IS_ERR(chip->role_sw)) - return dev_err_probe(chip->dev, PTR_ERR(chip->role_sw), - "failed to get role switch\n"); - ret =3D devm_add_action_or_reset(chip->dev, eud_role_switch_release, chip= ); if (ret) return ret; --=20 2.34.1