@@ -1214,6 +1214,42 @@ static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg,
1214
1214
return 0 ;
1215
1215
}
1216
1216
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
+
1217
1253
static int smsc75xx_suspend (struct usb_interface * intf , pm_message_t message )
1218
1254
{
1219
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
1281
ret = smsc75xx_write_reg_nopm (dev , PMT_CTL , val );
1246
1282
check_warn_return (ret , "Error writing PMT_CTL\n" );
1247
1283
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 );
1259
1285
}
1260
1286
1261
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
1396
/* some wol options are enabled, so enter SUSPEND0 */
1371
1397
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 );
1385
1399
}
1386
1400
1387
1401
static int smsc75xx_resume (struct usb_interface * intf )
0 commit comments