linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [RFC 0/9] ASoC: fsl-ssi: offline/online configuration and cleanups
@ 2013-11-15 15:49 Markus Pargmann
       [not found] ` <1384530584-31273-5-git-send-email-mpa@pengutronix.de>
       [not found] ` <1384530584-31273-10-git-send-email-mpa@pengutronix.de>
  0 siblings, 2 replies; 4+ messages in thread
From: Markus Pargmann @ 2013-11-15 15:49 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

This patch series fixes some fsl-ssi code that does not act exactly as it is
described in the reference manuals.

The reference manuals before imx50 do mention that some register bits,
including TDMAE/RDMAE, should not be changed while the SSI unit is enabled
(SSIEN). At the same time the SDMA unit has a undefined request handling if
there are DMA requests before the SDMA engine and its channel is configured.
The reference manual states that SSI DMA requests are sent as soon as the FIFO
and the DMAE bits are enabled. It does not mention a dependency to SCR's TE/RE
bit.

To avoid sending DMA requests before a channel is configured, we have to
seperate the fsl-ssi behavior into offline and online configuration. SoCs
before imx50 have to use offline configuration while later SoC versions can use
online reconfiguration.

This series adds support for online configuration and cleans up the
configuration register code especially in fsl_ssi_trigger. At the end we have a
seperation between enable/disable logic and the actual configuration register
values used to enable/disable TX/RX.

I tested this series on mx53.

Regards,

Markus

Markus Pargmann (9):
  ASoC: fsl-ssi: Drop AC97 debug register usage
  ASoC: fsl-ssi: Move ac97 specific setup to seperate function
  ASoC: fsl-ssi: Move sysfs stats to debugfs
  ASoC: fsl-ssi: Add imx50-ssi and of_device_id matching
  ASoC: fsl-ssi: Add offline_config flag
  ASoC: fsl-ssi: Add configuration helper functions
  ASoC: fsl-ssi: Move RX/TX configuration to seperate functions
  ASoC: fsl-ssi: Drop ac97 specific trigger function
  ARM: DTS: imx5* imx6*, use imx50-ssi

 arch/arm/boot/dts/imx51.dtsi   |   6 +-
 arch/arm/boot/dts/imx53.dtsi   |   6 +-
 arch/arm/boot/dts/imx6qdl.dtsi |   6 +-
 arch/arm/boot/dts/imx6sl.dtsi  |   6 +-
 sound/soc/fsl/fsl_ssi.c        | 580 ++++++++++++++++++++++++++---------------
 5 files changed, 389 insertions(+), 215 deletions(-)

-- 
1.8.4.2

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

* [RFC 4/9] ASoC: fsl-ssi: Add imx50-ssi and of_device_id matching
       [not found] ` <1384530584-31273-5-git-send-email-mpa@pengutronix.de>
@ 2013-11-18  1:38   ` Shawn Guo
  0 siblings, 0 replies; 4+ messages in thread
From: Shawn Guo @ 2013-11-18  1:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Nov 15, 2013 at 04:49:39PM +0100, Markus Pargmann wrote:
> @@ -190,6 +190,20 @@ struct fsl_ssi_private {
>  	char name[1];
>  };
>  
> +enum fsl_ssi_type {
> +	FSL_SSI_MCP8610,
> +	FSL_SSI_MX21,
> +	FSL_SSI_MX50,
> +};
> +
> +static const struct of_device_id fsl_ssi_ids[] = {
> +	{ .compatible = "fsl,mpc8610-ssi", .data = (void *) FSL_SSI_MCP8610},
> +	{ .compatible = "fsl,imx21-ssi", .data = (void *) FSL_SSI_MX21},
> +	{ .compatible = "fsl,imx50-ssi", .data = (void *) FSL_SSI_MX50},

As a good practice, please sort it from the specific to the generic.
That said, "fsl,imx50-ssi" should be put before "fsl,imx21-ssi".

Shawn

> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, fsl_ssi_ids);

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

* [RFC 9/9] ARM: DTS: imx5* imx6*, use imx50-ssi
       [not found] ` <1384530584-31273-10-git-send-email-mpa@pengutronix.de>
@ 2013-11-18  2:02   ` Shawn Guo
  2013-11-18 13:42     ` Markus Pargmann
  0 siblings, 1 reply; 4+ messages in thread
From: Shawn Guo @ 2013-11-18  2:02 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Nov 15, 2013 at 04:49:44PM +0100, Markus Pargmann wrote:
> imx50-ssi and imx21-ssi are different IPs. imx50-ssi supports online
> reconfiguration and needs this for correct interaction with SDMA. Move
> from imx21-ssi to imx50-ssi for all imx5/imx6 SoCs.
> 
> Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
> ---
>  arch/arm/boot/dts/imx51.dtsi   | 6 +++---
>  arch/arm/boot/dts/imx53.dtsi   | 6 +++---
>  arch/arm/boot/dts/imx6qdl.dtsi | 6 +++---
>  arch/arm/boot/dts/imx6sl.dtsi  | 6 +++---
>  4 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
> index 54cee65..22d4dbe 100644
> --- a/arch/arm/boot/dts/imx51.dtsi
> +++ b/arch/arm/boot/dts/imx51.dtsi
> @@ -150,7 +150,7 @@
>  				};
>  
>  				ssi2: ssi at 70014000 {
> -					compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
> +					compatible = "fsl,imx51-ssi", "fsl,imx50-ssi";

Instead of replacing "fsl,imx21-ssi" with "fsl,imx50-ssi", we may want
to just add "fsl,imx50-ssi" in the middle to maintain the compatible
history.  Note, it only works with the change I suggested on
of_device_id table order.  The bonus point of doing so is that we will
not have git bisect issue to worry about with merging this patch and
others in the series via different tree.

Shawn

>  					reg = <0x70014000 0x4000>;
>  					interrupts = <30>;
>  					clocks = <&clks 49>;
> @@ -427,7 +427,7 @@
>  			};
>  
>  			ssi1: ssi at 83fcc000 {
> -				compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
> +				compatible = "fsl,imx51-ssi", "fsl,imx50-ssi";
>  				reg = <0x83fcc000 0x4000>;
>  				interrupts = <29>;
>  				clocks = <&clks 48>;
> @@ -479,7 +479,7 @@
>  			};
>  
>  			ssi3: ssi at 83fe8000 {
> -				compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
> +				compatible = "fsl,imx51-ssi", "fsl,imx50-ssi";
>  				reg = <0x83fe8000 0x4000>;
>  				interrupts = <96>;
>  				clocks = <&clks 50>;
> diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
> index 4307e80..f1077f2 100644
> --- a/arch/arm/boot/dts/imx53.dtsi
> +++ b/arch/arm/boot/dts/imx53.dtsi
> @@ -149,7 +149,7 @@
>  				};
>  
>  				ssi2: ssi at 50014000 {
> -					compatible = "fsl,imx53-ssi", "fsl,imx21-ssi";
> +					compatible = "fsl,imx53-ssi", "fsl,imx50-ssi";
>  					reg = <0x50014000 0x4000>;
>  					interrupts = <30>;
>  					clocks = <&clks 49>;
> @@ -1049,7 +1049,7 @@
>  			};
>  
>  			ssi1: ssi at 63fcc000 {
> -				compatible = "fsl,imx53-ssi", "fsl,imx21-ssi";
> +				compatible = "fsl,imx53-ssi", "fsl,imx50-ssi";
>  				reg = <0x63fcc000 0x4000>;
>  				interrupts = <29>;
>  				clocks = <&clks 48>;
> @@ -1076,7 +1076,7 @@
>  			};
>  
>  			ssi3: ssi at 63fe8000 {
> -				compatible = "fsl,imx53-ssi", "fsl,imx21-ssi";
> +				compatible = "fsl,imx53-ssi", "fsl,imx50-ssi";
>  				reg = <0x63fe8000 0x4000>;
>  				interrupts = <96>;
>  				clocks = <&clks 50>;
> diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
> index ccd55c2..30d455e 100644
> --- a/arch/arm/boot/dts/imx6qdl.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl.dtsi
> @@ -201,7 +201,7 @@
>  				};
>  
>  				ssi1: ssi at 02028000 {
> -					compatible = "fsl,imx6q-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6q-ssi","fsl,imx50-ssi";
>  					reg = <0x02028000 0x4000>;
>  					interrupts = <0 46 0x04>;
>  					clocks = <&clks 178>;
> @@ -214,7 +214,7 @@
>  				};
>  
>  				ssi2: ssi at 0202c000 {
> -					compatible = "fsl,imx6q-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6q-ssi","fsl,imx50-ssi";
>  					reg = <0x0202c000 0x4000>;
>  					interrupts = <0 47 0x04>;
>  					clocks = <&clks 179>;
> @@ -227,7 +227,7 @@
>  				};
>  
>  				ssi3: ssi at 02030000 {
> -					compatible = "fsl,imx6q-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6q-ssi","fsl,imx50-ssi";
>  					reg = <0x02030000 0x4000>;
>  					interrupts = <0 48 0x04>;
>  					clocks = <&clks 180>;
> diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
> index c46651e..1b19319 100644
> --- a/arch/arm/boot/dts/imx6sl.dtsi
> +++ b/arch/arm/boot/dts/imx6sl.dtsi
> @@ -191,7 +191,7 @@
>  				};
>  
>  				ssi1: ssi at 02028000 {
> -					compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6sl-ssi","fsl,imx50-ssi";
>  					reg = <0x02028000 0x4000>;
>  					interrupts = <0 46 0x04>;
>  					clocks = <&clks IMX6SL_CLK_SSI1>;
> @@ -203,7 +203,7 @@
>  				};
>  
>  				ssi2: ssi at 0202c000 {
> -					compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6sl-ssi","fsl,imx50-ssi";
>  					reg = <0x0202c000 0x4000>;
>  					interrupts = <0 47 0x04>;
>  					clocks = <&clks IMX6SL_CLK_SSI2>;
> @@ -215,7 +215,7 @@
>  				};
>  
>  				ssi3: ssi at 02030000 {
> -					compatible = "fsl,imx6sl-ssi","fsl,imx21-ssi";
> +					compatible = "fsl,imx6sl-ssi","fsl,imx50-ssi";
>  					reg = <0x02030000 0x4000>;
>  					interrupts = <0 48 0x04>;
>  					clocks = <&clks IMX6SL_CLK_SSI3>;
> -- 
> 1.8.4.2
> 

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

* [RFC 9/9] ARM: DTS: imx5* imx6*, use imx50-ssi
  2013-11-18  2:02   ` [RFC 9/9] ARM: DTS: imx5* imx6*, use imx50-ssi Shawn Guo
@ 2013-11-18 13:42     ` Markus Pargmann
  0 siblings, 0 replies; 4+ messages in thread
From: Markus Pargmann @ 2013-11-18 13:42 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Shawn,

On Mon, Nov 18, 2013 at 10:02:35AM +0800, Shawn Guo wrote:
> On Fri, Nov 15, 2013 at 04:49:44PM +0100, Markus Pargmann wrote:
> > imx50-ssi and imx21-ssi are different IPs. imx50-ssi supports online
> > reconfiguration and needs this for correct interaction with SDMA. Move
> > from imx21-ssi to imx50-ssi for all imx5/imx6 SoCs.
> > 
> > Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
> > ---
> >  arch/arm/boot/dts/imx51.dtsi   | 6 +++---
> >  arch/arm/boot/dts/imx53.dtsi   | 6 +++---
> >  arch/arm/boot/dts/imx6qdl.dtsi | 6 +++---
> >  arch/arm/boot/dts/imx6sl.dtsi  | 6 +++---
> >  4 files changed, 12 insertions(+), 12 deletions(-)
> > 
> > diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
> > index 54cee65..22d4dbe 100644
> > --- a/arch/arm/boot/dts/imx51.dtsi
> > +++ b/arch/arm/boot/dts/imx51.dtsi
> > @@ -150,7 +150,7 @@
> >  				};
> >  
> >  				ssi2: ssi at 70014000 {
> > -					compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
> > +					compatible = "fsl,imx51-ssi", "fsl,imx50-ssi";
> 
> Instead of replacing "fsl,imx21-ssi" with "fsl,imx50-ssi", we may want
> to just add "fsl,imx50-ssi" in the middle to maintain the compatible
> history.  Note, it only works with the change I suggested on
> of_device_id table order.  The bonus point of doing so is that we will
> not have git bisect issue to worry about with merging this patch and
> others in the series via different tree.

Thanks, I changed the id table order and added imx21-ssi as compatible
again.

Regards,

Markus


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

end of thread, other threads:[~2013-11-18 13:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-15 15:49 [RFC 0/9] ASoC: fsl-ssi: offline/online configuration and cleanups Markus Pargmann
     [not found] ` <1384530584-31273-5-git-send-email-mpa@pengutronix.de>
2013-11-18  1:38   ` [RFC 4/9] ASoC: fsl-ssi: Add imx50-ssi and of_device_id matching Shawn Guo
     [not found] ` <1384530584-31273-10-git-send-email-mpa@pengutronix.de>
2013-11-18  2:02   ` [RFC 9/9] ARM: DTS: imx5* imx6*, use imx50-ssi Shawn Guo
2013-11-18 13:42     ` Markus Pargmann

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).