serial: support for InstaShield IS-400 four port RS-232 PCI card
[linux-2.6] / drivers / gpio / gpiolib.c
1 #include <linux/kernel.h>
2 #include <linux/module.h>
3 #include <linux/irq.h>
4 #include <linux/spinlock.h>
5
6 #include <asm/gpio.h>
7
8
9 /* Optional implementation infrastructure for GPIO interfaces.
10  *
11  * Platforms may want to use this if they tend to use very many GPIOs
12  * that aren't part of a System-On-Chip core; or across I2C/SPI/etc.
13  *
14  * When kernel footprint or instruction count is an issue, simpler
15  * implementations may be preferred.  The GPIO programming interface
16  * allows for inlining speed-critical get/set operations for common
17  * cases, so that access to SOC-integrated GPIOs can sometimes cost
18  * only an instruction or two per bit.
19  */
20
21
22 /* When debugging, extend minimal trust to callers and platform code.
23  * Also emit diagnostic messages that may help initial bringup, when
24  * board setup or driver bugs are most common.
25  *
26  * Otherwise, minimize overhead in what may be bitbanging codepaths.
27  */
28 #ifdef  DEBUG
29 #define extra_checks    1
30 #else
31 #define extra_checks    0
32 #endif
33
34 /* gpio_lock prevents conflicts during gpio_desc[] table updates.
35  * While any GPIO is requested, its gpio_chip is not removable;
36  * each GPIO's "requested" flag serves as a lock and refcount.
37  */
38 static DEFINE_SPINLOCK(gpio_lock);
39
40 struct gpio_desc {
41         struct gpio_chip        *chip;
42         unsigned long           flags;
43 /* flag symbols are bit numbers */
44 #define FLAG_REQUESTED  0
45 #define FLAG_IS_OUT     1
46 #define FLAG_RESERVED   2
47
48 #ifdef CONFIG_DEBUG_FS
49         const char              *label;
50 #endif
51 };
52 static struct gpio_desc gpio_desc[ARCH_NR_GPIOS];
53
54 static inline void desc_set_label(struct gpio_desc *d, const char *label)
55 {
56 #ifdef CONFIG_DEBUG_FS
57         d->label = label;
58 #endif
59 }
60
61 /* Warn when drivers omit gpio_request() calls -- legal but ill-advised
62  * when setting direction, and otherwise illegal.  Until board setup code
63  * and drivers use explicit requests everywhere (which won't happen when
64  * those calls have no teeth) we can't avoid autorequesting.  This nag
65  * message should motivate switching to explicit requests...
66  */
67 static void gpio_ensure_requested(struct gpio_desc *desc)
68 {
69         if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
70                 pr_warning("GPIO-%d autorequested\n", (int)(desc - gpio_desc));
71                 desc_set_label(desc, "[auto]");
72                 if (!try_module_get(desc->chip->owner))
73                         pr_err("GPIO-%d: module can't be gotten \n",
74                                         (int)(desc - gpio_desc));
75         }
76 }
77
78 /* caller holds gpio_lock *OR* gpio is marked as requested */
79 static inline struct gpio_chip *gpio_to_chip(unsigned gpio)
80 {
81         return gpio_desc[gpio].chip;
82 }
83
84 /* dynamic allocation of GPIOs, e.g. on a hotplugged device */
85 static int gpiochip_find_base(int ngpio)
86 {
87         int i;
88         int spare = 0;
89         int base = -ENOSPC;
90
91         for (i = ARCH_NR_GPIOS - 1; i >= 0 ; i--) {
92                 struct gpio_desc *desc = &gpio_desc[i];
93                 struct gpio_chip *chip = desc->chip;
94
95                 if (!chip && !test_bit(FLAG_RESERVED, &desc->flags)) {
96                         spare++;
97                         if (spare == ngpio) {
98                                 base = i;
99                                 break;
100                         }
101                 } else {
102                         spare = 0;
103                         if (chip)
104                                 i -= chip->ngpio - 1;
105                 }
106         }
107
108         if (gpio_is_valid(base))
109                 pr_debug("%s: found new base at %d\n", __func__, base);
110         return base;
111 }
112
113 /**
114  * gpiochip_reserve() - reserve range of gpios to use with platform code only
115  * @start: starting gpio number
116  * @ngpio: number of gpios to reserve
117  * Context: platform init, potentially before irqs or kmalloc will work
118  *
119  * Returns a negative errno if any gpio within the range is already reserved
120  * or registered, else returns zero as a success code.  Use this function
121  * to mark a range of gpios as unavailable for dynamic gpio number allocation,
122  * for example because its driver support is not yet loaded.
123  */
124 int __init gpiochip_reserve(int start, int ngpio)
125 {
126         int ret = 0;
127         unsigned long flags;
128         int i;
129
130         if (!gpio_is_valid(start) || !gpio_is_valid(start + ngpio))
131                 return -EINVAL;
132
133         spin_lock_irqsave(&gpio_lock, flags);
134
135         for (i = start; i < start + ngpio; i++) {
136                 struct gpio_desc *desc = &gpio_desc[i];
137
138                 if (desc->chip || test_bit(FLAG_RESERVED, &desc->flags)) {
139                         ret = -EBUSY;
140                         goto err;
141                 }
142
143                 set_bit(FLAG_RESERVED, &desc->flags);
144         }
145
146         pr_debug("%s: reserved gpios from %d to %d\n",
147                  __func__, start, start + ngpio - 1);
148 err:
149         spin_unlock_irqrestore(&gpio_lock, flags);
150
151         return ret;
152 }
153
154 /**
155  * gpiochip_add() - register a gpio_chip
156  * @chip: the chip to register, with chip->base initialized
157  * Context: potentially before irqs or kmalloc will work
158  *
159  * Returns a negative errno if the chip can't be registered, such as
160  * because the chip->base is invalid or already associated with a
161  * different chip.  Otherwise it returns zero as a success code.
162  *
163  * If chip->base is negative, this requests dynamic assignment of
164  * a range of valid GPIOs.
165  */
166 int gpiochip_add(struct gpio_chip *chip)
167 {
168         unsigned long   flags;
169         int             status = 0;
170         unsigned        id;
171         int             base = chip->base;
172
173         if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio))
174                         && base >= 0) {
175                 status = -EINVAL;
176                 goto fail;
177         }
178
179         spin_lock_irqsave(&gpio_lock, flags);
180
181         if (base < 0) {
182                 base = gpiochip_find_base(chip->ngpio);
183                 if (base < 0) {
184                         status = base;
185                         goto fail_unlock;
186                 }
187                 chip->base = base;
188         }
189
190         /* these GPIO numbers must not be managed by another gpio_chip */
191         for (id = base; id < base + chip->ngpio; id++) {
192                 if (gpio_desc[id].chip != NULL) {
193                         status = -EBUSY;
194                         break;
195                 }
196         }
197         if (status == 0) {
198                 for (id = base; id < base + chip->ngpio; id++) {
199                         gpio_desc[id].chip = chip;
200                         gpio_desc[id].flags = 0;
201                 }
202         }
203
204 fail_unlock:
205         spin_unlock_irqrestore(&gpio_lock, flags);
206 fail:
207         /* failures here can mean systems won't boot... */
208         if (status)
209                 pr_err("gpiochip_add: gpios %d..%d (%s) not registered\n",
210                         chip->base, chip->base + chip->ngpio,
211                         chip->label ? : "generic");
212         return status;
213 }
214 EXPORT_SYMBOL_GPL(gpiochip_add);
215
216 /**
217  * gpiochip_remove() - unregister a gpio_chip
218  * @chip: the chip to unregister
219  *
220  * A gpio_chip with any GPIOs still requested may not be removed.
221  */
222 int gpiochip_remove(struct gpio_chip *chip)
223 {
224         unsigned long   flags;
225         int             status = 0;
226         unsigned        id;
227
228         spin_lock_irqsave(&gpio_lock, flags);
229
230         for (id = chip->base; id < chip->base + chip->ngpio; id++) {
231                 if (test_bit(FLAG_REQUESTED, &gpio_desc[id].flags)) {
232                         status = -EBUSY;
233                         break;
234                 }
235         }
236         if (status == 0) {
237                 for (id = chip->base; id < chip->base + chip->ngpio; id++)
238                         gpio_desc[id].chip = NULL;
239         }
240
241         spin_unlock_irqrestore(&gpio_lock, flags);
242         return status;
243 }
244 EXPORT_SYMBOL_GPL(gpiochip_remove);
245
246
247 /* These "optional" allocation calls help prevent drivers from stomping
248  * on each other, and help provide better diagnostics in debugfs.
249  * They're called even less than the "set direction" calls.
250  */
251 int gpio_request(unsigned gpio, const char *label)
252 {
253         struct gpio_desc        *desc;
254         int                     status = -EINVAL;
255         unsigned long           flags;
256
257         spin_lock_irqsave(&gpio_lock, flags);
258
259         if (!gpio_is_valid(gpio))
260                 goto done;
261         desc = &gpio_desc[gpio];
262         if (desc->chip == NULL)
263                 goto done;
264
265         if (!try_module_get(desc->chip->owner))
266                 goto done;
267
268         /* NOTE:  gpio_request() can be called in early boot,
269          * before IRQs are enabled.
270          */
271
272         if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
273                 desc_set_label(desc, label ? : "?");
274                 status = 0;
275         } else {
276                 status = -EBUSY;
277                 module_put(desc->chip->owner);
278         }
279
280 done:
281         if (status)
282                 pr_debug("gpio_request: gpio-%d (%s) status %d\n",
283                         gpio, label ? : "?", status);
284         spin_unlock_irqrestore(&gpio_lock, flags);
285         return status;
286 }
287 EXPORT_SYMBOL_GPL(gpio_request);
288
289 void gpio_free(unsigned gpio)
290 {
291         unsigned long           flags;
292         struct gpio_desc        *desc;
293
294         if (!gpio_is_valid(gpio)) {
295                 WARN_ON(extra_checks);
296                 return;
297         }
298
299         spin_lock_irqsave(&gpio_lock, flags);
300
301         desc = &gpio_desc[gpio];
302         if (desc->chip && test_and_clear_bit(FLAG_REQUESTED, &desc->flags)) {
303                 desc_set_label(desc, NULL);
304                 module_put(desc->chip->owner);
305         } else
306                 WARN_ON(extra_checks);
307
308         spin_unlock_irqrestore(&gpio_lock, flags);
309 }
310 EXPORT_SYMBOL_GPL(gpio_free);
311
312
313 /**
314  * gpiochip_is_requested - return string iff signal was requested
315  * @chip: controller managing the signal
316  * @offset: of signal within controller's 0..(ngpio - 1) range
317  *
318  * Returns NULL if the GPIO is not currently requested, else a string.
319  * If debugfs support is enabled, the string returned is the label passed
320  * to gpio_request(); otherwise it is a meaningless constant.
321  *
322  * This function is for use by GPIO controller drivers.  The label can
323  * help with diagnostics, and knowing that the signal is used as a GPIO
324  * can help avoid accidentally multiplexing it to another controller.
325  */
326 const char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)
327 {
328         unsigned gpio = chip->base + offset;
329
330         if (!gpio_is_valid(gpio) || gpio_desc[gpio].chip != chip)
331                 return NULL;
332         if (test_bit(FLAG_REQUESTED, &gpio_desc[gpio].flags) == 0)
333                 return NULL;
334 #ifdef CONFIG_DEBUG_FS
335         return gpio_desc[gpio].label;
336 #else
337         return "?";
338 #endif
339 }
340 EXPORT_SYMBOL_GPL(gpiochip_is_requested);
341
342
343 /* Drivers MUST set GPIO direction before making get/set calls.  In
344  * some cases this is done in early boot, before IRQs are enabled.
345  *
346  * As a rule these aren't called more than once (except for drivers
347  * using the open-drain emulation idiom) so these are natural places
348  * to accumulate extra debugging checks.  Note that we can't (yet)
349  * rely on gpio_request() having been called beforehand.
350  */
351
352 int gpio_direction_input(unsigned gpio)
353 {
354         unsigned long           flags;
355         struct gpio_chip        *chip;
356         struct gpio_desc        *desc = &gpio_desc[gpio];
357         int                     status = -EINVAL;
358
359         spin_lock_irqsave(&gpio_lock, flags);
360
361         if (!gpio_is_valid(gpio))
362                 goto fail;
363         chip = desc->chip;
364         if (!chip || !chip->get || !chip->direction_input)
365                 goto fail;
366         gpio -= chip->base;
367         if (gpio >= chip->ngpio)
368                 goto fail;
369         gpio_ensure_requested(desc);
370
371         /* now we know the gpio is valid and chip won't vanish */
372
373         spin_unlock_irqrestore(&gpio_lock, flags);
374
375         might_sleep_if(extra_checks && chip->can_sleep);
376
377         status = chip->direction_input(chip, gpio);
378         if (status == 0)
379                 clear_bit(FLAG_IS_OUT, &desc->flags);
380         return status;
381 fail:
382         spin_unlock_irqrestore(&gpio_lock, flags);
383         if (status)
384                 pr_debug("%s: gpio-%d status %d\n",
385                         __func__, gpio, status);
386         return status;
387 }
388 EXPORT_SYMBOL_GPL(gpio_direction_input);
389
390 int gpio_direction_output(unsigned gpio, int value)
391 {
392         unsigned long           flags;
393         struct gpio_chip        *chip;
394         struct gpio_desc        *desc = &gpio_desc[gpio];
395         int                     status = -EINVAL;
396
397         spin_lock_irqsave(&gpio_lock, flags);
398
399         if (!gpio_is_valid(gpio))
400                 goto fail;
401         chip = desc->chip;
402         if (!chip || !chip->set || !chip->direction_output)
403                 goto fail;
404         gpio -= chip->base;
405         if (gpio >= chip->ngpio)
406                 goto fail;
407         gpio_ensure_requested(desc);
408
409         /* now we know the gpio is valid and chip won't vanish */
410
411         spin_unlock_irqrestore(&gpio_lock, flags);
412
413         might_sleep_if(extra_checks && chip->can_sleep);
414
415         status = chip->direction_output(chip, gpio, value);
416         if (status == 0)
417                 set_bit(FLAG_IS_OUT, &desc->flags);
418         return status;
419 fail:
420         spin_unlock_irqrestore(&gpio_lock, flags);
421         if (status)
422                 pr_debug("%s: gpio-%d status %d\n",
423                         __func__, gpio, status);
424         return status;
425 }
426 EXPORT_SYMBOL_GPL(gpio_direction_output);
427
428
429 /* I/O calls are only valid after configuration completed; the relevant
430  * "is this a valid GPIO" error checks should already have been done.
431  *
432  * "Get" operations are often inlinable as reading a pin value register,
433  * and masking the relevant bit in that register.
434  *
435  * When "set" operations are inlinable, they involve writing that mask to
436  * one register to set a low value, or a different register to set it high.
437  * Otherwise locking is needed, so there may be little value to inlining.
438  *
439  *------------------------------------------------------------------------
440  *
441  * IMPORTANT!!!  The hot paths -- get/set value -- assume that callers
442  * have requested the GPIO.  That can include implicit requesting by
443  * a direction setting call.  Marking a gpio as requested locks its chip
444  * in memory, guaranteeing that these table lookups need no more locking
445  * and that gpiochip_remove() will fail.
446  *
447  * REVISIT when debugging, consider adding some instrumentation to ensure
448  * that the GPIO was actually requested.
449  */
450
451 /**
452  * __gpio_get_value() - return a gpio's value
453  * @gpio: gpio whose value will be returned
454  * Context: any
455  *
456  * This is used directly or indirectly to implement gpio_get_value().
457  * It returns the zero or nonzero value provided by the associated
458  * gpio_chip.get() method; or zero if no such method is provided.
459  */
460 int __gpio_get_value(unsigned gpio)
461 {
462         struct gpio_chip        *chip;
463
464         chip = gpio_to_chip(gpio);
465         WARN_ON(extra_checks && chip->can_sleep);
466         return chip->get ? chip->get(chip, gpio - chip->base) : 0;
467 }
468 EXPORT_SYMBOL_GPL(__gpio_get_value);
469
470 /**
471  * __gpio_set_value() - assign a gpio's value
472  * @gpio: gpio whose value will be assigned
473  * @value: value to assign
474  * Context: any
475  *
476  * This is used directly or indirectly to implement gpio_set_value().
477  * It invokes the associated gpio_chip.set() method.
478  */
479 void __gpio_set_value(unsigned gpio, int value)
480 {
481         struct gpio_chip        *chip;
482
483         chip = gpio_to_chip(gpio);
484         WARN_ON(extra_checks && chip->can_sleep);
485         chip->set(chip, gpio - chip->base, value);
486 }
487 EXPORT_SYMBOL_GPL(__gpio_set_value);
488
489 /**
490  * __gpio_cansleep() - report whether gpio value access will sleep
491  * @gpio: gpio in question
492  * Context: any
493  *
494  * This is used directly or indirectly to implement gpio_cansleep().  It
495  * returns nonzero if access reading or writing the GPIO value can sleep.
496  */
497 int __gpio_cansleep(unsigned gpio)
498 {
499         struct gpio_chip        *chip;
500
501         /* only call this on GPIOs that are valid! */
502         chip = gpio_to_chip(gpio);
503
504         return chip->can_sleep;
505 }
506 EXPORT_SYMBOL_GPL(__gpio_cansleep);
507
508
509
510 /* There's no value in making it easy to inline GPIO calls that may sleep.
511  * Common examples include ones connected to I2C or SPI chips.
512  */
513
514 int gpio_get_value_cansleep(unsigned gpio)
515 {
516         struct gpio_chip        *chip;
517
518         might_sleep_if(extra_checks);
519         chip = gpio_to_chip(gpio);
520         return chip->get(chip, gpio - chip->base);
521 }
522 EXPORT_SYMBOL_GPL(gpio_get_value_cansleep);
523
524 void gpio_set_value_cansleep(unsigned gpio, int value)
525 {
526         struct gpio_chip        *chip;
527
528         might_sleep_if(extra_checks);
529         chip = gpio_to_chip(gpio);
530         chip->set(chip, gpio - chip->base, value);
531 }
532 EXPORT_SYMBOL_GPL(gpio_set_value_cansleep);
533
534
535 #ifdef CONFIG_DEBUG_FS
536
537 #include <linux/debugfs.h>
538 #include <linux/seq_file.h>
539
540
541 static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
542 {
543         unsigned                i;
544         unsigned                gpio = chip->base;
545         struct gpio_desc        *gdesc = &gpio_desc[gpio];
546         int                     is_out;
547
548         for (i = 0; i < chip->ngpio; i++, gpio++, gdesc++) {
549                 if (!test_bit(FLAG_REQUESTED, &gdesc->flags))
550                         continue;
551
552                 is_out = test_bit(FLAG_IS_OUT, &gdesc->flags);
553                 seq_printf(s, " gpio-%-3d (%-12s) %s %s",
554                         gpio, gdesc->label,
555                         is_out ? "out" : "in ",
556                         chip->get
557                                 ? (chip->get(chip, i) ? "hi" : "lo")
558                                 : "?  ");
559
560                 if (!is_out) {
561                         int             irq = gpio_to_irq(gpio);
562                         struct irq_desc *desc = irq_desc + irq;
563
564                         /* This races with request_irq(), set_irq_type(),
565                          * and set_irq_wake() ... but those are "rare".
566                          *
567                          * More significantly, trigger type flags aren't
568                          * currently maintained by genirq.
569                          */
570                         if (irq >= 0 && desc->action) {
571                                 char *trigger;
572
573                                 switch (desc->status & IRQ_TYPE_SENSE_MASK) {
574                                 case IRQ_TYPE_NONE:
575                                         trigger = "(default)";
576                                         break;
577                                 case IRQ_TYPE_EDGE_FALLING:
578                                         trigger = "edge-falling";
579                                         break;
580                                 case IRQ_TYPE_EDGE_RISING:
581                                         trigger = "edge-rising";
582                                         break;
583                                 case IRQ_TYPE_EDGE_BOTH:
584                                         trigger = "edge-both";
585                                         break;
586                                 case IRQ_TYPE_LEVEL_HIGH:
587                                         trigger = "level-high";
588                                         break;
589                                 case IRQ_TYPE_LEVEL_LOW:
590                                         trigger = "level-low";
591                                         break;
592                                 default:
593                                         trigger = "?trigger?";
594                                         break;
595                                 }
596
597                                 seq_printf(s, " irq-%d %s%s",
598                                         irq, trigger,
599                                         (desc->status & IRQ_WAKEUP)
600                                                 ? " wakeup" : "");
601                         }
602                 }
603
604                 seq_printf(s, "\n");
605         }
606 }
607
608 static int gpiolib_show(struct seq_file *s, void *unused)
609 {
610         struct gpio_chip        *chip = NULL;
611         unsigned                gpio;
612         int                     started = 0;
613
614         /* REVISIT this isn't locked against gpio_chip removal ... */
615
616         for (gpio = 0; gpio_is_valid(gpio); gpio++) {
617                 if (chip == gpio_desc[gpio].chip)
618                         continue;
619                 chip = gpio_desc[gpio].chip;
620                 if (!chip)
621                         continue;
622
623                 seq_printf(s, "%sGPIOs %d-%d, %s%s:\n",
624                                 started ? "\n" : "",
625                                 chip->base, chip->base + chip->ngpio - 1,
626                                 chip->label ? : "generic",
627                                 chip->can_sleep ? ", can sleep" : "");
628                 started = 1;
629                 if (chip->dbg_show)
630                         chip->dbg_show(s, chip);
631                 else
632                         gpiolib_dbg_show(s, chip);
633         }
634         return 0;
635 }
636
637 static int gpiolib_open(struct inode *inode, struct file *file)
638 {
639         return single_open(file, gpiolib_show, NULL);
640 }
641
642 static struct file_operations gpiolib_operations = {
643         .open           = gpiolib_open,
644         .read           = seq_read,
645         .llseek         = seq_lseek,
646         .release        = single_release,
647 };
648
649 static int __init gpiolib_debugfs_init(void)
650 {
651         /* /sys/kernel/debug/gpio */
652         (void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
653                                 NULL, NULL, &gpiolib_operations);
654         return 0;
655 }
656 subsys_initcall(gpiolib_debugfs_init);
657
658 #endif  /* DEBUG_FS */