diff options
Diffstat (limited to 'drivers/input/misc/apanel.c')
-rw-r--r-- | drivers/input/misc/apanel.c | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c index 094bddf56755..c1e66f45d552 100644 --- a/drivers/input/misc/apanel.c +++ b/drivers/input/misc/apanel.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | #include <linux/input-polldev.h> | 23 | #include <linux/input-polldev.h> |
24 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
25 | #include <linux/workqueue.h> | ||
26 | #include <linux/leds.h> | 25 | #include <linux/leds.h> |
27 | 26 | ||
28 | #define APANEL_NAME "Fujitsu Application Panel" | 27 | #define APANEL_NAME "Fujitsu Application Panel" |
@@ -59,8 +58,6 @@ struct apanel { | |||
59 | struct i2c_client *client; | 58 | struct i2c_client *client; |
60 | unsigned short keymap[MAX_PANEL_KEYS]; | 59 | unsigned short keymap[MAX_PANEL_KEYS]; |
61 | u16 nkeys; | 60 | u16 nkeys; |
62 | u16 led_bits; | ||
63 | struct work_struct led_work; | ||
64 | struct led_classdev mail_led; | 61 | struct led_classdev mail_led; |
65 | }; | 62 | }; |
66 | 63 | ||
@@ -109,25 +106,13 @@ static void apanel_poll(struct input_polled_dev *ipdev) | |||
109 | report_key(idev, ap->keymap[i]); | 106 | report_key(idev, ap->keymap[i]); |
110 | } | 107 | } |
111 | 108 | ||
112 | /* Track state changes of LED */ | 109 | static int mail_led_set(struct led_classdev *led, |
113 | static void led_update(struct work_struct *work) | ||
114 | { | ||
115 | struct apanel *ap = container_of(work, struct apanel, led_work); | ||
116 | |||
117 | i2c_smbus_write_word_data(ap->client, 0x10, ap->led_bits); | ||
118 | } | ||
119 | |||
120 | static void mail_led_set(struct led_classdev *led, | ||
121 | enum led_brightness value) | 110 | enum led_brightness value) |
122 | { | 111 | { |
123 | struct apanel *ap = container_of(led, struct apanel, mail_led); | 112 | struct apanel *ap = container_of(led, struct apanel, mail_led); |
113 | u16 led_bits = value != LED_OFF ? 0x8000 : 0x0000; | ||
124 | 114 | ||
125 | if (value != LED_OFF) | 115 | return i2c_smbus_write_word_data(ap->client, 0x10, led_bits); |
126 | ap->led_bits |= 0x8000; | ||
127 | else | ||
128 | ap->led_bits &= ~0x8000; | ||
129 | |||
130 | schedule_work(&ap->led_work); | ||
131 | } | 116 | } |
132 | 117 | ||
133 | static int apanel_remove(struct i2c_client *client) | 118 | static int apanel_remove(struct i2c_client *client) |
@@ -179,7 +164,7 @@ static struct apanel apanel = { | |||
179 | }, | 164 | }, |
180 | .mail_led = { | 165 | .mail_led = { |
181 | .name = "mail:blue", | 166 | .name = "mail:blue", |
182 | .brightness_set = mail_led_set, | 167 | .brightness_set_blocking = mail_led_set, |
183 | }, | 168 | }, |
184 | }; | 169 | }; |
185 | 170 | ||
@@ -235,7 +220,6 @@ static int apanel_probe(struct i2c_client *client, | |||
235 | if (err) | 220 | if (err) |
236 | goto out3; | 221 | goto out3; |
237 | 222 | ||
238 | INIT_WORK(&ap->led_work, led_update); | ||
239 | if (device_chip[APANEL_DEV_LED] != CHIP_NONE) { | 223 | if (device_chip[APANEL_DEV_LED] != CHIP_NONE) { |
240 | err = led_classdev_register(&client->dev, &ap->mail_led); | 224 | err = led_classdev_register(&client->dev, &ap->mail_led); |
241 | if (err) | 225 | if (err) |