Address feedback from upstream

Changes from v1:

- Set kbled_type for old ACPI logic
- Use kbled_type instead of kb_color for conditional logic
- Set common kb_led values before conditional logic
- Do not set color for white backlit keyboards
- Do not register kb_led device if keyboard has no backlight

Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
Tim Crawford 2023-07-17 14:52:23 -06:00 committed by Tim Crawford
parent aaf10e3dac
commit 03a5804847
1 changed files with 14 additions and 20 deletions

View File

@ -492,8 +492,9 @@ static void kb_led_hotkey_color(struct system76_data *data)
{ {
int i; int i;
if (data->kb_color < 0) if (data->kbled_type != KBLED_RGB)
return; return;
if (data->kb_brightness > 0) { if (data->kb_brightness > 0) {
for (i = 0; i < ARRAY_SIZE(kb_colors); i++) { for (i = 0; i < ARRAY_SIZE(kb_colors); i++) {
if (kb_colors[i] == data->kb_color) if (kb_colors[i] == data->kb_color)
@ -716,29 +717,23 @@ static int system76_add(struct acpi_device *acpi_dev)
if (err) if (err)
return err; return err;
data->kb_led.name = "system76_acpi::kbd_backlight";
data->kb_led.flags = LED_BRIGHT_HW_CHANGED | LED_CORE_SUSPENDRESUME;
data->kb_led.brightness_get = kb_led_get;
data->kb_led.brightness_set_blocking = kb_led_set;
if (acpi_has_method(acpi_device_handle(data->acpi_dev), "GKBK")) { if (acpi_has_method(acpi_device_handle(data->acpi_dev), "GKBK")) {
// Use the new ACPI methods // Use the new ACPI methods
data->kbled_type = system76_get(data, "GKBK"); data->kbled_type = system76_get(data, "GKBK");
switch (data->kbled_type) { switch (data->kbled_type) {
case KBLED_NONE: case KBLED_NONE:
data->kb_led.max_brightness = 0; // Nothing to do: Device will not be registered.
data->kb_color = -1;
break; break;
case KBLED_WHITE: case KBLED_WHITE:
data->kb_led.name = "system76_acpi::kbd_backlight";
data->kb_led.flags = LED_BRIGHT_HW_CHANGED | LED_CORE_SUSPENDRESUME;
data->kb_led.brightness_get = kb_led_get;
data->kb_led.brightness_set_blocking = kb_led_set;
data->kb_led.max_brightness = 255; data->kb_led.max_brightness = 255;
data->kb_toggle_brightness = 72; data->kb_toggle_brightness = 72;
data->kb_color = 0xffffff;
break; break;
case KBLED_RGB: case KBLED_RGB:
data->kb_led.name = "system76_acpi::kbd_backlight";
data->kb_led.flags = LED_BRIGHT_HW_CHANGED | LED_CORE_SUSPENDRESUME;
data->kb_led.brightness_get = kb_led_get;
data->kb_led.brightness_set_blocking = kb_led_set;
data->kb_led.max_brightness = 255; data->kb_led.max_brightness = 255;
data->kb_led.groups = system76_kb_led_color_groups; data->kb_led.groups = system76_kb_led_color_groups;
data->kb_toggle_brightness = 72; data->kb_toggle_brightness = 72;
@ -748,25 +743,24 @@ static int system76_add(struct acpi_device *acpi_dev)
} }
} else { } else {
// Use the old ACPI methods // Use the old ACPI methods
data->kb_led.name = "system76_acpi::kbd_backlight";
data->kb_led.flags = LED_BRIGHT_HW_CHANGED | LED_CORE_SUSPENDRESUME;
data->kb_led.brightness_get = kb_led_get;
data->kb_led.brightness_set_blocking = kb_led_set;
if (acpi_has_method(acpi_device_handle(data->acpi_dev), "SKBC")) { if (acpi_has_method(acpi_device_handle(data->acpi_dev), "SKBC")) {
data->kbled_type = KBLED_RGB;
data->kb_led.max_brightness = 255; data->kb_led.max_brightness = 255;
data->kb_led.groups = system76_kb_led_color_groups; data->kb_led.groups = system76_kb_led_color_groups;
data->kb_toggle_brightness = 72; data->kb_toggle_brightness = 72;
data->kb_color = 0xffffff; data->kb_color = 0xffffff;
system76_set(data, "SKBC", data->kb_color); system76_set(data, "SKBC", data->kb_color);
} else { } else {
data->kbled_type = KBLED_WHITE;
data->kb_led.max_brightness = 5; data->kb_led.max_brightness = 5;
data->kb_color = -1;
} }
} }
if (data->kbled_type != KBLED_NONE) {
err = devm_led_classdev_register(&acpi_dev->dev, &data->kb_led); err = devm_led_classdev_register(&acpi_dev->dev, &data->kb_led);
if (err) if (err)
return err; return err;
}
data->input = devm_input_allocate_device(&acpi_dev->dev); data->input = devm_input_allocate_device(&acpi_dev->dev);
if (!data->input) if (!data->input)