Skip to content

Commit 9deb275

Browse files
steveglendavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 33763b7 commit 9deb275

File tree

1 file changed

+38
-24
lines changed

1 file changed

+38
-24
lines changed

drivers/net/usb/smsc75xx.c

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,42 @@ static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg,
12141214
return 0;
12151215
}
12161216

1217+
static int smsc75xx_enter_suspend0(struct usbnet *dev)
1218+
{
1219+
u32 val;
1220+
int ret;
1221+
1222+
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
1223+
check_warn_return(ret, "Error reading PMT_CTL\n");
1224+
1225+
val &= (~(PMT_CTL_SUS_MODE | PMT_CTL_PHY_RST));
1226+
val |= PMT_CTL_SUS_MODE_0 | PMT_CTL_WOL_EN | PMT_CTL_WUPS;
1227+
1228+
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
1229+
check_warn_return(ret, "Error writing PMT_CTL\n");
1230+
1231+
smsc75xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
1232+
1233+
return 0;
1234+
}
1235+
1236+
static int smsc75xx_enter_suspend2(struct usbnet *dev)
1237+
{
1238+
u32 val;
1239+
int ret;
1240+
1241+
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
1242+
check_warn_return(ret, "Error reading PMT_CTL\n");
1243+
1244+
val &= ~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST);
1245+
val |= PMT_CTL_SUS_MODE_2;
1246+
1247+
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
1248+
check_warn_return(ret, "Error writing PMT_CTL\n");
1249+
1250+
return 0;
1251+
}
1252+
12171253
static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
12181254
{
12191255
struct usbnet *dev = usb_get_intfdata(intf);
@@ -1245,17 +1281,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
12451281
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
12461282
check_warn_return(ret, "Error writing PMT_CTL\n");
12471283

1248-
/* enter suspend2 mode */
1249-
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
1250-
check_warn_return(ret, "Error reading PMT_CTL\n");
1251-
1252-
val &= ~(PMT_CTL_SUS_MODE | PMT_CTL_WUPS | PMT_CTL_PHY_RST);
1253-
val |= PMT_CTL_SUS_MODE_2;
1254-
1255-
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
1256-
check_warn_return(ret, "Error writing PMT_CTL\n");
1257-
1258-
return 0;
1284+
return smsc75xx_enter_suspend2(dev);
12591285
}
12601286

12611287
if (pdata->wolopts & (WAKE_MCAST | WAKE_ARP)) {
@@ -1369,19 +1395,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
13691395

13701396
/* some wol options are enabled, so enter SUSPEND0 */
13711397
netdev_info(dev->net, "entering SUSPEND0 mode\n");
1372-
1373-
ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val);
1374-
check_warn_return(ret, "Error reading PMT_CTL\n");
1375-
1376-
val &= (~(PMT_CTL_SUS_MODE | PMT_CTL_PHY_RST));
1377-
val |= PMT_CTL_SUS_MODE_0 | PMT_CTL_WOL_EN | PMT_CTL_WUPS;
1378-
1379-
ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
1380-
check_warn_return(ret, "Error writing PMT_CTL\n");
1381-
1382-
smsc75xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
1383-
1384-
return 0;
1398+
return smsc75xx_enter_suspend0(dev);
13851399
}
13861400

13871401
static int smsc75xx_resume(struct usb_interface *intf)

0 commit comments

Comments
 (0)