@ -764,27 +764,6 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
return ( unsigned int ) sta ;
}
/**
* acpiphp_eject_slot - physically eject the slot
* @ slot : ACPI PHP slot
*/
int acpiphp_eject_slot ( struct acpiphp_slot * slot )
{
struct acpiphp_func * func ;
list_for_each_entry ( func , & slot - > funcs , sibling ) {
/* We don't want to call _EJ0 on non-existing functions. */
if ( ! ( func - > flags & FUNC_HAS_EJ0 ) )
continue ;
if ( ACPI_FAILURE ( acpi_evaluate_ej0 ( func_to_handle ( func ) ) ) )
return - 1 ;
else
break ;
}
return 0 ;
}
/**
* acpiphp_check_bridge - re - enumerate devices
* @ bridge : where to begin re - enumeration
@ -805,13 +784,11 @@ static int acpiphp_check_bridge(struct acpiphp_bridge *bridge)
if ( slot - > flags & SLOT_ENABLED ) {
if ( status = = ACPI_STA_ALL )
continue ;
retval = acpiphp_disable_slot ( slot ) ;
if ( retval ) {
err ( " Error occurred in disabling \n " ) ;
retval = acpiphp_disable_and_eject_slot ( slot ) ;
if ( retval )
goto err_exit ;
} else {
acpiphp_eject_slot ( slot ) ;
}
disabled + + ;
} else {
if ( status ! = ACPI_STA_ALL )
@ -951,9 +928,7 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
case ACPI_NOTIFY_EJECT_REQUEST :
/* request device eject */
dbg ( " %s: Device eject notify on %s \n " , __func__ , objname ) ;
if ( ! ( acpiphp_disable_slot ( func - > slot ) ) )
acpiphp_eject_slot ( func - > slot ) ;
acpiphp_disable_and_eject_slot ( func - > slot ) ;
break ;
case ACPI_NOTIFY_FREQUENCY_MISMATCH :
@ -1148,11 +1123,12 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot)
}
/**
* acpiphp_disable_slot - power off slot
* acpiphp_disable_and_eject_ slot - power off and eject slot
* @ slot : ACPI PHP slot
*/
int acpiphp_disable_slot ( struct acpiphp_slot * slot )
int acpiphp_disable_and_eject_ slot ( struct acpiphp_slot * slot )
{
struct acpiphp_func * func ;
int retval = 0 ;
mutex_lock ( & slot - > crit_sect ) ;
@ -1167,6 +1143,16 @@ int acpiphp_disable_slot(struct acpiphp_slot *slot)
if ( retval )
goto err_exit ;
list_for_each_entry ( func , & slot - > funcs , sibling )
if ( func - > flags & FUNC_HAS_EJ0 ) {
acpi_handle handle = func_to_handle ( func ) ;
if ( ACPI_FAILURE ( acpi_evaluate_ej0 ( handle ) ) )
acpi_handle_err ( handle , " _EJ0 failed \n " ) ;
break ;
}
err_exit :
mutex_unlock ( & slot - > crit_sect ) ;
return retval ;