Commit 5951b7c2 authored by Chunfeng Yun's avatar Chunfeng Yun Committed by Greg Kroah-Hartman
Browse files

usb: xhci-mtk: remove bus status check



PM will take care of the status of child device, so no need
check each port anymore.

Suggested-by: default avatarIkjoon Jang <ikjn@chromium.org>
Signed-off-by: default avatarChunfeng Yun <chunfeng.yun@mediatek.com>
Link: https://lore.kernel.org/r/1618555706-6810-1-git-send-email-chunfeng.yun@mediatek.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ca0584c4
Loading
Loading
Loading
Loading
+2 −41
Original line number Diff line number Diff line
@@ -665,42 +665,6 @@ static int __maybe_unused xhci_mtk_resume(struct device *dev)
	return ret;
}

static int check_rhub_status(struct xhci_hcd *xhci, struct xhci_hub *rhub)
{
	u32 suspended_ports;
	u32 status;
	int num_ports;
	int i;

	num_ports = rhub->num_ports;
	suspended_ports = rhub->bus_state.suspended_ports;
	for (i = 0; i < num_ports; i++) {
		if (!(suspended_ports & BIT(i))) {
			status = readl(rhub->ports[i]->addr);
			if (status & PORT_CONNECT)
				return -EBUSY;
		}
	}

	return 0;
}

/*
 * check the bus whether it could suspend or not
 * the bus will suspend if the downstream ports are already suspended,
 * or no devices connected.
 */
static int check_bus_status(struct xhci_hcd *xhci)
{
	int ret;

	ret = check_rhub_status(xhci, &xhci->usb3_rhub);
	if (ret)
		return ret;

	return check_rhub_status(xhci, &xhci->usb2_rhub);
}

static int __maybe_unused xhci_mtk_runtime_suspend(struct device *dev)
{
	struct xhci_hcd_mtk  *mtk = dev_get_drvdata(dev);
@@ -710,11 +674,8 @@ static int __maybe_unused xhci_mtk_runtime_suspend(struct device *dev)
	if (xhci->xhc_state)
		return -ESHUTDOWN;

	if (device_may_wakeup(dev)) {
		ret = check_bus_status(xhci);
		if (!ret)
	if (device_may_wakeup(dev))
		ret = xhci_mtk_suspend(dev);
	}

	/* -EBUSY: let PM automatically reschedule another autosuspend */
	return ret ? -EBUSY : 0;