Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1ff4f96 authored by Ondrej Zary's avatar Ondrej Zary Committed by David S. Miller
Browse files

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: default avatarOndrej Zary <linux@rainbow-software.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6d7407bf
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -629,11 +629,31 @@ static int mcs7830_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
	return skb->len > 0;
}

static void mcs7830_status(struct usbnet *dev, struct urb *urb)
{
	u8 *buf = urb->transfer_buffer;
	bool link;

	if (urb->actual_length < 16)
		return;

	link = !(buf[1] & 0x20);
	if (netif_carrier_ok(dev->net) != link) {
		if (link) {
			netif_carrier_on(dev->net);
			usbnet_defer_kevent(dev, EVENT_LINK_RESET);
		} else
			netif_carrier_off(dev->net);
		netdev_dbg(dev->net, "Link Status is: %d\n", link);
	}
}

static const struct driver_info moschip_info = {
	.description	= "MOSCHIP 7830/7832/7730 usb-NET adapter",
	.bind		= mcs7830_bind,
	.rx_fixup	= mcs7830_rx_fixup,
	.flags		= FLAG_ETHER,
	.flags		= FLAG_ETHER | FLAG_LINK_INTR,
	.status		= mcs7830_status,
	.in		= 1,
	.out		= 2,
};
@@ -642,7 +662,8 @@ static const struct driver_info sitecom_info = {
	.description    = "Sitecom LN-30 usb-NET adapter",
	.bind		= mcs7830_bind,
	.rx_fixup	= mcs7830_rx_fixup,
	.flags		= FLAG_ETHER,
	.flags		= FLAG_ETHER | FLAG_LINK_INTR,
	.status		= mcs7830_status,
	.in		= 1,
	.out		= 2,
};