From: Yuyang Du <yuyang...@intel.com>

[ Upstream commit 9f20dfb44d03745d0d3cef2ffb3abf8d8024fa61 ]

This fixes the commit: 1cd8fd2887e1 ("usb: gadget: dummy_hcd: add
SuperSpeed support").

In the case of ClearPortFeature and USB_PORT_FEAT_POWER, simply clear
the right bit regardless of what the wValue is.

Acked-by: Alan Stern <st...@rowland.harvard.edu>
Signed-off-by: Yuyang Du <yuyang...@intel.com>
Signed-off-by: Felipe Balbi <felipe.ba...@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.le...@microsoft.com>
---
 drivers/usb/gadget/udc/dummy_hcd.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/gadget/udc/dummy_hcd.c 
b/drivers/usb/gadget/udc/dummy_hcd.c
index 783715a9e399..215441690d32 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -2001,16 +2001,13 @@ static int dummy_hub_control(
                        }
                        break;
                case USB_PORT_FEAT_POWER:
-                       if (hcd->speed == HCD_USB3) {
-                               if (dum_hcd->port_status & USB_PORT_STAT_POWER)
-                                       dev_dbg(dummy_dev(dum_hcd),
-                                               "power-off\n");
-                       } else
-                               if (dum_hcd->port_status &
-                                                       USB_SS_PORT_STAT_POWER)
-                                       dev_dbg(dummy_dev(dum_hcd),
-                                               "power-off\n");
-                       /* FALLS THROUGH */
+                       dev_dbg(dummy_dev(dum_hcd), "power-off\n");
+                       if (hcd->speed == HCD_USB3)
+                               dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
+                       else
+                               dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
+                       set_link_state(dum_hcd);
+                       break;
                default:
                        dum_hcd->port_status &= ~(1 << wValue);
                        set_link_state(dum_hcd);
@@ -2181,14 +2178,13 @@ static int dummy_hub_control(
                                if ((dum_hcd->port_status &
                                     USB_SS_PORT_STAT_POWER) != 0) {
                                        dum_hcd->port_status |= (1 << wValue);
-                                       set_link_state(dum_hcd);
                                }
                        } else
                                if ((dum_hcd->port_status &
                                     USB_PORT_STAT_POWER) != 0) {
                                        dum_hcd->port_status |= (1 << wValue);
-                                       set_link_state(dum_hcd);
                                }
+                       set_link_state(dum_hcd);
                }
                break;
        case GetPortErrorCount:
-- 
2.14.1

Reply via email to