diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-24 08:09:50 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-24 08:09:50 -0800 |
commit | 668ebab44c7dd41e6823e6be15d8b28b87ddc0cd (patch) | |
tree | 5d7f7b3920ec3a96df52d0a74b0fed2f60c35cf3 /drivers/acpi/fan.c | |
parent | 9c09a95cf431fcf5720f2e408befa24b32b8cf4d (diff) | |
parent | 63eac9badbe35054c0ae61a9dbcf4830c7429040 (diff) |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
Revert "ACPI: Fan: Drop force_power_state acpi_device option"
ACPI: EC: "DEBUG" needs to be defined earlier
ACPI: EC: add leading zeros to debug messages
ACPI: EC: fix dmesg spam regression
ACPI: DMI blacklist to reduce console warnings on OSI(Linux) systems.
ACPI: Add ThinkPad R61, ThinkPad T61 to OSI(Linux) white-list
ACPI: make _OSI(Linux) console messages smarter
ACPI: Delete Intel Customer Reference Board (CRB) from OSI(Linux) DMI list
ACPI: on OSI(Linux), print needed DMI rather than requesting dmidecode output
ACPI: create acpi_dmi_dump()
DMI: create dmi_get_slot()
DMI: move dmi_available declaration to linux/dmi.h
ACPI: processor: Fix null pointer dereference in throttling
Diffstat (limited to 'drivers/acpi/fan.c')
-rw-r--r-- | drivers/acpi/fan.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c index a5a5532db26..a6e149d692c 100644 --- a/drivers/acpi/fan.c +++ b/drivers/acpi/fan.c @@ -47,6 +47,8 @@ MODULE_LICENSE("GPL"); static int acpi_fan_add(struct acpi_device *device); static int acpi_fan_remove(struct acpi_device *device, int type); +static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state); +static int acpi_fan_resume(struct acpi_device *device); static const struct acpi_device_id fan_device_ids[] = { {"PNP0C0B", 0}, @@ -61,6 +63,8 @@ static struct acpi_driver acpi_fan_driver = { .ops = { .add = acpi_fan_add, .remove = acpi_fan_remove, + .suspend = acpi_fan_suspend, + .resume = acpi_fan_resume, }, }; @@ -191,6 +195,10 @@ static int acpi_fan_add(struct acpi_device *device) goto end; } + device->flags.force_power_state = 1; + acpi_bus_set_power(device->handle, state); + device->flags.force_power_state = 0; + result = acpi_fan_add_fs(device); if (result) goto end; @@ -216,6 +224,38 @@ static int acpi_fan_remove(struct acpi_device *device, int type) return 0; } +static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state) +{ + if (!device) + return -EINVAL; + + acpi_bus_set_power(device->handle, ACPI_STATE_D0); + + return AE_OK; +} + +static int acpi_fan_resume(struct acpi_device *device) +{ + int result = 0; + int power_state = 0; + + if (!device) + return -EINVAL; + + result = acpi_bus_get_power(device->handle, &power_state); + if (result) { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "Error reading fan power state\n")); + return result; + } + + device->flags.force_power_state = 1; + acpi_bus_set_power(device->handle, power_state); + device->flags.force_power_state = 0; + + return result; +} + static int __init acpi_fan_init(void) { int result = 0; |