Message ID | 1461134447-42001-3-git-send-email-pc.liao@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Apr 20, 2016 at 02:40:47PM +0800, PC Liao wrote: > +Optional properties: > +- capture-dai: audio codec dai on capture path > + <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) > + <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) I sugggested changing this to use a subnode but you've ignored my suggestion...
Hi Mark, On Wed, 2016-04-20 at 16:29 +0800, Mark Brown wrote: > On Wed, Apr 20, 2016 at 02:40:47PM +0800, PC Liao wrote: > > > +Optional properties: > > +- capture-dai: audio codec dai on capture path > > + <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) > > + <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) > > I sugggested changing this to use a subnode but you've ignored my > suggestion... Sorry.... It's my mistake. You mean that using a subnode. This is my example: codec-capture { sound-dai = <&rt5650 1>; }; Does this is your suggestion? Thanks!
On 20/04/16 08:40, PC Liao wrote: > This patch adds second I2S connection to rt5650 codec for capture path 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 | 44 ++++++++++++++++++-- > 2 files changed, 47 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt > index fe5a5ef..802dd1b 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: > +- capture-dai: audio codec dai on capture path > + <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) > + <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) > + > Example: > > sound { > compatible = "mediatek,mt8173-rt5650"; > mediatek,audio-codec = <&rt5650>; > mediatek,platform = <&afe>; > + capture-dai = <&rt5650 1>; > }; > > diff --git a/sound/soc/mediatek/mt8173-rt5650.c b/sound/soc/mediatek/mt8173-rt5650.c > index bb09bb1..45dea22 100644 > --- a/sound/soc/mediatek/mt8173-rt5650.c > +++ b/sound/soc/mediatek/mt8173-rt5650.c > @@ -85,12 +85,26 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime) > { > struct snd_soc_card *card = runtime->card; > struct snd_soc_codec *codec = runtime->codec_dais[0]->codec; > + const char *codec_dai_capture = runtime->codec_dais[1]->name; > int ret; > > rt5645_sel_asrc_clk_src(codec, > - RT5645_DA_STEREO_FILTER | > - RT5645_AD_STEREO_FILTER, > + RT5645_DA_STEREO_FILTER, > RT5645_CLK_SEL_I2S1_ASRC); > + > + if (!strcmp(codec_dai_capture, "rt5645-aif1")) { > + rt5645_sel_asrc_clk_src(codec, > + RT5645_AD_STEREO_FILTER, > + RT5645_CLK_SEL_I2S1_ASRC); > + } else if (!strcmp(codec_dai_capture, "rt5645-aif2")) { > + rt5645_sel_asrc_clk_src(codec, > + RT5645_AD_STEREO_FILTER, > + RT5645_CLK_SEL_I2S2_ASRC); > + } else { For compatibility you should change this to something like: dev_warn(card->dev, "Only one dai codec found in DTS, enabled rt5645 AD filter\n"); rt5645_sel_asrc_clk_src(codec, RT5645_AD_STEREO_FILTER, RT5645_CLK_SEL_I2S1_ASRC); } Regards, Matthias
On Wed, Apr 20, 2016 at 05:39:50PM +0800, PC Liao wrote: > On Wed, 2016-04-20 at 16:29 +0800, Mark Brown wrote: > > On Wed, Apr 20, 2016 at 02:40:47PM +0800, PC Liao wrote: > > > +Optional properties: > > > +- capture-dai: audio codec dai on capture path > > > + <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) > > > + <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) > > I sugggested changing this to use a subnode but you've ignored my > > suggestion... > Sorry.... It's my mistake. > You mean that using a subnode. > This is my example: > codec-capture { > sound-dai = <&rt5650 1>; > }; > Does this is your suggestion? Yeah. Having refreshed my mind about the APIs a bit the idea is that if you do things this way then any additional parameters that are needed for the DAI can be added within the subnode.
Hi Matthias, On Wed, 2016-04-20 at 21:30 +0800, Matthias Brugger wrote: > > For compatibility you should change this to something like: > > dev_warn(card->dev, "Only one dai codec found in DTS, enabled rt5645 > AD filter\n"); > rt5645_sel_asrc_clk_src(codec, RT5645_AD_STEREO_FILTER, > RT5645_CLK_SEL_I2S1_ASRC); > } > I will use this in next version. Thanks!
On 20/04/16 18:27, PC Liao wrote: > Hi Matthias, > > On Wed, 2016-04-20 at 21:30 +0800, Matthias Brugger wrote: >> >> For compatibility you should change this to something like: >> >> dev_warn(card->dev, "Only one dai codec found in DTS, enabled rt5645 >> AD filter\n"); >> rt5645_sel_asrc_clk_src(codec, RT5645_AD_STEREO_FILTER, >> RT5645_CLK_SEL_I2S1_ASRC); >> } >> > > I will use this in next version. > Thanks! > I think you forgot to add this to v7 of the patches. Cheers, Matthias
Hi Matthias, On Thu, 2016-04-21 at 17:22 +0800, Matthias Brugger wrote: > > On 20/04/16 18:27, PC Liao wrote: > > Hi Matthias, > > > > On Wed, 2016-04-20 at 21:30 +0800, Matthias Brugger wrote: > >> > >> For compatibility you should change this to something like: > >> > >> dev_warn(card->dev, "Only one dai codec found in DTS, enabled rt5645 > >> AD filter\n"); > >> rt5645_sel_asrc_clk_src(codec, RT5645_AD_STEREO_FILTER, > >> RT5645_CLK_SEL_I2S1_ASRC); > >> } > >> > > > > I will use this in next version. > > Thanks! > > > > I think you forgot to add this to v7 of the patches. > > Cheers, > Matthias Oh, sorry. I misunderstand your suggestion. I will upload. Thanks!
diff --git a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt index fe5a5ef..802dd1b 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: +- capture-dai: audio codec dai on capture path + <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) + <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) + Example: sound { compatible = "mediatek,mt8173-rt5650"; mediatek,audio-codec = <&rt5650>; mediatek,platform = <&afe>; + capture-dai = <&rt5650 1>; }; diff --git a/sound/soc/mediatek/mt8173-rt5650.c b/sound/soc/mediatek/mt8173-rt5650.c index bb09bb1..45dea22 100644 --- a/sound/soc/mediatek/mt8173-rt5650.c +++ b/sound/soc/mediatek/mt8173-rt5650.c @@ -85,12 +85,26 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime) { struct snd_soc_card *card = runtime->card; struct snd_soc_codec *codec = runtime->codec_dais[0]->codec; + const char *codec_dai_capture = runtime->codec_dais[1]->name; int ret; rt5645_sel_asrc_clk_src(codec, - RT5645_DA_STEREO_FILTER | - RT5645_AD_STEREO_FILTER, + RT5645_DA_STEREO_FILTER, RT5645_CLK_SEL_I2S1_ASRC); + + if (!strcmp(codec_dai_capture, "rt5645-aif1")) { + rt5645_sel_asrc_clk_src(codec, + RT5645_AD_STEREO_FILTER, + RT5645_CLK_SEL_I2S1_ASRC); + } else if (!strcmp(codec_dai_capture, "rt5645-aif2")) { + rt5645_sel_asrc_clk_src(codec, + RT5645_AD_STEREO_FILTER, + RT5645_CLK_SEL_I2S2_ASRC); + } else { + dev_err(card->dev, "Can't get the right codec dai\n"); + return -EINVAL; + } + /* enable jack detection */ ret = snd_soc_card_jack_new(card, "Headset Jack", SND_JACK_HEADPHONE | SND_JACK_MICROPHONE | @@ -110,6 +124,11 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime) static struct snd_soc_dai_link_component mt8173_rt5650_codecs[] = { { + /* Playback */ + .dai_name = "rt5645-aif1", + }, + { + /* Capture */ .dai_name = "rt5645-aif1", }, }; @@ -149,7 +168,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, @@ -177,6 +196,8 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev) { struct snd_soc_card *card = &mt8173_rt5650_card; struct device_node *platform_node; + const char *codec_dai_capture; + struct of_phandle_args args; int i, ret; platform_node = of_parse_phandle(pdev->dev.of_node, @@ -199,6 +220,23 @@ 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, "capture-dai")) { + ret = of_parse_phandle_with_args(pdev->dev.of_node, + "capture-dai", + "#sound-dai-cells", 0, &args); + if (ret < 0) { + dev_err(&pdev->dev, + "%s capture-dai name fail %d\n", + __func__, ret); + return ret; + } + + ret = snd_soc_get_dai_name(&args, &codec_dai_capture); + mt8173_rt5650_codecs[1].dai_name = codec_dai_capture; + } + card->dev = &pdev->dev; platform_set_drvdata(pdev, card);
This patch adds second I2S connection to rt5650 codec for capture path 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 | 44 ++++++++++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-)