gpio-omap.c 49 KB

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