diff options
author | Gary Hade <garyhade@us.ibm.com> | 2007-07-05 14:10:46 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-11 19:02:12 -0400 |
commit | bfceafc5979d9055e04f03f970de6ff7a4bce1b6 (patch) | |
tree | 76f2fa133941b1475ab350f53aa7d5736ce15ab9 /drivers/pci | |
parent | 5b57a6cea464fc686a6bc446f667c05901fa9734 (diff) |
PCI: hotplug: acpiphp: fix slot poweroff problem on systems without _PS3
On systems where the optional _PS3 ACPI object is not implemented
acpiphp fails to power off the slot. This is happening because the
current code does not attempt to remove power using the _EJ0 ACPI
object. This patch restores the _EJ0 evaluation attempt which was
apparently inadvertently removed from the power-off sequence when the
_EJ0 evaluation code was relocated from power_off_slot() to
acpiphp_eject_slot().
Signed-off-by: Gary Hade <garyhade@us.ibm.com>
Cc: <lcm@us.ibm.com>
Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/hotplug/acpiphp.h | 1 | ||||
-rw-r--r-- | drivers/pci/hotplug/acpiphp_core.c | 6 | ||||
-rw-r--r-- | drivers/pci/hotplug/acpiphp_glue.c | 2 |
3 files changed, 7 insertions, 2 deletions
diff --git a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h index ddbadd95387e..f6cc0c5b5657 100644 --- a/drivers/pci/hotplug/acpiphp.h +++ b/drivers/pci/hotplug/acpiphp.h | |||
@@ -211,6 +211,7 @@ typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); | |||
211 | 211 | ||
212 | extern int acpiphp_enable_slot (struct acpiphp_slot *slot); | 212 | extern int acpiphp_enable_slot (struct acpiphp_slot *slot); |
213 | extern int acpiphp_disable_slot (struct acpiphp_slot *slot); | 213 | extern int acpiphp_disable_slot (struct acpiphp_slot *slot); |
214 | extern int acpiphp_eject_slot (struct acpiphp_slot *slot); | ||
214 | extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot); | 215 | extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot); |
215 | extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot); | 216 | extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot); |
216 | extern u8 acpiphp_get_latch_status (struct acpiphp_slot *slot); | 217 | extern u8 acpiphp_get_latch_status (struct acpiphp_slot *slot); |
diff --git a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c index fa5c0197d571..a0ca63adad5a 100644 --- a/drivers/pci/hotplug/acpiphp_core.c +++ b/drivers/pci/hotplug/acpiphp_core.c | |||
@@ -156,11 +156,15 @@ static int enable_slot(struct hotplug_slot *hotplug_slot) | |||
156 | static int disable_slot(struct hotplug_slot *hotplug_slot) | 156 | static int disable_slot(struct hotplug_slot *hotplug_slot) |
157 | { | 157 | { |
158 | struct slot *slot = hotplug_slot->private; | 158 | struct slot *slot = hotplug_slot->private; |
159 | int retval; | ||
159 | 160 | ||
160 | dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); | 161 | dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); |
161 | 162 | ||
162 | /* disable the specified slot */ | 163 | /* disable the specified slot */ |
163 | return acpiphp_disable_slot(slot->acpi_slot); | 164 | retval = acpiphp_disable_slot(slot->acpi_slot); |
165 | if (!retval) | ||
166 | retval = acpiphp_eject_slot(slot->acpi_slot); | ||
167 | return retval; | ||
164 | } | 168 | } |
165 | 169 | ||
166 | 170 | ||
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index 9ef4e989afc4..3cc5a821f9c5 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c | |||
@@ -1282,7 +1282,7 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot) | |||
1282 | /** | 1282 | /** |
1283 | * acpiphp_eject_slot - physically eject the slot | 1283 | * acpiphp_eject_slot - physically eject the slot |
1284 | */ | 1284 | */ |
1285 | static int acpiphp_eject_slot(struct acpiphp_slot *slot) | 1285 | int acpiphp_eject_slot(struct acpiphp_slot *slot) |
1286 | { | 1286 | { |
1287 | acpi_status status; | 1287 | acpi_status status; |
1288 | struct acpiphp_func *func; | 1288 | struct acpiphp_func *func; |