Skip to content

Commit

Permalink
ACPI / PM: Do not execute legacy driver PM callbacks
Browse files Browse the repository at this point in the history
Since all ACPI drivers in the tree should have been switched
to power management handling based on struct dev_pm_ops,
modify the ACPI bus type driver so that is doesn't execute
legacy driver power management callbacks from the functions
pointed to by the members of the acpi_bus_pm structure.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
  • Loading branch information
Rafael J. Wysocki committed Jul 1, 2012
1 parent c5dec01 commit 13db855
Showing 1 changed file with 9 additions and 15 deletions.
24 changes: 9 additions & 15 deletions drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,51 +290,45 @@ static void acpi_device_release(struct device *dev)
kfree(acpi_dev);
}

#define ACPI_DEV_PM_CALLBACK(dev, callback, legacy_cb) \
#define ACPI_DEV_PM_CALLBACK(dev, callback) \
({ \
struct acpi_device *__acpi_dev = to_acpi_device(dev); \
struct acpi_driver *__acpi_drv = __acpi_dev->driver; \
struct device_driver *__drv = dev->driver; \
int __ret; \
int __ret = 0; \
\
if (__acpi_drv && __acpi_drv->ops.legacy_cb) \
__ret = __acpi_drv->ops.legacy_cb(__acpi_dev); \
else if (__drv && __drv->pm && __drv->pm->callback) \
if (__drv && __drv->pm && __drv->pm->callback) \
__ret = __drv->pm->callback(dev); \
else \
__ret = 0; \
\
__ret; \
})

static int acpi_pm_suspend(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, suspend, suspend);
return ACPI_DEV_PM_CALLBACK(dev, suspend);
}

static int acpi_pm_resume(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, resume, resume);
return ACPI_DEV_PM_CALLBACK(dev, resume);
}

static int acpi_pm_freeze(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, freeze, suspend);
return ACPI_DEV_PM_CALLBACK(dev, freeze);
}

static int acpi_pm_thaw(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, thaw, resume);
return ACPI_DEV_PM_CALLBACK(dev, thaw);
}

static int acpi_pm_poweroff(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, poweroff, suspend);
return ACPI_DEV_PM_CALLBACK(dev, poweroff);
}

static int acpi_pm_restore(struct device *dev)
{
return ACPI_DEV_PM_CALLBACK(dev, restore, resume);
return ACPI_DEV_PM_CALLBACK(dev, restore);
}

static const struct dev_pm_ops acpi_bus_pm = {
Expand Down

0 comments on commit 13db855

Please sign in to comment.