Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1364554 > unrolled thread

[PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

Started byPC Liao <pc.liao@mediatek.com>
First post2016-03-25 04:50 +0100
Last post2016-04-02 19:10 +0200
Articles 6 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver PC Liao <pc.liao@mediatek.com> - 2016-03-25 04:50 +0100
    Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine  driver Mark Brown <broonie@kernel.org> - 2016-03-29 09:50 +0200
      Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine  driver PC Liao <pc.liao@mediatek.com> - 2016-03-29 15:30 +0200
        Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine  driver Mark Brown <broonie@kernel.org> - 2016-03-29 18:10 +0200
          Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine  driver PC Liao <pc.liao@mediatek.com> - 2016-04-01 05:00 +0200
            Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine  driver Mark Brown <broonie@kernel.org> - 2016-04-02 19:10 +0200

#1364554 — [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromPC Liao <pc.liao@mediatek.com>
Date2016-03-25 04:50 +0100
Subject[PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<rgqV3-48a-1@gated-at.bofh.it>
This patch adds second I2S for rt5650 codec on mt8173-rt5650 machine driver.

Signed-off-by: PC Liao <pc.liao@mediatek.com>
---
 .../devicetree/bindings/sound/mt8173-rt5650.txt    |    6 +++
 sound/soc/mediatek/mt8173-rt5650.c                 |   55 ++++++++++++++++++--
 2 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
index fe5a5ef..0046926 100644
--- a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
+++ b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
@@ -5,11 +5,17 @@ Required properties:
 - mediatek,audio-codec: the phandles of rt5650 codecs
 - mediatek,platform: the phandle of MT8173 ASoC platform
 
+Optional properties:
+- mediatek,rt5650_i2s: I2S mode of rt5650
+  0: using I2S1 on rt5650 for record
+  1: using I2S2 on rt5650 for record
+
 Example:
 
 	sound {
 		compatible = "mediatek,mt8173-rt5650";
 		mediatek,audio-codec = <&rt5650>;
 		mediatek,platform = <&afe>;
+		mediatek,rt5650_i2s = <0>;
 	};
 
diff --git a/sound/soc/mediatek/mt8173-rt5650.c b/sound/soc/mediatek/mt8173-rt5650.c
index bb09bb1..ab4c806 100644
--- a/sound/soc/mediatek/mt8173-rt5650.c
+++ b/sound/soc/mediatek/mt8173-rt5650.c
@@ -23,6 +23,20 @@
 
 #define MCLK_FOR_CODECS		12288000
 
+struct mt8173_rt5650_platform_data {
+	unsigned int rt5650_i2s;
+	/* 0 = I2S1; 1 = I2S2 */
+};
+
+static struct mt8173_rt5650_platform_data mt8173_rt5650_priv = {
+	.rt5650_i2s = 0,
+};
+
+enum mt8173_rt5650_i2s {
+	MT8173_RT5650_I2S1 = 0,
+	MT8173_RT5650_I2S2,
+};
+
 static const struct snd_soc_dapm_widget mt8173_rt5650_widgets[] = {
 	SND_SOC_DAPM_SPK("Speaker", NULL),
 	SND_SOC_DAPM_MIC("Int Mic", NULL),
@@ -87,10 +101,25 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime)
 	struct snd_soc_codec *codec = runtime->codec_dais[0]->codec;
 	int ret;
 
-	rt5645_sel_asrc_clk_src(codec,
-				RT5645_DA_STEREO_FILTER |
-				RT5645_AD_STEREO_FILTER,
-				RT5645_CLK_SEL_I2S1_ASRC);
+	switch (mt8173_rt5650_priv.rt5650_i2s) {
+	case MT8173_RT5650_I2S1:
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_DA_STEREO_FILTER |
+					RT5645_AD_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S1_ASRC);
+		break;
+	case MT8173_RT5650_I2S2:
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_DA_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S1_ASRC);
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_AD_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S2_ASRC);
+		break;
+	default:
+		break;
+	}
+
 	/* enable jack detection */
 	ret = snd_soc_card_jack_new(card, "Headset Jack",
 				    SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
@@ -112,6 +141,9 @@ static struct snd_soc_dai_link_component mt8173_rt5650_codecs[] = {
 	{
 		.dai_name = "rt5645-aif1",
 	},
+	{
+		.dai_name = "rt5645-aif2",
+	},
 };
 
 enum {
@@ -149,7 +181,7 @@ static struct snd_soc_dai_link mt8173_rt5650_dais[] = {
 		.cpu_dai_name = "I2S",
 		.no_pcm = 1,
 		.codecs = mt8173_rt5650_codecs,
-		.num_codecs = 1,
+		.num_codecs = 2,
 		.init = mt8173_rt5650_init,
 		.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
 			   SND_SOC_DAIFMT_CBS_CFS,
@@ -199,6 +231,19 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
 			"Property 'audio-codec' missing or invalid\n");
 		return -EINVAL;
 	}
+	mt8173_rt5650_codecs[1].of_node = mt8173_rt5650_codecs[0].of_node;
+
+	if (device_property_present(&pdev->dev, "mediatek,rt5650_i2s")) {
+		ret = device_property_read_u32(&pdev->dev,
+					       "mediatek,rt5650_i2s",
+					       &mt8173_rt5650_priv.rt5650_i2s);
+		if (ret) {
+			dev_err(&pdev->dev,
+				"%s snd_soc_register_card fail %d\n",
+				__func__, ret);
+		}
+	}
+
 	card->dev = &pdev->dev;
 	platform_set_drvdata(pdev, card);
 
-- 
1.7.9.5

[toc] | [next] | [standalone]


#1365955 — Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromMark Brown <broonie@kernel.org>
Date2016-03-29 09:50 +0200
SubjectRe: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<rhWzw-2QS-15@gated-at.bofh.it>
In reply to#1364554

[Multipart message — attachments visible in raw view] — view raw

On Fri, Mar 25, 2016 at 11:42:05AM +0800, PC Liao wrote:

> +Optional properties:
> +- mediatek,rt5650_i2s: I2S mode of rt5650
> +  0: using I2S1 on rt5650 for record
> +  1: using I2S2 on rt5650 for record
> +

I would expect the machine driver to have a reference to the DAI that is
in use rather than a property like this.  This is the way pretty much
all DT based machine drivers work...

[toc] | [prev] | [next] | [standalone]


#1366283 — Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromPC Liao <pc.liao@mediatek.com>
Date2016-03-29 15:30 +0200
SubjectRe: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<ri1Sy-6PD-1@gated-at.bofh.it>
In reply to#1365955
Hi Mark,

On Tue, 2016-03-29 at 03:11 +0800, Mark Brown wrote:
> On Fri, Mar 25, 2016 at 11:42:05AM +0800, PC Liao wrote:
> 
> > +Optional properties:
> > +- mediatek,rt5650_i2s: I2S mode of rt5650
> > +  0: using I2S1 on rt5650 for record
> > +  1: using I2S2 on rt5650 for record
> > +
> 
> I would expect the machine driver to have a reference to the DAI that is
> in use rather than a property like this.  This is the way pretty much
> all DT based machine drivers work...

Thanks for comment.
I think I need to comment more clearly.
This setting is different connection from MT8173 to rt5650 on hardware.

- mediatek,rt5650_i2s: I2S mode of rt5650
0: Default setting. Playback and record path use same set of I2S.
Playback/Record path using same I2S clock connect from MT8173 I2S1 to
rt5650 I2S1.
1: Playback and record path use different set of I2S. Playback path
connects from MT8173 I2S1 to rt5650 I2S1 and record path connects from
MT8173 I2S2 to rt5650 I2S2.

Because we use codec ASRC function and need to initialize on different
setting about this parts:
+	switch (mt8173_rt5650_priv.rt5650_i2s) {
+	case MT8173_RT5650_I2S1:
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_DA_STEREO_FILTER |
+					RT5645_AD_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S1_ASRC);
+		break;
+	case MT8173_RT5650_I2S2:
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_DA_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S1_ASRC);
+		rt5645_sel_asrc_clk_src(codec,
+					RT5645_AD_STEREO_FILTER,
+					RT5645_CLK_SEL_I2S2_ASRC);
+		break;
+	default:
+		break;
+	}
, we use device tree to determine which connection we choose.
Does this explain can be accepted?
Thanks!

[toc] | [prev] | [next] | [standalone]


#1366423 — Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromMark Brown <broonie@kernel.org>
Date2016-03-29 18:10 +0200
SubjectRe: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<ri4np-iJ-23@gated-at.bofh.it>
In reply to#1366283

[Multipart message — attachments visible in raw view] — view raw

On Tue, Mar 29, 2016 at 09:28:23PM +0800, PC Liao wrote:

> - mediatek,rt5650_i2s: I2S mode of rt5650
> 0: Default setting. Playback and record path use same set of I2S.
> Playback/Record path using same I2S clock connect from MT8173 I2S1 to
> rt5650 I2S1.
> 1: Playback and record path use different set of I2S. Playback path
> connects from MT8173 I2S1 to rt5650 I2S1 and record path connects from
> MT8173 I2S2 to rt5650 I2S2.

> Because we use codec ASRC function and need to initialize on different
> setting about this parts:

This sort of arrangement is very common - it's often needed to get
different sample rates for playback and capture.  Normally it'd be
represented in the DT by having the two DAI links specified normally and
then having the driver look at the DT to see what's connected to work
out what mode to use.

[toc] | [prev] | [next] | [standalone]


#1368975 — Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromPC Liao <pc.liao@mediatek.com>
Date2016-04-01 05:00 +0200
SubjectRe: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<riXtw-6ie-3@gated-at.bofh.it>
In reply to#1366423
Hi Mark,

On Wed, 2016-03-30 at 00:07 +0800, Mark Brown wrote:
> On Tue, Mar 29, 2016 at 09:28:23PM +0800, PC Liao wrote:
> 
> > - mediatek,rt5650_i2s: I2S mode of rt5650
> > 0: Default setting. Playback and record path use same set of I2S.
> > Playback/Record path using same I2S clock connect from MT8173 I2S1 to
> > rt5650 I2S1.
> > 1: Playback and record path use different set of I2S. Playback path
> > connects from MT8173 I2S1 to rt5650 I2S1 and record path connects from
> > MT8173 I2S2 to rt5650 I2S2.
> 
> > Because we use codec ASRC function and need to initialize on different
> > setting about this parts:
> 
> This sort of arrangement is very common - it's often needed to get
> different sample rates for playback and capture.  Normally it'd be
> represented in the DT by having the two DAI links specified normally and
> then having the driver look at the DT to see what's connected to work
> out what mode to use.

Could you please suggest the reference driver about this?
Thanks!

[toc] | [prev] | [next] | [standalone]


#1370000 — Re: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver

FromMark Brown <broonie@kernel.org>
Date2016-04-02 19:10 +0200
SubjectRe: [PATCH] ASoC: mediatek: Add second I2S on mt8173-rt5650 machine driver
Message-ID<rjxdE-70V-7@gated-at.bofh.it>
In reply to#1368975

[Multipart message — attachments visible in raw view] — view raw

On Fri, Apr 01, 2016 at 10:50:52AM +0800, PC Liao wrote:
> On Wed, 2016-03-30 at 00:07 +0800, Mark Brown wrote:

> > This sort of arrangement is very common - it's often needed to get
> > different sample rates for playback and capture.  Normally it'd be
> > represented in the DT by having the two DAI links specified normally and
> > then having the driver look at the DT to see what's connected to work
> > out what mode to use.

> Could you please suggest the reference driver about this?

Any driver that can identify an individual DAI within a device by using
sound-dai references, even simple-card does this.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web