mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 15:43:59 +08:00
ASoC: rt1308-sdw: add set_tdm_slot() support
Add ability to select which of the channels is used, or both, in case two RT1308 amplifiers are located on the same link. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20200325212905.28145-2-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
633fddee73
commit
f7cc9b996e
@ -507,6 +507,28 @@ static void rt1308_sdw_shutdown(struct snd_pcm_substream *substream,
|
||||
kfree(stream);
|
||||
}
|
||||
|
||||
static int rt1308_sdw_set_tdm_slot(struct snd_soc_dai *dai,
|
||||
unsigned int tx_mask,
|
||||
unsigned int rx_mask,
|
||||
int slots, int slot_width)
|
||||
{
|
||||
struct snd_soc_component *component = dai->component;
|
||||
struct rt1308_sdw_priv *rt1308 =
|
||||
snd_soc_component_get_drvdata(component);
|
||||
|
||||
if (tx_mask)
|
||||
return -EINVAL;
|
||||
|
||||
if (slots > 2)
|
||||
return -EINVAL;
|
||||
|
||||
rt1308->rx_mask = rx_mask;
|
||||
rt1308->slots = slots;
|
||||
/* slot_width is not used since it's irrelevant for SoundWire */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt1308_sdw_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
|
||||
{
|
||||
@ -597,6 +619,7 @@ static const struct snd_soc_dai_ops rt1308_aif_dai_ops = {
|
||||
.hw_free = rt1308_sdw_pcm_hw_free,
|
||||
.set_sdw_stream = rt1308_set_sdw_stream,
|
||||
.shutdown = rt1308_sdw_shutdown,
|
||||
.set_tdm_slot = rt1308_sdw_set_tdm_slot,
|
||||
};
|
||||
|
||||
#define RT1308_STEREO_RATES SNDRV_PCM_RATE_48000
|
||||
|
@ -160,6 +160,8 @@ struct rt1308_sdw_priv {
|
||||
struct sdw_bus_params params;
|
||||
bool hw_init;
|
||||
bool first_hw_init;
|
||||
int rx_mask;
|
||||
int slots;
|
||||
};
|
||||
|
||||
struct sdw_stream_data {
|
||||
|
Loading…
Reference in New Issue
Block a user