Message ID | 1685004825-30157-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:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp215096vqr; Thu, 25 May 2023 01:57:26 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4/rJ8s37pOs8iT/GTW/8KvbeM9PHBQsTw1OHPze2C/QXbPUaOLpQYvw0U11/cs7w8NwCH0 X-Received: by 2002:a17:90b:1948:b0:255:d5e2:ec22 with SMTP id nk8-20020a17090b194800b00255d5e2ec22mr933789pjb.33.1685005046236; Thu, 25 May 2023 01:57:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685005046; cv=none; d=google.com; s=arc-20160816; b=rKtqIbUGBUocbdW/8oeeA2aglobJlg8r4VnKq+8TuLmO46NfS8L9tyxiBwikYo6+8z 8mhF7ZecxkZBnNVmWweD8HvyoR76/nydsb9dYhVM7moLj3l1nm/NaPbpb28fJvG3mmOv ZtWrdcCNsOb9eOVciCGMb2YfNAJpYjUw3ZGK88R+hhf9mIsIZ090PrkUxBPI6sW8vqlU 63VS0AFzBMrAd1d/Aj7De4emIiF+Q9edPdycFvI4dWTNNXbny2HeR8lhQ7ZxybgzcIwi /P7M4PIB8BRhN7fpSg0OcBGkJtgEQS6B6zVzP8EXlGaRjC4Bsubg0sWLfvw35cvV8SZ7 CduA== 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=BrchjuWV1wBbB58d8SD1J5iFGcwkOwCfC97vxqH3nWA=; b=qWlnV6F60RD6CLaOyTwnrdKiefyQUAPxWcXNbFgaCkHcric4sa0FSb/IU+2heDHI4n x8xnqwKPt4elAJ3yvbXqRIOb05XOfi0VJXXWL1rCn7ZOhgs24NkgjinLG/5fmw2Vgy1E NfNsJrNyHxF3AY96YJRG302gg+Kao/KNHFngQQRISEeahY85Io2HdtDfuGsISFYAM32r Pydr+WO3Hg04b46Ub/2kfyioi6PMdR5JYGaxQKzW1J8B5oF1cluHBNdBcN+q2Egr2pk4 2BX3V+Om/EUd6aG4tAKgZcIHghvHU8Q2qs9HGnxXnMKaxJezJrlo/7zqLRHQXb+jmIjR Lheg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=ZMaIUNw7; 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 7-20020a17090a034700b00247bd63c3c5si1195012pjf.37.2023.05.25.01.57.13; Thu, 25 May 2023 01:57:26 -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=ZMaIUNw7; 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 S240451AbjEYIyC (ORCPT <rfc822;ahmedalshaiji.dev@gmail.com> + 99 others); Thu, 25 May 2023 04:54:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233661AbjEYIx6 (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 25 May 2023 04:53:58 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB3C998; Thu, 25 May 2023 01:53:56 -0700 (PDT) Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34P6F9Es026738; Thu, 25 May 2023 08:53:53 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=BrchjuWV1wBbB58d8SD1J5iFGcwkOwCfC97vxqH3nWA=; b=ZMaIUNw7Zk2vlHQHN9VfLCCT5uNY3lNixmDXIsXgryjMOzBb+0RSsSQP0m4egU6n8OhX H2WTS13EelCfM1J0QwHDekx0sw07J7NXjwmnzHj3AL/3v62LdBGTEVdIntXgQ/HrmHHS V/A0u/pJvVCCNBeBpkydspMDWt+xnB2SY2LDUljEGn64bmCa1sZ1ovcXGRsY/eIITGgt HCBIMik+0seYlh8i1L7yfQEoR1ua0HQjlwlgzI/H9MZ+a/18/e9oHSb9lUvQ1fu/KN26 wtNWpnRdpqIPPC+sR6Ei2X6EzNxY4LvVYPo2hIK+fjocyoGcEuOPhiDVSKxYQlKRAS71 sw== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3qsp509s5y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 25 May 2023 08:53:53 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 34P8rqXq018921 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 25 May 2023 08:53:52 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; Thu, 25 May 2023 01:53:49 -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 v5] usb: common: usb-conn-gpio: Set last role to unknown before initial detection Date: Thu, 25 May 2023 14:23:45 +0530 Message-ID: <1685004825-30157-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: nasanex01b.na.qualcomm.com (10.46.141.250) 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: 4NtOc2YWR_OptvsDyryekIRvtP9xjCaF X-Proofpoint-ORIG-GUID: 4NtOc2YWR_OptvsDyryekIRvtP9xjCaF 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-25_04,2023-05-24_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 impostorscore=0 spamscore=0 suspectscore=0 priorityscore=1501 mlxscore=0 mlxlogscore=999 clxscore=1015 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305250073 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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?1766855850902117539?= |
Series |
[v5] usb: common: usb-conn-gpio: Set last role to unknown before initial detection
|
|
Commit Message
Prashanth K
May 25, 2023, 8:53 a.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 initialised 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. While at it, also handle default case for the usb_role switch in cdns3 to avoid build warnings. Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver") Signed-off-by: Prashanth K <quic_prashk@quicinc.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> --- v5: Update commit text to mention the changes made in cdns3 driver. v4: Added Reviewed-by tag. v3: Added a default case in drivers/usb/cdns3/core.c as pointed out by the test robot. v2: Added USB_ROLE_UNKNWON to enum usb_role. drivers/usb/cdns3/core.c | 2 ++ drivers/usb/common/usb-conn-gpio.c | 3 +++ include/linux/usb/role.h | 1 + 3 files changed, 6 insertions(+)
Comments
On Thu, May 25, 2023 at 02:23:45PM +0530, Prashanth K wrote: > 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 > initialised 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. > > While at it, also handle default case for the usb_role switch > in cdns3 to avoid build warnings. > > Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver") > Signed-off-by: Prashanth K <quic_prashk@quicinc.com> > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > v5: Update commit text to mention the changes made in cdns3 driver. > v4: Added Reviewed-by tag. > v3: Added a default case in drivers/usb/cdns3/core.c as pointed out by > the test robot. > v2: Added USB_ROLE_UNKNWON to enum usb_role. > > drivers/usb/cdns3/core.c | 2 ++ > drivers/usb/common/usb-conn-gpio.c | 3 +++ > include/linux/usb/role.h | 1 + > 3 files changed, 6 insertions(+) > > diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c > index dbcdf3b..69d2921 100644 > --- a/drivers/usb/cdns3/core.c > +++ b/drivers/usb/cdns3/core.c > @@ -252,6 +252,8 @@ static enum usb_role cdns_hw_role_state_machine(struct cdns *cdns) > if (!vbus) > role = USB_ROLE_NONE; > break; > + default: > + break; No error if this happens? > } > > dev_dbg(cdns->dev, "role %d -> %d\n", cdns->role, role); > 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; Shouldn't last_role have already been set to 0? If so, why not just have this enum value be 0? > + > /* 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, Why is this explicitly set to a value? What is magic about -1? Why not 0x42? Or something else? Or as I mention above, 0? thanks, greg k-h
On 25-05-23 10:04 pm, Greg Kroah-Hartman wrote: > On Thu, May 25, 2023 at 02:23:45PM +0530, Prashanth K wrote: >> 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 >> initialised 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. >> >> While at it, also handle default case for the usb_role switch >> in cdns3 to avoid build warnings. >> >> Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver") >> Signed-off-by: Prashanth K <quic_prashk@quicinc.com> >> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> >> --- >> v5: Update commit text to mention the changes made in cdns3 driver. >> v4: Added Reviewed-by tag. >> v3: Added a default case in drivers/usb/cdns3/core.c as pointed out by >> the test robot. >> v2: Added USB_ROLE_UNKNWON to enum usb_role. >> >> drivers/usb/cdns3/core.c | 2 ++ >> drivers/usb/common/usb-conn-gpio.c | 3 +++ >> include/linux/usb/role.h | 1 + >> 3 files changed, 6 insertions(+) >> >> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c >> index dbcdf3b..69d2921 100644 >> --- a/drivers/usb/cdns3/core.c >> +++ b/drivers/usb/cdns3/core.c >> @@ -252,6 +252,8 @@ static enum usb_role cdns_hw_role_state_machine(struct cdns *cdns) >> if (!vbus) >> role = USB_ROLE_NONE; >> break; >> + default: >> + break; > > No error if this happens? It wouldn't come to default case in as no one sets the role to USB_ROLE_UNKNOWN in cdns3 driver. Moreover it would work the same without the default case also (we have added it just to address a warning pointed out be test-robot). > >> } >> >> dev_dbg(cdns->dev, "role %d -> %d\n", cdns->role, role); >> 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; > > Shouldn't last_role have already been set to 0? If so, why not just > have this enum value be 0? Last role would be 0 during first detection, that's the problem here. During initial detection, if the the new role is detected as USB_ROLE_NONE (0), then we wouldn't call the set_role(). But it should send the current role to gadget after the inital detection. if (info->last_role == role) { dev_warn(info->dev, "repeated role: %s\n", usb_role_string(role)); return; } > > >> + >> /* 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, > > Why is this explicitly set to a value? What is magic about -1? Why not > 0x42? Or something else? Or as I mention above, 0? > I just chose -1 as the currently 0,1,2 are used for NONE, Device and Host roles. Didn't make the USB_ROLE_UNKNOWN = 0 because i didn't want to break the existing logic in other drivers. Do you have any suggestion? Please let me know. Thanks, Prashanth K
On Fri, May 26, 2023 at 10:15:43AM +0530, Prashanth K wrote: > > > On 25-05-23 10:04 pm, Greg Kroah-Hartman wrote: > > On Thu, May 25, 2023 at 02:23:45PM +0530, Prashanth K wrote: > > > 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 > > > initialised 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. > > > > > > While at it, also handle default case for the usb_role switch > > > in cdns3 to avoid build warnings. > > > > > > Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver") > > > Signed-off-by: Prashanth K <quic_prashk@quicinc.com> > > > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > > > --- > > > v5: Update commit text to mention the changes made in cdns3 driver. > > > v4: Added Reviewed-by tag. > > > v3: Added a default case in drivers/usb/cdns3/core.c as pointed out by > > > the test robot. > > > v2: Added USB_ROLE_UNKNWON to enum usb_role. > > > > > > drivers/usb/cdns3/core.c | 2 ++ > > > drivers/usb/common/usb-conn-gpio.c | 3 +++ > > > include/linux/usb/role.h | 1 + > > > 3 files changed, 6 insertions(+) > > > > > > diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c > > > index dbcdf3b..69d2921 100644 > > > --- a/drivers/usb/cdns3/core.c > > > +++ b/drivers/usb/cdns3/core.c > > > @@ -252,6 +252,8 @@ static enum usb_role cdns_hw_role_state_machine(struct cdns *cdns) > > > if (!vbus) > > > role = USB_ROLE_NONE; > > > break; > > > + default: > > > + break; > > > > No error if this happens? > It wouldn't come to default case in as no one sets the role to > USB_ROLE_UNKNOWN in cdns3 driver. Moreover it would work the same > without the default case also (we have added it just to address a warning > pointed out be test-robot). > > > > > } > > > dev_dbg(cdns->dev, "role %d -> %d\n", cdns->role, role); > > > 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; > > > > Shouldn't last_role have already been set to 0? If so, why not just > > have this enum value be 0? > Last role would be 0 during first detection, that's the problem here. > During initial detection, if the the new role is detected as USB_ROLE_NONE > (0), then we wouldn't call the set_role(). But it should send the current > role to gadget after the inital detection. So you are hoping that the old enum type is still assigned to 0? That's brave, please make it explicit otherwise it's very hard to follow or ensure that this really will happen. And most of all, document it so that that value remains 0 in the future, otherwise a list of enum types without explicit values are seen as if the values do not matter. thanks, greg k-h
On 28-05-23 05:03 pm, Greg Kroah-Hartman wrote: >>>> 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; >>> >>> Shouldn't last_role have already been set to 0? If so, why not just >>> have this enum value be 0? >> Last role would be 0 during first detection, that's the problem here. >> During initial detection, if the the new role is detected as USB_ROLE_NONE >> (0), then we wouldn't call the set_role(). But it should send the current >> role to gadget after the inital detection. > > So you are hoping that the old enum type is still assigned to 0? That's > brave, please make it explicit otherwise it's very hard to follow or > ensure that this really will happen. And most of all, document it so > that that value remains 0 in the future, otherwise a list of enum types > without explicit values are seen as if the values do not matter. > > thanks, > > greg k-h So I think it would be better to add USB_ROLE_UNKNOWN towards the end of enum usb_role, so that we can avoid explicit declaration. Is that fine? enum usb_role { USB_ROLE_NONE, USB_ROLE_HOST, USB_ROLE_DEVICE, + USB_ROLE_UNKNOWN, } Thanks, Prashanth K
On Tue, May 30, 2023 at 12:00:15AM +0530, Prashanth K wrote: > > > On 28-05-23 05:03 pm, Greg Kroah-Hartman wrote: > > > > > 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; > > > > > > > > Shouldn't last_role have already been set to 0? If so, why not just > > > > have this enum value be 0? > > > Last role would be 0 during first detection, that's the problem here. > > > During initial detection, if the the new role is detected as USB_ROLE_NONE > > > (0), then we wouldn't call the set_role(). But it should send the current > > > role to gadget after the inital detection. > > > > So you are hoping that the old enum type is still assigned to 0? That's > > brave, please make it explicit otherwise it's very hard to follow or > > ensure that this really will happen. And most of all, document it so > > that that value remains 0 in the future, otherwise a list of enum types > > without explicit values are seen as if the values do not matter. > > > > thanks, > > > > greg k-h > > So I think it would be better to add USB_ROLE_UNKNOWN towards the end of > enum usb_role, so that we can avoid explicit declaration. Is that fine? > > enum usb_role { > USB_ROLE_NONE, > USB_ROLE_HOST, > USB_ROLE_DEVICE, > + USB_ROLE_UNKNOWN, Either is fine, be explicit, or not, just don't mix the two please. thanks, greg k-h
On 30-05-23 12:31 am, Greg Kroah-Hartman wrote: > On Tue, May 30, 2023 at 12:00:15AM +0530, Prashanth K wrote: >> >> >> On 28-05-23 05:03 pm, Greg Kroah-Hartman wrote: >>>>>> 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; >>>>> >>>>> Shouldn't last_role have already been set to 0? If so, why not just >>>>> have this enum value be 0? >>>> Last role would be 0 during first detection, that's the problem here. >>>> During initial detection, if the the new role is detected as USB_ROLE_NONE >>>> (0), then we wouldn't call the set_role(). But it should send the current >>>> role to gadget after the inital detection. >>> >>> So you are hoping that the old enum type is still assigned to 0? That's >>> brave, please make it explicit otherwise it's very hard to follow or >>> ensure that this really will happen. And most of all, document it so >>> that that value remains 0 in the future, otherwise a list of enum types >>> without explicit values are seen as if the values do not matter. >>> >>> thanks, >>> >>> greg k-h >> >> So I think it would be better to add USB_ROLE_UNKNOWN towards the end of >> enum usb_role, so that we can avoid explicit declaration. Is that fine? >> >> enum usb_role { >> USB_ROLE_NONE, >> USB_ROLE_HOST, >> USB_ROLE_DEVICE, >> + USB_ROLE_UNKNOWN, > > Either is fine, be explicit, or not, just don't mix the two please. > > thanks, > > greg k-h Thanks for the suggestion, will update it in next patch. Regards, Prashanth K
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index dbcdf3b..69d2921 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -252,6 +252,8 @@ static enum usb_role cdns_hw_role_state_machine(struct cdns *cdns) if (!vbus) role = USB_ROLE_NONE; break; + default: + break; } dev_dbg(cdns->dev, "role %d -> %d\n", cdns->role, role); 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,