Skip to content

Commit

Permalink
r8152: fix wakeup settings
Browse files Browse the repository at this point in the history
Avoid the driver to enable WOL if the device doesn't support it.

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
hayeswang authored and David S. Miller committed Jul 27, 2015
1 parent b214396 commit 7daed8d
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions drivers/net/usb/r8152.c
Original file line number Diff line number Diff line change
Expand Up @@ -2378,6 +2378,13 @@ static void r8153_power_cut_en(struct r8152 *tp, bool enable)
ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
}

static bool rtl_can_wakeup(struct r8152 *tp)
{
struct usb_device *udev = tp->udev;

return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP);
}

static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable)
{
if (enable) {
Expand Down Expand Up @@ -3417,12 +3424,15 @@ static void rtl8152_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
if (usb_autopm_get_interface(tp->intf) < 0)
return;

mutex_lock(&tp->control);

wol->supported = WAKE_ANY;
wol->wolopts = __rtl_get_wol(tp);

mutex_unlock(&tp->control);
if (!rtl_can_wakeup(tp)) {
wol->supported = 0;
wol->wolopts = 0;
} else {
mutex_lock(&tp->control);
wol->supported = WAKE_ANY;
wol->wolopts = __rtl_get_wol(tp);
mutex_unlock(&tp->control);
}

usb_autopm_put_interface(tp->intf);
}
Expand All @@ -3432,6 +3442,9 @@ static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
struct r8152 *tp = netdev_priv(dev);
int ret;

if (!rtl_can_wakeup(tp))
return -EOPNOTSUPP;

ret = usb_autopm_get_interface(tp->intf);
if (ret < 0)
goto out_set_wol;
Expand Down Expand Up @@ -4073,6 +4086,9 @@ static int rtl8152_probe(struct usb_interface *intf,
goto out1;
}

if (!rtl_can_wakeup(tp))
__rtl_set_wol(tp, 0);

tp->saved_wolopts = __rtl_get_wol(tp);
if (tp->saved_wolopts)
device_set_wakeup_enable(&udev->dev, true);
Expand Down

0 comments on commit 7daed8d

Please sign in to comment.