|
@@ -563,7 +563,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|
|
void *handler_context, void *region_context)
|
|
|
{
|
|
|
struct acpi_ec *ec = handler_context;
|
|
|
- int result = 0, i = 0;
|
|
|
+ int result = 0, i;
|
|
|
u8 temp = 0;
|
|
|
|
|
|
if ((address > 0xFF) || !value || !handler_context)
|
|
@@ -575,7 +575,16 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|
|
if (bits != 8 && acpi_strict)
|
|
|
return AE_BAD_PARAMETER;
|
|
|
|
|
|
- while (bits - i > 0) {
|
|
|
+ if (function == ACPI_READ) {
|
|
|
+ result = acpi_ec_read(ec, address, &temp);
|
|
|
+ *value = temp;
|
|
|
+ } else {
|
|
|
+ temp = 0xff & (*value);
|
|
|
+ result = acpi_ec_write(ec, address, temp);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 8; unlikely(bits - i > 0); i += 8) {
|
|
|
+ ++address;
|
|
|
if (function == ACPI_READ) {
|
|
|
result = acpi_ec_read(ec, address, &temp);
|
|
|
(*value) |= ((acpi_integer)temp) << i;
|
|
@@ -583,8 +592,6 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
|
|
temp = 0xff & ((*value) >> i);
|
|
|
result = acpi_ec_write(ec, address, temp);
|
|
|
}
|
|
|
- i += 8;
|
|
|
- ++address;
|
|
|
}
|
|
|
|
|
|
switch (result) {
|