Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _IMX_GPIO_H
  2 
  3 #include <asm/arch/imx-regs.h>
  4 
  5 #define IMX_GPIO_ALLOC_MODE_NORMAL      0
  6 #define IMX_GPIO_ALLOC_MODE_NO_ALLOC    1
  7 #define IMX_GPIO_ALLOC_MODE_TRY_ALLOC   2
  8 #define IMX_GPIO_ALLOC_MODE_ALLOC_ONLY  4
  9 #define IMX_GPIO_ALLOC_MODE_RELEASE     8
 10 
 11 extern int imx_gpio_request(unsigned gpio, const char *label);
 12 
 13 extern void imx_gpio_free(unsigned gpio);
 14 
 15 extern int imx_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
 16                                         int alloc_mode, const char *label);
 17 
 18 extern int imx_gpio_direction_input(unsigned gpio);
 19 
 20 extern int imx_gpio_direction_output(unsigned gpio, int value);
 21 
 22 extern void __imx_gpio_set_value(unsigned gpio, int value);
 23 
 24 static inline int imx_gpio_get_value(unsigned gpio)
 25 {
 26         return SSR(gpio >> GPIO_PORT_SHIFT) & (1 << (gpio & GPIO_PIN_MASK));
 27 }
 28 
 29 static inline void imx_gpio_set_value_inline(unsigned gpio, int value)
 30 {
 31         unsigned long flags;
 32 
 33         raw_local_irq_save(flags);
 34         if(value)
 35                 DR(gpio >> GPIO_PORT_SHIFT) |= (1 << (gpio & GPIO_PIN_MASK));
 36         else
 37                 DR(gpio >> GPIO_PORT_SHIFT) &= ~(1 << (gpio & GPIO_PIN_MASK));
 38         raw_local_irq_restore(flags);
 39 }
 40 
 41 static inline void imx_gpio_set_value(unsigned gpio, int value)
 42 {
 43         if(__builtin_constant_p(gpio))
 44                 imx_gpio_set_value_inline(gpio, value);
 45         else
 46                 __imx_gpio_set_value(gpio, value);
 47 }
 48 
 49 extern int imx_gpio_to_irq(unsigned gpio);
 50 
 51 extern int imx_irq_to_gpio(unsigned irq);
 52 
 53 /*-------------------------------------------------------------------------*/
 54 
 55 /* Wrappers for "new style" GPIO calls. These calls i.MX specific versions
 56  * to allow future extension of GPIO logic.
 57  */
 58 
 59 static inline int gpio_request(unsigned gpio, const char *label)
 60 {
 61         return imx_gpio_request(gpio, label);
 62 }
 63 
 64 static inline void gpio_free(unsigned gpio)
 65 {
 66         imx_gpio_free(gpio);
 67 }
 68 
 69 static inline  int gpio_direction_input(unsigned gpio)
 70 {
 71         return imx_gpio_direction_input(gpio);
 72 }
 73 
 74 static inline int gpio_direction_output(unsigned gpio, int value)
 75 {
 76         return imx_gpio_direction_output(gpio, value);
 77 }
 78 
 79 static inline int gpio_get_value(unsigned gpio)
 80 {
 81         return imx_gpio_get_value(gpio);
 82 }
 83 
 84 static inline void gpio_set_value(unsigned gpio, int value)
 85 {
 86         imx_gpio_set_value(gpio, value);
 87 }
 88 
 89 #include <asm-generic/gpio.h>           /* cansleep wrappers */
 90 
 91 static inline int gpio_to_irq(unsigned gpio)
 92 {
 93         return imx_gpio_to_irq(gpio);
 94 }
 95 
 96 static inline int irq_to_gpio(unsigned irq)
 97 {
 98         return imx_irq_to_gpio(irq);
 99 }
100 
101 
102 #endif
103 
  This page was automatically generated by the LXR engine.