Message ID | 1684936207-23529-1-git-send-email-quic_prashk@quicinc.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2877269vqo; Wed, 24 May 2023 07:10:15 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6rcnVhOdyaPnQWu3vbhN063m4XFrVKmI9/cXJqXTqixfrZxvE87kqADqGwm/ATlhUhpvFJ X-Received: by 2002:a05:6a20:548e:b0:10d:515:ff2d with SMTP id i14-20020a056a20548e00b0010d0515ff2dmr2703903pzk.4.1684937414983; Wed, 24 May 2023 07:10:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684937414; cv=none; d=google.com; s=arc-20160816; b=bXI69aBOBDO7bgL5YSzRul4nnLNsC3eP+06/ASZ64zsACWQD4stPUr+MT2+NkhkDkI plVwuEHJaiUH/lz5sEoRwoNV11cOx8NTJqtKV7DGpJlrFOVad4n+kBHsgxypQZRNsSM0 ChnFUlVXo/94JzyHKseMmvbXjSaQ0VjQgI+SGpdpEN6bnjkNRFatFY4XT3uPxDnHkx47 oWGIYFW0yJT+v5Lx5XwTF735uD616xV1J3syr/ES2aJUSPEFslJhLDgZJcpjjpAxD0Ro flG6PBk4H/jn0pmJ9DMiYoClII2WZdFU7DLrYa5nIvsP3be3ZrQpFJjDpsXAAudbkBcM yN5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=LQQrfZVPT5E9wHqNJdtcY7zkZ8sWfdNxcom8AZHCpRk=; b=Xgo1ePpev49qHuvGNeyxqq2Pdl//8aZWRcntMjiQDd5yBsX8N9SpqiEd42pq0+tzZg Q6dKLaSWsUWGA8hIFdo/EBn5PuZCrA0zBJxnqvuyRSXOtvYE48SmQeeOC0WeX79r7UUG sjwxUcUZwtMtRTNXcrSkHPOjGA5ZLk22WlKmnqqq2Ovka3JJq1nPgKW/lyQEIQknbKpp DEIaXqPisx7PN+FRyoWWZM1dOKpgiMlqi1el/K8gX65zCcA267GM5ciGoOmuaVr6fhP3 FGUCCTOV1sRgn929g8yEVwE9LnZFcM6IpkZMpsRhmaMyyZ+DL1FNYibHuJc6i8tbnLq7 0LKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=gVeY6Dnk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h185-20020a6383c2000000b00528617ab3ddsi8464531pge.133.2023.05.24.07.10.01; Wed, 24 May 2023 07:10:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=gVeY6Dnk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235457AbjEXNuZ (ORCPT <rfc822;ahmedalshaiji.dev@gmail.com> + 99 others); Wed, 24 May 2023 09:50:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40680 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235146AbjEXNuU (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Wed, 24 May 2023 09:50:20 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E359AAA; Wed, 24 May 2023 06:50:18 -0700 (PDT) Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34OCibAj013324; Wed, 24 May 2023 13:50:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=qcppdkim1; bh=LQQrfZVPT5E9wHqNJdtcY7zkZ8sWfdNxcom8AZHCpRk=; b=gVeY6Dnk9GfY5pyAAdkqPXpwDChIEkAuZ4XdzPbQmoXS47LXXYdJHDGj8KBejhkbWkvA APIp2t3hPPv5kiewmbOYDVUk8RV6djBk3bGTJRwXjBHNleeh4U9Vntma8c3jYu612HsN h/X2COHlbnVjzD2u1gGA35VpSQNWwsg3wKkF1JH2hZhzF3U73w2NRLFIoB14pClZJxLQ ttTeKi0JuK9NmcaDQIjl5gYYZN+h5afO1I4WOEVvMvppViSdHr/1H3HUjj+qw0d+1sB2 Jzn+rDlECIDVn72BkZRdhAMa3bUPsZY1bjfYjwmHDTUlIyGraZ76KrFFBOx8hAoVZkz9 1Q== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3qs4df9uxh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 24 May 2023 13:50:14 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 34ODoDvg000739 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 24 May 2023 13:50:13 GMT Received: from hu-prashk-hyd.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Wed, 24 May 2023 06:50:11 -0700 From: Prashanth K <quic_prashk@quicinc.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Matthias Brugger <matthias.bgg@gmail.com> CC: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>, <linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>, Prashanth K <quic_prashk@quicinc.com> Subject: [PATCH v2] usb: common: usb-conn-gpio: Set last role to unknown before initial detection Date: Wed, 24 May 2023 19:20:07 +0530 Message-ID: <1684936207-23529-1-git-send-email-quic_prashk@quicinc.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: hNRLGsQXfAB3vaHGlEc6Kj-YRVtz-eMI X-Proofpoint-ORIG-GUID: hNRLGsQXfAB3vaHGlEc6Kj-YRVtz-eMI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-05-24_09,2023-05-24_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=930 suspectscore=0 impostorscore=0 phishscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305240113 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766766285470192139?= X-GMAIL-MSGID: =?utf-8?q?1766784934669493801?= |
Series |
[v2] usb: common: usb-conn-gpio: Set last role to unknown before initial detection
|
|
Commit Message
Prashanth K
May 24, 2023, 1:50 p.m. UTC
Currently if we bootup a device without cable connected, then
usb-conn-gpio won't call set_role() since last_role is same as
current role. This happens because during probe last_role gets
initialized to zero.
To avoid this, added a new constant in enum usb_role, last_role
is set to USB_ROLE_UNKNOWN before performing initial detection.
Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver")
Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
---
v2: Added USB_ROLE_UNKNWON to enum usb_role
drivers/usb/common/usb-conn-gpio.c | 3 +++
include/linux/usb/role.h | 1 +
2 files changed, 4 insertions(+)
Comments
Hi Prashanth,
kernel test robot noticed the following build warnings:
[auto build test WARNING on usb/usb-testing]
[also build test WARNING on usb/usb-next usb/usb-linus linus/master v6.4-rc3 next-20230524]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Prashanth-K/usb-common-usb-conn-gpio-Set-last-role-to-unknown-before-initial-detection/20230524-215109
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link: https://lore.kernel.org/r/1684936207-23529-1-git-send-email-quic_prashk%40quicinc.com
patch subject: [PATCH v2] usb: common: usb-conn-gpio: Set last role to unknown before initial detection
config: sparc-allyesconfig
compiler: sparc64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/263bb2a82451e76309b0c0f4d6f6194dd85954ca
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Prashanth-K/usb-common-usb-conn-gpio-Set-last-role-to-unknown-before-initial-detection/20230524-215109
git checkout 263bb2a82451e76309b0c0f4d6f6194dd85954ca
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=sparc olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 ~/bin/make.cross W=1 O=build_dir ARCH=sparc SHELL=/bin/bash drivers/usb/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202305250319.A6ppbHdS-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/usb/cdns3/core.c: In function 'cdns_hw_role_state_machine':
>> drivers/usb/cdns3/core.c:236:9: warning: enumeration value 'USB_ROLE_UNKNOWN' not handled in switch [-Wswitch]
236 | switch (role) {
| ^~~~~~
vim +/USB_ROLE_UNKNOWN +236 drivers/usb/cdns3/core.c
7733f6c32e36ff Pawel Laszczak 2019-08-26 204
7733f6c32e36ff Pawel Laszczak 2019-08-26 205 /**
0b490046d8d7c0 Pawel Laszczak 2020-12-07 206 * cdns_hw_role_state_machine - role switch state machine based on hw events.
7733f6c32e36ff Pawel Laszczak 2019-08-26 207 * @cdns: Pointer to controller structure.
7733f6c32e36ff Pawel Laszczak 2019-08-26 208 *
7733f6c32e36ff Pawel Laszczak 2019-08-26 209 * Returns next role to be entered based on hw events.
7733f6c32e36ff Pawel Laszczak 2019-08-26 210 */
0b490046d8d7c0 Pawel Laszczak 2020-12-07 211 static enum usb_role cdns_hw_role_state_machine(struct cdns *cdns)
7733f6c32e36ff Pawel Laszczak 2019-08-26 212 {
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 213 enum usb_role role = USB_ROLE_NONE;
7733f6c32e36ff Pawel Laszczak 2019-08-26 214 int id, vbus;
7733f6c32e36ff Pawel Laszczak 2019-08-26 215
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 216 if (cdns->dr_mode != USB_DR_MODE_OTG) {
0b490046d8d7c0 Pawel Laszczak 2020-12-07 217 if (cdns_is_host(cdns))
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 218 role = USB_ROLE_HOST;
0b490046d8d7c0 Pawel Laszczak 2020-12-07 219 if (cdns_is_device(cdns))
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 220 role = USB_ROLE_DEVICE;
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 221
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 222 return role;
5c2cf30f14cc39 Pawel Laszczak 2020-07-13 223 }
7733f6c32e36ff Pawel Laszczak 2019-08-26 224
0b490046d8d7c0 Pawel Laszczak 2020-12-07 225 id = cdns_get_id(cdns);
0b490046d8d7c0 Pawel Laszczak 2020-12-07 226 vbus = cdns_get_vbus(cdns);
7733f6c32e36ff Pawel Laszczak 2019-08-26 227
7733f6c32e36ff Pawel Laszczak 2019-08-26 228 /*
7733f6c32e36ff Pawel Laszczak 2019-08-26 229 * Role change state machine
7733f6c32e36ff Pawel Laszczak 2019-08-26 230 * Inputs: ID, VBUS
7733f6c32e36ff Pawel Laszczak 2019-08-26 231 * Previous state: cdns->role
7733f6c32e36ff Pawel Laszczak 2019-08-26 232 * Next state: role
7733f6c32e36ff Pawel Laszczak 2019-08-26 233 */
7733f6c32e36ff Pawel Laszczak 2019-08-26 234 role = cdns->role;
7733f6c32e36ff Pawel Laszczak 2019-08-26 235
7733f6c32e36ff Pawel Laszczak 2019-08-26 @236 switch (role) {
7733f6c32e36ff Pawel Laszczak 2019-08-26 237 case USB_ROLE_NONE:
7733f6c32e36ff Pawel Laszczak 2019-08-26 238 /*
7733f6c32e36ff Pawel Laszczak 2019-08-26 239 * Driver treats USB_ROLE_NONE synonymous to IDLE state from
7733f6c32e36ff Pawel Laszczak 2019-08-26 240 * controller specification.
7733f6c32e36ff Pawel Laszczak 2019-08-26 241 */
7733f6c32e36ff Pawel Laszczak 2019-08-26 242 if (!id)
7733f6c32e36ff Pawel Laszczak 2019-08-26 243 role = USB_ROLE_HOST;
7733f6c32e36ff Pawel Laszczak 2019-08-26 244 else if (vbus)
7733f6c32e36ff Pawel Laszczak 2019-08-26 245 role = USB_ROLE_DEVICE;
7733f6c32e36ff Pawel Laszczak 2019-08-26 246 break;
7733f6c32e36ff Pawel Laszczak 2019-08-26 247 case USB_ROLE_HOST: /* from HOST, we can only change to NONE */
7733f6c32e36ff Pawel Laszczak 2019-08-26 248 if (id)
7733f6c32e36ff Pawel Laszczak 2019-08-26 249 role = USB_ROLE_NONE;
7733f6c32e36ff Pawel Laszczak 2019-08-26 250 break;
7733f6c32e36ff Pawel Laszczak 2019-08-26 251 case USB_ROLE_DEVICE: /* from GADGET, we can only change to NONE*/
7733f6c32e36ff Pawel Laszczak 2019-08-26 252 if (!vbus)
7733f6c32e36ff Pawel Laszczak 2019-08-26 253 role = USB_ROLE_NONE;
7733f6c32e36ff Pawel Laszczak 2019-08-26 254 break;
7733f6c32e36ff Pawel Laszczak 2019-08-26 255 }
7733f6c32e36ff Pawel Laszczak 2019-08-26 256
7733f6c32e36ff Pawel Laszczak 2019-08-26 257 dev_dbg(cdns->dev, "role %d -> %d\n", cdns->role, role);
7733f6c32e36ff Pawel Laszczak 2019-08-26 258
7733f6c32e36ff Pawel Laszczak 2019-08-26 259 return role;
7733f6c32e36ff Pawel Laszczak 2019-08-26 260 }
7733f6c32e36ff Pawel Laszczak 2019-08-26 261
On Wed, 2023-05-24 at 19:20 +0530, Prashanth K wrote: > External email : Please do not click links or open attachments until > you have verified the sender or the content. > > > Currently if we bootup a device without cable connected, then > usb-conn-gpio won't call set_role() since last_role is same as > current role. This happens because during probe last_role gets > initialized to zero. > > To avoid this, added a new constant in enum usb_role, last_role > is set to USB_ROLE_UNKNOWN before performing initial detection. > > Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection > detection driver") > Signed-off-by: Prashanth K <quic_prashk@quicinc.com> > --- > v2: Added USB_ROLE_UNKNWON to enum usb_role > > drivers/usb/common/usb-conn-gpio.c | 3 +++ > include/linux/usb/role.h | 1 + > 2 files changed, 4 insertions(+) > > diff --git a/drivers/usb/common/usb-conn-gpio.c > b/drivers/usb/common/usb-conn-gpio.c > index e20874c..30bdb81 100644 > --- a/drivers/usb/common/usb-conn-gpio.c > +++ b/drivers/usb/common/usb-conn-gpio.c > @@ -257,6 +257,9 @@ static int usb_conn_probe(struct platform_device > *pdev) > platform_set_drvdata(pdev, info); > device_set_wakeup_capable(&pdev->dev, true); > > + /* Set last role to unknown before performing the initial > detection */ > + info->last_role = USB_ROLE_UNKNOWN; Do you only use vbus-pin? This driver assumes that the gadget driver's default role is none. > + > /* Perform initial detection */ > usb_conn_queue_dwork(info, 0); > > diff --git a/include/linux/usb/role.h b/include/linux/usb/role.h > index b5deafd..221d462 100644 > --- a/include/linux/usb/role.h > +++ b/include/linux/usb/role.h > @@ -8,6 +8,7 @@ > struct usb_role_switch; > > enum usb_role { > + USB_ROLE_UNKNOWN = -1, > USB_ROLE_NONE, > USB_ROLE_HOST, > USB_ROLE_DEVICE, > -- > 2.7.4 >
Il 24/05/23 15:50, Prashanth K ha scritto: > Currently if we bootup a device without cable connected, then > usb-conn-gpio won't call set_role() since last_role is same as > current role. This happens because during probe last_role gets > initialized to zero. > > To avoid this, added a new constant in enum usb_role, last_role > is set to USB_ROLE_UNKNOWN before performing initial detection. > > Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver") > Signed-off-by: Prashanth K <quic_prashk@quicinc.com> There's an issue with drivers/usb/cdns3/core.c as pointed out by the test robot; the solution is to handle `default` in the switch, I'd say that it would be safe to handle it as default: break; after solving that: Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > v2: Added USB_ROLE_UNKNWON to enum usb_role > > drivers/usb/common/usb-conn-gpio.c | 3 +++ > include/linux/usb/role.h | 1 + > 2 files changed, 4 insertions(+) > > diff --git a/drivers/usb/common/usb-conn-gpio.c b/drivers/usb/common/usb-conn-gpio.c > index e20874c..30bdb81 100644 > --- a/drivers/usb/common/usb-conn-gpio.c > +++ b/drivers/usb/common/usb-conn-gpio.c > @@ -257,6 +257,9 @@ static int usb_conn_probe(struct platform_device *pdev) > platform_set_drvdata(pdev, info); > device_set_wakeup_capable(&pdev->dev, true); > > + /* Set last role to unknown before performing the initial detection */ > + info->last_role = USB_ROLE_UNKNOWN; > + > /* Perform initial detection */ > usb_conn_queue_dwork(info, 0); > > diff --git a/include/linux/usb/role.h b/include/linux/usb/role.h > index b5deafd..221d462 100644 > --- a/include/linux/usb/role.h > +++ b/include/linux/usb/role.h > @@ -8,6 +8,7 @@ > struct usb_role_switch; > > enum usb_role { > + USB_ROLE_UNKNOWN = -1, > USB_ROLE_NONE, > USB_ROLE_HOST, > USB_ROLE_DEVICE,
On 25-05-23 12:27 pm, Chunfeng Yun (云春峰) wrote: > On Wed, 2023-05-24 at 19:20 +0530, Prashanth K wrote: >> External email : Please do not click links or open attachments until >> you have verified the sender or the content. >> >> >> Currently if we bootup a device without cable connected, then >> usb-conn-gpio won't call set_role() since last_role is same as >> current role. This happens because during probe last_role gets >> initialized to zero. >> >> To avoid this, added a new constant in enum usb_role, last_role >> is set to USB_ROLE_UNKNOWN before performing initial detection. >> >> Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection >> detection driver") >> Signed-off-by: Prashanth K <quic_prashk@quicinc.com> >> --- >> v2: Added USB_ROLE_UNKNWON to enum usb_role >> >> drivers/usb/common/usb-conn-gpio.c | 3 +++ >> include/linux/usb/role.h | 1 + >> 2 files changed, 4 insertions(+) >> >> diff --git a/drivers/usb/common/usb-conn-gpio.c >> b/drivers/usb/common/usb-conn-gpio.c >> index e20874c..30bdb81 100644 >> --- a/drivers/usb/common/usb-conn-gpio.c >> +++ b/drivers/usb/common/usb-conn-gpio.c >> @@ -257,6 +257,9 @@ static int usb_conn_probe(struct platform_device >> *pdev) >> platform_set_drvdata(pdev, info); >> device_set_wakeup_capable(&pdev->dev, true); >> >> + /* Set last role to unknown before performing the initial >> detection */ >> + info->last_role = USB_ROLE_UNKNOWN; > > Do you only use vbus-pin? This driver has support for both Vbus and ID GPIOs. > > This driver assumes that the gadget driver's default role is none. No, after probe it calls set role based on the state of Vbus and ID pin. If Vbus is low, then it should issue none role to the gadget. But currently it doesnt call set_role if initial role is none. Regards
On 25-05-23 01:37 pm, AngeloGioacchino Del Regno wrote: > Il 24/05/23 15:50, Prashanth K ha scritto: >> Currently if we bootup a device without cable connected, then >> usb-conn-gpio won't call set_role() since last_role is same as >> current role. This happens because during probe last_role gets >> initialized to zero. >> >> To avoid this, added a new constant in enum usb_role, last_role >> is set to USB_ROLE_UNKNOWN before performing initial detection. >> >> Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection >> detection driver") >> Signed-off-by: Prashanth K <quic_prashk@quicinc.com> > > There's an issue with drivers/usb/cdns3/core.c as pointed out by the > test robot; the solution is to handle `default` in the switch, I'd say > that it would be safe to handle it as > > default: > break; > > after solving that: > > Reviewed-by: AngeloGioacchino Del Regno > <angelogioacchino.delregno@collabora.com> Yea sure, thanks for the suggestion Agnelo Regards, Prashanth K
diff --git a/drivers/usb/common/usb-conn-gpio.c b/drivers/usb/common/usb-conn-gpio.c index e20874c..30bdb81 100644 --- a/drivers/usb/common/usb-conn-gpio.c +++ b/drivers/usb/common/usb-conn-gpio.c @@ -257,6 +257,9 @@ static int usb_conn_probe(struct platform_device *pdev) platform_set_drvdata(pdev, info); device_set_wakeup_capable(&pdev->dev, true); + /* Set last role to unknown before performing the initial detection */ + info->last_role = USB_ROLE_UNKNOWN; + /* Perform initial detection */ usb_conn_queue_dwork(info, 0); diff --git a/include/linux/usb/role.h b/include/linux/usb/role.h index b5deafd..221d462 100644 --- a/include/linux/usb/role.h +++ b/include/linux/usb/role.h @@ -8,6 +8,7 @@ struct usb_role_switch; enum usb_role { + USB_ROLE_UNKNOWN = -1, USB_ROLE_NONE, USB_ROLE_HOST, USB_ROLE_DEVICE,