mirror of https://gitee.com/openkylin/linux.git
r8152: fix wakeup settings
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>
This commit is contained in:
parent
b214396fb5
commit
7daed8dc2a
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue