提交 0db98202 编写于 作者: J Jiang Liu 提交者: Rafael J. Wysocki

ACPI: introduce helper function acpi_execute_simple_method()

Introduce helper function acpi_execute_simple_method() and use it in
a number of places to simplify code.

[rjw: Changelog]
Signed-off-by: NJiang Liu <jiang.liu@huawei.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 952c63e9
...@@ -525,18 +525,14 @@ static int acpi_battery_get_state(struct acpi_battery *battery) ...@@ -525,18 +525,14 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
static int acpi_battery_set_alarm(struct acpi_battery *battery) static int acpi_battery_set_alarm(struct acpi_battery *battery)
{ {
acpi_status status = 0; acpi_status status = 0;
union acpi_object arg0 = { .type = ACPI_TYPE_INTEGER };
struct acpi_object_list arg_list = { 1, &arg0 };
if (!acpi_battery_present(battery) || if (!acpi_battery_present(battery) ||
!test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags)) !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags))
return -ENODEV; return -ENODEV;
arg0.integer.value = battery->alarm;
mutex_lock(&battery->lock); mutex_lock(&battery->lock);
status = acpi_evaluate_object(battery->device->handle, "_BTP", status = acpi_execute_simple_method(battery->device->handle, "_BTP",
&arg_list, NULL); battery->alarm);
mutex_unlock(&battery->lock); mutex_unlock(&battery->lock);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
......
...@@ -593,8 +593,6 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data) ...@@ -593,8 +593,6 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
static int __init acpi_bus_init_irq(void) static int __init acpi_bus_init_irq(void)
{ {
acpi_status status; acpi_status status;
union acpi_object arg = { ACPI_TYPE_INTEGER };
struct acpi_object_list arg_list = { 1, &arg };
char *message = NULL; char *message = NULL;
...@@ -623,9 +621,7 @@ static int __init acpi_bus_init_irq(void) ...@@ -623,9 +621,7 @@ static int __init acpi_bus_init_irq(void)
printk(KERN_INFO PREFIX "Using %s for interrupt routing\n", message); printk(KERN_INFO PREFIX "Using %s for interrupt routing\n", message);
arg.integer.value = acpi_irq_model; status = acpi_execute_simple_method(NULL, "\\_PIC", acpi_irq_model);
status = acpi_evaluate_object(NULL, "\\_PIC", &arg_list, NULL);
if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) { if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PIC")); ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PIC"));
return -ENODEV; return -ENODEV;
......
...@@ -637,9 +637,7 @@ int acpi_device_sleep_wake(struct acpi_device *dev, ...@@ -637,9 +637,7 @@ int acpi_device_sleep_wake(struct acpi_device *dev,
} }
/* Execute _PSW */ /* Execute _PSW */
arg_list.count = 1; status = acpi_execute_simple_method(dev->handle, "_PSW", enable);
in_arg[0].integer.value = enable;
status = acpi_evaluate_object(dev->handle, "_PSW", &arg_list, NULL);
if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) { if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
printk(KERN_ERR PREFIX "_PSW execution failed\n"); printk(KERN_ERR PREFIX "_PSW execution failed\n");
dev->wakeup.flags.valid = 0; dev->wakeup.flags.valid = 0;
......
...@@ -31,12 +31,9 @@ static u8 sleep_states[ACPI_S_STATE_COUNT]; ...@@ -31,12 +31,9 @@ static u8 sleep_states[ACPI_S_STATE_COUNT];
static void acpi_sleep_tts_switch(u32 acpi_state) static void acpi_sleep_tts_switch(u32 acpi_state)
{ {
union acpi_object in_arg = { ACPI_TYPE_INTEGER }; acpi_status status;
struct acpi_object_list arg_list = { 1, &in_arg };
acpi_status status = AE_OK;
in_arg.integer.value = acpi_state; status = acpi_execute_simple_method(NULL, "\\_TTS", acpi_state);
status = acpi_evaluate_object(NULL, "\\_TTS", &arg_list, NULL);
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
/* /*
* OS can't evaluate the _TTS object correctly. Some warning * OS can't evaluate the _TTS object correctly. Some warning
......
...@@ -239,26 +239,16 @@ static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz) ...@@ -239,26 +239,16 @@ static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)
static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode) static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
{ {
acpi_status status = AE_OK;
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list arg_list = { 1, &arg0 };
acpi_handle handle = NULL;
if (!tz) if (!tz)
return -EINVAL; return -EINVAL;
status = acpi_get_handle(tz->device->handle, "_SCP", &handle); if (!acpi_has_method(tz->device->handle, "_SCP")) {
if (ACPI_FAILURE(status)) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "_SCP not present\n")); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "_SCP not present\n"));
return -ENODEV; return -ENODEV;
} } else if (ACPI_FAILURE(acpi_execute_simple_method(tz->device->handle,
"_SCP", mode))) {
arg0.integer.value = mode;
status = acpi_evaluate_object(handle, NULL, &arg_list, NULL);
if (ACPI_FAILURE(status))
return -ENODEV; return -ENODEV;
}
return 0; return 0;
} }
......
...@@ -510,3 +510,15 @@ bool acpi_has_method(acpi_handle handle, char *name) ...@@ -510,3 +510,15 @@ bool acpi_has_method(acpi_handle handle, char *name)
return ACPI_SUCCESS(acpi_get_handle(handle, name, &tmp)); return ACPI_SUCCESS(acpi_get_handle(handle, name, &tmp));
} }
EXPORT_SYMBOL(acpi_has_method); EXPORT_SYMBOL(acpi_has_method);
acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
u64 arg)
{
union acpi_object obj = { .type = ACPI_TYPE_INTEGER };
struct acpi_object_list arg_list = { .count = 1, .pointer = &obj, };
obj.integer.value = arg;
return acpi_evaluate_object(handle, method, &arg_list, NULL);
}
EXPORT_SYMBOL(acpi_execute_simple_method);
...@@ -353,14 +353,10 @@ static int ...@@ -353,14 +353,10 @@ static int
acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
{ {
int status; int status;
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list args = { 1, &arg0 };
int state; int state;
arg0.integer.value = level; status = acpi_execute_simple_method(device->dev->handle,
"_BCM", level);
status = acpi_evaluate_object(device->dev->handle, "_BCM",
&args, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_ERROR((AE_INFO, "Evaluating _BCM failed")); ACPI_ERROR((AE_INFO, "Evaluating _BCM failed"));
return -EIO; return -EIO;
...@@ -628,18 +624,15 @@ static int ...@@ -628,18 +624,15 @@ static int
acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag) acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
{ {
acpi_status status; acpi_status status;
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list args = { 1, &arg0 };
if (!video->cap._DOS) if (!video->cap._DOS)
return 0; return 0;
if (bios_flag < 0 || bios_flag > 3 || lcd_flag < 0 || lcd_flag > 1) if (bios_flag < 0 || bios_flag > 3 || lcd_flag < 0 || lcd_flag > 1)
return -EINVAL; return -EINVAL;
arg0.integer.value = (lcd_flag << 2) | bios_flag; video->dos_setting = (lcd_flag << 2) | bios_flag;
video->dos_setting = arg0.integer.value; status = acpi_execute_simple_method(video->device->handle, "_DOS",
status = acpi_evaluate_object(video->device->handle, "_DOS", (lcd_flag << 2) | bios_flag);
&args, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -EIO; return -EIO;
......
...@@ -58,6 +58,8 @@ acpi_status ...@@ -58,6 +58,8 @@ acpi_status
acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld);
bool acpi_has_method(acpi_handle handle, char *name); bool acpi_has_method(acpi_handle handle, char *name);
acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
u64 arg);
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册