gpio.c 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878
  1. /*
  2. * linux/arch/arm/plat-omap/gpio.c
  3. *
  4. * Support functions for OMAP GPIO
  5. *
  6. * Copyright (C) 2003-2005 Nokia Corporation
  7. * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License version 2 as
  11. * published by the Free Software Foundation.
  12. */
  13. #include <linux/init.h>
  14. #include <linux/module.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/sysdev.h>
  17. #include <linux/err.h>
  18. #include <linux/clk.h>
  19. #include <linux/io.h>
  20. #include <mach/hardware.h>
  21. #include <asm/irq.h>
  22. #include <mach/irqs.h>
  23. #include <mach/gpio.h>
  24. #include <asm/mach/irq.h>
  25. /*
  26. * OMAP1510 GPIO registers
  27. */
  28. #define OMAP1510_GPIO_BASE IO_ADDRESS(0xfffce000)
  29. #define OMAP1510_GPIO_DATA_INPUT 0x00
  30. #define OMAP1510_GPIO_DATA_OUTPUT 0x04
  31. #define OMAP1510_GPIO_DIR_CONTROL 0x08
  32. #define OMAP1510_GPIO_INT_CONTROL 0x0c
  33. #define OMAP1510_GPIO_INT_MASK 0x10
  34. #define OMAP1510_GPIO_INT_STATUS 0x14
  35. #define OMAP1510_GPIO_PIN_CONTROL 0x18
  36. #define OMAP1510_IH_GPIO_BASE 64
  37. /*
  38. * OMAP1610 specific GPIO registers
  39. */
  40. #define OMAP1610_GPIO1_BASE IO_ADDRESS(0xfffbe400)
  41. #define OMAP1610_GPIO2_BASE IO_ADDRESS(0xfffbec00)
  42. #define OMAP1610_GPIO3_BASE IO_ADDRESS(0xfffbb400)
  43. #define OMAP1610_GPIO4_BASE IO_ADDRESS(0xfffbbc00)
  44. #define OMAP1610_GPIO_REVISION 0x0000
  45. #define OMAP1610_GPIO_SYSCONFIG 0x0010
  46. #define OMAP1610_GPIO_SYSSTATUS 0x0014
  47. #define OMAP1610_GPIO_IRQSTATUS1 0x0018
  48. #define OMAP1610_GPIO_IRQENABLE1 0x001c
  49. #define OMAP1610_GPIO_WAKEUPENABLE 0x0028
  50. #define OMAP1610_GPIO_DATAIN 0x002c
  51. #define OMAP1610_GPIO_DATAOUT 0x0030
  52. #define OMAP1610_GPIO_DIRECTION 0x0034
  53. #define OMAP1610_GPIO_EDGE_CTRL1 0x0038
  54. #define OMAP1610_GPIO_EDGE_CTRL2 0x003c
  55. #define OMAP1610_GPIO_CLEAR_IRQENABLE1 0x009c
  56. #define OMAP1610_GPIO_CLEAR_WAKEUPENA 0x00a8
  57. #define OMAP1610_GPIO_CLEAR_DATAOUT 0x00b0
  58. #define OMAP1610_GPIO_SET_IRQENABLE1 0x00dc
  59. #define OMAP1610_GPIO_SET_WAKEUPENA 0x00e8
  60. #define OMAP1610_GPIO_SET_DATAOUT 0x00f0
  61. /*
  62. * OMAP730 specific GPIO registers
  63. */
  64. #define OMAP730_GPIO1_BASE IO_ADDRESS(0xfffbc000)
  65. #define OMAP730_GPIO2_BASE IO_ADDRESS(0xfffbc800)
  66. #define OMAP730_GPIO3_BASE IO_ADDRESS(0xfffbd000)
  67. #define OMAP730_GPIO4_BASE IO_ADDRESS(0xfffbd800)
  68. #define OMAP730_GPIO5_BASE IO_ADDRESS(0xfffbe000)
  69. #define OMAP730_GPIO6_BASE IO_ADDRESS(0xfffbe800)
  70. #define OMAP730_GPIO_DATA_INPUT 0x00
  71. #define OMAP730_GPIO_DATA_OUTPUT 0x04
  72. #define OMAP730_GPIO_DIR_CONTROL 0x08
  73. #define OMAP730_GPIO_INT_CONTROL 0x0c
  74. #define OMAP730_GPIO_INT_MASK 0x10
  75. #define OMAP730_GPIO_INT_STATUS 0x14
  76. /*
  77. * omap24xx specific GPIO registers
  78. */
  79. #define OMAP242X_GPIO1_BASE IO_ADDRESS(0x48018000)
  80. #define OMAP242X_GPIO2_BASE IO_ADDRESS(0x4801a000)
  81. #define OMAP242X_GPIO3_BASE IO_ADDRESS(0x4801c000)
  82. #define OMAP242X_GPIO4_BASE IO_ADDRESS(0x4801e000)
  83. #define OMAP243X_GPIO1_BASE IO_ADDRESS(0x4900C000)
  84. #define OMAP243X_GPIO2_BASE IO_ADDRESS(0x4900E000)
  85. #define OMAP243X_GPIO3_BASE IO_ADDRESS(0x49010000)
  86. #define OMAP243X_GPIO4_BASE IO_ADDRESS(0x49012000)
  87. #define OMAP243X_GPIO5_BASE IO_ADDRESS(0x480B6000)
  88. #define OMAP24XX_GPIO_REVISION 0x0000
  89. #define OMAP24XX_GPIO_SYSCONFIG 0x0010
  90. #define OMAP24XX_GPIO_SYSSTATUS 0x0014
  91. #define OMAP24XX_GPIO_IRQSTATUS1 0x0018
  92. #define OMAP24XX_GPIO_IRQSTATUS2 0x0028
  93. #define OMAP24XX_GPIO_IRQENABLE2 0x002c
  94. #define OMAP24XX_GPIO_IRQENABLE1 0x001c
  95. #define OMAP24XX_GPIO_WAKE_EN 0x0020
  96. #define OMAP24XX_GPIO_CTRL 0x0030
  97. #define OMAP24XX_GPIO_OE 0x0034
  98. #define OMAP24XX_GPIO_DATAIN 0x0038
  99. #define OMAP24XX_GPIO_DATAOUT 0x003c
  100. #define OMAP24XX_GPIO_LEVELDETECT0 0x0040
  101. #define OMAP24XX_GPIO_LEVELDETECT1 0x0044
  102. #define OMAP24XX_GPIO_RISINGDETECT 0x0048
  103. #define OMAP24XX_GPIO_FALLINGDETECT 0x004c
  104. #define OMAP24XX_GPIO_DEBOUNCE_EN 0x0050
  105. #define OMAP24XX_GPIO_DEBOUNCE_VAL 0x0054
  106. #define OMAP24XX_GPIO_CLEARIRQENABLE1 0x0060
  107. #define OMAP24XX_GPIO_SETIRQENABLE1 0x0064
  108. #define OMAP24XX_GPIO_CLEARWKUENA 0x0080
  109. #define OMAP24XX_GPIO_SETWKUENA 0x0084
  110. #define OMAP24XX_GPIO_CLEARDATAOUT 0x0090
  111. #define OMAP24XX_GPIO_SETDATAOUT 0x0094
  112. /*
  113. * omap34xx specific GPIO registers
  114. */
  115. #define OMAP34XX_GPIO1_BASE IO_ADDRESS(0x48310000)
  116. #define OMAP34XX_GPIO2_BASE IO_ADDRESS(0x49050000)
  117. #define OMAP34XX_GPIO3_BASE IO_ADDRESS(0x49052000)
  118. #define OMAP34XX_GPIO4_BASE IO_ADDRESS(0x49054000)
  119. #define OMAP34XX_GPIO5_BASE IO_ADDRESS(0x49056000)
  120. #define OMAP34XX_GPIO6_BASE IO_ADDRESS(0x49058000)
  121. #define OMAP_MPUIO_VBASE IO_ADDRESS(OMAP_MPUIO_BASE)
  122. struct gpio_bank {
  123. void __iomem *base;
  124. u16 irq;
  125. u16 virtual_irq_start;
  126. int method;
  127. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  128. u32 suspend_wakeup;
  129. u32 saved_wakeup;
  130. #endif
  131. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  132. u32 non_wakeup_gpios;
  133. u32 enabled_non_wakeup_gpios;
  134. u32 saved_datain;
  135. u32 saved_fallingdetect;
  136. u32 saved_risingdetect;
  137. #endif
  138. u32 level_mask;
  139. spinlock_t lock;
  140. struct gpio_chip chip;
  141. };
  142. #define METHOD_MPUIO 0
  143. #define METHOD_GPIO_1510 1
  144. #define METHOD_GPIO_1610 2
  145. #define METHOD_GPIO_730 3
  146. #define METHOD_GPIO_24XX 4
  147. #ifdef CONFIG_ARCH_OMAP16XX
  148. static struct gpio_bank gpio_bank_1610[5] = {
  149. { OMAP_MPUIO_VBASE, INT_MPUIO, IH_MPUIO_BASE, METHOD_MPUIO},
  150. { OMAP1610_GPIO1_BASE, INT_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_1610 },
  151. { OMAP1610_GPIO2_BASE, INT_1610_GPIO_BANK2, IH_GPIO_BASE + 16, METHOD_GPIO_1610 },
  152. { OMAP1610_GPIO3_BASE, INT_1610_GPIO_BANK3, IH_GPIO_BASE + 32, METHOD_GPIO_1610 },
  153. { OMAP1610_GPIO4_BASE, INT_1610_GPIO_BANK4, IH_GPIO_BASE + 48, METHOD_GPIO_1610 },
  154. };
  155. #endif
  156. #ifdef CONFIG_ARCH_OMAP15XX
  157. static struct gpio_bank gpio_bank_1510[2] = {
  158. { OMAP_MPUIO_VBASE, INT_MPUIO, IH_MPUIO_BASE, METHOD_MPUIO },
  159. { OMAP1510_GPIO_BASE, INT_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_1510 }
  160. };
  161. #endif
  162. #ifdef CONFIG_ARCH_OMAP730
  163. static struct gpio_bank gpio_bank_730[7] = {
  164. { OMAP_MPUIO_VBASE, INT_730_MPUIO, IH_MPUIO_BASE, METHOD_MPUIO },
  165. { OMAP730_GPIO1_BASE, INT_730_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_730 },
  166. { OMAP730_GPIO2_BASE, INT_730_GPIO_BANK2, IH_GPIO_BASE + 32, METHOD_GPIO_730 },
  167. { OMAP730_GPIO3_BASE, INT_730_GPIO_BANK3, IH_GPIO_BASE + 64, METHOD_GPIO_730 },
  168. { OMAP730_GPIO4_BASE, INT_730_GPIO_BANK4, IH_GPIO_BASE + 96, METHOD_GPIO_730 },
  169. { OMAP730_GPIO5_BASE, INT_730_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_730 },
  170. { OMAP730_GPIO6_BASE, INT_730_GPIO_BANK6, IH_GPIO_BASE + 160, METHOD_GPIO_730 },
  171. };
  172. #endif
  173. #ifdef CONFIG_ARCH_OMAP24XX
  174. static struct gpio_bank gpio_bank_242x[4] = {
  175. { OMAP242X_GPIO1_BASE, INT_24XX_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_24XX },
  176. { OMAP242X_GPIO2_BASE, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32, METHOD_GPIO_24XX },
  177. { OMAP242X_GPIO3_BASE, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64, METHOD_GPIO_24XX },
  178. { OMAP242X_GPIO4_BASE, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96, METHOD_GPIO_24XX },
  179. };
  180. static struct gpio_bank gpio_bank_243x[5] = {
  181. { OMAP243X_GPIO1_BASE, INT_24XX_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_24XX },
  182. { OMAP243X_GPIO2_BASE, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32, METHOD_GPIO_24XX },
  183. { OMAP243X_GPIO3_BASE, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64, METHOD_GPIO_24XX },
  184. { OMAP243X_GPIO4_BASE, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96, METHOD_GPIO_24XX },
  185. { OMAP243X_GPIO5_BASE, INT_24XX_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_24XX },
  186. };
  187. #endif
  188. #ifdef CONFIG_ARCH_OMAP34XX
  189. static struct gpio_bank gpio_bank_34xx[6] = {
  190. { OMAP34XX_GPIO1_BASE, INT_34XX_GPIO_BANK1, IH_GPIO_BASE, METHOD_GPIO_24XX },
  191. { OMAP34XX_GPIO2_BASE, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32, METHOD_GPIO_24XX },
  192. { OMAP34XX_GPIO3_BASE, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64, METHOD_GPIO_24XX },
  193. { OMAP34XX_GPIO4_BASE, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96, METHOD_GPIO_24XX },
  194. { OMAP34XX_GPIO5_BASE, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128, METHOD_GPIO_24XX },
  195. { OMAP34XX_GPIO6_BASE, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160, METHOD_GPIO_24XX },
  196. };
  197. #endif
  198. static struct gpio_bank *gpio_bank;
  199. static int gpio_bank_count;
  200. static inline struct gpio_bank *get_gpio_bank(int gpio)
  201. {
  202. if (cpu_is_omap15xx()) {
  203. if (OMAP_GPIO_IS_MPUIO(gpio))
  204. return &gpio_bank[0];
  205. return &gpio_bank[1];
  206. }
  207. if (cpu_is_omap16xx()) {
  208. if (OMAP_GPIO_IS_MPUIO(gpio))
  209. return &gpio_bank[0];
  210. return &gpio_bank[1 + (gpio >> 4)];
  211. }
  212. if (cpu_is_omap730()) {
  213. if (OMAP_GPIO_IS_MPUIO(gpio))
  214. return &gpio_bank[0];
  215. return &gpio_bank[1 + (gpio >> 5)];
  216. }
  217. if (cpu_is_omap24xx())
  218. return &gpio_bank[gpio >> 5];
  219. if (cpu_is_omap34xx())
  220. return &gpio_bank[gpio >> 5];
  221. }
  222. static inline int get_gpio_index(int gpio)
  223. {
  224. if (cpu_is_omap730())
  225. return gpio & 0x1f;
  226. if (cpu_is_omap24xx())
  227. return gpio & 0x1f;
  228. if (cpu_is_omap34xx())
  229. return gpio & 0x1f;
  230. return gpio & 0x0f;
  231. }
  232. static inline int gpio_valid(int gpio)
  233. {
  234. if (gpio < 0)
  235. return -1;
  236. if (cpu_class_is_omap1() && OMAP_GPIO_IS_MPUIO(gpio)) {
  237. if (gpio >= OMAP_MAX_GPIO_LINES + 16)
  238. return -1;
  239. return 0;
  240. }
  241. if (cpu_is_omap15xx() && gpio < 16)
  242. return 0;
  243. if ((cpu_is_omap16xx()) && gpio < 64)
  244. return 0;
  245. if (cpu_is_omap730() && gpio < 192)
  246. return 0;
  247. if (cpu_is_omap24xx() && gpio < 128)
  248. return 0;
  249. if (cpu_is_omap34xx() && gpio < 160)
  250. return 0;
  251. return -1;
  252. }
  253. static int check_gpio(int gpio)
  254. {
  255. if (unlikely(gpio_valid(gpio)) < 0) {
  256. printk(KERN_ERR "omap-gpio: invalid GPIO %d\n", gpio);
  257. dump_stack();
  258. return -1;
  259. }
  260. return 0;
  261. }
  262. static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
  263. {
  264. void __iomem *reg = bank->base;
  265. u32 l;
  266. switch (bank->method) {
  267. #ifdef CONFIG_ARCH_OMAP1
  268. case METHOD_MPUIO:
  269. reg += OMAP_MPUIO_IO_CNTL;
  270. break;
  271. #endif
  272. #ifdef CONFIG_ARCH_OMAP15XX
  273. case METHOD_GPIO_1510:
  274. reg += OMAP1510_GPIO_DIR_CONTROL;
  275. break;
  276. #endif
  277. #ifdef CONFIG_ARCH_OMAP16XX
  278. case METHOD_GPIO_1610:
  279. reg += OMAP1610_GPIO_DIRECTION;
  280. break;
  281. #endif
  282. #ifdef CONFIG_ARCH_OMAP730
  283. case METHOD_GPIO_730:
  284. reg += OMAP730_GPIO_DIR_CONTROL;
  285. break;
  286. #endif
  287. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  288. case METHOD_GPIO_24XX:
  289. reg += OMAP24XX_GPIO_OE;
  290. break;
  291. #endif
  292. default:
  293. WARN_ON(1);
  294. return;
  295. }
  296. l = __raw_readl(reg);
  297. if (is_input)
  298. l |= 1 << gpio;
  299. else
  300. l &= ~(1 << gpio);
  301. __raw_writel(l, reg);
  302. }
  303. void omap_set_gpio_direction(int gpio, int is_input)
  304. {
  305. struct gpio_bank *bank;
  306. unsigned long flags;
  307. if (check_gpio(gpio) < 0)
  308. return;
  309. bank = get_gpio_bank(gpio);
  310. spin_lock_irqsave(&bank->lock, flags);
  311. _set_gpio_direction(bank, get_gpio_index(gpio), is_input);
  312. spin_unlock_irqrestore(&bank->lock, flags);
  313. }
  314. static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
  315. {
  316. void __iomem *reg = bank->base;
  317. u32 l = 0;
  318. switch (bank->method) {
  319. #ifdef CONFIG_ARCH_OMAP1
  320. case METHOD_MPUIO:
  321. reg += OMAP_MPUIO_OUTPUT;
  322. l = __raw_readl(reg);
  323. if (enable)
  324. l |= 1 << gpio;
  325. else
  326. l &= ~(1 << gpio);
  327. break;
  328. #endif
  329. #ifdef CONFIG_ARCH_OMAP15XX
  330. case METHOD_GPIO_1510:
  331. reg += OMAP1510_GPIO_DATA_OUTPUT;
  332. l = __raw_readl(reg);
  333. if (enable)
  334. l |= 1 << gpio;
  335. else
  336. l &= ~(1 << gpio);
  337. break;
  338. #endif
  339. #ifdef CONFIG_ARCH_OMAP16XX
  340. case METHOD_GPIO_1610:
  341. if (enable)
  342. reg += OMAP1610_GPIO_SET_DATAOUT;
  343. else
  344. reg += OMAP1610_GPIO_CLEAR_DATAOUT;
  345. l = 1 << gpio;
  346. break;
  347. #endif
  348. #ifdef CONFIG_ARCH_OMAP730
  349. case METHOD_GPIO_730:
  350. reg += OMAP730_GPIO_DATA_OUTPUT;
  351. l = __raw_readl(reg);
  352. if (enable)
  353. l |= 1 << gpio;
  354. else
  355. l &= ~(1 << gpio);
  356. break;
  357. #endif
  358. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  359. case METHOD_GPIO_24XX:
  360. if (enable)
  361. reg += OMAP24XX_GPIO_SETDATAOUT;
  362. else
  363. reg += OMAP24XX_GPIO_CLEARDATAOUT;
  364. l = 1 << gpio;
  365. break;
  366. #endif
  367. default:
  368. WARN_ON(1);
  369. return;
  370. }
  371. __raw_writel(l, reg);
  372. }
  373. void omap_set_gpio_dataout(int gpio, int enable)
  374. {
  375. struct gpio_bank *bank;
  376. unsigned long flags;
  377. if (check_gpio(gpio) < 0)
  378. return;
  379. bank = get_gpio_bank(gpio);
  380. spin_lock_irqsave(&bank->lock, flags);
  381. _set_gpio_dataout(bank, get_gpio_index(gpio), enable);
  382. spin_unlock_irqrestore(&bank->lock, flags);
  383. }
  384. int omap_get_gpio_datain(int gpio)
  385. {
  386. struct gpio_bank *bank;
  387. void __iomem *reg;
  388. if (check_gpio(gpio) < 0)
  389. return -EINVAL;
  390. bank = get_gpio_bank(gpio);
  391. reg = bank->base;
  392. switch (bank->method) {
  393. #ifdef CONFIG_ARCH_OMAP1
  394. case METHOD_MPUIO:
  395. reg += OMAP_MPUIO_INPUT_LATCH;
  396. break;
  397. #endif
  398. #ifdef CONFIG_ARCH_OMAP15XX
  399. case METHOD_GPIO_1510:
  400. reg += OMAP1510_GPIO_DATA_INPUT;
  401. break;
  402. #endif
  403. #ifdef CONFIG_ARCH_OMAP16XX
  404. case METHOD_GPIO_1610:
  405. reg += OMAP1610_GPIO_DATAIN;
  406. break;
  407. #endif
  408. #ifdef CONFIG_ARCH_OMAP730
  409. case METHOD_GPIO_730:
  410. reg += OMAP730_GPIO_DATA_INPUT;
  411. break;
  412. #endif
  413. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  414. case METHOD_GPIO_24XX:
  415. reg += OMAP24XX_GPIO_DATAIN;
  416. break;
  417. #endif
  418. default:
  419. return -EINVAL;
  420. }
  421. return (__raw_readl(reg)
  422. & (1 << get_gpio_index(gpio))) != 0;
  423. }
  424. #define MOD_REG_BIT(reg, bit_mask, set) \
  425. do { \
  426. int l = __raw_readl(base + reg); \
  427. if (set) l |= bit_mask; \
  428. else l &= ~bit_mask; \
  429. __raw_writel(l, base + reg); \
  430. } while(0)
  431. void omap_set_gpio_debounce(int gpio, int enable)
  432. {
  433. struct gpio_bank *bank;
  434. void __iomem *reg;
  435. u32 val, l = 1 << get_gpio_index(gpio);
  436. if (cpu_class_is_omap1())
  437. return;
  438. bank = get_gpio_bank(gpio);
  439. reg = bank->base;
  440. reg += OMAP24XX_GPIO_DEBOUNCE_EN;
  441. val = __raw_readl(reg);
  442. if (enable)
  443. val |= l;
  444. else
  445. val &= ~l;
  446. __raw_writel(val, reg);
  447. }
  448. EXPORT_SYMBOL(omap_set_gpio_debounce);
  449. void omap_set_gpio_debounce_time(int gpio, int enc_time)
  450. {
  451. struct gpio_bank *bank;
  452. void __iomem *reg;
  453. if (cpu_class_is_omap1())
  454. return;
  455. bank = get_gpio_bank(gpio);
  456. reg = bank->base;
  457. enc_time &= 0xff;
  458. reg += OMAP24XX_GPIO_DEBOUNCE_VAL;
  459. __raw_writel(enc_time, reg);
  460. }
  461. EXPORT_SYMBOL(omap_set_gpio_debounce_time);
  462. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  463. static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio,
  464. int trigger)
  465. {
  466. void __iomem *base = bank->base;
  467. u32 gpio_bit = 1 << gpio;
  468. MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
  469. trigger & IRQ_TYPE_LEVEL_LOW);
  470. MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
  471. trigger & IRQ_TYPE_LEVEL_HIGH);
  472. MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
  473. trigger & IRQ_TYPE_EDGE_RISING);
  474. MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
  475. trigger & IRQ_TYPE_EDGE_FALLING);
  476. if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
  477. if (trigger != 0)
  478. __raw_writel(1 << gpio, bank->base
  479. + OMAP24XX_GPIO_SETWKUENA);
  480. else
  481. __raw_writel(1 << gpio, bank->base
  482. + OMAP24XX_GPIO_CLEARWKUENA);
  483. } else {
  484. if (trigger != 0)
  485. bank->enabled_non_wakeup_gpios |= gpio_bit;
  486. else
  487. bank->enabled_non_wakeup_gpios &= ~gpio_bit;
  488. }
  489. bank->level_mask =
  490. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0) |
  491. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  492. }
  493. #endif
  494. static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
  495. {
  496. void __iomem *reg = bank->base;
  497. u32 l = 0;
  498. switch (bank->method) {
  499. #ifdef CONFIG_ARCH_OMAP1
  500. case METHOD_MPUIO:
  501. reg += OMAP_MPUIO_GPIO_INT_EDGE;
  502. l = __raw_readl(reg);
  503. if (trigger & IRQ_TYPE_EDGE_RISING)
  504. l |= 1 << gpio;
  505. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  506. l &= ~(1 << gpio);
  507. else
  508. goto bad;
  509. break;
  510. #endif
  511. #ifdef CONFIG_ARCH_OMAP15XX
  512. case METHOD_GPIO_1510:
  513. reg += OMAP1510_GPIO_INT_CONTROL;
  514. l = __raw_readl(reg);
  515. if (trigger & IRQ_TYPE_EDGE_RISING)
  516. l |= 1 << gpio;
  517. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  518. l &= ~(1 << gpio);
  519. else
  520. goto bad;
  521. break;
  522. #endif
  523. #ifdef CONFIG_ARCH_OMAP16XX
  524. case METHOD_GPIO_1610:
  525. if (gpio & 0x08)
  526. reg += OMAP1610_GPIO_EDGE_CTRL2;
  527. else
  528. reg += OMAP1610_GPIO_EDGE_CTRL1;
  529. gpio &= 0x07;
  530. l = __raw_readl(reg);
  531. l &= ~(3 << (gpio << 1));
  532. if (trigger & IRQ_TYPE_EDGE_RISING)
  533. l |= 2 << (gpio << 1);
  534. if (trigger & IRQ_TYPE_EDGE_FALLING)
  535. l |= 1 << (gpio << 1);
  536. if (trigger)
  537. /* Enable wake-up during idle for dynamic tick */
  538. __raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_SET_WAKEUPENA);
  539. else
  540. __raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA);
  541. break;
  542. #endif
  543. #ifdef CONFIG_ARCH_OMAP730
  544. case METHOD_GPIO_730:
  545. reg += OMAP730_GPIO_INT_CONTROL;
  546. l = __raw_readl(reg);
  547. if (trigger & IRQ_TYPE_EDGE_RISING)
  548. l |= 1 << gpio;
  549. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  550. l &= ~(1 << gpio);
  551. else
  552. goto bad;
  553. break;
  554. #endif
  555. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  556. case METHOD_GPIO_24XX:
  557. set_24xx_gpio_triggering(bank, gpio, trigger);
  558. break;
  559. #endif
  560. default:
  561. goto bad;
  562. }
  563. __raw_writel(l, reg);
  564. return 0;
  565. bad:
  566. return -EINVAL;
  567. }
  568. static int gpio_irq_type(unsigned irq, unsigned type)
  569. {
  570. struct gpio_bank *bank;
  571. unsigned gpio;
  572. int retval;
  573. unsigned long flags;
  574. if (!cpu_class_is_omap2() && irq > IH_MPUIO_BASE)
  575. gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
  576. else
  577. gpio = irq - IH_GPIO_BASE;
  578. if (check_gpio(gpio) < 0)
  579. return -EINVAL;
  580. if (type & ~IRQ_TYPE_SENSE_MASK)
  581. return -EINVAL;
  582. /* OMAP1 allows only only edge triggering */
  583. if (!cpu_class_is_omap2()
  584. && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
  585. return -EINVAL;
  586. bank = get_irq_chip_data(irq);
  587. spin_lock_irqsave(&bank->lock, flags);
  588. retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type);
  589. if (retval == 0) {
  590. irq_desc[irq].status &= ~IRQ_TYPE_SENSE_MASK;
  591. irq_desc[irq].status |= type;
  592. }
  593. spin_unlock_irqrestore(&bank->lock, flags);
  594. if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
  595. __set_irq_handler_unlocked(irq, handle_level_irq);
  596. else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  597. __set_irq_handler_unlocked(irq, handle_edge_irq);
  598. return retval;
  599. }
  600. static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  601. {
  602. void __iomem *reg = bank->base;
  603. switch (bank->method) {
  604. #ifdef CONFIG_ARCH_OMAP1
  605. case METHOD_MPUIO:
  606. /* MPUIO irqstatus is reset by reading the status register,
  607. * so do nothing here */
  608. return;
  609. #endif
  610. #ifdef CONFIG_ARCH_OMAP15XX
  611. case METHOD_GPIO_1510:
  612. reg += OMAP1510_GPIO_INT_STATUS;
  613. break;
  614. #endif
  615. #ifdef CONFIG_ARCH_OMAP16XX
  616. case METHOD_GPIO_1610:
  617. reg += OMAP1610_GPIO_IRQSTATUS1;
  618. break;
  619. #endif
  620. #ifdef CONFIG_ARCH_OMAP730
  621. case METHOD_GPIO_730:
  622. reg += OMAP730_GPIO_INT_STATUS;
  623. break;
  624. #endif
  625. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  626. case METHOD_GPIO_24XX:
  627. reg += OMAP24XX_GPIO_IRQSTATUS1;
  628. break;
  629. #endif
  630. default:
  631. WARN_ON(1);
  632. return;
  633. }
  634. __raw_writel(gpio_mask, reg);
  635. /* Workaround for clearing DSP GPIO interrupts to allow retention */
  636. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  637. if (cpu_is_omap24xx() || cpu_is_omap34xx())
  638. __raw_writel(gpio_mask, bank->base + OMAP24XX_GPIO_IRQSTATUS2);
  639. #endif
  640. }
  641. static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
  642. {
  643. _clear_gpio_irqbank(bank, 1 << get_gpio_index(gpio));
  644. }
  645. static u32 _get_gpio_irqbank_mask(struct gpio_bank *bank)
  646. {
  647. void __iomem *reg = bank->base;
  648. int inv = 0;
  649. u32 l;
  650. u32 mask;
  651. switch (bank->method) {
  652. #ifdef CONFIG_ARCH_OMAP1
  653. case METHOD_MPUIO:
  654. reg += OMAP_MPUIO_GPIO_MASKIT;
  655. mask = 0xffff;
  656. inv = 1;
  657. break;
  658. #endif
  659. #ifdef CONFIG_ARCH_OMAP15XX
  660. case METHOD_GPIO_1510:
  661. reg += OMAP1510_GPIO_INT_MASK;
  662. mask = 0xffff;
  663. inv = 1;
  664. break;
  665. #endif
  666. #ifdef CONFIG_ARCH_OMAP16XX
  667. case METHOD_GPIO_1610:
  668. reg += OMAP1610_GPIO_IRQENABLE1;
  669. mask = 0xffff;
  670. break;
  671. #endif
  672. #ifdef CONFIG_ARCH_OMAP730
  673. case METHOD_GPIO_730:
  674. reg += OMAP730_GPIO_INT_MASK;
  675. mask = 0xffffffff;
  676. inv = 1;
  677. break;
  678. #endif
  679. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  680. case METHOD_GPIO_24XX:
  681. reg += OMAP24XX_GPIO_IRQENABLE1;
  682. mask = 0xffffffff;
  683. break;
  684. #endif
  685. default:
  686. WARN_ON(1);
  687. return 0;
  688. }
  689. l = __raw_readl(reg);
  690. if (inv)
  691. l = ~l;
  692. l &= mask;
  693. return l;
  694. }
  695. static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask, int enable)
  696. {
  697. void __iomem *reg = bank->base;
  698. u32 l;
  699. switch (bank->method) {
  700. #ifdef CONFIG_ARCH_OMAP1
  701. case METHOD_MPUIO:
  702. reg += OMAP_MPUIO_GPIO_MASKIT;
  703. l = __raw_readl(reg);
  704. if (enable)
  705. l &= ~(gpio_mask);
  706. else
  707. l |= gpio_mask;
  708. break;
  709. #endif
  710. #ifdef CONFIG_ARCH_OMAP15XX
  711. case METHOD_GPIO_1510:
  712. reg += OMAP1510_GPIO_INT_MASK;
  713. l = __raw_readl(reg);
  714. if (enable)
  715. l &= ~(gpio_mask);
  716. else
  717. l |= gpio_mask;
  718. break;
  719. #endif
  720. #ifdef CONFIG_ARCH_OMAP16XX
  721. case METHOD_GPIO_1610:
  722. if (enable)
  723. reg += OMAP1610_GPIO_SET_IRQENABLE1;
  724. else
  725. reg += OMAP1610_GPIO_CLEAR_IRQENABLE1;
  726. l = gpio_mask;
  727. break;
  728. #endif
  729. #ifdef CONFIG_ARCH_OMAP730
  730. case METHOD_GPIO_730:
  731. reg += OMAP730_GPIO_INT_MASK;
  732. l = __raw_readl(reg);
  733. if (enable)
  734. l &= ~(gpio_mask);
  735. else
  736. l |= gpio_mask;
  737. break;
  738. #endif
  739. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  740. case METHOD_GPIO_24XX:
  741. if (enable)
  742. reg += OMAP24XX_GPIO_SETIRQENABLE1;
  743. else
  744. reg += OMAP24XX_GPIO_CLEARIRQENABLE1;
  745. l = gpio_mask;
  746. break;
  747. #endif
  748. default:
  749. WARN_ON(1);
  750. return;
  751. }
  752. __raw_writel(l, reg);
  753. }
  754. static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable)
  755. {
  756. _enable_gpio_irqbank(bank, 1 << get_gpio_index(gpio), enable);
  757. }
  758. /*
  759. * Note that ENAWAKEUP needs to be enabled in GPIO_SYSCONFIG register.
  760. * 1510 does not seem to have a wake-up register. If JTAG is connected
  761. * to the target, system will wake up always on GPIO events. While
  762. * system is running all registered GPIO interrupts need to have wake-up
  763. * enabled. When system is suspended, only selected GPIO interrupts need
  764. * to have wake-up enabled.
  765. */
  766. static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
  767. {
  768. unsigned long flags;
  769. switch (bank->method) {
  770. #ifdef CONFIG_ARCH_OMAP16XX
  771. case METHOD_MPUIO:
  772. case METHOD_GPIO_1610:
  773. spin_lock_irqsave(&bank->lock, flags);
  774. if (enable) {
  775. bank->suspend_wakeup |= (1 << gpio);
  776. enable_irq_wake(bank->irq);
  777. } else {
  778. disable_irq_wake(bank->irq);
  779. bank->suspend_wakeup &= ~(1 << gpio);
  780. }
  781. spin_unlock_irqrestore(&bank->lock, flags);
  782. return 0;
  783. #endif
  784. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  785. case METHOD_GPIO_24XX:
  786. if (bank->non_wakeup_gpios & (1 << gpio)) {
  787. printk(KERN_ERR "Unable to modify wakeup on "
  788. "non-wakeup GPIO%d\n",
  789. (bank - gpio_bank) * 32 + gpio);
  790. return -EINVAL;
  791. }
  792. spin_lock_irqsave(&bank->lock, flags);
  793. if (enable) {
  794. bank->suspend_wakeup |= (1 << gpio);
  795. enable_irq_wake(bank->irq);
  796. } else {
  797. disable_irq_wake(bank->irq);
  798. bank->suspend_wakeup &= ~(1 << gpio);
  799. }
  800. spin_unlock_irqrestore(&bank->lock, flags);
  801. return 0;
  802. #endif
  803. default:
  804. printk(KERN_ERR "Can't enable GPIO wakeup for method %i\n",
  805. bank->method);
  806. return -EINVAL;
  807. }
  808. }
  809. static void _reset_gpio(struct gpio_bank *bank, int gpio)
  810. {
  811. _set_gpio_direction(bank, get_gpio_index(gpio), 1);
  812. _set_gpio_irqenable(bank, gpio, 0);
  813. _clear_gpio_irqstatus(bank, gpio);
  814. _set_gpio_triggering(bank, get_gpio_index(gpio), IRQ_TYPE_NONE);
  815. }
  816. /* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
  817. static int gpio_wake_enable(unsigned int irq, unsigned int enable)
  818. {
  819. unsigned int gpio = irq - IH_GPIO_BASE;
  820. struct gpio_bank *bank;
  821. int retval;
  822. if (check_gpio(gpio) < 0)
  823. return -ENODEV;
  824. bank = get_irq_chip_data(irq);
  825. retval = _set_gpio_wakeup(bank, get_gpio_index(gpio), enable);
  826. return retval;
  827. }
  828. int omap_request_gpio(int gpio)
  829. {
  830. struct gpio_bank *bank;
  831. unsigned long flags;
  832. int status;
  833. if (check_gpio(gpio) < 0)
  834. return -EINVAL;
  835. status = gpio_request(gpio, NULL);
  836. if (status < 0)
  837. return status;
  838. bank = get_gpio_bank(gpio);
  839. spin_lock_irqsave(&bank->lock, flags);
  840. /* Set trigger to none. You need to enable the desired trigger with
  841. * request_irq() or set_irq_type().
  842. */
  843. _set_gpio_triggering(bank, get_gpio_index(gpio), IRQ_TYPE_NONE);
  844. #ifdef CONFIG_ARCH_OMAP15XX
  845. if (bank->method == METHOD_GPIO_1510) {
  846. void __iomem *reg;
  847. /* Claim the pin for MPU */
  848. reg = bank->base + OMAP1510_GPIO_PIN_CONTROL;
  849. __raw_writel(__raw_readl(reg) | (1 << get_gpio_index(gpio)), reg);
  850. }
  851. #endif
  852. spin_unlock_irqrestore(&bank->lock, flags);
  853. return 0;
  854. }
  855. void omap_free_gpio(int gpio)
  856. {
  857. struct gpio_bank *bank;
  858. unsigned long flags;
  859. if (check_gpio(gpio) < 0)
  860. return;
  861. bank = get_gpio_bank(gpio);
  862. spin_lock_irqsave(&bank->lock, flags);
  863. if (unlikely(!gpiochip_is_requested(&bank->chip,
  864. get_gpio_index(gpio)))) {
  865. spin_unlock_irqrestore(&bank->lock, flags);
  866. printk(KERN_ERR "omap-gpio: GPIO %d wasn't reserved!\n", gpio);
  867. dump_stack();
  868. return;
  869. }
  870. #ifdef CONFIG_ARCH_OMAP16XX
  871. if (bank->method == METHOD_GPIO_1610) {
  872. /* Disable wake-up during idle for dynamic tick */
  873. void __iomem *reg = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  874. __raw_writel(1 << get_gpio_index(gpio), reg);
  875. }
  876. #endif
  877. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  878. if (bank->method == METHOD_GPIO_24XX) {
  879. /* Disable wake-up during idle for dynamic tick */
  880. void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  881. __raw_writel(1 << get_gpio_index(gpio), reg);
  882. }
  883. #endif
  884. _reset_gpio(bank, gpio);
  885. spin_unlock_irqrestore(&bank->lock, flags);
  886. gpio_free(gpio);
  887. }
  888. /*
  889. * We need to unmask the GPIO bank interrupt as soon as possible to
  890. * avoid missing GPIO interrupts for other lines in the bank.
  891. * Then we need to mask-read-clear-unmask the triggered GPIO lines
  892. * in the bank to avoid missing nested interrupts for a GPIO line.
  893. * If we wait to unmask individual GPIO lines in the bank after the
  894. * line's interrupt handler has been run, we may miss some nested
  895. * interrupts.
  896. */
  897. static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
  898. {
  899. void __iomem *isr_reg = NULL;
  900. u32 isr;
  901. unsigned int gpio_irq;
  902. struct gpio_bank *bank;
  903. u32 retrigger = 0;
  904. int unmasked = 0;
  905. desc->chip->ack(irq);
  906. bank = get_irq_data(irq);
  907. #ifdef CONFIG_ARCH_OMAP1
  908. if (bank->method == METHOD_MPUIO)
  909. isr_reg = bank->base + OMAP_MPUIO_GPIO_INT;
  910. #endif
  911. #ifdef CONFIG_ARCH_OMAP15XX
  912. if (bank->method == METHOD_GPIO_1510)
  913. isr_reg = bank->base + OMAP1510_GPIO_INT_STATUS;
  914. #endif
  915. #if defined(CONFIG_ARCH_OMAP16XX)
  916. if (bank->method == METHOD_GPIO_1610)
  917. isr_reg = bank->base + OMAP1610_GPIO_IRQSTATUS1;
  918. #endif
  919. #ifdef CONFIG_ARCH_OMAP730
  920. if (bank->method == METHOD_GPIO_730)
  921. isr_reg = bank->base + OMAP730_GPIO_INT_STATUS;
  922. #endif
  923. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  924. if (bank->method == METHOD_GPIO_24XX)
  925. isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
  926. #endif
  927. while(1) {
  928. u32 isr_saved, level_mask = 0;
  929. u32 enabled;
  930. enabled = _get_gpio_irqbank_mask(bank);
  931. isr_saved = isr = __raw_readl(isr_reg) & enabled;
  932. if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
  933. isr &= 0x0000ffff;
  934. if (cpu_class_is_omap2()) {
  935. level_mask = bank->level_mask & enabled;
  936. }
  937. /* clear edge sensitive interrupts before handler(s) are
  938. called so that we don't miss any interrupt occurred while
  939. executing them */
  940. _enable_gpio_irqbank(bank, isr_saved & ~level_mask, 0);
  941. _clear_gpio_irqbank(bank, isr_saved & ~level_mask);
  942. _enable_gpio_irqbank(bank, isr_saved & ~level_mask, 1);
  943. /* if there is only edge sensitive GPIO pin interrupts
  944. configured, we could unmask GPIO bank interrupt immediately */
  945. if (!level_mask && !unmasked) {
  946. unmasked = 1;
  947. desc->chip->unmask(irq);
  948. }
  949. isr |= retrigger;
  950. retrigger = 0;
  951. if (!isr)
  952. break;
  953. gpio_irq = bank->virtual_irq_start;
  954. for (; isr != 0; isr >>= 1, gpio_irq++) {
  955. if (!(isr & 1))
  956. continue;
  957. generic_handle_irq(gpio_irq);
  958. }
  959. }
  960. /* if bank has any level sensitive GPIO pin interrupt
  961. configured, we must unmask the bank interrupt only after
  962. handler(s) are executed in order to avoid spurious bank
  963. interrupt */
  964. if (!unmasked)
  965. desc->chip->unmask(irq);
  966. }
  967. static void gpio_irq_shutdown(unsigned int irq)
  968. {
  969. unsigned int gpio = irq - IH_GPIO_BASE;
  970. struct gpio_bank *bank = get_irq_chip_data(irq);
  971. _reset_gpio(bank, gpio);
  972. }
  973. static void gpio_ack_irq(unsigned int irq)
  974. {
  975. unsigned int gpio = irq - IH_GPIO_BASE;
  976. struct gpio_bank *bank = get_irq_chip_data(irq);
  977. _clear_gpio_irqstatus(bank, gpio);
  978. }
  979. static void gpio_mask_irq(unsigned int irq)
  980. {
  981. unsigned int gpio = irq - IH_GPIO_BASE;
  982. struct gpio_bank *bank = get_irq_chip_data(irq);
  983. _set_gpio_irqenable(bank, gpio, 0);
  984. }
  985. static void gpio_unmask_irq(unsigned int irq)
  986. {
  987. unsigned int gpio = irq - IH_GPIO_BASE;
  988. struct gpio_bank *bank = get_irq_chip_data(irq);
  989. unsigned int irq_mask = 1 << get_gpio_index(gpio);
  990. /* For level-triggered GPIOs, the clearing must be done after
  991. * the HW source is cleared, thus after the handler has run */
  992. if (bank->level_mask & irq_mask) {
  993. _set_gpio_irqenable(bank, gpio, 0);
  994. _clear_gpio_irqstatus(bank, gpio);
  995. }
  996. _set_gpio_irqenable(bank, gpio, 1);
  997. }
  998. static struct irq_chip gpio_irq_chip = {
  999. .name = "GPIO",
  1000. .shutdown = gpio_irq_shutdown,
  1001. .ack = gpio_ack_irq,
  1002. .mask = gpio_mask_irq,
  1003. .unmask = gpio_unmask_irq,
  1004. .set_type = gpio_irq_type,
  1005. .set_wake = gpio_wake_enable,
  1006. };
  1007. /*---------------------------------------------------------------------*/
  1008. #ifdef CONFIG_ARCH_OMAP1
  1009. /* MPUIO uses the always-on 32k clock */
  1010. static void mpuio_ack_irq(unsigned int irq)
  1011. {
  1012. /* The ISR is reset automatically, so do nothing here. */
  1013. }
  1014. static void mpuio_mask_irq(unsigned int irq)
  1015. {
  1016. unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
  1017. struct gpio_bank *bank = get_irq_chip_data(irq);
  1018. _set_gpio_irqenable(bank, gpio, 0);
  1019. }
  1020. static void mpuio_unmask_irq(unsigned int irq)
  1021. {
  1022. unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
  1023. struct gpio_bank *bank = get_irq_chip_data(irq);
  1024. _set_gpio_irqenable(bank, gpio, 1);
  1025. }
  1026. static struct irq_chip mpuio_irq_chip = {
  1027. .name = "MPUIO",
  1028. .ack = mpuio_ack_irq,
  1029. .mask = mpuio_mask_irq,
  1030. .unmask = mpuio_unmask_irq,
  1031. .set_type = gpio_irq_type,
  1032. #ifdef CONFIG_ARCH_OMAP16XX
  1033. /* REVISIT: assuming only 16xx supports MPUIO wake events */
  1034. .set_wake = gpio_wake_enable,
  1035. #endif
  1036. };
  1037. #define bank_is_mpuio(bank) ((bank)->method == METHOD_MPUIO)
  1038. #ifdef CONFIG_ARCH_OMAP16XX
  1039. #include <linux/platform_device.h>
  1040. static int omap_mpuio_suspend_late(struct platform_device *pdev, pm_message_t mesg)
  1041. {
  1042. struct gpio_bank *bank = platform_get_drvdata(pdev);
  1043. void __iomem *mask_reg = bank->base + OMAP_MPUIO_GPIO_MASKIT;
  1044. unsigned long flags;
  1045. spin_lock_irqsave(&bank->lock, flags);
  1046. bank->saved_wakeup = __raw_readl(mask_reg);
  1047. __raw_writel(0xffff & ~bank->suspend_wakeup, mask_reg);
  1048. spin_unlock_irqrestore(&bank->lock, flags);
  1049. return 0;
  1050. }
  1051. static int omap_mpuio_resume_early(struct platform_device *pdev)
  1052. {
  1053. struct gpio_bank *bank = platform_get_drvdata(pdev);
  1054. void __iomem *mask_reg = bank->base + OMAP_MPUIO_GPIO_MASKIT;
  1055. unsigned long flags;
  1056. spin_lock_irqsave(&bank->lock, flags);
  1057. __raw_writel(bank->saved_wakeup, mask_reg);
  1058. spin_unlock_irqrestore(&bank->lock, flags);
  1059. return 0;
  1060. }
  1061. /* use platform_driver for this, now that there's no longer any
  1062. * point to sys_device (other than not disturbing old code).
  1063. */
  1064. static struct platform_driver omap_mpuio_driver = {
  1065. .suspend_late = omap_mpuio_suspend_late,
  1066. .resume_early = omap_mpuio_resume_early,
  1067. .driver = {
  1068. .name = "mpuio",
  1069. },
  1070. };
  1071. static struct platform_device omap_mpuio_device = {
  1072. .name = "mpuio",
  1073. .id = -1,
  1074. .dev = {
  1075. .driver = &omap_mpuio_driver.driver,
  1076. }
  1077. /* could list the /proc/iomem resources */
  1078. };
  1079. static inline void mpuio_init(void)
  1080. {
  1081. platform_set_drvdata(&omap_mpuio_device, &gpio_bank_1610[0]);
  1082. if (platform_driver_register(&omap_mpuio_driver) == 0)
  1083. (void) platform_device_register(&omap_mpuio_device);
  1084. }
  1085. #else
  1086. static inline void mpuio_init(void) {}
  1087. #endif /* 16xx */
  1088. #else
  1089. extern struct irq_chip mpuio_irq_chip;
  1090. #define bank_is_mpuio(bank) 0
  1091. static inline void mpuio_init(void) {}
  1092. #endif
  1093. /*---------------------------------------------------------------------*/
  1094. /* REVISIT these are stupid implementations! replace by ones that
  1095. * don't switch on METHOD_* and which mostly avoid spinlocks
  1096. */
  1097. static int gpio_input(struct gpio_chip *chip, unsigned offset)
  1098. {
  1099. struct gpio_bank *bank;
  1100. unsigned long flags;
  1101. bank = container_of(chip, struct gpio_bank, chip);
  1102. spin_lock_irqsave(&bank->lock, flags);
  1103. _set_gpio_direction(bank, offset, 1);
  1104. spin_unlock_irqrestore(&bank->lock, flags);
  1105. return 0;
  1106. }
  1107. static int gpio_get(struct gpio_chip *chip, unsigned offset)
  1108. {
  1109. return omap_get_gpio_datain(chip->base + offset);
  1110. }
  1111. static int gpio_output(struct gpio_chip *chip, unsigned offset, int value)
  1112. {
  1113. struct gpio_bank *bank;
  1114. unsigned long flags;
  1115. bank = container_of(chip, struct gpio_bank, chip);
  1116. spin_lock_irqsave(&bank->lock, flags);
  1117. _set_gpio_dataout(bank, offset, value);
  1118. _set_gpio_direction(bank, offset, 0);
  1119. spin_unlock_irqrestore(&bank->lock, flags);
  1120. return 0;
  1121. }
  1122. static void gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  1123. {
  1124. struct gpio_bank *bank;
  1125. unsigned long flags;
  1126. bank = container_of(chip, struct gpio_bank, chip);
  1127. spin_lock_irqsave(&bank->lock, flags);
  1128. _set_gpio_dataout(bank, offset, value);
  1129. spin_unlock_irqrestore(&bank->lock, flags);
  1130. }
  1131. /*---------------------------------------------------------------------*/
  1132. static int initialized;
  1133. #if !defined(CONFIG_ARCH_OMAP3)
  1134. static struct clk * gpio_ick;
  1135. #endif
  1136. #if defined(CONFIG_ARCH_OMAP2)
  1137. static struct clk * gpio_fck;
  1138. #endif
  1139. #if defined(CONFIG_ARCH_OMAP2430)
  1140. static struct clk * gpio5_ick;
  1141. static struct clk * gpio5_fck;
  1142. #endif
  1143. #if defined(CONFIG_ARCH_OMAP3)
  1144. static struct clk *gpio_fclks[OMAP34XX_NR_GPIOS];
  1145. static struct clk *gpio_iclks[OMAP34XX_NR_GPIOS];
  1146. #endif
  1147. /* This lock class tells lockdep that GPIO irqs are in a different
  1148. * category than their parents, so it won't report false recursion.
  1149. */
  1150. static struct lock_class_key gpio_lock_class;
  1151. static int __init _omap_gpio_init(void)
  1152. {
  1153. int i;
  1154. int gpio = 0;
  1155. struct gpio_bank *bank;
  1156. #if defined(CONFIG_ARCH_OMAP3)
  1157. char clk_name[11];
  1158. #endif
  1159. initialized = 1;
  1160. #if defined(CONFIG_ARCH_OMAP1)
  1161. if (cpu_is_omap15xx()) {
  1162. gpio_ick = clk_get(NULL, "arm_gpio_ck");
  1163. if (IS_ERR(gpio_ick))
  1164. printk("Could not get arm_gpio_ck\n");
  1165. else
  1166. clk_enable(gpio_ick);
  1167. }
  1168. #endif
  1169. #if defined(CONFIG_ARCH_OMAP2)
  1170. if (cpu_class_is_omap2()) {
  1171. gpio_ick = clk_get(NULL, "gpios_ick");
  1172. if (IS_ERR(gpio_ick))
  1173. printk("Could not get gpios_ick\n");
  1174. else
  1175. clk_enable(gpio_ick);
  1176. gpio_fck = clk_get(NULL, "gpios_fck");
  1177. if (IS_ERR(gpio_fck))
  1178. printk("Could not get gpios_fck\n");
  1179. else
  1180. clk_enable(gpio_fck);
  1181. /*
  1182. * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK
  1183. */
  1184. #if defined(CONFIG_ARCH_OMAP2430)
  1185. if (cpu_is_omap2430()) {
  1186. gpio5_ick = clk_get(NULL, "gpio5_ick");
  1187. if (IS_ERR(gpio5_ick))
  1188. printk("Could not get gpio5_ick\n");
  1189. else
  1190. clk_enable(gpio5_ick);
  1191. gpio5_fck = clk_get(NULL, "gpio5_fck");
  1192. if (IS_ERR(gpio5_fck))
  1193. printk("Could not get gpio5_fck\n");
  1194. else
  1195. clk_enable(gpio5_fck);
  1196. }
  1197. #endif
  1198. }
  1199. #endif
  1200. #if defined(CONFIG_ARCH_OMAP3)
  1201. if (cpu_is_omap34xx()) {
  1202. for (i = 0; i < OMAP34XX_NR_GPIOS; i++) {
  1203. sprintf(clk_name, "gpio%d_ick", i + 1);
  1204. gpio_iclks[i] = clk_get(NULL, clk_name);
  1205. if (IS_ERR(gpio_iclks[i]))
  1206. printk(KERN_ERR "Could not get %s\n", clk_name);
  1207. else
  1208. clk_enable(gpio_iclks[i]);
  1209. sprintf(clk_name, "gpio%d_fck", i + 1);
  1210. gpio_fclks[i] = clk_get(NULL, clk_name);
  1211. if (IS_ERR(gpio_fclks[i]))
  1212. printk(KERN_ERR "Could not get %s\n", clk_name);
  1213. else
  1214. clk_enable(gpio_fclks[i]);
  1215. }
  1216. }
  1217. #endif
  1218. #ifdef CONFIG_ARCH_OMAP15XX
  1219. if (cpu_is_omap15xx()) {
  1220. printk(KERN_INFO "OMAP1510 GPIO hardware\n");
  1221. gpio_bank_count = 2;
  1222. gpio_bank = gpio_bank_1510;
  1223. }
  1224. #endif
  1225. #if defined(CONFIG_ARCH_OMAP16XX)
  1226. if (cpu_is_omap16xx()) {
  1227. u32 rev;
  1228. gpio_bank_count = 5;
  1229. gpio_bank = gpio_bank_1610;
  1230. rev = __raw_readw(gpio_bank[1].base + OMAP1610_GPIO_REVISION);
  1231. printk(KERN_INFO "OMAP GPIO hardware version %d.%d\n",
  1232. (rev >> 4) & 0x0f, rev & 0x0f);
  1233. }
  1234. #endif
  1235. #ifdef CONFIG_ARCH_OMAP730
  1236. if (cpu_is_omap730()) {
  1237. printk(KERN_INFO "OMAP730 GPIO hardware\n");
  1238. gpio_bank_count = 7;
  1239. gpio_bank = gpio_bank_730;
  1240. }
  1241. #endif
  1242. #ifdef CONFIG_ARCH_OMAP24XX
  1243. if (cpu_is_omap242x()) {
  1244. int rev;
  1245. gpio_bank_count = 4;
  1246. gpio_bank = gpio_bank_242x;
  1247. rev = __raw_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
  1248. printk(KERN_INFO "OMAP242x GPIO hardware version %d.%d\n",
  1249. (rev >> 4) & 0x0f, rev & 0x0f);
  1250. }
  1251. if (cpu_is_omap243x()) {
  1252. int rev;
  1253. gpio_bank_count = 5;
  1254. gpio_bank = gpio_bank_243x;
  1255. rev = __raw_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
  1256. printk(KERN_INFO "OMAP243x GPIO hardware version %d.%d\n",
  1257. (rev >> 4) & 0x0f, rev & 0x0f);
  1258. }
  1259. #endif
  1260. #ifdef CONFIG_ARCH_OMAP34XX
  1261. if (cpu_is_omap34xx()) {
  1262. int rev;
  1263. gpio_bank_count = OMAP34XX_NR_GPIOS;
  1264. gpio_bank = gpio_bank_34xx;
  1265. rev = __raw_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
  1266. printk(KERN_INFO "OMAP34xx GPIO hardware version %d.%d\n",
  1267. (rev >> 4) & 0x0f, rev & 0x0f);
  1268. }
  1269. #endif
  1270. for (i = 0; i < gpio_bank_count; i++) {
  1271. int j, gpio_count = 16;
  1272. bank = &gpio_bank[i];
  1273. spin_lock_init(&bank->lock);
  1274. if (bank_is_mpuio(bank))
  1275. __raw_writew(0xffff, bank->base + OMAP_MPUIO_GPIO_MASKIT);
  1276. if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
  1277. __raw_writew(0xffff, bank->base + OMAP1510_GPIO_INT_MASK);
  1278. __raw_writew(0x0000, bank->base + OMAP1510_GPIO_INT_STATUS);
  1279. }
  1280. if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
  1281. __raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1);
  1282. __raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1);
  1283. __raw_writew(0x0014, bank->base + OMAP1610_GPIO_SYSCONFIG);
  1284. }
  1285. if (cpu_is_omap730() && bank->method == METHOD_GPIO_730) {
  1286. __raw_writel(0xffffffff, bank->base + OMAP730_GPIO_INT_MASK);
  1287. __raw_writel(0x00000000, bank->base + OMAP730_GPIO_INT_STATUS);
  1288. gpio_count = 32; /* 730 has 32-bit GPIOs */
  1289. }
  1290. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1291. if (bank->method == METHOD_GPIO_24XX) {
  1292. static const u32 non_wakeup_gpios[] = {
  1293. 0xe203ffc0, 0x08700040
  1294. };
  1295. __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1);
  1296. __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1);
  1297. __raw_writew(0x0015, bank->base + OMAP24XX_GPIO_SYSCONFIG);
  1298. /* Initialize interface clock ungated, module enabled */
  1299. __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
  1300. if (i < ARRAY_SIZE(non_wakeup_gpios))
  1301. bank->non_wakeup_gpios = non_wakeup_gpios[i];
  1302. gpio_count = 32;
  1303. }
  1304. #endif
  1305. /* REVISIT eventually switch from OMAP-specific gpio structs
  1306. * over to the generic ones
  1307. */
  1308. bank->chip.direction_input = gpio_input;
  1309. bank->chip.get = gpio_get;
  1310. bank->chip.direction_output = gpio_output;
  1311. bank->chip.set = gpio_set;
  1312. if (bank_is_mpuio(bank)) {
  1313. bank->chip.label = "mpuio";
  1314. #ifdef CONFIG_ARCH_OMAP16XX
  1315. bank->chip.dev = &omap_mpuio_device.dev;
  1316. #endif
  1317. bank->chip.base = OMAP_MPUIO(0);
  1318. } else {
  1319. bank->chip.label = "gpio";
  1320. bank->chip.base = gpio;
  1321. gpio += gpio_count;
  1322. }
  1323. bank->chip.ngpio = gpio_count;
  1324. gpiochip_add(&bank->chip);
  1325. for (j = bank->virtual_irq_start;
  1326. j < bank->virtual_irq_start + gpio_count; j++) {
  1327. lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
  1328. set_irq_chip_data(j, bank);
  1329. if (bank_is_mpuio(bank))
  1330. set_irq_chip(j, &mpuio_irq_chip);
  1331. else
  1332. set_irq_chip(j, &gpio_irq_chip);
  1333. set_irq_handler(j, handle_simple_irq);
  1334. set_irq_flags(j, IRQF_VALID);
  1335. }
  1336. set_irq_chained_handler(bank->irq, gpio_irq_handler);
  1337. set_irq_data(bank->irq, bank);
  1338. }
  1339. /* Enable system clock for GPIO module.
  1340. * The CAM_CLK_CTRL *is* really the right place. */
  1341. if (cpu_is_omap16xx())
  1342. omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
  1343. /* Enable autoidle for the OCP interface */
  1344. if (cpu_is_omap24xx())
  1345. omap_writel(1 << 0, 0x48019010);
  1346. if (cpu_is_omap34xx())
  1347. omap_writel(1 << 0, 0x48306814);
  1348. return 0;
  1349. }
  1350. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1351. static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
  1352. {
  1353. int i;
  1354. if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
  1355. return 0;
  1356. for (i = 0; i < gpio_bank_count; i++) {
  1357. struct gpio_bank *bank = &gpio_bank[i];
  1358. void __iomem *wake_status;
  1359. void __iomem *wake_clear;
  1360. void __iomem *wake_set;
  1361. unsigned long flags;
  1362. switch (bank->method) {
  1363. #ifdef CONFIG_ARCH_OMAP16XX
  1364. case METHOD_GPIO_1610:
  1365. wake_status = bank->base + OMAP1610_GPIO_WAKEUPENABLE;
  1366. wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  1367. wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
  1368. break;
  1369. #endif
  1370. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1371. case METHOD_GPIO_24XX:
  1372. wake_status = bank->base + OMAP24XX_GPIO_WAKE_EN;
  1373. wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  1374. wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
  1375. break;
  1376. #endif
  1377. default:
  1378. continue;
  1379. }
  1380. spin_lock_irqsave(&bank->lock, flags);
  1381. bank->saved_wakeup = __raw_readl(wake_status);
  1382. __raw_writel(0xffffffff, wake_clear);
  1383. __raw_writel(bank->suspend_wakeup, wake_set);
  1384. spin_unlock_irqrestore(&bank->lock, flags);
  1385. }
  1386. return 0;
  1387. }
  1388. static int omap_gpio_resume(struct sys_device *dev)
  1389. {
  1390. int i;
  1391. if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
  1392. return 0;
  1393. for (i = 0; i < gpio_bank_count; i++) {
  1394. struct gpio_bank *bank = &gpio_bank[i];
  1395. void __iomem *wake_clear;
  1396. void __iomem *wake_set;
  1397. unsigned long flags;
  1398. switch (bank->method) {
  1399. #ifdef CONFIG_ARCH_OMAP16XX
  1400. case METHOD_GPIO_1610:
  1401. wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  1402. wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
  1403. break;
  1404. #endif
  1405. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1406. case METHOD_GPIO_24XX:
  1407. wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  1408. wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
  1409. break;
  1410. #endif
  1411. default:
  1412. continue;
  1413. }
  1414. spin_lock_irqsave(&bank->lock, flags);
  1415. __raw_writel(0xffffffff, wake_clear);
  1416. __raw_writel(bank->saved_wakeup, wake_set);
  1417. spin_unlock_irqrestore(&bank->lock, flags);
  1418. }
  1419. return 0;
  1420. }
  1421. static struct sysdev_class omap_gpio_sysclass = {
  1422. .name = "gpio",
  1423. .suspend = omap_gpio_suspend,
  1424. .resume = omap_gpio_resume,
  1425. };
  1426. static struct sys_device omap_gpio_device = {
  1427. .id = 0,
  1428. .cls = &omap_gpio_sysclass,
  1429. };
  1430. #endif
  1431. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1432. static int workaround_enabled;
  1433. void omap2_gpio_prepare_for_retention(void)
  1434. {
  1435. int i, c = 0;
  1436. /* Remove triggering for all non-wakeup GPIOs. Otherwise spurious
  1437. * IRQs will be generated. See OMAP2420 Errata item 1.101. */
  1438. for (i = 0; i < gpio_bank_count; i++) {
  1439. struct gpio_bank *bank = &gpio_bank[i];
  1440. u32 l1, l2;
  1441. if (!(bank->enabled_non_wakeup_gpios))
  1442. continue;
  1443. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1444. bank->saved_datain = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
  1445. l1 = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1446. l2 = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1447. #endif
  1448. bank->saved_fallingdetect = l1;
  1449. bank->saved_risingdetect = l2;
  1450. l1 &= ~bank->enabled_non_wakeup_gpios;
  1451. l2 &= ~bank->enabled_non_wakeup_gpios;
  1452. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1453. __raw_writel(l1, bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1454. __raw_writel(l2, bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1455. #endif
  1456. c++;
  1457. }
  1458. if (!c) {
  1459. workaround_enabled = 0;
  1460. return;
  1461. }
  1462. workaround_enabled = 1;
  1463. }
  1464. void omap2_gpio_resume_after_retention(void)
  1465. {
  1466. int i;
  1467. if (!workaround_enabled)
  1468. return;
  1469. for (i = 0; i < gpio_bank_count; i++) {
  1470. struct gpio_bank *bank = &gpio_bank[i];
  1471. u32 l;
  1472. if (!(bank->enabled_non_wakeup_gpios))
  1473. continue;
  1474. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1475. __raw_writel(bank->saved_fallingdetect,
  1476. bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1477. __raw_writel(bank->saved_risingdetect,
  1478. bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1479. #endif
  1480. /* Check if any of the non-wakeup interrupt GPIOs have changed
  1481. * state. If so, generate an IRQ by software. This is
  1482. * horribly racy, but it's the best we can do to work around
  1483. * this silicon bug. */
  1484. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1485. l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
  1486. #endif
  1487. l ^= bank->saved_datain;
  1488. l &= bank->non_wakeup_gpios;
  1489. if (l) {
  1490. u32 old0, old1;
  1491. #if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1492. old0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
  1493. old1 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  1494. __raw_writel(old0 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
  1495. __raw_writel(old1 | l, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  1496. __raw_writel(old0, bank->base + OMAP24XX_GPIO_LEVELDETECT0);
  1497. __raw_writel(old1, bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  1498. #endif
  1499. }
  1500. }
  1501. }
  1502. #endif
  1503. /*
  1504. * This may get called early from board specific init
  1505. * for boards that have interrupts routed via FPGA.
  1506. */
  1507. int __init omap_gpio_init(void)
  1508. {
  1509. if (!initialized)
  1510. return _omap_gpio_init();
  1511. else
  1512. return 0;
  1513. }
  1514. static int __init omap_gpio_sysinit(void)
  1515. {
  1516. int ret = 0;
  1517. if (!initialized)
  1518. ret = _omap_gpio_init();
  1519. mpuio_init();
  1520. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
  1521. if (cpu_is_omap16xx() || cpu_class_is_omap2()) {
  1522. if (ret == 0) {
  1523. ret = sysdev_class_register(&omap_gpio_sysclass);
  1524. if (ret == 0)
  1525. ret = sysdev_register(&omap_gpio_device);
  1526. }
  1527. }
  1528. #endif
  1529. return ret;
  1530. }
  1531. EXPORT_SYMBOL(omap_request_gpio);
  1532. EXPORT_SYMBOL(omap_free_gpio);
  1533. EXPORT_SYMBOL(omap_set_gpio_direction);
  1534. EXPORT_SYMBOL(omap_set_gpio_dataout);
  1535. EXPORT_SYMBOL(omap_get_gpio_datain);
  1536. arch_initcall(omap_gpio_sysinit);
  1537. #ifdef CONFIG_DEBUG_FS
  1538. #include <linux/debugfs.h>
  1539. #include <linux/seq_file.h>
  1540. static int gpio_is_input(struct gpio_bank *bank, int mask)
  1541. {
  1542. void __iomem *reg = bank->base;
  1543. switch (bank->method) {
  1544. case METHOD_MPUIO:
  1545. reg += OMAP_MPUIO_IO_CNTL;
  1546. break;
  1547. case METHOD_GPIO_1510:
  1548. reg += OMAP1510_GPIO_DIR_CONTROL;
  1549. break;
  1550. case METHOD_GPIO_1610:
  1551. reg += OMAP1610_GPIO_DIRECTION;
  1552. break;
  1553. case METHOD_GPIO_730:
  1554. reg += OMAP730_GPIO_DIR_CONTROL;
  1555. break;
  1556. case METHOD_GPIO_24XX:
  1557. reg += OMAP24XX_GPIO_OE;
  1558. break;
  1559. }
  1560. return __raw_readl(reg) & mask;
  1561. }
  1562. static int dbg_gpio_show(struct seq_file *s, void *unused)
  1563. {
  1564. unsigned i, j, gpio;
  1565. for (i = 0, gpio = 0; i < gpio_bank_count; i++) {
  1566. struct gpio_bank *bank = gpio_bank + i;
  1567. unsigned bankwidth = 16;
  1568. u32 mask = 1;
  1569. if (bank_is_mpuio(bank))
  1570. gpio = OMAP_MPUIO(0);
  1571. else if (cpu_class_is_omap2() || cpu_is_omap730())
  1572. bankwidth = 32;
  1573. for (j = 0; j < bankwidth; j++, gpio++, mask <<= 1) {
  1574. unsigned irq, value, is_in, irqstat;
  1575. const char *label;
  1576. label = gpiochip_is_requested(&bank->chip, j);
  1577. if (!label)
  1578. continue;
  1579. irq = bank->virtual_irq_start + j;
  1580. value = omap_get_gpio_datain(gpio);
  1581. is_in = gpio_is_input(bank, mask);
  1582. if (bank_is_mpuio(bank))
  1583. seq_printf(s, "MPUIO %2d ", j);
  1584. else
  1585. seq_printf(s, "GPIO %3d ", gpio);
  1586. seq_printf(s, "(%10s): %s %s",
  1587. label,
  1588. is_in ? "in " : "out",
  1589. value ? "hi" : "lo");
  1590. /* FIXME for at least omap2, show pullup/pulldown state */
  1591. irqstat = irq_desc[irq].status;
  1592. if (is_in && ((bank->suspend_wakeup & mask)
  1593. || irqstat & IRQ_TYPE_SENSE_MASK)) {
  1594. char *trigger = NULL;
  1595. switch (irqstat & IRQ_TYPE_SENSE_MASK) {
  1596. case IRQ_TYPE_EDGE_FALLING:
  1597. trigger = "falling";
  1598. break;
  1599. case IRQ_TYPE_EDGE_RISING:
  1600. trigger = "rising";
  1601. break;
  1602. case IRQ_TYPE_EDGE_BOTH:
  1603. trigger = "bothedge";
  1604. break;
  1605. case IRQ_TYPE_LEVEL_LOW:
  1606. trigger = "low";
  1607. break;
  1608. case IRQ_TYPE_LEVEL_HIGH:
  1609. trigger = "high";
  1610. break;
  1611. case IRQ_TYPE_NONE:
  1612. trigger = "(?)";
  1613. break;
  1614. }
  1615. seq_printf(s, ", irq-%d %-8s%s",
  1616. irq, trigger,
  1617. (bank->suspend_wakeup & mask)
  1618. ? " wakeup" : "");
  1619. }
  1620. seq_printf(s, "\n");
  1621. }
  1622. if (bank_is_mpuio(bank)) {
  1623. seq_printf(s, "\n");
  1624. gpio = 0;
  1625. }
  1626. }
  1627. return 0;
  1628. }
  1629. static int dbg_gpio_open(struct inode *inode, struct file *file)
  1630. {
  1631. return single_open(file, dbg_gpio_show, &inode->i_private);
  1632. }
  1633. static const struct file_operations debug_fops = {
  1634. .open = dbg_gpio_open,
  1635. .read = seq_read,
  1636. .llseek = seq_lseek,
  1637. .release = single_release,
  1638. };
  1639. static int __init omap_gpio_debuginit(void)
  1640. {
  1641. (void) debugfs_create_file("omap_gpio", S_IRUGO,
  1642. NULL, NULL, &debug_fops);
  1643. return 0;
  1644. }
  1645. late_initcall(omap_gpio_debuginit);
  1646. #endif