mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 09:14:19 +08:00
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_enable_slot (struct acpiphp_slot *slot);
|
||||||
extern int acpiphp_disable_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_power_status (struct acpiphp_slot *slot);
|
||||||
extern u8 acpiphp_get_attention_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);
|
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)
|
static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||||
{
|
{
|
||||||
struct slot *slot = hotplug_slot->private;
|
struct slot *slot = hotplug_slot->private;
|
||||||
|
int retval;
|
||||||
|
|
||||||
dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
|
dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
|
||||||
|
|
||||||
/* disable the specified slot */
|
/* 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
|
* 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;
|
acpi_status status;
|
||||||
struct acpiphp_func *func;
|
struct acpiphp_func *func;
|
||||||
|
Loading…
Reference in New Issue
Block a user