Skip to content

Commit b1ff4f9

Browse files
Ondrej Zarydavem330
authored andcommitted
mcs7830: Implement link state detection
Add .status callback that detects link state changes. Tested with MCS7832CV-AA chip (9710:7830, identified as rev.C by the driver). Fixes https://bugzilla.kernel.org/show_bug.cgi?id=28532 Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 6d7407b commit b1ff4f9

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

drivers/net/usb/mcs7830.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,11 +629,31 @@ static int mcs7830_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
629629
return skb->len > 0;
630630
}
631631

632+
static void mcs7830_status(struct usbnet *dev, struct urb *urb)
633+
{
634+
u8 *buf = urb->transfer_buffer;
635+
bool link;
636+
637+
if (urb->actual_length < 16)
638+
return;
639+
640+
link = !(buf[1] & 0x20);
641+
if (netif_carrier_ok(dev->net) != link) {
642+
if (link) {
643+
netif_carrier_on(dev->net);
644+
usbnet_defer_kevent(dev, EVENT_LINK_RESET);
645+
} else
646+
netif_carrier_off(dev->net);
647+
netdev_dbg(dev->net, "Link Status is: %d\n", link);
648+
}
649+
}
650+
632651
static const struct driver_info moschip_info = {
633652
.description = "MOSCHIP 7830/7832/7730 usb-NET adapter",
634653
.bind = mcs7830_bind,
635654
.rx_fixup = mcs7830_rx_fixup,
636-
.flags = FLAG_ETHER,
655+
.flags = FLAG_ETHER | FLAG_LINK_INTR,
656+
.status = mcs7830_status,
637657
.in = 1,
638658
.out = 2,
639659
};
@@ -642,7 +662,8 @@ static const struct driver_info sitecom_info = {
642662
.description = "Sitecom LN-30 usb-NET adapter",
643663
.bind = mcs7830_bind,
644664
.rx_fixup = mcs7830_rx_fixup,
645-
.flags = FLAG_ETHER,
665+
.flags = FLAG_ETHER | FLAG_LINK_INTR,
666+
.status = mcs7830_status,
646667
.in = 1,
647668
.out = 2,
648669
};

0 commit comments

Comments
 (0)