diff options
Diffstat (limited to 'drivers/ide/ide-acpi.c')
| -rw-r--r-- | drivers/ide/ide-acpi.c | 33 | 
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c index c26c11905ff..b6940992a6f 100644 --- a/drivers/ide/ide-acpi.c +++ b/drivers/ide/ide-acpi.c @@ -7,18 +7,17 @@   * Copyright (C) 2006 Hannes Reinecke   */ +#include <linux/acpi.h>  #include <linux/ata.h>  #include <linux/delay.h>  #include <linux/device.h>  #include <linux/errno.h>  #include <linux/kernel.h>  #include <linux/slab.h> -#include <acpi/acpi.h>  #include <linux/ide.h>  #include <linux/pci.h>  #include <linux/dmi.h> - -#include <acpi/acpi_bus.h> +#include <linux/module.h>  #define REGS_PER_GTF		7 @@ -52,15 +51,15 @@ struct ide_acpi_hwif_link {  #define DEBPRINT(fmt, args...)	do {} while (0)  #endif	/* DEBUGGING */ -static int ide_noacpi; +static bool ide_noacpi;  module_param_named(noacpi, ide_noacpi, bool, 0);  MODULE_PARM_DESC(noacpi, "disable IDE ACPI support"); -static int ide_acpigtf; +static bool ide_acpigtf;  module_param_named(acpigtf, ide_acpigtf, bool, 0);  MODULE_PARM_DESC(acpigtf, "enable IDE ACPI _GTF support"); -static int ide_acpionboot; +static bool ide_acpionboot;  module_param_named(acpionboot, ide_acpionboot, bool, 0);  MODULE_PARM_DESC(acpionboot, "call IDE ACPI methods on boot"); @@ -98,6 +97,17 @@ bool ide_port_acpi(ide_hwif_t *hwif)  	return ide_noacpi == 0 && hwif->acpidata;  } +static acpi_handle acpi_get_child(acpi_handle handle, u64 addr) +{ +	struct acpi_device *adev; + +	if (!handle || acpi_bus_get_device(handle, &adev)) +		return NULL; + +	adev = acpi_find_child_device(adev, addr, false); +	return adev ? adev->handle : NULL; +} +  /**   * ide_get_dev_handle - finds acpi_handle and PCI device.function   * @dev: device to locate @@ -127,7 +137,7 @@ static int ide_get_dev_handle(struct device *dev, acpi_handle *handle,  	DEBPRINT("ENTER: pci %02x:%02x.%01x\n", bus, devnum, func); -	dev_handle = DEVICE_ACPI_HANDLE(dev); +	dev_handle = ACPI_HANDLE(dev);  	if (!dev_handle) {  		DEBPRINT("no acpi handle for device\n");  		goto err; @@ -416,21 +426,21 @@ void ide_acpi_get_timing(ide_hwif_t *hwif)  	out_obj = output.pointer;  	if (out_obj->type != ACPI_TYPE_BUFFER) { -		kfree(output.pointer);  		DEBPRINT("Run _GTM: error: "  		       "expected object type of ACPI_TYPE_BUFFER, "  		       "got 0x%x\n", out_obj->type); +		kfree(output.pointer);  		return;  	}  	if (!out_obj->buffer.length || !out_obj->buffer.pointer ||  	    out_obj->buffer.length != sizeof(struct GTM_buffer)) { -		kfree(output.pointer);  		printk(KERN_ERR  			"%s: unexpected _GTM length (0x%x)[should be 0x%zx] or "  			"addr (0x%p)\n",  			__func__, out_obj->buffer.length,  			sizeof(struct GTM_buffer), out_obj->buffer.pointer); +		kfree(output.pointer);  		return;  	} @@ -519,11 +529,12 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)  	ide_port_for_each_present_dev(i, drive, hwif) {  		if (drive->acpidata->obj_handle)  			acpi_bus_set_power(drive->acpidata->obj_handle, -					   on ? ACPI_STATE_D0 : ACPI_STATE_D3); +				on ? ACPI_STATE_D0 : ACPI_STATE_D3_COLD);  	}  	if (!on) -		acpi_bus_set_power(hwif->acpidata->obj_handle, ACPI_STATE_D3); +		acpi_bus_set_power(hwif->acpidata->obj_handle, +				   ACPI_STATE_D3_COLD);  }  /**  | 
