ACPI: battery: Don't return -EFAIL on broken packages.

Acer BIOS has a bug which is exposed when a dead battery is present.

The package template that is used to describe battery status is
over-written with sane values when the battery is live.
But when the batter is dead, a bogus reference in the template
is used.  In this case, Linux returns a fault, when instead
it should simply return that it doesn't know the missing value.

http://bugzilla.kernel.org/show_bug.cgi?id=8573
http://bugzilla.kernel.org/show_bug.cgi?id=10202

Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Alexey Starikovskiy 2008-03-17 22:37:42 -04:00 committed by Len Brown
parent bde4f8fa8d
commit b8a1bdb149

View File

@ -293,13 +293,12 @@ static int extract_package(struct acpi_battery *battery,
strncpy(ptr, (u8 *)&element->integer.value, strncpy(ptr, (u8 *)&element->integer.value,
sizeof(acpi_integer)); sizeof(acpi_integer));
ptr[sizeof(acpi_integer)] = 0; ptr[sizeof(acpi_integer)] = 0;
} else return -EFAULT; } else
*ptr = 0; /* don't have value */
} else { } else {
if (element->type == ACPI_TYPE_INTEGER) { int *x = (int *)((u8 *)battery + offsets[i].offset);
int *x = (int *)((u8 *)battery + *x = (element->type == ACPI_TYPE_INTEGER) ?
offsets[i].offset); element->integer.value : -1;
*x = element->integer.value;
} else return -EFAULT;
} }
} }
return 0; return 0;