Skip to content

Commit 11bece5

Browse files
Mian Yousaf KaukabFelipe Balbi
authored andcommitted
usb: gadget: net2280: fix pullup handling
Gadget must be informed about disconnection when pullup is removed. Tested-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
1 parent 971fe65 commit 11bece5

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

drivers/usb/gadget/udc/net2280.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ static char *type_string(u8 bmAttributes)
124124
#define dma_done_ie cpu_to_le32(BIT(DMA_DONE_INTERRUPT_ENABLE))
125125

126126
static void ep_clear_seqnum(struct net2280_ep *ep);
127+
static void stop_activity(struct net2280 *dev,
128+
struct usb_gadget_driver *driver);
129+
static void ep0_start(struct net2280 *dev);
127130

128131
/*-------------------------------------------------------------------------*/
129132
static inline void enable_pciirqenb(struct net2280_ep *ep)
@@ -1495,11 +1498,14 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
14951498
spin_lock_irqsave(&dev->lock, flags);
14961499
tmp = readl(&dev->usb->usbctl);
14971500
dev->softconnect = (is_on != 0);
1498-
if (is_on)
1499-
tmp |= BIT(USB_DETECT_ENABLE);
1500-
else
1501-
tmp &= ~BIT(USB_DETECT_ENABLE);
1502-
writel(tmp, &dev->usb->usbctl);
1501+
if (is_on) {
1502+
ep0_start(dev);
1503+
writel(tmp | BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
1504+
} else {
1505+
writel(tmp & ~BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
1506+
stop_activity(dev, dev->driver);
1507+
}
1508+
15031509
spin_unlock_irqrestore(&dev->lock, flags);
15041510

15051511
return 0;

0 commit comments

Comments
 (0)