mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
5b57a6cea4
commit
bfceafc597
|
@ -211,6 +211,7 @@ typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
|
|||
|
||||
extern int acpiphp_enable_slot (struct acpiphp_slot *slot);
|
||||
extern int acpiphp_disable_slot (struct acpiphp_slot *slot);
|
||||
extern int acpiphp_eject_slot (struct acpiphp_slot *slot);
|
||||
extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot);
|
||||
extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot);
|
||||
extern u8 acpiphp_get_latch_status (struct acpiphp_slot *slot);
|
||||
|
|
|
@ -156,11 +156,15 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)
|
|||
static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
int retval;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
|
||||
|
||||
/* disable the specified slot */
|
||||
return acpiphp_disable_slot(slot->acpi_slot);
|
||||
retval = acpiphp_disable_slot(slot->acpi_slot);
|
||||
if (!retval)
|
||||
retval = acpiphp_eject_slot(slot->acpi_slot);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1282,7 +1282,7 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
|
|||
/**
|
||||
* acpiphp_eject_slot - physically eject the slot
|
||||
*/
|
||||
static int acpiphp_eject_slot(struct acpiphp_slot *slot)
|
||||
int acpiphp_eject_slot(struct acpiphp_slot *slot)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpiphp_func *func;
|
||||
|
|
Loading…
Reference in New Issue