summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorKuirong Wang <kuirongw@codeaurora.org>2016-05-07 15:06:58 -0700
committerJeevan Shriram <jshriram@codeaurora.org>2016-05-19 16:06:46 -0700
commitdb397c99cd29d90b397d72934925bc86b1c647a6 (patch)
tree909ec651104784a33f5758cf809179130f99dd4d /sound
parent7b104d75e6261cf97ecfa4c6ac2b4c90eb786a99 (diff)
ASoC: msmcobalt: Add slimbus_6_rx back-end dai-link and hostless
Add slimbus 6 playback hostless and slimbus_6_rx back-end dai-link to enable independent backend for different devices during audio playback. Change-Id: Idac26ac45f1177db96fc3fb5d4a5e2f837f86d1b Signed-off-by: Kuirong Wang <kuirongw@codeaurora.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/msm/msmcobalt.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sound/soc/msm/msmcobalt.c b/sound/soc/msm/msmcobalt.c
index 936d46764fac..07bade08b3f5 100644
--- a/sound/soc/msm/msmcobalt.c
+++ b/sound/soc/msm/msmcobalt.c
@@ -70,6 +70,7 @@ enum {
SLIM_RX_3,
SLIM_RX_4,
SLIM_RX_5,
+ SLIM_RX_6,
SLIM_RX_7,
SLIM_RX_MAX,
};
@@ -126,6 +127,7 @@ static struct slim_ch_config slim_rx_cfg[] = {
[SLIM_RX_3] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1},
[SLIM_RX_4] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1},
[SLIM_RX_5] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1},
+ [SLIM_RX_6] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1},
[SLIM_RX_7] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1},
};
@@ -174,17 +176,20 @@ static SOC_ENUM_SINGLE_EXT_DECL(slim_0_rx_chs, slim_rx_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_0_tx_chs, slim_tx_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_1_tx_chs, slim_tx_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_5_rx_chs, slim_rx_ch_text);
+static SOC_ENUM_SINGLE_EXT_DECL(slim_6_rx_chs, slim_rx_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_rx_chs, usb_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_chs, usb_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(vi_feed_tx_chs, vi_feed_ch_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_0_rx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_5_rx_format, bit_format_text);
+static SOC_ENUM_SINGLE_EXT_DECL(slim_6_rx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_0_tx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_rx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_0_rx_sample_rate, slim_sample_rate_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_0_tx_sample_rate, slim_sample_rate_text);
static SOC_ENUM_SINGLE_EXT_DECL(slim_5_rx_sample_rate, slim_sample_rate_text);
+static SOC_ENUM_SINGLE_EXT_DECL(slim_6_rx_sample_rate, slim_sample_rate_text);
static SOC_ENUM_SINGLE_EXT_DECL(bt_sco_sample_rate, bt_sco_sample_rate_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_rx_sample_rate, usb_sample_rate_text);
static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_sample_rate, usb_sample_rate_text);
@@ -914,6 +919,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
msm_slim_tx_ch_get, msm_slim_tx_ch_put),
SOC_ENUM_EXT("SLIM_5_RX Channels", slim_5_rx_chs,
msm_slim_rx_ch_get, msm_slim_rx_ch_put),
+ SOC_ENUM_EXT("SLIM_6_RX Channels", slim_6_rx_chs,
+ msm_slim_rx_ch_get, msm_slim_rx_ch_put),
SOC_ENUM_EXT("VI_FEED_TX Channels", vi_feed_tx_chs,
msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put),
SOC_ENUM_EXT("USB_AUDIO_RX Channels", usb_rx_chs,
@@ -924,6 +931,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
slim_rx_bit_format_get, slim_rx_bit_format_put),
SOC_ENUM_EXT("SLIM_5_RX Format", slim_5_rx_format,
slim_rx_bit_format_get, slim_rx_bit_format_put),
+ SOC_ENUM_EXT("SLIM_6_RX Format", slim_6_rx_format,
+ slim_rx_bit_format_get, slim_rx_bit_format_put),
SOC_ENUM_EXT("SLIM_0_TX Format", slim_0_tx_format,
slim_tx_bit_format_get, slim_tx_bit_format_put),
SOC_ENUM_EXT("USB_AUDIO_RX Format", usb_rx_format,
@@ -936,6 +945,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
slim_tx_sample_rate_get, slim_tx_sample_rate_put),
SOC_ENUM_EXT("SLIM_5_RX SampleRate", slim_5_rx_sample_rate,
slim_rx_sample_rate_get, slim_rx_sample_rate_put),
+ SOC_ENUM_EXT("SLIM_6_RX SampleRate", slim_6_rx_sample_rate,
+ slim_rx_sample_rate_get, slim_rx_sample_rate_put),
SOC_ENUM_EXT("BT_SCO SampleRate", bt_sco_sample_rate,
msm_bt_sco_sample_rate_get,
msm_bt_sco_sample_rate_put),
@@ -1048,6 +1059,7 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
case MSM_BACKEND_DAI_SLIMBUS_1_RX:
case MSM_BACKEND_DAI_SLIMBUS_3_RX:
case MSM_BACKEND_DAI_SLIMBUS_4_RX:
+ case MSM_BACKEND_DAI_SLIMBUS_6_RX:
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
slim_rx_cfg[0].bit_format);
rate->min = rate->max = slim_rx_cfg[0].sample_rate;
@@ -1537,6 +1549,10 @@ static int msm_snd_hw_params(struct snd_pcm_substream *substream,
pr_debug("%s: rx_5_ch=%d\n", __func__,
slim_rx_cfg[5].channels);
rx_ch_count = slim_rx_cfg[5].channels;
+ } else if (dai_link->be_id == MSM_BACKEND_DAI_SLIMBUS_6_RX) {
+ pr_debug("%s: rx_6_ch=%d\n", __func__,
+ slim_rx_cfg[6].channels);
+ rx_ch_count = slim_rx_cfg[6].channels;
} else {
pr_debug("%s: rx_0_ch=%d\n", __func__,
slim_rx_cfg[0].channels);
@@ -2391,6 +2407,23 @@ static struct snd_soc_dai_link msm_tasha_fe_dai_links[] = {
.codec_name = "tasha_codec",
.ops = &msm_cpe_ops,
},
+ {
+ .name = "SLIMBUS_6 Hostless Playback",
+ .stream_name = "SLIMBUS_6 Hostless",
+ .cpu_dai_name = "SLIMBUS6_HOSTLESS",
+ .platform_name = "msm-pcm-hostless",
+ .dynamic = 1,
+ .dpcm_playback = 1,
+ .dpcm_capture = 1,
+ .trigger = {SND_SOC_DPCM_TRIGGER_POST,
+ SND_SOC_DPCM_TRIGGER_POST},
+ .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
+ .ignore_suspend = 1,
+ /* this dailink has playback support */
+ .ignore_pmdown_time = 1,
+ .codec_dai_name = "snd-soc-dummy-dai",
+ .codec_name = "snd-soc-dummy",
+ },
};
static struct snd_soc_dai_link msm_common_be_dai_links[] = {
@@ -2647,6 +2680,22 @@ static struct snd_soc_dai_link msm_tasha_be_dai_links[] = {
.ops = &msm_be_ops,
.ignore_suspend = 1,
},
+ {
+ .name = LPASS_BE_SLIMBUS_6_RX,
+ .stream_name = "Slimbus6 Playback",
+ .cpu_dai_name = "msm-dai-q6-dev.16396",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "tasha_codec",
+ .codec_dai_name = "tasha_rx4",
+ .no_pcm = 1,
+ .dpcm_playback = 1,
+ .be_id = MSM_BACKEND_DAI_SLIMBUS_6_RX,
+ .be_hw_params_fixup = msm_be_hw_params_fixup,
+ .ops = &msm_be_ops,
+ /* dai link has playback support */
+ .ignore_pmdown_time = 1,
+ .ignore_suspend = 1,
+ },
};
static struct snd_soc_dai_link msm_wcn_be_dai_links[] = {