2020-06-22 17:34:25

by Drew Fustini

[permalink] [raw]
Subject: [PATCH v3 0/3] pinctrl: single: support #pinctrl-cells = 2

Currently, pinctrl-single only allows #pinctrl-cells = 1.

This series will allow pinctrl-single to also support #pinctrl-cells = 2

If "pinctrl-single,pins" has 3 arguments (offset, conf, mux) then
pcs_parse_one_pinctrl_entry() does an OR operation on to get the
value to store in the register.

To take advantage of #pinctrl-cells = 2, the AM33XX_PADCONF macro in
omap.h is modified to keep pin conf and pin mux values separate.

change log:
- v3: change order of patches to make sure the pinctrl-single.c patch
does not break anything without the dts patches

- v2: remove outer parentheses from AM33XX_PADCONF macro as it causes a
compile error in dtc. I had added it per suggestion from checkpatch
about having parentheses around complex values.

Drew Fustini (3):
pinctrl: single: parse #pinctrl-cells = 2
ARM: dts: change AM33XX_PADCONF macro separate conf and mux
ARM: dts: am33xx-l4: change #pinctrl-cells from 1 to 2

arch/arm/boot/dts/am33xx-l4.dtsi | 2 +-
drivers/pinctrl/pinctrl-single.c | 11 +++++++++--
include/dt-bindings/pinctrl/omap.h | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)

--
2.25.1


2020-06-22 17:34:56

by Drew Fustini

[permalink] [raw]
Subject: [PATCH v3 2/3] ARM: dts: change AM33XX_PADCONF macro separate conf and mux

AM33XX_PADCONF macro is modified to keep pin conf and pin mux separate.

This requires #pinctrl-cells = 2 in am33xx-l4.dtsi

pinctrl-single.c but also be changed to support "pinctrl-single,pins"
with 3 arguments (offset, conf, mux)

Signed-off-by: Drew Fustini <[email protected]>
---
include/dt-bindings/pinctrl/omap.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/dt-bindings/pinctrl/omap.h b/include/dt-bindings/pinctrl/omap.h
index 625718042413..2d2a8c737822 100644
--- a/include/dt-bindings/pinctrl/omap.h
+++ b/include/dt-bindings/pinctrl/omap.h
@@ -65,7 +65,7 @@
#define DM814X_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
#define DM816X_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
#define AM33XX_IOPAD(pa, val) OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
-#define AM33XX_PADCONF(pa, dir, mux) OMAP_IOPAD_OFFSET((pa), 0x0800) ((dir) | (mux))
+#define AM33XX_PADCONF(pa, conf, mux) OMAP_IOPAD_OFFSET((pa), 0x0800) (conf) (mux)

/*
* Macros to allow using the offset from the padconf physical address
--
2.25.1

2020-06-22 17:35:09

by Drew Fustini

[permalink] [raw]
Subject: [PATCH v3 3/3] ARM: dts: am33xx-l4: change #pinctrl-cells from 1 to 2

This requires AM33XX_PADCONF macro in omap.h to be modified to keep pin
conf and pin mux values separate.

pinctrl-single.c must also be changed to support "pinctrl-single,pins"
with 3 arguments (offset, conf, mux).

Signed-off-by: Drew Fustini <[email protected]>
---
arch/arm/boot/dts/am33xx-l4.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/am33xx-l4.dtsi b/arch/arm/boot/dts/am33xx-l4.dtsi
index 7ff11d6bf0f2..dafd6e8b42a1 100644
--- a/arch/arm/boot/dts/am33xx-l4.dtsi
+++ b/arch/arm/boot/dts/am33xx-l4.dtsi
@@ -278,7 +278,7 @@ scm: scm@0 {
am33xx_pinmux: pinmux@800 {
compatible = "pinctrl-single";
reg = <0x800 0x238>;
- #pinctrl-cells = <1>;
+ #pinctrl-cells = <2>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x7f>;
};
--
2.25.1

2020-06-22 17:36:27

by Drew Fustini

[permalink] [raw]
Subject: [PATCH v3 1/3] pinctrl: single: parse #pinctrl-cells = 2

If "pinctrl-single,pins" has 3 arguments (offset, conf, mux) then
pcs_parse_one_pinctrl_entry() does an OR operation on to get the
value to store in the register.

Signed-off-by: Drew Fustini <[email protected]>
---
drivers/pinctrl/pinctrl-single.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index a9d511982780..17b32cafe5f0 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -1017,10 +1017,17 @@ static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
break;
}

- /* Index plus one value cell */
offset = pinctrl_spec.args[0];
vals[found].reg = pcs->base + offset;
- vals[found].val = pinctrl_spec.args[1];
+
+ switch (pinctrl_spec.args_count) {
+ case 2:
+ vals[found].val = pinctrl_spec.args[1];
+ break;
+ case 3:
+ vals[found].val = (pinctrl_spec.args[1] | pinctrl_spec.args[2]);
+ break;
+ }

dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n",
pinctrl_spec.np, offset, pinctrl_spec.args[1]);
--
2.25.1

2020-06-29 19:01:09

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] pinctrl: single: support #pinctrl-cells = 2

* Drew Fustini <[email protected]> [200629 12:29]:
> Hi Tony - do you think this series is useful as-is?
>
> Or do you want to see some usage of the seperate conf and mux values
> first?

Hmm to me it seems you should squash patches 2 and 3 together as
otherwise git bisect will fail to boot probably at patch 2.

Regards,

Tony

2020-06-29 21:14:21

by Drew Fustini

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] pinctrl: single: support #pinctrl-cells = 2

On Mon, Jun 22, 2020 at 07:29:48PM +0200, Drew Fustini wrote:
> Currently, pinctrl-single only allows #pinctrl-cells = 1.
>
> This series will allow pinctrl-single to also support #pinctrl-cells = 2
>
> If "pinctrl-single,pins" has 3 arguments (offset, conf, mux) then
> pcs_parse_one_pinctrl_entry() does an OR operation on to get the
> value to store in the register.
>
> To take advantage of #pinctrl-cells = 2, the AM33XX_PADCONF macro in
> omap.h is modified to keep pin conf and pin mux values separate.
>
> change log:
> - v3: change order of patches to make sure the pinctrl-single.c patch
> does not break anything without the dts patches
>
> - v2: remove outer parentheses from AM33XX_PADCONF macro as it causes a
> compile error in dtc. I had added it per suggestion from checkpatch
> about having parentheses around complex values.
>
> Drew Fustini (3):
> pinctrl: single: parse #pinctrl-cells = 2
> ARM: dts: change AM33XX_PADCONF macro separate conf and mux
> ARM: dts: am33xx-l4: change #pinctrl-cells from 1 to 2
>
> arch/arm/boot/dts/am33xx-l4.dtsi | 2 +-
> drivers/pinctrl/pinctrl-single.c | 11 +++++++++--
> include/dt-bindings/pinctrl/omap.h | 2 +-
> 3 files changed, 11 insertions(+), 4 deletions(-)
>
> --
> 2.25.1
>

Hi Tony - do you think this series is useful as-is?

Or do you want to see some usage of the seperate conf and mux values
first?

thanks,
drew