Lines Matching +full:led +full:- +full:sources
1 // SPDX-License-Identifier: GPL-2.0-only
3 * ledtrig-gio.c - LED Trigger Based on GPIO events
19 struct led_classdev *led; member
20 unsigned desired_brightness; /* desired brightness when led is on */
21 struct gpio_desc *gpiod; /* gpio that triggers the led */
26 struct led_classdev *led = _led; in gpio_trig_irq() local
27 struct gpio_trig_data *gpio_data = led_get_trigger_data(led); in gpio_trig_irq()
30 tmp = gpiod_get_value_cansleep(gpio_data->gpiod); in gpio_trig_irq()
32 if (gpio_data->desired_brightness) in gpio_trig_irq()
33 led_set_brightness_nosleep(gpio_data->led, in gpio_trig_irq()
34 gpio_data->desired_brightness); in gpio_trig_irq()
36 led_set_brightness_nosleep(gpio_data->led, LED_FULL); in gpio_trig_irq()
38 led_set_brightness_nosleep(gpio_data->led, LED_OFF); in gpio_trig_irq()
49 return sysfs_emit(buf, "%u\n", gpio_data->desired_brightness); in desired_brightness_show()
63 gpio_data->desired_brightness = desired_brightness; in desired_brightness_store()
75 static int gpio_trig_activate(struct led_classdev *led) in gpio_trig_activate() argument
78 struct device *dev = led->dev; in gpio_trig_activate()
83 return -ENOMEM; in gpio_trig_activate()
86 * The generic property "trigger-sources" is followed, in gpio_trig_activate()
89 gpio_data->gpiod = gpiod_get_optional(dev, "trigger-sources", GPIOD_IN); in gpio_trig_activate()
90 if (IS_ERR(gpio_data->gpiod)) { in gpio_trig_activate()
91 ret = PTR_ERR(gpio_data->gpiod); in gpio_trig_activate()
95 if (!gpio_data->gpiod) { in gpio_trig_activate()
98 return -EINVAL; in gpio_trig_activate()
101 gpiod_set_consumer_name(gpio_data->gpiod, "led-trigger"); in gpio_trig_activate()
103 gpio_data->led = led; in gpio_trig_activate()
104 led_set_trigger_data(led, gpio_data); in gpio_trig_activate()
106 ret = request_threaded_irq(gpiod_to_irq(gpio_data->gpiod), NULL, gpio_trig_irq, in gpio_trig_activate()
108 | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led); in gpio_trig_activate()
111 gpiod_put(gpio_data->gpiod); in gpio_trig_activate()
116 /* Finally update the LED to initial status */ in gpio_trig_activate()
117 gpio_trig_irq(0, led); in gpio_trig_activate()
122 static void gpio_trig_deactivate(struct led_classdev *led) in gpio_trig_deactivate() argument
124 struct gpio_trig_data *gpio_data = led_get_trigger_data(led); in gpio_trig_deactivate()
126 free_irq(gpiod_to_irq(gpio_data->gpiod), led); in gpio_trig_deactivate()
127 gpiod_put(gpio_data->gpiod); in gpio_trig_deactivate()
140 MODULE_DESCRIPTION("GPIO LED trigger");