u16 reserved;
 } __attribute__((packed));
 
-struct wmid3_gds_input_param { /* Get Device Status input parameter */
+struct wmid3_gds_set_input_param {     /* Set Device Status input parameter */
+       u8 function_num;        /* Function Number */
+       u8 hotkey_number;       /* Hotkey Number */
+       u16 devices;            /* Set Device */
+       u8 volume_value;        /* Volume Value */
+} __attribute__((packed));
+
+struct wmid3_gds_get_input_param {     /* Get Device Status input parameter */
        u8 function_num;        /* Function Number */
        u8 hotkey_number;       /* Hotkey Number */
        u16 devices;            /* Get Device */
        struct wmid3_gds_return_value return_value;
        acpi_status status;
        union acpi_object *obj;
-       struct wmid3_gds_input_param params = {
+       struct wmid3_gds_get_input_param params = {
                .function_num = 0x1,
                .hotkey_number = commun_fn_key_number,
                .devices = device,
        };
        struct acpi_buffer input = {
-               sizeof(struct wmid3_gds_input_param),
+               sizeof(struct wmid3_gds_get_input_param),
                ¶ms
        };
        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
        acpi_status status;
        union acpi_object *obj;
        u16 devices;
-       struct wmid3_gds_input_param params = {
+       struct wmid3_gds_get_input_param get_params = {
                .function_num = 0x1,
                .hotkey_number = commun_fn_key_number,
                .devices = commun_func_bitmap,
        };
-       struct acpi_buffer input = {
-               sizeof(struct wmid3_gds_input_param),
-               ¶ms
+       struct acpi_buffer get_input = {
+               sizeof(struct wmid3_gds_get_input_param),
+               &get_params
+       };
+       struct wmid3_gds_set_input_param set_params = {
+               .function_num = 0x2,
+               .hotkey_number = commun_fn_key_number,
+               .devices = commun_func_bitmap,
+       };
+       struct acpi_buffer set_input = {
+               sizeof(struct wmid3_gds_set_input_param),
+               &set_params
        };
        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
        struct acpi_buffer output2 = { ACPI_ALLOCATE_BUFFER, NULL };
 
-       status = wmi_evaluate_method(WMID_GUID3, 0, 0x2, &input, &output);
+       status = wmi_evaluate_method(WMID_GUID3, 0, 0x2, &get_input, &output);
        if (ACPI_FAILURE(status))
                return status;
 
        }
 
        devices = return_value.devices;
-       params.function_num = 0x2;
-       params.hotkey_number = commun_fn_key_number;
-       params.devices = (value) ? (devices | device) : (devices & ~device);
+       set_params.devices = (value) ? (devices | device) : (devices & ~device);
 
-       status = wmi_evaluate_method(WMID_GUID3, 0, 0x1, &input, &output2);
+       status = wmi_evaluate_method(WMID_GUID3, 0, 0x1, &set_input, &output2);
        if (ACPI_FAILURE(status))
                return status;