aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorGary Hade <garyhade@us.ibm.com>2007-07-05 14:10:46 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-07-11 19:02:12 -0400
commitbfceafc5979d9055e04f03f970de6ff7a4bce1b6 (patch)
tree76f2fa133941b1475ab350f53aa7d5736ce15ab9 /drivers/pci
parent5b57a6cea464fc686a6bc446f667c05901fa9734 (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.h1
-rw-r--r--drivers/pci/hotplug/acpiphp_core.c6
-rw-r--r--drivers/pci/hotplug/acpiphp_glue.c2
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
212extern int acpiphp_enable_slot (struct acpiphp_slot *slot); 212extern int acpiphp_enable_slot (struct acpiphp_slot *slot);
213extern int acpiphp_disable_slot (struct acpiphp_slot *slot); 213extern int acpiphp_disable_slot (struct acpiphp_slot *slot);
214extern int acpiphp_eject_slot (struct acpiphp_slot *slot);
214extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot); 215extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot);
215extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot); 216extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot);
216extern u8 acpiphp_get_latch_status (struct acpiphp_slot *slot); 217extern 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)
156static int disable_slot(struct hotplug_slot *hotplug_slot) 156static 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 */
1285static int acpiphp_eject_slot(struct acpiphp_slot *slot) 1285int 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;