diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index ae9a227d35d..a0cb84c815b 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h @@ -121,6 +121,11 @@ int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate); int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute, int direction); +int snd_soc_dai_get_channel_map(struct snd_soc_dai *dai, + unsigned int *tx_num, unsigned int *tx_slot, + unsigned int *rx_num, unsigned int *rx_slot); + + struct snd_soc_dai_ops { /* * DAI clocking configuration, all optional. @@ -144,6 +149,10 @@ struct snd_soc_dai_ops { unsigned int tx_num, unsigned int *tx_slot, unsigned int rx_num, unsigned int *rx_slot); int (*set_tristate)(struct snd_soc_dai *dai, int tristate); + int (*get_channel_map)(struct snd_soc_dai *dai, + unsigned int *tx_num, unsigned int *tx_slot, + unsigned int *rx_num, unsigned int *rx_slot); + /* * DAI digital mute - optional. diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index de8c895add2..c5e127ef83a 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -4499,6 +4499,29 @@ int snd_soc_info_multi_ext(struct snd_kcontrol *kcontrol, return 0; } EXPORT_SYMBOL_GPL(snd_soc_info_multi_ext); +/** + * snd_soc_dai_get_channel_map - configure DAI audio channel map + * @dai: DAI + * @tx_num: how many TX channels + * @tx_slot: pointer to an array which imply the TX slot number channel + * 0~num-1 uses + * @rx_num: how many RX channels + * @rx_slot: pointer to an array which imply the RX slot number channel + * 0~num-1 uses + * + * configure the relationship between channel number and TDM slot number. + */ +int snd_soc_dai_get_channel_map(struct snd_soc_dai *dai, + unsigned int *tx_num, unsigned int *tx_slot, + unsigned int *rx_num, unsigned int *rx_slot) +{ + if (dai->driver && dai->driver->ops->get_channel_map) + return dai->driver->ops->get_channel_map(dai, tx_num, tx_slot, + rx_num, rx_slot); + else + return -EINVAL; +} +EXPORT_SYMBOL_GPL(snd_soc_dai_get_channel_map); static int __init snd_soc_init(void) { #ifdef CONFIG_DEBUG_FS