From bb1bb70e69d5f0e61afef71fa75fd57313d9f98b Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Fri, 24 Jun 2016 18:19:53 +0300 Subject: Porter-ext01: fix channels shift on multichannel sound card --- ...2-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch | 78 ++++++++++++++++++++++ .../recipes-kernel/linux/linux-renesas_3.10.bb | 1 + 2 files changed, 79 insertions(+) create mode 100644 meta-rcar-gen2/recipes-kernel/linux/linux-renesas/porter/0032-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch (limited to 'meta-rcar-gen2') diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/porter/0032-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/porter/0032-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch new file mode 100644 index 0000000..d91f0c1 --- /dev/null +++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/porter/0032-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch @@ -0,0 +1,78 @@ +From 31f31400e019e8af9937256a1a08357191b41674 Mon Sep 17 00:00:00 2001 +From: Andrey Gusakov +Date: Fri, 10 Jun 2016 21:15:10 +0300 +Subject: [PATCH] ASoC: rsnd: care SWSP bit for TDM/non-TDM + +SSICR::SWSP bit controls WS signal low/high, but in case of TDM +it is inverted. This patch solves this issue. + +Signed-off-by: Kuninori Morimoto +Signed-off-by: Mark Brown +Signed-off-by: Andrey Gusakov +--- + sound/soc/sh/rcar/ssi.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c +index 8180934..1cbd1d4 100644 +--- a/sound/soc/sh/rcar/ssi.c ++++ b/sound/soc/sh/rcar/ssi.c +@@ -356,7 +356,9 @@ static int rsnd_ssi_init(struct rsnd_mod *mod, + struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); + struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); + u32 cr; ++ int is_tdm; + ++ is_tdm = rsnd_ssi_is_tdm(ssi); + cr = FORCE; + + /* +@@ -364,7 +366,7 @@ static int rsnd_ssi_init(struct rsnd_mod *mod, + * see also rsnd_ssi_master_clk_enable() + */ + cr |= SWL_32; +- if (rsnd_ssi_is_tdm(ssi)) { ++ if (is_tdm) { + switch (rsnd_ssi_channels(ssi)) { + case 4: + cr |= CHNL_TDM_4; +@@ -411,7 +413,7 @@ static int rsnd_ssi_init(struct rsnd_mod *mod, + + if (rdai->bit_clk_inv) + cr |= SCKP; +- if (rdai->frm_clk_inv) ++ if (rdai->frm_clk_inv ^ is_tdm) + cr |= SWSP; + if (rdai->data_alignment) + cr |= SDTA; +@@ -465,6 +467,9 @@ static int rsnd_ssi_init_irq(struct rsnd_mod *mod, + struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); + struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); + u32 cr; ++ int is_tdm; ++ ++ is_tdm = rsnd_ssi_is_tdm(ssi); + + cr = FORCE; + +@@ -473,7 +478,7 @@ static int rsnd_ssi_init_irq(struct rsnd_mod *mod, + * see also rsnd_ssi_master_clk_enable() + */ + cr |= SWL_32; +- if (rsnd_ssi_is_tdm(ssi)) { ++ if (is_tdm) { + switch (rsnd_ssi_channels(ssi)) { + case 4: + cr |= CHNL_TDM_4; +@@ -520,7 +525,7 @@ static int rsnd_ssi_init_irq(struct rsnd_mod *mod, + + if (rdai->bit_clk_inv) + cr |= SCKP; +- if (rdai->frm_clk_inv) ++ if (rdai->frm_clk_inv ^ is_tdm) + cr |= SWSP; + if (rdai->data_alignment) + cr |= SDTA; +-- +1.7.10.4 + diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb index 5f35220..97f08be 100644 --- a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb +++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb @@ -87,6 +87,7 @@ SRC_URI_append_porter = " \ file://porter/0029-ASoC-R-Car-fix-debug-output.patch \ file://porter/0030-R-Car-sound-disable-clock-hack.patch \ file://porter/0031-ASoC-R-car-SSI-fix-SSI-slave-mode-setup-while-TDM-an.patch \ + file://porter/0032-ASoC-rsnd-care-SWSP-bit-for-TDM-non-TDM.patch \ file://porter/0032-mmc-Add-SDIO-function-devicetree-subnode-parsing.patch \ file://porter/0038-Porter-LVDS-display-LQ123K1LG03.patch \ file://porter/0099-Porter-add-separate-dts-for-ext01-extension-board.patch \ -- cgit 1.2.3-korg