All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL
@ 2016-05-04 21:42 Fabio Estevam
  2016-05-04 21:42 ` [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction Fabio Estevam
  2016-05-04 21:51 ` [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Nicolin Chen
  0 siblings, 2 replies; 5+ messages in thread
From: Fabio Estevam @ 2016-05-04 21:42 UTC (permalink / raw)
  To: broonie; +Cc: nicoleotsuka, Fabio Estevam, alsa-devel, shawnguo, brain

From: Fabio Estevam <fabio.estevam@nxp.com>

MX6UL may need to configure the General Purpose Register 1 (GPR1), so
it is better to add a new compatible string to differentiate.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
---
Changes since v1:
- Newly introduced in this series.

 sound/soc/fsl/fsl_sai.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 0754df7..d8b673f 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -797,7 +797,8 @@ static int fsl_sai_probe(struct platform_device *pdev)
 
 	sai->pdev = pdev;
 
-	if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx6sx-sai"))
+	if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx6sx-sai") ||
+	    of_device_is_compatible(pdev->dev.of_node, "fsl,imx6ul-sai"))
 		sai->sai_on_imx = true;
 
 	sai->is_lsb_first = of_property_read_bool(np, "lsb-first");
@@ -898,6 +899,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
 static const struct of_device_id fsl_sai_ids[] = {
 	{ .compatible = "fsl,vf610-sai", },
 	{ .compatible = "fsl,imx6sx-sai", },
+	{ .compatible = "fsl,imx6ul-sai", },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, fsl_sai_ids);
-- 
1.9.1

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

* [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction
  2016-05-04 21:42 [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Fabio Estevam
@ 2016-05-04 21:42 ` Fabio Estevam
  2016-05-04 21:56   ` Nicolin Chen
  2016-05-04 21:51 ` [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Nicolin Chen
  1 sibling, 1 reply; 5+ messages in thread
From: Fabio Estevam @ 2016-05-04 21:42 UTC (permalink / raw)
  To: broonie; +Cc: nicoleotsuka, Fabio Estevam, alsa-devel, shawnguo, brain

From: Fabio Estevam <fabio.estevam@nxp.com>

On mx6ul the General Purpose Register 1 (GPR1) contains the following
bits for configuring the direction of the SAI MCLKs:
SAI1_MCLK_DIR, SAI2_MCLK_DIR, SAI3_MCLK_DIR

Introduce  the "fsl,sai-mclk-direction-output" optional property to allow
configuring the SAI_MCLK outputs.

Tested on a imx6ul-evk board.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
---
Changes since v1:
- Dropped unneeded gpr node.
- Change the property name to fsl,sai-mclk-direction-output. (Nicolin)
- Do a runtime check against fsl,imx6ul-sai. (Nicolin)
- Use macro instead of switch statement. (Nicolin)

 .../devicetree/bindings/sound/fsl-sai.txt          |  5 +++++
 include/linux/mfd/syscon/imx6q-iomuxc-gpr.h        |  6 ++++++
 sound/soc/fsl/fsl_sai.c                            | 22 ++++++++++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/fsl-sai.txt b/Documentation/devicetree/bindings/sound/fsl-sai.txt
index 044e5d7..bec3ae0 100644
--- a/Documentation/devicetree/bindings/sound/fsl-sai.txt
+++ b/Documentation/devicetree/bindings/sound/fsl-sai.txt
@@ -48,6 +48,11 @@ Required properties:
 			  receive data by following their own bit clocks and
 			  frame sync clocks separately.
 
+Optional properties (for mx6ul):
+
+  - fsl,sai-mclk-direction-output: This is a boolean property. If present,
+			 indicates that SAI will output the SAI MCLK clock.
+
 Note:
 - If both fsl,sai-asynchronous and fsl,sai-synchronous-rx are absent, the
   default synchronous mode (sync Rx with Tx) will be used, which means both
diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
index 238c8db..6835382 100644
--- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
@@ -447,5 +447,11 @@
 #define IMX6UL_GPR1_ENET2_CLK_OUTPUT		(0x1 << 18)
 #define IMX6UL_GPR1_ENET_CLK_DIR		(0x3 << 17)
 #define IMX6UL_GPR1_ENET_CLK_OUTPUT		(0x3 << 17)
+#define IMX6UL_GPR1_SAI1_MCLK_DIR		(0x1 << 19)
+#define IMX6UL_GPR1_SAI2_MCLK_DIR		(0x1 << 20)
+#define IMX6UL_GPR1_SAI3_MCLK_DIR		(0x1 << 21)
+#define IMX6UL_GPR1_SAI_MCLK_MASK		(0x7 << 19)
+#define MCLK_DIR(x) (x == 1 ? IMX6UL_GPR1_SAI1_MCLK_DIR : x == 2 ? \
+		     IMX6UL_GPR1_SAI2_MCLK_DIR : IMX6UL_GPR1_SAI3_MCLK_DIR)
 
 #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index d8b673f..506a5f8 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -21,6 +21,8 @@
 #include <sound/core.h>
 #include <sound/dmaengine_pcm.h>
 #include <sound/pcm_params.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
 
 #include "fsl_sai.h"
 #include "imx-pcm.h"
@@ -786,10 +788,12 @@ static int fsl_sai_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
 	struct fsl_sai *sai;
+	struct regmap *gpr;
 	struct resource *res;
 	void __iomem *base;
 	char tmp[8];
 	int irq, ret, i;
+	u32 index;
 
 	sai = devm_kzalloc(&pdev->dev, sizeof(*sai), GFP_KERNEL);
 	if (!sai)
@@ -878,6 +882,24 @@ static int fsl_sai_probe(struct platform_device *pdev)
 		fsl_sai_dai.symmetric_samplebits = 0;
 	}
 
+	if (of_find_property(np, "fsl,sai-mclk-direction-output", NULL) &&
+	    of_device_is_compatible(pdev->dev.of_node, "fsl,imx6ul-sai")) {
+		gpr = syscon_regmap_lookup_by_compatible("fsl,imx6ul-iomuxc-gpr");
+		if (IS_ERR(gpr)) {
+			dev_err(&pdev->dev, "cannot find iomuxc registers\n");
+			return PTR_ERR(gpr);
+		}
+
+		ret = of_property_read_u32(np, "sai-index", &index);
+		if (ret) {
+			dev_err(&pdev->dev, "could not read sai-index\n");
+			return ret;
+		}
+
+		regmap_update_bits(gpr, IOMUXC_GPR1, MCLK_DIR(index),
+				   MCLK_DIR(index));
+	}
+
 	sai->dma_params_rx.addr = res->start + FSL_SAI_RDR;
 	sai->dma_params_tx.addr = res->start + FSL_SAI_TDR;
 	sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX;
-- 
1.9.1

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

* Re: [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL
  2016-05-04 21:42 [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Fabio Estevam
  2016-05-04 21:42 ` [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction Fabio Estevam
@ 2016-05-04 21:51 ` Nicolin Chen
  1 sibling, 0 replies; 5+ messages in thread
From: Nicolin Chen @ 2016-05-04 21:51 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: Fabio Estevam, alsa-devel, broonie, shawnguo, brain

On Wed, May 04, 2016 at 06:42:51PM -0300, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> MX6UL may need to configure the General Purpose Register 1 (GPR1), so
> it is better to add a new compatible string to differentiate.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
> Changes since v1:
> - Newly introduced in this series.
> 
>  sound/soc/fsl/fsl_sai.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index 0754df7..d8b673f 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -797,7 +797,8 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  
>  	sai->pdev = pdev;
>  
> -	if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx6sx-sai"))
> +	if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx6sx-sai") ||
> +	    of_device_is_compatible(pdev->dev.of_node, "fsl,imx6ul-sai"))
>  		sai->sai_on_imx = true;
>  
>  	sai->is_lsb_first = of_property_read_bool(np, "lsb-first");
> @@ -898,6 +899,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  static const struct of_device_id fsl_sai_ids[] = {
>  	{ .compatible = "fsl,vf610-sai", },
>  	{ .compatible = "fsl,imx6sx-sai", },
> +	{ .compatible = "fsl,imx6ul-sai", },

We may need to update binding doc as well?

>  	{ /* sentinel */ }
>  };
>  MODULE_DEVICE_TABLE(of, fsl_sai_ids);
> -- 
> 1.9.1
> 

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

* Re: [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction
  2016-05-04 21:42 ` [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction Fabio Estevam
@ 2016-05-04 21:56   ` Nicolin Chen
  2016-05-04 22:24     ` Fabio Estevam
  0 siblings, 1 reply; 5+ messages in thread
From: Nicolin Chen @ 2016-05-04 21:56 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: Fabio Estevam, alsa-devel, broonie, shawnguo, brain

On Wed, May 04, 2016 at 06:42:52PM -0300, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> On mx6ul the General Purpose Register 1 (GPR1) contains the following
> bits for configuring the direction of the SAI MCLKs:
> SAI1_MCLK_DIR, SAI2_MCLK_DIR, SAI3_MCLK_DIR
> 
> Introduce  the "fsl,sai-mclk-direction-output" optional property to allow
> configuring the SAI_MCLK outputs.
> 
> Tested on a imx6ul-evk board.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
> Changes since v1:
> - Dropped unneeded gpr node.
> - Change the property name to fsl,sai-mclk-direction-output. (Nicolin)
> - Do a runtime check against fsl,imx6ul-sai. (Nicolin)
> - Use macro instead of switch statement. (Nicolin)
> 
>  .../devicetree/bindings/sound/fsl-sai.txt          |  5 +++++
>  include/linux/mfd/syscon/imx6q-iomuxc-gpr.h        |  6 ++++++
>  sound/soc/fsl/fsl_sai.c                            | 22 ++++++++++++++++++++++
>  3 files changed, 33 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/sound/fsl-sai.txt b/Documentation/devicetree/bindings/sound/fsl-sai.txt
> index 044e5d7..bec3ae0 100644
> --- a/Documentation/devicetree/bindings/sound/fsl-sai.txt
> +++ b/Documentation/devicetree/bindings/sound/fsl-sai.txt
> @@ -48,6 +48,11 @@ Required properties:
>  			  receive data by following their own bit clocks and
>  			  frame sync clocks separately.
>  
> +Optional properties (for mx6ul):
> +
> +  - fsl,sai-mclk-direction-output: This is a boolean property. If present,
> +			 indicates that SAI will output the SAI MCLK clock.
> +
>  Note:
>  - If both fsl,sai-asynchronous and fsl,sai-synchronous-rx are absent, the
>    default synchronous mode (sync Rx with Tx) will be used, which means both
> diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> index 238c8db..6835382 100644
> --- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> +++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
> @@ -447,5 +447,11 @@
>  #define IMX6UL_GPR1_ENET2_CLK_OUTPUT		(0x1 << 18)
>  #define IMX6UL_GPR1_ENET_CLK_DIR		(0x3 << 17)
>  #define IMX6UL_GPR1_ENET_CLK_OUTPUT		(0x3 << 17)
> +#define IMX6UL_GPR1_SAI1_MCLK_DIR		(0x1 << 19)
> +#define IMX6UL_GPR1_SAI2_MCLK_DIR		(0x1 << 20)
> +#define IMX6UL_GPR1_SAI3_MCLK_DIR		(0x1 << 21)
> +#define IMX6UL_GPR1_SAI_MCLK_MASK		(0x7 << 19)
> +#define MCLK_DIR(x) (x == 1 ? IMX6UL_GPR1_SAI1_MCLK_DIR : x == 2 ? \
> +		     IMX6UL_GPR1_SAI2_MCLK_DIR : IMX6UL_GPR1_SAI3_MCLK_DIR)
>  
>  #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index d8b673f..506a5f8 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -21,6 +21,8 @@
>  #include <sound/core.h>
>  #include <sound/dmaengine_pcm.h>
>  #include <sound/pcm_params.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
>  
>  #include "fsl_sai.h"
>  #include "imx-pcm.h"
> @@ -786,10 +788,12 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  {
>  	struct device_node *np = pdev->dev.of_node;
>  	struct fsl_sai *sai;
> +	struct regmap *gpr;
>  	struct resource *res;
>  	void __iomem *base;
>  	char tmp[8];
>  	int irq, ret, i;
> +	u32 index;
>  
>  	sai = devm_kzalloc(&pdev->dev, sizeof(*sai), GFP_KERNEL);
>  	if (!sai)
> @@ -878,6 +882,24 @@ static int fsl_sai_probe(struct platform_device *pdev)
>  		fsl_sai_dai.symmetric_samplebits = 0;
>  	}
>  
> +	if (of_find_property(np, "fsl,sai-mclk-direction-output", NULL) &&
> +	    of_device_is_compatible(pdev->dev.of_node, "fsl,imx6ul-sai")) {
> +		gpr = syscon_regmap_lookup_by_compatible("fsl,imx6ul-iomuxc-gpr");
> +		if (IS_ERR(gpr)) {
> +			dev_err(&pdev->dev, "cannot find iomuxc registers\n");
> +			return PTR_ERR(gpr);
> +		}
> +
> +		ret = of_property_read_u32(np, "sai-index", &index);

Do we need to add this to binding doc as well? Or will it be better
to use alias here? I am not sure though.

Thanks
Nicolin

> +		if (ret) {
> +			dev_err(&pdev->dev, "could not read sai-index\n");
> +			return ret;
> +		}
> +
> +		regmap_update_bits(gpr, IOMUXC_GPR1, MCLK_DIR(index),
> +				   MCLK_DIR(index));
> +	}
> +
>  	sai->dma_params_rx.addr = res->start + FSL_SAI_RDR;
>  	sai->dma_params_tx.addr = res->start + FSL_SAI_TDR;
>  	sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX;
> -- 
> 1.9.1
> 

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

* Re: [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction
  2016-05-04 21:56   ` Nicolin Chen
@ 2016-05-04 22:24     ` Fabio Estevam
  0 siblings, 0 replies; 5+ messages in thread
From: Fabio Estevam @ 2016-05-04 22:24 UTC (permalink / raw)
  To: Nicolin Chen
  Cc: Fabio Estevam, alsa-devel, Mark Brown, Shawn Guo, Petr Kulhavy

On Wed, May 4, 2016 at 6:56 PM, Nicolin Chen <nicoleotsuka@gmail.com> wrote:

> Do we need to add this to binding doc as well? Or will it be better
> to use alias here? I am not sure though.

Yes, using alias is better :-) Will use it in v3, thanks.

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

end of thread, other threads:[~2016-05-04 22:24 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-04 21:42 [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Fabio Estevam
2016-05-04 21:42 ` [PATCH v2 2/2] ASoC: fsl_sai: Allow setting the SAI MCLK direction Fabio Estevam
2016-05-04 21:56   ` Nicolin Chen
2016-05-04 22:24     ` Fabio Estevam
2016-05-04 21:51 ` [PATCH v2 1/2] ASoC: fsl_sai: Introduce a compatible string for MX6UL Nicolin Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.