Skip to content

Commit

Permalink
Bluetooth: hci_intel: Enable IRQ wake capability
Browse files Browse the repository at this point in the history
We need to explicitly enable the IRQ wakeup mode to let the controller
wake the system from sleep states (like suspend-to-ram).
PM suspend/resume callbacks now call the generic intel device PM
functions after enabling/disabling IRQ wake.

Signed-off-by: Loic Poulain <loic.poulain@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Loic Poulain authored and Marcel Holtmann committed Sep 17, 2015
1 parent 30e945f commit f755247
Showing 1 changed file with 25 additions and 7 deletions.
32 changes: 25 additions & 7 deletions drivers/bluetooth/hci_intel.c
Original file line number Diff line number Diff line change
Expand Up @@ -1184,12 +1184,10 @@ static int intel_acpi_probe(struct intel_device *idev)
#endif

#ifdef CONFIG_PM
static int intel_suspend(struct device *dev)
static int intel_suspend_device(struct device *dev)
{
struct intel_device *idev = dev_get_drvdata(dev);

dev_dbg(dev, "intel_suspend");

mutex_lock(&idev->hu_lock);
if (idev->hu)
intel_lpm_suspend(idev->hu);
Expand All @@ -1198,12 +1196,10 @@ static int intel_suspend(struct device *dev)
return 0;
}

static int intel_resume(struct device *dev)
static int intel_resume_device(struct device *dev)
{
struct intel_device *idev = dev_get_drvdata(dev);

dev_dbg(dev, "intel_resume");

mutex_lock(&idev->hu_lock);
if (idev->hu)
intel_lpm_resume(idev->hu);
Expand All @@ -1213,9 +1209,31 @@ static int intel_resume(struct device *dev)
}
#endif

#ifdef CONFIG_PM_SLEEP
static int intel_suspend(struct device *dev)
{
struct intel_device *idev = dev_get_drvdata(dev);

if (device_may_wakeup(dev))
enable_irq_wake(idev->irq);

return intel_suspend_device(dev);
}

static int intel_resume(struct device *dev)
{
struct intel_device *idev = dev_get_drvdata(dev);

if (device_may_wakeup(dev))
disable_irq_wake(idev->irq);

return intel_resume_device(dev);
}
#endif

static const struct dev_pm_ops intel_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(intel_suspend, intel_resume)
SET_RUNTIME_PM_OPS(intel_suspend, intel_resume, NULL)
SET_RUNTIME_PM_OPS(intel_suspend_device, intel_resume_device, NULL)
};

static int intel_probe(struct platform_device *pdev)
Expand Down

0 comments on commit f755247

Please sign in to comment.