135-pinctrl-fixes.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. From 68a7d9940935cb71440a9ff384e5859592b0dbfd Mon Sep 17 00:00:00 2001
  2. From: Hans de Goede <[email protected]>
  3. Date: Sat, 14 Dec 2013 17:20:13 +0100
  4. Subject: [PATCH] pinctrl-sunxi: Fix sun5i-a13 port F multiplexing
  5. The correct value for selecting the mmc0 function on port F pins is 2 not 4,
  6. as per the data-sheet:
  7. http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
  8. Signed-off-by: Hans de Goede <[email protected]>
  9. Acked-by: Maxime Ripard <[email protected]>
  10. ---
  11. drivers/pinctrl/pinctrl-sunxi-pins.h | 12 ++++++------
  12. 1 file changed, 6 insertions(+), 6 deletions(-)
  13. --- a/drivers/pinctrl/pinctrl-sunxi-pins.h
  14. +++ b/drivers/pinctrl/pinctrl-sunxi-pins.h
  15. @@ -1932,27 +1932,27 @@ static const struct sunxi_desc_pin sun5i
  16. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF0,
  17. SUNXI_FUNCTION(0x0, "gpio_in"),
  18. SUNXI_FUNCTION(0x1, "gpio_out"),
  19. - SUNXI_FUNCTION(0x4, "mmc0")), /* D1 */
  20. + SUNXI_FUNCTION(0x2, "mmc0")), /* D1 */
  21. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF1,
  22. SUNXI_FUNCTION(0x0, "gpio_in"),
  23. SUNXI_FUNCTION(0x1, "gpio_out"),
  24. - SUNXI_FUNCTION(0x4, "mmc0")), /* D0 */
  25. + SUNXI_FUNCTION(0x2, "mmc0")), /* D0 */
  26. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF2,
  27. SUNXI_FUNCTION(0x0, "gpio_in"),
  28. SUNXI_FUNCTION(0x1, "gpio_out"),
  29. - SUNXI_FUNCTION(0x4, "mmc0")), /* CLK */
  30. + SUNXI_FUNCTION(0x2, "mmc0")), /* CLK */
  31. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF3,
  32. SUNXI_FUNCTION(0x0, "gpio_in"),
  33. SUNXI_FUNCTION(0x1, "gpio_out"),
  34. - SUNXI_FUNCTION(0x4, "mmc0")), /* CMD */
  35. + SUNXI_FUNCTION(0x2, "mmc0")), /* CMD */
  36. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF4,
  37. SUNXI_FUNCTION(0x0, "gpio_in"),
  38. SUNXI_FUNCTION(0x1, "gpio_out"),
  39. - SUNXI_FUNCTION(0x4, "mmc0")), /* D3 */
  40. + SUNXI_FUNCTION(0x2, "mmc0")), /* D3 */
  41. SUNXI_PIN(SUNXI_PINCTRL_PIN_PF5,
  42. SUNXI_FUNCTION(0x0, "gpio_in"),
  43. SUNXI_FUNCTION(0x1, "gpio_out"),
  44. - SUNXI_FUNCTION(0x4, "mmc0")), /* D2 */
  45. + SUNXI_FUNCTION(0x2, "mmc0")), /* D2 */
  46. /* Hole */
  47. SUNXI_PIN(SUNXI_PINCTRL_PIN_PG0,
  48. SUNXI_FUNCTION(0x0, "gpio_in"),
  49. --- a/drivers/pinctrl/pinctrl-sunxi.c
  50. +++ b/drivers/pinctrl/pinctrl-sunxi.c
  51. @@ -13,6 +13,7 @@
  52. #include <linux/io.h>
  53. #include <linux/clk.h>
  54. #include <linux/gpio.h>
  55. +#include <linux/irqchip/chained_irq.h>
  56. #include <linux/irqdomain.h>
  57. #include <linux/irqchip/chained_irq.h>
  58. #include <linux/module.h>
  59. @@ -670,6 +671,8 @@ static void sunxi_pinctrl_irq_handler(un
  60. struct sunxi_pinctrl *pctl = irq_get_handler_data(irq);
  61. const unsigned long reg = readl(pctl->membase + IRQ_STATUS_REG);
  62. + chained_irq_enter(chip, desc);
  63. +
  64. /* Clear all interrupts */
  65. writel(reg, pctl->membase + IRQ_STATUS_REG);
  66. @@ -683,6 +686,7 @@ static void sunxi_pinctrl_irq_handler(un
  67. }
  68. chained_irq_exit(chip, desc);
  69. }
  70. + chained_irq_exit(chip, desc);
  71. }
  72. static struct of_device_id sunxi_pinctrl_match[] = {