]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86: wmi: Use correct type when populating ACPI objects
authorArmin Wolf <W_Armin@gmx.de>
Tue, 11 Nov 2025 13:11:23 +0000 (14:11 +0100)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 18 Nov 2025 09:18:08 +0000 (11:18 +0200)
When evaluating a WMxx/WSxx ACPI control method, the data buffer
either needs to be passed as an ACPI buffer or as an ACPI string.
Use the correct type (buffer/string) when populating the associated
ACPI object.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Link: https://patch.msgid.link/20251111131125.3379-3-W_Armin@gmx.de
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/wmi.c

index 4e86a422f05f1f0d6d92b98dc8d40c58661d9348..6878c4fcb0b579e9d8d232972ace346e23f2a705 100644 (file)
@@ -142,14 +142,6 @@ static inline void get_acpi_method_name(const struct wmi_block *wblock,
        buffer[4] = '\0';
 }
 
-static inline acpi_object_type get_param_acpi_type(const struct wmi_block *wblock)
-{
-       if (wblock->gblock.flags & ACPI_WMI_STRING)
-               return ACPI_TYPE_STRING;
-       else
-               return ACPI_TYPE_BUFFER;
-}
-
 static int wmidev_match_guid(struct device *dev, const void *data)
 {
        struct wmi_block *wblock = dev_to_wblock(dev);
@@ -351,9 +343,16 @@ acpi_status wmidev_evaluate_method(struct wmi_device *wdev, u8 instance, u32 met
        params[0].integer.value = instance;
        params[1].type = ACPI_TYPE_INTEGER;
        params[1].integer.value = method_id;
-       params[2].type = get_param_acpi_type(wblock);
-       params[2].buffer.length = in->length;
-       params[2].buffer.pointer = in->pointer;
+
+       if (wblock->gblock.flags & ACPI_WMI_STRING) {
+               params[2].type = ACPI_TYPE_STRING;
+               params[2].string.length = in->length;
+               params[2].string.pointer = in->pointer;
+       } else {
+               params[2].type = ACPI_TYPE_BUFFER;
+               params[2].buffer.length = in->length;
+               params[2].buffer.pointer = in->pointer;
+       }
 
        get_acpi_method_name(wblock, 'M', method);
 
@@ -519,9 +518,16 @@ acpi_status wmidev_block_set(struct wmi_device *wdev, u8 instance, const struct
        input.pointer = params;
        params[0].type = ACPI_TYPE_INTEGER;
        params[0].integer.value = instance;
-       params[1].type = get_param_acpi_type(wblock);
-       params[1].buffer.length = in->length;
-       params[1].buffer.pointer = in->pointer;
+
+       if (wblock->gblock.flags & ACPI_WMI_STRING) {
+               params[1].type = ACPI_TYPE_STRING;
+               params[1].string.length = in->length;
+               params[1].string.pointer = in->pointer;
+       } else {
+               params[1].type = ACPI_TYPE_BUFFER;
+               params[1].buffer.length = in->length;
+               params[1].buffer.pointer = in->pointer;
+       }
 
        get_acpi_method_name(wblock, 'S', method);