mfp-pxa3xx.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #ifndef __ASM_ARCH_MFP_PXA3XX_H
  2. #define __ASM_ARCH_MFP_PXA3XX_H
  3. #define MFPR_BASE (0x40e10000)
  4. #define MFPR_SIZE (PAGE_SIZE)
  5. /* MFPR register bit definitions */
  6. #define MFPR_PULL_SEL (0x1 << 15)
  7. #define MFPR_PULLUP_EN (0x1 << 14)
  8. #define MFPR_PULLDOWN_EN (0x1 << 13)
  9. #define MFPR_SLEEP_SEL (0x1 << 9)
  10. #define MFPR_SLEEP_OE_N (0x1 << 7)
  11. #define MFPR_EDGE_CLEAR (0x1 << 6)
  12. #define MFPR_EDGE_FALL_EN (0x1 << 5)
  13. #define MFPR_EDGE_RISE_EN (0x1 << 4)
  14. #define MFPR_SLEEP_DATA(x) ((x) << 8)
  15. #define MFPR_DRIVE(x) (((x) & 0x7) << 10)
  16. #define MFPR_AF_SEL(x) (((x) & 0x7) << 0)
  17. #define MFPR_EDGE_NONE (0)
  18. #define MFPR_EDGE_RISE (MFPR_EDGE_RISE_EN)
  19. #define MFPR_EDGE_FALL (MFPR_EDGE_FALL_EN)
  20. #define MFPR_EDGE_BOTH (MFPR_EDGE_RISE | MFPR_EDGE_FALL)
  21. /*
  22. * Table that determines the low power modes outputs, with actual settings
  23. * used in parentheses for don't-care values. Except for the float output,
  24. * the configured driven and pulled levels match, so if there is a need for
  25. * non-LPM pulled output, the same configuration could probably be used.
  26. *
  27. * Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel
  28. * (bit 7) (bit 8) (bit 14) (bit 13) (bit 15)
  29. *
  30. * Input 0 X(0) X(0) X(0) 0
  31. * Drive 0 0 0 0 X(1) 0
  32. * Drive 1 0 1 X(1) 0 0
  33. * Pull hi (1) 1 X(1) 1 0 0
  34. * Pull lo (0) 1 X(0) 0 1 0
  35. * Z (float) 1 X(0) 0 0 0
  36. */
  37. #define MFPR_LPM_INPUT (0)
  38. #define MFPR_LPM_DRIVE_LOW (MFPR_SLEEP_DATA(0) | MFPR_PULLDOWN_EN)
  39. #define MFPR_LPM_DRIVE_HIGH (MFPR_SLEEP_DATA(1) | MFPR_PULLUP_EN)
  40. #define MFPR_LPM_PULL_LOW (MFPR_LPM_DRIVE_LOW | MFPR_SLEEP_OE_N)
  41. #define MFPR_LPM_PULL_HIGH (MFPR_LPM_DRIVE_HIGH | MFPR_SLEEP_OE_N)
  42. #define MFPR_LPM_FLOAT (MFPR_SLEEP_OE_N)
  43. #define MFPR_LPM_MASK (0xe080)
  44. /*
  45. * The pullup and pulldown state of the MFP pin at run mode is by default
  46. * determined by the selected alternate function. In case that some buggy
  47. * devices need to override this default behavior, the definitions below
  48. * indicates the setting of corresponding MFPR bits
  49. *
  50. * Definition pull_sel pullup_en pulldown_en
  51. * MFPR_PULL_NONE 0 0 0
  52. * MFPR_PULL_LOW 1 0 1
  53. * MFPR_PULL_HIGH 1 1 0
  54. * MFPR_PULL_BOTH 1 1 1
  55. */
  56. #define MFPR_PULL_NONE (0)
  57. #define MFPR_PULL_LOW (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
  58. #define MFPR_PULL_BOTH (MFPR_PULL_LOW | MFPR_PULLUP_EN)
  59. #define MFPR_PULL_HIGH (MFPR_PULL_SEL | MFPR_PULLUP_EN)
  60. /* PXA3xx common MFP configurations - processor specific ones defined
  61. * in mfp-pxa300.h and mfp-pxa320.h
  62. */
  63. #define GPIO0_GPIO MFP_CFG(GPIO0, AF0)
  64. #define GPIO1_GPIO MFP_CFG(GPIO1, AF0)
  65. #define GPIO2_GPIO MFP_CFG(GPIO2, AF0)
  66. #define GPIO3_GPIO MFP_CFG(GPIO3, AF0)
  67. #define GPIO4_GPIO MFP_CFG(GPIO4, AF0)
  68. #define GPIO5_GPIO MFP_CFG(GPIO5, AF0)
  69. #define GPIO6_GPIO MFP_CFG(GPIO6, AF0)
  70. #define GPIO7_GPIO MFP_CFG(GPIO7, AF0)
  71. #define GPIO8_GPIO MFP_CFG(GPIO8, AF0)
  72. #define GPIO9_GPIO MFP_CFG(GPIO9, AF0)
  73. #define GPIO10_GPIO MFP_CFG(GPIO10, AF0)
  74. #define GPIO11_GPIO MFP_CFG(GPIO11, AF0)
  75. #define GPIO12_GPIO MFP_CFG(GPIO12, AF0)
  76. #define GPIO13_GPIO MFP_CFG(GPIO13, AF0)
  77. #define GPIO14_GPIO MFP_CFG(GPIO14, AF0)
  78. #define GPIO15_GPIO MFP_CFG(GPIO15, AF0)
  79. #define GPIO16_GPIO MFP_CFG(GPIO16, AF0)
  80. #define GPIO17_GPIO MFP_CFG(GPIO17, AF0)
  81. #define GPIO18_GPIO MFP_CFG(GPIO18, AF0)
  82. #define GPIO19_GPIO MFP_CFG(GPIO19, AF0)
  83. #define GPIO20_GPIO MFP_CFG(GPIO20, AF0)
  84. #define GPIO21_GPIO MFP_CFG(GPIO21, AF0)
  85. #define GPIO22_GPIO MFP_CFG(GPIO22, AF0)
  86. #define GPIO23_GPIO MFP_CFG(GPIO23, AF0)
  87. #define GPIO24_GPIO MFP_CFG(GPIO24, AF0)
  88. #define GPIO25_GPIO MFP_CFG(GPIO25, AF0)
  89. #define GPIO26_GPIO MFP_CFG(GPIO26, AF0)
  90. #define GPIO27_GPIO MFP_CFG(GPIO27, AF0)
  91. #define GPIO28_GPIO MFP_CFG(GPIO28, AF0)
  92. #define GPIO29_GPIO MFP_CFG(GPIO29, AF0)
  93. #define GPIO30_GPIO MFP_CFG(GPIO30, AF0)
  94. #define GPIO31_GPIO MFP_CFG(GPIO31, AF0)
  95. #define GPIO32_GPIO MFP_CFG(GPIO32, AF0)
  96. #define GPIO33_GPIO MFP_CFG(GPIO33, AF0)
  97. #define GPIO34_GPIO MFP_CFG(GPIO34, AF0)
  98. #define GPIO35_GPIO MFP_CFG(GPIO35, AF0)
  99. #define GPIO36_GPIO MFP_CFG(GPIO36, AF0)
  100. #define GPIO37_GPIO MFP_CFG(GPIO37, AF0)
  101. #define GPIO38_GPIO MFP_CFG(GPIO38, AF0)
  102. #define GPIO39_GPIO MFP_CFG(GPIO39, AF0)
  103. #define GPIO40_GPIO MFP_CFG(GPIO40, AF0)
  104. #define GPIO41_GPIO MFP_CFG(GPIO41, AF0)
  105. #define GPIO42_GPIO MFP_CFG(GPIO42, AF0)
  106. #define GPIO43_GPIO MFP_CFG(GPIO43, AF0)
  107. #define GPIO44_GPIO MFP_CFG(GPIO44, AF0)
  108. #define GPIO45_GPIO MFP_CFG(GPIO45, AF0)
  109. #define GPIO47_GPIO MFP_CFG(GPIO47, AF0)
  110. #define GPIO48_GPIO MFP_CFG(GPIO48, AF0)
  111. #define GPIO53_GPIO MFP_CFG(GPIO53, AF0)
  112. #define GPIO54_GPIO MFP_CFG(GPIO54, AF0)
  113. #define GPIO55_GPIO MFP_CFG(GPIO55, AF0)
  114. #define GPIO57_GPIO MFP_CFG(GPIO57, AF0)
  115. #define GPIO63_GPIO MFP_CFG(GPIO63, AF0)
  116. #define GPIO64_GPIO MFP_CFG(GPIO64, AF0)
  117. #define GPIO65_GPIO MFP_CFG(GPIO65, AF0)
  118. #define GPIO66_GPIO MFP_CFG(GPIO66, AF0)
  119. #define GPIO67_GPIO MFP_CFG(GPIO67, AF0)
  120. #define GPIO68_GPIO MFP_CFG(GPIO68, AF0)
  121. #define GPIO69_GPIO MFP_CFG(GPIO69, AF0)
  122. #define GPIO70_GPIO MFP_CFG(GPIO70, AF0)
  123. #define GPIO71_GPIO MFP_CFG(GPIO71, AF0)
  124. #define GPIO72_GPIO MFP_CFG(GPIO72, AF0)
  125. #define GPIO73_GPIO MFP_CFG(GPIO73, AF0)
  126. #define GPIO74_GPIO MFP_CFG(GPIO74, AF0)
  127. #define GPIO75_GPIO MFP_CFG(GPIO75, AF0)
  128. #define GPIO76_GPIO MFP_CFG(GPIO76, AF0)
  129. #define GPIO77_GPIO MFP_CFG(GPIO77, AF0)
  130. #define GPIO78_GPIO MFP_CFG(GPIO78, AF0)
  131. #define GPIO79_GPIO MFP_CFG(GPIO79, AF0)
  132. #define GPIO80_GPIO MFP_CFG(GPIO80, AF0)
  133. #define GPIO81_GPIO MFP_CFG(GPIO81, AF0)
  134. #define GPIO82_GPIO MFP_CFG(GPIO82, AF0)
  135. #define GPIO83_GPIO MFP_CFG(GPIO83, AF0)
  136. #define GPIO84_GPIO MFP_CFG(GPIO84, AF0)
  137. #define GPIO85_GPIO MFP_CFG(GPIO85, AF0)
  138. #define GPIO86_GPIO MFP_CFG(GPIO86, AF0)
  139. #define GPIO87_GPIO MFP_CFG(GPIO87, AF0)
  140. #define GPIO88_GPIO MFP_CFG(GPIO88, AF0)
  141. #define GPIO89_GPIO MFP_CFG(GPIO89, AF0)
  142. #define GPIO90_GPIO MFP_CFG(GPIO90, AF0)
  143. #define GPIO91_GPIO MFP_CFG(GPIO91, AF0)
  144. #define GPIO92_GPIO MFP_CFG(GPIO92, AF0)
  145. #define GPIO93_GPIO MFP_CFG(GPIO93, AF0)
  146. #define GPIO94_GPIO MFP_CFG(GPIO94, AF0)
  147. #define GPIO95_GPIO MFP_CFG(GPIO95, AF0)
  148. #define GPIO96_GPIO MFP_CFG(GPIO96, AF0)
  149. #define GPIO97_GPIO MFP_CFG(GPIO97, AF0)
  150. #define GPIO98_GPIO MFP_CFG(GPIO98, AF0)
  151. #define GPIO99_GPIO MFP_CFG(GPIO99, AF0)
  152. #define GPIO100_GPIO MFP_CFG(GPIO100, AF0)
  153. #define GPIO101_GPIO MFP_CFG(GPIO101, AF0)
  154. #define GPIO102_GPIO MFP_CFG(GPIO102, AF0)
  155. #define GPIO103_GPIO MFP_CFG(GPIO103, AF0)
  156. #define GPIO104_GPIO MFP_CFG(GPIO104, AF0)
  157. #define GPIO105_GPIO MFP_CFG(GPIO105, AF0)
  158. #define GPIO106_GPIO MFP_CFG(GPIO106, AF0)
  159. #define GPIO107_GPIO MFP_CFG(GPIO107, AF0)
  160. #define GPIO108_GPIO MFP_CFG(GPIO108, AF0)
  161. #define GPIO109_GPIO MFP_CFG(GPIO109, AF0)
  162. #define GPIO110_GPIO MFP_CFG(GPIO110, AF0)
  163. #define GPIO111_GPIO MFP_CFG(GPIO111, AF0)
  164. #define GPIO112_GPIO MFP_CFG(GPIO112, AF0)
  165. #define GPIO113_GPIO MFP_CFG(GPIO113, AF0)
  166. #define GPIO114_GPIO MFP_CFG(GPIO114, AF0)
  167. #define GPIO115_GPIO MFP_CFG(GPIO115, AF0)
  168. #define GPIO116_GPIO MFP_CFG(GPIO116, AF0)
  169. #define GPIO117_GPIO MFP_CFG(GPIO117, AF0)
  170. #define GPIO118_GPIO MFP_CFG(GPIO118, AF0)
  171. #define GPIO119_GPIO MFP_CFG(GPIO119, AF0)
  172. #define GPIO120_GPIO MFP_CFG(GPIO120, AF0)
  173. #define GPIO121_GPIO MFP_CFG(GPIO121, AF0)
  174. #define GPIO122_GPIO MFP_CFG(GPIO122, AF0)
  175. #define GPIO123_GPIO MFP_CFG(GPIO123, AF0)
  176. #define GPIO124_GPIO MFP_CFG(GPIO124, AF0)
  177. #define GPIO125_GPIO MFP_CFG(GPIO125, AF0)
  178. #define GPIO126_GPIO MFP_CFG(GPIO126, AF0)
  179. #define GPIO127_GPIO MFP_CFG(GPIO127, AF0)
  180. #define GPIO0_2_GPIO MFP_CFG(GPIO0_2, AF0)
  181. #define GPIO1_2_GPIO MFP_CFG(GPIO1_2, AF0)
  182. #define GPIO2_2_GPIO MFP_CFG(GPIO2_2, AF0)
  183. #define GPIO3_2_GPIO MFP_CFG(GPIO3_2, AF0)
  184. #define GPIO4_2_GPIO MFP_CFG(GPIO4_2, AF0)
  185. #define GPIO5_2_GPIO MFP_CFG(GPIO5_2, AF0)
  186. #define GPIO6_2_GPIO MFP_CFG(GPIO6_2, AF0)
  187. /*
  188. * each MFP pin will have a MFPR register, since the offset of the
  189. * register varies between processors, the processor specific code
  190. * should initialize the pin offsets by pxa3xx_mfp_init_addr()
  191. *
  192. * pxa3xx_mfp_init_addr - accepts a table of "pxa3xx_mfp_addr_map"
  193. * structure, which represents a range of MFP pins from "start" to
  194. * "end", with the offset begining at "offset", to define a single
  195. * pin, let "end" = -1
  196. *
  197. * use
  198. *
  199. * MFP_ADDR_X() to define a range of pins
  200. * MFP_ADDR() to define a single pin
  201. * MFP_ADDR_END to signal the end of pin offset definitions
  202. */
  203. struct pxa3xx_mfp_addr_map {
  204. unsigned int start;
  205. unsigned int end;
  206. unsigned long offset;
  207. };
  208. #define MFP_ADDR_X(start, end, offset) \
  209. { MFP_PIN_##start, MFP_PIN_##end, offset }
  210. #define MFP_ADDR(pin, offset) \
  211. { MFP_PIN_##pin, -1, offset }
  212. #define MFP_ADDR_END { MFP_PIN_INVALID, 0 }
  213. /*
  214. * pxa3xx_mfp_read()/pxa3xx_mfp_write() - for direct read/write access
  215. * to the MFPR register
  216. */
  217. unsigned long pxa3xx_mfp_read(int mfp);
  218. void pxa3xx_mfp_write(int mfp, unsigned long mfpr_val);
  219. /*
  220. * pxa3xx_mfp_config - configure the MFPR registers
  221. *
  222. * used by board specific initialization code
  223. */
  224. void pxa3xx_mfp_config(unsigned long *mfp_cfgs, int num);
  225. /*
  226. * pxa3xx_mfp_init_addr() - initialize the mapping between mfp pin
  227. * index and MFPR register offset
  228. *
  229. * used by processor specific code
  230. */
  231. void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *);
  232. void __init pxa3xx_init_mfp(void);
  233. #endif /* __ASM_ARCH_MFP_PXA3XX_H */