diff options
author | Michał Kępień <kernel@kempniu.pl> | 2016-01-22 15:27:28 +0100 |
---|---|---|
committer | Darren Hart <dvhart@linux.intel.com> | 2016-03-23 10:05:44 -0700 |
commit | 0c41a08e131d753af48ae6f052aed8d530b9c976 (patch) | |
tree | 0fbe12819d41977c61e082711321e725694d9c20 | |
parent | cf0d7ea335966744f2a4fc6f882165b7dba54c15 (diff) | |
download | linux-0c41a08e131d753af48ae6f052aed8d530b9c976.tar.bz2 |
dell-led: use dell_smbios_send_request() for performing SMBIOS calls
Instead of using the WMI wrapper, dell-led can take advantage of
dell_smbios_send_request() for performing the SMBIOS calls required to
change the state of the microphone LED.
Signed-off-by: Michał Kępień <kernel@kempniu.pl>
Reviewed-by: Pali Rohár <pali.rohar@gmail.com>
Acked-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
-rw-r--r-- | drivers/leds/dell-led.c | 65 |
1 files changed, 6 insertions, 59 deletions
diff --git a/drivers/leds/dell-led.c b/drivers/leds/dell-led.c index bfa7511374bd..b3d6e9c15cf9 100644 --- a/drivers/leds/dell-led.c +++ b/drivers/leds/dell-led.c @@ -43,64 +43,13 @@ MODULE_ALIAS("wmi:" DELL_LED_BIOS_GUID); #define CMD_LED_OFF 17 #define CMD_LED_BLINK 18 -struct app_wmi_args { - u16 class; - u16 selector; - u32 arg1; - u32 arg2; - u32 arg3; - u32 arg4; - u32 res1; - u32 res2; - u32 res3; - u32 res4; - char dummy[92]; -}; - #define GLOBAL_MIC_MUTE_ENABLE 0x364 #define GLOBAL_MIC_MUTE_DISABLE 0x365 -static int dell_wmi_perform_query(struct app_wmi_args *args) -{ - struct app_wmi_args *bios_return; - union acpi_object *obj; - struct acpi_buffer input; - struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; - acpi_status status; - u32 rc = -EINVAL; - - input.length = 128; - input.pointer = args; - - status = wmi_evaluate_method(DELL_APP_GUID, 0, 1, &input, &output); - if (!ACPI_SUCCESS(status)) - goto err_out0; - - obj = output.pointer; - if (!obj) - goto err_out0; - - if (obj->type != ACPI_TYPE_BUFFER) - goto err_out1; - - bios_return = (struct app_wmi_args *)obj->buffer.pointer; - rc = bios_return->res1; - if (rc) - goto err_out1; - - memcpy(args, bios_return, sizeof(struct app_wmi_args)); - rc = 0; - - err_out1: - kfree(obj); - err_out0: - return rc; -} - static int dell_micmute_led_set(int state) { + struct calling_interface_buffer *buffer; struct calling_interface_token *token; - struct app_wmi_args args; if (!wmi_has_guid(DELL_APP_GUID)) return -ENODEV; @@ -115,13 +64,11 @@ static int dell_micmute_led_set(int state) if (!token) return -ENODEV; - memset(&args, 0, sizeof(struct app_wmi_args)); - - args.class = 1; - args.arg1 = token->location; - args.arg2 = token->value; - - dell_wmi_perform_query(&args); + buffer = dell_smbios_get_buffer(); + buffer->input[0] = token->location; + buffer->input[1] = token->value; + dell_smbios_send_request(1, 0); + dell_smbios_release_buffer(); return state; } |