diff options
| author | Tony Lindgren <tony@atomide.com> | 2018-08-28 12:58:03 -0400 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2018-08-28 12:58:03 -0400 |
| commit | ea4d65f14f6aaa53e379b93c5544245ef081b3e7 (patch) | |
| tree | a15485f4f1cf547a52b31fa8e16e14b9579b7200 /include/linux/leds.h | |
| parent | ce32d59ee2cd036f6e8a6ed17a06a0b0bec5c67c (diff) | |
| parent | 496f3347d834aec91c38b45d6249ed00f58ad233 (diff) | |
Merge branch 'perm-fix' into omap-for-v4.19/fixes-v2
Diffstat (limited to 'include/linux/leds.h')
| -rw-r--r-- | include/linux/leds.h | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/include/linux/leds.h b/include/linux/leds.h index b7e82550e655..834683d603f9 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
| @@ -253,7 +253,7 @@ static inline bool led_sysfs_is_disabled(struct led_classdev *led_cdev) | |||
| 253 | struct led_trigger { | 253 | struct led_trigger { |
| 254 | /* Trigger Properties */ | 254 | /* Trigger Properties */ |
| 255 | const char *name; | 255 | const char *name; |
| 256 | void (*activate)(struct led_classdev *led_cdev); | 256 | int (*activate)(struct led_classdev *led_cdev); |
| 257 | void (*deactivate)(struct led_classdev *led_cdev); | 257 | void (*deactivate)(struct led_classdev *led_cdev); |
| 258 | 258 | ||
| 259 | /* LEDs under control by this trigger (for simple triggers) */ | 259 | /* LEDs under control by this trigger (for simple triggers) */ |
| @@ -262,8 +262,19 @@ struct led_trigger { | |||
| 262 | 262 | ||
| 263 | /* Link to next registered trigger */ | 263 | /* Link to next registered trigger */ |
| 264 | struct list_head next_trig; | 264 | struct list_head next_trig; |
| 265 | |||
| 266 | const struct attribute_group **groups; | ||
| 265 | }; | 267 | }; |
| 266 | 268 | ||
| 269 | /* | ||
| 270 | * Currently the attributes in struct led_trigger::groups are added directly to | ||
| 271 | * the LED device. As this might change in the future, the following | ||
| 272 | * macros abstract getting the LED device and its trigger_data from the dev | ||
| 273 | * parameter passed to the attribute accessor functions. | ||
| 274 | */ | ||
| 275 | #define led_trigger_get_led(dev) ((struct led_classdev *)dev_get_drvdata((dev))) | ||
| 276 | #define led_trigger_get_drvdata(dev) (led_get_trigger_data(led_trigger_get_led(dev))) | ||
| 277 | |||
| 267 | ssize_t led_trigger_store(struct device *dev, struct device_attribute *attr, | 278 | ssize_t led_trigger_store(struct device *dev, struct device_attribute *attr, |
| 268 | const char *buf, size_t count); | 279 | const char *buf, size_t count); |
| 269 | ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr, | 280 | ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr, |
| @@ -288,10 +299,16 @@ extern void led_trigger_blink_oneshot(struct led_trigger *trigger, | |||
| 288 | unsigned long *delay_off, | 299 | unsigned long *delay_off, |
| 289 | int invert); | 300 | int invert); |
| 290 | extern void led_trigger_set_default(struct led_classdev *led_cdev); | 301 | extern void led_trigger_set_default(struct led_classdev *led_cdev); |
| 291 | extern void led_trigger_set(struct led_classdev *led_cdev, | 302 | extern int led_trigger_set(struct led_classdev *led_cdev, |
| 292 | struct led_trigger *trigger); | 303 | struct led_trigger *trigger); |
| 293 | extern void led_trigger_remove(struct led_classdev *led_cdev); | 304 | extern void led_trigger_remove(struct led_classdev *led_cdev); |
| 294 | 305 | ||
| 306 | static inline void led_set_trigger_data(struct led_classdev *led_cdev, | ||
| 307 | void *trigger_data) | ||
| 308 | { | ||
| 309 | led_cdev->trigger_data = trigger_data; | ||
| 310 | } | ||
| 311 | |||
| 295 | static inline void *led_get_trigger_data(struct led_classdev *led_cdev) | 312 | static inline void *led_get_trigger_data(struct led_classdev *led_cdev) |
| 296 | { | 313 | { |
| 297 | return led_cdev->trigger_data; | 314 | return led_cdev->trigger_data; |
| @@ -315,6 +332,10 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev) | |||
| 315 | extern void led_trigger_rename_static(const char *name, | 332 | extern void led_trigger_rename_static(const char *name, |
| 316 | struct led_trigger *trig); | 333 | struct led_trigger *trig); |
| 317 | 334 | ||
| 335 | #define module_led_trigger(__led_trigger) \ | ||
| 336 | module_driver(__led_trigger, led_trigger_register, \ | ||
| 337 | led_trigger_unregister) | ||
| 338 | |||
| 318 | #else | 339 | #else |
| 319 | 340 | ||
| 320 | /* Trigger has no members */ | 341 | /* Trigger has no members */ |
| @@ -334,9 +355,14 @@ static inline void led_trigger_blink_oneshot(struct led_trigger *trigger, | |||
| 334 | unsigned long *delay_off, | 355 | unsigned long *delay_off, |
| 335 | int invert) {} | 356 | int invert) {} |
| 336 | static inline void led_trigger_set_default(struct led_classdev *led_cdev) {} | 357 | static inline void led_trigger_set_default(struct led_classdev *led_cdev) {} |
| 337 | static inline void led_trigger_set(struct led_classdev *led_cdev, | 358 | static inline int led_trigger_set(struct led_classdev *led_cdev, |
| 338 | struct led_trigger *trigger) {} | 359 | struct led_trigger *trigger) |
| 360 | { | ||
| 361 | return 0; | ||
| 362 | } | ||
| 363 | |||
| 339 | static inline void led_trigger_remove(struct led_classdev *led_cdev) {} | 364 | static inline void led_trigger_remove(struct led_classdev *led_cdev) {} |
| 365 | static inline void led_set_trigger_data(struct led_classdev *led_cdev) {} | ||
| 340 | static inline void *led_get_trigger_data(struct led_classdev *led_cdev) | 366 | static inline void *led_get_trigger_data(struct led_classdev *led_cdev) |
| 341 | { | 367 | { |
| 342 | return NULL; | 368 | return NULL; |
