Commit 83f125e2 authored by Vinod Koul's avatar Vinod Koul Committed by Mark Brown

ASoC: Intel: add support for configuring TDM slots for SSP

With this machines can now configure TDM settings for SSP port using
set_tdm_slot API
Signed-off-by: default avatarPraveen Diwakar <praveen.diwakar@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0b44e345
...@@ -774,6 +774,19 @@ int sst_handle_vb_timer(struct snd_soc_dai *dai, bool enable) ...@@ -774,6 +774,19 @@ int sst_handle_vb_timer(struct snd_soc_dai *dai, bool enable)
return ret; return ret;
} }
int sst_fill_ssp_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
unsigned int rx_mask, int slots, int slot_width)
{
struct sst_data *ctx = snd_soc_dai_get_drvdata(dai);
ctx->ssp_cmd.nb_slots = slots;
ctx->ssp_cmd.active_tx_slot_map = tx_mask;
ctx->ssp_cmd.active_rx_slot_map = rx_mask;
ctx->ssp_cmd.nb_bits_per_slots = slot_width;
return 0;
}
static int sst_get_frame_sync_polarity(struct snd_soc_dai *dai, static int sst_get_frame_sync_polarity(struct snd_soc_dai *dai,
unsigned int fmt) unsigned int fmt)
{ {
......
...@@ -869,6 +869,8 @@ struct sst_enum { ...@@ -869,6 +869,8 @@ struct sst_enum {
SOC_DAPM_ENUM(SST_MUX_CTL_NAME(xpname, xinstance), \ SOC_DAPM_ENUM(SST_MUX_CTL_NAME(xpname, xinstance), \
SST_SSP_MUX_ENUM(xreg, xshift, xtexts)) SST_SSP_MUX_ENUM(xreg, xshift, xtexts))
int sst_fill_ssp_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
unsigned int rx_mask, int slots, int slot_width);
int sst_fill_ssp_config(struct snd_soc_dai *dai, unsigned int fmt); int sst_fill_ssp_config(struct snd_soc_dai *dai, unsigned int fmt);
void sst_fill_ssp_defaults(struct snd_soc_dai *dai); void sst_fill_ssp_defaults(struct snd_soc_dai *dai);
......
...@@ -464,6 +464,21 @@ static int sst_set_format(struct snd_soc_dai *dai, unsigned int fmt) ...@@ -464,6 +464,21 @@ static int sst_set_format(struct snd_soc_dai *dai, unsigned int fmt)
return ret; return ret;
} }
static int sst_platform_set_ssp_slot(struct snd_soc_dai *dai,
unsigned int tx_mask, unsigned int rx_mask,
int slots, int slot_width) {
int ret = 0;
if (!dai->active)
return ret;
ret = sst_fill_ssp_slot(dai, tx_mask, rx_mask, slots, slot_width);
if (ret < 0)
dev_err(dai->dev, "sst_fill_ssp_slot failed..%d\n", ret);
return ret;
}
static void sst_disable_ssp(struct snd_pcm_substream *substream, static void sst_disable_ssp(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai) struct snd_soc_dai *dai)
{ {
...@@ -490,6 +505,7 @@ static struct snd_soc_dai_ops sst_be_dai_ops = { ...@@ -490,6 +505,7 @@ static struct snd_soc_dai_ops sst_be_dai_ops = {
.startup = sst_enable_ssp, .startup = sst_enable_ssp,
.hw_params = sst_be_hw_params, .hw_params = sst_be_hw_params,
.set_fmt = sst_set_format, .set_fmt = sst_set_format,
.set_tdm_slot = sst_platform_set_ssp_slot,
.shutdown = sst_disable_ssp, .shutdown = sst_disable_ssp,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment