6a3f24d92438d62fdb35893521ebca26cfa52785
[pandora-kernel.git] / arch / arm / mach-u300 / include / mach / gpio.h
1 /*
2  *
3  * arch/arm/mach-u300/include/mach/gpio.h
4  *
5  *
6  * Copyright (C) 2007-2009 ST-Ericsson AB
7  * License terms: GNU General Public License (GPL) version 2
8  * GPIO block resgister definitions and inline macros for
9  * U300 GPIO COH 901 335 or COH 901 571/3
10  * Author: Linus Walleij <linus.walleij@stericsson.com>
11  */
12
13 #ifndef __MACH_U300_GPIO_H
14 #define __MACH_U300_GPIO_H
15
16 #define __ARM_GPIOLIB_COMPLEX
17
18 /* These can be found in arch/arm/mach-u300/gpio.c */
19 extern int gpio_is_valid(int number);
20 extern int gpio_request(unsigned gpio, const char *label);
21 extern void gpio_free(unsigned gpio);
22 extern int gpio_direction_input(unsigned gpio);
23 extern int gpio_direction_output(unsigned gpio, int value);
24 extern int gpio_register_callback(unsigned gpio,
25                                   int (*func)(void *arg),
26                                   void *);
27 extern int gpio_unregister_callback(unsigned gpio);
28 extern void enable_irq_on_gpio_pin(unsigned gpio, int edge);
29 extern void disable_irq_on_gpio_pin(unsigned gpio);
30 extern void gpio_pullup(unsigned gpio, int value);
31 extern int gpio_get_value(unsigned gpio);
32 extern void gpio_set_value(unsigned gpio, int value);
33
34 #define gpio_get_value_cansleep gpio_get_value
35 #define gpio_set_value_cansleep gpio_set_value
36
37 /* translates a pin number to a port number */
38 #define PIN_TO_PORT(val) (val >> 3)
39
40 /* wrappers to sleep-enable the previous two functions */
41 static inline unsigned gpio_to_irq(unsigned gpio)
42 {
43         return PIN_TO_PORT(gpio) + IRQ_U300_GPIO_PORT0;
44 }
45 #define gpio_to_irq gpio_to_irq
46
47 static inline unsigned irq_to_gpio(unsigned irq)
48 {
49         /*
50          * FIXME: This is no 1-1 mapping at all, it points to the
51          * whole block of 8 pins.
52          */
53         return (irq - IRQ_U300_GPIO_PORT0) << 3;
54 }
55
56 #endif /* __MACH_U300_GPIO_H */