Merge branch 'generalize_keyboard_backlight_brightness_clevo_working' into generalize_keyboard_backlight_brightness

This commit is contained in:
Werner Sembach 2022-10-24 16:37:07 +02:00
commit b05e55e40f
2 changed files with 34 additions and 15 deletions

View file

@ -41,9 +41,12 @@
#define CLEVO_CMD_GET_EVENT 0x01 #define CLEVO_CMD_GET_EVENT 0x01
#define CLEVO_CMD_GET_SPECS 0x0D // Returns buffer -> only works with clevo_evaluate_method2 #define CLEVO_CMD_GET_SPECS 0x0D // Returns buffer -> only works with clevo_evaluate_method2
#define CLEVO_CMD_GET_BIOS_FEATURES 0x52 #define CLEVO_CMD_GET_BIOS_FEATURES_1 0x52
#define CLEVO_CMD_GET_BIOS_FEATURES_SUB_WHITE_ONLY_KB 0x40000000 #define CLEVO_CMD_GET_BIOS_FEATURES_1_SUB_WHITE_ONLY_KB 0x40000000
#define CLEVO_CMD_GET_BIOS_FEATURES_SUB_3_ZONE_RGB_KB 0x00400000 #define CLEVO_CMD_GET_BIOS_FEATURES_1_SUB_3_ZONE_RGB_KB 0x00400000
#define CLEVO_CMD_GET_BIOS_FEATURES_2 0x7A
#define CLEVO_CMD_GET_BIOS_FEATURES_2_SUB_WHITE_ONLY_KB_MAX_5 0x4000
// The clevo set commands expect a parameter // The clevo set commands expect a parameter
#define CLEVO_CMD_SET_FANSPEED_VALUE 0x68 #define CLEVO_CMD_SET_FANSPEED_VALUE 0x68

View file

@ -52,8 +52,9 @@ void clevo_leds_set_color_extern(u32 color);
#define CLEVO_KBD_BRIGHTNESS_WHITE_MIN 0x00 #define CLEVO_KBD_BRIGHTNESS_WHITE_MIN 0x00
#define CLEVO_KBD_BRIGHTNESS_WHITE_MAX 0x02 // White only keyboards can only be off, half, or full brightness #define CLEVO_KBD_BRIGHTNESS_WHITE_MAX 0x02 // White only keyboards can only be off, half, or full brightness
#define CLEVO_KBD_BRIGHTNESS_WHITE_MAX_OLD_DEVS 0x05 // Devices <= Intel 7th gen had a different white control with 5 brightness values + off
#define CLEVO_KBD_BRIGHTNESS_WHITE_DEFAULT (CLEVO_KBD_BRIGHTNESS_WHITE_MAX * 0.5) #define CLEVO_KBD_BRIGHTNESS_WHITE_DEFAULT (CLEVO_KBD_BRIGHTNESS_WHITE_MAX * 0.5)
#define CLEVO_KBD_BRIGHTNESS_WHITE_MAX_5 0x05 // Devices <= Intel 7th gen had a different white control with 5 brightness values + off
#define CLEVO_KBD_BRIGHTNESS_WHITE_MAX_5_DEFAULT (CLEVO_KBD_BRIGHTNESS_WHITE_MAX * 0.5)
#define CLEVO_KB_COLOR_DEFAULT_RED 0xff #define CLEVO_KB_COLOR_DEFAULT_RED 0xff
#define CLEVO_KB_COLOR_DEFAULT_GREEN 0xff #define CLEVO_KB_COLOR_DEFAULT_GREEN 0xff
@ -259,6 +260,7 @@ int clevo_leds_init(struct platform_device *dev)
u32 status; u32 status;
union acpi_object *result; union acpi_object *result;
u32 result_fallback; u32 result_fallback;
u8 default_brightness = CLEVO_KBD_BRIGHTNESS_DEFAULT;
status = clevo_evaluate_method2(CLEVO_CMD_GET_SPECS, 0, &result); status = clevo_evaluate_method2(CLEVO_CMD_GET_SPECS, 0, &result);
if (!status) { if (!status) {
@ -273,28 +275,42 @@ int clevo_leds_init(struct platform_device *dev)
ACPI_FREE(result); ACPI_FREE(result);
} }
else { else {
pr_notice("CLEVO_CMD_GET_SPECS does not exist on this device or failed, trying CLEVO_CMD_GET_BIOS_FEATURES\n"); pr_notice("CLEVO_CMD_GET_SPECS does not exist on this device or failed, trying CLEVO_CMD_GET_BIOS_FEATURES_1\n");
} }
if (status) { if (status) {
// check for devices <= Intel 7th gen (only white only, 3 zone RGB, or no backlight on these devices) // check for devices <= Intel 7th gen (only white only, 3 zone RGB, or no backlight on these devices)
status = clevo_evaluate_method(CLEVO_CMD_GET_BIOS_FEATURES, 0, &result_fallback); status = clevo_evaluate_method(CLEVO_CMD_GET_BIOS_FEATURES_1, 0, &result_fallback);
if (!status) { if (!status) {
pr_debug("CLEVO_CMD_GET_BIOS_FEATURES result_fallback: 0x%08x\n", result_fallback); pr_debug("CLEVO_CMD_GET_BIOS_FEATURES_1 result_fallback: 0x%08x\n", result_fallback);
if (result_fallback & CLEVO_CMD_GET_BIOS_FEATURES_SUB_3_ZONE_RGB_KB) { if (result_fallback & CLEVO_CMD_GET_BIOS_FEATURES_1_SUB_3_ZONE_RGB_KB) {
clevo_kb_backlight_type = CLEVO_KB_BACKLIGHT_TYPE_3_ZONE_RGB; clevo_kb_backlight_type = CLEVO_KB_BACKLIGHT_TYPE_3_ZONE_RGB;
} }
else if (result_fallback & CLEVO_CMD_GET_BIOS_FEATURES_SUB_WHITE_ONLY_KB) { else if (result_fallback & CLEVO_CMD_GET_BIOS_FEATURES_1_SUB_WHITE_ONLY_KB) {
clevo_kb_backlight_type = CLEVO_KB_BACKLIGHT_TYPE_FIXED_COLOR; clevo_kb_backlight_type = CLEVO_KB_BACKLIGHT_TYPE_FIXED_COLOR;
clevo_led_cdev.max_brightness = CLEVO_KBD_BRIGHTNESS_WHITE_MAX_OLD_DEVS;
status = clevo_evaluate_method(CLEVO_CMD_GET_BIOS_FEATURES_2, 0, &result_fallback);
if (!status) {
pr_debug("CLEVO_CMD_GET_BIOS_FEATURES_2 result_fallback: 0x%08x\n", result_fallback);
if (result_fallback & CLEVO_CMD_GET_BIOS_FEATURES_2_SUB_WHITE_ONLY_KB_MAX_5) {
clevo_led_cdev.max_brightness = CLEVO_KBD_BRIGHTNESS_WHITE_MAX_5;
} }
} }
else { else {
pr_notice("CLEVO_CMD_GET_BIOS_FEATURES does not exist on this device or failed\n"); pr_notice("CLEVO_CMD_GET_BIOS_FEATURES_2 does not exist on this device or failed\n");
}
}
}
else {
pr_notice("CLEVO_CMD_GET_BIOS_FEATURES_1 does not exist on this device or failed\n");
} }
} }
pr_debug("Keyboard backlight type: 0x%02x\n", clevo_kb_backlight_type); pr_debug("Keyboard backlight type: 0x%02x\n", clevo_kb_backlight_type);
clevo_leds_set_brightness_extern(CLEVO_KBD_BRIGHTNESS_DEFAULT); if (clevo_kb_backlight_type == CLEVO_KB_BACKLIGHT_TYPE_FIXED_COLOR) {
default_brightness = clevo_led_cdev.max_brightness / 2;
}
clevo_leds_set_brightness_extern(default_brightness);
clevo_leds_set_color_extern(CLEVO_KB_COLOR_DEFAULT); clevo_leds_set_color_extern(CLEVO_KB_COLOR_DEFAULT);
if (clevo_kb_backlight_type == CLEVO_KB_BACKLIGHT_TYPE_FIXED_COLOR) { if (clevo_kb_backlight_type == CLEVO_KB_BACKLIGHT_TYPE_FIXED_COLOR) {