diff mbox

[2/3] arm: kirkwood: factor pinmux descriptors for OpenBlocks A6

Message ID 1362587021-32762-3-git-send-email-thomas.petazzoni@free-electrons.com (mailing list archive)
State New, archived
Headers show

Commit Message

Thomas Petazzoni March 6, 2013, 4:23 p.m. UTC
The OpenBlocks A6 .dts file was using a long list of pinmux
descriptors to select each GPIO of the external GPIO connector and the
internal DIP switch, for no apparent reason. This commit factors those
GPIO pins into two descriptors: one for the external GPIO connector
and one for the internal DIP switch.

As an added bonus, this commit also adds comments that says what those
GPIOs are used for.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/boot/dts/kirkwood-openblocks_a6.dts |   74 +++++---------------------
 1 file changed, 14 insertions(+), 60 deletions(-)

Comments

Andrew Lunn March 6, 2013, 6:16 p.m. UTC | #1
On Wed, Mar 06, 2013 at 05:23:40PM +0100, Thomas Petazzoni wrote:
> The OpenBlocks A6 .dts file was using a long list of pinmux
> descriptors to select each GPIO of the external GPIO connector and the
> internal DIP switch, for no apparent reason. This commit factors those
> GPIO pins into two descriptors: one for the external GPIO connector
> and one for the internal DIP switch.

Hi Thomas

There is no need to pinmux gpio pins at all. The pinctrl driver does
it when the gpio driver requests the pins.

This stems from an error i made. I also didn't know this and added
hogs for gpio pins as i converted some boards. Others have then just
cut/paste my error.....

	  Andrew

> 
> As an added bonus, this commit also adds comments that says what those
> GPIOs are used for.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  arch/arm/boot/dts/kirkwood-openblocks_a6.dts |   74 +++++---------------------
>  1 file changed, 14 insertions(+), 60 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
> index 087681d..0488d6a 100644
> --- a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
> +++ b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
> @@ -85,12 +85,7 @@
>  		};
>  
>  		pinctrl: pinctrl@10000 {
> -			pinctrl-0 = <&pmx_dip_sw0 &pmx_dip_sw1
> -				&pmx_dip_sw2 &pmx_dip_sw3
> -				&pmx_gpio_0 &pmx_gpio_1
> -				&pmx_gpio_2 &pmx_gpio_3
> -				&pmx_gpio_4 &pmx_gpio_5
> -				&pmx_gpio_6 &pmx_gpio_7>;
> +			pinctrl-0 = <&pmx_dip_sw &pmx_ext_gpios>;
>  			pinctrl-names = "default";
>  
>  			pmx_uart0: pmx-uart0 {
> @@ -110,63 +105,22 @@
>  				marvell,function = "sysrst";
>  			};
>  
> -			pmx_dip_sw0: pmx-dip-sw0 {
> -				marvell,pins = "mpp20";
> +			/*
> +			 * Four input GPIOs connected to the 4-way
> +			 * DIP-switch inside the device.
> +			 */
> +			pmx_dip_sw: pmx-dip-sw {
> +				marvell,pins = "mpp20", "mpp21", "mpp22", "mpp23";
>  				marvell,function = "gpio";
>  			};
>  
> -			pmx_dip_sw1: pmx-dip-sw1 {
> -				marvell,pins = "mpp21";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_dip_sw2: pmx-dip-sw2 {
> -				marvell,pins = "mpp22";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_dip_sw3: pmx-dip-sw3 {
> -				marvell,pins = "mpp23";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_0: pmx-gpio-0 {
> -				marvell,pins = "mpp24";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_1: pmx-gpio-1 {
> -				marvell,pins = "mpp25";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_2: pmx-gpio-2 {
> -				marvell,pins = "mpp26";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_3: pmx-gpio-3 {
> -				marvell,pins = "mpp27";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_4: pmx-gpio-4 {
> -				marvell,pins = "mpp28";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_5: pmx-gpio-5 {
> -				marvell,pins = "mpp29";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_6: pmx-gpio-6 {
> -				marvell,pins = "mpp30";
> -				marvell,function = "gpio";
> -			};
> -
> -			pmx_gpio_7: pmx-gpio-7 {
> -				marvell,pins = "mpp31";
> +			/*
> +			 * 8 GPIOs available through the Hirose 16
> +			 * pins header at the back of the device.
> +			 */
> +			pmx_ext_gpios: pmx-ext-gpios {
> +				marvell,pins = "mpp24", "mpp25", "mpp26", "mpp27",
> +					"mpp28", "mpp29", "mpp30", "mpp31";
>  				marvell,function = "gpio";
>  			};
>  
> -- 
> 1.7.9.5
>
Thomas Petazzoni March 6, 2013, 7:16 p.m. UTC | #2
Dear Andrew Lunn,

On Wed, 6 Mar 2013 19:16:48 +0100, Andrew Lunn wrote:

> There is no need to pinmux gpio pins at all. The pinctrl driver does
> it when the gpio driver requests the pins.

Right, that's true. I knew about this, but since the pinmux
configuration was made explicit for those GPIOs, I thought the original
author(s) of this .dts did this intentionally. For example, it somewhat
documents the 8 GPIOs that are available in the bottom connector of the
OpenBlocks A6. They are not tied to anyway particular device, so they
wouldn't appear anywhere in the DT. Ditto for the DIP switch GPIOs. Do
you also want those to be removed from the DT?

Thanks,

Thomas
Andrew Lunn March 7, 2013, 6:22 a.m. UTC | #3
On Wed, Mar 06, 2013 at 08:16:46PM +0100, Thomas Petazzoni wrote:
> Dear Andrew Lunn,
> 
> On Wed, 6 Mar 2013 19:16:48 +0100, Andrew Lunn wrote:
> 
> > There is no need to pinmux gpio pins at all. The pinctrl driver does
> > it when the gpio driver requests the pins.
> 
> Right, that's true. I knew about this, but since the pinmux
> configuration was made explicit for those GPIOs, I thought the original
> author(s) of this .dts did this intentionally. For example, it somewhat
> documents the 8 GPIOs that are available in the bottom connector of the
> OpenBlocks A6. They are not tied to anyway particular device, so they
> wouldn't appear anywhere in the DT. Ditto for the DIP switch GPIOs. Do
> you also want those to be removed from the DT?

Hi Thomas

Good point. They are not required, but don't harm. So yes, leave them
there for documentation purposes.

      Andrew
Thomas Petazzoni March 7, 2013, 8:08 a.m. UTC | #4
Dear Andrew Lunn,

On Thu, 7 Mar 2013 07:22:55 +0100, Andrew Lunn wrote:

> > Right, that's true. I knew about this, but since the pinmux
> > configuration was made explicit for those GPIOs, I thought the original
> > author(s) of this .dts did this intentionally. For example, it somewhat
> > documents the 8 GPIOs that are available in the bottom connector of the
> > OpenBlocks A6. They are not tied to anyway particular device, so they
> > wouldn't appear anywhere in the DT. Ditto for the DIP switch GPIOs. Do
> > you also want those to be removed from the DT?
> 
> Hi Thomas
> 
> Good point. They are not required, but don't harm. So yes, leave them
> there for documentation purposes.

So I keep the GPIO muxing for the external GPIOs and the DIP switch
GPIOs, but the one that are "claimed" by another device (like gpio-leds
or gpio-keys), I should remove the muxing? I'm fine with that, just
want to confirm the choice.

Thanks!

Thomas
Andrew Lunn March 7, 2013, 9:24 a.m. UTC | #5
> So I keep the GPIO muxing for the external GPIOs and the DIP switch
> GPIOs, but the one that are "claimed" by another device (like gpio-leds
> or gpio-keys), I should remove the muxing? I'm fine with that, just
> want to confirm the choice.

Hi Thomas,

Yes, i'm happy with that.

     Andrew
Thomas Petazzoni March 22, 2013, 3:44 p.m. UTC | #6
Dear Andrew Lunn,

On Wed, 6 Mar 2013 19:16:48 +0100, Andrew Lunn wrote:
> On Wed, Mar 06, 2013 at 05:23:40PM +0100, Thomas Petazzoni wrote:
> > The OpenBlocks A6 .dts file was using a long list of pinmux
> > descriptors to select each GPIO of the external GPIO connector and the
> > internal DIP switch, for no apparent reason. This commit factors those
> > GPIO pins into two descriptors: one for the external GPIO connector
> > and one for the internal DIP switch.
> 
> Hi Thomas
> 
> There is no need to pinmux gpio pins at all. The pinctrl driver does
> it when the gpio driver requests the pins.
> 
> This stems from an error i made. I also didn't know this and added
> hogs for gpio pins as i converted some boards. Others have then just
> cut/paste my error.....

I was looking at this today to send an updated version of those
patches. However, it turns out that having the pinctrl-0 property to
associate pinmux configurations to a device has an advantage: pinctrl
knows about this association.

If you keep the pinctrl-0 property in gpio-leds and gpio-keys,
then /sys/kernel/debug/pinctrl/f1010000.pinctrl/pinmux-pins looks like
this:

======================================================================
pin 38 (PIN38): gpio_keys.2 mvebu-gpio:38 function gpio group mpp38
pin 39 (PIN39): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 40 (PIN40): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 41 (PIN41): gpio-leds.1 mvebu-gpio:41 function gpio group mpp41
pin 42 (PIN42): gpio-leds.1 mvebu-gpio:42 function gpio group mpp42
pin 43 (PIN43): gpio-leds.1 mvebu-gpio:43 function gpio group mpp43
======================================================================

On the other hand, if you remove the pinctrl-0 property, the same file
looks like this:

======================================================================
pin 38 (PIN38): (MUX UNCLAIMED) mvebu-gpio:38
pin 39 (PIN39): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 40 (PIN40): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 41 (PIN41): (MUX UNCLAIMED) mvebu-gpio:41
pin 42 (PIN42): (MUX UNCLAIMED) mvebu-gpio:42
pin 43 (PIN43): (MUX UNCLAIMED) mvebu-gpio:43
======================================================================

So you no longer know by what device the pin is claimed. It is not
horrible of course, but I find it quite nice to be able to see which
pin is used by what device.

What do you think?

Thomas
Andrew Lunn March 26, 2013, 7:48 p.m. UTC | #7
On Fri, Mar 22, 2013 at 04:44:40PM +0100, Thomas Petazzoni wrote:
> Dear Andrew Lunn,
> 
> On Wed, 6 Mar 2013 19:16:48 +0100, Andrew Lunn wrote:
> > On Wed, Mar 06, 2013 at 05:23:40PM +0100, Thomas Petazzoni wrote:
> > > The OpenBlocks A6 .dts file was using a long list of pinmux
> > > descriptors to select each GPIO of the external GPIO connector and the
> > > internal DIP switch, for no apparent reason. This commit factors those
> > > GPIO pins into two descriptors: one for the external GPIO connector
> > > and one for the internal DIP switch.
> > 
> > Hi Thomas
> > 
> > There is no need to pinmux gpio pins at all. The pinctrl driver does
> > it when the gpio driver requests the pins.
> > 
> > This stems from an error i made. I also didn't know this and added
> > hogs for gpio pins as i converted some boards. Others have then just
> > cut/paste my error.....
> 
> I was looking at this today to send an updated version of those
> patches. However, it turns out that having the pinctrl-0 property to
> associate pinmux configurations to a device has an advantage: pinctrl
> knows about this association.
> 
> If you keep the pinctrl-0 property in gpio-leds and gpio-keys,
> then /sys/kernel/debug/pinctrl/f1010000.pinctrl/pinmux-pins looks like
> this:
> 
> ======================================================================
> pin 38 (PIN38): gpio_keys.2 mvebu-gpio:38 function gpio group mpp38
> pin 39 (PIN39): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 40 (PIN40): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 41 (PIN41): gpio-leds.1 mvebu-gpio:41 function gpio group mpp41
> pin 42 (PIN42): gpio-leds.1 mvebu-gpio:42 function gpio group mpp42
> pin 43 (PIN43): gpio-leds.1 mvebu-gpio:43 function gpio group mpp43
> ======================================================================
> 
> On the other hand, if you remove the pinctrl-0 property, the same file
> looks like this:
> 
> ======================================================================
> pin 38 (PIN38): (MUX UNCLAIMED) mvebu-gpio:38
> pin 39 (PIN39): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 40 (PIN40): (MUX UNCLAIMED) (GPIO UNCLAIMED)
> pin 41 (PIN41): (MUX UNCLAIMED) mvebu-gpio:41
> pin 42 (PIN42): (MUX UNCLAIMED) mvebu-gpio:42
> pin 43 (PIN43): (MUX UNCLAIMED) mvebu-gpio:43
> ======================================================================
> 
> So you no longer know by what device the pin is claimed. It is not
> horrible of course, but I find it quite nice to be able to see which
> pin is used by what device.
> 
> What do you think?

Hi Thomas

I think the first is more informative. Please use that.

  Thanks
	Andrew
diff mbox

Patch

diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
index 087681d..0488d6a 100644
--- a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
+++ b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts
@@ -85,12 +85,7 @@ 
 		};
 
 		pinctrl: pinctrl@10000 {
-			pinctrl-0 = <&pmx_dip_sw0 &pmx_dip_sw1
-				&pmx_dip_sw2 &pmx_dip_sw3
-				&pmx_gpio_0 &pmx_gpio_1
-				&pmx_gpio_2 &pmx_gpio_3
-				&pmx_gpio_4 &pmx_gpio_5
-				&pmx_gpio_6 &pmx_gpio_7>;
+			pinctrl-0 = <&pmx_dip_sw &pmx_ext_gpios>;
 			pinctrl-names = "default";
 
 			pmx_uart0: pmx-uart0 {
@@ -110,63 +105,22 @@ 
 				marvell,function = "sysrst";
 			};
 
-			pmx_dip_sw0: pmx-dip-sw0 {
-				marvell,pins = "mpp20";
+			/*
+			 * Four input GPIOs connected to the 4-way
+			 * DIP-switch inside the device.
+			 */
+			pmx_dip_sw: pmx-dip-sw {
+				marvell,pins = "mpp20", "mpp21", "mpp22", "mpp23";
 				marvell,function = "gpio";
 			};
 
-			pmx_dip_sw1: pmx-dip-sw1 {
-				marvell,pins = "mpp21";
-				marvell,function = "gpio";
-			};
-
-			pmx_dip_sw2: pmx-dip-sw2 {
-				marvell,pins = "mpp22";
-				marvell,function = "gpio";
-			};
-
-			pmx_dip_sw3: pmx-dip-sw3 {
-				marvell,pins = "mpp23";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_0: pmx-gpio-0 {
-				marvell,pins = "mpp24";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_1: pmx-gpio-1 {
-				marvell,pins = "mpp25";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_2: pmx-gpio-2 {
-				marvell,pins = "mpp26";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_3: pmx-gpio-3 {
-				marvell,pins = "mpp27";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_4: pmx-gpio-4 {
-				marvell,pins = "mpp28";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_5: pmx-gpio-5 {
-				marvell,pins = "mpp29";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_6: pmx-gpio-6 {
-				marvell,pins = "mpp30";
-				marvell,function = "gpio";
-			};
-
-			pmx_gpio_7: pmx-gpio-7 {
-				marvell,pins = "mpp31";
+			/*
+			 * 8 GPIOs available through the Hirose 16
+			 * pins header at the back of the device.
+			 */
+			pmx_ext_gpios: pmx-ext-gpios {
+				marvell,pins = "mpp24", "mpp25", "mpp26", "mpp27",
+					"mpp28", "mpp29", "mpp30", "mpp31";
 				marvell,function = "gpio";
 			};