home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / gpio.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.9 KB  |  123 lines

  1. /*
  2.  *  include/asm-sh/gpio.h
  3.  *
  4.  * Generic GPIO API and pinmux table support for SuperH.
  5.  *
  6.  * Copyright (c) 2008 Magnus Damm
  7.  *
  8.  * This file is subject to the terms and conditions of the GNU General Public
  9.  * License.  See the file "COPYING" in the main directory of this archive
  10.  * for more details.
  11.  */
  12. #ifndef __ASM_SH_GPIO_H
  13. #define __ASM_SH_GPIO_H
  14.  
  15. #include <linux/kernel.h>
  16. #include <linux/errno.h>
  17.  
  18. #if defined(CONFIG_CPU_SH3)
  19. #include <cpu/gpio.h>
  20. #endif
  21.  
  22. typedef unsigned short pinmux_enum_t;
  23. typedef unsigned char pinmux_flag_t;
  24.  
  25. #define PINMUX_TYPE_NONE            0
  26. #define PINMUX_TYPE_FUNCTION        1
  27. #define PINMUX_TYPE_GPIO            2
  28. #define PINMUX_TYPE_OUTPUT          3
  29. #define PINMUX_TYPE_INPUT           4
  30. #define PINMUX_TYPE_INPUT_PULLUP    5
  31. #define PINMUX_TYPE_INPUT_PULLDOWN  6
  32.  
  33. #define PINMUX_FLAG_TYPE            (0x7)
  34. #define PINMUX_FLAG_WANT_PULLUP     (1 << 3)
  35. #define PINMUX_FLAG_WANT_PULLDOWN   (1 << 4)
  36.  
  37. struct pinmux_gpio {
  38.     pinmux_enum_t enum_id;
  39.     pinmux_flag_t flags;
  40. };
  41.  
  42. #define PINMUX_GPIO(gpio, data_or_mark) [gpio] = { data_or_mark }
  43. #define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0
  44.  
  45. struct pinmux_cfg_reg {
  46.     unsigned long reg, reg_width, field_width;
  47.     unsigned long *cnt;
  48.     pinmux_enum_t *enum_ids;
  49. };
  50.  
  51. #define PINMUX_CFG_REG(name, r, r_width, f_width) \
  52.     .reg = r, .reg_width = r_width, .field_width = f_width,        \
  53.     .cnt = (unsigned long [r_width / f_width]) {}, \
  54.     .enum_ids = (pinmux_enum_t [(r_width / f_width) * (1 << f_width)]) \
  55.  
  56. struct pinmux_data_reg {
  57.     unsigned long reg, reg_width;
  58.     pinmux_enum_t *enum_ids;
  59. };
  60.  
  61. #define PINMUX_DATA_REG(name, r, r_width) \
  62.     .reg = r, .reg_width = r_width,    \
  63.     .enum_ids = (pinmux_enum_t [r_width]) \
  64.  
  65. struct pinmux_range {
  66.     pinmux_enum_t begin;
  67.     pinmux_enum_t end;
  68.     pinmux_enum_t force;
  69. };
  70.  
  71. struct pinmux_info {
  72.     char *name;
  73.     pinmux_enum_t reserved_id;
  74.     struct pinmux_range data;
  75.     struct pinmux_range input;
  76.     struct pinmux_range input_pd;
  77.     struct pinmux_range input_pu;
  78.     struct pinmux_range output;
  79.     struct pinmux_range mark;
  80.     struct pinmux_range function;
  81.  
  82.     unsigned first_gpio, last_gpio;
  83.  
  84.     struct pinmux_gpio *gpios;
  85.     struct pinmux_cfg_reg *cfg_regs;
  86.     struct pinmux_data_reg *data_regs;
  87.  
  88.     pinmux_enum_t *gpio_data;
  89.     unsigned int gpio_data_size;
  90.  
  91.     unsigned long *gpio_in_use;
  92. };
  93.  
  94. int register_pinmux(struct pinmux_info *pip);
  95.  
  96. int __gpio_request(unsigned gpio);
  97. static inline int gpio_request(unsigned gpio, const char *label)
  98. {
  99.     return __gpio_request(gpio);
  100. }
  101. void gpio_free(unsigned gpio);
  102. int gpio_direction_input(unsigned gpio);
  103. int gpio_direction_output(unsigned gpio, int value);
  104. int gpio_get_value(unsigned gpio);
  105. void gpio_set_value(unsigned gpio, int value);
  106.  
  107. /* IRQ modes are unspported */
  108. static inline int gpio_to_irq(unsigned gpio)
  109. {
  110.     WARN_ON(1);
  111.     return -EINVAL;
  112. }
  113.  
  114. static inline int irq_to_gpio(unsigned irq)
  115. {
  116.     WARN_ON(1);
  117.     return -EINVAL;
  118. }
  119.  
  120. #include <asm-generic/gpio.h>
  121.  
  122. #endif /* __ASM_SH_GPIO_H */
  123.