Blame view
drivers/leds/ledtrig-timer.c
3.27 KB
6655c6fe5 [PATCH] LED: add ... |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* * LED Kernel Timer Trigger * * Copyright 2005-2006 Openedhand Ltd. * * Author: Richard Purdie <rpurdie@openedhand.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ |
6655c6fe5 [PATCH] LED: add ... |
13 14 15 |
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> |
6655c6fe5 [PATCH] LED: add ... |
16 |
#include <linux/device.h> |
3dc7b82ea [PATCH] LED: Fix ... |
17 |
#include <linux/ctype.h> |
6655c6fe5 [PATCH] LED: add ... |
18 19 |
#include <linux/leds.h> #include "leds.h" |
4d404fd5c leds: Cleanup var... |
20 |
static ssize_t led_delay_on_show(struct device *dev, |
f8a7c6fe1 leds: Convert fro... |
21 |
struct device_attribute *attr, char *buf) |
6655c6fe5 [PATCH] LED: add ... |
22 |
{ |
f8a7c6fe1 leds: Convert fro... |
23 |
struct led_classdev *led_cdev = dev_get_drvdata(dev); |
6655c6fe5 [PATCH] LED: add ... |
24 |
|
5ada28bf7 led-class: always... |
25 26 |
return sprintf(buf, "%lu ", led_cdev->blink_delay_on); |
6655c6fe5 [PATCH] LED: add ... |
27 |
} |
4d404fd5c leds: Cleanup var... |
28 |
static ssize_t led_delay_on_store(struct device *dev, |
f8a7c6fe1 leds: Convert fro... |
29 |
struct device_attribute *attr, const char *buf, size_t size) |
6655c6fe5 [PATCH] LED: add ... |
30 |
{ |
f8a7c6fe1 leds: Convert fro... |
31 |
struct led_classdev *led_cdev = dev_get_drvdata(dev); |
6655c6fe5 [PATCH] LED: add ... |
32 33 34 |
int ret = -EINVAL; char *after; unsigned long state = simple_strtoul(buf, &after, 10); |
3dc7b82ea [PATCH] LED: Fix ... |
35 |
size_t count = after - buf; |
6655c6fe5 [PATCH] LED: add ... |
36 |
|
e7d2860b6 tree-wide: conver... |
37 |
if (isspace(*after)) |
3dc7b82ea [PATCH] LED: Fix ... |
38 39 40 |
count++; if (count == size) { |
5ada28bf7 led-class: always... |
41 |
led_blink_set(led_cdev, &state, &led_cdev->blink_delay_off); |
7a5caabd0 drivers/leds/ledt... |
42 |
led_cdev->blink_delay_on = state; |
3dc7b82ea [PATCH] LED: Fix ... |
43 |
ret = count; |
6655c6fe5 [PATCH] LED: add ... |
44 45 46 47 |
} return ret; } |
4d404fd5c leds: Cleanup var... |
48 |
static ssize_t led_delay_off_show(struct device *dev, |
f8a7c6fe1 leds: Convert fro... |
49 |
struct device_attribute *attr, char *buf) |
6655c6fe5 [PATCH] LED: add ... |
50 |
{ |
f8a7c6fe1 leds: Convert fro... |
51 |
struct led_classdev *led_cdev = dev_get_drvdata(dev); |
6655c6fe5 [PATCH] LED: add ... |
52 |
|
5ada28bf7 led-class: always... |
53 54 |
return sprintf(buf, "%lu ", led_cdev->blink_delay_off); |
6655c6fe5 [PATCH] LED: add ... |
55 |
} |
4d404fd5c leds: Cleanup var... |
56 |
static ssize_t led_delay_off_store(struct device *dev, |
f8a7c6fe1 leds: Convert fro... |
57 |
struct device_attribute *attr, const char *buf, size_t size) |
6655c6fe5 [PATCH] LED: add ... |
58 |
{ |
f8a7c6fe1 leds: Convert fro... |
59 |
struct led_classdev *led_cdev = dev_get_drvdata(dev); |
6655c6fe5 [PATCH] LED: add ... |
60 61 62 |
int ret = -EINVAL; char *after; unsigned long state = simple_strtoul(buf, &after, 10); |
3dc7b82ea [PATCH] LED: Fix ... |
63 |
size_t count = after - buf; |
e7d2860b6 tree-wide: conver... |
64 |
if (isspace(*after)) |
3dc7b82ea [PATCH] LED: Fix ... |
65 |
count++; |
6655c6fe5 [PATCH] LED: add ... |
66 |
|
3dc7b82ea [PATCH] LED: Fix ... |
67 |
if (count == size) { |
5ada28bf7 led-class: always... |
68 |
led_blink_set(led_cdev, &led_cdev->blink_delay_on, &state); |
7a5caabd0 drivers/leds/ledt... |
69 |
led_cdev->blink_delay_off = state; |
3dc7b82ea [PATCH] LED: Fix ... |
70 |
ret = count; |
6655c6fe5 [PATCH] LED: add ... |
71 72 73 74 |
} return ret; } |
f8a7c6fe1 leds: Convert fro... |
75 76 |
static DEVICE_ATTR(delay_on, 0644, led_delay_on_show, led_delay_on_store); static DEVICE_ATTR(delay_off, 0644, led_delay_off_show, led_delay_off_store); |
6655c6fe5 [PATCH] LED: add ... |
77 78 79 |
static void timer_trig_activate(struct led_classdev *led_cdev) { |
12fda1681 [PATCH] drivers/l... |
80 |
int rc; |
6655c6fe5 [PATCH] LED: add ... |
81 |
|
5ada28bf7 led-class: always... |
82 |
led_cdev->trigger_data = NULL; |
6655c6fe5 [PATCH] LED: add ... |
83 |
|
f8a7c6fe1 leds: Convert fro... |
84 85 |
rc = device_create_file(led_cdev->dev, &dev_attr_delay_on); if (rc) |
5ada28bf7 led-class: always... |
86 |
return; |
f8a7c6fe1 leds: Convert fro... |
87 88 89 |
rc = device_create_file(led_cdev->dev, &dev_attr_delay_off); if (rc) goto err_out_delayon; |
12fda1681 [PATCH] drivers/l... |
90 |
|
fff26f814 leds: support aut... |
91 92 |
led_blink_set(led_cdev, &led_cdev->blink_delay_on, &led_cdev->blink_delay_off); |
5ada28bf7 led-class: always... |
93 |
led_cdev->trigger_data = (void *)1; |
4c79141d2 leds: Add support... |
94 |
|
12fda1681 [PATCH] drivers/l... |
95 96 97 |
return; err_out_delayon: |
f8a7c6fe1 leds: Convert fro... |
98 |
device_remove_file(led_cdev->dev, &dev_attr_delay_on); |
6655c6fe5 [PATCH] LED: add ... |
99 100 101 102 |
} static void timer_trig_deactivate(struct led_classdev *led_cdev) { |
5ada28bf7 led-class: always... |
103 |
if (led_cdev->trigger_data) { |
f8a7c6fe1 leds: Convert fro... |
104 105 |
device_remove_file(led_cdev->dev, &dev_attr_delay_on); device_remove_file(led_cdev->dev, &dev_attr_delay_off); |
6655c6fe5 [PATCH] LED: add ... |
106 |
} |
ce70a2457 leds: ledtrig-tim... |
107 |
|
5ada28bf7 led-class: always... |
108 109 |
/* Stop blinking */ led_brightness_set(led_cdev, LED_OFF); |
6655c6fe5 [PATCH] LED: add ... |
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
} static struct led_trigger timer_led_trigger = { .name = "timer", .activate = timer_trig_activate, .deactivate = timer_trig_deactivate, }; static int __init timer_trig_init(void) { return led_trigger_register(&timer_led_trigger); } static void __exit timer_trig_exit(void) { led_trigger_unregister(&timer_led_trigger); } module_init(timer_trig_init); module_exit(timer_trig_exit); MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>"); MODULE_DESCRIPTION("Timer LED trigger"); MODULE_LICENSE("GPL"); |