ASoC: msmcobalt: Add machine driver support on simulation
Add FE(front end) and BE(Back end) DAI(Digital Audio Interface) links needed to support audio functionality on msmcobalt simulation platform. Change-Id: I87feebf29fb4b3e3e8db52d9d85c902c384d061f Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
This commit is contained in:
parent
d73230ca2c
commit
df3e89be89
2 changed files with 181 additions and 0 deletions
|
@ -2055,3 +2055,45 @@ Example:
|
|||
qcom,wsa-aux-dev-prefix = "SpkrRight", "SpkrLeft",
|
||||
"SpkrRight", "SpkrLeft";
|
||||
};
|
||||
|
||||
* MSMSTUB ASoC Machine driver
|
||||
|
||||
Required properties:
|
||||
- compatible : "qcom,msmcobalt-asoc-snd-stub"
|
||||
- qcom,model : The user-visible name of this sound card.
|
||||
- qcom,tasha-mclk-clk-freq : MCLK frequency value for tasha codec
|
||||
- asoc-platform: This is phandle list containing the references to platform device
|
||||
nodes that are used as part of the sound card dai-links.
|
||||
- asoc-platform-names: This property contains list of platform names. The order of
|
||||
the platform names should match to that of the phandle order
|
||||
given in "asoc-platform".
|
||||
- asoc-cpu: This is phandle list containing the references to cpu dai device nodes
|
||||
that are used as part of the sound card dai-links.
|
||||
- asoc-cpu-names: This property contains list of cpu dai names. The order of the
|
||||
cpu dai names should match to that of the phandle order given
|
||||
in "asoc-cpu". The cpu names are in the form of "%s.%d" form,
|
||||
where the id (%d) field represents the back-end AFE port id that
|
||||
this CPU dai is associated with.
|
||||
- asoc-codec: This is phandle list containing the references to codec dai device
|
||||
nodes that are used as part of the sound card dai-links.
|
||||
- asoc-codec-names: This property contains list of codec dai names. The order of the
|
||||
codec dai names should match to that of the phandle order given
|
||||
in "asoc-codec".
|
||||
Optional properties:
|
||||
- qcom,wsa-max-devs : Maximum number of WSA881x devices present in the target
|
||||
|
||||
Example:
|
||||
|
||||
sound_msm:sound-9335 {
|
||||
compatible = "qcom,msmcobalt-asoc-snd";
|
||||
qcom,model = "msmcobalt-stub-snd-card";
|
||||
|
||||
qcom,tasha-mclk-clk-freq = <9600000>;
|
||||
asoc-platform = <&pcm0>;
|
||||
asoc-platform-names = "msm-pcm-dsp.0";
|
||||
asoc-cpu = <&sb_0_rx>, <&sb_0_tx>;
|
||||
asoc-cpu-names = "msm-dai-q6-dev.16384", "msm-dai-q6-dev.16385";
|
||||
asoc-codec = <&stub_codec>;
|
||||
asoc-codec-names = "msm-stub-codec.1";
|
||||
qcom,wsa-max-devs = <0>;
|
||||
};
|
||||
|
|
|
@ -2332,9 +2332,133 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int msm_audrx_stub_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
int ret = 0;
|
||||
struct snd_soc_codec *codec = rtd->codec;
|
||||
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||
|
||||
ret = snd_soc_add_codec_controls(codec, msm_snd_controls,
|
||||
ARRAY_SIZE(msm_snd_controls));
|
||||
if (ret < 0) {
|
||||
dev_err(codec->dev, "%s: add_codec_controls failed, err%d\n",
|
||||
__func__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
snd_soc_dapm_new_controls(dapm, msm_dapm_widgets,
|
||||
ARRAY_SIZE(msm_dapm_widgets));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_snd_stub_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
|
||||
|
||||
int ret = 0;
|
||||
unsigned int rx_ch[] = {144, 145, 146, 147, 148, 149, 150,
|
||||
151, 152, 153, 154, 155, 156};
|
||||
unsigned int tx_ch[] = {128, 129, 130, 131, 132, 133,
|
||||
134, 135, 136, 137, 138, 139,
|
||||
140, 141, 142, 143};
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
ret = snd_soc_dai_set_channel_map(cpu_dai, 0, 0,
|
||||
slim_rx_cfg[0].channels,
|
||||
rx_ch);
|
||||
if (ret < 0)
|
||||
pr_err("%s: RX failed to set cpu chan map error %d\n",
|
||||
__func__, ret);
|
||||
} else {
|
||||
ret = snd_soc_dai_set_channel_map(cpu_dai,
|
||||
slim_tx_cfg[0].channels,
|
||||
tx_ch, 0, 0);
|
||||
if (ret < 0)
|
||||
pr_err("%s: TX failed to set cpu chan map error %d\n",
|
||||
__func__, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct snd_soc_ops msm_stub_be_ops = {
|
||||
.hw_params = msm_snd_stub_hw_params,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link msm_stub_fe_dai_links[] = {
|
||||
|
||||
/* FrontEnd DAI Links */
|
||||
{
|
||||
.name = "MSMSTUB Media1",
|
||||
.stream_name = "MultiMedia1",
|
||||
.cpu_dai_name = "MultiMedia1",
|
||||
.platform_name = "msm-pcm-dsp.0",
|
||||
.dynamic = 1,
|
||||
.async_ops = ASYNC_DPCM_SND_SOC_PREPARE,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST,
|
||||
SND_SOC_DPCM_TRIGGER_POST},
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.ignore_suspend = 1,
|
||||
/* this dainlink has playback support */
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_id = MSM_FRONTEND_DAI_MULTIMEDIA1
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link msm_stub_be_dai_links[] = {
|
||||
|
||||
/* Backend DAI Links */
|
||||
{
|
||||
.name = LPASS_BE_SLIMBUS_0_RX,
|
||||
.stream_name = "Slimbus Playback",
|
||||
.cpu_dai_name = "msm-dai-q6-dev.16384",
|
||||
.platform_name = "msm-pcm-routing",
|
||||
.codec_name = "msm-stub-codec.1",
|
||||
.codec_dai_name = "msm-stub-rx",
|
||||
.no_pcm = 1,
|
||||
.dpcm_playback = 1,
|
||||
.be_id = MSM_BACKEND_DAI_SLIMBUS_0_RX,
|
||||
.init = &msm_audrx_stub_init,
|
||||
.be_hw_params_fixup = msm_be_hw_params_fixup,
|
||||
.ignore_pmdown_time = 1, /* dai link has playback support */
|
||||
.ignore_suspend = 1,
|
||||
.ops = &msm_stub_be_ops,
|
||||
},
|
||||
{
|
||||
.name = LPASS_BE_SLIMBUS_0_TX,
|
||||
.stream_name = "Slimbus Capture",
|
||||
.cpu_dai_name = "msm-dai-q6-dev.16385",
|
||||
.platform_name = "msm-pcm-routing",
|
||||
.codec_name = "msm-stub-codec.1",
|
||||
.codec_dai_name = "msm-stub-tx",
|
||||
.no_pcm = 1,
|
||||
.dpcm_capture = 1,
|
||||
.be_id = MSM_BACKEND_DAI_SLIMBUS_0_TX,
|
||||
.be_hw_params_fixup = msm_be_hw_params_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.ops = &msm_stub_be_ops,
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link msm_stub_dai_links[
|
||||
ARRAY_SIZE(msm_stub_fe_dai_links) +
|
||||
ARRAY_SIZE(msm_stub_be_dai_links)];
|
||||
|
||||
struct snd_soc_card snd_soc_card_stub_msm = {
|
||||
.name = "msmcobalt-stub-snd-card",
|
||||
};
|
||||
|
||||
static const struct of_device_id msmcobalt_asoc_machine_of_match[] = {
|
||||
{ .compatible = "qcom,msmcobalt-asoc-snd-tasha",
|
||||
.data = "tasha_codec"},
|
||||
{ .compatible = "qcom,msmcobalt-asoc-snd-stub",
|
||||
.data = "stub_codec"},
|
||||
{},
|
||||
};
|
||||
|
||||
|
@ -2373,6 +2497,21 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
|
|||
|
||||
dailink = msm_tasha_dai_links;
|
||||
len_4 = len_3 + ARRAY_SIZE(msm_tasha_be_dai_links);
|
||||
|
||||
} else if (!strcmp(match->data, "stub_codec")) {
|
||||
card = &snd_soc_card_stub_msm;
|
||||
len_1 = ARRAY_SIZE(msm_stub_fe_dai_links);
|
||||
len_2 = len_1 + ARRAY_SIZE(msm_stub_be_dai_links);
|
||||
|
||||
memcpy(msm_stub_dai_links,
|
||||
msm_stub_fe_dai_links,
|
||||
sizeof(msm_stub_fe_dai_links));
|
||||
memcpy(msm_stub_dai_links + len_1,
|
||||
msm_stub_be_dai_links,
|
||||
sizeof(msm_stub_be_dai_links));
|
||||
|
||||
dailink = msm_stub_dai_links;
|
||||
len_4 = len_2;
|
||||
}
|
||||
dev_dbg(dev, "%s(): No hdmi audio support\n", __func__);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue