platform/x86: system76_acpi: Add attribute group for kb_led_color
authorTim Crawford <tcrawford@system76.com>
Wed, 6 Oct 2021 20:22:02 +0000 (14:22 -0600)
committerHans de Goede <hdegoede@redhat.com>
Tue, 19 Oct 2021 14:31:17 +0000 (16:31 +0200)
Create the attribute groups for kb_led_color and set the `groups` field
in kb_led. While touching it, also change its show method to use
sysfs_emit() instead of sprintf().

Signed-off-by: Tim Crawford <tcrawford@system76.com>
Link: https://lore.kernel.org/r/20211006202202.7479-5-tcrawford@system76.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/system76_acpi.c

index 70d0490e23f5394f54dd9915b5dd4fd678ba173d..b3c8178420b1a756b3ee3866569340260e232751 100644 (file)
@@ -348,7 +348,7 @@ static ssize_t kb_led_color_show(
 
        led = (struct led_classdev *)dev->driver_data;
        data = container_of(led, struct system76_data, kb_led);
-       return sprintf(buf, "%06X\n", data->kb_color);
+       return sysfs_emit(buf, "%06X\n", data->kb_color);
 }
 
 // Set the keyboard LED color
@@ -376,7 +376,7 @@ static ssize_t kb_led_color_store(
        return size;
 }
 
-static const struct device_attribute kb_led_color_dev_attr = {
+static struct device_attribute dev_attr_kb_led_color = {
        .attr = {
                .name = "color",
                .mode = 0644,
@@ -385,6 +385,13 @@ static const struct device_attribute kb_led_color_dev_attr = {
        .store = kb_led_color_store,
 };
 
+static struct attribute *system76_kb_led_color_attrs[] = {
+       &dev_attr_kb_led_color.attr,
+       NULL,
+};
+
+ATTRIBUTE_GROUPS(system76_kb_led_color);
+
 // Notify that the keyboard LED was changed by hardware
 static void kb_led_notify(struct system76_data *data)
 {
@@ -685,6 +692,7 @@ static int system76_add(struct acpi_device *acpi_dev)
        data->kb_led.brightness_set_blocking = kb_led_set;
        if (acpi_has_method(acpi_device_handle(data->acpi_dev), "SKBC")) {
                data->kb_led.max_brightness = 255;
+               data->kb_led.groups = system76_kb_led_color_groups;
                data->kb_toggle_brightness = 72;
                data->kb_color = 0xffffff;
                system76_set(data, "SKBC", data->kb_color);
@@ -696,15 +704,6 @@ static int system76_add(struct acpi_device *acpi_dev)
        if (err)
                return err;
 
-       if (data->kb_color >= 0) {
-               err = device_create_file(
-                       data->kb_led.dev,
-                       &kb_led_color_dev_attr
-               );
-               if (err)
-                       return err;
-       }
-
        data->input = devm_input_allocate_device(&acpi_dev->dev);
        if (!data->input)
                return -ENOMEM;
@@ -753,9 +752,6 @@ static int system76_remove(struct acpi_device *acpi_dev)
 
        system76_battery_exit();
 
-       if (data->kb_color >= 0)
-               device_remove_file(data->kb_led.dev, &kb_led_color_dev_attr);
-
        devm_led_classdev_unregister(&acpi_dev->dev, &data->ap_led);
        devm_led_classdev_unregister(&acpi_dev->dev, &data->kb_led);