Lines Matching defs:led_cdev

23  * Nests outside led_cdev->trigger_lock
31 trigger_relevant(struct led_classdev *led_cdev, struct led_trigger *trig)
33 return !trig->trigger_type || trig->trigger_type == led_cdev->trigger_type;
41 struct led_classdev *led_cdev = dev_get_drvdata(dev);
45 mutex_lock(&led_cdev->led_access);
47 if (led_sysfs_is_disabled(led_cdev)) {
53 led_trigger_remove(led_cdev);
59 if (sysfs_streq(buf, trig->name) && trigger_relevant(led_cdev, trig)) {
60 down_write(&led_cdev->trigger_lock);
61 led_trigger_set(led_cdev, trig);
62 up_write(&led_cdev->trigger_lock);
73 mutex_unlock(&led_cdev->led_access);
95 struct led_classdev *led_cdev)
99 led_cdev->trigger ? "none" : "[none]");
104 if (!trigger_relevant(led_cdev, trig))
107 hit = led_cdev->trigger && !strcmp(led_cdev->trigger->name, trig->name);
130 struct led_classdev *led_cdev = dev_get_drvdata(dev);
135 down_read(&led_cdev->trigger_lock);
137 len = led_trigger_format(NULL, 0, led_cdev);
140 up_read(&led_cdev->trigger_lock);
144 len = led_trigger_format(data, len + 1, led_cdev);
146 up_read(&led_cdev->trigger_lock);
157 /* Caller must ensure led_cdev->trigger_lock held */
158 int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
165 if (!led_cdev->trigger && !trig)
172 if (led_cdev->trigger) {
173 spin_lock(&led_cdev->trigger->leddev_list_lock);
174 list_del_rcu(&led_cdev->trig_list);
175 spin_unlock(&led_cdev->trigger->leddev_list_lock);
180 cancel_work_sync(&led_cdev->set_brightness_work);
181 led_stop_software_blink(led_cdev);
182 if (led_cdev->trigger->deactivate)
183 led_cdev->trigger->deactivate(led_cdev);
184 device_remove_groups(led_cdev->dev, led_cdev->trigger->groups);
185 led_cdev->trigger = NULL;
186 led_cdev->trigger_data = NULL;
187 led_cdev->activated = false;
188 led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER;
189 led_set_brightness(led_cdev, LED_OFF);
193 list_add_tail_rcu(&led_cdev->trig_list, &trig->led_cdevs);
195 led_cdev->trigger = trig;
199 ret = trig->activate(led_cdev);
201 led_set_brightness(led_cdev, trig->brightness);
205 ret = device_add_groups(led_cdev->dev, trig->groups);
207 dev_err(led_cdev->dev, "Failed to add trigger attributes\n");
215 if (kobject_uevent_env(&led_cdev->dev->kobj, KOBJ_CHANGE, envp))
216 dev_err(led_cdev->dev,
226 trig->deactivate(led_cdev);
229 spin_lock(&led_cdev->trigger->leddev_list_lock);
230 list_del_rcu(&led_cdev->trig_list);
231 spin_unlock(&led_cdev->trigger->leddev_list_lock);
233 led_cdev->trigger = NULL;
234 led_cdev->trigger_data = NULL;
235 led_set_brightness(led_cdev, LED_OFF);
242 void led_trigger_remove(struct led_classdev *led_cdev)
244 down_write(&led_cdev->trigger_lock);
245 led_trigger_set(led_cdev, NULL);
246 up_write(&led_cdev->trigger_lock);
250 static bool led_match_default_trigger(struct led_classdev *led_cdev,
253 if (!strcmp(led_cdev->default_trigger, trig->name) &&
254 trigger_relevant(led_cdev, trig)) {
255 led_cdev->flags |= LED_INIT_DEFAULT_TRIGGER;
256 led_trigger_set(led_cdev, trig);
263 void led_trigger_set_default(struct led_classdev *led_cdev)
268 if (!led_cdev->default_trigger)
272 down_write(&led_cdev->trigger_lock);
274 found = led_match_default_trigger(led_cdev, trig);
278 up_write(&led_cdev->trigger_lock);
283 * Once loaded it will re-probe with all led_cdev's.
286 request_module_nowait("ledtrig:%s", led_cdev->default_trigger);
294 struct led_classdev *led_cdev;
316 list_for_each_entry(led_cdev, &leds_list, node) {
317 down_write(&led_cdev->trigger_lock);
318 if (!led_cdev->trigger && led_cdev->default_trigger)
319 led_match_default_trigger(led_cdev, trig);
320 up_write(&led_cdev->trigger_lock);
330 struct led_classdev *led_cdev;
342 list_for_each_entry(led_cdev, &leds_list, node) {
343 down_write(&led_cdev->trigger_lock);
344 if (led_cdev->trigger == trig)
345 led_trigger_set(led_cdev, NULL);
346 up_write(&led_cdev->trigger_lock);
385 struct led_classdev *led_cdev;
393 list_for_each_entry_rcu(led_cdev, &trig->led_cdevs, trig_list)
394 led_set_brightness(led_cdev, brightness);
405 struct led_classdev *led_cdev;
411 list_for_each_entry_rcu(led_cdev, &trig->led_cdevs, trig_list) {
413 led_blink_set_oneshot(led_cdev, &delay_on, &delay_off,
416 led_blink_set_nosleep(led_cdev, delay_on, delay_off);