Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1364554 > unrolled thread
| Started by | PC Liao <pc.liao@mediatek.com> |
|---|---|
| First post | 2016-03-25 04:50 +0100 |
| Last post | 2016-04-02 19:10 +0200 |
| Articles | 6 — 2 participants |
Back to article view | Back to linux.kernel
[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
| From | PC Liao <pc.liao@mediatek.com> |
|---|---|
| Date | 2016-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]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2016-03-29 09:50 +0200 |
| Subject | Re: [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]
| From | PC Liao <pc.liao@mediatek.com> |
|---|---|
| Date | 2016-03-29 15:30 +0200 |
| Subject | Re: [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]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2016-03-29 18:10 +0200 |
| Subject | Re: [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]
| From | PC Liao <pc.liao@mediatek.com> |
|---|---|
| Date | 2016-04-01 05:00 +0200 |
| Subject | Re: [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]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2016-04-02 19:10 +0200 |
| Subject | Re: [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