[alsa-devel] [PATCH 0/2] ASoC: fsl: make snd-soc-imx-sgtl5000 driver useable on i.MX6UL
This patchset adds support for the i.MX6UL SoC to the imx-sgtl5000 sound driver. The first patch makes the audmux setup optional for the driver, since i.MX6UL does not have this unit. The second patch selects the SAI interface rather than the SSI interface for the i.MX6UL SoC.
A patch to make the corresponding DTB changes has been sent separately.
i.MX6UL does not have the audio multiplexer (AUDMUX) like e.g. i.MX6Q, but apart from that can use the same audio driver. Make audmux optional for the imx-sgtl5000 driver, so it can be used on i.MX6UL too. Also i.MX6UL requires use of the SAI interface rather than SSI.
Signed-off-by: Lothar Waßmann LW@KARO-electronics.de --- sound/soc/fsl/imx-sgtl5000.c | 70 +++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 34 deletions(-)
diff --git a/sound/soc/fsl/imx-sgtl5000.c b/sound/soc/fsl/imx-sgtl5000.c index b99e0b5..7cefb40 100644 --- a/sound/soc/fsl/imx-sgtl5000.c +++ b/sound/soc/fsl/imx-sgtl5000.c @@ -65,40 +65,42 @@ static int imx_sgtl5000_probe(struct platform_device *pdev) int int_port, ext_port; int ret;
- ret = of_property_read_u32(np, "mux-int-port", &int_port); - if (ret) { - dev_err(&pdev->dev, "mux-int-port missing or invalid\n"); - return ret; - } - ret = of_property_read_u32(np, "mux-ext-port", &ext_port); - if (ret) { - dev_err(&pdev->dev, "mux-ext-port missing or invalid\n"); - return ret; - } - - /* - * The port numbering in the hardware manual starts at 1, while - * the audmux API expects it starts at 0. - */ - int_port--; - ext_port--; - ret = imx_audmux_v2_configure_port(int_port, - IMX_AUDMUX_V2_PTCR_SYN | - IMX_AUDMUX_V2_PTCR_TFSEL(ext_port) | - IMX_AUDMUX_V2_PTCR_TCSEL(ext_port) | - IMX_AUDMUX_V2_PTCR_TFSDIR | - IMX_AUDMUX_V2_PTCR_TCLKDIR, - IMX_AUDMUX_V2_PDCR_RXDSEL(ext_port)); - if (ret) { - dev_err(&pdev->dev, "audmux internal port setup failed\n"); - return ret; - } - ret = imx_audmux_v2_configure_port(ext_port, - IMX_AUDMUX_V2_PTCR_SYN, - IMX_AUDMUX_V2_PDCR_RXDSEL(int_port)); - if (ret) { - dev_err(&pdev->dev, "audmux external port setup failed\n"); - return ret; + if (!of_property_read_bool(np, "fsl,no-audmux")) { + ret = of_property_read_u32(np, "mux-int-port", &int_port); + if (ret) { + dev_err(&pdev->dev, "mux-int-port missing or invalid\n"); + return ret; + } + ret = of_property_read_u32(np, "mux-ext-port", &ext_port); + if (ret) { + dev_err(&pdev->dev, "mux-ext-port missing or invalid\n"); + return ret; + } + + /* + * The port numbering in the hardware manual starts at 1, while + * the audmux API expects it starts at 0. + */ + int_port--; + ext_port--; + ret = imx_audmux_v2_configure_port(int_port, + IMX_AUDMUX_V2_PTCR_SYN | + IMX_AUDMUX_V2_PTCR_TFSEL(ext_port) | + IMX_AUDMUX_V2_PTCR_TCSEL(ext_port) | + IMX_AUDMUX_V2_PTCR_TFSDIR | + IMX_AUDMUX_V2_PTCR_TCLKDIR, + IMX_AUDMUX_V2_PDCR_RXDSEL(ext_port)); + if (ret) { + dev_err(&pdev->dev, "audmux internal port setup failed\n"); + return ret; + } + ret = imx_audmux_v2_configure_port(ext_port, + IMX_AUDMUX_V2_PTCR_SYN, + IMX_AUDMUX_V2_PDCR_RXDSEL(int_port)); + if (ret) { + dev_err(&pdev->dev, "audmux external port setup failed\n"); + return ret; + } }
ssi_np = of_parse_phandle(pdev->dev.of_node, "ssi-controller", 0);
i.MX6UL does not provide an SSI interface like the other i.MX6 SoCs, but only an SAI interface. Select the appropriate interface(s) depending on the enabled SoC types.
Signed-off-by: Lothar Waßmann LW@KARO-electronics.de --- sound/soc/fsl/Kconfig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig index 14dfdee..c128823 100644 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@ -258,7 +258,8 @@ config SND_SOC_IMX_SGTL5000 select SND_SOC_SGTL5000 select SND_SOC_IMX_PCM_DMA select SND_SOC_IMX_AUDMUX - select SND_SOC_FSL_SSI + select SND_SOC_FSL_SAI if SOC_IMX6UL + select SND_SOC_FSL_SSI if SOC_IMX6Q || SOC_IMX6SL || SOC_IMX6SX help Say Y if you want to add support for SoC audio on an i.MX board with a sgtl5000 codec.
Lothar Waßmann wrote:
- select SND_SOC_FSL_SSI
- select SND_SOC_FSL_SAI if SOC_IMX6UL
- select SND_SOC_FSL_SSI if SOC_IMX6Q || SOC_IMX6SL || SOC_IMX6SX
I don't think this is compatible with a multiarch kernel.
Hi,
Lothar Waßmann wrote:
- select SND_SOC_FSL_SSI
- select SND_SOC_FSL_SAI if SOC_IMX6UL
- select SND_SOC_FSL_SSI if SOC_IMX6Q || SOC_IMX6SL || SOC_IMX6SX
I don't think this is compatible with a multiarch kernel.
Why? If more than one of the IMX6 SoCs are selected, both interfaces may be selected at the same time without any harm.
Lothar Waßmann
Lothar Waßmann wrote:
Why? If more than one of the IMX6 SoCs are selected, both interfaces may be selected at the same time without any harm.
Oh, ok. I thought the point behind the patch was that you *souldn't* enable the the SSI driver on an i.MX6UL.
On Tue, Jan 12, 2016 at 4:13 PM, Lothar Waßmann LW@karo-electronics.de wrote:
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig index 14dfdee..c128823 100644 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@ -258,7 +258,8 @@ config SND_SOC_IMX_SGTL5000 select SND_SOC_SGTL5000 select SND_SOC_IMX_PCM_DMA select SND_SOC_IMX_AUDMUX
select SND_SOC_FSL_SSI
select SND_SOC_FSL_SAI if SOC_IMX6UL
select SND_SOC_FSL_SSI if SOC_IMX6Q || SOC_IMX6SL || SOC_IMX6SX
MX6SX has SSI and SAI interfaces.
Hi,
On Tue, Jan 12, 2016 at 4:13 PM, Lothar Waßmann LW@karo-electronics.de wrote:
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig index 14dfdee..c128823 100644 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@ -258,7 +258,8 @@ config SND_SOC_IMX_SGTL5000 select SND_SOC_SGTL5000 select SND_SOC_IMX_PCM_DMA select SND_SOC_IMX_AUDMUX
select SND_SOC_FSL_SSI
select SND_SOC_FSL_SAI if SOC_IMX6UL
select SND_SOC_FSL_SSI if SOC_IMX6Q || SOC_IMX6SL || SOC_IMX6SX
MX6SX has SSI and SAI interfaces.
I chose the settings, so that the default behaviour before this patch is not changed. The other interface can still be enabled by the user. [Yes, I know this is a case of the frowned-upon use of 'select' with user-visible symbols, but this is as things currently are]
Lothar Waßmann
On Tue, Jan 12, 2016 at 07:13:30PM +0100, Lothar Waßmann wrote:
i.MX6UL does not have the audio multiplexer (AUDMUX) like e.g. i.MX6Q, but apart from that can use the same audio driver. Make audmux optional for the imx-sgtl5000 driver, so it can be used on i.MX6UL too. Also i.MX6UL requires use of the SAI interface rather than SSI.
If it doesn't have the audmux can you use simple-card?
Hi,
On Tue, Jan 12, 2016 at 07:13:30PM +0100, Lothar Waßmann wrote:
i.MX6UL does not have the audio multiplexer (AUDMUX) like e.g. i.MX6Q, but apart from that can use the same audio driver. Make audmux optional for the imx-sgtl5000 driver, so it can be used on i.MX6UL too. Also i.MX6UL requires use of the SAI interface rather than SSI.
If it doesn't have the audmux can you use simple-card?
I'll have a look at it. Thanks for the hint.
Lothar Waßmann
participants (4)
-
Fabio Estevam
-
Lothar Waßmann
-
Mark Brown
-
Timur Tabi