gpio.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  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. #ifndef __MACH_U300_GPIO_H
  13. #define __MACH_U300_GPIO_H
  14. #include <linux/kernel.h>
  15. #include <linux/io.h>
  16. #include <mach/hardware.h>
  17. #include <asm/irq.h>
  18. /* Switch type depending on platform/chip variant */
  19. #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330)
  20. #define U300_COH901335
  21. #endif
  22. #if defined(CONFIG_MACH_U300_BS365) || defined(CONFIG_MACH_U300_BS335)
  23. #define U300_COH901571_3
  24. #endif
  25. /* Get base address for regs here */
  26. #include "u300-regs.h"
  27. /* IRQ numbers */
  28. #include "irqs.h"
  29. /*
  30. * This is the GPIO block definitions. GPIO (General Purpose I/O) can be
  31. * used for anything, and often is. The event/enable etc figures are for
  32. * the lowermost pin (pin 0 on each port), shift this left to match your
  33. * pin if you're gonna use these values.
  34. */
  35. #ifdef U300_COH901335
  36. #define U300_GPIO_PORTX_SPACING (0x1C)
  37. /* Port X Pin Data Register 32bit, this is both input and output (R/W) */
  38. #define U300_GPIO_PXPDIR (0x00)
  39. #define U300_GPIO_PXPDOR (0x00)
  40. /* Port X Pin Config Register 32bit (R/W) */
  41. #define U300_GPIO_PXPCR (0x04)
  42. #define U300_GPIO_PXPCR_ALL_PINS_MODE_MASK (0x0000FFFFUL)
  43. #define U300_GPIO_PXPCR_PIN_MODE_MASK (0x00000003UL)
  44. #define U300_GPIO_PXPCR_PIN_MODE_SHIFT (0x00000002UL)
  45. #define U300_GPIO_PXPCR_PIN_MODE_INPUT (0x00000000UL)
  46. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL (0x00000001UL)
  47. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_DRAIN (0x00000002UL)
  48. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_SOURCE (0x00000003UL)
  49. /* Port X Interrupt Event Register 32bit (R/W) */
  50. #define U300_GPIO_PXIEV (0x08)
  51. #define U300_GPIO_PXIEV_ALL_IRQ_EVENT_MASK (0x000000FFUL)
  52. #define U300_GPIO_PXIEV_IRQ_EVENT (0x00000001UL)
  53. /* Port X Interrupt Enable Register 32bit (R/W) */
  54. #define U300_GPIO_PXIEN (0x0C)
  55. #define U300_GPIO_PXIEN_ALL_IRQ_ENABLE_MASK (0x000000FFUL)
  56. #define U300_GPIO_PXIEN_IRQ_ENABLE (0x00000001UL)
  57. /* Port X Interrupt Force Register 32bit (R/W) */
  58. #define U300_GPIO_PXIFR (0x10)
  59. #define U300_GPIO_PXIFR_ALL_IRQ_FORCE_MASK (0x000000FFUL)
  60. #define U300_GPIO_PXIFR_IRQ_FORCE (0x00000001UL)
  61. /* Port X Interrupt Config Register 32bit (R/W) */
  62. #define U300_GPIO_PXICR (0x14)
  63. #define U300_GPIO_PXICR_ALL_IRQ_CONFIG_MASK (0x000000FFUL)
  64. #define U300_GPIO_PXICR_IRQ_CONFIG_MASK (0x00000001UL)
  65. #define U300_GPIO_PXICR_IRQ_CONFIG_FALLING_EDGE (0x00000000UL)
  66. #define U300_GPIO_PXICR_IRQ_CONFIG_RISING_EDGE (0x00000001UL)
  67. /* Port X Pull-up Enable Register 32bit (R/W) */
  68. #define U300_GPIO_PXPER (0x18)
  69. #define U300_GPIO_PXPER_ALL_PULL_UP_DISABLE_MASK (0x000000FFUL)
  70. #define U300_GPIO_PXPER_PULL_UP_DISABLE (0x00000001UL)
  71. /* Control Register 32bit (R/W) */
  72. #define U300_GPIO_CR (0x54)
  73. #define U300_GPIO_CR_BLOCK_CLOCK_ENABLE (0x00000001UL)
  74. /* three ports of 8 bits each = GPIO pins 0..23 */
  75. #define U300_GPIO_NUM_PORTS 3
  76. #define U300_GPIO_PINS_PER_PORT 8
  77. #define U300_GPIO_MAX (U300_GPIO_PINS_PER_PORT * U300_GPIO_NUM_PORTS - 1)
  78. #endif
  79. #ifdef U300_COH901571_3
  80. /*
  81. * Control Register 32bit (R/W)
  82. * bit 15-9 (mask 0x0000FE00) contains the number of cores. 8*cores
  83. * gives the number of GPIO pins.
  84. * bit 8-2 (mask 0x000001FC) contains the core version ID.
  85. */
  86. #define U300_GPIO_CR (0x00)
  87. #define U300_GPIO_CR_SYNC_SEL_ENABLE (0x00000002UL)
  88. #define U300_GPIO_CR_BLOCK_CLKRQ_ENABLE (0x00000001UL)
  89. #define U300_GPIO_PORTX_SPACING (0x30)
  90. /* Port X Pin Data INPUT Register 32bit (R/W) */
  91. #define U300_GPIO_PXPDIR (0x04)
  92. /* Port X Pin Data OUTPUT Register 32bit (R/W) */
  93. #define U300_GPIO_PXPDOR (0x08)
  94. /* Port X Pin Config Register 32bit (R/W) */
  95. #define U300_GPIO_PXPCR (0x0C)
  96. #define U300_GPIO_PXPCR_ALL_PINS_MODE_MASK (0x0000FFFFUL)
  97. #define U300_GPIO_PXPCR_PIN_MODE_MASK (0x00000003UL)
  98. #define U300_GPIO_PXPCR_PIN_MODE_SHIFT (0x00000002UL)
  99. #define U300_GPIO_PXPCR_PIN_MODE_INPUT (0x00000000UL)
  100. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_PUSH_PULL (0x00000001UL)
  101. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_DRAIN (0x00000002UL)
  102. #define U300_GPIO_PXPCR_PIN_MODE_OUTPUT_OPEN_SOURCE (0x00000003UL)
  103. /* Port X Pull-up Enable Register 32bit (R/W) */
  104. #define U300_GPIO_PXPER (0x10)
  105. #define U300_GPIO_PXPER_ALL_PULL_UP_DISABLE_MASK (0x000000FFUL)
  106. #define U300_GPIO_PXPER_PULL_UP_DISABLE (0x00000001UL)
  107. /* Port X Interrupt Event Register 32bit (R/W) */
  108. #define U300_GPIO_PXIEV (0x14)
  109. #define U300_GPIO_PXIEV_ALL_IRQ_EVENT_MASK (0x000000FFUL)
  110. #define U300_GPIO_PXIEV_IRQ_EVENT (0x00000001UL)
  111. /* Port X Interrupt Enable Register 32bit (R/W) */
  112. #define U300_GPIO_PXIEN (0x18)
  113. #define U300_GPIO_PXIEN_ALL_IRQ_ENABLE_MASK (0x000000FFUL)
  114. #define U300_GPIO_PXIEN_IRQ_ENABLE (0x00000001UL)
  115. /* Port X Interrupt Force Register 32bit (R/W) */
  116. #define U300_GPIO_PXIFR (0x1C)
  117. #define U300_GPIO_PXIFR_ALL_IRQ_FORCE_MASK (0x000000FFUL)
  118. #define U300_GPIO_PXIFR_IRQ_FORCE (0x00000001UL)
  119. /* Port X Interrupt Config Register 32bit (R/W) */
  120. #define U300_GPIO_PXICR (0x20)
  121. #define U300_GPIO_PXICR_ALL_IRQ_CONFIG_MASK (0x000000FFUL)
  122. #define U300_GPIO_PXICR_IRQ_CONFIG_MASK (0x00000001UL)
  123. #define U300_GPIO_PXICR_IRQ_CONFIG_FALLING_EDGE (0x00000000UL)
  124. #define U300_GPIO_PXICR_IRQ_CONFIG_RISING_EDGE (0x00000001UL)
  125. #ifdef CONFIG_MACH_U300_BS335
  126. /* seven ports of 8 bits each = GPIO pins 0..55 */
  127. #define U300_GPIO_NUM_PORTS 7
  128. #else
  129. /* five ports of 8 bits each = GPIO pins 0..39 */
  130. #define U300_GPIO_NUM_PORTS 5
  131. #endif
  132. #define U300_GPIO_PINS_PER_PORT 8
  133. #define U300_GPIO_MAX (U300_GPIO_PINS_PER_PORT * U300_GPIO_NUM_PORTS - 1)
  134. #endif
  135. /*
  136. * Individual pin assignments for the B26/S26. Notice that the
  137. * actual usage of these pins depends on the PAD MUX settings, that
  138. * is why the same number can potentially appear several times.
  139. * In the reference design each pin is only used for one purpose.
  140. * These were determined by inspecting the B26/S26 schematic:
  141. * 2/1911-ROA 128 1603
  142. */
  143. #ifdef CONFIG_MACH_U300_BS2X
  144. #define U300_GPIO_PIN_UART_RX 0
  145. #define U300_GPIO_PIN_UART_TX 1
  146. #define U300_GPIO_PIN_GPIO02 2 /* Unrouted */
  147. #define U300_GPIO_PIN_GPIO03 3 /* Unrouted */
  148. #define U300_GPIO_PIN_CAM_SLEEP 4
  149. #define U300_GPIO_PIN_CAM_REG_EN 5
  150. #define U300_GPIO_PIN_GPIO06 6 /* Unrouted */
  151. #define U300_GPIO_PIN_GPIO07 7 /* Unrouted */
  152. #define U300_GPIO_PIN_GPIO08 8 /* Service point SP2321 */
  153. #define U300_GPIO_PIN_GPIO09 9 /* Service point SP2322 */
  154. #define U300_GPIO_PIN_PHFSENSE 10 /* Headphone jack sensing */
  155. #define U300_GPIO_PIN_MMC_CLKRET 11 /* Clock return from MMC/SD card */
  156. #define U300_GPIO_PIN_MMC_CD 12 /* MMC Card insertion detection */
  157. #define U300_GPIO_PIN_FLIPSENSE 13 /* Mechanical flip sensing */
  158. #define U300_GPIO_PIN_GPIO14 14 /* DSP JTAG Port RTCK */
  159. #define U300_GPIO_PIN_GPIO15 15 /* Unrouted */
  160. #define U300_GPIO_PIN_GPIO16 16 /* Unrouted */
  161. #define U300_GPIO_PIN_GPIO17 17 /* Unrouted */
  162. #define U300_GPIO_PIN_GPIO18 18 /* Unrouted */
  163. #define U300_GPIO_PIN_GPIO19 19 /* Unrouted */
  164. #define U300_GPIO_PIN_GPIO20 20 /* Unrouted */
  165. #define U300_GPIO_PIN_GPIO21 21 /* Unrouted */
  166. #define U300_GPIO_PIN_GPIO22 22 /* Unrouted */
  167. #define U300_GPIO_PIN_GPIO23 23 /* Unrouted */
  168. #endif
  169. /*
  170. * Individual pin assignments for the B330/S330 and B365/S365.
  171. * Notice that the actual usage of these pins depends on the
  172. * PAD MUX settings, that is why the same number can potentially
  173. * appear several times. In the reference design each pin is only
  174. * used for one purpose. These were determined by inspecting the
  175. * S365 schematic.
  176. */
  177. #if defined(CONFIG_MACH_U300_BS330) || defined(CONFIG_MACH_U300_BS365) || \
  178. defined(CONFIG_MACH_U300_BS335)
  179. #define U300_GPIO_PIN_UART_RX 0
  180. #define U300_GPIO_PIN_UART_TX 1
  181. #define U300_GPIO_PIN_UART_CTS 2
  182. #define U300_GPIO_PIN_UART_RTS 3
  183. #define U300_GPIO_PIN_CAM_MAIN_STANDBY 4 /* Camera MAIN standby */
  184. #define U300_GPIO_PIN_GPIO05 5 /* Unrouted */
  185. #define U300_GPIO_PIN_MS_CD 6 /* Memory Stick Card insertion */
  186. #define U300_GPIO_PIN_GPIO07 7 /* Test point TP2430 */
  187. #define U300_GPIO_PIN_GPIO08 8 /* Test point TP2437 */
  188. #define U300_GPIO_PIN_GPIO09 9 /* Test point TP2431 */
  189. #define U300_GPIO_PIN_GPIO10 10 /* Test point TP2432 */
  190. #define U300_GPIO_PIN_MMC_CLKRET 11 /* Clock return from MMC/SD card */
  191. #define U300_GPIO_PIN_MMC_CD 12 /* MMC Card insertion detection */
  192. #define U300_GPIO_PIN_CAM_SUB_STANDBY 13 /* Camera SUB standby */
  193. #define U300_GPIO_PIN_GPIO14 14 /* Test point TP2436 */
  194. #define U300_GPIO_PIN_GPIO15 15 /* Unrouted */
  195. #define U300_GPIO_PIN_GPIO16 16 /* Test point TP2438 */
  196. #define U300_GPIO_PIN_PHFSENSE 17 /* Headphone jack sensing */
  197. #define U300_GPIO_PIN_GPIO18 18 /* Test point TP2439 */
  198. #define U300_GPIO_PIN_GPIO19 19 /* Routed somewhere */
  199. #define U300_GPIO_PIN_GPIO20 20 /* Unrouted */
  200. #define U300_GPIO_PIN_GPIO21 21 /* Unrouted */
  201. #define U300_GPIO_PIN_GPIO22 22 /* Unrouted */
  202. #define U300_GPIO_PIN_GPIO23 23 /* Unrouted */
  203. #define U300_GPIO_PIN_GPIO24 24 /* Unrouted */
  204. #define U300_GPIO_PIN_GPIO25 25 /* Unrouted */
  205. #define U300_GPIO_PIN_GPIO26 26 /* Unrouted */
  206. #define U300_GPIO_PIN_GPIO27 27 /* Unrouted */
  207. #define U300_GPIO_PIN_GPIO28 28 /* Unrouted */
  208. #define U300_GPIO_PIN_GPIO29 29 /* Unrouted */
  209. #define U300_GPIO_PIN_GPIO30 30 /* Unrouted */
  210. #define U300_GPIO_PIN_GPIO31 31 /* Unrouted */
  211. #define U300_GPIO_PIN_GPIO32 32 /* Unrouted */
  212. #define U300_GPIO_PIN_GPIO33 33 /* Unrouted */
  213. #define U300_GPIO_PIN_GPIO34 34 /* Unrouted */
  214. #define U300_GPIO_PIN_GPIO35 35 /* Unrouted */
  215. #define U300_GPIO_PIN_GPIO36 36 /* Unrouted */
  216. #define U300_GPIO_PIN_GPIO37 37 /* Unrouted */
  217. #define U300_GPIO_PIN_GPIO38 38 /* Unrouted */
  218. #define U300_GPIO_PIN_GPIO39 39 /* Unrouted */
  219. #ifdef CONFIG_MACH_U300_BS335
  220. #define U300_GPIO_PIN_GPIO40 40 /* Unrouted */
  221. #define U300_GPIO_PIN_GPIO41 41 /* Unrouted */
  222. #define U300_GPIO_PIN_GPIO42 42 /* Unrouted */
  223. #define U300_GPIO_PIN_GPIO43 43 /* Unrouted */
  224. #define U300_GPIO_PIN_GPIO44 44 /* Unrouted */
  225. #define U300_GPIO_PIN_GPIO45 45 /* Unrouted */
  226. #define U300_GPIO_PIN_GPIO46 46 /* Unrouted */
  227. #define U300_GPIO_PIN_GPIO47 47 /* Unrouted */
  228. #define U300_GPIO_PIN_GPIO48 48 /* Unrouted */
  229. #define U300_GPIO_PIN_GPIO49 49 /* Unrouted */
  230. #define U300_GPIO_PIN_GPIO50 50 /* Unrouted */
  231. #define U300_GPIO_PIN_GPIO51 51 /* Unrouted */
  232. #define U300_GPIO_PIN_GPIO52 52 /* Unrouted */
  233. #define U300_GPIO_PIN_GPIO53 53 /* Unrouted */
  234. #define U300_GPIO_PIN_GPIO54 54 /* Unrouted */
  235. #define U300_GPIO_PIN_GPIO55 55 /* Unrouted */
  236. #endif
  237. #endif
  238. /* translates a pin number to a port number */
  239. #define PIN_TO_PORT(val) (val >> 3)
  240. /* These can be found in arch/arm/mach-u300/gpio.c */
  241. extern int gpio_is_valid(int number);
  242. extern int gpio_request(unsigned gpio, const char *label);
  243. extern void gpio_free(unsigned gpio);
  244. extern int gpio_direction_input(unsigned gpio);
  245. extern int gpio_direction_output(unsigned gpio, int value);
  246. extern int gpio_register_callback(unsigned gpio,
  247. int (*func)(void *arg),
  248. void *);
  249. extern int gpio_unregister_callback(unsigned gpio);
  250. extern void enable_irq_on_gpio_pin(unsigned gpio, int edge);
  251. extern void disable_irq_on_gpio_pin(unsigned gpio);
  252. extern void gpio_pullup(unsigned gpio, int value);
  253. extern int gpio_get_value(unsigned gpio);
  254. extern void gpio_set_value(unsigned gpio, int value);
  255. /* wrappers to sleep-enable the previous two functions */
  256. static inline unsigned gpio_to_irq(unsigned gpio)
  257. {
  258. return PIN_TO_PORT(gpio) + IRQ_U300_GPIO_PORT0;
  259. }
  260. static inline unsigned irq_to_gpio(unsigned irq)
  261. {
  262. /*
  263. * FIXME: This is no 1-1 mapping at all, it points to the
  264. * whole block of 8 pins.
  265. */
  266. return (irq - IRQ_U300_GPIO_PORT0) << 3;
  267. }
  268. #endif