include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / drivers / input / keyboard / gpio_keys.c
1 /*
2  * Driver for keys on GPIO lines capable of generating interrupts.
3  *
4  * Copyright 2005 Phil Blundell
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #include <linux/module.h>
12
13 #include <linux/init.h>
14 #include <linux/fs.h>
15 #include <linux/interrupt.h>
16 #include <linux/irq.h>
17 #include <linux/sched.h>
18 #include <linux/pm.h>
19 #include <linux/slab.h>
20 #include <linux/sysctl.h>
21 #include <linux/proc_fs.h>
22 #include <linux/delay.h>
23 #include <linux/platform_device.h>
24 #include <linux/input.h>
25 #include <linux/gpio_keys.h>
26 #include <linux/workqueue.h>
27 #include <linux/gpio.h>
28
29 struct gpio_button_data {
30         struct gpio_keys_button *button;
31         struct input_dev *input;
32         struct timer_list timer;
33         struct work_struct work;
34         bool disabled;
35 };
36
37 struct gpio_keys_drvdata {
38         struct input_dev *input;
39         struct mutex disable_lock;
40         unsigned int n_buttons;
41         struct gpio_button_data data[0];
42 };
43
44 /*
45  * SYSFS interface for enabling/disabling keys and switches:
46  *
47  * There are 4 attributes under /sys/devices/platform/gpio-keys/
48  *      keys [ro]              - bitmap of keys (EV_KEY) which can be
49  *                               disabled
50  *      switches [ro]          - bitmap of switches (EV_SW) which can be
51  *                               disabled
52  *      disabled_keys [rw]     - bitmap of keys currently disabled
53  *      disabled_switches [rw] - bitmap of switches currently disabled
54  *
55  * Userland can change these values and hence disable event generation
56  * for each key (or switch). Disabling a key means its interrupt line
57  * is disabled.
58  *
59  * For example, if we have following switches set up as gpio-keys:
60  *      SW_DOCK = 5
61  *      SW_CAMERA_LENS_COVER = 9
62  *      SW_KEYPAD_SLIDE = 10
63  *      SW_FRONT_PROXIMITY = 11
64  * This is read from switches:
65  *      11-9,5
66  * Next we want to disable proximity (11) and dock (5), we write:
67  *      11,5
68  * to file disabled_switches. Now proximity and dock IRQs are disabled.
69  * This can be verified by reading the file disabled_switches:
70  *      11,5
71  * If we now want to enable proximity (11) switch we write:
72  *      5
73  * to disabled_switches.
74  *
75  * We can disable only those keys which don't allow sharing the irq.
76  */
77
78 /**
79  * get_n_events_by_type() - returns maximum number of events per @type
80  * @type: type of button (%EV_KEY, %EV_SW)
81  *
82  * Return value of this function can be used to allocate bitmap
83  * large enough to hold all bits for given type.
84  */
85 static inline int get_n_events_by_type(int type)
86 {
87         BUG_ON(type != EV_SW && type != EV_KEY);
88
89         return (type == EV_KEY) ? KEY_CNT : SW_CNT;
90 }
91
92 /**
93  * gpio_keys_disable_button() - disables given GPIO button
94  * @bdata: button data for button to be disabled
95  *
96  * Disables button pointed by @bdata. This is done by masking
97  * IRQ line. After this function is called, button won't generate
98  * input events anymore. Note that one can only disable buttons
99  * that don't share IRQs.
100  *
101  * Make sure that @bdata->disable_lock is locked when entering
102  * this function to avoid races when concurrent threads are
103  * disabling buttons at the same time.
104  */
105 static void gpio_keys_disable_button(struct gpio_button_data *bdata)
106 {
107         if (!bdata->disabled) {
108                 /*
109                  * Disable IRQ and possible debouncing timer.
110                  */
111                 disable_irq(gpio_to_irq(bdata->button->gpio));
112                 if (bdata->button->debounce_interval)
113                         del_timer_sync(&bdata->timer);
114
115                 bdata->disabled = true;
116         }
117 }
118
119 /**
120  * gpio_keys_enable_button() - enables given GPIO button
121  * @bdata: button data for button to be disabled
122  *
123  * Enables given button pointed by @bdata.
124  *
125  * Make sure that @bdata->disable_lock is locked when entering
126  * this function to avoid races with concurrent threads trying
127  * to enable the same button at the same time.
128  */
129 static void gpio_keys_enable_button(struct gpio_button_data *bdata)
130 {
131         if (bdata->disabled) {
132                 enable_irq(gpio_to_irq(bdata->button->gpio));
133                 bdata->disabled = false;
134         }
135 }
136
137 /**
138  * gpio_keys_attr_show_helper() - fill in stringified bitmap of buttons
139  * @ddata: pointer to drvdata
140  * @buf: buffer where stringified bitmap is written
141  * @type: button type (%EV_KEY, %EV_SW)
142  * @only_disabled: does caller want only those buttons that are
143  *                 currently disabled or all buttons that can be
144  *                 disabled
145  *
146  * This function writes buttons that can be disabled to @buf. If
147  * @only_disabled is true, then @buf contains only those buttons
148  * that are currently disabled. Returns 0 on success or negative
149  * errno on failure.
150  */
151 static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata,
152                                           char *buf, unsigned int type,
153                                           bool only_disabled)
154 {
155         int n_events = get_n_events_by_type(type);
156         unsigned long *bits;
157         ssize_t ret;
158         int i;
159
160         bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL);
161         if (!bits)
162                 return -ENOMEM;
163
164         for (i = 0; i < ddata->n_buttons; i++) {
165                 struct gpio_button_data *bdata = &ddata->data[i];
166
167                 if (bdata->button->type != type)
168                         continue;
169
170                 if (only_disabled && !bdata->disabled)
171                         continue;
172
173                 __set_bit(bdata->button->code, bits);
174         }
175
176         ret = bitmap_scnlistprintf(buf, PAGE_SIZE - 2, bits, n_events);
177         buf[ret++] = '\n';
178         buf[ret] = '\0';
179
180         kfree(bits);
181
182         return ret;
183 }
184
185 /**
186  * gpio_keys_attr_store_helper() - enable/disable buttons based on given bitmap
187  * @ddata: pointer to drvdata
188  * @buf: buffer from userspace that contains stringified bitmap
189  * @type: button type (%EV_KEY, %EV_SW)
190  *
191  * This function parses stringified bitmap from @buf and disables/enables
192  * GPIO buttons accordinly. Returns 0 on success and negative error
193  * on failure.
194  */
195 static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
196                                            const char *buf, unsigned int type)
197 {
198         int n_events = get_n_events_by_type(type);
199         unsigned long *bits;
200         ssize_t error;
201         int i;
202
203         bits = kcalloc(BITS_TO_LONGS(n_events), sizeof(*bits), GFP_KERNEL);
204         if (!bits)
205                 return -ENOMEM;
206
207         error = bitmap_parselist(buf, bits, n_events);
208         if (error)
209                 goto out;
210
211         /* First validate */
212         for (i = 0; i < ddata->n_buttons; i++) {
213                 struct gpio_button_data *bdata = &ddata->data[i];
214
215                 if (bdata->button->type != type)
216                         continue;
217
218                 if (test_bit(bdata->button->code, bits) &&
219                     !bdata->button->can_disable) {
220                         error = -EINVAL;
221                         goto out;
222                 }
223         }
224
225         mutex_lock(&ddata->disable_lock);
226
227         for (i = 0; i < ddata->n_buttons; i++) {
228                 struct gpio_button_data *bdata = &ddata->data[i];
229
230                 if (bdata->button->type != type)
231                         continue;
232
233                 if (test_bit(bdata->button->code, bits))
234                         gpio_keys_disable_button(bdata);
235                 else
236                         gpio_keys_enable_button(bdata);
237         }
238
239         mutex_unlock(&ddata->disable_lock);
240
241 out:
242         kfree(bits);
243         return error;
244 }
245
246 #define ATTR_SHOW_FN(name, type, only_disabled)                         \
247 static ssize_t gpio_keys_show_##name(struct device *dev,                \
248                                      struct device_attribute *attr,     \
249                                      char *buf)                         \
250 {                                                                       \
251         struct platform_device *pdev = to_platform_device(dev);         \
252         struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev);   \
253                                                                         \
254         return gpio_keys_attr_show_helper(ddata, buf,                   \
255                                           type, only_disabled);         \
256 }
257
258 ATTR_SHOW_FN(keys, EV_KEY, false);
259 ATTR_SHOW_FN(switches, EV_SW, false);
260 ATTR_SHOW_FN(disabled_keys, EV_KEY, true);
261 ATTR_SHOW_FN(disabled_switches, EV_SW, true);
262
263 /*
264  * ATTRIBUTES:
265  *
266  * /sys/devices/platform/gpio-keys/keys [ro]
267  * /sys/devices/platform/gpio-keys/switches [ro]
268  */
269 static DEVICE_ATTR(keys, S_IRUGO, gpio_keys_show_keys, NULL);
270 static DEVICE_ATTR(switches, S_IRUGO, gpio_keys_show_switches, NULL);
271
272 #define ATTR_STORE_FN(name, type)                                       \
273 static ssize_t gpio_keys_store_##name(struct device *dev,               \
274                                       struct device_attribute *attr,    \
275                                       const char *buf,                  \
276                                       size_t count)                     \
277 {                                                                       \
278         struct platform_device *pdev = to_platform_device(dev);         \
279         struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev);   \
280         ssize_t error;                                                  \
281                                                                         \
282         error = gpio_keys_attr_store_helper(ddata, buf, type);          \
283         if (error)                                                      \
284                 return error;                                           \
285                                                                         \
286         return count;                                                   \
287 }
288
289 ATTR_STORE_FN(disabled_keys, EV_KEY);
290 ATTR_STORE_FN(disabled_switches, EV_SW);
291
292 /*
293  * ATTRIBUTES:
294  *
295  * /sys/devices/platform/gpio-keys/disabled_keys [rw]
296  * /sys/devices/platform/gpio-keys/disables_switches [rw]
297  */
298 static DEVICE_ATTR(disabled_keys, S_IWUSR | S_IRUGO,
299                    gpio_keys_show_disabled_keys,
300                    gpio_keys_store_disabled_keys);
301 static DEVICE_ATTR(disabled_switches, S_IWUSR | S_IRUGO,
302                    gpio_keys_show_disabled_switches,
303                    gpio_keys_store_disabled_switches);
304
305 static struct attribute *gpio_keys_attrs[] = {
306         &dev_attr_keys.attr,
307         &dev_attr_switches.attr,
308         &dev_attr_disabled_keys.attr,
309         &dev_attr_disabled_switches.attr,
310         NULL,
311 };
312
313 static struct attribute_group gpio_keys_attr_group = {
314         .attrs = gpio_keys_attrs,
315 };
316
317 static void gpio_keys_report_event(struct gpio_button_data *bdata)
318 {
319         struct gpio_keys_button *button = bdata->button;
320         struct input_dev *input = bdata->input;
321         unsigned int type = button->type ?: EV_KEY;
322         int state = (gpio_get_value(button->gpio) ? 1 : 0) ^ button->active_low;
323
324         input_event(input, type, button->code, !!state);
325         input_sync(input);
326 }
327
328 static void gpio_keys_work_func(struct work_struct *work)
329 {
330         struct gpio_button_data *bdata =
331                 container_of(work, struct gpio_button_data, work);
332
333         gpio_keys_report_event(bdata);
334 }
335
336 static void gpio_keys_timer(unsigned long _data)
337 {
338         struct gpio_button_data *data = (struct gpio_button_data *)_data;
339
340         schedule_work(&data->work);
341 }
342
343 static irqreturn_t gpio_keys_isr(int irq, void *dev_id)
344 {
345         struct gpio_button_data *bdata = dev_id;
346         struct gpio_keys_button *button = bdata->button;
347
348         BUG_ON(irq != gpio_to_irq(button->gpio));
349
350         if (button->debounce_interval)
351                 mod_timer(&bdata->timer,
352                         jiffies + msecs_to_jiffies(button->debounce_interval));
353         else
354                 schedule_work(&bdata->work);
355
356         return IRQ_HANDLED;
357 }
358
359 static int __devinit gpio_keys_setup_key(struct platform_device *pdev,
360                                          struct gpio_button_data *bdata,
361                                          struct gpio_keys_button *button)
362 {
363         char *desc = button->desc ? button->desc : "gpio_keys";
364         struct device *dev = &pdev->dev;
365         unsigned long irqflags;
366         int irq, error;
367
368         setup_timer(&bdata->timer, gpio_keys_timer, (unsigned long)bdata);
369         INIT_WORK(&bdata->work, gpio_keys_work_func);
370
371         error = gpio_request(button->gpio, desc);
372         if (error < 0) {
373                 dev_err(dev, "failed to request GPIO %d, error %d\n",
374                         button->gpio, error);
375                 goto fail2;
376         }
377
378         error = gpio_direction_input(button->gpio);
379         if (error < 0) {
380                 dev_err(dev, "failed to configure"
381                         " direction for GPIO %d, error %d\n",
382                         button->gpio, error);
383                 goto fail3;
384         }
385
386         irq = gpio_to_irq(button->gpio);
387         if (irq < 0) {
388                 error = irq;
389                 dev_err(dev, "Unable to get irq number for GPIO %d, error %d\n",
390                         button->gpio, error);
391                 goto fail3;
392         }
393
394         irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
395         /*
396          * If platform has specified that the button can be disabled,
397          * we don't want it to share the interrupt line.
398          */
399         if (!button->can_disable)
400                 irqflags |= IRQF_SHARED;
401
402         error = request_irq(irq, gpio_keys_isr, irqflags, desc, bdata);
403         if (error) {
404                 dev_err(dev, "Unable to claim irq %d; error %d\n",
405                         irq, error);
406                 goto fail3;
407         }
408
409         return 0;
410
411 fail3:
412         gpio_free(button->gpio);
413 fail2:
414         return error;
415 }
416
417 static int __devinit gpio_keys_probe(struct platform_device *pdev)
418 {
419         struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
420         struct gpio_keys_drvdata *ddata;
421         struct device *dev = &pdev->dev;
422         struct input_dev *input;
423         int i, error;
424         int wakeup = 0;
425
426         ddata = kzalloc(sizeof(struct gpio_keys_drvdata) +
427                         pdata->nbuttons * sizeof(struct gpio_button_data),
428                         GFP_KERNEL);
429         input = input_allocate_device();
430         if (!ddata || !input) {
431                 dev_err(dev, "failed to allocate state\n");
432                 error = -ENOMEM;
433                 goto fail1;
434         }
435
436         ddata->input = input;
437         ddata->n_buttons = pdata->nbuttons;
438         mutex_init(&ddata->disable_lock);
439
440         platform_set_drvdata(pdev, ddata);
441
442         input->name = pdev->name;
443         input->phys = "gpio-keys/input0";
444         input->dev.parent = &pdev->dev;
445
446         input->id.bustype = BUS_HOST;
447         input->id.vendor = 0x0001;
448         input->id.product = 0x0001;
449         input->id.version = 0x0100;
450
451         /* Enable auto repeat feature of Linux input subsystem */
452         if (pdata->rep)
453                 __set_bit(EV_REP, input->evbit);
454
455         for (i = 0; i < pdata->nbuttons; i++) {
456                 struct gpio_keys_button *button = &pdata->buttons[i];
457                 struct gpio_button_data *bdata = &ddata->data[i];
458                 unsigned int type = button->type ?: EV_KEY;
459
460                 bdata->input = input;
461                 bdata->button = button;
462
463                 error = gpio_keys_setup_key(pdev, bdata, button);
464                 if (error)
465                         goto fail2;
466
467                 if (button->wakeup)
468                         wakeup = 1;
469
470                 input_set_capability(input, type, button->code);
471         }
472
473         error = sysfs_create_group(&pdev->dev.kobj, &gpio_keys_attr_group);
474         if (error) {
475                 dev_err(dev, "Unable to export keys/switches, error: %d\n",
476                         error);
477                 goto fail2;
478         }
479
480         error = input_register_device(input);
481         if (error) {
482                 dev_err(dev, "Unable to register input device, error: %d\n",
483                         error);
484                 goto fail3;
485         }
486
487         /* get current state of buttons */
488         for (i = 0; i < pdata->nbuttons; i++)
489                 gpio_keys_report_event(&ddata->data[i]);
490         input_sync(input);
491
492         device_init_wakeup(&pdev->dev, wakeup);
493
494         return 0;
495
496  fail3:
497         sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group);
498  fail2:
499         while (--i >= 0) {
500                 free_irq(gpio_to_irq(pdata->buttons[i].gpio), &ddata->data[i]);
501                 if (pdata->buttons[i].debounce_interval)
502                         del_timer_sync(&ddata->data[i].timer);
503                 cancel_work_sync(&ddata->data[i].work);
504                 gpio_free(pdata->buttons[i].gpio);
505         }
506
507         platform_set_drvdata(pdev, NULL);
508  fail1:
509         input_free_device(input);
510         kfree(ddata);
511
512         return error;
513 }
514
515 static int __devexit gpio_keys_remove(struct platform_device *pdev)
516 {
517         struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
518         struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev);
519         struct input_dev *input = ddata->input;
520         int i;
521
522         sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group);
523
524         device_init_wakeup(&pdev->dev, 0);
525
526         for (i = 0; i < pdata->nbuttons; i++) {
527                 int irq = gpio_to_irq(pdata->buttons[i].gpio);
528                 free_irq(irq, &ddata->data[i]);
529                 if (pdata->buttons[i].debounce_interval)
530                         del_timer_sync(&ddata->data[i].timer);
531                 cancel_work_sync(&ddata->data[i].work);
532                 gpio_free(pdata->buttons[i].gpio);
533         }
534
535         input_unregister_device(input);
536
537         return 0;
538 }
539
540
541 #ifdef CONFIG_PM
542 static int gpio_keys_suspend(struct device *dev)
543 {
544         struct platform_device *pdev = to_platform_device(dev);
545         struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
546         int i;
547
548         if (device_may_wakeup(&pdev->dev)) {
549                 for (i = 0; i < pdata->nbuttons; i++) {
550                         struct gpio_keys_button *button = &pdata->buttons[i];
551                         if (button->wakeup) {
552                                 int irq = gpio_to_irq(button->gpio);
553                                 enable_irq_wake(irq);
554                         }
555                 }
556         }
557
558         return 0;
559 }
560
561 static int gpio_keys_resume(struct device *dev)
562 {
563         struct platform_device *pdev = to_platform_device(dev);
564         struct gpio_keys_drvdata *ddata = platform_get_drvdata(pdev);
565         struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
566         int i;
567
568         for (i = 0; i < pdata->nbuttons; i++) {
569
570                 struct gpio_keys_button *button = &pdata->buttons[i];
571                 if (button->wakeup && device_may_wakeup(&pdev->dev)) {
572                         int irq = gpio_to_irq(button->gpio);
573                         disable_irq_wake(irq);
574                 }
575
576                 gpio_keys_report_event(&ddata->data[i]);
577         }
578         input_sync(ddata->input);
579
580         return 0;
581 }
582
583 static const struct dev_pm_ops gpio_keys_pm_ops = {
584         .suspend        = gpio_keys_suspend,
585         .resume         = gpio_keys_resume,
586 };
587 #endif
588
589 static struct platform_driver gpio_keys_device_driver = {
590         .probe          = gpio_keys_probe,
591         .remove         = __devexit_p(gpio_keys_remove),
592         .driver         = {
593                 .name   = "gpio-keys",
594                 .owner  = THIS_MODULE,
595 #ifdef CONFIG_PM
596                 .pm     = &gpio_keys_pm_ops,
597 #endif
598         }
599 };
600
601 static int __init gpio_keys_init(void)
602 {
603         return platform_driver_register(&gpio_keys_device_driver);
604 }
605
606 static void __exit gpio_keys_exit(void)
607 {
608         platform_driver_unregister(&gpio_keys_device_driver);
609 }
610
611 module_init(gpio_keys_init);
612 module_exit(gpio_keys_exit);
613
614 MODULE_LICENSE("GPL");
615 MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>");
616 MODULE_DESCRIPTION("Keyboard driver for CPU GPIOs");
617 MODULE_ALIAS("platform:gpio-keys");