ASoC: Intel: mfld-pcm: add FE and BE ops
Now that we have added code for managing DSP pipelines we need to add the code for DSPs FrontEnd and Backend dai. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
e4f5ccd050
commit
c82351da2e
@ -101,35 +101,11 @@ static struct sst_dev_stream_map dpcm_strm_map[] = {
|
||||
{MERR_DPCM_AUDIO, 0, SNDRV_PCM_STREAM_CAPTURE, PIPE_PCM1_OUT, SST_TASK_ID_MEDIA, 0},
|
||||
};
|
||||
|
||||
/* MFLD - MSIC */
|
||||
static struct snd_soc_dai_driver sst_platform_dai[] = {
|
||||
static int sst_media_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
|
||||
{
|
||||
.name = "Headset-cpu-dai",
|
||||
.id = 0,
|
||||
.playback = {
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S24_LE,
|
||||
},
|
||||
.capture = {
|
||||
.channels_min = 1,
|
||||
.channels_max = 5,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S24_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "Compress-cpu-dai",
|
||||
.compress_dai = 1,
|
||||
.playback = {
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
return sst_send_pipe_gains(dai, stream, mute);
|
||||
}
|
||||
|
||||
/* helper functions */
|
||||
void sst_set_stream_status(struct sst_runtime_stream *stream,
|
||||
@ -451,12 +427,133 @@ static int sst_media_hw_free(struct snd_pcm_substream *substream,
|
||||
return snd_pcm_lib_free_pages(substream);
|
||||
}
|
||||
|
||||
static int sst_enable_ssp(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (!dai->active) {
|
||||
ret = sst_handle_vb_timer(dai, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = send_ssp_cmd(dai, dai->name, 1);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void sst_disable_ssp(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
if (!dai->active) {
|
||||
send_ssp_cmd(dai, dai->name, 0);
|
||||
sst_handle_vb_timer(dai, false);
|
||||
}
|
||||
}
|
||||
|
||||
static struct snd_soc_dai_ops sst_media_dai_ops = {
|
||||
.startup = sst_media_open,
|
||||
.shutdown = sst_media_close,
|
||||
.prepare = sst_media_prepare,
|
||||
.hw_params = sst_media_hw_params,
|
||||
.hw_free = sst_media_hw_free,
|
||||
.mute_stream = sst_media_digital_mute,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_ops sst_compr_dai_ops = {
|
||||
.mute_stream = sst_media_digital_mute,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_ops sst_be_dai_ops = {
|
||||
.startup = sst_enable_ssp,
|
||||
.shutdown = sst_disable_ssp,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_driver sst_platform_dai[] = {
|
||||
{
|
||||
.name = "media-cpu-dai",
|
||||
.ops = &sst_media_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "Headset Playback",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Headset Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "compress-cpu-dai",
|
||||
.compress_dai = 1,
|
||||
.ops = &sst_compr_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "Compress Playback",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
/* BE CPU Dais */
|
||||
{
|
||||
.name = "ssp0-port",
|
||||
.ops = &sst_be_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "ssp0 Tx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "ssp0 Rx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "ssp1-port",
|
||||
.ops = &sst_be_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "ssp1 Tx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "ssp1 Rx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "ssp2-port",
|
||||
.ops = &sst_be_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "ssp2 Tx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "ssp2 Rx",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static int sst_platform_open(struct snd_pcm_substream *substream)
|
||||
|
Loading…
Reference in New Issue
Block a user