[alsa-devel] [PATCH 0/2 v2] at91/ssc: fixes on ASoC tree for 3.8
Hi Mark, Olof, Arnd,
This series goes on top of Linus' v3.8-rc3 and fixes an error that we have while compiling DTBs for AT91: ERROR (phandle_references): Reference to non-existent node or label "pinctrl_ssc0_tx"
ERROR: Input tree has errors, aborting (use -f to force output) make[3]: *** [arch/arm/boot/dts/at91sam9g20ek.dtb] Error 2
I have included pending material that is dealing with SSC and pinctrl. The pinctrl part can be merged more easily now that the big pinctrl update for AT91 has been merged upstream.
This material was designed to enter Mark's fixes queue, but as discussed with Olof, we can imagine merging everything through arm-soc or split the series (of 2 patches) and let them progress upstream separated (option that I do not like even if I know that the consequences are not so dramatic). So please, Olof, if you feel confortable with this series, tell us what you prefer and we will make our best to make this material go forward...
Thanks for your help, best regards,
v2: - remove the fix for typo in SSC status property: already merged upstream
Bo Shen (2): ARM: at91/dts: add pinctrl support for SSC peripheral ASoC: atmel-ssc: add pinctrl selection to driver
arch/arm/boot/dts/at91sam9260.dtsi | 18 ++++++++++++++++++ arch/arm/boot/dts/at91sam9263.dtsi | 36 ++++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9g45.dtsi | 36 ++++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9n12.dtsi | 26 ++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9x5.dtsi | 32 +++++++++++++++++++++++++------- drivers/misc/atmel-ssc.c | 8 ++++++++ 6 files changed, 149 insertions(+), 7 deletions(-)
From: Bo Shen voice.shen@atmel.com
Add pinctrl support for SSC on AT91 dtsi files.
Signed-off-by: Bo Shen voice.shen@atmel.com [nicolas.ferre@atmel.com: split dtsi and driver changes] Signed-off-by: Nicolas Ferre nicolas.ferre@atmel.com --- arch/arm/boot/dts/at91sam9260.dtsi | 18 ++++++++++++++++++ arch/arm/boot/dts/at91sam9263.dtsi | 36 ++++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9g45.dtsi | 36 ++++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9n12.dtsi | 26 ++++++++++++++++++++++++++ arch/arm/boot/dts/at91sam9x5.dtsi | 32 +++++++++++++++++++++++++------- 5 files changed, 141 insertions(+), 7 deletions(-)
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index 68bccf4..cb7bcc5 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi @@ -306,6 +306,22 @@ }; };
+ ssc0 { + pinctrl_ssc0_tx: ssc0_tx-0 { + atmel,pins = + <1 16 0x1 0x0 /* PB16 periph A */ + 1 17 0x1 0x0 /* PB17 periph A */ + 1 18 0x1 0x0>; /* PB18 periph A */ + }; + + pinctrl_ssc0_rx: ssc0_rx-0 { + atmel,pins = + <1 19 0x1 0x0 /* PB19 periph A */ + 1 20 0x1 0x0 /* PB20 periph A */ + 1 21 0x1 0x0>; /* PB21 periph A */ + }; + }; + pioA: gpio@fffff400 { compatible = "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; @@ -450,6 +466,8 @@ compatible = "atmel,at91rm9200-ssc"; reg = <0xfffbc000 0x4000>; interrupts = <14 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; status = "disabled"; };
diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index 32ec62c..271d4de 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi @@ -271,6 +271,38 @@ }; };
+ ssc0 { + pinctrl_ssc0_tx: ssc0_tx-0 { + atmel,pins = + <1 0 0x2 0x0 /* PB0 periph B */ + 1 1 0x2 0x0 /* PB1 periph B */ + 1 2 0x2 0x0>; /* PB2 periph B */ + }; + + pinctrl_ssc0_rx: ssc0_rx-0 { + atmel,pins = + <1 3 0x2 0x0 /* PB3 periph B */ + 1 4 0x2 0x0 /* PB4 periph B */ + 1 5 0x2 0x0>; /* PB5 periph B */ + }; + }; + + ssc1 { + pinctrl_ssc1_tx: ssc1_tx-0 { + atmel,pins = + <1 6 0x1 0x0 /* PB6 periph A */ + 1 7 0x1 0x0 /* PB7 periph A */ + 1 8 0x1 0x0>; /* PB8 periph A */ + }; + + pinctrl_ssc1_rx: ssc1_rx-0 { + atmel,pins = + <1 9 0x1 0x0 /* PB9 periph A */ + 1 10 0x1 0x0 /* PB10 periph A */ + 1 11 0x1 0x0>; /* PB11 periph A */ + }; + }; + pioA: gpio@fffff200 { compatible = "atmel,at91rm9200-gpio"; reg = <0xfffff200 0x200>; @@ -368,6 +400,8 @@ compatible = "atmel,at91rm9200-ssc"; reg = <0xfff98000 0x4000>; interrupts = <16 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; status = "disabled"; };
@@ -375,6 +409,8 @@ compatible = "atmel,at91rm9200-ssc"; reg = <0xfff9c000 0x4000>; interrupts = <17 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc1_tx &pinctrl_ssc1_rx>; status = "disabled"; };
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 231858f..6b1d4ca 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi @@ -290,6 +290,38 @@ }; };
+ ssc0 { + pinctrl_ssc0_tx: ssc0_tx-0 { + atmel,pins = + <3 0 0x1 0x0 /* PD0 periph A */ + 3 1 0x1 0x0 /* PD1 periph A */ + 3 2 0x1 0x0>; /* PD2 periph A */ + }; + + pinctrl_ssc0_rx: ssc0_rx-0 { + atmel,pins = + <3 3 0x1 0x0 /* PD3 periph A */ + 3 4 0x1 0x0 /* PD4 periph A */ + 3 5 0x1 0x0>; /* PD5 periph A */ + }; + }; + + ssc1 { + pinctrl_ssc1_tx: ssc1_tx-0 { + atmel,pins = + <3 10 0x1 0x0 /* PD10 periph A */ + 3 11 0x1 0x0 /* PD11 periph A */ + 3 12 0x1 0x0>; /* PD12 periph A */ + }; + + pinctrl_ssc1_rx: ssc1_rx-0 { + atmel,pins = + <3 13 0x1 0x0 /* PD13 periph A */ + 3 14 0x1 0x0 /* PD14 periph A */ + 3 15 0x1 0x0>; /* PD15 periph A */ + }; + }; + pioA: gpio@fffff200 { compatible = "atmel,at91rm9200-gpio"; reg = <0xfffff200 0x200>; @@ -425,6 +457,8 @@ compatible = "atmel,at91sam9g45-ssc"; reg = <0xfff9c000 0x4000>; interrupts = <16 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; status = "disabled"; };
@@ -432,6 +466,8 @@ compatible = "atmel,at91sam9g45-ssc"; reg = <0xfffa0000 0x4000>; interrupts = <17 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc1_tx &pinctrl_ssc1_rx>; status = "disabled"; };
diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index e9efb34..80e29c6 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi @@ -28,6 +28,7 @@ tcb1 = &tcb1; i2c0 = &i2c0; i2c1 = &i2c1; + ssc0 = &ssc0; }; cpus { cpu@0 { @@ -244,6 +245,22 @@ }; };
+ ssc0 { + pinctrl_ssc0_tx: ssc0_tx-0 { + atmel,pins = + <0 24 0x2 0x0 /* PA24 periph B */ + 0 25 0x2 0x0 /* PA25 periph B */ + 0 26 0x2 0x0>; /* PA26 periph B */ + }; + + pinctrl_ssc0_rx: ssc0_rx-0 { + atmel,pins = + <0 27 0x2 0x0 /* PA27 periph B */ + 0 28 0x2 0x0 /* PA28 periph B */ + 0 29 0x2 0x0>; /* PA29 periph B */ + }; + }; + pioA: gpio@fffff400 { compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; @@ -294,6 +311,15 @@ status = "disabled"; };
+ ssc0: ssc@f0010000 { + compatible = "atmel,at91sam9g45-ssc"; + reg = <0xf0010000 0x4000>; + interrupts = <28 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; + status = "disabled"; + }; + usart0: serial@f801c000 { compatible = "atmel,at91sam9260-usart"; reg = <0xf801c000 0x4000>; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 40ac3a4..3a47cf9 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -88,13 +88,6 @@ interrupts = <1 4 7>; };
- ssc0: ssc@f0010000 { - compatible = "atmel,at91sam9g45-ssc"; - reg = <0xf0010000 0x4000>; - interrupts = <28 4 5>; - status = "disabled"; - }; - tcb0: timer@f8008000 { compatible = "atmel,at91sam9x5-tcb"; reg = <0xf8008000 0x100>; @@ -290,6 +283,22 @@ }; };
+ ssc0 { + pinctrl_ssc0_tx: ssc0_tx-0 { + atmel,pins = + <0 24 0x2 0x0 /* PA24 periph B */ + 0 25 0x2 0x0 /* PA25 periph B */ + 0 26 0x2 0x0>; /* PA26 periph B */ + }; + + pinctrl_ssc0_rx: ssc0_rx-0 { + atmel,pins = + <0 27 0x2 0x0 /* PA27 periph B */ + 0 28 0x2 0x0 /* PA28 periph B */ + 0 29 0x2 0x0>; /* PA29 periph B */ + }; + }; + pioA: gpio@fffff400 { compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; @@ -333,6 +342,15 @@ }; };
+ ssc0: ssc@f0010000 { + compatible = "atmel,at91sam9g45-ssc"; + reg = <0xf0010000 0x4000>; + interrupts = <28 4 5>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; + status = "disabled"; + }; + mmc0: mmc@f0008000 { compatible = "atmel,hsmci"; reg = <0xf0008000 0x600>;
From: Bo Shen voice.shen@atmel.com
Add default pinctrl selection to atmel-ssc driver. The pinctrl is mandatory.
Signed-off-by: Bo Shen voice.shen@atmel.com [nicolas.ferre@atmel.com: split dtsi and driver changes] Signed-off-by: Nicolas Ferre nicolas.ferre@atmel.com --- drivers/misc/atmel-ssc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c index 158da5a..3c09cbb 100644 --- a/drivers/misc/atmel-ssc.c +++ b/drivers/misc/atmel-ssc.c @@ -19,6 +19,7 @@ #include <linux/module.h>
#include <linux/of.h> +#include <linux/pinctrl/consumer.h>
/* Serialize access to ssc_list and user count */ static DEFINE_SPINLOCK(user_lock); @@ -131,6 +132,13 @@ static int ssc_probe(struct platform_device *pdev) struct resource *regs; struct ssc_device *ssc; const struct atmel_ssc_platform_data *plat_dat; + struct pinctrl *pinctrl; + + pinctrl = devm_pinctrl_get_select_default(&pdev->dev); + if (IS_ERR(pinctrl)) { + dev_err(&pdev->dev, "Failed to request pinctrl\n"); + return PTR_ERR(pinctrl); + }
ssc = devm_kzalloc(&pdev->dev, sizeof(struct ssc_device), GFP_KERNEL); if (!ssc) {
Hi,
On Fri, Jan 11, 2013 at 6:08 AM, Nicolas Ferre nicolas.ferre@atmel.com wrote:
This material was designed to enter Mark's fixes queue, but as discussed with Olof, we can imagine merging everything through arm-soc or split the series (of 2 patches) and let them progress upstream separated (option that I do not like even if I know that the consequences are not so dramatic). So please, Olof, if you feel confortable with this series, tell us what you prefer and we will make our best to make this material go forward...
You're setting yourself up for awkward merges. The driver change is strongly dependent on the device tree change by failing probe unless the device tree update is there, while before this patch, it still worked.
If you instead use the dts update if it's there, you can merge the two through independent paths, and later make it mandatory to use the pinctrl specification. That way you avoid these complicated merge scenarios where you have to send your platform code through a subsystem tree instead.
But to be honest, I don't think this is a fix, it's a feature that you just didn't include in time for the merge window. I don't really see them as appropriate 3.8 material at this point.
So, nack on this series. Please make the driver change non-dependent on the new dtsi contents, and merge that through the ASoC tree. Then the dtsi update can go through arm-soc, and later on you can make it mandatory.
-Olof
On Fri, Jan 11, 2013 at 10:52:19AM -0800, Olof Johansson wrote:
On Fri, Jan 11, 2013 at 6:08 AM, Nicolas Ferre nicolas.ferre@atmel.com wrote:
This material was designed to enter Mark's fixes queue, but as discussed with Olof, we can imagine merging everything through arm-soc or split the series (of 2 patches) and let them progress upstream separated (option that I do not like even if I know that the consequences are not so dramatic). So please, Olof, if you feel confortable with this series, tell us what you prefer and we will make our best to make this material go forward...
You're setting yourself up for awkward merges. The driver change is strongly dependent on the device tree change by failing probe unless the device tree update is there, while before this patch, it still worked.
This is partly my fault for getting grumpy about adding the bolier plate code without error checking - overall Linus' change to do the get in the core seems like the most sane approach here.
But to be honest, I don't think this is a fix, it's a feature that you just didn't include in time for the merge window. I don't really see them as appropriate 3.8 material at this point.
Jean-Christophe has been most insistent that pinctrl support is now manadatory for all AT91 systems using device tree. Unfortunately pinctrl support for AT91 only came in during the merge window and it seems like it's sadly been impossible to do what seemd like the obvious thing and add the pinctrl bindings to the DT prior to the merge down so now we've got this mess. I believe the way the pinctrl conversion was done renders the audio driver non-functional without this series.
So, nack on this series. Please make the driver change non-dependent on the new dtsi contents, and merge that through the ASoC tree. Then the dtsi update can go through arm-soc, and later on you can make it mandatory.
Like I say I'm not thrilled about ignoring the return code TBH, nor am I thrilled with the way this has been handled overall. That said, the current series does seem like the best of a bad job - as I understand it we need something like this in v3.8 to make the driver functional.
On Fri, Jan 11, 2013 at 07:39:49PM +0000, Mark Brown wrote:
On Fri, Jan 11, 2013 at 10:52:19AM -0800, Olof Johansson wrote:
On Fri, Jan 11, 2013 at 6:08 AM, Nicolas Ferre nicolas.ferre@atmel.com wrote:
This material was designed to enter Mark's fixes queue, but as discussed with Olof, we can imagine merging everything through arm-soc or split the series (of 2 patches) and let them progress upstream separated (option that I do not like even if I know that the consequences are not so dramatic). So please, Olof, if you feel confortable with this series, tell us what you prefer and we will make our best to make this material go forward...
You're setting yourself up for awkward merges. The driver change is strongly dependent on the device tree change by failing probe unless the device tree update is there, while before this patch, it still worked.
This is partly my fault for getting grumpy about adding the bolier plate code without error checking - overall Linus' change to do the get in the core seems like the most sane approach here.
But to be honest, I don't think this is a fix, it's a feature that you just didn't include in time for the merge window. I don't really see them as appropriate 3.8 material at this point.
Jean-Christophe has been most insistent that pinctrl support is now manadatory for all AT91 systems using device tree.
That's a noble goal but enforcing it early gives everyone a lot of pain, and quite honestly doesn't make sense. During transition it's better to be lenient and allow both old and new methods (without breakage), unless it causes significant extra churn.
Unfortunately pinctrl support for AT91 only came in during the merge window and it seems like it's sadly been impossible to do what seemd like the obvious thing and add the pinctrl bindings to the DT prior to the merge down so now we've got this mess. I believe the way the pinctrl conversion was done renders the audio driver non-functional without this series.
The problem is that at91 tries to do too much in a single release, and then do nothing in several releases after. If there was a steadier trickle of code coming in, then these kind of complex dependencies wouldn't show up all at once, and could be handled with much less overhead for everyone else involved. :(
So, nack on this series. Please make the driver change non-dependent on the new dtsi contents, and merge that through the ASoC tree. Then the dtsi update can go through arm-soc, and later on you can make it mandatory.
Like I say I'm not thrilled about ignoring the return code TBH, nor am I thrilled with the way this has been handled overall. That said, the current series does seem like the best of a bad job - as I understand it we need something like this in v3.8 to make the driver functional.
To be honest, if Atmel can't figure out how to merge a complete feature without causing intentional regressions during the merge window, and plan on brokenness to be fixed as late as in -rc4, then they deserve to have a broken platform. Unfortunately the victim of that is end users, and we don't want to leave them hanging. This really can't become a trend though.
Sigh. Feel free to add:
Reluctantly-acked-by: Olof Johansson olof@lixom.net
to the patches when you apply them (based on IRC discussion, might as well take both through ASoC).
-Olof
On 11:53 Fri 11 Jan , Olof Johansson wrote:
On Fri, Jan 11, 2013 at 07:39:49PM +0000, Mark Brown wrote:
On Fri, Jan 11, 2013 at 10:52:19AM -0800, Olof Johansson wrote:
On Fri, Jan 11, 2013 at 6:08 AM, Nicolas Ferre nicolas.ferre@atmel.com wrote:
This material was designed to enter Mark's fixes queue, but as discussed with Olof, we can imagine merging everything through arm-soc or split the series (of 2 patches) and let them progress upstream separated (option that I do not like even if I know that the consequences are not so dramatic). So please, Olof, if you feel confortable with this series, tell us what you prefer and we will make our best to make this material go forward...
You're setting yourself up for awkward merges. The driver change is strongly dependent on the device tree change by failing probe unless the device tree update is there, while before this patch, it still worked.
This is partly my fault for getting grumpy about adding the bolier plate code without error checking - overall Linus' change to do the get in the core seems like the most sane approach here.
But to be honest, I don't think this is a fix, it's a feature that you just didn't include in time for the merge window. I don't really see them as appropriate 3.8 material at this point.
Jean-Christophe has been most insistent that pinctrl support is now manadatory for all AT91 systems using device tree.
That's a noble goal but enforcing it early gives everyone a lot of pain, and quite honestly doesn't make sense. During transition it's better to be lenient and allow both old and new methods (without breakage), unless it causes significant extra churn.
except here we can not as the same ip manage gpio & pinctrl
so no choice we need to do the switch at once
and that's why we wait 1 more release to do the switch so erveryone can play with it before
Best Regards, J.
On Fri, Jan 11, 2013 at 03:08:29PM +0100, Nicolas Ferre wrote:
Hi Mark, Olof, Arnd,
This series goes on top of Linus' v3.8-rc3 and fixes an error that we have while compiling DTBs for AT91: ERROR (phandle_references): Reference to non-existent node or label "pinctrl_ssc0_tx"
Applied both.
participants (4)
-
Jean-Christophe PLAGNIOL-VILLARD
-
Mark Brown
-
Nicolas Ferre
-
Olof Johansson