u8 length;
        u16 handle;
        u16 commun_func_bitmap;
+       u16 application_func_bitmap;
+       u16 media_func_bitmap;
+       u16 display_func_bitmap;
+       u16 others_func_bitmap;
+       u8 commun_fn_key_number;
 } __attribute__((packed));
 
 /*
 static bool ec_raw_mode;
 static bool has_type_aa;
 static u16 commun_func_bitmap;
+static u8 commun_fn_key_number;
 
 module_param(mailled, int, 0444);
 module_param(brightness, int, 0444);
        union acpi_object *obj;
        struct wmid3_gds_input_param params = {
                .function_num = 0x1,
-               .hotkey_number = 0x01,
+               .hotkey_number = commun_fn_key_number,
                .devices = device,
        };
        struct acpi_buffer input = {
        u16 devices;
        struct wmid3_gds_input_param params = {
                .function_num = 0x1,
-               .hotkey_number = 0x01,
+               .hotkey_number = commun_fn_key_number,
                .devices = commun_func_bitmap,
        };
        struct acpi_buffer input = {
 
        devices = return_value.devices;
        params.function_num = 0x2;
-       params.hotkey_number = 0x01;
+       params.hotkey_number = commun_fn_key_number;
        params.devices = (value) ? (devices | device) : (devices & ~device);
 
        status = wmi_evaluate_method(WMID_GUID3, 0, 0x1, &input, &output2);
                interface->capability |= ACER_CAP_THREEG;
        if (type_aa->commun_func_bitmap & ACER_WMID3_GDS_BLUETOOTH)
                interface->capability |= ACER_CAP_BLUETOOTH;
+
+       commun_fn_key_number = type_aa->commun_fn_key_number;
 }
 
 static acpi_status WMID_set_capabilities(void)