gpio-omap.c 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758
  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/device.h>
  22. #include <linux/pm_runtime.h>
  23. #include <linux/pm.h>
  24. #include <linux/of.h>
  25. #include <linux/of_device.h>
  26. #include <linux/gpio/driver.h>
  27. #include <linux/bitops.h>
  28. #include <linux/platform_data/gpio-omap.h>
  29. #define OFF_MODE 1
  30. #define OMAP4_GPIO_DEBOUNCINGTIME_MASK 0xFF
  31. static LIST_HEAD(omap_gpio_list);
  32. struct gpio_regs {
  33. u32 irqenable1;
  34. u32 irqenable2;
  35. u32 wake_en;
  36. u32 ctrl;
  37. u32 oe;
  38. u32 leveldetect0;
  39. u32 leveldetect1;
  40. u32 risingdetect;
  41. u32 fallingdetect;
  42. u32 dataout;
  43. u32 debounce;
  44. u32 debounce_en;
  45. };
  46. struct gpio_bank {
  47. struct list_head node;
  48. void __iomem *base;
  49. int irq;
  50. u32 non_wakeup_gpios;
  51. u32 enabled_non_wakeup_gpios;
  52. struct gpio_regs context;
  53. u32 saved_datain;
  54. u32 level_mask;
  55. u32 toggle_mask;
  56. raw_spinlock_t lock;
  57. raw_spinlock_t wa_lock;
  58. struct gpio_chip chip;
  59. struct clk *dbck;
  60. u32 mod_usage;
  61. u32 irq_usage;
  62. u32 dbck_enable_mask;
  63. bool dbck_enabled;
  64. bool is_mpuio;
  65. bool dbck_flag;
  66. bool loses_context;
  67. bool context_valid;
  68. int stride;
  69. u32 width;
  70. int context_loss_count;
  71. int power_mode;
  72. bool workaround_enabled;
  73. void (*set_dataout)(struct gpio_bank *bank, unsigned gpio, int enable);
  74. void (*set_dataout_multiple)(struct gpio_bank *bank,
  75. unsigned long *mask, unsigned long *bits);
  76. int (*get_context_loss_count)(struct device *dev);
  77. struct omap_gpio_reg_offs *regs;
  78. };
  79. #define GPIO_MOD_CTRL_BIT BIT(0)
  80. #define BANK_USED(bank) (bank->mod_usage || bank->irq_usage)
  81. #define LINE_USED(line, offset) (line & (BIT(offset)))
  82. static void omap_gpio_unmask_irq(struct irq_data *d);
  83. static inline struct gpio_bank *omap_irq_data_get_bank(struct irq_data *d)
  84. {
  85. struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
  86. return gpiochip_get_data(chip);
  87. }
  88. static void omap_set_gpio_direction(struct gpio_bank *bank, int gpio,
  89. int is_input)
  90. {
  91. void __iomem *reg = bank->base;
  92. u32 l;
  93. reg += bank->regs->direction;
  94. l = readl_relaxed(reg);
  95. if (is_input)
  96. l |= BIT(gpio);
  97. else
  98. l &= ~(BIT(gpio));
  99. writel_relaxed(l, reg);
  100. bank->context.oe = l;
  101. }
  102. /* set data out value using dedicate set/clear register */
  103. static void omap_set_gpio_dataout_reg(struct gpio_bank *bank, unsigned offset,
  104. int enable)
  105. {
  106. void __iomem *reg = bank->base;
  107. u32 l = BIT(offset);
  108. if (enable) {
  109. reg += bank->regs->set_dataout;
  110. bank->context.dataout |= l;
  111. } else {
  112. reg += bank->regs->clr_dataout;
  113. bank->context.dataout &= ~l;
  114. }
  115. writel_relaxed(l, reg);
  116. }
  117. /* set data out value using mask register */
  118. static void omap_set_gpio_dataout_mask(struct gpio_bank *bank, unsigned offset,
  119. int enable)
  120. {
  121. void __iomem *reg = bank->base + bank->regs->dataout;
  122. u32 gpio_bit = BIT(offset);
  123. u32 l;
  124. l = readl_relaxed(reg);
  125. if (enable)
  126. l |= gpio_bit;
  127. else
  128. l &= ~gpio_bit;
  129. writel_relaxed(l, reg);
  130. bank->context.dataout = l;
  131. }
  132. static int omap_get_gpio_datain(struct gpio_bank *bank, int offset)
  133. {
  134. void __iomem *reg = bank->base + bank->regs->datain;
  135. return (readl_relaxed(reg) & (BIT(offset))) != 0;
  136. }
  137. static int omap_get_gpio_dataout(struct gpio_bank *bank, int offset)
  138. {
  139. void __iomem *reg = bank->base + bank->regs->dataout;
  140. return (readl_relaxed(reg) & (BIT(offset))) != 0;
  141. }
  142. /* set multiple data out values using dedicate set/clear register */
  143. static void omap_set_gpio_dataout_reg_multiple(struct gpio_bank *bank,
  144. unsigned long *mask,
  145. unsigned long *bits)
  146. {
  147. void __iomem *reg = bank->base;
  148. u32 l;
  149. l = *bits & *mask;
  150. writel_relaxed(l, reg + bank->regs->set_dataout);
  151. bank->context.dataout |= l;
  152. l = ~*bits & *mask;
  153. writel_relaxed(l, reg + bank->regs->clr_dataout);
  154. bank->context.dataout &= ~l;
  155. }
  156. /* set multiple data out values using mask register */
  157. static void omap_set_gpio_dataout_mask_multiple(struct gpio_bank *bank,
  158. unsigned long *mask,
  159. unsigned long *bits)
  160. {
  161. void __iomem *reg = bank->base + bank->regs->dataout;
  162. u32 l = (readl_relaxed(reg) & ~*mask) | (*bits & *mask);
  163. writel_relaxed(l, reg);
  164. bank->context.dataout = l;
  165. }
  166. static unsigned long omap_get_gpio_datain_multiple(struct gpio_bank *bank,
  167. unsigned long *mask)
  168. {
  169. void __iomem *reg = bank->base + bank->regs->datain;
  170. return readl_relaxed(reg) & *mask;
  171. }
  172. static unsigned long omap_get_gpio_dataout_multiple(struct gpio_bank *bank,
  173. unsigned long *mask)
  174. {
  175. void __iomem *reg = bank->base + bank->regs->dataout;
  176. return readl_relaxed(reg) & *mask;
  177. }
  178. static inline void omap_gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set)
  179. {
  180. int l = readl_relaxed(base + reg);
  181. if (set)
  182. l |= mask;
  183. else
  184. l &= ~mask;
  185. writel_relaxed(l, base + reg);
  186. }
  187. static inline void omap_gpio_dbck_enable(struct gpio_bank *bank)
  188. {
  189. if (bank->dbck_enable_mask && !bank->dbck_enabled) {
  190. clk_enable(bank->dbck);
  191. bank->dbck_enabled = true;
  192. writel_relaxed(bank->dbck_enable_mask,
  193. bank->base + bank->regs->debounce_en);
  194. }
  195. }
  196. static inline void omap_gpio_dbck_disable(struct gpio_bank *bank)
  197. {
  198. if (bank->dbck_enable_mask && bank->dbck_enabled) {
  199. /*
  200. * Disable debounce before cutting it's clock. If debounce is
  201. * enabled but the clock is not, GPIO module seems to be unable
  202. * to detect events and generate interrupts at least on OMAP3.
  203. */
  204. writel_relaxed(0, bank->base + bank->regs->debounce_en);
  205. clk_disable(bank->dbck);
  206. bank->dbck_enabled = false;
  207. }
  208. }
  209. /**
  210. * omap2_set_gpio_debounce - low level gpio debounce time
  211. * @bank: the gpio bank we're acting upon
  212. * @offset: the gpio number on this @bank
  213. * @debounce: debounce time to use
  214. *
  215. * OMAP's debounce time is in 31us steps
  216. * <debounce time> = (GPIO_DEBOUNCINGTIME[7:0].DEBOUNCETIME + 1) x 31
  217. * so we need to convert and round up to the closest unit.
  218. *
  219. * Return: 0 on success, negative error otherwise.
  220. */
  221. static int omap2_set_gpio_debounce(struct gpio_bank *bank, unsigned offset,
  222. unsigned debounce)
  223. {
  224. void __iomem *reg;
  225. u32 val;
  226. u32 l;
  227. bool enable = !!debounce;
  228. if (!bank->dbck_flag)
  229. return -ENOTSUPP;
  230. if (enable) {
  231. debounce = DIV_ROUND_UP(debounce, 31) - 1;
  232. if ((debounce & OMAP4_GPIO_DEBOUNCINGTIME_MASK) != debounce)
  233. return -EINVAL;
  234. }
  235. l = BIT(offset);
  236. clk_enable(bank->dbck);
  237. reg = bank->base + bank->regs->debounce;
  238. writel_relaxed(debounce, reg);
  239. reg = bank->base + bank->regs->debounce_en;
  240. val = readl_relaxed(reg);
  241. if (enable)
  242. val |= l;
  243. else
  244. val &= ~l;
  245. bank->dbck_enable_mask = val;
  246. writel_relaxed(val, reg);
  247. clk_disable(bank->dbck);
  248. /*
  249. * Enable debounce clock per module.
  250. * This call is mandatory because in omap_gpio_request() when
  251. * *_runtime_get_sync() is called, _gpio_dbck_enable() within
  252. * runtime callbck fails to turn on dbck because dbck_enable_mask
  253. * used within _gpio_dbck_enable() is still not initialized at
  254. * that point. Therefore we have to enable dbck here.
  255. */
  256. omap_gpio_dbck_enable(bank);
  257. if (bank->dbck_enable_mask) {
  258. bank->context.debounce = debounce;
  259. bank->context.debounce_en = val;
  260. }
  261. return 0;
  262. }
  263. /**
  264. * omap_clear_gpio_debounce - clear debounce settings for a gpio
  265. * @bank: the gpio bank we're acting upon
  266. * @offset: the gpio number on this @bank
  267. *
  268. * If a gpio is using debounce, then clear the debounce enable bit and if
  269. * this is the only gpio in this bank using debounce, then clear the debounce
  270. * time too. The debounce clock will also be disabled when calling this function
  271. * if this is the only gpio in the bank using debounce.
  272. */
  273. static void omap_clear_gpio_debounce(struct gpio_bank *bank, unsigned offset)
  274. {
  275. u32 gpio_bit = BIT(offset);
  276. if (!bank->dbck_flag)
  277. return;
  278. if (!(bank->dbck_enable_mask & gpio_bit))
  279. return;
  280. bank->dbck_enable_mask &= ~gpio_bit;
  281. bank->context.debounce_en &= ~gpio_bit;
  282. writel_relaxed(bank->context.debounce_en,
  283. bank->base + bank->regs->debounce_en);
  284. if (!bank->dbck_enable_mask) {
  285. bank->context.debounce = 0;
  286. writel_relaxed(bank->context.debounce, bank->base +
  287. bank->regs->debounce);
  288. clk_disable(bank->dbck);
  289. bank->dbck_enabled = false;
  290. }
  291. }
  292. static inline void omap_set_gpio_trigger(struct gpio_bank *bank, int gpio,
  293. unsigned trigger)
  294. {
  295. void __iomem *base = bank->base;
  296. u32 gpio_bit = BIT(gpio);
  297. omap_gpio_rmw(base, bank->regs->leveldetect0, gpio_bit,
  298. trigger & IRQ_TYPE_LEVEL_LOW);
  299. omap_gpio_rmw(base, bank->regs->leveldetect1, gpio_bit,
  300. trigger & IRQ_TYPE_LEVEL_HIGH);
  301. omap_gpio_rmw(base, bank->regs->risingdetect, gpio_bit,
  302. trigger & IRQ_TYPE_EDGE_RISING);
  303. omap_gpio_rmw(base, bank->regs->fallingdetect, gpio_bit,
  304. trigger & IRQ_TYPE_EDGE_FALLING);
  305. bank->context.leveldetect0 =
  306. readl_relaxed(bank->base + bank->regs->leveldetect0);
  307. bank->context.leveldetect1 =
  308. readl_relaxed(bank->base + bank->regs->leveldetect1);
  309. bank->context.risingdetect =
  310. readl_relaxed(bank->base + bank->regs->risingdetect);
  311. bank->context.fallingdetect =
  312. readl_relaxed(bank->base + bank->regs->fallingdetect);
  313. if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
  314. omap_gpio_rmw(base, bank->regs->wkup_en, gpio_bit, trigger != 0);
  315. bank->context.wake_en =
  316. readl_relaxed(bank->base + bank->regs->wkup_en);
  317. }
  318. /* This part needs to be executed always for OMAP{34xx, 44xx} */
  319. if (!bank->regs->irqctrl) {
  320. /* On omap24xx proceed only when valid GPIO bit is set */
  321. if (bank->non_wakeup_gpios) {
  322. if (!(bank->non_wakeup_gpios & gpio_bit))
  323. goto exit;
  324. }
  325. /*
  326. * Log the edge gpio and manually trigger the IRQ
  327. * after resume if the input level changes
  328. * to avoid irq lost during PER RET/OFF mode
  329. * Applies for omap2 non-wakeup gpio and all omap3 gpios
  330. */
  331. if (trigger & IRQ_TYPE_EDGE_BOTH)
  332. bank->enabled_non_wakeup_gpios |= gpio_bit;
  333. else
  334. bank->enabled_non_wakeup_gpios &= ~gpio_bit;
  335. }
  336. exit:
  337. bank->level_mask =
  338. readl_relaxed(bank->base + bank->regs->leveldetect0) |
  339. readl_relaxed(bank->base + bank->regs->leveldetect1);
  340. }
  341. #ifdef CONFIG_ARCH_OMAP1
  342. /*
  343. * This only applies to chips that can't do both rising and falling edge
  344. * detection at once. For all other chips, this function is a noop.
  345. */
  346. static void omap_toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
  347. {
  348. void __iomem *reg = bank->base;
  349. u32 l = 0;
  350. if (!bank->regs->irqctrl)
  351. return;
  352. reg += bank->regs->irqctrl;
  353. l = readl_relaxed(reg);
  354. if ((l >> gpio) & 1)
  355. l &= ~(BIT(gpio));
  356. else
  357. l |= BIT(gpio);
  358. writel_relaxed(l, reg);
  359. }
  360. #else
  361. static void omap_toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio) {}
  362. #endif
  363. static int omap_set_gpio_triggering(struct gpio_bank *bank, int gpio,
  364. unsigned trigger)
  365. {
  366. void __iomem *reg = bank->base;
  367. void __iomem *base = bank->base;
  368. u32 l = 0;
  369. if (bank->regs->leveldetect0 && bank->regs->wkup_en) {
  370. omap_set_gpio_trigger(bank, gpio, trigger);
  371. } else if (bank->regs->irqctrl) {
  372. reg += bank->regs->irqctrl;
  373. l = readl_relaxed(reg);
  374. if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
  375. bank->toggle_mask |= BIT(gpio);
  376. if (trigger & IRQ_TYPE_EDGE_RISING)
  377. l |= BIT(gpio);
  378. else if (trigger & IRQ_TYPE_EDGE_FALLING)
  379. l &= ~(BIT(gpio));
  380. else
  381. return -EINVAL;
  382. writel_relaxed(l, reg);
  383. } else if (bank->regs->edgectrl1) {
  384. if (gpio & 0x08)
  385. reg += bank->regs->edgectrl2;
  386. else
  387. reg += bank->regs->edgectrl1;
  388. gpio &= 0x07;
  389. l = readl_relaxed(reg);
  390. l &= ~(3 << (gpio << 1));
  391. if (trigger & IRQ_TYPE_EDGE_RISING)
  392. l |= 2 << (gpio << 1);
  393. if (trigger & IRQ_TYPE_EDGE_FALLING)
  394. l |= BIT(gpio << 1);
  395. /* Enable wake-up during idle for dynamic tick */
  396. omap_gpio_rmw(base, bank->regs->wkup_en, BIT(gpio), trigger);
  397. bank->context.wake_en =
  398. readl_relaxed(bank->base + bank->regs->wkup_en);
  399. writel_relaxed(l, reg);
  400. }
  401. return 0;
  402. }
  403. static void omap_enable_gpio_module(struct gpio_bank *bank, unsigned offset)
  404. {
  405. if (bank->regs->pinctrl) {
  406. void __iomem *reg = bank->base + bank->regs->pinctrl;
  407. /* Claim the pin for MPU */
  408. writel_relaxed(readl_relaxed(reg) | (BIT(offset)), reg);
  409. }
  410. if (bank->regs->ctrl && !BANK_USED(bank)) {
  411. void __iomem *reg = bank->base + bank->regs->ctrl;
  412. u32 ctrl;
  413. ctrl = readl_relaxed(reg);
  414. /* Module is enabled, clocks are not gated */
  415. ctrl &= ~GPIO_MOD_CTRL_BIT;
  416. writel_relaxed(ctrl, reg);
  417. bank->context.ctrl = ctrl;
  418. }
  419. }
  420. static void omap_disable_gpio_module(struct gpio_bank *bank, unsigned offset)
  421. {
  422. void __iomem *base = bank->base;
  423. if (bank->regs->wkup_en &&
  424. !LINE_USED(bank->mod_usage, offset) &&
  425. !LINE_USED(bank->irq_usage, offset)) {
  426. /* Disable wake-up during idle for dynamic tick */
  427. omap_gpio_rmw(base, bank->regs->wkup_en, BIT(offset), 0);
  428. bank->context.wake_en =
  429. readl_relaxed(bank->base + bank->regs->wkup_en);
  430. }
  431. if (bank->regs->ctrl && !BANK_USED(bank)) {
  432. void __iomem *reg = bank->base + bank->regs->ctrl;
  433. u32 ctrl;
  434. ctrl = readl_relaxed(reg);
  435. /* Module is disabled, clocks are gated */
  436. ctrl |= GPIO_MOD_CTRL_BIT;
  437. writel_relaxed(ctrl, reg);
  438. bank->context.ctrl = ctrl;
  439. }
  440. }
  441. static int omap_gpio_is_input(struct gpio_bank *bank, unsigned offset)
  442. {
  443. void __iomem *reg = bank->base + bank->regs->direction;
  444. return readl_relaxed(reg) & BIT(offset);
  445. }
  446. static void omap_gpio_init_irq(struct gpio_bank *bank, unsigned offset)
  447. {
  448. if (!LINE_USED(bank->mod_usage, offset)) {
  449. omap_enable_gpio_module(bank, offset);
  450. omap_set_gpio_direction(bank, offset, 1);
  451. }
  452. bank->irq_usage |= BIT(offset);
  453. }
  454. static int omap_gpio_irq_type(struct irq_data *d, unsigned type)
  455. {
  456. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  457. int retval;
  458. unsigned long flags;
  459. unsigned offset = d->hwirq;
  460. if (type & ~IRQ_TYPE_SENSE_MASK)
  461. return -EINVAL;
  462. if (!bank->regs->leveldetect0 &&
  463. (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
  464. return -EINVAL;
  465. raw_spin_lock_irqsave(&bank->lock, flags);
  466. retval = omap_set_gpio_triggering(bank, offset, type);
  467. if (retval) {
  468. raw_spin_unlock_irqrestore(&bank->lock, flags);
  469. goto error;
  470. }
  471. omap_gpio_init_irq(bank, offset);
  472. if (!omap_gpio_is_input(bank, offset)) {
  473. raw_spin_unlock_irqrestore(&bank->lock, flags);
  474. retval = -EINVAL;
  475. goto error;
  476. }
  477. raw_spin_unlock_irqrestore(&bank->lock, flags);
  478. if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
  479. irq_set_handler_locked(d, handle_level_irq);
  480. else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  481. /*
  482. * Edge IRQs are already cleared/acked in irq_handler and
  483. * not need to be masked, as result handle_edge_irq()
  484. * logic is excessed here and may cause lose of interrupts.
  485. * So just use handle_simple_irq.
  486. */
  487. irq_set_handler_locked(d, handle_simple_irq);
  488. return 0;
  489. error:
  490. return retval;
  491. }
  492. static void omap_clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  493. {
  494. void __iomem *reg = bank->base;
  495. reg += bank->regs->irqstatus;
  496. writel_relaxed(gpio_mask, reg);
  497. /* Workaround for clearing DSP GPIO interrupts to allow retention */
  498. if (bank->regs->irqstatus2) {
  499. reg = bank->base + bank->regs->irqstatus2;
  500. writel_relaxed(gpio_mask, reg);
  501. }
  502. /* Flush posted write for the irq status to avoid spurious interrupts */
  503. readl_relaxed(reg);
  504. }
  505. static inline void omap_clear_gpio_irqstatus(struct gpio_bank *bank,
  506. unsigned offset)
  507. {
  508. omap_clear_gpio_irqbank(bank, BIT(offset));
  509. }
  510. static u32 omap_get_gpio_irqbank_mask(struct gpio_bank *bank)
  511. {
  512. void __iomem *reg = bank->base;
  513. u32 l;
  514. u32 mask = (BIT(bank->width)) - 1;
  515. reg += bank->regs->irqenable;
  516. l = readl_relaxed(reg);
  517. if (bank->regs->irqenable_inv)
  518. l = ~l;
  519. l &= mask;
  520. return l;
  521. }
  522. static void omap_enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  523. {
  524. void __iomem *reg = bank->base;
  525. u32 l;
  526. if (bank->regs->set_irqenable) {
  527. reg += bank->regs->set_irqenable;
  528. l = gpio_mask;
  529. bank->context.irqenable1 |= gpio_mask;
  530. } else {
  531. reg += bank->regs->irqenable;
  532. l = readl_relaxed(reg);
  533. if (bank->regs->irqenable_inv)
  534. l &= ~gpio_mask;
  535. else
  536. l |= gpio_mask;
  537. bank->context.irqenable1 = l;
  538. }
  539. writel_relaxed(l, reg);
  540. }
  541. static void omap_disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
  542. {
  543. void __iomem *reg = bank->base;
  544. u32 l;
  545. if (bank->regs->clr_irqenable) {
  546. reg += bank->regs->clr_irqenable;
  547. l = gpio_mask;
  548. bank->context.irqenable1 &= ~gpio_mask;
  549. } else {
  550. reg += bank->regs->irqenable;
  551. l = readl_relaxed(reg);
  552. if (bank->regs->irqenable_inv)
  553. l |= gpio_mask;
  554. else
  555. l &= ~gpio_mask;
  556. bank->context.irqenable1 = l;
  557. }
  558. writel_relaxed(l, reg);
  559. }
  560. static inline void omap_set_gpio_irqenable(struct gpio_bank *bank,
  561. unsigned offset, int enable)
  562. {
  563. if (enable)
  564. omap_enable_gpio_irqbank(bank, BIT(offset));
  565. else
  566. omap_disable_gpio_irqbank(bank, BIT(offset));
  567. }
  568. /* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
  569. static int omap_gpio_wake_enable(struct irq_data *d, unsigned int enable)
  570. {
  571. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  572. return irq_set_irq_wake(bank->irq, enable);
  573. }
  574. static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
  575. {
  576. struct gpio_bank *bank = gpiochip_get_data(chip);
  577. unsigned long flags;
  578. /*
  579. * If this is the first gpio_request for the bank,
  580. * enable the bank module.
  581. */
  582. if (!BANK_USED(bank))
  583. pm_runtime_get_sync(chip->parent);
  584. raw_spin_lock_irqsave(&bank->lock, flags);
  585. omap_enable_gpio_module(bank, offset);
  586. bank->mod_usage |= BIT(offset);
  587. raw_spin_unlock_irqrestore(&bank->lock, flags);
  588. return 0;
  589. }
  590. static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
  591. {
  592. struct gpio_bank *bank = gpiochip_get_data(chip);
  593. unsigned long flags;
  594. raw_spin_lock_irqsave(&bank->lock, flags);
  595. bank->mod_usage &= ~(BIT(offset));
  596. if (!LINE_USED(bank->irq_usage, offset)) {
  597. omap_set_gpio_direction(bank, offset, 1);
  598. omap_clear_gpio_debounce(bank, offset);
  599. }
  600. omap_disable_gpio_module(bank, offset);
  601. raw_spin_unlock_irqrestore(&bank->lock, flags);
  602. /*
  603. * If this is the last gpio to be freed in the bank,
  604. * disable the bank module.
  605. */
  606. if (!BANK_USED(bank))
  607. pm_runtime_put(chip->parent);
  608. }
  609. /*
  610. * We need to unmask the GPIO bank interrupt as soon as possible to
  611. * avoid missing GPIO interrupts for other lines in the bank.
  612. * Then we need to mask-read-clear-unmask the triggered GPIO lines
  613. * in the bank to avoid missing nested interrupts for a GPIO line.
  614. * If we wait to unmask individual GPIO lines in the bank after the
  615. * line's interrupt handler has been run, we may miss some nested
  616. * interrupts.
  617. */
  618. static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank)
  619. {
  620. void __iomem *isr_reg = NULL;
  621. u32 enabled, isr, level_mask;
  622. unsigned int bit;
  623. struct gpio_bank *bank = gpiobank;
  624. unsigned long wa_lock_flags;
  625. unsigned long lock_flags;
  626. isr_reg = bank->base + bank->regs->irqstatus;
  627. if (WARN_ON(!isr_reg))
  628. goto exit;
  629. pm_runtime_get_sync(bank->chip.parent);
  630. while (1) {
  631. raw_spin_lock_irqsave(&bank->lock, lock_flags);
  632. enabled = omap_get_gpio_irqbank_mask(bank);
  633. isr = readl_relaxed(isr_reg) & enabled;
  634. if (bank->level_mask)
  635. level_mask = bank->level_mask & enabled;
  636. else
  637. level_mask = 0;
  638. /* clear edge sensitive interrupts before handler(s) are
  639. called so that we don't miss any interrupt occurred while
  640. executing them */
  641. if (isr & ~level_mask)
  642. omap_clear_gpio_irqbank(bank, isr & ~level_mask);
  643. raw_spin_unlock_irqrestore(&bank->lock, lock_flags);
  644. if (!isr)
  645. break;
  646. while (isr) {
  647. bit = __ffs(isr);
  648. isr &= ~(BIT(bit));
  649. raw_spin_lock_irqsave(&bank->lock, lock_flags);
  650. /*
  651. * Some chips can't respond to both rising and falling
  652. * at the same time. If this irq was requested with
  653. * both flags, we need to flip the ICR data for the IRQ
  654. * to respond to the IRQ for the opposite direction.
  655. * This will be indicated in the bank toggle_mask.
  656. */
  657. if (bank->toggle_mask & (BIT(bit)))
  658. omap_toggle_gpio_edge_triggering(bank, bit);
  659. raw_spin_unlock_irqrestore(&bank->lock, lock_flags);
  660. raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
  661. generic_handle_irq(irq_find_mapping(bank->chip.irq.domain,
  662. bit));
  663. raw_spin_unlock_irqrestore(&bank->wa_lock,
  664. wa_lock_flags);
  665. }
  666. }
  667. exit:
  668. pm_runtime_put(bank->chip.parent);
  669. return IRQ_HANDLED;
  670. }
  671. static unsigned int omap_gpio_irq_startup(struct irq_data *d)
  672. {
  673. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  674. unsigned long flags;
  675. unsigned offset = d->hwirq;
  676. raw_spin_lock_irqsave(&bank->lock, flags);
  677. if (!LINE_USED(bank->mod_usage, offset))
  678. omap_set_gpio_direction(bank, offset, 1);
  679. else if (!omap_gpio_is_input(bank, offset))
  680. goto err;
  681. omap_enable_gpio_module(bank, offset);
  682. bank->irq_usage |= BIT(offset);
  683. raw_spin_unlock_irqrestore(&bank->lock, flags);
  684. omap_gpio_unmask_irq(d);
  685. return 0;
  686. err:
  687. raw_spin_unlock_irqrestore(&bank->lock, flags);
  688. return -EINVAL;
  689. }
  690. static void omap_gpio_irq_shutdown(struct irq_data *d)
  691. {
  692. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  693. unsigned long flags;
  694. unsigned offset = d->hwirq;
  695. raw_spin_lock_irqsave(&bank->lock, flags);
  696. bank->irq_usage &= ~(BIT(offset));
  697. omap_set_gpio_irqenable(bank, offset, 0);
  698. omap_clear_gpio_irqstatus(bank, offset);
  699. omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
  700. if (!LINE_USED(bank->mod_usage, offset))
  701. omap_clear_gpio_debounce(bank, offset);
  702. omap_disable_gpio_module(bank, offset);
  703. raw_spin_unlock_irqrestore(&bank->lock, flags);
  704. }
  705. static void omap_gpio_irq_bus_lock(struct irq_data *data)
  706. {
  707. struct gpio_bank *bank = omap_irq_data_get_bank(data);
  708. if (!BANK_USED(bank))
  709. pm_runtime_get_sync(bank->chip.parent);
  710. }
  711. static void gpio_irq_bus_sync_unlock(struct irq_data *data)
  712. {
  713. struct gpio_bank *bank = omap_irq_data_get_bank(data);
  714. /*
  715. * If this is the last IRQ to be freed in the bank,
  716. * disable the bank module.
  717. */
  718. if (!BANK_USED(bank))
  719. pm_runtime_put(bank->chip.parent);
  720. }
  721. static void omap_gpio_ack_irq(struct irq_data *d)
  722. {
  723. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  724. unsigned offset = d->hwirq;
  725. omap_clear_gpio_irqstatus(bank, offset);
  726. }
  727. static void omap_gpio_mask_irq(struct irq_data *d)
  728. {
  729. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  730. unsigned offset = d->hwirq;
  731. unsigned long flags;
  732. raw_spin_lock_irqsave(&bank->lock, flags);
  733. omap_set_gpio_irqenable(bank, offset, 0);
  734. omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
  735. raw_spin_unlock_irqrestore(&bank->lock, flags);
  736. }
  737. static void omap_gpio_unmask_irq(struct irq_data *d)
  738. {
  739. struct gpio_bank *bank = omap_irq_data_get_bank(d);
  740. unsigned offset = d->hwirq;
  741. u32 trigger = irqd_get_trigger_type(d);
  742. unsigned long flags;
  743. raw_spin_lock_irqsave(&bank->lock, flags);
  744. if (trigger)
  745. omap_set_gpio_triggering(bank, offset, 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 & BIT(offset)) {
  749. omap_set_gpio_irqenable(bank, offset, 0);
  750. omap_clear_gpio_irqstatus(bank, offset);
  751. }
  752. omap_set_gpio_irqenable(bank, offset, 1);
  753. raw_spin_unlock_irqrestore(&bank->lock, flags);
  754. }
  755. /*---------------------------------------------------------------------*/
  756. static int omap_mpuio_suspend_noirq(struct device *dev)
  757. {
  758. struct platform_device *pdev = to_platform_device(dev);
  759. struct gpio_bank *bank = platform_get_drvdata(pdev);
  760. void __iomem *mask_reg = bank->base +
  761. OMAP_MPUIO_GPIO_MASKIT / bank->stride;
  762. unsigned long flags;
  763. raw_spin_lock_irqsave(&bank->lock, flags);
  764. writel_relaxed(0xffff & ~bank->context.wake_en, mask_reg);
  765. raw_spin_unlock_irqrestore(&bank->lock, flags);
  766. return 0;
  767. }
  768. static int omap_mpuio_resume_noirq(struct device *dev)
  769. {
  770. struct platform_device *pdev = to_platform_device(dev);
  771. struct gpio_bank *bank = platform_get_drvdata(pdev);
  772. void __iomem *mask_reg = bank->base +
  773. OMAP_MPUIO_GPIO_MASKIT / bank->stride;
  774. unsigned long flags;
  775. raw_spin_lock_irqsave(&bank->lock, flags);
  776. writel_relaxed(bank->context.wake_en, mask_reg);
  777. raw_spin_unlock_irqrestore(&bank->lock, flags);
  778. return 0;
  779. }
  780. static const struct dev_pm_ops omap_mpuio_dev_pm_ops = {
  781. .suspend_noirq = omap_mpuio_suspend_noirq,
  782. .resume_noirq = omap_mpuio_resume_noirq,
  783. };
  784. /* use platform_driver for this. */
  785. static struct platform_driver omap_mpuio_driver = {
  786. .driver = {
  787. .name = "mpuio",
  788. .pm = &omap_mpuio_dev_pm_ops,
  789. },
  790. };
  791. static struct platform_device omap_mpuio_device = {
  792. .name = "mpuio",
  793. .id = -1,
  794. .dev = {
  795. .driver = &omap_mpuio_driver.driver,
  796. }
  797. /* could list the /proc/iomem resources */
  798. };
  799. static inline void omap_mpuio_init(struct gpio_bank *bank)
  800. {
  801. platform_set_drvdata(&omap_mpuio_device, bank);
  802. if (platform_driver_register(&omap_mpuio_driver) == 0)
  803. (void) platform_device_register(&omap_mpuio_device);
  804. }
  805. /*---------------------------------------------------------------------*/
  806. static int omap_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
  807. {
  808. struct gpio_bank *bank;
  809. unsigned long flags;
  810. void __iomem *reg;
  811. int dir;
  812. bank = gpiochip_get_data(chip);
  813. reg = bank->base + bank->regs->direction;
  814. raw_spin_lock_irqsave(&bank->lock, flags);
  815. dir = !!(readl_relaxed(reg) & BIT(offset));
  816. raw_spin_unlock_irqrestore(&bank->lock, flags);
  817. return dir;
  818. }
  819. static int omap_gpio_input(struct gpio_chip *chip, unsigned offset)
  820. {
  821. struct gpio_bank *bank;
  822. unsigned long flags;
  823. bank = gpiochip_get_data(chip);
  824. raw_spin_lock_irqsave(&bank->lock, flags);
  825. omap_set_gpio_direction(bank, offset, 1);
  826. raw_spin_unlock_irqrestore(&bank->lock, flags);
  827. return 0;
  828. }
  829. static int omap_gpio_get(struct gpio_chip *chip, unsigned offset)
  830. {
  831. struct gpio_bank *bank;
  832. bank = gpiochip_get_data(chip);
  833. if (omap_gpio_is_input(bank, offset))
  834. return omap_get_gpio_datain(bank, offset);
  835. else
  836. return omap_get_gpio_dataout(bank, offset);
  837. }
  838. static int omap_gpio_output(struct gpio_chip *chip, unsigned offset, int value)
  839. {
  840. struct gpio_bank *bank;
  841. unsigned long flags;
  842. bank = gpiochip_get_data(chip);
  843. raw_spin_lock_irqsave(&bank->lock, flags);
  844. bank->set_dataout(bank, offset, value);
  845. omap_set_gpio_direction(bank, offset, 0);
  846. raw_spin_unlock_irqrestore(&bank->lock, flags);
  847. return 0;
  848. }
  849. static int omap_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask,
  850. unsigned long *bits)
  851. {
  852. struct gpio_bank *bank = gpiochip_get_data(chip);
  853. void __iomem *reg = bank->base + bank->regs->direction;
  854. unsigned long in = readl_relaxed(reg), l;
  855. *bits = 0;
  856. l = in & *mask;
  857. if (l)
  858. *bits |= omap_get_gpio_datain_multiple(bank, &l);
  859. l = ~in & *mask;
  860. if (l)
  861. *bits |= omap_get_gpio_dataout_multiple(bank, &l);
  862. return 0;
  863. }
  864. static int omap_gpio_debounce(struct gpio_chip *chip, unsigned offset,
  865. unsigned debounce)
  866. {
  867. struct gpio_bank *bank;
  868. unsigned long flags;
  869. int ret;
  870. bank = gpiochip_get_data(chip);
  871. raw_spin_lock_irqsave(&bank->lock, flags);
  872. ret = omap2_set_gpio_debounce(bank, offset, debounce);
  873. raw_spin_unlock_irqrestore(&bank->lock, flags);
  874. if (ret)
  875. dev_info(chip->parent,
  876. "Could not set line %u debounce to %u microseconds (%d)",
  877. offset, debounce, ret);
  878. return ret;
  879. }
  880. static int omap_gpio_set_config(struct gpio_chip *chip, unsigned offset,
  881. unsigned long config)
  882. {
  883. u32 debounce;
  884. if (pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE)
  885. return -ENOTSUPP;
  886. debounce = pinconf_to_config_argument(config);
  887. return omap_gpio_debounce(chip, offset, debounce);
  888. }
  889. static void omap_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  890. {
  891. struct gpio_bank *bank;
  892. unsigned long flags;
  893. bank = gpiochip_get_data(chip);
  894. raw_spin_lock_irqsave(&bank->lock, flags);
  895. bank->set_dataout(bank, offset, value);
  896. raw_spin_unlock_irqrestore(&bank->lock, flags);
  897. }
  898. static void omap_gpio_set_multiple(struct gpio_chip *chip, unsigned long *mask,
  899. unsigned long *bits)
  900. {
  901. struct gpio_bank *bank = gpiochip_get_data(chip);
  902. unsigned long flags;
  903. raw_spin_lock_irqsave(&bank->lock, flags);
  904. bank->set_dataout_multiple(bank, mask, bits);
  905. raw_spin_unlock_irqrestore(&bank->lock, flags);
  906. }
  907. /*---------------------------------------------------------------------*/
  908. static void omap_gpio_show_rev(struct gpio_bank *bank)
  909. {
  910. static bool called;
  911. u32 rev;
  912. if (called || bank->regs->revision == USHRT_MAX)
  913. return;
  914. rev = readw_relaxed(bank->base + bank->regs->revision);
  915. pr_info("OMAP GPIO hardware version %d.%d\n",
  916. (rev >> 4) & 0x0f, rev & 0x0f);
  917. called = true;
  918. }
  919. static void omap_gpio_mod_init(struct gpio_bank *bank)
  920. {
  921. void __iomem *base = bank->base;
  922. u32 l = 0xffffffff;
  923. if (bank->width == 16)
  924. l = 0xffff;
  925. if (bank->is_mpuio) {
  926. writel_relaxed(l, bank->base + bank->regs->irqenable);
  927. return;
  928. }
  929. omap_gpio_rmw(base, bank->regs->irqenable, l,
  930. bank->regs->irqenable_inv);
  931. omap_gpio_rmw(base, bank->regs->irqstatus, l,
  932. !bank->regs->irqenable_inv);
  933. if (bank->regs->debounce_en)
  934. writel_relaxed(0, base + bank->regs->debounce_en);
  935. /* Save OE default value (0xffffffff) in the context */
  936. bank->context.oe = readl_relaxed(bank->base + bank->regs->direction);
  937. /* Initialize interface clk ungated, module enabled */
  938. if (bank->regs->ctrl)
  939. writel_relaxed(0, base + bank->regs->ctrl);
  940. }
  941. static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)
  942. {
  943. struct gpio_irq_chip *irq;
  944. static int gpio;
  945. const char *label;
  946. int irq_base = 0;
  947. int ret;
  948. /*
  949. * REVISIT eventually switch from OMAP-specific gpio structs
  950. * over to the generic ones
  951. */
  952. bank->chip.request = omap_gpio_request;
  953. bank->chip.free = omap_gpio_free;
  954. bank->chip.get_direction = omap_gpio_get_direction;
  955. bank->chip.direction_input = omap_gpio_input;
  956. bank->chip.get = omap_gpio_get;
  957. bank->chip.get_multiple = omap_gpio_get_multiple;
  958. bank->chip.direction_output = omap_gpio_output;
  959. bank->chip.set_config = omap_gpio_set_config;
  960. bank->chip.set = omap_gpio_set;
  961. bank->chip.set_multiple = omap_gpio_set_multiple;
  962. if (bank->is_mpuio) {
  963. bank->chip.label = "mpuio";
  964. if (bank->regs->wkup_en)
  965. bank->chip.parent = &omap_mpuio_device.dev;
  966. bank->chip.base = OMAP_MPUIO(0);
  967. } else {
  968. label = devm_kasprintf(bank->chip.parent, GFP_KERNEL, "gpio-%d-%d",
  969. gpio, gpio + bank->width - 1);
  970. if (!label)
  971. return -ENOMEM;
  972. bank->chip.label = label;
  973. bank->chip.base = gpio;
  974. }
  975. bank->chip.ngpio = bank->width;
  976. #ifdef CONFIG_ARCH_OMAP1
  977. /*
  978. * REVISIT: Once we have OMAP1 supporting SPARSE_IRQ, we can drop
  979. * irq_alloc_descs() since a base IRQ offset will no longer be needed.
  980. */
  981. irq_base = devm_irq_alloc_descs(bank->chip.parent,
  982. -1, 0, bank->width, 0);
  983. if (irq_base < 0) {
  984. dev_err(bank->chip.parent, "Couldn't allocate IRQ numbers\n");
  985. return -ENODEV;
  986. }
  987. #endif
  988. /* MPUIO is a bit different, reading IRQ status clears it */
  989. if (bank->is_mpuio) {
  990. irqc->irq_ack = dummy_irq_chip.irq_ack;
  991. if (!bank->regs->wkup_en)
  992. irqc->irq_set_wake = NULL;
  993. }
  994. irq = &bank->chip.irq;
  995. irq->chip = irqc;
  996. irq->handler = handle_bad_irq;
  997. irq->default_type = IRQ_TYPE_NONE;
  998. irq->num_parents = 1;
  999. irq->parents = &bank->irq;
  1000. irq->first = irq_base;
  1001. ret = gpiochip_add_data(&bank->chip, bank);
  1002. if (ret) {
  1003. dev_err(bank->chip.parent,
  1004. "Could not register gpio chip %d\n", ret);
  1005. return ret;
  1006. }
  1007. ret = devm_request_irq(bank->chip.parent, bank->irq,
  1008. omap_gpio_irq_handler,
  1009. 0, dev_name(bank->chip.parent), bank);
  1010. if (ret)
  1011. gpiochip_remove(&bank->chip);
  1012. if (!bank->is_mpuio)
  1013. gpio += bank->width;
  1014. return ret;
  1015. }
  1016. static const struct of_device_id omap_gpio_match[];
  1017. static int omap_gpio_probe(struct platform_device *pdev)
  1018. {
  1019. struct device *dev = &pdev->dev;
  1020. struct device_node *node = dev->of_node;
  1021. const struct of_device_id *match;
  1022. const struct omap_gpio_platform_data *pdata;
  1023. struct resource *res;
  1024. struct gpio_bank *bank;
  1025. struct irq_chip *irqc;
  1026. int ret;
  1027. match = of_match_device(of_match_ptr(omap_gpio_match), dev);
  1028. pdata = match ? match->data : dev_get_platdata(dev);
  1029. if (!pdata)
  1030. return -EINVAL;
  1031. bank = devm_kzalloc(dev, sizeof(*bank), GFP_KERNEL);
  1032. if (!bank)
  1033. return -ENOMEM;
  1034. irqc = devm_kzalloc(dev, sizeof(*irqc), GFP_KERNEL);
  1035. if (!irqc)
  1036. return -ENOMEM;
  1037. irqc->irq_startup = omap_gpio_irq_startup,
  1038. irqc->irq_shutdown = omap_gpio_irq_shutdown,
  1039. irqc->irq_ack = omap_gpio_ack_irq,
  1040. irqc->irq_mask = omap_gpio_mask_irq,
  1041. irqc->irq_unmask = omap_gpio_unmask_irq,
  1042. irqc->irq_set_type = omap_gpio_irq_type,
  1043. irqc->irq_set_wake = omap_gpio_wake_enable,
  1044. irqc->irq_bus_lock = omap_gpio_irq_bus_lock,
  1045. irqc->irq_bus_sync_unlock = gpio_irq_bus_sync_unlock,
  1046. irqc->name = dev_name(&pdev->dev);
  1047. irqc->flags = IRQCHIP_MASK_ON_SUSPEND;
  1048. bank->irq = platform_get_irq(pdev, 0);
  1049. if (bank->irq <= 0) {
  1050. if (!bank->irq)
  1051. bank->irq = -ENXIO;
  1052. if (bank->irq != -EPROBE_DEFER)
  1053. dev_err(dev,
  1054. "can't get irq resource ret=%d\n", bank->irq);
  1055. return bank->irq;
  1056. }
  1057. bank->chip.parent = dev;
  1058. bank->chip.owner = THIS_MODULE;
  1059. bank->dbck_flag = pdata->dbck_flag;
  1060. bank->stride = pdata->bank_stride;
  1061. bank->width = pdata->bank_width;
  1062. bank->is_mpuio = pdata->is_mpuio;
  1063. bank->non_wakeup_gpios = pdata->non_wakeup_gpios;
  1064. bank->regs = pdata->regs;
  1065. #ifdef CONFIG_OF_GPIO
  1066. bank->chip.of_node = of_node_get(node);
  1067. #endif
  1068. if (node) {
  1069. if (!of_property_read_bool(node, "ti,gpio-always-on"))
  1070. bank->loses_context = true;
  1071. } else {
  1072. bank->loses_context = pdata->loses_context;
  1073. if (bank->loses_context)
  1074. bank->get_context_loss_count =
  1075. pdata->get_context_loss_count;
  1076. }
  1077. if (bank->regs->set_dataout && bank->regs->clr_dataout) {
  1078. bank->set_dataout = omap_set_gpio_dataout_reg;
  1079. bank->set_dataout_multiple = omap_set_gpio_dataout_reg_multiple;
  1080. } else {
  1081. bank->set_dataout = omap_set_gpio_dataout_mask;
  1082. bank->set_dataout_multiple =
  1083. omap_set_gpio_dataout_mask_multiple;
  1084. }
  1085. raw_spin_lock_init(&bank->lock);
  1086. raw_spin_lock_init(&bank->wa_lock);
  1087. /* Static mapping, never released */
  1088. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1089. bank->base = devm_ioremap_resource(dev, res);
  1090. if (IS_ERR(bank->base)) {
  1091. return PTR_ERR(bank->base);
  1092. }
  1093. if (bank->dbck_flag) {
  1094. bank->dbck = devm_clk_get(dev, "dbclk");
  1095. if (IS_ERR(bank->dbck)) {
  1096. dev_err(dev,
  1097. "Could not get gpio dbck. Disable debounce\n");
  1098. bank->dbck_flag = false;
  1099. } else {
  1100. clk_prepare(bank->dbck);
  1101. }
  1102. }
  1103. platform_set_drvdata(pdev, bank);
  1104. pm_runtime_enable(dev);
  1105. pm_runtime_irq_safe(dev);
  1106. pm_runtime_get_sync(dev);
  1107. if (bank->is_mpuio)
  1108. omap_mpuio_init(bank);
  1109. omap_gpio_mod_init(bank);
  1110. ret = omap_gpio_chip_init(bank, irqc);
  1111. if (ret) {
  1112. pm_runtime_put_sync(dev);
  1113. pm_runtime_disable(dev);
  1114. if (bank->dbck_flag)
  1115. clk_unprepare(bank->dbck);
  1116. return ret;
  1117. }
  1118. omap_gpio_show_rev(bank);
  1119. pm_runtime_put(dev);
  1120. list_add_tail(&bank->node, &omap_gpio_list);
  1121. return 0;
  1122. }
  1123. static int omap_gpio_remove(struct platform_device *pdev)
  1124. {
  1125. struct gpio_bank *bank = platform_get_drvdata(pdev);
  1126. list_del(&bank->node);
  1127. gpiochip_remove(&bank->chip);
  1128. pm_runtime_disable(&pdev->dev);
  1129. if (bank->dbck_flag)
  1130. clk_unprepare(bank->dbck);
  1131. return 0;
  1132. }
  1133. #ifdef CONFIG_ARCH_OMAP2PLUS
  1134. #if defined(CONFIG_PM)
  1135. static void omap_gpio_restore_context(struct gpio_bank *bank);
  1136. static int omap_gpio_runtime_suspend(struct device *dev)
  1137. {
  1138. struct platform_device *pdev = to_platform_device(dev);
  1139. struct gpio_bank *bank = platform_get_drvdata(pdev);
  1140. u32 l1 = 0, l2 = 0;
  1141. unsigned long flags;
  1142. u32 wake_low, wake_hi;
  1143. raw_spin_lock_irqsave(&bank->lock, flags);
  1144. /*
  1145. * Only edges can generate a wakeup event to the PRCM.
  1146. *
  1147. * Therefore, ensure any wake-up capable GPIOs have
  1148. * edge-detection enabled before going idle to ensure a wakeup
  1149. * to the PRCM is generated on a GPIO transition. (c.f. 34xx
  1150. * NDA TRM 25.5.3.1)
  1151. *
  1152. * The normal values will be restored upon ->runtime_resume()
  1153. * by writing back the values saved in bank->context.
  1154. */
  1155. wake_low = bank->context.leveldetect0 & bank->context.wake_en;
  1156. if (wake_low)
  1157. writel_relaxed(wake_low | bank->context.fallingdetect,
  1158. bank->base + bank->regs->fallingdetect);
  1159. wake_hi = bank->context.leveldetect1 & bank->context.wake_en;
  1160. if (wake_hi)
  1161. writel_relaxed(wake_hi | bank->context.risingdetect,
  1162. bank->base + bank->regs->risingdetect);
  1163. if (!bank->enabled_non_wakeup_gpios)
  1164. goto update_gpio_context_count;
  1165. if (bank->power_mode != OFF_MODE) {
  1166. bank->power_mode = 0;
  1167. goto update_gpio_context_count;
  1168. }
  1169. /*
  1170. * If going to OFF, remove triggering for all
  1171. * non-wakeup GPIOs. Otherwise spurious IRQs will be
  1172. * generated. See OMAP2420 Errata item 1.101.
  1173. */
  1174. bank->saved_datain = readl_relaxed(bank->base +
  1175. bank->regs->datain);
  1176. l1 = bank->context.fallingdetect;
  1177. l2 = bank->context.risingdetect;
  1178. l1 &= ~bank->enabled_non_wakeup_gpios;
  1179. l2 &= ~bank->enabled_non_wakeup_gpios;
  1180. writel_relaxed(l1, bank->base + bank->regs->fallingdetect);
  1181. writel_relaxed(l2, bank->base + bank->regs->risingdetect);
  1182. bank->workaround_enabled = true;
  1183. update_gpio_context_count:
  1184. if (bank->get_context_loss_count)
  1185. bank->context_loss_count =
  1186. bank->get_context_loss_count(dev);
  1187. omap_gpio_dbck_disable(bank);
  1188. raw_spin_unlock_irqrestore(&bank->lock, flags);
  1189. return 0;
  1190. }
  1191. static void omap_gpio_init_context(struct gpio_bank *p);
  1192. static int omap_gpio_runtime_resume(struct device *dev)
  1193. {
  1194. struct platform_device *pdev = to_platform_device(dev);
  1195. struct gpio_bank *bank = platform_get_drvdata(pdev);
  1196. u32 l = 0, gen, gen0, gen1;
  1197. unsigned long flags;
  1198. int c;
  1199. raw_spin_lock_irqsave(&bank->lock, flags);
  1200. /*
  1201. * On the first resume during the probe, the context has not
  1202. * been initialised and so initialise it now. Also initialise
  1203. * the context loss count.
  1204. */
  1205. if (bank->loses_context && !bank->context_valid) {
  1206. omap_gpio_init_context(bank);
  1207. if (bank->get_context_loss_count)
  1208. bank->context_loss_count =
  1209. bank->get_context_loss_count(dev);
  1210. }
  1211. omap_gpio_dbck_enable(bank);
  1212. /*
  1213. * In ->runtime_suspend(), level-triggered, wakeup-enabled
  1214. * GPIOs were set to edge trigger also in order to be able to
  1215. * generate a PRCM wakeup. Here we restore the
  1216. * pre-runtime_suspend() values for edge triggering.
  1217. */
  1218. writel_relaxed(bank->context.fallingdetect,
  1219. bank->base + bank->regs->fallingdetect);
  1220. writel_relaxed(bank->context.risingdetect,
  1221. bank->base + bank->regs->risingdetect);
  1222. if (bank->loses_context) {
  1223. if (!bank->get_context_loss_count) {
  1224. omap_gpio_restore_context(bank);
  1225. } else {
  1226. c = bank->get_context_loss_count(dev);
  1227. if (c != bank->context_loss_count) {
  1228. omap_gpio_restore_context(bank);
  1229. } else {
  1230. raw_spin_unlock_irqrestore(&bank->lock, flags);
  1231. return 0;
  1232. }
  1233. }
  1234. }
  1235. if (!bank->workaround_enabled) {
  1236. raw_spin_unlock_irqrestore(&bank->lock, flags);
  1237. return 0;
  1238. }
  1239. l = readl_relaxed(bank->base + bank->regs->datain);
  1240. /*
  1241. * Check if any of the non-wakeup interrupt GPIOs have changed
  1242. * state. If so, generate an IRQ by software. This is
  1243. * horribly racy, but it's the best we can do to work around
  1244. * this silicon bug.
  1245. */
  1246. l ^= bank->saved_datain;
  1247. l &= bank->enabled_non_wakeup_gpios;
  1248. /*
  1249. * No need to generate IRQs for the rising edge for gpio IRQs
  1250. * configured with falling edge only; and vice versa.
  1251. */
  1252. gen0 = l & bank->context.fallingdetect;
  1253. gen0 &= bank->saved_datain;
  1254. gen1 = l & bank->context.risingdetect;
  1255. gen1 &= ~(bank->saved_datain);
  1256. /* FIXME: Consider GPIO IRQs with level detections properly! */
  1257. gen = l & (~(bank->context.fallingdetect) &
  1258. ~(bank->context.risingdetect));
  1259. /* Consider all GPIO IRQs needed to be updated */
  1260. gen |= gen0 | gen1;
  1261. if (gen) {
  1262. u32 old0, old1;
  1263. old0 = readl_relaxed(bank->base + bank->regs->leveldetect0);
  1264. old1 = readl_relaxed(bank->base + bank->regs->leveldetect1);
  1265. if (!bank->regs->irqstatus_raw0) {
  1266. writel_relaxed(old0 | gen, bank->base +
  1267. bank->regs->leveldetect0);
  1268. writel_relaxed(old1 | gen, bank->base +
  1269. bank->regs->leveldetect1);
  1270. }
  1271. if (bank->regs->irqstatus_raw0) {
  1272. writel_relaxed(old0 | l, bank->base +
  1273. bank->regs->leveldetect0);
  1274. writel_relaxed(old1 | l, bank->base +
  1275. bank->regs->leveldetect1);
  1276. }
  1277. writel_relaxed(old0, bank->base + bank->regs->leveldetect0);
  1278. writel_relaxed(old1, bank->base + bank->regs->leveldetect1);
  1279. }
  1280. bank->workaround_enabled = false;
  1281. raw_spin_unlock_irqrestore(&bank->lock, flags);
  1282. return 0;
  1283. }
  1284. #endif /* CONFIG_PM */
  1285. #if IS_BUILTIN(CONFIG_GPIO_OMAP)
  1286. void omap2_gpio_prepare_for_idle(int pwr_mode)
  1287. {
  1288. struct gpio_bank *bank;
  1289. list_for_each_entry(bank, &omap_gpio_list, node) {
  1290. if (!BANK_USED(bank) || !bank->loses_context)
  1291. continue;
  1292. bank->power_mode = pwr_mode;
  1293. pm_runtime_put_sync_suspend(bank->chip.parent);
  1294. }
  1295. }
  1296. void omap2_gpio_resume_after_idle(void)
  1297. {
  1298. struct gpio_bank *bank;
  1299. list_for_each_entry(bank, &omap_gpio_list, node) {
  1300. if (!BANK_USED(bank) || !bank->loses_context)
  1301. continue;
  1302. pm_runtime_get_sync(bank->chip.parent);
  1303. }
  1304. }
  1305. #endif
  1306. #if defined(CONFIG_PM)
  1307. static void omap_gpio_init_context(struct gpio_bank *p)
  1308. {
  1309. struct omap_gpio_reg_offs *regs = p->regs;
  1310. void __iomem *base = p->base;
  1311. p->context.ctrl = readl_relaxed(base + regs->ctrl);
  1312. p->context.oe = readl_relaxed(base + regs->direction);
  1313. p->context.wake_en = readl_relaxed(base + regs->wkup_en);
  1314. p->context.leveldetect0 = readl_relaxed(base + regs->leveldetect0);
  1315. p->context.leveldetect1 = readl_relaxed(base + regs->leveldetect1);
  1316. p->context.risingdetect = readl_relaxed(base + regs->risingdetect);
  1317. p->context.fallingdetect = readl_relaxed(base + regs->fallingdetect);
  1318. p->context.irqenable1 = readl_relaxed(base + regs->irqenable);
  1319. p->context.irqenable2 = readl_relaxed(base + regs->irqenable2);
  1320. if (regs->set_dataout && p->regs->clr_dataout)
  1321. p->context.dataout = readl_relaxed(base + regs->set_dataout);
  1322. else
  1323. p->context.dataout = readl_relaxed(base + regs->dataout);
  1324. p->context_valid = true;
  1325. }
  1326. static void omap_gpio_restore_context(struct gpio_bank *bank)
  1327. {
  1328. writel_relaxed(bank->context.wake_en,
  1329. bank->base + bank->regs->wkup_en);
  1330. writel_relaxed(bank->context.ctrl, bank->base + bank->regs->ctrl);
  1331. writel_relaxed(bank->context.leveldetect0,
  1332. bank->base + bank->regs->leveldetect0);
  1333. writel_relaxed(bank->context.leveldetect1,
  1334. bank->base + bank->regs->leveldetect1);
  1335. writel_relaxed(bank->context.risingdetect,
  1336. bank->base + bank->regs->risingdetect);
  1337. writel_relaxed(bank->context.fallingdetect,
  1338. bank->base + bank->regs->fallingdetect);
  1339. if (bank->regs->set_dataout && bank->regs->clr_dataout)
  1340. writel_relaxed(bank->context.dataout,
  1341. bank->base + bank->regs->set_dataout);
  1342. else
  1343. writel_relaxed(bank->context.dataout,
  1344. bank->base + bank->regs->dataout);
  1345. writel_relaxed(bank->context.oe, bank->base + bank->regs->direction);
  1346. if (bank->dbck_enable_mask) {
  1347. writel_relaxed(bank->context.debounce, bank->base +
  1348. bank->regs->debounce);
  1349. writel_relaxed(bank->context.debounce_en,
  1350. bank->base + bank->regs->debounce_en);
  1351. }
  1352. writel_relaxed(bank->context.irqenable1,
  1353. bank->base + bank->regs->irqenable);
  1354. writel_relaxed(bank->context.irqenable2,
  1355. bank->base + bank->regs->irqenable2);
  1356. }
  1357. #endif /* CONFIG_PM */
  1358. #else
  1359. #define omap_gpio_runtime_suspend NULL
  1360. #define omap_gpio_runtime_resume NULL
  1361. static inline void omap_gpio_init_context(struct gpio_bank *p) {}
  1362. #endif
  1363. static const struct dev_pm_ops gpio_pm_ops = {
  1364. SET_RUNTIME_PM_OPS(omap_gpio_runtime_suspend, omap_gpio_runtime_resume,
  1365. NULL)
  1366. };
  1367. #if defined(CONFIG_OF)
  1368. static struct omap_gpio_reg_offs omap2_gpio_regs = {
  1369. .revision = OMAP24XX_GPIO_REVISION,
  1370. .direction = OMAP24XX_GPIO_OE,
  1371. .datain = OMAP24XX_GPIO_DATAIN,
  1372. .dataout = OMAP24XX_GPIO_DATAOUT,
  1373. .set_dataout = OMAP24XX_GPIO_SETDATAOUT,
  1374. .clr_dataout = OMAP24XX_GPIO_CLEARDATAOUT,
  1375. .irqstatus = OMAP24XX_GPIO_IRQSTATUS1,
  1376. .irqstatus2 = OMAP24XX_GPIO_IRQSTATUS2,
  1377. .irqenable = OMAP24XX_GPIO_IRQENABLE1,
  1378. .irqenable2 = OMAP24XX_GPIO_IRQENABLE2,
  1379. .set_irqenable = OMAP24XX_GPIO_SETIRQENABLE1,
  1380. .clr_irqenable = OMAP24XX_GPIO_CLEARIRQENABLE1,
  1381. .debounce = OMAP24XX_GPIO_DEBOUNCE_VAL,
  1382. .debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN,
  1383. .ctrl = OMAP24XX_GPIO_CTRL,
  1384. .wkup_en = OMAP24XX_GPIO_WAKE_EN,
  1385. .leveldetect0 = OMAP24XX_GPIO_LEVELDETECT0,
  1386. .leveldetect1 = OMAP24XX_GPIO_LEVELDETECT1,
  1387. .risingdetect = OMAP24XX_GPIO_RISINGDETECT,
  1388. .fallingdetect = OMAP24XX_GPIO_FALLINGDETECT,
  1389. };
  1390. static struct omap_gpio_reg_offs omap4_gpio_regs = {
  1391. .revision = OMAP4_GPIO_REVISION,
  1392. .direction = OMAP4_GPIO_OE,
  1393. .datain = OMAP4_GPIO_DATAIN,
  1394. .dataout = OMAP4_GPIO_DATAOUT,
  1395. .set_dataout = OMAP4_GPIO_SETDATAOUT,
  1396. .clr_dataout = OMAP4_GPIO_CLEARDATAOUT,
  1397. .irqstatus = OMAP4_GPIO_IRQSTATUS0,
  1398. .irqstatus2 = OMAP4_GPIO_IRQSTATUS1,
  1399. .irqenable = OMAP4_GPIO_IRQSTATUSSET0,
  1400. .irqenable2 = OMAP4_GPIO_IRQSTATUSSET1,
  1401. .set_irqenable = OMAP4_GPIO_IRQSTATUSSET0,
  1402. .clr_irqenable = OMAP4_GPIO_IRQSTATUSCLR0,
  1403. .debounce = OMAP4_GPIO_DEBOUNCINGTIME,
  1404. .debounce_en = OMAP4_GPIO_DEBOUNCENABLE,
  1405. .ctrl = OMAP4_GPIO_CTRL,
  1406. .wkup_en = OMAP4_GPIO_IRQWAKEN0,
  1407. .leveldetect0 = OMAP4_GPIO_LEVELDETECT0,
  1408. .leveldetect1 = OMAP4_GPIO_LEVELDETECT1,
  1409. .risingdetect = OMAP4_GPIO_RISINGDETECT,
  1410. .fallingdetect = OMAP4_GPIO_FALLINGDETECT,
  1411. };
  1412. static const struct omap_gpio_platform_data omap2_pdata = {
  1413. .regs = &omap2_gpio_regs,
  1414. .bank_width = 32,
  1415. .dbck_flag = false,
  1416. };
  1417. static const struct omap_gpio_platform_data omap3_pdata = {
  1418. .regs = &omap2_gpio_regs,
  1419. .bank_width = 32,
  1420. .dbck_flag = true,
  1421. };
  1422. static const struct omap_gpio_platform_data omap4_pdata = {
  1423. .regs = &omap4_gpio_regs,
  1424. .bank_width = 32,
  1425. .dbck_flag = true,
  1426. };
  1427. static const struct of_device_id omap_gpio_match[] = {
  1428. {
  1429. .compatible = "ti,omap4-gpio",
  1430. .data = &omap4_pdata,
  1431. },
  1432. {
  1433. .compatible = "ti,omap3-gpio",
  1434. .data = &omap3_pdata,
  1435. },
  1436. {
  1437. .compatible = "ti,omap2-gpio",
  1438. .data = &omap2_pdata,
  1439. },
  1440. { },
  1441. };
  1442. MODULE_DEVICE_TABLE(of, omap_gpio_match);
  1443. #endif
  1444. static struct platform_driver omap_gpio_driver = {
  1445. .probe = omap_gpio_probe,
  1446. .remove = omap_gpio_remove,
  1447. .driver = {
  1448. .name = "omap_gpio",
  1449. .pm = &gpio_pm_ops,
  1450. .of_match_table = of_match_ptr(omap_gpio_match),
  1451. },
  1452. };
  1453. /*
  1454. * gpio driver register needs to be done before
  1455. * machine_init functions access gpio APIs.
  1456. * Hence omap_gpio_drv_reg() is a postcore_initcall.
  1457. */
  1458. static int __init omap_gpio_drv_reg(void)
  1459. {
  1460. return platform_driver_register(&omap_gpio_driver);
  1461. }
  1462. postcore_initcall(omap_gpio_drv_reg);
  1463. static void __exit omap_gpio_exit(void)
  1464. {
  1465. platform_driver_unregister(&omap_gpio_driver);
  1466. }
  1467. module_exit(omap_gpio_exit);
  1468. MODULE_DESCRIPTION("omap gpio driver");
  1469. MODULE_ALIAS("platform:gpio-omap");
  1470. MODULE_LICENSE("GPL v2");