Commit 8f58e29e authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by David S. Miller
Browse files

net: wwan: iosm: Let PCI core handle PCI power transition



pci_pm_suspend_noirq() and pci_pm_resume_noirq() already handle power
transition for system-wide suspend and resume, so it's not necessary to
do it in the driver.

Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0c94d657
Loading
Loading
Loading
Loading
+2 −47
Original line number Diff line number Diff line
@@ -363,67 +363,22 @@ static int __maybe_unused ipc_pcie_resume_s2idle(struct iosm_pcie *ipc_pcie)

int __maybe_unused ipc_pcie_suspend(struct iosm_pcie *ipc_pcie)
{
	struct pci_dev *pdev;
	int ret;

	pdev = ipc_pcie->pci;

	/* Execute D3 one time. */
	if (pdev->current_state != PCI_D0) {
		dev_dbg(ipc_pcie->dev, "done for PM=%d", pdev->current_state);
		return 0;
	}

	/* The HAL shall ask the shared memory layer whether D3 is allowed. */
	ipc_imem_pm_suspend(ipc_pcie->imem);

	/* Save the PCI configuration space of a device before suspending. */
	ret = pci_save_state(pdev);

	if (ret) {
		dev_err(ipc_pcie->dev, "pci_save_state error=%d", ret);
		return ret;
	}

	/* Set the power state of a PCI device.
	 * Transition a device to a new power state, using the device's PCI PM
	 * registers.
	 */
	ret = pci_set_power_state(pdev, PCI_D3cold);

	if (ret) {
		dev_err(ipc_pcie->dev, "pci_set_power_state error=%d", ret);
		return ret;
	}

	dev_dbg(ipc_pcie->dev, "SUSPEND done");
	return ret;
	return 0;
}

int __maybe_unused ipc_pcie_resume(struct iosm_pcie *ipc_pcie)
{
	int ret;

	/* Set the power state of a PCI device.
	 * Transition a device to a new power state, using the device's PCI PM
	 * registers.
	 */
	ret = pci_set_power_state(ipc_pcie->pci, PCI_D0);

	if (ret) {
		dev_err(ipc_pcie->dev, "pci_set_power_state error=%d", ret);
		return ret;
	}

	pci_restore_state(ipc_pcie->pci);

	/* The HAL shall inform the shared memory layer that the device is
	 * active.
	 */
	ipc_imem_pm_resume(ipc_pcie->imem);

	dev_dbg(ipc_pcie->dev, "RESUME done");
	return ret;
	return 0;
}

static int __maybe_unused ipc_pcie_suspend_cb(struct device *dev)