e653fe900f97e6bebbd257ff4db663186e322d7b
[15.05/openwrt.git] / target / linux / sunxi / patches-3.14 / 135-pinctrl-fixes.patch
1 From 68a7d9940935cb71440a9ff384e5859592b0dbfd Mon Sep 17 00:00:00 2001
2 From: Hans de Goede <hdegoede@redhat.com>
3 Date: Sat, 14 Dec 2013 17:20:13 +0100
4 Subject: [PATCH] pinctrl-sunxi: Fix sun5i-a13 port F multiplexing
5
6 The correct value for selecting the mmc0 function on port F pins is 2 not 4,
7 as per the data-sheet:
8 http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
9
10 Signed-off-by: Hans de Goede <hdegoede@redhat.com>
11 Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
12 ---
13  drivers/pinctrl/pinctrl-sunxi-pins.h | 12 ++++++------
14  1 file changed, 6 insertions(+), 6 deletions(-)
15
16 diff --git a/drivers/pinctrl/pinctrl-sunxi-pins.h b/drivers/pinctrl/pinctrl-sunxi-pins.h
17 index 6fd8d4d..3d60669 100644
18 --- a/drivers/pinctrl/pinctrl-sunxi-pins.h
19 +++ b/drivers/pinctrl/pinctrl-sunxi-pins.h
20 @@ -1932,27 +1932,27 @@ static const struct sunxi_desc_pin sun5i_a13_pins[] = {
21         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF0,
22                   SUNXI_FUNCTION(0x0, "gpio_in"),
23                   SUNXI_FUNCTION(0x1, "gpio_out"),
24 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* D1 */
25 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* D1 */
26         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF1,
27                   SUNXI_FUNCTION(0x0, "gpio_in"),
28                   SUNXI_FUNCTION(0x1, "gpio_out"),
29 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* D0 */
30 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* D0 */
31         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF2,
32                   SUNXI_FUNCTION(0x0, "gpio_in"),
33                   SUNXI_FUNCTION(0x1, "gpio_out"),
34 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* CLK */
35 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* CLK */
36         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF3,
37                   SUNXI_FUNCTION(0x0, "gpio_in"),
38                   SUNXI_FUNCTION(0x1, "gpio_out"),
39 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* CMD */
40 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* CMD */
41         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF4,
42                   SUNXI_FUNCTION(0x0, "gpio_in"),
43                   SUNXI_FUNCTION(0x1, "gpio_out"),
44 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* D3 */
45 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* D3 */
46         SUNXI_PIN(SUNXI_PINCTRL_PIN_PF5,
47                   SUNXI_FUNCTION(0x0, "gpio_in"),
48                   SUNXI_FUNCTION(0x1, "gpio_out"),
49 -                 SUNXI_FUNCTION(0x4, "mmc0")),         /* D2 */
50 +                 SUNXI_FUNCTION(0x2, "mmc0")),         /* D2 */
51         /* Hole */
52         SUNXI_PIN(SUNXI_PINCTRL_PIN_PG0,
53                   SUNXI_FUNCTION(0x0, "gpio_in"),
54 -- 
55 2.0.3
56
57 From 8d2c11e63a3302bbbdac41fc765c881da8a8eb37 Mon Sep 17 00:00:00 2001
58 From: Hans de Goede <hdegoede@redhat.com>
59 Date: Sat, 15 Feb 2014 12:58:17 +0100
60 Subject: [PATCH] pinctrl-sunxi: Fix hang on gpio irq
61
62 Our irq handler was missing chained_irq_enter / exit calls, causing a
63 hard hang as soon as a gpio irq happened.
64
65 Signed-off-by: Hans de Goede <hdegoede@redhat.com>
66 ---
67  drivers/pinctrl/pinctrl-sunxi.c | 4 ++++
68  1 file changed, 4 insertions(+)
69
70 diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c
71 index f9fabe9..d16da53 100644
72 --- a/drivers/pinctrl/pinctrl-sunxi.c
73 +++ b/drivers/pinctrl/pinctrl-sunxi.c
74 @@ -13,6 +13,7 @@
75  #include <linux/io.h>
76  #include <linux/clk.h>
77  #include <linux/gpio.h>
78 +#include <linux/irqchip/chained_irq.h>
79  #include <linux/irqdomain.h>
80  #include <linux/irqchip/chained_irq.h>
81  #include <linux/module.h>
82 @@ -670,6 +671,8 @@ static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc)
83         struct sunxi_pinctrl *pctl = irq_get_handler_data(irq);
84         const unsigned long reg = readl(pctl->membase + IRQ_STATUS_REG);
85  
86 +       chained_irq_enter(chip, desc);
87 +
88         /* Clear all interrupts */
89         writel(reg, pctl->membase + IRQ_STATUS_REG);
90  
91 @@ -683,6 +686,7 @@ static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc)
92                 }
93                 chained_irq_exit(chip, desc);
94         }
95 +       chained_irq_exit(chip, desc);
96  }
97  
98  static struct of_device_id sunxi_pinctrl_match[] = {
99 -- 
100 2.0.3
101