linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: dts: da850: use gpio-ranges
@ 2018-02-19 22:29 David Lechner
  2018-02-22 15:34 ` Linus Walleij
  0 siblings, 1 reply; 5+ messages in thread
From: David Lechner @ 2018-02-19 22:29 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: Sekhar Nori, Kevin Hilman, Linus Walleij, Haojian Zhuang,
	Tony Lindgren, devicetree, linux-kernel, David Lechner

This makes use of the gpio-ranges feature that connects GPIO
controllers and PINMUX controllers.

In da850.dtsi, pinctrl-single,gpio-range is added to the pinmux node
and gpio-ranges is added to the GPIO node. Unfortunately, the way the
pinctrl-single driver enumerates the pins (starting with LSB) causes
them to be in reverse order compared to the way the gpios are assigned.
As a result, we have to declare the mapping for each GPIO individually.

This also lets us remove all of the GPIO pinmuxes from
da850-lego-ev3.dts. (Other da850 boards do not currently have any
GPIO pinmuxes declared.)

Signed-off-by: David Lechner <david@lechnology.com>
---

There are a couple of dependencies needed for this to actually work.

- "gpio: davinci: add support for pinmux gpio ranges" [1]
- "pinctrl: pinctrl-single: Fix pcs_request_gpio() when bits_per_mux != 0" [2]

[1]: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git/commit/?h=for-next&id=3c87d7c874b2119c1cff4eee5586b9a6bc0b7fe9
[2]: https://patchwork.kernel.org/patch/10229139/

 arch/arm/boot/dts/da850-lego-ev3.dts |  81 +-----------------
 arch/arm/boot/dts/da850.dtsi         | 154 +++++++++++++++++++++++++++++++++++
 2 files changed, 158 insertions(+), 77 deletions(-)

diff --git a/arch/arm/boot/dts/da850-lego-ev3.dts b/arch/arm/boot/dts/da850-lego-ev3.dts
index fa21add..401d808 100644
--- a/arch/arm/boot/dts/da850-lego-ev3.dts
+++ b/arch/arm/boot/dts/da850-lego-ev3.dts
@@ -37,7 +37,7 @@
 		#size-cells = <0>;
 		label = "EV3 Brick Buttons";
 		pinctrl-names = "default";
-		pinctrl-0 = <&button_pins>, <&button_bias>;
+		pinctrl-0 = <&button_bias>;
 
 		center {
 			label = "Center";
@@ -81,8 +81,6 @@
 	 */
 	leds {
 		compatible = "gpio-leds";
-		pinctrl-names = "default";
-		pinctrl-0 = <&led_pins>;
 
 		left_green {
 			label = "led0:green:brick-status";
@@ -119,8 +117,6 @@
 	gpio-poweroff {
 		compatible = "gpio-poweroff";
 		gpios = <&gpio 107 GPIO_ACTIVE_LOW>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&system_power_pin>;
 	};
 
 	sound {
@@ -145,8 +141,6 @@
 	 * the sensor (input) ports, the motor (output) ports and the A/DC.
 	 */
 	vcc5v: regulator1 {
-		pinctrl-names = "default";
-		pinctrl-0 = <&vcc5v_pins>;
 		compatible = "regulator-fixed";
 		regulator-name = "vcc5v";
 		regulator-min-microvolt = <5000000>;
@@ -174,8 +168,6 @@
 	 * This is the amplifier for the speaker.
 	 */
 	amp: regulator3 {
-		pinctrl-names = "default";
-		pinctrl-0 = <&amp_pins>;
 		compatible = "regulator-fixed";
 		regulator-name = "amp";
 		gpio = <&gpio 111 GPIO_ACTIVE_HIGH>;
@@ -186,8 +178,6 @@
 	 * The EV3 can use 6-AA batteries or a rechargeable Li-ion battery pack.
 	 */
 	battery {
-		pinctrl-names = "default";
-		pinctrl-0 = <&battery_pins>;
 		compatible = "lego,ev3-battery";
 		io-channels = <&adc 4>, <&adc 3>;
 		io-channel-names = "voltage", "current";
@@ -223,73 +213,10 @@
 &pmx_core {
 	status = "okay";
 
-	mmc0_cd_pin: pinmux_mmc0_cd {
-		pinctrl-single,bits = <
-			/* GP5[14] */
-			0x2C 0x00000080 0x000000f0
-		>;
-	};
-
-	button_pins: pinmux_button_pins {
-		pinctrl-single,bits = <
-			/* GP1[13] */
-			0x8 0x00000800 0x00000f00
-			/* GP6[10] */
-			0x34 0x00800000 0x00f00000
-			/* GP6[6] */
-			0x38 0x00000080 0x000000f0
-			/* GP7[12], GP7[14], GP7[15] */
-			0x40 0x00808800 0x00f0ff00
-		>;
-	};
-
-	led_pins: pinmux_led_pins {
-		pinctrl-single,bits = <
-			/* GP6[12], GP6[13], GP6[14] */
-			0x34 0x00008880 0x0000fff0
-			/* GP6[7] */
-			0x38 0x00000008 0x0000000f
-		>;
-	};
-
-	system_power_pin: pinmux_system_power {
-		pinctrl-single,bits = <
-			/* GP6[11] */
-			0x34 0x00080000 0x000f0000
-		>;
-	};
-
-	vcc5v_pins: pinmux_vcc5v {
-		pinctrl-single,bits = <
-			/* GP6[5] */
-			0x40 0x00000080 0x000000f0
-			/* GP6[3] */
-			0x4c 0x00008000 0x0000f000
-		>;
-	};
-
-	amp_pins: pinmux_amp_pins {
-		pinctrl-single,bits = <
-			/* GP6[15] */
-			0x34 0x00000008 0x0000000f
-		>;
-	};
-
-	battery_pins: pinmux_battery_pins {
-		pinctrl-single,bits = <
-			/* GP0[6] */
-			0x04 0x00000080 0x000000f0
-			/* GP8[8] */
-			0x4c 0x00000080 0x000000f0
-		>;
-	};
-
 	ev3_lcd_pins: pinmux_lcd {
 		pinctrl-single,bits = <
-			/* SIMO, GP2[11], GP2[12], CLK */
-			0x14 0x00188100 0x00ffff00
-			/* GP5[0] */
-			0x30 0x80000000 0xf0000000
+			/* SIMO, CLK */
+			0x14 0x00100100 0x00f00f00
 		>;
 	};
 };
@@ -344,7 +271,7 @@
 	bus-width = <4>;
 	cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>;
 	pinctrl-names = "default";
-	pinctrl-0 = <&mmc0_pins>, <&mmc0_cd_pin>;
+	pinctrl-0 = <&mmc0_pins>;
 };
 
 &spi0 {
diff --git a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/da850.dtsi
index 4bc6eb8..a6a4c75 100644
--- a/arch/arm/boot/dts/da850.dtsi
+++ b/arch/arm/boot/dts/da850.dtsi
@@ -160,8 +160,18 @@
 			pinctrl-single,bit-per-mux;
 			pinctrl-single,register-width = <32>;
 			pinctrl-single,function-mask = <0xf>;
+			/* pin base, nr pins & gpio function */
+			pinctrl-single,gpio-range = <&range   0 17 0x8>,
+						    <&range  17  8 0x4>,
+						    <&range  26  8 0x4>,
+						    <&range  34 80 0x8>,
+						    <&range 129 31 0x8>;
 			status = "disabled";
 
+			range: gpio-range {
+				#pinctrl-single,gpio-range-cells = <3>;
+			};
+
 			serial0_rtscts_pins: pinmux_serial0_rtscts_pins {
 				pinctrl-single,bits = <
 					/* UART0_RTS UART0_CTS */
@@ -739,6 +749,150 @@
 			#interrupt-cells = <2>;
 			clocks = <&psc1 3>;
 			clock-names = "gpio";
+			gpio-ranges = <&pmx_core   0  15 1>,
+				      <&pmx_core   1  14 1>,
+				      <&pmx_core   2  13 1>,
+				      <&pmx_core   3  12 1>,
+				      <&pmx_core   4  11 1>,
+				      <&pmx_core   5  10 1>,
+				      <&pmx_core   6   9 1>,
+				      <&pmx_core   7   8 1>,
+				      <&pmx_core   8   7 1>,
+				      <&pmx_core   9   6 1>,
+				      <&pmx_core  10   5 1>,
+				      <&pmx_core  11   4 1>,
+				      <&pmx_core  12   3 1>,
+				      <&pmx_core  13   2 1>,
+				      <&pmx_core  14   1 1>,
+				      <&pmx_core  15   0 1>,
+				      <&pmx_core  16  39 1>,
+				      <&pmx_core  17  38 1>,
+				      <&pmx_core  18  37 1>,
+				      <&pmx_core  19  36 1>,
+				      <&pmx_core  20  35 1>,
+				      <&pmx_core  21  34 1>,
+				      <&pmx_core  22  33 1>,
+				      <&pmx_core  23  32 1>,
+				      <&pmx_core  24  24 1>,
+				      <&pmx_core  25  22 1>,
+				      <&pmx_core  26  21 1>,
+				      <&pmx_core  27  20 1>,
+				      <&pmx_core  28  19 1>,
+				      <&pmx_core  29  18 1>,
+				      <&pmx_core  30  17 1>,
+				      <&pmx_core  31  16 1>,
+				      <&pmx_core  32  55 1>,
+				      <&pmx_core  33  54 1>,
+				      <&pmx_core  34  53 1>,
+				      <&pmx_core  35  52 1>,
+				      <&pmx_core  36  51 1>,
+				      <&pmx_core  37  50 1>,
+				      <&pmx_core  38  49 1>,
+				      <&pmx_core  39  48 1>,
+				      <&pmx_core  40  47 1>,
+				      <&pmx_core  41  46 1>,
+				      <&pmx_core  42  45 1>,
+				      <&pmx_core  43  44 1>,
+				      <&pmx_core  44  43 1>,
+				      <&pmx_core  45  42 1>,
+				      <&pmx_core  46  41 1>,
+				      <&pmx_core  47  40 1>,
+				      <&pmx_core  48  71 1>,
+				      <&pmx_core  49  70 1>,
+				      <&pmx_core  50  69 1>,
+				      <&pmx_core  51  68 1>,
+				      <&pmx_core  52  67 1>,
+				      <&pmx_core  53  66 1>,
+				      <&pmx_core  54  65 1>,
+				      <&pmx_core  55  64 1>,
+				      <&pmx_core  56  63 1>,
+				      <&pmx_core  57  62 1>,
+				      <&pmx_core  58  61 1>,
+				      <&pmx_core  59  60 1>,
+				      <&pmx_core  60  59 1>,
+				      <&pmx_core  61  58 1>,
+				      <&pmx_core  62  57 1>,
+				      <&pmx_core  63  56 1>,
+				      <&pmx_core  64  87 1>,
+				      <&pmx_core  65  86 1>,
+				      <&pmx_core  66  85 1>,
+				      <&pmx_core  67  84 1>,
+				      <&pmx_core  68  83 1>,
+				      <&pmx_core  69  82 1>,
+				      <&pmx_core  70  81 1>,
+				      <&pmx_core  71  80 1>,
+				      <&pmx_core  72  70 1>,
+				      <&pmx_core  73  78 1>,
+				      <&pmx_core  74  77 1>,
+				      <&pmx_core  75  76 1>,
+				      <&pmx_core  76  75 1>,
+				      <&pmx_core  77  74 1>,
+				      <&pmx_core  78  73 1>,
+				      <&pmx_core  79  72 1>,
+				      <&pmx_core  80 103 1>,
+				      <&pmx_core  81 102 1>,
+				      <&pmx_core  82 101 1>,
+				      <&pmx_core  83 100 1>,
+				      <&pmx_core  84  99 1>,
+				      <&pmx_core  85  98 1>,
+				      <&pmx_core  86  97 1>,
+				      <&pmx_core  87  96 1>,
+				      <&pmx_core  88  95 1>,
+				      <&pmx_core  89  94 1>,
+				      <&pmx_core  90  93 1>,
+				      <&pmx_core  91  92 1>,
+				      <&pmx_core  92  91 1>,
+				      <&pmx_core  93  90 1>,
+				      <&pmx_core  94  89 1>,
+				      <&pmx_core  95  88 1>,
+				      <&pmx_core  96 158 1>,
+				      <&pmx_core  97 157 1>,
+				      <&pmx_core  98 156 1>,
+				      <&pmx_core  99 155 1>,
+				      <&pmx_core 100 154 1>,
+				      <&pmx_core 101 129 1>,
+				      <&pmx_core 102 113 1>,
+				      <&pmx_core 103 112 1>,
+				      <&pmx_core 104 111 1>,
+				      <&pmx_core 105 110 1>,
+				      <&pmx_core 106 109 1>,
+				      <&pmx_core 107 108 1>,
+				      <&pmx_core 108 107 1>,
+				      <&pmx_core 109 106 1>,
+				      <&pmx_core 110 105 1>,
+				      <&pmx_core 111 104 1>,
+				      <&pmx_core 112 145 1>,
+				      <&pmx_core 113 144 1>,
+				      <&pmx_core 114 143 1>,
+				      <&pmx_core 115 142 1>,
+				      <&pmx_core 116 141 1>,
+				      <&pmx_core 117 140 1>,
+				      <&pmx_core 118 139 1>,
+				      <&pmx_core 119 138 1>,
+				      <&pmx_core 120 137 1>,
+				      <&pmx_core 121 136 1>,
+				      <&pmx_core 122 135 1>,
+				      <&pmx_core 123 134 1>,
+				      <&pmx_core 124 133 1>,
+				      <&pmx_core 125 132 1>,
+				      <&pmx_core 126 131 1>,
+				      <&pmx_core 127 130 1>,
+				      <&pmx_core 128 159 1>,
+				      <&pmx_core 129  31 1>,
+				      <&pmx_core 130  30 1>,
+				      <&pmx_core 131  20 1>,
+				      <&pmx_core 132  28 1>,
+				      <&pmx_core 133  27 1>,
+				      <&pmx_core 134  26 1>,
+				      <&pmx_core 135  23 1>,
+				      <&pmx_core 136 153 1>,
+				      <&pmx_core 137 152 1>,
+				      <&pmx_core 138 151 1>,
+				      <&pmx_core 139 150 1>,
+				      <&pmx_core 140 149 1>,
+				      <&pmx_core 141 148 1>,
+				      <&pmx_core 142 147 1>,
+				      <&pmx_core 143 146 1>;
 		};
 		psc1: clock-controller@227000 {
 			compatible = "ti,da850-psc1";
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] ARM: dts: da850: use gpio-ranges
  2018-02-19 22:29 [PATCH] ARM: dts: da850: use gpio-ranges David Lechner
@ 2018-02-22 15:34 ` Linus Walleij
  2018-02-23 11:44   ` Sekhar Nori
  0 siblings, 1 reply; 5+ messages in thread
From: Linus Walleij @ 2018-02-22 15:34 UTC (permalink / raw)
  To: David Lechner
  Cc: Linux ARM, Sekhar Nori, Kevin Hilman, Haojian Zhuang,
	Tony Lindgren,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel

On Mon, Feb 19, 2018 at 11:29 PM, David Lechner <david@lechnology.com> wrote:

> This makes use of the gpio-ranges feature that connects GPIO
> controllers and PINMUX controllers.
>
> In da850.dtsi, pinctrl-single,gpio-range is added to the pinmux node
> and gpio-ranges is added to the GPIO node. Unfortunately, the way the
> pinctrl-single driver enumerates the pins (starting with LSB) causes
> them to be in reverse order compared to the way the gpios are assigned.
> As a result, we have to declare the mapping for each GPIO individually.
>
> This also lets us remove all of the GPIO pinmuxes from
> da850-lego-ev3.dts. (Other da850 boards do not currently have any
> GPIO pinmuxes declared.)
>
> Signed-off-by: David Lechner <david@lechnology.com>

Nice,
Acked-by: Linus Walleij <linus.wallei@linaro.org>

> +                       gpio-ranges = <&pmx_core   0  15 1>,
> +                                     <&pmx_core   1  14 1>,
> +                                     <&pmx_core   2  13 1>,
> +                                     <&pmx_core   3  12 1>,
> +                                     <&pmx_core   4  11 1>,
> +                                     <&pmx_core   5  10 1>,
> +                                     <&pmx_core   6   9 1>,
> +                                     <&pmx_core   7   8 1>,
> +                                     <&pmx_core   8   7 1>,
> +                                     <&pmx_core   9   6 1>,
> +                                     <&pmx_core  10   5 1>,
> +                                     <&pmx_core  11   4 1>,
> +                                     <&pmx_core  12   3 1>,
> +                                     <&pmx_core  13   2 1>,
> +                                     <&pmx_core  14   1 1>,
> +                                     <&pmx_core  15   0 1>,

Heh the map moves backward how funny.

Sorry that we don't have an option to map that
any better in the ranges but hey, this works.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ARM: dts: da850: use gpio-ranges
  2018-02-22 15:34 ` Linus Walleij
@ 2018-02-23 11:44   ` Sekhar Nori
  2018-04-15 18:57     ` David Lechner
  0 siblings, 1 reply; 5+ messages in thread
From: Sekhar Nori @ 2018-02-23 11:44 UTC (permalink / raw)
  To: Linus Walleij, David Lechner
  Cc: Linux ARM, Kevin Hilman, Haojian Zhuang, Tony Lindgren,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel

On Thursday 22 February 2018 09:04 PM, Linus Walleij wrote:
> On Mon, Feb 19, 2018 at 11:29 PM, David Lechner <david@lechnology.com> wrote:
> 
>> This makes use of the gpio-ranges feature that connects GPIO
>> controllers and PINMUX controllers.
>>
>> In da850.dtsi, pinctrl-single,gpio-range is added to the pinmux node
>> and gpio-ranges is added to the GPIO node. Unfortunately, the way the
>> pinctrl-single driver enumerates the pins (starting with LSB) causes
>> them to be in reverse order compared to the way the gpios are assigned.
>> As a result, we have to declare the mapping for each GPIO individually.
>>
>> This also lets us remove all of the GPIO pinmuxes from
>> da850-lego-ev3.dts. (Other da850 boards do not currently have any
>> GPIO pinmuxes declared.)
>>
>> Signed-off-by: David Lechner <david@lechnology.com>
> 
> Nice,
> Acked-by: Linus Walleij <linus.wallei@linaro.org>

Looks good to me too. And quite painstakingly done!

I suppose this needs to wait a bit due to the dependencies? Let me know
once its okay to merge.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ARM: dts: da850: use gpio-ranges
  2018-02-23 11:44   ` Sekhar Nori
@ 2018-04-15 18:57     ` David Lechner
  2018-04-16  6:25       ` Sekhar Nori
  0 siblings, 1 reply; 5+ messages in thread
From: David Lechner @ 2018-04-15 18:57 UTC (permalink / raw)
  To: Sekhar Nori, Linus Walleij
  Cc: Linux ARM, Kevin Hilman, Haojian Zhuang, Tony Lindgren,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel

On 02/23/2018 05:44 AM, Sekhar Nori wrote:
> On Thursday 22 February 2018 09:04 PM, Linus Walleij wrote:
>> On Mon, Feb 19, 2018 at 11:29 PM, David Lechner <david@lechnology.com> wrote:
>>
>>> This makes use of the gpio-ranges feature that connects GPIO
>>> controllers and PINMUX controllers.
>>>
>>> In da850.dtsi, pinctrl-single,gpio-range is added to the pinmux node
>>> and gpio-ranges is added to the GPIO node. Unfortunately, the way the
>>> pinctrl-single driver enumerates the pins (starting with LSB) causes
>>> them to be in reverse order compared to the way the gpios are assigned.
>>> As a result, we have to declare the mapping for each GPIO individually.
>>>
>>> This also lets us remove all of the GPIO pinmuxes from
>>> da850-lego-ev3.dts. (Other da850 boards do not currently have any
>>> GPIO pinmuxes declared.)
>>>
>>> Signed-off-by: David Lechner <david@lechnology.com>
>>
>> Nice,
>> Acked-by: Linus Walleij <linus.wallei@linaro.org>
> 
> Looks good to me too. And quite painstakingly done!
> 
> I suppose this needs to wait a bit due to the dependencies? Let me know
> once its okay to merge.
> 
> Thanks,
> Sekhar
> 

Hi Sekhar,

The dependencies are in v4.17-rc1 so you can pick up this patch now.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ARM: dts: da850: use gpio-ranges
  2018-04-15 18:57     ` David Lechner
@ 2018-04-16  6:25       ` Sekhar Nori
  0 siblings, 0 replies; 5+ messages in thread
From: Sekhar Nori @ 2018-04-16  6:25 UTC (permalink / raw)
  To: David Lechner, Linus Walleij
  Cc: Linux ARM, Kevin Hilman, Haojian Zhuang, Tony Lindgren,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel

On Monday 16 April 2018 12:27 AM, David Lechner wrote:
> On 02/23/2018 05:44 AM, Sekhar Nori wrote:
>> On Thursday 22 February 2018 09:04 PM, Linus Walleij wrote:
>>> On Mon, Feb 19, 2018 at 11:29 PM, David Lechner
>>> <david@lechnology.com> wrote:
>>>
>>>> This makes use of the gpio-ranges feature that connects GPIO
>>>> controllers and PINMUX controllers.
>>>>
>>>> In da850.dtsi, pinctrl-single,gpio-range is added to the pinmux node
>>>> and gpio-ranges is added to the GPIO node. Unfortunately, the way the
>>>> pinctrl-single driver enumerates the pins (starting with LSB) causes
>>>> them to be in reverse order compared to the way the gpios are assigned.
>>>> As a result, we have to declare the mapping for each GPIO individually.
>>>>
>>>> This also lets us remove all of the GPIO pinmuxes from
>>>> da850-lego-ev3.dts. (Other da850 boards do not currently have any
>>>> GPIO pinmuxes declared.)
>>>>
>>>> Signed-off-by: David Lechner <david@lechnology.com>
>>>
>>> Nice,
>>> Acked-by: Linus Walleij <linus.wallei@linaro.org>
>>
>> Looks good to me too. And quite painstakingly done!
>>
>> I suppose this needs to wait a bit due to the dependencies? Let me know
>> once its okay to merge.
>>
>> Thanks,
>> Sekhar
>>
> 
> Hi Sekhar,
> 
> The dependencies are in v4.17-rc1 so you can pick up this patch now.

applied to v4.18/dt. I had to manually adjust the patch to make it
apply, probably because it was based off your common clock conversion
branch.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-04-16  6:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-19 22:29 [PATCH] ARM: dts: da850: use gpio-ranges David Lechner
2018-02-22 15:34 ` Linus Walleij
2018-02-23 11:44   ` Sekhar Nori
2018-04-15 18:57     ` David Lechner
2018-04-16  6:25       ` Sekhar Nori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).