|
@@ -245,32 +245,19 @@ static int write_acpi_int(acpi_handle handle, const char *method, int val,
|
|
|
return (status == AE_OK);
|
|
|
}
|
|
|
|
|
|
-static int read_acpi_int(acpi_handle handle, const char *method, int *val,
|
|
|
- struct acpi_object_list *params)
|
|
|
-{
|
|
|
- struct acpi_buffer output;
|
|
|
- union acpi_object out_obj;
|
|
|
- acpi_status status;
|
|
|
-
|
|
|
- output.length = sizeof(out_obj);
|
|
|
- output.pointer = &out_obj;
|
|
|
-
|
|
|
- status = acpi_evaluate_object(handle, (char *)method, params, &output);
|
|
|
- *val = out_obj.integer.value;
|
|
|
- return (status == AE_OK) && (out_obj.type == ACPI_TYPE_INTEGER);
|
|
|
-}
|
|
|
-
|
|
|
static int read_wireless_status(int mask)
|
|
|
{
|
|
|
- int status;
|
|
|
+ ulong status;
|
|
|
+ acpi_status rv = AE_OK;
|
|
|
|
|
|
if (!wireless_status_handle)
|
|
|
return (hotk->status & mask) ? 1 : 0;
|
|
|
|
|
|
- if (read_acpi_int(wireless_status_handle, NULL, &status, NULL)) {
|
|
|
- return (status & mask) ? 1 : 0;
|
|
|
- } else
|
|
|
+ rv = acpi_evaluate_integer(wireless_status_handle, NULL, NULL, &status);
|
|
|
+ if (ACPI_FAILURE(rv))
|
|
|
printk(ASUS_WARNING "Error reading Wireless status\n");
|
|
|
+ else
|
|
|
+ return (status & mask) ? 1 : 0;
|
|
|
|
|
|
return (hotk->status & mask) ? 1 : 0;
|
|
|
}
|
|
@@ -354,9 +341,11 @@ static void lcd_blank(int blank)
|
|
|
|
|
|
static int read_brightness(struct backlight_device *bd)
|
|
|
{
|
|
|
- int value;
|
|
|
+ ulong value;
|
|
|
+ acpi_status rv = AE_OK;
|
|
|
|
|
|
- if (!read_acpi_int(brightness_get_handle, NULL, &value, NULL))
|
|
|
+ rv = acpi_evaluate_integer(brightness_get_handle, NULL, NULL, &value);
|
|
|
+ if (ACPI_FAILURE(rv))
|
|
|
printk(ASUS_WARNING "Error reading brightness\n");
|
|
|
|
|
|
return value;
|
|
@@ -403,8 +392,10 @@ static ssize_t show_infos(struct device *dev,
|
|
|
struct device_attribute *attr, char *page)
|
|
|
{
|
|
|
int len = 0;
|
|
|
- int temp;
|
|
|
+ ulong temp;
|
|
|
char buf[16]; //enough for all info
|
|
|
+ acpi_status rv = AE_OK;
|
|
|
+
|
|
|
/*
|
|
|
* We use the easy way, we don't care of off and count, so we don't set eof
|
|
|
* to 1
|
|
@@ -418,9 +409,10 @@ static ssize_t show_infos(struct device *dev,
|
|
|
* bit signifies that the laptop is equipped with a Wi-Fi MiniPCI card.
|
|
|
* The significance of others is yet to be found.
|
|
|
*/
|
|
|
- if (read_acpi_int(hotk->handle, "SFUN", &temp, NULL))
|
|
|
- len +=
|
|
|
- sprintf(page + len, "SFUN value : 0x%04x\n", temp);
|
|
|
+ rv = acpi_evaluate_integer(hotk->handle, "SFUN", NULL, &temp);
|
|
|
+ if (!ACPI_FAILURE(rv))
|
|
|
+ len += sprintf(page + len, "SFUN value : 0x%04x\n",
|
|
|
+ (uint) temp);
|
|
|
/*
|
|
|
* Another value for userspace: the ASYM method returns 0x02 for
|
|
|
* battery low and 0x04 for battery critical, its readings tend to be
|
|
@@ -428,9 +420,10 @@ static ssize_t show_infos(struct device *dev,
|
|
|
* Note: since not all the laptops provide this method, errors are
|
|
|
* silently ignored.
|
|
|
*/
|
|
|
- if (read_acpi_int(hotk->handle, "ASYM", &temp, NULL))
|
|
|
- len +=
|
|
|
- sprintf(page + len, "ASYM value : 0x%04x\n", temp);
|
|
|
+ rv = acpi_evaluate_integer(hotk->handle, "ASYM", NULL, &temp);
|
|
|
+ if (!ACPI_FAILURE(rv))
|
|
|
+ len += sprintf(page + len, "ASYM value : 0x%04x\n",
|
|
|
+ (uint) temp);
|
|
|
if (asus_info) {
|
|
|
snprintf(buf, 16, "%d", asus_info->length);
|
|
|
len += sprintf(page + len, "DSDT length : %s\n", buf);
|
|
@@ -547,12 +540,15 @@ static void set_display(int value)
|
|
|
|
|
|
static int read_display(void)
|
|
|
{
|
|
|
- int value = 0;
|
|
|
+ ulong value = 0;
|
|
|
+ acpi_status rv = AE_OK;
|
|
|
|
|
|
/* In most of the case, we know how to set the display, but sometime
|
|
|
we can't read it */
|
|
|
if (display_get_handle) {
|
|
|
- if (!read_acpi_int(display_get_handle, NULL, &value, NULL))
|
|
|
+ rv = acpi_evaluate_integer(display_get_handle, NULL,
|
|
|
+ NULL, &value);
|
|
|
+ if (ACPI_FAILURE(rv))
|
|
|
printk(ASUS_WARNING "Error reading display status\n");
|
|
|
}
|
|
|
|
|
@@ -771,7 +767,7 @@ static int asus_hotk_get_info(void)
|
|
|
{
|
|
|
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
|
|
union acpi_object *model = NULL;
|
|
|
- int bsts_result, hwrs_result;
|
|
|
+ ulong bsts_result, hwrs_result;
|
|
|
char *string = NULL;
|
|
|
acpi_status status;
|
|
|
|
|
@@ -794,11 +790,13 @@ static int asus_hotk_get_info(void)
|
|
|
}
|
|
|
|
|
|
/* This needs to be called for some laptops to init properly */
|
|
|
- if (!read_acpi_int(hotk->handle, "BSTS", &bsts_result, NULL))
|
|
|
+ status =
|
|
|
+ acpi_evaluate_integer(hotk->handle, "BSTS", NULL, &bsts_result);
|
|
|
+ if (ACPI_FAILURE(status))
|
|
|
printk(ASUS_WARNING "Error calling BSTS\n");
|
|
|
else if (bsts_result)
|
|
|
printk(ASUS_NOTICE "BSTS called, 0x%02x returned\n",
|
|
|
- bsts_result);
|
|
|
+ (uint) bsts_result);
|
|
|
|
|
|
/*
|
|
|
* Try to match the object returned by INIT to the specific model.
|
|
@@ -840,7 +838,9 @@ static int asus_hotk_get_info(void)
|
|
|
* The significance of others is yet to be found.
|
|
|
* If we don't find the method, we assume the device are present.
|
|
|
*/
|
|
|
- if (!read_acpi_int(hotk->handle, "HRWS", &hwrs_result, NULL))
|
|
|
+ status =
|
|
|
+ acpi_evaluate_integer(hotk->handle, "HRWS", NULL, &hwrs_result);
|
|
|
+ if (ACPI_FAILURE(status))
|
|
|
hwrs_result = WL_HWRS | BT_HWRS;
|
|
|
|
|
|
if (hwrs_result & WL_HWRS)
|