Commit 9c62f0bf authored by Mika Westerberg's avatar Mika Westerberg Committed by Bjorn Helgaas

PCI: pciehp: Implement runtime PM callbacks

Basically we need to do the same thing when runtime suspending than with
system sleep so re-use those operations here. This makes sure hotplug
interrupt does not trigger immediately when the link goes down.
Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 94c7993f
...@@ -288,6 +288,22 @@ static int pciehp_resume(struct pcie_device *dev) ...@@ -288,6 +288,22 @@ static int pciehp_resume(struct pcie_device *dev)
return 0; return 0;
} }
static int pciehp_runtime_resume(struct pcie_device *dev)
{
struct controller *ctrl = get_service_data(dev);
/* pci_restore_state() just wrote to the Slot Control register */
ctrl->cmd_started = jiffies;
ctrl->cmd_busy = true;
/* clear spurious events from rediscovery of inserted card */
if ((ctrl->state == ON_STATE || ctrl->state == BLINKINGOFF_STATE) &&
pme_is_native(dev))
pcie_clear_hotplug_events(ctrl);
return pciehp_resume(dev);
}
#endif /* PM */ #endif /* PM */
static struct pcie_port_service_driver hpdriver_portdrv = { static struct pcie_port_service_driver hpdriver_portdrv = {
...@@ -302,6 +318,8 @@ static struct pcie_port_service_driver hpdriver_portdrv = { ...@@ -302,6 +318,8 @@ static struct pcie_port_service_driver hpdriver_portdrv = {
.suspend = pciehp_suspend, .suspend = pciehp_suspend,
.resume_noirq = pciehp_resume_noirq, .resume_noirq = pciehp_resume_noirq,
.resume = pciehp_resume, .resume = pciehp_resume,
.runtime_suspend = pciehp_suspend,
.runtime_resume = pciehp_runtime_resume,
#endif /* PM */ #endif /* PM */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment