diff options
Diffstat (limited to 'drivers/pci/pci-acpi.c')
| -rw-r--r-- | drivers/pci/pci-acpi.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index b3a63edb690..ae5ec76dca7 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -63,7 +63,7 @@ static acpi_status acpi_run_osc(acpi_handle handle,  	union acpi_object in_params[4];  	struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};  	union acpi_object *out_obj; -	u32 osc_dw0, flags = osc_args->capbuf[OSC_QUERY_TYPE]; +	u32 errors, flags = osc_args->capbuf[OSC_QUERY_TYPE];  	/* Setting up input parameters */  	input.count = 4; @@ -92,15 +92,16 @@ static acpi_status acpi_run_osc(acpi_handle handle,  		status = AE_TYPE;  		goto out_kfree;  	} -	osc_dw0 = *((u32 *)out_obj->buffer.pointer); -	if (osc_dw0) { -		if (osc_dw0 & OSC_REQUEST_ERROR) +	/* Need to ignore the bit0 in result code */ +	errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0); +	if (errors) { +		if (errors & OSC_REQUEST_ERROR)  			printk(KERN_DEBUG "_OSC request fails\n");  -		if (osc_dw0 & OSC_INVALID_UUID_ERROR) +		if (errors & OSC_INVALID_UUID_ERROR)  			printk(KERN_DEBUG "_OSC invalid UUID\n");  -		if (osc_dw0 & OSC_INVALID_REVISION_ERROR) +		if (errors & OSC_INVALID_REVISION_ERROR)  			printk(KERN_DEBUG "_OSC invalid revision\n");  -		if (osc_dw0 & OSC_CAPABILITIES_MASK_ERROR) { +		if (errors & OSC_CAPABILITIES_MASK_ERROR) {  			if (flags & OSC_QUERY_ENABLE)  				goto out_success;  			printk(KERN_DEBUG "_OSC FW not grant req. control\n");  |