aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSteve Glendinning <steve.glendinning@shawell.net>2012-11-28 00:59:46 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-28 11:17:31 -0500
commit9deb2757b80fded37af33394d4d97e8341108525 (patch)
treeac387842229ea5fcc271bb85703c85082cee2b96 /drivers/net
parent33763b79a1a0c351b81817748d40160f25200ebd (diff)
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>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/usb/smsc75xx.c62
1 files changed, 38 insertions, 24 deletions
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index a36648bb1da..c26aeba1838 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -1214,6 +1214,42 @@ static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg,
1214 return 0; 1214 return 0;
1215} 1215}
1216 1216
1217static 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
1236static 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
1217static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message) 1253static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
1218{ 1254{
1219 struct usbnet *dev = usb_get_intfdata(intf); 1255 struct usbnet *dev = usb_get_intfdata(intf);
@@ -1245,17 +1281,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
1245 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); 1281 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val);
1246 check_warn_return(ret, "Error writing PMT_CTL\n"); 1282 check_warn_return(ret, "Error writing PMT_CTL\n");
1247 1283
1248 /* enter suspend2 mode */ 1284 return smsc75xx_enter_suspend2(dev);
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;
1259 } 1285 }
1260 1286
1261 if (pdata->wolopts & (WAKE_MCAST | WAKE_ARP)) { 1287 if (pdata->wolopts & (WAKE_MCAST | WAKE_ARP)) {
@@ -1369,19 +1395,7 @@ static int smsc75xx_suspend(struct usb_interface *intf, pm_message_t message)
1369 1395
1370 /* some wol options are enabled, so enter SUSPEND0 */ 1396 /* some wol options are enabled, so enter SUSPEND0 */
1371 netdev_info(dev->net, "entering SUSPEND0 mode\n"); 1397 netdev_info(dev->net, "entering SUSPEND0 mode\n");
1372 1398 return smsc75xx_enter_suspend0(dev);
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;
1385} 1399}
1386 1400
1387static int smsc75xx_resume(struct usb_interface *intf) 1401static int smsc75xx_resume(struct usb_interface *intf)