return ret;
write_lock(&trig_data->lock);
-
changed = (trig_data->port_mask != port_mask);
+ trig_data->port_mask = port_mask;
+ write_unlock(&trig_data->lock);
+
if (changed) {
- trig_data->port_mask = port_mask;
if (port_mask == 0)
swconfig_trig_set_brightness(trig_data, LED_OFF);
- }
- write_unlock(&trig_data->lock);
-
- if (changed)
swconfig_trig_update_port_mask(led_cdev->trigger);
+ }
return size;
}
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
struct swconfig_trig_data *trig_data = led_cdev->trigger_data;
+ u32 port_mask;
read_lock(&trig_data->lock);
- sprintf(buf, "%#x\n", trig_data->port_mask);
+ port_mask = trig_data->port_mask;
read_unlock(&trig_data->lock);
+ sprintf(buf, "%#x\n", port_mask);
+
return strlen(buf) + 1;
}
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
struct swconfig_trig_data *trig_data = led_cdev->trigger_data;
+ u8 speed_mask;
read_lock(&trig_data->lock);
- sprintf(buf, "%#x\n", trig_data->speed_mask);
+ speed_mask = trig_data->speed_mask;
read_unlock(&trig_data->lock);
+ sprintf(buf, "%#x\n", speed_mask);
+
return strlen(buf) + 1;
}
static DEVICE_ATTR(mode, 0644, swconfig_trig_mode_show,
swconfig_trig_mode_store);
-static void
+static int
swconfig_trig_activate(struct led_classdev *led_cdev)
{
struct switch_led_trigger *sw_trig;
struct swconfig_trig_data *trig_data;
int err;
- if (led_cdev->trigger->activate != swconfig_trig_activate)
- return;
-
trig_data = kzalloc(sizeof(struct swconfig_trig_data), GFP_KERNEL);
if (!trig_data)
- return;
+ return -ENOMEM;
sw_trig = (void *) led_cdev->trigger;
if (err)
goto err_mode_free;
- return;
+ return 0;
err_mode_free:
device_remove_file(led_cdev->dev, &dev_attr_speed_mask);
err_free:
led_cdev->trigger_data = NULL;
kfree(trig_data);
+
+ return err;
+}
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0)
+static void
+swconfig_trig_activate_void(struct led_classdev *led_cdev)
+{
+ swconfig_trig_activate(led_cdev);
}
+#endif
static void
swconfig_trig_deactivate(struct led_classdev *led_cdev)
sw_trig->swdev = swdev;
sw_trig->trig.name = swdev->devname;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0)
+ sw_trig->trig.activate = swconfig_trig_activate_void;
+#else
sw_trig->trig.activate = swconfig_trig_activate;
+#endif
sw_trig->trig.deactivate = swconfig_trig_deactivate;
INIT_DELAYED_WORK(&sw_trig->sw_led_work, swconfig_led_work_func);