summaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLuming Yu2005-03-19 07:54:47 +0100
committerLen Brown2005-07-12 05:53:38 +0200
commitfa9cd547e097df4966b8bd5c94aeed953e32b14d (patch)
tree1f5fd7bf77154375fd337d4b98f2646cdc52fc9f /drivers/acpi
parent[ACPI] Enable EC Burst Mode (diff)
downloadkernel-qcow2-linux-fa9cd547e097df4966b8bd5c94aeed953e32b14d.tar.gz
kernel-qcow2-linux-fa9cd547e097df4966b8bd5c94aeed953e32b14d.tar.xz
kernel-qcow2-linux-fa9cd547e097df4966b8bd5c94aeed953e32b14d.zip
[ACPI] fix EC access width
http://bugzilla.kernel.org/show_bug.cgi?id=4346 Written-by: David Shaohua Li and Luming Yu Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/ec.c32
1 files changed, 14 insertions, 18 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 69b04d430f00..e37162229342 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -600,7 +600,7 @@ acpi_ec_space_handler (
{
int result = 0;
struct acpi_ec *ec = NULL;
- u32 temp = 0;
+ u64 temp = *value;
acpi_integer f_v = 0;
int i = 0;
@@ -609,10 +609,9 @@ acpi_ec_space_handler (
if ((address > 0xFF) || !value || !handler_context)
return_VALUE(AE_BAD_PARAMETER);
- if(bit_width != 8) {
+ if (bit_width != 8 && acpi_strict) {
printk(KERN_WARNING PREFIX "acpi_ec_space_handler: bit_width should be 8\n");
- if (acpi_strict)
- return_VALUE(AE_BAD_PARAMETER);
+ return_VALUE(AE_BAD_PARAMETER);
}
ec = (struct acpi_ec *) handler_context;
@@ -620,11 +619,11 @@ acpi_ec_space_handler (
next_byte:
switch (function) {
case ACPI_READ:
- result = acpi_ec_read(ec, (u8) address, &temp);
- *value = (acpi_integer) temp;
+ temp = 0;
+ result = acpi_ec_read(ec, (u8) address, (u32 *)&temp);
break;
case ACPI_WRITE:
- result = acpi_ec_write(ec, (u8) address, (u8) *value);
+ result = acpi_ec_write(ec, (u8) address, (u8) temp);
break;
default:
result = -EINVAL;
@@ -633,19 +632,18 @@ next_byte:
}
bit_width -= 8;
- if(bit_width){
-
- if(function == ACPI_READ)
- f_v |= (acpi_integer) (*value) << 8*i;
- if(function == ACPI_WRITE)
- (*value) >>=8;
+ if (bit_width) {
+ if (function == ACPI_READ)
+ f_v |= temp << 8 * i;
+ if (function == ACPI_WRITE)
+ temp >>= 8;
i++;
+ (u8)address ++;
goto next_byte;
}
-
- if(function == ACPI_READ){
- f_v |= (acpi_integer) (*value) << 8*i;
+ if (function == ACPI_READ) {
+ f_v |= temp << 8 * i;
*value = f_v;
}
@@ -664,8 +662,6 @@ out:
default:
return_VALUE(AE_OK);
}
-
-
}