gpio-omap.c 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679
  1. /*
  2. * Support functions for OMAP GPIO
  3. *
  4. * Copyright (C) 2003-2005 Nokia Corporation
  5. * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  6. *
  7. * Copyright (C) 2009 Texas Instruments
  8. * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License version 2 as
  12. * published by the Free Software Foundation.
  13. */
  14. #include <linux/init.h>
  15. #include <linux/module.h>
  16. #include <linux/interrupt.h>
  17. #include <linux/syscore_ops.h>
  18. #include <linux/err.h>
  19. #include <linux/clk.h>
  20. #include <linux/io.h>
  21. #include <linux/slab.h>
  22. #include <linux/pm_runtime.h>
  23. #include <mach/hardware.h>
  24. #include <asm/irq.h>
  25. #include <mach/irqs.h>
  26. #include <mach/gpio.h>
  27. #include <asm/mach/irq.h>
  28. struct gpio_bank {
  29. unsigned long pbase;
  30. void __iomem *base;
  31. u16 irq;
  32. u16 virtual_irq_start;
  33. int method;
  34. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
  35. u32 suspend_wakeup;
  36. u32 saved_wakeup;
  37. #endif
  38. u32 non_wakeup_gpios;
  39. u32 enabled_non_wakeup_gpios;
  40. u32 saved_datain;
  41. u32 saved_fallingdetect;
  42. u32 saved_risingdetect;
  43. u32 level_mask;
  44. u32 toggle_mask;
  45. spinlock_t lock;
  46. struct gpio_chip chip;
  47. struct clk *dbck;
  48. u32 mod_usage;
  49. u32 dbck_enable_mask;
  50. struct device *dev;
  51. bool dbck_flag;
  52. int stride;
  53. u32 width;
  54. void (*set_dataout)(struct gpio_bank *bank, int gpio, int enable);
  55. struct omap_gpio_reg_offs *regs;
  56. };
  57. #ifdef CONFIG_ARCH_OMAP3
  58. struct omap3_gpio_regs {
  59. u32 irqenable1;
  60. u32 irqenable2;
  61. u32 wake_en;
  62. u32 ctrl;
  63. u32 oe;
  64. u32 leveldetect0;
  65. u32 leveldetect1;
  66. u32 risingdetect;
  67. u32 fallingdetect;
  68. u32 dataout;
  69. };
  70. static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS];
  71. #endif
  72. /*
  73. * TODO: Cleanup gpio_bank usage as it is having information
  74. * related to all instances of the device
  75. */
  76. static struct gpio_bank *gpio_bank;
  77. /* TODO: Analyze removing gpio_bank_count usage from driver code */
  78. int gpio_bank_count;
  79. #define GPIO_INDEX(bank, gpio) (gpio % bank->width)
  80. #define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio))
  81. static inline int gpio_valid(int gpio)
  82. {
  83. if (gpio < 0)
  84. return -1;
  85. if (cpu_class_is_omap1() && OMAP_GPIO_IS_MPUIO(gpio)) {
  86. if (gpio >= OMAP_MAX_GPIO_LINES + 16)
  87. return -1;
  88. return 0;
  89. }
  90. if (cpu_is_omap15xx() && gpio < 16)
  91. return 0;
  92. if ((cpu_is_omap16xx()) && gpio < 64)
  93. return 0;
  94. if (cpu_is_omap7xx() && gpio < 192)
  95. return 0;
  96. if (cpu_is_omap2420() && gpio < 128)
  97. return 0;
  98. if (cpu_is_omap2430() && gpio < 160)
  99. return 0;
  100. if ((cpu_is_omap34xx() || cpu_is_omap44xx()) && gpio < 192)
  101. return 0;
  102. return -1;
  103. }
  104. static int check_gpio(int gpio)
  105. {
  106. if (unlikely(gpio_valid(gpio) < 0)) {
  107. printk(KERN_ERR "omap-gpio: invalid GPIO %d\n", gpio);
  108. dump_stack();
  109. return -1;
  110. }
  111. return 0;
  112. }
  113. static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
  114. {
  115. void __iomem *reg = bank->base;
  116. u32 l;
  117. reg += bank->regs->direction;
  118. l = __raw_readl(reg);
  119. if (is_input)
  120. l |= 1 << gpio;
  121. else
  122. l &= ~(1 << gpio);
  123. __raw_writel(l, reg);
  124. }
  125. /* set data out value using dedicate set/clear register */
  126. static void _set_gpio_dataout_reg(struct gpio_bank *bank, int gpio, int enable)
  127. {
  128. void __iomem *reg = bank->base;
  129. u32 l = GPIO_BIT(bank, gpio);
  130. if (enable)
  131. reg += bank->regs->set_dataout;
  132. else
  133. reg += bank->regs->clr_dataout;
  134. __raw_writel(l, reg);
  135. }
  136. /* set data out value using mask register */
  137. static void _set_gpio_dataout_mask(struct gpio_bank *bank, int gpio, int enable)
  138. {
  139. void __iomem *reg = bank->base + bank->regs->dataout;
  140. u32 gpio_bit = GPIO_BIT(bank, gpio);
  141. u32 l;
  142. l = __raw_readl(reg);
  143. if (enable)
  144. l |= gpio_bit;
  145. else
  146. l &= ~gpio_bit;
  147. __raw_writel(l, reg);
  148. }
  149. static int _get_gpio_datain(struct gpio_bank *bank, int gpio)
  150. {
  151. void __iomem *reg = bank->base + bank->regs->datain;
  152. if (check_gpio(gpio) < 0)
  153. return -EINVAL;
  154. return (__raw_readl(reg) & GPIO_BIT(bank, gpio)) != 0;
  155. }
  156. static int _get_gpio_dataout(struct gpio_bank *bank, int gpio)
  157. {
  158. void __iomem *reg = bank->base + bank->regs->dataout;
  159. if (check_gpio(gpio) < 0)
  160. return -EINVAL;
  161. return (__raw_readl(reg) & GPIO_BIT(bank, gpio)) != 0;
  162. }
  163. #define MOD_REG_BIT(reg, bit_mask, set) \
  164. do { \
  165. int l = __raw_readl(base + reg); \
  166. if (set) l |= bit_mask; \
  167. else l &= ~bit_mask; \
  168. __raw_writel(l, base + reg); \
  169. } while(0)
  170. /**
  171. * _set_gpio_debounce - low level gpio debounce time
  172. * @bank: the gpio bank we're acting upon
  173. * @gpio: the gpio number on this @gpio
  174. * @debounce: debounce time to use
  175. *
  176. * OMAP's debounce time is in 31us steps so we need
  177. * to convert and round up to the closest unit.
  178. */
  179. static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
  180. unsigned debounce)
  181. {
  182. void __iomem *reg = bank->base;
  183. u32 val;
  184. u32 l;
  185. if (!bank->dbck_flag)
  186. return;
  187. if (debounce < 32)
  188. debounce = 0x01;
  189. else if (debounce > 7936)
  190. debounce = 0xff;
  191. else
  192. debounce = (debounce / 0x1f) - 1;
  193. l = GPIO_BIT(bank, gpio);
  194. if (bank->method == METHOD_GPIO_44XX)
  195. reg += OMAP4_GPIO_DEBOUNCINGTIME;
  196. else
  197. reg += OMAP24XX_GPIO_DEBOUNCE_VAL;
  198. __raw_writel(debounce, reg);
  199. reg = bank->base;
  200. if (bank->method == METHOD_GPIO_44XX)
  201. reg += OMAP4_GPIO_DEBOUNCENABLE;
  202. else
  203. reg += OMAP24XX_GPIO_DEBOUNCE_EN;
  204. val = __raw_readl(reg);
  205. if (debounce) {
  206. val |= l;
  207. clk_enable(bank->dbck);
  208. } else {
  209. val &= ~l;
  210. clk_disable(bank->dbck);
  211. }
  212. bank->dbck_enable_mask = val;
  213. __raw_writel(val, reg);
  214. }
  215. #ifdef CONFIG_ARCH_OMAP2PLUS
  216. static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio,
  217. int trigger)
  218. {
  219. void __iomem *base = bank->base;
  220. u32 gpio_bit = 1 << gpio;
  221. if (cpu_is_omap44xx()) {
  222. MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT0, gpio_bit,
  223. trigger & IRQ_TYPE_LEVEL_LOW);
  224. MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT1, gpio_bit,
  225. trigger & IRQ_TYPE_LEVEL_HIGH);
  226. MOD_REG_BIT(OMAP4_GPIO_RISINGDETECT, gpio_bit,
  227. trigger & IRQ_TYPE_EDGE_RISING);
  228. MOD_REG_BIT(OMAP4_GPIO_FALLINGDETECT, gpio_bit,
  229. trigger & IRQ_TYPE_EDGE_FALLING);
  230. } else {
  231. MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
  232. trigger & IRQ_TYPE_LEVEL_LOW);
  233. MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
  234. trigger & IRQ_TYPE_LEVEL_HIGH);
  235. MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
  236. trigger & IRQ_TYPE_EDGE_RISING);
  237. MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
  238. trigger & IRQ_TYPE_EDGE_FALLING);
  239. }
  240. if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
  241. if (cpu_is_omap44xx()) {
  242. MOD_REG_BIT(OMAP4_GPIO_IRQWAKEN0, gpio_bit,
  243. trigger != 0);
  244. } else {
  245. /*
  246. * GPIO wakeup request can only be generated on edge
  247. * transitions
  248. */
  249. if (trigger & IRQ_TYPE_EDGE_BOTH)
  250. __raw_writel(1 << gpio, bank->base
  251. + OMAP24XX_GPIO_SETWKUENA);
  252. else
  253. __raw_writel(1 << gpio, bank->base
  254. + OMAP24XX_GPIO_CLEARWKUENA);
  255. }
  256. }
  257. /* This part needs to be executed always for OMAP34xx */
  258. if (cpu_is_omap34xx() || (bank->non_wakeup_gpios & gpio_bit)) {
  259. /*
  260. * Log the edge gpio and manually trigger the IRQ
  261. * after resume if the input level changes
  262. * to avoid irq lost during PER RET/OFF mode
  263. * Applies for omap2 non-wakeup gpio and all omap3 gpios
  264. */
  265. if (trigger & IRQ_TYPE_EDGE_BOTH)
  266. bank->enabled_non_wakeup_gpios |= gpio_bit;
  267. else
  268. bank->enabled_non_wakeup_gpios &= ~gpio_bit;
  269. }
  270. if (cpu_is_omap44xx()) {
  271. bank->level_mask =
  272. __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0) |
  273. __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT1);
  274. } else {
  275. bank->level_mask =
  276. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0) |
  277. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  278. }
  279. }
  280. #endif
  281. #ifdef CONFIG_ARCH_OMAP1
  282. /*
  283. * This only applies to chips that can't do both rising and falling edge
  284. * detection at once. For all other chips, this function is a noop.
  285. */
  286. static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
  287. {
  288. void __iomem *reg = bank->base;
  289. u32 l = 0;
  290. switch (bank->method) {
  291. case METHOD_MPUIO:
  292. reg += OMAP_MPUIO_GPIO_INT_EDGE / bank->stride;
  293. break;
  294. #ifdef CONFIG_ARCH_OMAP15XX
  295. case METHOD_GPIO_1510:
  296. reg += OMAP1510_GPIO_INT_CONTROL;
  297. break;
  298. #endif
  299. #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
  300. case METHOD_GPIO_7XX:
  301. reg += OMAP7XX_GPIO_INT_CONTROL;
  302. break;
  303. #endif
  304. default:
  305. return;
  306. }
  307. l = __raw_readl(reg);
  308. if ((l >> gpio) & 1)
  309. l &= ~(1 << gpio);
  310. else
  311. l |= 1 << gpio;
  312. __raw_writel(l, reg);
  313. }
  314. #endif
  315. static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
  316. {
  317. void __iomem *reg = bank->base;
  318. u32 l = 0;
  319. switch (bank->method) {
  320. #ifdef CONFIG_ARCH_OMAP1
  321. case METHOD_MPUIO:
  322. reg += OMAP_MPUIO_GPIO_INT_EDGE / bank->stride;
  323. l = __raw_readl(reg);
  324. if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
  325. bank->toggle_mask |= 1 << gpio;
  326. if (trigger & IRQ_TYPE_EDGE_RISING)
  327. l |= 1 << gpio;
  328. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  329. l &= ~(1 << gpio);
  330. else
  331. goto bad;
  332. break;
  333. #endif
  334. #ifdef CONFIG_ARCH_OMAP15XX
  335. case METHOD_GPIO_1510:
  336. reg += OMAP1510_GPIO_INT_CONTROL;
  337. l = __raw_readl(reg);
  338. if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
  339. bank->toggle_mask |= 1 << gpio;
  340. if (trigger & IRQ_TYPE_EDGE_RISING)
  341. l |= 1 << gpio;
  342. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  343. l &= ~(1 << gpio);
  344. else
  345. goto bad;
  346. break;
  347. #endif
  348. #ifdef CONFIG_ARCH_OMAP16XX
  349. case METHOD_GPIO_1610:
  350. if (gpio & 0x08)
  351. reg += OMAP1610_GPIO_EDGE_CTRL2;
  352. else
  353. reg += OMAP1610_GPIO_EDGE_CTRL1;
  354. gpio &= 0x07;
  355. l = __raw_readl(reg);
  356. l &= ~(3 << (gpio << 1));
  357. if (trigger & IRQ_TYPE_EDGE_RISING)
  358. l |= 2 << (gpio << 1);
  359. if (trigger & IRQ_TYPE_EDGE_FALLING)
  360. l |= 1 << (gpio << 1);
  361. if (trigger)
  362. /* Enable wake-up during idle for dynamic tick */
  363. __raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_SET_WAKEUPENA);
  364. else
  365. __raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA);
  366. break;
  367. #endif
  368. #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
  369. case METHOD_GPIO_7XX:
  370. reg += OMAP7XX_GPIO_INT_CONTROL;
  371. l = __raw_readl(reg);
  372. if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
  373. bank->toggle_mask |= 1 << gpio;
  374. if (trigger & IRQ_TYPE_EDGE_RISING)
  375. l |= 1 << gpio;
  376. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  377. l &= ~(1 << gpio);
  378. else
  379. goto bad;
  380. break;
  381. #endif
  382. #ifdef CONFIG_ARCH_OMAP2PLUS
  383. case METHOD_GPIO_24XX:
  384. case METHOD_GPIO_44XX:
  385. set_24xx_gpio_triggering(bank, gpio, trigger);
  386. return 0;
  387. #endif
  388. default:
  389. goto bad;
  390. }
  391. __raw_writel(l, reg);
  392. return 0;
  393. bad:
  394. return -EINVAL;
  395. }
  396. static int gpio_irq_type(struct irq_data *d, unsigned type)
  397. {
  398. struct gpio_bank *bank;
  399. unsigned gpio;
  400. int retval;
  401. unsigned long flags;
  402. if (!cpu_class_is_omap2() && d->irq > IH_MPUIO_BASE)
  403. gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
  404. else
  405. gpio = d->irq - IH_GPIO_BASE;
  406. if (check_gpio(gpio) < 0)
  407. return -EINVAL;
  408. if (type & ~IRQ_TYPE_SENSE_MASK)
  409. return -EINVAL;
  410. /* OMAP1 allows only only edge triggering */
  411. if (!cpu_class_is_omap2()
  412. && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
  413. return -EINVAL;
  414. bank = irq_data_get_irq_chip_data(d);
  415. spin_lock_irqsave(&bank->lock, flags);
  416. retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type);
  417. spin_unlock_irqrestore(&bank->lock, flags);
  418. if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
  419. __irq_set_handler_locked(d->irq, handle_level_irq);
  420. else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  421. __irq_set_handler_locked(d->irq, handle_edge_irq);
  422. return retval;
  423. }
  424. static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  425. {
  426. void __iomem *reg = bank->base;
  427. reg += bank->regs->irqstatus;
  428. __raw_writel(gpio_mask, reg);
  429. /* Workaround for clearing DSP GPIO interrupts to allow retention */
  430. if (bank->regs->irqstatus2) {
  431. reg = bank->base + bank->regs->irqstatus2;
  432. __raw_writel(gpio_mask, reg);
  433. }
  434. /* Flush posted write for the irq status to avoid spurious interrupts */
  435. __raw_readl(reg);
  436. }
  437. static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
  438. {
  439. _clear_gpio_irqbank(bank, GPIO_BIT(bank, gpio));
  440. }
  441. static u32 _get_gpio_irqbank_mask(struct gpio_bank *bank)
  442. {
  443. void __iomem *reg = bank->base;
  444. u32 l;
  445. u32 mask = (1 << bank->width) - 1;
  446. reg += bank->regs->irqenable;
  447. l = __raw_readl(reg);
  448. if (bank->regs->irqenable_inv)
  449. l = ~l;
  450. l &= mask;
  451. return l;
  452. }
  453. static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  454. {
  455. void __iomem *reg = bank->base;
  456. u32 l;
  457. if (bank->regs->set_irqenable) {
  458. reg += bank->regs->set_irqenable;
  459. l = gpio_mask;
  460. } else {
  461. reg += bank->regs->irqenable;
  462. l = __raw_readl(reg);
  463. if (bank->regs->irqenable_inv)
  464. l &= ~gpio_mask;
  465. else
  466. l |= gpio_mask;
  467. }
  468. __raw_writel(l, reg);
  469. }
  470. static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  471. {
  472. void __iomem *reg = bank->base;
  473. u32 l;
  474. if (bank->regs->clr_irqenable) {
  475. reg += bank->regs->clr_irqenable;
  476. l = gpio_mask;
  477. } else {
  478. reg += bank->regs->irqenable;
  479. l = __raw_readl(reg);
  480. if (bank->regs->irqenable_inv)
  481. l |= gpio_mask;
  482. else
  483. l &= ~gpio_mask;
  484. }
  485. __raw_writel(l, reg);
  486. }
  487. static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable)
  488. {
  489. _enable_gpio_irqbank(bank, GPIO_BIT(bank, gpio));
  490. }
  491. /*
  492. * Note that ENAWAKEUP needs to be enabled in GPIO_SYSCONFIG register.
  493. * 1510 does not seem to have a wake-up register. If JTAG is connected
  494. * to the target, system will wake up always on GPIO events. While
  495. * system is running all registered GPIO interrupts need to have wake-up
  496. * enabled. When system is suspended, only selected GPIO interrupts need
  497. * to have wake-up enabled.
  498. */
  499. static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
  500. {
  501. unsigned long uninitialized_var(flags);
  502. switch (bank->method) {
  503. #ifdef CONFIG_ARCH_OMAP16XX
  504. case METHOD_MPUIO:
  505. case METHOD_GPIO_1610:
  506. spin_lock_irqsave(&bank->lock, flags);
  507. if (enable)
  508. bank->suspend_wakeup |= (1 << gpio);
  509. else
  510. bank->suspend_wakeup &= ~(1 << gpio);
  511. spin_unlock_irqrestore(&bank->lock, flags);
  512. return 0;
  513. #endif
  514. #ifdef CONFIG_ARCH_OMAP2PLUS
  515. case METHOD_GPIO_24XX:
  516. case METHOD_GPIO_44XX:
  517. if (bank->non_wakeup_gpios & (1 << gpio)) {
  518. printk(KERN_ERR "Unable to modify wakeup on "
  519. "non-wakeup GPIO%d\n",
  520. (bank - gpio_bank) * bank->width + gpio);
  521. return -EINVAL;
  522. }
  523. spin_lock_irqsave(&bank->lock, flags);
  524. if (enable)
  525. bank->suspend_wakeup |= (1 << gpio);
  526. else
  527. bank->suspend_wakeup &= ~(1 << gpio);
  528. spin_unlock_irqrestore(&bank->lock, flags);
  529. return 0;
  530. #endif
  531. default:
  532. printk(KERN_ERR "Can't enable GPIO wakeup for method %i\n",
  533. bank->method);
  534. return -EINVAL;
  535. }
  536. }
  537. static void _reset_gpio(struct gpio_bank *bank, int gpio)
  538. {
  539. _set_gpio_direction(bank, GPIO_INDEX(bank, gpio), 1);
  540. _set_gpio_irqenable(bank, gpio, 0);
  541. _clear_gpio_irqstatus(bank, gpio);
  542. _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), IRQ_TYPE_NONE);
  543. }
  544. /* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
  545. static int gpio_wake_enable(struct irq_data *d, unsigned int enable)
  546. {
  547. unsigned int gpio = d->irq - IH_GPIO_BASE;
  548. struct gpio_bank *bank;
  549. int retval;
  550. if (check_gpio(gpio) < 0)
  551. return -ENODEV;
  552. bank = irq_data_get_irq_chip_data(d);
  553. retval = _set_gpio_wakeup(bank, GPIO_INDEX(bank, gpio), enable);
  554. return retval;
  555. }
  556. static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
  557. {
  558. struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
  559. unsigned long flags;
  560. spin_lock_irqsave(&bank->lock, flags);
  561. /* Set trigger to none. You need to enable the desired trigger with
  562. * request_irq() or set_irq_type().
  563. */
  564. _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
  565. #ifdef CONFIG_ARCH_OMAP15XX
  566. if (bank->method == METHOD_GPIO_1510) {
  567. void __iomem *reg;
  568. /* Claim the pin for MPU */
  569. reg = bank->base + OMAP1510_GPIO_PIN_CONTROL;
  570. __raw_writel(__raw_readl(reg) | (1 << offset), reg);
  571. }
  572. #endif
  573. if (!cpu_class_is_omap1()) {
  574. if (!bank->mod_usage) {
  575. void __iomem *reg = bank->base;
  576. u32 ctrl;
  577. if (cpu_is_omap24xx() || cpu_is_omap34xx())
  578. reg += OMAP24XX_GPIO_CTRL;
  579. else if (cpu_is_omap44xx())
  580. reg += OMAP4_GPIO_CTRL;
  581. ctrl = __raw_readl(reg);
  582. /* Module is enabled, clocks are not gated */
  583. ctrl &= 0xFFFFFFFE;
  584. __raw_writel(ctrl, reg);
  585. }
  586. bank->mod_usage |= 1 << offset;
  587. }
  588. spin_unlock_irqrestore(&bank->lock, flags);
  589. return 0;
  590. }
  591. static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
  592. {
  593. struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
  594. unsigned long flags;
  595. spin_lock_irqsave(&bank->lock, flags);
  596. #ifdef CONFIG_ARCH_OMAP16XX
  597. if (bank->method == METHOD_GPIO_1610) {
  598. /* Disable wake-up during idle for dynamic tick */
  599. void __iomem *reg = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  600. __raw_writel(1 << offset, reg);
  601. }
  602. #endif
  603. #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
  604. if (bank->method == METHOD_GPIO_24XX) {
  605. /* Disable wake-up during idle for dynamic tick */
  606. void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  607. __raw_writel(1 << offset, reg);
  608. }
  609. #endif
  610. #ifdef CONFIG_ARCH_OMAP4
  611. if (bank->method == METHOD_GPIO_44XX) {
  612. /* Disable wake-up during idle for dynamic tick */
  613. void __iomem *reg = bank->base + OMAP4_GPIO_IRQWAKEN0;
  614. __raw_writel(1 << offset, reg);
  615. }
  616. #endif
  617. if (!cpu_class_is_omap1()) {
  618. bank->mod_usage &= ~(1 << offset);
  619. if (!bank->mod_usage) {
  620. void __iomem *reg = bank->base;
  621. u32 ctrl;
  622. if (cpu_is_omap24xx() || cpu_is_omap34xx())
  623. reg += OMAP24XX_GPIO_CTRL;
  624. else if (cpu_is_omap44xx())
  625. reg += OMAP4_GPIO_CTRL;
  626. ctrl = __raw_readl(reg);
  627. /* Module is disabled, clocks are gated */
  628. ctrl |= 1;
  629. __raw_writel(ctrl, reg);
  630. }
  631. }
  632. _reset_gpio(bank, bank->chip.base + offset);
  633. spin_unlock_irqrestore(&bank->lock, flags);
  634. }
  635. /*
  636. * We need to unmask the GPIO bank interrupt as soon as possible to
  637. * avoid missing GPIO interrupts for other lines in the bank.
  638. * Then we need to mask-read-clear-unmask the triggered GPIO lines
  639. * in the bank to avoid missing nested interrupts for a GPIO line.
  640. * If we wait to unmask individual GPIO lines in the bank after the
  641. * line's interrupt handler has been run, we may miss some nested
  642. * interrupts.
  643. */
  644. static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
  645. {
  646. void __iomem *isr_reg = NULL;
  647. u32 isr;
  648. unsigned int gpio_irq, gpio_index;
  649. struct gpio_bank *bank;
  650. u32 retrigger = 0;
  651. int unmasked = 0;
  652. struct irq_chip *chip = irq_desc_get_chip(desc);
  653. chained_irq_enter(chip, desc);
  654. bank = irq_get_handler_data(irq);
  655. isr_reg = bank->base + bank->regs->irqstatus;
  656. if (WARN_ON(!isr_reg))
  657. goto exit;
  658. while(1) {
  659. u32 isr_saved, level_mask = 0;
  660. u32 enabled;
  661. enabled = _get_gpio_irqbank_mask(bank);
  662. isr_saved = isr = __raw_readl(isr_reg) & enabled;
  663. if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
  664. isr &= 0x0000ffff;
  665. if (cpu_class_is_omap2()) {
  666. level_mask = bank->level_mask & enabled;
  667. }
  668. /* clear edge sensitive interrupts before handler(s) are
  669. called so that we don't miss any interrupt occurred while
  670. executing them */
  671. _disable_gpio_irqbank(bank, isr_saved & ~level_mask);
  672. _clear_gpio_irqbank(bank, isr_saved & ~level_mask);
  673. _enable_gpio_irqbank(bank, isr_saved & ~level_mask);
  674. /* if there is only edge sensitive GPIO pin interrupts
  675. configured, we could unmask GPIO bank interrupt immediately */
  676. if (!level_mask && !unmasked) {
  677. unmasked = 1;
  678. chained_irq_exit(chip, desc);
  679. }
  680. isr |= retrigger;
  681. retrigger = 0;
  682. if (!isr)
  683. break;
  684. gpio_irq = bank->virtual_irq_start;
  685. for (; isr != 0; isr >>= 1, gpio_irq++) {
  686. gpio_index = GPIO_INDEX(bank, irq_to_gpio(gpio_irq));
  687. if (!(isr & 1))
  688. continue;
  689. #ifdef CONFIG_ARCH_OMAP1
  690. /*
  691. * Some chips can't respond to both rising and falling
  692. * at the same time. If this irq was requested with
  693. * both flags, we need to flip the ICR data for the IRQ
  694. * to respond to the IRQ for the opposite direction.
  695. * This will be indicated in the bank toggle_mask.
  696. */
  697. if (bank->toggle_mask & (1 << gpio_index))
  698. _toggle_gpio_edge_triggering(bank, gpio_index);
  699. #endif
  700. generic_handle_irq(gpio_irq);
  701. }
  702. }
  703. /* if bank has any level sensitive GPIO pin interrupt
  704. configured, we must unmask the bank interrupt only after
  705. handler(s) are executed in order to avoid spurious bank
  706. interrupt */
  707. exit:
  708. if (!unmasked)
  709. chained_irq_exit(chip, desc);
  710. }
  711. static void gpio_irq_shutdown(struct irq_data *d)
  712. {
  713. unsigned int gpio = d->irq - IH_GPIO_BASE;
  714. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  715. unsigned long flags;
  716. spin_lock_irqsave(&bank->lock, flags);
  717. _reset_gpio(bank, gpio);
  718. spin_unlock_irqrestore(&bank->lock, flags);
  719. }
  720. static void gpio_ack_irq(struct irq_data *d)
  721. {
  722. unsigned int gpio = d->irq - IH_GPIO_BASE;
  723. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  724. _clear_gpio_irqstatus(bank, gpio);
  725. }
  726. static void gpio_mask_irq(struct irq_data *d)
  727. {
  728. unsigned int gpio = d->irq - IH_GPIO_BASE;
  729. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  730. unsigned long flags;
  731. spin_lock_irqsave(&bank->lock, flags);
  732. _set_gpio_irqenable(bank, gpio, 0);
  733. _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), IRQ_TYPE_NONE);
  734. spin_unlock_irqrestore(&bank->lock, flags);
  735. }
  736. static void gpio_unmask_irq(struct irq_data *d)
  737. {
  738. unsigned int gpio = d->irq - IH_GPIO_BASE;
  739. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  740. unsigned int irq_mask = GPIO_BIT(bank, gpio);
  741. u32 trigger = irqd_get_trigger_type(d);
  742. unsigned long flags;
  743. spin_lock_irqsave(&bank->lock, flags);
  744. if (trigger)
  745. _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), trigger);
  746. /* For level-triggered GPIOs, the clearing must be done after
  747. * the HW source is cleared, thus after the handler has run */
  748. if (bank->level_mask & irq_mask) {
  749. _set_gpio_irqenable(bank, gpio, 0);
  750. _clear_gpio_irqstatus(bank, gpio);
  751. }
  752. _set_gpio_irqenable(bank, gpio, 1);
  753. spin_unlock_irqrestore(&bank->lock, flags);
  754. }
  755. static struct irq_chip gpio_irq_chip = {
  756. .name = "GPIO",
  757. .irq_shutdown = gpio_irq_shutdown,
  758. .irq_ack = gpio_ack_irq,
  759. .irq_mask = gpio_mask_irq,
  760. .irq_unmask = gpio_unmask_irq,
  761. .irq_set_type = gpio_irq_type,
  762. .irq_set_wake = gpio_wake_enable,
  763. };
  764. /*---------------------------------------------------------------------*/
  765. #ifdef CONFIG_ARCH_OMAP1
  766. /* MPUIO uses the always-on 32k clock */
  767. static void mpuio_ack_irq(struct irq_data *d)
  768. {
  769. /* The ISR is reset automatically, so do nothing here. */
  770. }
  771. static void mpuio_mask_irq(struct irq_data *d)
  772. {
  773. unsigned int gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
  774. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  775. _set_gpio_irqenable(bank, gpio, 0);
  776. }
  777. static void mpuio_unmask_irq(struct irq_data *d)
  778. {
  779. unsigned int gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
  780. struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
  781. _set_gpio_irqenable(bank, gpio, 1);
  782. }
  783. static struct irq_chip mpuio_irq_chip = {
  784. .name = "MPUIO",
  785. .irq_ack = mpuio_ack_irq,
  786. .irq_mask = mpuio_mask_irq,
  787. .irq_unmask = mpuio_unmask_irq,
  788. .irq_set_type = gpio_irq_type,
  789. #ifdef CONFIG_ARCH_OMAP16XX
  790. /* REVISIT: assuming only 16xx supports MPUIO wake events */
  791. .irq_set_wake = gpio_wake_enable,
  792. #endif
  793. };
  794. #define bank_is_mpuio(bank) ((bank)->method == METHOD_MPUIO)
  795. #ifdef CONFIG_ARCH_OMAP16XX
  796. #include <linux/platform_device.h>
  797. static int omap_mpuio_suspend_noirq(struct device *dev)
  798. {
  799. struct platform_device *pdev = to_platform_device(dev);
  800. struct gpio_bank *bank = platform_get_drvdata(pdev);
  801. void __iomem *mask_reg = bank->base +
  802. OMAP_MPUIO_GPIO_MASKIT / bank->stride;
  803. unsigned long flags;
  804. spin_lock_irqsave(&bank->lock, flags);
  805. bank->saved_wakeup = __raw_readl(mask_reg);
  806. __raw_writel(0xffff & ~bank->suspend_wakeup, mask_reg);
  807. spin_unlock_irqrestore(&bank->lock, flags);
  808. return 0;
  809. }
  810. static int omap_mpuio_resume_noirq(struct device *dev)
  811. {
  812. struct platform_device *pdev = to_platform_device(dev);
  813. struct gpio_bank *bank = platform_get_drvdata(pdev);
  814. void __iomem *mask_reg = bank->base +
  815. OMAP_MPUIO_GPIO_MASKIT / bank->stride;
  816. unsigned long flags;
  817. spin_lock_irqsave(&bank->lock, flags);
  818. __raw_writel(bank->saved_wakeup, mask_reg);
  819. spin_unlock_irqrestore(&bank->lock, flags);
  820. return 0;
  821. }
  822. static const struct dev_pm_ops omap_mpuio_dev_pm_ops = {
  823. .suspend_noirq = omap_mpuio_suspend_noirq,
  824. .resume_noirq = omap_mpuio_resume_noirq,
  825. };
  826. /* use platform_driver for this. */
  827. static struct platform_driver omap_mpuio_driver = {
  828. .driver = {
  829. .name = "mpuio",
  830. .pm = &omap_mpuio_dev_pm_ops,
  831. },
  832. };
  833. static struct platform_device omap_mpuio_device = {
  834. .name = "mpuio",
  835. .id = -1,
  836. .dev = {
  837. .driver = &omap_mpuio_driver.driver,
  838. }
  839. /* could list the /proc/iomem resources */
  840. };
  841. static inline void mpuio_init(void)
  842. {
  843. struct gpio_bank *bank = &gpio_bank[0];
  844. platform_set_drvdata(&omap_mpuio_device, bank);
  845. if (platform_driver_register(&omap_mpuio_driver) == 0)
  846. (void) platform_device_register(&omap_mpuio_device);
  847. }
  848. #else
  849. static inline void mpuio_init(void) {}
  850. #endif /* 16xx */
  851. #else
  852. extern struct irq_chip mpuio_irq_chip;
  853. #define bank_is_mpuio(bank) 0
  854. static inline void mpuio_init(void) {}
  855. #endif
  856. /*---------------------------------------------------------------------*/
  857. /* REVISIT these are stupid implementations! replace by ones that
  858. * don't switch on METHOD_* and which mostly avoid spinlocks
  859. */
  860. static int gpio_input(struct gpio_chip *chip, unsigned offset)
  861. {
  862. struct gpio_bank *bank;
  863. unsigned long flags;
  864. bank = container_of(chip, struct gpio_bank, chip);
  865. spin_lock_irqsave(&bank->lock, flags);
  866. _set_gpio_direction(bank, offset, 1);
  867. spin_unlock_irqrestore(&bank->lock, flags);
  868. return 0;
  869. }
  870. static int gpio_is_input(struct gpio_bank *bank, int mask)
  871. {
  872. void __iomem *reg = bank->base + bank->regs->direction;
  873. return __raw_readl(reg) & mask;
  874. }
  875. static int gpio_get(struct gpio_chip *chip, unsigned offset)
  876. {
  877. struct gpio_bank *bank;
  878. void __iomem *reg;
  879. int gpio;
  880. u32 mask;
  881. gpio = chip->base + offset;
  882. bank = container_of(chip, struct gpio_bank, chip);
  883. reg = bank->base;
  884. mask = GPIO_BIT(bank, gpio);
  885. if (gpio_is_input(bank, mask))
  886. return _get_gpio_datain(bank, gpio);
  887. else
  888. return _get_gpio_dataout(bank, gpio);
  889. }
  890. static int gpio_output(struct gpio_chip *chip, unsigned offset, int value)
  891. {
  892. struct gpio_bank *bank;
  893. unsigned long flags;
  894. bank = container_of(chip, struct gpio_bank, chip);
  895. spin_lock_irqsave(&bank->lock, flags);
  896. bank->set_dataout(bank, offset, value);
  897. _set_gpio_direction(bank, offset, 0);
  898. spin_unlock_irqrestore(&bank->lock, flags);
  899. return 0;
  900. }
  901. static int gpio_debounce(struct gpio_chip *chip, unsigned offset,
  902. unsigned debounce)
  903. {
  904. struct gpio_bank *bank;
  905. unsigned long flags;
  906. bank = container_of(chip, struct gpio_bank, chip);
  907. if (!bank->dbck) {
  908. bank->dbck = clk_get(bank->dev, "dbclk");
  909. if (IS_ERR(bank->dbck))
  910. dev_err(bank->dev, "Could not get gpio dbck\n");
  911. }
  912. spin_lock_irqsave(&bank->lock, flags);
  913. _set_gpio_debounce(bank, offset, debounce);
  914. spin_unlock_irqrestore(&bank->lock, flags);
  915. return 0;
  916. }
  917. static void gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  918. {
  919. struct gpio_bank *bank;
  920. unsigned long flags;
  921. bank = container_of(chip, struct gpio_bank, chip);
  922. spin_lock_irqsave(&bank->lock, flags);
  923. bank->set_dataout(bank, offset, value);
  924. spin_unlock_irqrestore(&bank->lock, flags);
  925. }
  926. static int gpio_2irq(struct gpio_chip *chip, unsigned offset)
  927. {
  928. struct gpio_bank *bank;
  929. bank = container_of(chip, struct gpio_bank, chip);
  930. return bank->virtual_irq_start + offset;
  931. }
  932. /*---------------------------------------------------------------------*/
  933. static void __init omap_gpio_show_rev(struct gpio_bank *bank)
  934. {
  935. u32 rev;
  936. if (cpu_is_omap16xx() && !(bank->method != METHOD_MPUIO))
  937. rev = __raw_readw(bank->base + OMAP1610_GPIO_REVISION);
  938. else if (cpu_is_omap24xx() || cpu_is_omap34xx())
  939. rev = __raw_readl(bank->base + OMAP24XX_GPIO_REVISION);
  940. else if (cpu_is_omap44xx())
  941. rev = __raw_readl(bank->base + OMAP4_GPIO_REVISION);
  942. else
  943. return;
  944. printk(KERN_INFO "OMAP GPIO hardware version %d.%d\n",
  945. (rev >> 4) & 0x0f, rev & 0x0f);
  946. }
  947. /* This lock class tells lockdep that GPIO irqs are in a different
  948. * category than their parents, so it won't report false recursion.
  949. */
  950. static struct lock_class_key gpio_lock_class;
  951. static inline int init_gpio_info(struct platform_device *pdev)
  952. {
  953. /* TODO: Analyze removing gpio_bank_count usage from driver code */
  954. gpio_bank = kzalloc(gpio_bank_count * sizeof(struct gpio_bank),
  955. GFP_KERNEL);
  956. if (!gpio_bank) {
  957. dev_err(&pdev->dev, "Memory alloc failed for gpio_bank\n");
  958. return -ENOMEM;
  959. }
  960. return 0;
  961. }
  962. /* TODO: Cleanup cpu_is_* checks */
  963. static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
  964. {
  965. if (cpu_class_is_omap2()) {
  966. if (cpu_is_omap44xx()) {
  967. __raw_writel(0xffffffff, bank->base +
  968. OMAP4_GPIO_IRQSTATUSCLR0);
  969. __raw_writel(0x00000000, bank->base +
  970. OMAP4_GPIO_DEBOUNCENABLE);
  971. /* Initialize interface clk ungated, module enabled */
  972. __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
  973. } else if (cpu_is_omap34xx()) {
  974. __raw_writel(0x00000000, bank->base +
  975. OMAP24XX_GPIO_IRQENABLE1);
  976. __raw_writel(0xffffffff, bank->base +
  977. OMAP24XX_GPIO_IRQSTATUS1);
  978. __raw_writel(0x00000000, bank->base +
  979. OMAP24XX_GPIO_DEBOUNCE_EN);
  980. /* Initialize interface clk ungated, module enabled */
  981. __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
  982. } else if (cpu_is_omap24xx()) {
  983. static const u32 non_wakeup_gpios[] = {
  984. 0xe203ffc0, 0x08700040
  985. };
  986. if (id < ARRAY_SIZE(non_wakeup_gpios))
  987. bank->non_wakeup_gpios = non_wakeup_gpios[id];
  988. }
  989. } else if (cpu_class_is_omap1()) {
  990. if (bank_is_mpuio(bank))
  991. __raw_writew(0xffff, bank->base +
  992. OMAP_MPUIO_GPIO_MASKIT / bank->stride);
  993. if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
  994. __raw_writew(0xffff, bank->base
  995. + OMAP1510_GPIO_INT_MASK);
  996. __raw_writew(0x0000, bank->base
  997. + OMAP1510_GPIO_INT_STATUS);
  998. }
  999. if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
  1000. __raw_writew(0x0000, bank->base
  1001. + OMAP1610_GPIO_IRQENABLE1);
  1002. __raw_writew(0xffff, bank->base
  1003. + OMAP1610_GPIO_IRQSTATUS1);
  1004. __raw_writew(0x0014, bank->base
  1005. + OMAP1610_GPIO_SYSCONFIG);
  1006. /*
  1007. * Enable system clock for GPIO module.
  1008. * The CAM_CLK_CTRL *is* really the right place.
  1009. */
  1010. omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
  1011. ULPD_CAM_CLK_CTRL);
  1012. }
  1013. if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
  1014. __raw_writel(0xffffffff, bank->base
  1015. + OMAP7XX_GPIO_INT_MASK);
  1016. __raw_writel(0x00000000, bank->base
  1017. + OMAP7XX_GPIO_INT_STATUS);
  1018. }
  1019. }
  1020. }
  1021. static void __devinit omap_gpio_chip_init(struct gpio_bank *bank)
  1022. {
  1023. int j;
  1024. static int gpio;
  1025. bank->mod_usage = 0;
  1026. /*
  1027. * REVISIT eventually switch from OMAP-specific gpio structs
  1028. * over to the generic ones
  1029. */
  1030. bank->chip.request = omap_gpio_request;
  1031. bank->chip.free = omap_gpio_free;
  1032. bank->chip.direction_input = gpio_input;
  1033. bank->chip.get = gpio_get;
  1034. bank->chip.direction_output = gpio_output;
  1035. bank->chip.set_debounce = gpio_debounce;
  1036. bank->chip.set = gpio_set;
  1037. bank->chip.to_irq = gpio_2irq;
  1038. if (bank_is_mpuio(bank)) {
  1039. bank->chip.label = "mpuio";
  1040. #ifdef CONFIG_ARCH_OMAP16XX
  1041. bank->chip.dev = &omap_mpuio_device.dev;
  1042. #endif
  1043. bank->chip.base = OMAP_MPUIO(0);
  1044. } else {
  1045. bank->chip.label = "gpio";
  1046. bank->chip.base = gpio;
  1047. gpio += bank->width;
  1048. }
  1049. bank->chip.ngpio = bank->width;
  1050. gpiochip_add(&bank->chip);
  1051. for (j = bank->virtual_irq_start;
  1052. j < bank->virtual_irq_start + bank->width; j++) {
  1053. irq_set_lockdep_class(j, &gpio_lock_class);
  1054. irq_set_chip_data(j, bank);
  1055. if (bank_is_mpuio(bank))
  1056. irq_set_chip(j, &mpuio_irq_chip);
  1057. else
  1058. irq_set_chip(j, &gpio_irq_chip);
  1059. irq_set_handler(j, handle_simple_irq);
  1060. set_irq_flags(j, IRQF_VALID);
  1061. }
  1062. irq_set_chained_handler(bank->irq, gpio_irq_handler);
  1063. irq_set_handler_data(bank->irq, bank);
  1064. }
  1065. static int __devinit omap_gpio_probe(struct platform_device *pdev)
  1066. {
  1067. static int gpio_init_done;
  1068. struct omap_gpio_platform_data *pdata;
  1069. struct resource *res;
  1070. int id;
  1071. struct gpio_bank *bank;
  1072. if (!pdev->dev.platform_data)
  1073. return -EINVAL;
  1074. pdata = pdev->dev.platform_data;
  1075. if (!gpio_init_done) {
  1076. int ret;
  1077. ret = init_gpio_info(pdev);
  1078. if (ret)
  1079. return ret;
  1080. }
  1081. id = pdev->id;
  1082. bank = &gpio_bank[id];
  1083. res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
  1084. if (unlikely(!res)) {
  1085. dev_err(&pdev->dev, "GPIO Bank %i Invalid IRQ resource\n", id);
  1086. return -ENODEV;
  1087. }
  1088. bank->irq = res->start;
  1089. bank->virtual_irq_start = pdata->virtual_irq_start;
  1090. bank->method = pdata->bank_type;
  1091. bank->dev = &pdev->dev;
  1092. bank->dbck_flag = pdata->dbck_flag;
  1093. bank->stride = pdata->bank_stride;
  1094. bank->width = pdata->bank_width;
  1095. bank->regs = pdata->regs;
  1096. if (bank->regs->set_dataout && bank->regs->clr_dataout)
  1097. bank->set_dataout = _set_gpio_dataout_reg;
  1098. else
  1099. bank->set_dataout = _set_gpio_dataout_mask;
  1100. spin_lock_init(&bank->lock);
  1101. /* Static mapping, never released */
  1102. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1103. if (unlikely(!res)) {
  1104. dev_err(&pdev->dev, "GPIO Bank %i Invalid mem resource\n", id);
  1105. return -ENODEV;
  1106. }
  1107. bank->base = ioremap(res->start, resource_size(res));
  1108. if (!bank->base) {
  1109. dev_err(&pdev->dev, "Could not ioremap gpio bank%i\n", id);
  1110. return -ENOMEM;
  1111. }
  1112. pm_runtime_enable(bank->dev);
  1113. pm_runtime_get_sync(bank->dev);
  1114. omap_gpio_mod_init(bank, id);
  1115. omap_gpio_chip_init(bank);
  1116. omap_gpio_show_rev(bank);
  1117. if (!gpio_init_done)
  1118. gpio_init_done = 1;
  1119. return 0;
  1120. }
  1121. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
  1122. static int omap_gpio_suspend(void)
  1123. {
  1124. int i;
  1125. if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
  1126. return 0;
  1127. for (i = 0; i < gpio_bank_count; i++) {
  1128. struct gpio_bank *bank = &gpio_bank[i];
  1129. void __iomem *wake_status;
  1130. void __iomem *wake_clear;
  1131. void __iomem *wake_set;
  1132. unsigned long flags;
  1133. switch (bank->method) {
  1134. #ifdef CONFIG_ARCH_OMAP16XX
  1135. case METHOD_GPIO_1610:
  1136. wake_status = bank->base + OMAP1610_GPIO_WAKEUPENABLE;
  1137. wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  1138. wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
  1139. break;
  1140. #endif
  1141. #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
  1142. case METHOD_GPIO_24XX:
  1143. wake_status = bank->base + OMAP24XX_GPIO_WAKE_EN;
  1144. wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  1145. wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
  1146. break;
  1147. #endif
  1148. #ifdef CONFIG_ARCH_OMAP4
  1149. case METHOD_GPIO_44XX:
  1150. wake_status = bank->base + OMAP4_GPIO_IRQWAKEN0;
  1151. wake_clear = bank->base + OMAP4_GPIO_IRQWAKEN0;
  1152. wake_set = bank->base + OMAP4_GPIO_IRQWAKEN0;
  1153. break;
  1154. #endif
  1155. default:
  1156. continue;
  1157. }
  1158. spin_lock_irqsave(&bank->lock, flags);
  1159. bank->saved_wakeup = __raw_readl(wake_status);
  1160. __raw_writel(0xffffffff, wake_clear);
  1161. __raw_writel(bank->suspend_wakeup, wake_set);
  1162. spin_unlock_irqrestore(&bank->lock, flags);
  1163. }
  1164. return 0;
  1165. }
  1166. static void omap_gpio_resume(void)
  1167. {
  1168. int i;
  1169. if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
  1170. return;
  1171. for (i = 0; i < gpio_bank_count; i++) {
  1172. struct gpio_bank *bank = &gpio_bank[i];
  1173. void __iomem *wake_clear;
  1174. void __iomem *wake_set;
  1175. unsigned long flags;
  1176. switch (bank->method) {
  1177. #ifdef CONFIG_ARCH_OMAP16XX
  1178. case METHOD_GPIO_1610:
  1179. wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
  1180. wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
  1181. break;
  1182. #endif
  1183. #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
  1184. case METHOD_GPIO_24XX:
  1185. wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
  1186. wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
  1187. break;
  1188. #endif
  1189. #ifdef CONFIG_ARCH_OMAP4
  1190. case METHOD_GPIO_44XX:
  1191. wake_clear = bank->base + OMAP4_GPIO_IRQWAKEN0;
  1192. wake_set = bank->base + OMAP4_GPIO_IRQWAKEN0;
  1193. break;
  1194. #endif
  1195. default:
  1196. continue;
  1197. }
  1198. spin_lock_irqsave(&bank->lock, flags);
  1199. __raw_writel(0xffffffff, wake_clear);
  1200. __raw_writel(bank->saved_wakeup, wake_set);
  1201. spin_unlock_irqrestore(&bank->lock, flags);
  1202. }
  1203. }
  1204. static struct syscore_ops omap_gpio_syscore_ops = {
  1205. .suspend = omap_gpio_suspend,
  1206. .resume = omap_gpio_resume,
  1207. };
  1208. #endif
  1209. #ifdef CONFIG_ARCH_OMAP2PLUS
  1210. static int workaround_enabled;
  1211. void omap2_gpio_prepare_for_idle(int off_mode)
  1212. {
  1213. int i, c = 0;
  1214. int min = 0;
  1215. if (cpu_is_omap34xx())
  1216. min = 1;
  1217. for (i = min; i < gpio_bank_count; i++) {
  1218. struct gpio_bank *bank = &gpio_bank[i];
  1219. u32 l1 = 0, l2 = 0;
  1220. int j;
  1221. for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
  1222. clk_disable(bank->dbck);
  1223. if (!off_mode)
  1224. continue;
  1225. /* If going to OFF, remove triggering for all
  1226. * non-wakeup GPIOs. Otherwise spurious IRQs will be
  1227. * generated. See OMAP2420 Errata item 1.101. */
  1228. if (!(bank->enabled_non_wakeup_gpios))
  1229. continue;
  1230. if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
  1231. bank->saved_datain = __raw_readl(bank->base +
  1232. OMAP24XX_GPIO_DATAIN);
  1233. l1 = __raw_readl(bank->base +
  1234. OMAP24XX_GPIO_FALLINGDETECT);
  1235. l2 = __raw_readl(bank->base +
  1236. OMAP24XX_GPIO_RISINGDETECT);
  1237. }
  1238. if (cpu_is_omap44xx()) {
  1239. bank->saved_datain = __raw_readl(bank->base +
  1240. OMAP4_GPIO_DATAIN);
  1241. l1 = __raw_readl(bank->base +
  1242. OMAP4_GPIO_FALLINGDETECT);
  1243. l2 = __raw_readl(bank->base +
  1244. OMAP4_GPIO_RISINGDETECT);
  1245. }
  1246. bank->saved_fallingdetect = l1;
  1247. bank->saved_risingdetect = l2;
  1248. l1 &= ~bank->enabled_non_wakeup_gpios;
  1249. l2 &= ~bank->enabled_non_wakeup_gpios;
  1250. if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
  1251. __raw_writel(l1, bank->base +
  1252. OMAP24XX_GPIO_FALLINGDETECT);
  1253. __raw_writel(l2, bank->base +
  1254. OMAP24XX_GPIO_RISINGDETECT);
  1255. }
  1256. if (cpu_is_omap44xx()) {
  1257. __raw_writel(l1, bank->base + OMAP4_GPIO_FALLINGDETECT);
  1258. __raw_writel(l2, bank->base + OMAP4_GPIO_RISINGDETECT);
  1259. }
  1260. c++;
  1261. }
  1262. if (!c) {
  1263. workaround_enabled = 0;
  1264. return;
  1265. }
  1266. workaround_enabled = 1;
  1267. }
  1268. void omap2_gpio_resume_after_idle(void)
  1269. {
  1270. int i;
  1271. int min = 0;
  1272. if (cpu_is_omap34xx())
  1273. min = 1;
  1274. for (i = min; i < gpio_bank_count; i++) {
  1275. struct gpio_bank *bank = &gpio_bank[i];
  1276. u32 l = 0, gen, gen0, gen1;
  1277. int j;
  1278. for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
  1279. clk_enable(bank->dbck);
  1280. if (!workaround_enabled)
  1281. continue;
  1282. if (!(bank->enabled_non_wakeup_gpios))
  1283. continue;
  1284. if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
  1285. __raw_writel(bank->saved_fallingdetect,
  1286. bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1287. __raw_writel(bank->saved_risingdetect,
  1288. bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1289. l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
  1290. }
  1291. if (cpu_is_omap44xx()) {
  1292. __raw_writel(bank->saved_fallingdetect,
  1293. bank->base + OMAP4_GPIO_FALLINGDETECT);
  1294. __raw_writel(bank->saved_risingdetect,
  1295. bank->base + OMAP4_GPIO_RISINGDETECT);
  1296. l = __raw_readl(bank->base + OMAP4_GPIO_DATAIN);
  1297. }
  1298. /* Check if any of the non-wakeup interrupt GPIOs have changed
  1299. * state. If so, generate an IRQ by software. This is
  1300. * horribly racy, but it's the best we can do to work around
  1301. * this silicon bug. */
  1302. l ^= bank->saved_datain;
  1303. l &= bank->enabled_non_wakeup_gpios;
  1304. /*
  1305. * No need to generate IRQs for the rising edge for gpio IRQs
  1306. * configured with falling edge only; and vice versa.
  1307. */
  1308. gen0 = l & bank->saved_fallingdetect;
  1309. gen0 &= bank->saved_datain;
  1310. gen1 = l & bank->saved_risingdetect;
  1311. gen1 &= ~(bank->saved_datain);
  1312. /* FIXME: Consider GPIO IRQs with level detections properly! */
  1313. gen = l & (~(bank->saved_fallingdetect) &
  1314. ~(bank->saved_risingdetect));
  1315. /* Consider all GPIO IRQs needed to be updated */
  1316. gen |= gen0 | gen1;
  1317. if (gen) {
  1318. u32 old0, old1;
  1319. if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
  1320. old0 = __raw_readl(bank->base +
  1321. OMAP24XX_GPIO_LEVELDETECT0);
  1322. old1 = __raw_readl(bank->base +
  1323. OMAP24XX_GPIO_LEVELDETECT1);
  1324. __raw_writel(old0 | gen, bank->base +
  1325. OMAP24XX_GPIO_LEVELDETECT0);
  1326. __raw_writel(old1 | gen, bank->base +
  1327. OMAP24XX_GPIO_LEVELDETECT1);
  1328. __raw_writel(old0, bank->base +
  1329. OMAP24XX_GPIO_LEVELDETECT0);
  1330. __raw_writel(old1, bank->base +
  1331. OMAP24XX_GPIO_LEVELDETECT1);
  1332. }
  1333. if (cpu_is_omap44xx()) {
  1334. old0 = __raw_readl(bank->base +
  1335. OMAP4_GPIO_LEVELDETECT0);
  1336. old1 = __raw_readl(bank->base +
  1337. OMAP4_GPIO_LEVELDETECT1);
  1338. __raw_writel(old0 | l, bank->base +
  1339. OMAP4_GPIO_LEVELDETECT0);
  1340. __raw_writel(old1 | l, bank->base +
  1341. OMAP4_GPIO_LEVELDETECT1);
  1342. __raw_writel(old0, bank->base +
  1343. OMAP4_GPIO_LEVELDETECT0);
  1344. __raw_writel(old1, bank->base +
  1345. OMAP4_GPIO_LEVELDETECT1);
  1346. }
  1347. }
  1348. }
  1349. }
  1350. #endif
  1351. #ifdef CONFIG_ARCH_OMAP3
  1352. /* save the registers of bank 2-6 */
  1353. void omap_gpio_save_context(void)
  1354. {
  1355. int i;
  1356. /* saving banks from 2-6 only since GPIO1 is in WKUP */
  1357. for (i = 1; i < gpio_bank_count; i++) {
  1358. struct gpio_bank *bank = &gpio_bank[i];
  1359. gpio_context[i].irqenable1 =
  1360. __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1);
  1361. gpio_context[i].irqenable2 =
  1362. __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE2);
  1363. gpio_context[i].wake_en =
  1364. __raw_readl(bank->base + OMAP24XX_GPIO_WAKE_EN);
  1365. gpio_context[i].ctrl =
  1366. __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
  1367. gpio_context[i].oe =
  1368. __raw_readl(bank->base + OMAP24XX_GPIO_OE);
  1369. gpio_context[i].leveldetect0 =
  1370. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
  1371. gpio_context[i].leveldetect1 =
  1372. __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  1373. gpio_context[i].risingdetect =
  1374. __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1375. gpio_context[i].fallingdetect =
  1376. __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1377. gpio_context[i].dataout =
  1378. __raw_readl(bank->base + OMAP24XX_GPIO_DATAOUT);
  1379. }
  1380. }
  1381. /* restore the required registers of bank 2-6 */
  1382. void omap_gpio_restore_context(void)
  1383. {
  1384. int i;
  1385. for (i = 1; i < gpio_bank_count; i++) {
  1386. struct gpio_bank *bank = &gpio_bank[i];
  1387. __raw_writel(gpio_context[i].irqenable1,
  1388. bank->base + OMAP24XX_GPIO_IRQENABLE1);
  1389. __raw_writel(gpio_context[i].irqenable2,
  1390. bank->base + OMAP24XX_GPIO_IRQENABLE2);
  1391. __raw_writel(gpio_context[i].wake_en,
  1392. bank->base + OMAP24XX_GPIO_WAKE_EN);
  1393. __raw_writel(gpio_context[i].ctrl,
  1394. bank->base + OMAP24XX_GPIO_CTRL);
  1395. __raw_writel(gpio_context[i].oe,
  1396. bank->base + OMAP24XX_GPIO_OE);
  1397. __raw_writel(gpio_context[i].leveldetect0,
  1398. bank->base + OMAP24XX_GPIO_LEVELDETECT0);
  1399. __raw_writel(gpio_context[i].leveldetect1,
  1400. bank->base + OMAP24XX_GPIO_LEVELDETECT1);
  1401. __raw_writel(gpio_context[i].risingdetect,
  1402. bank->base + OMAP24XX_GPIO_RISINGDETECT);
  1403. __raw_writel(gpio_context[i].fallingdetect,
  1404. bank->base + OMAP24XX_GPIO_FALLINGDETECT);
  1405. __raw_writel(gpio_context[i].dataout,
  1406. bank->base + OMAP24XX_GPIO_DATAOUT);
  1407. }
  1408. }
  1409. #endif
  1410. static struct platform_driver omap_gpio_driver = {
  1411. .probe = omap_gpio_probe,
  1412. .driver = {
  1413. .name = "omap_gpio",
  1414. },
  1415. };
  1416. /*
  1417. * gpio driver register needs to be done before
  1418. * machine_init functions access gpio APIs.
  1419. * Hence omap_gpio_drv_reg() is a postcore_initcall.
  1420. */
  1421. static int __init omap_gpio_drv_reg(void)
  1422. {
  1423. return platform_driver_register(&omap_gpio_driver);
  1424. }
  1425. postcore_initcall(omap_gpio_drv_reg);
  1426. static int __init omap_gpio_sysinit(void)
  1427. {
  1428. mpuio_init();
  1429. #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
  1430. if (cpu_is_omap16xx() || cpu_class_is_omap2())
  1431. register_syscore_ops(&omap_gpio_syscore_ops);
  1432. #endif
  1433. return 0;
  1434. }
  1435. arch_initcall(omap_gpio_sysinit);