#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/spinlock.h>
#include <uapi/linux/uleds.h>
static struct class *leds_class;
static ssize_t brightness_show(struct device *dev,
struct device_attribute *attr, char *buf)
struct led_classdev *led_cdev = dev_get_drvdata(dev);
led_update_brightness(led_cdev);
return sprintf(buf, "%u\n", led_cdev->brightness);
static ssize_t brightness_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t size)
struct led_classdev *led_cdev = dev_get_drvdata(dev);
mutex_lock(&led_cdev->led_access);
if (led_sysfs_is_disabled(led_cdev)) {
ret = kstrtoul(buf, 10, &state);
led_trigger_remove(led_cdev);
led_set_brightness(led_cdev, state);
mutex_unlock(&led_cdev->led_access);
static DEVICE_ATTR_RW(brightness);
static ssize_t max_brightness_show(struct device *dev,
struct device_attribute *attr, char *buf)
struct led_classdev *led_cdev = dev_get_drvdata(dev);
return sprintf(buf, "%u\n", led_cdev->max_brightness);
static DEVICE_ATTR_RO(max_brightness);
#ifdef CONFIG_LEDS_TRIGGERS
static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
static struct attribute *led_trigger_attrs[] = {
static const struct attribute_group led_trigger_group = {
.attrs = led_trigger_attrs,
static struct attribute *led_class_attrs[] = {
&dev_attr_brightness.attr,
&dev_attr_max_brightness.attr,