gpio.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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/list.h>
  15. #include <linux/module.h>
  16. #include <linux/clk.h>
  17. #include <linux/err.h>
  18. #include <linux/io.h>
  19. #include <linux/irq.h>
  20. #include <linux/bitops.h>
  21. #include <mach/irqs.h>
  22. #include <mach/hardware.h>
  23. #include <mach/gpio.h>
  24. #include <asm/mach/irq.h>
  25. static DEFINE_SPINLOCK(gpio_lock);
  26. struct davinci_gpio {
  27. struct gpio_chip chip;
  28. struct gpio_controller *__iomem regs;
  29. };
  30. static struct davinci_gpio chips[DIV_ROUND_UP(DAVINCI_N_GPIO, 32)];
  31. /* create a non-inlined version */
  32. static struct gpio_controller *__iomem __init gpio2controller(unsigned gpio)
  33. {
  34. return __gpio_to_controller(gpio);
  35. }
  36. /*--------------------------------------------------------------------------*/
  37. /*
  38. * board setup code *MUST* set PINMUX0 and PINMUX1 as
  39. * needed, and enable the GPIO clock.
  40. */
  41. static int davinci_direction_in(struct gpio_chip *chip, unsigned offset)
  42. {
  43. struct davinci_gpio *d = container_of(chip, struct davinci_gpio, chip);
  44. struct gpio_controller *__iomem g = d->regs;
  45. u32 temp;
  46. spin_lock(&gpio_lock);
  47. temp = __raw_readl(&g->dir);
  48. temp |= (1 << offset);
  49. __raw_writel(temp, &g->dir);
  50. spin_unlock(&gpio_lock);
  51. return 0;
  52. }
  53. /*
  54. * Read the pin's value (works even if it's set up as output);
  55. * returns zero/nonzero.
  56. *
  57. * Note that changes are synched to the GPIO clock, so reading values back
  58. * right after you've set them may give old values.
  59. */
  60. static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset)
  61. {
  62. struct davinci_gpio *d = container_of(chip, struct davinci_gpio, chip);
  63. struct gpio_controller *__iomem g = d->regs;
  64. return (1 << offset) & __raw_readl(&g->in_data);
  65. }
  66. static int
  67. davinci_direction_out(struct gpio_chip *chip, unsigned offset, int value)
  68. {
  69. struct davinci_gpio *d = container_of(chip, struct davinci_gpio, chip);
  70. struct gpio_controller *__iomem g = d->regs;
  71. u32 temp;
  72. u32 mask = 1 << offset;
  73. spin_lock(&gpio_lock);
  74. temp = __raw_readl(&g->dir);
  75. temp &= ~mask;
  76. __raw_writel(mask, value ? &g->set_data : &g->clr_data);
  77. __raw_writel(temp, &g->dir);
  78. spin_unlock(&gpio_lock);
  79. return 0;
  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 *d = container_of(chip, struct davinci_gpio, chip);
  88. struct gpio_controller *__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. for (i = 0, base = 0;
  95. i < ARRAY_SIZE(chips);
  96. i++, base += 32) {
  97. chips[i].chip.label = "DaVinci";
  98. chips[i].chip.direction_input = davinci_direction_in;
  99. chips[i].chip.get = davinci_gpio_get;
  100. chips[i].chip.direction_output = davinci_direction_out;
  101. chips[i].chip.set = davinci_gpio_set;
  102. chips[i].chip.base = base;
  103. chips[i].chip.ngpio = DAVINCI_N_GPIO - base;
  104. if (chips[i].chip.ngpio > 32)
  105. chips[i].chip.ngpio = 32;
  106. chips[i].regs = gpio2controller(base);
  107. gpiochip_add(&chips[i].chip);
  108. }
  109. return 0;
  110. }
  111. pure_initcall(davinci_gpio_setup);
  112. /*--------------------------------------------------------------------------*/
  113. /*
  114. * We expect irqs will normally be set up as input pins, but they can also be
  115. * used as output pins ... which is convenient for testing.
  116. *
  117. * NOTE: GPIO0..GPIO7 also have direct INTC hookups, which work in addition
  118. * to their GPIOBNK0 irq (but with a bit less overhead). But we don't have
  119. * a good way to hook those up ...
  120. *
  121. * All those INTC hookups (GPIO0..GPIO7 plus five IRQ banks) can also
  122. * serve as EDMA event triggers.
  123. */
  124. static void gpio_irq_disable(unsigned irq)
  125. {
  126. struct gpio_controller *__iomem g = get_irq_chip_data(irq);
  127. u32 mask = __gpio_mask(irq_to_gpio(irq));
  128. __raw_writel(mask, &g->clr_falling);
  129. __raw_writel(mask, &g->clr_rising);
  130. }
  131. static void gpio_irq_enable(unsigned irq)
  132. {
  133. struct gpio_controller *__iomem g = get_irq_chip_data(irq);
  134. u32 mask = __gpio_mask(irq_to_gpio(irq));
  135. if (irq_desc[irq].status & IRQ_TYPE_EDGE_FALLING)
  136. __raw_writel(mask, &g->set_falling);
  137. if (irq_desc[irq].status & IRQ_TYPE_EDGE_RISING)
  138. __raw_writel(mask, &g->set_rising);
  139. }
  140. static int gpio_irq_type(unsigned irq, unsigned trigger)
  141. {
  142. struct gpio_controller *__iomem g = get_irq_chip_data(irq);
  143. u32 mask = __gpio_mask(irq_to_gpio(irq));
  144. if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
  145. return -EINVAL;
  146. irq_desc[irq].status &= ~IRQ_TYPE_SENSE_MASK;
  147. irq_desc[irq].status |= trigger;
  148. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_FALLING)
  149. ? &g->set_falling : &g->clr_falling);
  150. __raw_writel(mask, (trigger & IRQ_TYPE_EDGE_RISING)
  151. ? &g->set_rising : &g->clr_rising);
  152. return 0;
  153. }
  154. static struct irq_chip gpio_irqchip = {
  155. .name = "GPIO",
  156. .enable = gpio_irq_enable,
  157. .disable = gpio_irq_disable,
  158. .set_type = gpio_irq_type,
  159. };
  160. static void
  161. gpio_irq_handler(unsigned irq, struct irq_desc *desc)
  162. {
  163. struct gpio_controller *__iomem g = get_irq_chip_data(irq);
  164. u32 mask = 0xffff;
  165. /* we only care about one bank */
  166. if (irq & 1)
  167. mask <<= 16;
  168. /* temporarily mask (level sensitive) parent IRQ */
  169. desc->chip->ack(irq);
  170. while (1) {
  171. u32 status;
  172. int n;
  173. int res;
  174. /* ack any irqs */
  175. status = __raw_readl(&g->intstat) & mask;
  176. if (!status)
  177. break;
  178. __raw_writel(status, &g->intstat);
  179. if (irq & 1)
  180. status >>= 16;
  181. /* now demux them to the right lowlevel handler */
  182. n = (int)get_irq_data(irq);
  183. while (status) {
  184. res = ffs(status);
  185. n += res;
  186. generic_handle_irq(n - 1);
  187. status >>= res;
  188. }
  189. }
  190. desc->chip->unmask(irq);
  191. /* now it may re-trigger */
  192. }
  193. /*
  194. * NOTE: for suspend/resume, probably best to make a sysdev (and class)
  195. * with its suspend/resume calls hooking into the results of the set_wake()
  196. * calls ... so if no gpios are wakeup events the clock can be disabled,
  197. * with outputs left at previously set levels, and so that VDD3P3V.IOPWDN0
  198. * can be set appropriately for GPIOV33 pins.
  199. */
  200. static int __init davinci_gpio_irq_setup(void)
  201. {
  202. unsigned gpio, irq, bank;
  203. struct clk *clk;
  204. clk = clk_get(NULL, "gpio");
  205. if (IS_ERR(clk)) {
  206. printk(KERN_ERR "Error %ld getting gpio clock?\n",
  207. PTR_ERR(clk));
  208. return 0;
  209. }
  210. clk_enable(clk);
  211. for (gpio = 0, irq = gpio_to_irq(0), bank = IRQ_GPIOBNK0;
  212. gpio < DAVINCI_N_GPIO; bank++) {
  213. struct gpio_controller *__iomem g = gpio2controller(gpio);
  214. unsigned i;
  215. __raw_writel(~0, &g->clr_falling);
  216. __raw_writel(~0, &g->clr_rising);
  217. /* set up all irqs in this bank */
  218. set_irq_chained_handler(bank, gpio_irq_handler);
  219. set_irq_chip_data(bank, g);
  220. set_irq_data(bank, (void *)irq);
  221. for (i = 0; i < 16 && gpio < DAVINCI_N_GPIO;
  222. i++, irq++, gpio++) {
  223. set_irq_chip(irq, &gpio_irqchip);
  224. set_irq_chip_data(irq, g);
  225. set_irq_handler(irq, handle_simple_irq);
  226. set_irq_flags(irq, IRQF_VALID);
  227. }
  228. }
  229. /* BINTEN -- per-bank interrupt enable. genirq would also let these
  230. * bits be set/cleared dynamically.
  231. */
  232. __raw_writel(0x1f, (void *__iomem)
  233. IO_ADDRESS(DAVINCI_GPIO_BASE + 0x08));
  234. printk(KERN_INFO "DaVinci: %d gpio irqs\n", irq - gpio_to_irq(0));
  235. return 0;
  236. }
  237. arch_initcall(davinci_gpio_irq_setup);