ACPI: PM: Unexport acpi_device_get_power()

Using acpi_device_get_power() outside of ACPI device initialization
and ACPI sysfs is problematic due to the way in which power resources
are handled by it, so unexport it and add a paragraph explaining the
pitfalls to its kerneldoc comment.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
Rafael J. Wysocki 2019-07-04 01:02:49 +02:00
parent 28ad4b4e34
commit 9ed411c06d
3 changed files with 12 additions and 2 deletions

View File

@ -53,6 +53,11 @@ const char *acpi_power_state_string(int state)
* This function does not update the device's power.state field, but it may * This function does not update the device's power.state field, but it may
* update its parent's power.state field (when the parent's power state is * update its parent's power.state field (when the parent's power state is
* unknown and the device's power state turns out to be D0). * unknown and the device's power state turns out to be D0).
*
* Also, it does not update power resource reference counters to ensure that
* the power state returned by it will be persistent and it may return a power
* state shallower than previously set by acpi_device_set_power() for @device
* (if that power state depends on any power resources).
*/ */
int acpi_device_get_power(struct acpi_device *device, int *state) int acpi_device_get_power(struct acpi_device *device, int *state)
{ {
@ -118,7 +123,6 @@ int acpi_device_get_power(struct acpi_device *device, int *state)
return 0; return 0;
} }
EXPORT_SYMBOL(acpi_device_get_power);
static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state) static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state)
{ {

View File

@ -139,8 +139,15 @@ int acpi_power_get_inferred_state(struct acpi_device *device, int *state);
int acpi_power_on_resources(struct acpi_device *device, int state); int acpi_power_on_resources(struct acpi_device *device, int state);
int acpi_power_transition(struct acpi_device *device, int state); int acpi_power_transition(struct acpi_device *device, int state);
/* --------------------------------------------------------------------------
Device Power Management
-------------------------------------------------------------------------- */
int acpi_device_get_power(struct acpi_device *device, int *state);
int acpi_wakeup_device_init(void); int acpi_wakeup_device_init(void);
/* --------------------------------------------------------------------------
Processor
-------------------------------------------------------------------------- */
#ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC #ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC
void acpi_early_processor_set_pdc(void); void acpi_early_processor_set_pdc(void);
#else #else

View File

@ -506,7 +506,6 @@ int acpi_bus_get_status(struct acpi_device *device);
int acpi_bus_set_power(acpi_handle handle, int state); int acpi_bus_set_power(acpi_handle handle, int state);
const char *acpi_power_state_string(int state); const char *acpi_power_state_string(int state);
int acpi_device_get_power(struct acpi_device *device, int *state);
int acpi_device_set_power(struct acpi_device *device, int state); int acpi_device_set_power(struct acpi_device *device, int state);
int acpi_bus_init_power(struct acpi_device *device); int acpi_bus_init_power(struct acpi_device *device);
int acpi_device_fix_up_power(struct acpi_device *device); int acpi_device_fix_up_power(struct acpi_device *device);