diff options
Diffstat (limited to 'drivers/acpi/ec.c')
| -rw-r--r-- | drivers/acpi/ec.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index e7793ee9e649..299ec653388c 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -1333,10 +1333,13 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,  	if (ec->busy_polling || bits > 8)  		acpi_ec_burst_enable(ec); -	for (i = 0; i < bytes; ++i, ++address, ++value) +	for (i = 0; i < bytes; ++i, ++address, ++value) {  		result = (function == ACPI_READ) ?  			acpi_ec_read(ec, address, value) :  			acpi_ec_write(ec, address, *value); +		if (result < 0) +			break; +	}  	if (ec->busy_polling || bits > 8)  		acpi_ec_burst_disable(ec); @@ -1348,8 +1351,10 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,  		return AE_NOT_FOUND;  	case -ETIME:  		return AE_TIME; -	default: +	case 0:  		return AE_OK; +	default: +		return AE_ERROR;  	}  } @@ -1502,6 +1507,9 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device,  	if (call_reg && !test_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags)) {  		acpi_execute_reg_methods(scope_handle, ACPI_ADR_SPACE_EC); +		if (scope_handle != ec->handle) +			acpi_execute_orphan_reg_method(ec->handle, ACPI_ADR_SPACE_EC); +  		set_bit(EC_FLAGS_EC_REG_CALLED, &ec->flags);  	}  | 
