gpio.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. /*
  2. * TI DaVinci GPIO Support
  3. *
  4. * Copyright (c) 2006-2007 David Brownell
  5. * Copyright (c) 2007, MontaVista Software, Inc. <source@mvista.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. */
  12. #include <linux/errno.h>
  13. #include <linux/kernel.h>
  14. #include <linux/clk.h>
  15. #include <linux/err.h>
  16. #include <linux/io.h>
  17. #include <mach/gpio.h>
  18. #include <asm/mach/irq.h>
  19. static DEFINE_SPINLOCK(gpio_lock);
  20. #define chip2controller(chip) \
  21. container_of(chip, struct davinci_gpio_controller, chip)
  22. static struct davinci_gpio_controller chips[DIV_ROUND_UP(DAVINCI_N_GPIO, 32)];
  23. /* create a non-inlined version */
  24. static struct davinci_gpio_regs __iomem __init *gpio2regs(unsigned gpio)
  25. {
  26. return __gpio_to_controller(gpio);
  27. }
  28. static inline struct davinci_gpio_regs __iomem *irq2regs(int irq)
  29. {
  30. struct davinci_gpio_regs __iomem *g;
  31. g = (__force struct davinci_gpio_regs __iomem *)get_irq_chip_data(irq);
  32. return g;
  33. }
  34. static int __init davinci_gpio_irq_setup(void);
  35. /*--------------------------------------------------------------------------*/
  36. /*
  37. * board setup code *MUST* set PINMUX0 and PINMUX1 as
  38. * needed, and enable the GPIO clock.
  39. */
  40. static inline int __davinci_direction(struct gpio_chip *chip,
  41. unsigned offset, bool out, int value)
  42. {
  43. struct davinci_gpio_controller *d = chip2controller(chip);
  44. struct davinci_gpio_regs __iomem *g = d->regs;
  45. u32 temp;
  46. u32 mask = 1 << offset;
  47. spin_lock(&gpio_lock);
  48. temp = __raw_readl(&g->dir);
  49. if (out) {
  50. temp &= ~mask;
  51. __raw_writel(mask, value ? &g->set_data : &g->clr_data);
  52. } else {
  53. temp |= mask;
  54. }
  55. __raw_writel(temp, &g->dir);
  56. spin_unlock(&gpio_lock);
  57. return 0;
  58. }
  59. static int davinci_direction_in(struct gpio_chip *chip, unsigned offset)
  60. {
  61. return __davinci_direction(chip, offset, false, 0);
  62. }
  63. static int
  64. davinci_direction_out(struct gpio_chip *chip, unsigned offset, int value)
  65. {
  66. return __davinci_direction(chip, offset, true, value);
  67. }
  68. /*
  69. * Read the pin's value (works even if it's set up as output);
  70. * returns zero/nonzero.
  71. *
  72. * Note that changes are synched to the GPIO clock, so reading values back
  73. * right after you've set them may give old values.
  74. */
  75. static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset)
  76. {
  77. struct davinci_gpio_controller *d = chip2controller(chip);
  78. struct davinci_gpio_regs __iomem *g = d->regs;
  79. return (1 << offset) & __raw_readl(&g->in_data);
  80. }
  81. /*
  82. * Assuming the pin is muxed as a gpio output, set its output value.
  83. */
  84. static void
  85. davinci_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  86. {
  87. struct davinci_gpio_controller *d = chip2controller(chip);
  88. struct davinci_gpio_regs __iomem *g = d->regs;
  89. __raw_writel((1 << offset), value ? &g->set_data : &g->clr_data);
  90. }
  91. static int __init davinci_gpio_setup(void)
  92. {
  93. int i, base;
  94. unsigned ngpio;
  95. struct davinci_soc_info *soc_info = &davinci_soc_info;
  96. /*
  97. * The gpio banks conceptually expose a segmented bitmap,
  98. * and "ngpio" is one more than the largest zero-based
  99. * bit index that's valid.
  100. */
  101. ngpio = soc_info->gpio_num;
  102. if (ngpio == 0) {
  103. pr_err("GPIO setup: how many GPIOs?\n");
  104. return -EINVAL;
  105. }
  106. if (WARN_ON(DAVINCI_N_GPIO < ngpio))
  107. ngpio = DAVINCI_N_GPIO;
  108. for (i = 0, base = 0; base < ngpio; i++, base += 32) {
  109. chips[i].chip.label = "DaVinci";
  110. chips[i].chip.direction_input = davinci_direction_in;
  111. chips[i].chip.get = davinci_gpio_get;
  112. chips[i].chip.direction_output = davinci_direction_out;
  113. chips[i].chip.set = davinci_gpio_set;
  114. chips[i].chip.base = base;
  115. chips[i].chip.ngpio = ngpio - base;
  116. if (chips[i].chip.ngpio > 32)
  117. chips[i].chip.ngpio = 32;
  118. chips[i].regs = gpio2regs(base);
  119. gpiochip_add(&chips[i].chip);
  120. }
  121. davinci_gpio_irq_setup();
  122. return 0;
  123. }
  124. pure_initcall(davinci_gpio_setup);
  125. /*--------------------------------------------------------------------------*/
  126. /*
  127. * We expect irqs will normally be set up as input pins, but they can also be
  128. * used as output pins ... which is convenient for testing.
  129. *
  130. * NOTE: The first few GPIOs also have direct INTC hookups in addition
  131. * to their GPIOBNK0 irq, with a bit less overhead.
  132. *
  133. * All those INTC hookups (direct, plus several IRQ banks) can also
  134. * serve as EDMA event triggers.
  135. */
  136. static void gpio_irq_disable(unsigned irq)
  137. {
  138. struct davinci_gpio_regs __iomem *g = irq2regs(irq);
  139. u32 mask = (u32) get_irq_data(irq);
  140. __raw_writel(mask, &g->clr_falling);
  141. __raw_writel(mask, &g->clr_rising);
  142. }
  143. static void gpio_irq_enable(unsigned irq)
  144. {
  145. struct davinci_gpio_regs __iomem *g = irq2regs(irq);
  146. u32 mask = (u32) get_irq_data(irq);
  147. unsigned status = irq_desc[irq].status;
  148. status &= IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING;
  149. if (!status)
  150. status = IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING;
  151. if (status & IRQ_TYPE_EDGE_FALLING)
  152. __raw_writel(mask, &g->set_falling);
  153. if (status & IRQ_TYPE_EDGE_RISING)
  154. __raw_writel(mask, &g->set_rising);
  155. }
  156. static int gpio_irq_type(unsigned irq, unsigned trigger)
  157. {
  158. struct davinci_gpio_regs __iomem *g = irq2regs(irq);
  159. u32 mask = (u32) get_irq_data(irq);
  160. if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  161. return -EINVAL;
  162. irq_desc[irq].status &= ~IRQ_TYPE_SENSE_MASK;
  163. irq_desc[irq].status |= trigger;
  164. /* don't enable the IRQ if it's currently disabled */
  165. if (irq_desc[irq].depth == 0) {
  166. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_FALLING)
  167. ? &g->set_falling : &g->clr_falling);
  168. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_RISING)
  169. ? &g->set_rising : &g->clr_rising);
  170. }
  171. return 0;
  172. }
  173. static struct irq_chip gpio_irqchip = {
  174. .name = "GPIO",
  175. .enable = gpio_irq_enable,
  176. .disable = gpio_irq_disable,
  177. .set_type = gpio_irq_type,
  178. };
  179. static void
  180. gpio_irq_handler(unsigned irq, struct irq_desc *desc)
  181. {
  182. struct davinci_gpio_regs __iomem *g = irq2regs(irq);
  183. u32 mask = 0xffff;
  184. /* we only care about one bank */
  185. if (irq & 1)
  186. mask <<= 16;
  187. /* temporarily mask (level sensitive) parent IRQ */
  188. desc->chip->mask(irq);
  189. desc->chip->ack(irq);
  190. while (1) {
  191. u32 status;
  192. int n;
  193. int res;
  194. /* ack any irqs */
  195. status = __raw_readl(&g->intstat) & mask;
  196. if (!status)
  197. break;
  198. __raw_writel(status, &g->intstat);
  199. if (irq & 1)
  200. status >>= 16;
  201. /* now demux them to the right lowlevel handler */
  202. n = (int)get_irq_data(irq);
  203. while (status) {
  204. res = ffs(status);
  205. n += res;
  206. generic_handle_irq(n - 1);
  207. status >>= res;
  208. }
  209. }
  210. desc->chip->unmask(irq);
  211. /* now it may re-trigger */
  212. }
  213. static int gpio_to_irq_banked(struct gpio_chip *chip, unsigned offset)
  214. {
  215. struct davinci_gpio_controller *d = chip2controller(chip);
  216. if (d->irq_base >= 0)
  217. return d->irq_base + offset;
  218. else
  219. return -ENODEV;
  220. }
  221. static int gpio_to_irq_unbanked(struct gpio_chip *chip, unsigned offset)
  222. {
  223. struct davinci_soc_info *soc_info = &davinci_soc_info;
  224. /* NOTE: we assume for now that only irqs in the first gpio_chip
  225. * can provide direct-mapped IRQs to AINTC (up to 32 GPIOs).
  226. */
  227. if (offset < soc_info->gpio_unbanked)
  228. return soc_info->gpio_irq + offset;
  229. else
  230. return -ENODEV;
  231. }
  232. static int gpio_irq_type_unbanked(unsigned irq, unsigned trigger)
  233. {
  234. struct davinci_gpio_regs __iomem *g = irq2regs(irq);
  235. u32 mask = (u32) get_irq_data(irq);
  236. if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  237. return -EINVAL;
  238. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_FALLING)
  239. ? &g->set_falling : &g->clr_falling);
  240. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_RISING)
  241. ? &g->set_rising : &g->clr_rising);
  242. return 0;
  243. }
  244. /*
  245. * NOTE: for suspend/resume, probably best to make a platform_device with
  246. * suspend_late/resume_resume calls hooking into results of the set_wake()
  247. * calls ... so if no gpios are wakeup events the clock can be disabled,
  248. * with outputs left at previously set levels, and so that VDD3P3V.IOPWDN0
  249. * (dm6446) can be set appropriately for GPIOV33 pins.
  250. */
  251. static int __init davinci_gpio_irq_setup(void)
  252. {
  253. unsigned gpio, irq, bank;
  254. struct clk *clk;
  255. u32 binten = 0;
  256. unsigned ngpio, bank_irq;
  257. struct davinci_soc_info *soc_info = &davinci_soc_info;
  258. struct davinci_gpio_regs __iomem *g;
  259. ngpio = soc_info->gpio_num;
  260. bank_irq = soc_info->gpio_irq;
  261. if (bank_irq == 0) {
  262. printk(KERN_ERR "Don't know first GPIO bank IRQ.\n");
  263. return -EINVAL;
  264. }
  265. clk = clk_get(NULL, "gpio");
  266. if (IS_ERR(clk)) {
  267. printk(KERN_ERR "Error %ld getting gpio clock?\n",
  268. PTR_ERR(clk));
  269. return PTR_ERR(clk);
  270. }
  271. clk_enable(clk);
  272. /* Arrange gpio_to_irq() support, handling either direct IRQs or
  273. * banked IRQs. Having GPIOs in the first GPIO bank use direct
  274. * IRQs, while the others use banked IRQs, would need some setup
  275. * tweaks to recognize hardware which can do that.
  276. */
  277. for (gpio = 0, bank = 0; gpio < ngpio; bank++, gpio += 32) {
  278. chips[bank].chip.to_irq = gpio_to_irq_banked;
  279. chips[bank].irq_base = soc_info->gpio_unbanked
  280. ? -EINVAL
  281. : (soc_info->intc_irq_num + gpio);
  282. }
  283. /*
  284. * AINTC can handle direct/unbanked IRQs for GPIOs, with the GPIO
  285. * controller only handling trigger modes. We currently assume no
  286. * IRQ mux conflicts; gpio_irq_type_unbanked() is only for GPIOs.
  287. */
  288. if (soc_info->gpio_unbanked) {
  289. static struct irq_chip gpio_irqchip_unbanked;
  290. /* pass "bank 0" GPIO IRQs to AINTC */
  291. chips[0].chip.to_irq = gpio_to_irq_unbanked;
  292. binten = BIT(0);
  293. /* AINTC handles mask/unmask; GPIO handles triggering */
  294. irq = bank_irq;
  295. gpio_irqchip_unbanked = *get_irq_desc_chip(irq_to_desc(irq));
  296. gpio_irqchip_unbanked.name = "GPIO-AINTC";
  297. gpio_irqchip_unbanked.set_type = gpio_irq_type_unbanked;
  298. /* default trigger: both edges */
  299. g = gpio2regs(0);
  300. __raw_writel(~0, &g->set_falling);
  301. __raw_writel(~0, &g->set_rising);
  302. /* set the direct IRQs up to use that irqchip */
  303. for (gpio = 0; gpio < soc_info->gpio_unbanked; gpio++, irq++) {
  304. set_irq_chip(irq, &gpio_irqchip_unbanked);
  305. set_irq_data(irq, (void *) __gpio_mask(gpio));
  306. set_irq_chip_data(irq, (__force void *) g);
  307. irq_desc[irq].status |= IRQ_TYPE_EDGE_BOTH;
  308. }
  309. goto done;
  310. }
  311. /*
  312. * Or, AINTC can handle IRQs for banks of 16 GPIO IRQs, which we
  313. * then chain through our own handler.
  314. */
  315. for (gpio = 0, irq = gpio_to_irq(0), bank = 0;
  316. gpio < ngpio;
  317. bank++, bank_irq++) {
  318. unsigned i;
  319. /* disabled by default, enabled only as needed */
  320. g = gpio2regs(gpio);
  321. __raw_writel(~0, &g->clr_falling);
  322. __raw_writel(~0, &g->clr_rising);
  323. /* set up all irqs in this bank */
  324. set_irq_chained_handler(bank_irq, gpio_irq_handler);
  325. set_irq_chip_data(bank_irq, (__force void *) g);
  326. set_irq_data(bank_irq, (void *) irq);
  327. for (i = 0; i < 16 && gpio < ngpio; i++, irq++, gpio++) {
  328. set_irq_chip(irq, &gpio_irqchip);
  329. set_irq_chip_data(irq, (__force void *) g);
  330. set_irq_data(irq, (void *) __gpio_mask(gpio));
  331. set_irq_handler(irq, handle_simple_irq);
  332. set_irq_flags(irq, IRQF_VALID);
  333. }
  334. binten |= BIT(bank);
  335. }
  336. done:
  337. /* BINTEN -- per-bank interrupt enable. genirq would also let these
  338. * bits be set/cleared dynamically.
  339. */
  340. __raw_writel(binten, soc_info->gpio_base + 0x08);
  341. printk(KERN_INFO "DaVinci: %d gpio irqs\n", irq - gpio_to_irq(0));
  342. return 0;
  343. }