mirror of https://gitee.com/openkylin/linux.git
ASoC: ab8500-codec: Set tx dai slots from tx_mask
Replace hard-coded tx slot numbers from ab8500_codec_set_dai_tdm_slot using the ones requested by the machine driver in tx_mask instead. Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
aba1e2be4d
commit
b296263398
|
@ -2236,7 +2236,7 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
|
||||||
int slots, int slot_width)
|
int slots, int slot_width)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = dai->codec;
|
struct snd_soc_codec *codec = dai->codec;
|
||||||
unsigned int val, mask, slots_active;
|
unsigned int val, mask, slot, slots_active;
|
||||||
|
|
||||||
mask = BIT(AB8500_DIGIFCONF2_IF0WL0) |
|
mask = BIT(AB8500_DIGIFCONF2_IF0WL0) |
|
||||||
BIT(AB8500_DIGIFCONF2_IF0WL1);
|
BIT(AB8500_DIGIFCONF2_IF0WL1);
|
||||||
|
@ -2292,27 +2292,34 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
|
||||||
snd_soc_update_bits(codec, AB8500_DIGIFCONF1, mask, val);
|
snd_soc_update_bits(codec, AB8500_DIGIFCONF1, mask, val);
|
||||||
|
|
||||||
/* Setup TDM DA according to active tx slots */
|
/* Setup TDM DA according to active tx slots */
|
||||||
|
|
||||||
|
if (tx_mask & ~0xff)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
mask = AB8500_DASLOTCONFX_SLTODAX_MASK;
|
mask = AB8500_DASLOTCONFX_SLTODAX_MASK;
|
||||||
|
tx_mask = tx_mask << AB8500_DA_DATA0_OFFSET;
|
||||||
slots_active = hweight32(tx_mask);
|
slots_active = hweight32(tx_mask);
|
||||||
|
|
||||||
dev_dbg(dai->codec->dev, "%s: Slots, active, TX: %d\n", __func__,
|
dev_dbg(dai->codec->dev, "%s: Slots, active, TX: %d\n", __func__,
|
||||||
slots_active);
|
slots_active);
|
||||||
|
|
||||||
switch (slots_active) {
|
switch (slots_active) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
/* Slot 9 -> DA_IN1 & DA_IN3 */
|
slot = find_first_bit((unsigned long *)&tx_mask, 32);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 11);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 11);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* Slot 9 -> DA_IN1 & DA_IN3, Slot 11 -> DA_IN2 & DA_IN4 */
|
slot = find_first_bit((unsigned long *)&tx_mask, 32);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 9);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 9);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
|
slot = find_next_bit((unsigned long *)&tx_mask, 32, slot + 1);
|
||||||
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
|
||||||
|
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
dev_dbg(dai->codec->dev,
|
dev_dbg(dai->codec->dev,
|
||||||
|
|
|
@ -24,6 +24,13 @@
|
||||||
#define AB8500_SUPPORTED_RATE (SNDRV_PCM_RATE_48000)
|
#define AB8500_SUPPORTED_RATE (SNDRV_PCM_RATE_48000)
|
||||||
#define AB8500_SUPPORTED_FMT (SNDRV_PCM_FMTBIT_S16_LE)
|
#define AB8500_SUPPORTED_FMT (SNDRV_PCM_FMTBIT_S16_LE)
|
||||||
|
|
||||||
|
/* AB8500 interface slot offset definitions */
|
||||||
|
|
||||||
|
#define AB8500_AD_DATA0_OFFSET 0
|
||||||
|
#define AB8500_DA_DATA0_OFFSET 8
|
||||||
|
#define AB8500_AD_DATA1_OFFSET 16
|
||||||
|
#define AB8500_DA_DATA1_OFFSET 24
|
||||||
|
|
||||||
/* AB8500 audio bank (0x0d) register definitions */
|
/* AB8500 audio bank (0x0d) register definitions */
|
||||||
|
|
||||||
#define AB8500_POWERUP 0x00
|
#define AB8500_POWERUP 0x00
|
||||||
|
|
Loading…
Reference in New Issue