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);
                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)) {
 
        /* 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)