led-triggers.c (0cce284537fb42d9c28b9b31038ffc9b464555f5) led-triggers.c (2282e125a406e09331c5a785e3df29035c99a607)
1/*
2 * LED Triggers Core
3 *
4 * Copyright 2005-2007 Openedhand Ltd.
5 *
6 * Author: Richard Purdie <rpurdie@openedhand.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 89 unchanged lines hidden (view full) ---

98 up_read(&triggers_list_lock);
99
100 len += scnprintf(len+buf, PAGE_SIZE - len, "\n");
101 return len;
102}
103EXPORT_SYMBOL_GPL(led_trigger_show);
104
105/* Caller must ensure led_cdev->trigger_lock held */
1/*
2 * LED Triggers Core
3 *
4 * Copyright 2005-2007 Openedhand Ltd.
5 *
6 * Author: Richard Purdie <rpurdie@openedhand.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 89 unchanged lines hidden (view full) ---

98 up_read(&triggers_list_lock);
99
100 len += scnprintf(len+buf, PAGE_SIZE - len, "\n");
101 return len;
102}
103EXPORT_SYMBOL_GPL(led_trigger_show);
104
105/* Caller must ensure led_cdev->trigger_lock held */
106void led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
106int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
107{
108 unsigned long flags;
109 char *event = NULL;
110 char *envp[2];
111 const char *name;
107{
108 unsigned long flags;
109 char *event = NULL;
110 char *envp[2];
111 const char *name;
112 int ret;
112
113 if (!led_cdev->trigger && !trig)
113
114 if (!led_cdev->trigger && !trig)
114 return;
115 return 0;
115
116 name = trig ? trig->name : "none";
117 event = kasprintf(GFP_KERNEL, "TRIGGER=%s", name);
118
119 /* Remove any existing trigger */
120 if (led_cdev->trigger) {
121 write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
122 list_del(&led_cdev->trig_list);

--- 6 unchanged lines hidden (view full) ---

129 led_cdev->trigger = NULL;
130 led_set_brightness(led_cdev, LED_OFF);
131 }
132 if (trig) {
133 write_lock_irqsave(&trig->leddev_list_lock, flags);
134 list_add_tail(&led_cdev->trig_list, &trig->led_cdevs);
135 write_unlock_irqrestore(&trig->leddev_list_lock, flags);
136 led_cdev->trigger = trig;
116
117 name = trig ? trig->name : "none";
118 event = kasprintf(GFP_KERNEL, "TRIGGER=%s", name);
119
120 /* Remove any existing trigger */
121 if (led_cdev->trigger) {
122 write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
123 list_del(&led_cdev->trig_list);

--- 6 unchanged lines hidden (view full) ---

130 led_cdev->trigger = NULL;
131 led_set_brightness(led_cdev, LED_OFF);
132 }
133 if (trig) {
134 write_lock_irqsave(&trig->leddev_list_lock, flags);
135 list_add_tail(&led_cdev->trig_list, &trig->led_cdevs);
136 write_unlock_irqrestore(&trig->leddev_list_lock, flags);
137 led_cdev->trigger = trig;
138
137 if (trig->activate)
139 if (trig->activate)
138 trig->activate(led_cdev);
140 ret = trig->activate(led_cdev);
141 else
142 ret = 0;
143
144 if (ret)
145 goto err_activate;
139 }
140
141 if (event) {
142 envp[0] = event;
143 envp[1] = NULL;
144 if (kobject_uevent_env(&led_cdev->dev->kobj, KOBJ_CHANGE, envp))
145 dev_err(led_cdev->dev,
146 "%s: Error sending uevent\n", __func__);
147 kfree(event);
148 }
146 }
147
148 if (event) {
149 envp[0] = event;
150 envp[1] = NULL;
151 if (kobject_uevent_env(&led_cdev->dev->kobj, KOBJ_CHANGE, envp))
152 dev_err(led_cdev->dev,
153 "%s: Error sending uevent\n", __func__);
154 kfree(event);
155 }
156
157 return 0;
158
159err_activate:
160 led_cdev->trigger = NULL;
161 write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
162 list_del(&led_cdev->trig_list);
163 write_unlock_irqrestore(&led_cdev->trigger->leddev_list_lock, flags);
164 led_set_brightness(led_cdev, LED_OFF);
165
166 return ret;
149}
150EXPORT_SYMBOL_GPL(led_trigger_set);
151
152void led_trigger_remove(struct led_classdev *led_cdev)
153{
154 down_write(&led_cdev->trigger_lock);
155 led_trigger_set(led_cdev, NULL);
156 up_write(&led_cdev->trigger_lock);

--- 210 unchanged lines hidden ---
167}
168EXPORT_SYMBOL_GPL(led_trigger_set);
169
170void led_trigger_remove(struct led_classdev *led_cdev)
171{
172 down_write(&led_cdev->trigger_lock);
173 led_trigger_set(led_cdev, NULL);
174 up_write(&led_cdev->trigger_lock);

--- 210 unchanged lines hidden ---