Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9deb2757 authored by Steve Glendinning's avatar Steve Glendinning Committed by David S. Miller
Browse files

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: default avatarSteve Glendinning <steve.glendinning@shawell.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 33763b79
Loading
Loading
Loading
Loading
+38 −24
Original line number Diff line number Diff line
@@ -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)