mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
smsc75xx: refactor entering suspend modes
This patch splits out the logic for entering suspend modes to separate functions, to reduce the complexity of the smsc75xx_suspend function. Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
33763b79a1
commit
9deb2757b8
@ -1214,6 +1214,42 @@ static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smsc75xx_enter_suspend0(struct usbnet *dev)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
|
||||
check_warn_return(ret, "Error reading PMT_CTL\n");
|
||||
|
||||
val &= (~(PMT_CTL_SUS_MODE | PMT_CTL_PHY_RST));
|
||||
val |= PMT_CTL_SUS_MODE_0 | PMT_CTL_WOL_EN | PMT_CTL_WUPS;
|
||||
|
||||
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
|
||||
check_warn_return(ret, "Error writing PMT_CTL\n");
|
||||
|
||||
smsc75xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smsc75xx_enter_suspend2(struct usbnet *dev)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
|
||||
check_warn_return(ret, "Error reading PMT_CTL\n");
|
||||
|
||||
val &= ~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST);
|
||||
val |= PMT_CTL_SUS_MODE_2;
|
||||
|
||||
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
|
||||
check_warn_return(ret, "Error writing PMT_CTL\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
{
|
||||
struct usbnet *dev = usb_get_intfdata(intf);
|
||||
@ -1245,17 +1281,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
|
||||
check_warn_return(ret, "Error writing PMT_CTL\n");
|
||||
|
||||
/* enter suspend2 mode */
|
||||
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
|
||||
check_warn_return(ret, "Error reading PMT_CTL\n");
|
||||
|
||||
val &= ~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST);
|
||||
val |= PMT_CTL_SUS_MODE_2;
|
||||
|
||||
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
|
||||
check_warn_return(ret, "Error writing PMT_CTL\n");
|
||||
|
||||
return 0;
|
||||
return smsc75xx_enter_suspend2(dev);
|
||||
}
|
||||
|
||||
if (pdata->wolopts & (WAKE_MCAST | WAKE_ARP)) {
|
||||
@ -1369,19 +1395,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
|
||||
/* some wol options are enabled, so enter SUSPEND0 */
|
||||
netdev_info(dev->net, "entering SUSPEND0 mode\n");
|
||||
|
||||
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
|
||||
check_warn_return(ret, "Error reading PMT_CTL\n");
|
||||
|
||||
val &= (~(PMT_CTL_SUS_MODE | PMT_CTL_PHY_RST));
|
||||
val |= PMT_CTL_SUS_MODE_0 | PMT_CTL_WOL_EN | PMT_CTL_WUPS;
|
||||
|
||||
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
|
||||
check_warn_return(ret, "Error writing PMT_CTL\n");
|
||||
|
||||
smsc75xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
|
||||
|
||||
return 0;
|
||||
return smsc75xx_enter_suspend0(dev);
|
||||
}
|
||||
|
||||
static int smsc75xx_resume(struct usb_interface *intf)
|
||||
|
Loading…
x
Reference in New Issue
Block a user