audio-driver: update to support 32 channels
update asm/adm/afe drivers to support 32 channels. Change-Id: Ia231eb6a0fb545569f0f8e1f2442432d761866e9 Signed-off-by: Cong Tang <congt@codeaurora.org>
This commit is contained in:
parent
fa9e9c3ac9
commit
04a6cfa44e
@ -91,7 +91,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 16,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -105,7 +105,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 16,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -124,7 +124,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -138,7 +138,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -184,7 +184,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 6,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -198,7 +198,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -217,7 +217,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -237,7 +237,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -251,7 +251,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -270,7 +270,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -284,7 +284,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -303,7 +303,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 16,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -323,7 +323,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -337,7 +337,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -2140,7 +2140,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2151,7 +2151,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -2332,7 +2332,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2364,7 +2364,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2384,7 +2384,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2404,7 +2404,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2424,7 +2424,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2444,7 +2444,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2464,7 +2464,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2478,7 +2478,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -2546,7 +2546,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
@ -2565,7 +2565,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
@ -2584,7 +2584,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
@ -2604,7 +2604,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
@ -2618,7 +2618,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -2630,16 +2630,16 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
.playback = {
|
||||
.stream_name = "MultiMedia21 Playback",
|
||||
.aif_name = "MM_DL21",
|
||||
.rates = (SNDRV_PCM_RATE_8000_384000|
|
||||
.rates = (SNDRV_PCM_RATE_8000_384000 |
|
||||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 384000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "MultiMedia21 Capture",
|
||||
@ -2651,7 +2651,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
@ -2708,7 +2708,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
@ -2727,7 +2727,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.channels_max = 32,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
|
@ -8144,6 +8144,9 @@ static int msm_dai_q6_tdm_set_tdm_slot(struct snd_soc_dai *dai,
|
||||
case 16:
|
||||
cap_mask = 0xFFFF;
|
||||
break;
|
||||
case 32:
|
||||
cap_mask = 0xFFFFFFFF;
|
||||
break;
|
||||
default:
|
||||
dev_err(dai->dev, "%s: invalid slots %d\n",
|
||||
__func__, slots);
|
||||
@ -8293,6 +8296,8 @@ static int msm_dai_q6_tdm_set_channel_map(struct snd_soc_dai *dai,
|
||||
dev_get_drvdata(dai->dev);
|
||||
struct afe_param_id_slot_mapping_cfg *slot_mapping =
|
||||
&dai_data->port_cfg.slot_mapping;
|
||||
struct afe_param_id_slot_mapping_cfg_v2 *slot_mapping_v2 =
|
||||
&dai_data->port_cfg.slot_mapping_v2;
|
||||
int i = 0;
|
||||
|
||||
dev_dbg(dai->dev, "%s: dai id = 0x%x\n", __func__, dai->id);
|
||||
@ -8346,23 +8351,49 @@ static int msm_dai_q6_tdm_set_channel_map(struct snd_soc_dai *dai,
|
||||
case AFE_PORT_ID_SENARY_TDM_RX_5:
|
||||
case AFE_PORT_ID_SENARY_TDM_RX_6:
|
||||
case AFE_PORT_ID_SENARY_TDM_RX_7:
|
||||
if (!rx_slot) {
|
||||
dev_err(dai->dev, "%s: rx slot not found\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (rx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT) {
|
||||
dev_err(dai->dev, "%s: invalid rx num %d\n", __func__,
|
||||
rx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (q6core_get_avcs_api_version_per_service(
|
||||
APRV2_IDS_SERVICE_ID_ADSP_AFE_V) >= AFE_API_VERSION_V3) {
|
||||
if (!rx_slot) {
|
||||
dev_err(dai->dev, "%s: rx slot not found\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (rx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT_V2) {
|
||||
dev_err(dai->dev, "%s: invalid rx num %d\n",
|
||||
__func__,
|
||||
rx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < rx_num; i++)
|
||||
slot_mapping->offset[i] = rx_slot[i];
|
||||
for (i = rx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT; i++)
|
||||
slot_mapping->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
for (i = 0; i < rx_num; i++)
|
||||
slot_mapping_v2->offset[i] = rx_slot[i];
|
||||
for (i = rx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT_V2;
|
||||
i++)
|
||||
slot_mapping_v2->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
|
||||
slot_mapping->num_channel = rx_num;
|
||||
slot_mapping_v2->num_channel = rx_num;
|
||||
} else {
|
||||
if (!rx_slot) {
|
||||
dev_err(dai->dev, "%s: rx slot not found\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (rx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT) {
|
||||
dev_err(dai->dev, "%s: invalid rx num %d\n",
|
||||
__func__,
|
||||
rx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < rx_num; i++)
|
||||
slot_mapping->offset[i] = rx_slot[i];
|
||||
for (i = rx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT; i++)
|
||||
slot_mapping->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
|
||||
slot_mapping->num_channel = rx_num;
|
||||
}
|
||||
break;
|
||||
case AFE_PORT_ID_PRIMARY_TDM_TX:
|
||||
case AFE_PORT_ID_PRIMARY_TDM_TX_1:
|
||||
@ -8412,23 +8443,49 @@ static int msm_dai_q6_tdm_set_channel_map(struct snd_soc_dai *dai,
|
||||
case AFE_PORT_ID_SENARY_TDM_TX_5:
|
||||
case AFE_PORT_ID_SENARY_TDM_TX_6:
|
||||
case AFE_PORT_ID_SENARY_TDM_TX_7:
|
||||
if (!tx_slot) {
|
||||
dev_err(dai->dev, "%s: tx slot not found\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (tx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT) {
|
||||
dev_err(dai->dev, "%s: invalid tx num %d\n", __func__,
|
||||
tx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (q6core_get_avcs_api_version_per_service(
|
||||
APRV2_IDS_SERVICE_ID_ADSP_AFE_V) >= AFE_API_VERSION_V3) {
|
||||
if (!tx_slot) {
|
||||
dev_err(dai->dev, "%s: tx slot not found\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (tx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT_V2) {
|
||||
dev_err(dai->dev, "%s: invalid tx num %d\n",
|
||||
__func__,
|
||||
tx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < tx_num; i++)
|
||||
slot_mapping->offset[i] = tx_slot[i];
|
||||
for (i = tx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT; i++)
|
||||
slot_mapping->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
for (i = 0; i < tx_num; i++)
|
||||
slot_mapping_v2->offset[i] = tx_slot[i];
|
||||
for (i = tx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT_V2;
|
||||
i++)
|
||||
slot_mapping_v2->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
|
||||
slot_mapping->num_channel = tx_num;
|
||||
slot_mapping_v2->num_channel = tx_num;
|
||||
} else {
|
||||
if (!tx_slot) {
|
||||
dev_err(dai->dev, "%s: tx slot not found\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (tx_num > AFE_PORT_MAX_AUDIO_CHAN_CNT) {
|
||||
dev_err(dai->dev, "%s: invalid tx num %d\n",
|
||||
__func__,
|
||||
tx_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < tx_num; i++)
|
||||
slot_mapping->offset[i] = tx_slot[i];
|
||||
for (i = tx_num; i < AFE_PORT_MAX_AUDIO_CHAN_CNT; i++)
|
||||
slot_mapping->offset[i] =
|
||||
AFE_SLOT_MAPPING_OFFSET_INVALID;
|
||||
|
||||
slot_mapping->num_channel = tx_num;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
dev_err(dai->dev, "%s: invalid dai id 0x%x\n",
|
||||
@ -8452,6 +8509,8 @@ static int msm_dai_q6_tdm_hw_params(struct snd_pcm_substream *substream,
|
||||
&dai_data->port_cfg.tdm;
|
||||
struct afe_param_id_slot_mapping_cfg *slot_mapping =
|
||||
&dai_data->port_cfg.slot_mapping;
|
||||
struct afe_param_id_slot_mapping_cfg_v2 *slot_mapping_v2 =
|
||||
&dai_data->port_cfg.slot_mapping_v2;
|
||||
struct afe_param_id_custom_tdm_header_cfg *custom_tdm_header =
|
||||
&dai_data->port_cfg.custom_tdm_header;
|
||||
|
||||
@ -8459,7 +8518,7 @@ static int msm_dai_q6_tdm_hw_params(struct snd_pcm_substream *substream,
|
||||
__func__, dev_name(dai->dev));
|
||||
|
||||
if ((params_channels(params) == 0) ||
|
||||
(params_channels(params) > 8)) {
|
||||
(params_channels(params) > 32)) {
|
||||
dev_err(dai->dev, "%s: invalid param channels %d\n",
|
||||
__func__, params_channels(params));
|
||||
return -EINVAL;
|
||||
@ -8561,32 +8620,88 @@ static int msm_dai_q6_tdm_hw_params(struct snd_pcm_substream *substream,
|
||||
tdm->ctrl_data_out_enable,
|
||||
tdm->ctrl_invert_sync_pulse,
|
||||
tdm->ctrl_sync_data_delay);
|
||||
if (q6core_get_avcs_api_version_per_service(
|
||||
APRV2_IDS_SERVICE_ID_ADSP_AFE_V) >= AFE_API_VERSION_V3) {
|
||||
/*
|
||||
* update slot mapping v2 config param
|
||||
* NOTE: channels/rate/bitwidth are per stream property
|
||||
*/
|
||||
slot_mapping_v2->bitwidth = dai_data->bitwidth;
|
||||
|
||||
/*
|
||||
* update slot mapping config param
|
||||
* NOTE: channels/rate/bitwidth are per stream property
|
||||
*/
|
||||
slot_mapping->bitwidth = dai_data->bitwidth;
|
||||
|
||||
pr_debug("%s: SLOT MAPPING:\n"
|
||||
pr_debug("%s: SLOT MAPPING_V2:\n"
|
||||
"num_channel=%d bitwidth=%d data_align=0x%x\n",
|
||||
__func__,
|
||||
slot_mapping->num_channel,
|
||||
slot_mapping->bitwidth,
|
||||
slot_mapping->data_align_type);
|
||||
pr_debug("%s: SLOT MAPPING:\n"
|
||||
slot_mapping_v2->num_channel,
|
||||
slot_mapping_v2->bitwidth,
|
||||
slot_mapping_v2->data_align_type);
|
||||
pr_debug("%s: SLOT MAPPING V2:\n"
|
||||
"offset[0]=0x%x offset[1]=0x%x offset[2]=0x%x offset[3]=0x%x\n"
|
||||
"offset[4]=0x%x offset[5]=0x%x offset[6]=0x%x offset[7]=0x%x\n",
|
||||
"offset[4]=0x%x offset[5]=0x%x offset[6]=0x%x offset[7]=0x%x\n"
|
||||
"offset[8]=0x%x offset[9]=0x%x offset[10]=0x%x offset[11]=0x%x\n"
|
||||
"offset[12]=0x%x offset[13]=0x%x offset[14]=0x%x offset[15]=0x%x\n"
|
||||
"offset[16]=0x%x offset[17]=0x%x offset[18]=0x%x offset[19]=0x%x\n"
|
||||
"offset[20]=0x%x offset[21]=0x%x offset[22]=0x%x offset[23]=0x%x\n"
|
||||
"offset[24]=0x%x offset[25]=0x%x offset[26]=0x%x offset[27]=0x%x\n"
|
||||
"offset[28]=0x%x offset[29]=0x%x offset[30]=0x%x offset[31]=0x%x\n",
|
||||
__func__,
|
||||
slot_mapping->offset[0],
|
||||
slot_mapping->offset[1],
|
||||
slot_mapping->offset[2],
|
||||
slot_mapping->offset[3],
|
||||
slot_mapping->offset[4],
|
||||
slot_mapping->offset[5],
|
||||
slot_mapping->offset[6],
|
||||
slot_mapping->offset[7]);
|
||||
slot_mapping_v2->offset[0],
|
||||
slot_mapping_v2->offset[1],
|
||||
slot_mapping_v2->offset[2],
|
||||
slot_mapping_v2->offset[3],
|
||||
slot_mapping_v2->offset[4],
|
||||
slot_mapping_v2->offset[5],
|
||||
slot_mapping_v2->offset[6],
|
||||
slot_mapping_v2->offset[7],
|
||||
slot_mapping_v2->offset[8],
|
||||
slot_mapping_v2->offset[9],
|
||||
slot_mapping_v2->offset[10],
|
||||
slot_mapping_v2->offset[11],
|
||||
slot_mapping_v2->offset[12],
|
||||
slot_mapping_v2->offset[13],
|
||||
slot_mapping_v2->offset[14],
|
||||
slot_mapping_v2->offset[15],
|
||||
slot_mapping_v2->offset[16],
|
||||
slot_mapping_v2->offset[17],
|
||||
slot_mapping_v2->offset[18],
|
||||
slot_mapping_v2->offset[19],
|
||||
slot_mapping_v2->offset[20],
|
||||
slot_mapping_v2->offset[21],
|
||||
slot_mapping_v2->offset[22],
|
||||
slot_mapping_v2->offset[23],
|
||||
slot_mapping_v2->offset[24],
|
||||
slot_mapping_v2->offset[25],
|
||||
slot_mapping_v2->offset[26],
|
||||
slot_mapping_v2->offset[27],
|
||||
slot_mapping_v2->offset[28],
|
||||
slot_mapping_v2->offset[29],
|
||||
slot_mapping_v2->offset[30],
|
||||
slot_mapping_v2->offset[31]);
|
||||
} else {
|
||||
/*
|
||||
* update slot mapping config param
|
||||
* NOTE: channels/rate/bitwidth are per stream property
|
||||
*/
|
||||
slot_mapping->bitwidth = dai_data->bitwidth;
|
||||
|
||||
pr_debug("%s: SLOT MAPPING:\n"
|
||||
"num_channel=%d bitwidth=%d data_align=0x%x\n",
|
||||
__func__,
|
||||
slot_mapping->num_channel,
|
||||
slot_mapping->bitwidth,
|
||||
slot_mapping->data_align_type);
|
||||
pr_debug("%s: SLOT MAPPING:\n"
|
||||
"offset[0]=0x%x offset[1]=0x%x offset[2]=0x%x offset[3]=0x%x\n"
|
||||
"offset[4]=0x%x offset[5]=0x%x offset[6]=0x%x offset[7]=0x%x\n",
|
||||
__func__,
|
||||
slot_mapping->offset[0],
|
||||
slot_mapping->offset[1],
|
||||
slot_mapping->offset[2],
|
||||
slot_mapping->offset[3],
|
||||
slot_mapping->offset[4],
|
||||
slot_mapping->offset[5],
|
||||
slot_mapping->offset[6],
|
||||
slot_mapping->offset[7]);
|
||||
}
|
||||
/*
|
||||
* update custom header config param
|
||||
* NOTE: channels/rate/bitwidth are per playback stream property.
|
||||
@ -10922,6 +11037,8 @@ static int msm_dai_q6_tdm_dev_probe(struct platform_device *pdev)
|
||||
/* TDM SLOT MAPPING CFG -- set default */
|
||||
dai_data->port_cfg.slot_mapping.minor_version =
|
||||
AFE_API_VERSION_SLOT_MAPPING_CONFIG;
|
||||
dai_data->port_cfg.slot_mapping_v2.minor_version =
|
||||
AFE_API_VERSION_SLOT_MAPPING_CONFIG_V2;
|
||||
|
||||
/* CUSTOM TDM HEADER CFG */
|
||||
custom_tdm_header = &dai_data->port_cfg.custom_tdm_header;
|
||||
|
66
dsp/q6adm.c
66
dsp/q6adm.c
@ -2684,6 +2684,39 @@ static int adm_arrange_mch_map_v8(
|
||||
ep_payload->dev_channel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
ep_payload->dev_channel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
ep_payload->dev_channel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
} else if (channel_mode == 32) {
|
||||
ep_payload->dev_channel_mapping[0] = PCM_CHANNEL_FL;
|
||||
ep_payload->dev_channel_mapping[1] = PCM_CHANNEL_FR;
|
||||
ep_payload->dev_channel_mapping[2] = PCM_CHANNEL_LFE;
|
||||
ep_payload->dev_channel_mapping[3] = PCM_CHANNEL_FC;
|
||||
ep_payload->dev_channel_mapping[4] = PCM_CHANNEL_LS;
|
||||
ep_payload->dev_channel_mapping[5] = PCM_CHANNEL_RS;
|
||||
ep_payload->dev_channel_mapping[6] = PCM_CHANNEL_LB;
|
||||
ep_payload->dev_channel_mapping[7] = PCM_CHANNEL_RB;
|
||||
ep_payload->dev_channel_mapping[8] = PCM_CHANNEL_CS;
|
||||
ep_payload->dev_channel_mapping[9] = PCM_CHANNEL_TS;
|
||||
ep_payload->dev_channel_mapping[10] = PCM_CHANNEL_CVH;
|
||||
ep_payload->dev_channel_mapping[11] = PCM_CHANNEL_MS;
|
||||
ep_payload->dev_channel_mapping[12] = PCM_CHANNEL_FLC;
|
||||
ep_payload->dev_channel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
ep_payload->dev_channel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
ep_payload->dev_channel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
ep_payload->dev_channel_mapping[16] = PCM_CHANNEL_LFE2;
|
||||
ep_payload->dev_channel_mapping[17] = PCM_CHANNEL_SL;
|
||||
ep_payload->dev_channel_mapping[18] = PCM_CHANNEL_SR;
|
||||
ep_payload->dev_channel_mapping[19] = PCM_CHANNEL_TFL;
|
||||
ep_payload->dev_channel_mapping[20] = PCM_CHANNEL_TFR;
|
||||
ep_payload->dev_channel_mapping[21] = PCM_CHANNEL_TC;
|
||||
ep_payload->dev_channel_mapping[22] = PCM_CHANNEL_TBL;
|
||||
ep_payload->dev_channel_mapping[23] = PCM_CHANNEL_TBR;
|
||||
ep_payload->dev_channel_mapping[24] = PCM_CHANNEL_TSL;
|
||||
ep_payload->dev_channel_mapping[25] = PCM_CHANNEL_TSR;
|
||||
ep_payload->dev_channel_mapping[26] = PCM_CHANNEL_TBC;
|
||||
ep_payload->dev_channel_mapping[27] = PCM_CHANNEL_BFC;
|
||||
ep_payload->dev_channel_mapping[28] = PCM_CHANNEL_BFL;
|
||||
ep_payload->dev_channel_mapping[29] = PCM_CHANNEL_BFR;
|
||||
ep_payload->dev_channel_mapping[30] = PCM_CHANNEL_LW;
|
||||
ep_payload->dev_channel_mapping[31] = PCM_CHANNEL_RW;
|
||||
} else {
|
||||
pr_err("%s: invalid num_chan %d\n", __func__,
|
||||
channel_mode);
|
||||
@ -2783,6 +2816,39 @@ static int adm_arrange_mch_ep2_map_v8(
|
||||
ep_payload->dev_channel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
ep_payload->dev_channel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
ep_payload->dev_channel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
} else if (channel_mode == 32) {
|
||||
ep_payload->dev_channel_mapping[0] = PCM_CHANNEL_FL;
|
||||
ep_payload->dev_channel_mapping[1] = PCM_CHANNEL_FR;
|
||||
ep_payload->dev_channel_mapping[2] = PCM_CHANNEL_LFE;
|
||||
ep_payload->dev_channel_mapping[3] = PCM_CHANNEL_FC;
|
||||
ep_payload->dev_channel_mapping[4] = PCM_CHANNEL_LS;
|
||||
ep_payload->dev_channel_mapping[5] = PCM_CHANNEL_RS;
|
||||
ep_payload->dev_channel_mapping[6] = PCM_CHANNEL_LB;
|
||||
ep_payload->dev_channel_mapping[7] = PCM_CHANNEL_RB;
|
||||
ep_payload->dev_channel_mapping[8] = PCM_CHANNEL_CS;
|
||||
ep_payload->dev_channel_mapping[9] = PCM_CHANNEL_TS;
|
||||
ep_payload->dev_channel_mapping[10] = PCM_CHANNEL_CVH;
|
||||
ep_payload->dev_channel_mapping[11] = PCM_CHANNEL_MS;
|
||||
ep_payload->dev_channel_mapping[12] = PCM_CHANNEL_FLC;
|
||||
ep_payload->dev_channel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
ep_payload->dev_channel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
ep_payload->dev_channel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
ep_payload->dev_channel_mapping[16] = PCM_CHANNEL_LFE2;
|
||||
ep_payload->dev_channel_mapping[17] = PCM_CHANNEL_SL;
|
||||
ep_payload->dev_channel_mapping[18] = PCM_CHANNEL_SR;
|
||||
ep_payload->dev_channel_mapping[19] = PCM_CHANNEL_TFL;
|
||||
ep_payload->dev_channel_mapping[20] = PCM_CHANNEL_TFR;
|
||||
ep_payload->dev_channel_mapping[21] = PCM_CHANNEL_TC;
|
||||
ep_payload->dev_channel_mapping[22] = PCM_CHANNEL_TBL;
|
||||
ep_payload->dev_channel_mapping[23] = PCM_CHANNEL_TBR;
|
||||
ep_payload->dev_channel_mapping[24] = PCM_CHANNEL_TSL;
|
||||
ep_payload->dev_channel_mapping[25] = PCM_CHANNEL_TSR;
|
||||
ep_payload->dev_channel_mapping[26] = PCM_CHANNEL_TBC;
|
||||
ep_payload->dev_channel_mapping[27] = PCM_CHANNEL_BFC;
|
||||
ep_payload->dev_channel_mapping[28] = PCM_CHANNEL_BFL;
|
||||
ep_payload->dev_channel_mapping[29] = PCM_CHANNEL_BFR;
|
||||
ep_payload->dev_channel_mapping[30] = PCM_CHANNEL_LW;
|
||||
ep_payload->dev_channel_mapping[31] = PCM_CHANNEL_RW;
|
||||
} else {
|
||||
pr_err("%s: invalid num_chan %d\n", __func__,
|
||||
channel_mode);
|
||||
|
41
dsp/q6afe.c
41
dsp/q6afe.c
@ -3364,6 +3364,36 @@ int afe_send_slot_mapping_cfg(
|
||||
return ret;
|
||||
}
|
||||
|
||||
int afe_send_slot_mapping_cfg_v2(
|
||||
struct afe_param_id_slot_mapping_cfg_v2 *slot_mapping_cfg,
|
||||
u16 port_id)
|
||||
{
|
||||
struct param_hdr_v3 param_hdr;
|
||||
int ret = 0;
|
||||
|
||||
if (!slot_mapping_cfg) {
|
||||
pr_err("%s: Error, no configuration data\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pr_debug("%s: port id: 0x%x\n", __func__, port_id);
|
||||
|
||||
memset(¶m_hdr, 0, sizeof(param_hdr));
|
||||
param_hdr.module_id = AFE_MODULE_TDM;
|
||||
param_hdr.instance_id = INSTANCE_ID_0;
|
||||
param_hdr.param_id = AFE_PARAM_ID_PORT_SLOT_MAPPING_CONFIG;
|
||||
param_hdr.param_size = sizeof(struct afe_param_id_slot_mapping_cfg_v2);
|
||||
|
||||
ret = q6afe_pack_and_set_param_in_band(port_id,
|
||||
q6audio_get_port_index(port_id),
|
||||
param_hdr,
|
||||
(u8 *) slot_mapping_cfg);
|
||||
if (ret < 0)
|
||||
pr_err("%s: AFE send slot mapping for port 0x%x failed ret = %d\n",
|
||||
__func__, port_id, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int afe_send_custom_tdm_header_cfg(
|
||||
struct afe_param_id_custom_tdm_header_cfg *custom_tdm_header_cfg,
|
||||
u16 port_id)
|
||||
@ -3503,8 +3533,15 @@ int afe_tdm_port_start(u16 port_id, struct afe_tdm_port_config *tdm_port,
|
||||
goto fail_cmd;
|
||||
}
|
||||
|
||||
ret = afe_send_slot_mapping_cfg(&tdm_port->slot_mapping,
|
||||
port_id);
|
||||
if (q6core_get_avcs_api_version_per_service(
|
||||
APRV2_IDS_SERVICE_ID_ADSP_AFE_V) >= AFE_API_VERSION_V3)
|
||||
ret = afe_send_slot_mapping_cfg_v2(
|
||||
&tdm_port->slot_mapping_v2, port_id);
|
||||
else
|
||||
ret = afe_send_slot_mapping_cfg(
|
||||
&tdm_port->slot_mapping,
|
||||
port_id);
|
||||
|
||||
if (ret < 0) {
|
||||
pr_err("%s: afe send failed %d\n", __func__, ret);
|
||||
goto fail_cmd;
|
||||
|
33
dsp/q6asm.c
33
dsp/q6asm.c
@ -5766,6 +5766,39 @@ int q6asm_map_channels(u8 *channel_mapping, uint32_t channels,
|
||||
lchannel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
lchannel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
lchannel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
} else if (channels == 32) {
|
||||
lchannel_mapping[0] = PCM_CHANNEL_FL;
|
||||
lchannel_mapping[1] = PCM_CHANNEL_FR;
|
||||
lchannel_mapping[2] = PCM_CHANNEL_LFE;
|
||||
lchannel_mapping[3] = PCM_CHANNEL_FC;
|
||||
lchannel_mapping[4] = PCM_CHANNEL_LS;
|
||||
lchannel_mapping[5] = PCM_CHANNEL_RS;
|
||||
lchannel_mapping[6] = PCM_CHANNEL_LB;
|
||||
lchannel_mapping[7] = PCM_CHANNEL_RB;
|
||||
lchannel_mapping[8] = PCM_CHANNEL_CS;
|
||||
lchannel_mapping[9] = PCM_CHANNEL_TS;
|
||||
lchannel_mapping[10] = PCM_CHANNEL_CVH;
|
||||
lchannel_mapping[11] = PCM_CHANNEL_MS;
|
||||
lchannel_mapping[12] = PCM_CHANNEL_FLC;
|
||||
lchannel_mapping[13] = PCM_CHANNEL_FRC;
|
||||
lchannel_mapping[14] = PCM_CHANNEL_RLC;
|
||||
lchannel_mapping[15] = PCM_CHANNEL_RRC;
|
||||
lchannel_mapping[16] = PCM_CHANNEL_LFE2;
|
||||
lchannel_mapping[17] = PCM_CHANNEL_SL;
|
||||
lchannel_mapping[18] = PCM_CHANNEL_SR;
|
||||
lchannel_mapping[19] = PCM_CHANNEL_TFL;
|
||||
lchannel_mapping[20] = PCM_CHANNEL_TFR;
|
||||
lchannel_mapping[21] = PCM_CHANNEL_TC;
|
||||
lchannel_mapping[22] = PCM_CHANNEL_TBL;
|
||||
lchannel_mapping[23] = PCM_CHANNEL_TBR;
|
||||
lchannel_mapping[24] = PCM_CHANNEL_TSL;
|
||||
lchannel_mapping[25] = PCM_CHANNEL_TSR;
|
||||
lchannel_mapping[26] = PCM_CHANNEL_TBC;
|
||||
lchannel_mapping[27] = PCM_CHANNEL_BFC;
|
||||
lchannel_mapping[28] = PCM_CHANNEL_BFL;
|
||||
lchannel_mapping[29] = PCM_CHANNEL_BFR;
|
||||
lchannel_mapping[30] = PCM_CHANNEL_LW;
|
||||
lchannel_mapping[31] = PCM_CHANNEL_RW;
|
||||
} else {
|
||||
pr_err("%s: ERROR.unsupported num_ch = %u\n",
|
||||
__func__, channels);
|
||||
|
@ -3191,6 +3191,8 @@ struct afe_param_id_internal_bt_fm_cfg {
|
||||
|
||||
#define AFE_PORT_MAX_AUDIO_CHAN_CNT 0x8
|
||||
|
||||
#define AFE_PORT_MAX_AUDIO_CHAN_CNT_V2 0x20
|
||||
|
||||
/* Payload of the #AFE_PORT_CMD_SLIMBUS_CONFIG command's SLIMbus
|
||||
* port configuration parameter.
|
||||
*/
|
||||
@ -3649,6 +3651,10 @@ struct afe_param_id_tdm_cfg {
|
||||
*/
|
||||
#define AFE_API_VERSION_SLOT_MAPPING_CONFIG 0x1
|
||||
|
||||
/** Version information used to handle future additions to slot mapping
|
||||
* configuration support 32 channels.
|
||||
*/
|
||||
#define AFE_API_VERSION_SLOT_MAPPING_CONFIG_V2 0x2
|
||||
/* Data align type */
|
||||
#define AFE_SLOT_MAPPING_DATA_ALIGN_MSB 0
|
||||
#define AFE_SLOT_MAPPING_DATA_ALIGN_LSB 1
|
||||
@ -3698,9 +3704,52 @@ struct afe_param_id_slot_mapping_cfg {
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
/* ID of the parameter used by #AFE_MODULE_TDM to configure
|
||||
* the customer TDM header. #AFE_PORT_CMD_SET_PARAM can use this parameter ID.
|
||||
*/
|
||||
/* Payload of the AFE_PARAM_ID_PORT_SLOT_MAPPING_CONFIG_V2
|
||||
* command's TDM configuration parameter.
|
||||
*/
|
||||
struct afe_param_id_slot_mapping_cfg_v2 {
|
||||
u32 minor_version;
|
||||
/**< Minor version used for tracking TDM slot configuration.
|
||||
* @values #AFE_API_VERSION_TDM_SLOT_CONFIG
|
||||
*/
|
||||
|
||||
u16 num_channel;
|
||||
/**< number of channel of the audio sample.
|
||||
* @values 1, 2, 4, 6, 8, 16, 32 @tablebulletend
|
||||
*/
|
||||
|
||||
u16 bitwidth;
|
||||
/**< Slot bit width for each channel
|
||||
* @values 16, 24, 32
|
||||
*/
|
||||
|
||||
u32 data_align_type;
|
||||
/**< indicate how data packed from slot_offset for 32 slot bit width
|
||||
* in case of sample bit width is 24.
|
||||
* @values
|
||||
* #AFE_SLOT_MAPPING_DATA_ALIGN_MSB
|
||||
* #AFE_SLOT_MAPPING_DATA_ALIGN_LSB
|
||||
*/
|
||||
|
||||
u16 offset[AFE_PORT_MAX_AUDIO_CHAN_CNT_V2];
|
||||
/**< Array of the slot mapping start offset in bytes for this frame.
|
||||
* The bytes is counted from 0. The 0 is mapped to the 1st byte
|
||||
* in or out of the digital serial data line this sub-frame belong to.
|
||||
* slot_offset[] setting is per-channel based.
|
||||
* The max num of channel supported is 8.
|
||||
* The valid offset value must always be continuly placed in
|
||||
* from index 0.
|
||||
* Set offset as AFE_SLOT_MAPPING_OFFSET_INVALID for not used arrays.
|
||||
* If "slot_bitwidth_per_channel" is 32 and "sample_bitwidth" is 24,
|
||||
* "data_align_type" is used to indicate how 24 bit sample data in
|
||||
* aligning with 32 bit slot width per-channel.
|
||||
* @values, in byte
|
||||
*/
|
||||
} __packed;
|
||||
|
||||
/** ID of the parameter used by #AFE_MODULE_TDM to configure
|
||||
the customer TDM header. #AFE_PORT_CMD_SET_PARAM can use this parameter ID.
|
||||
*/
|
||||
#define AFE_PARAM_ID_CUSTOM_TDM_HEADER_CONFIG 0x00010298
|
||||
|
||||
/* Version information used to handle future additions to custom TDM header
|
||||
@ -3768,6 +3817,7 @@ struct afe_param_id_custom_tdm_header_cfg {
|
||||
struct afe_tdm_port_config {
|
||||
struct afe_param_id_tdm_cfg tdm;
|
||||
struct afe_param_id_slot_mapping_cfg slot_mapping;
|
||||
struct afe_param_id_slot_mapping_cfg_v2 slot_mapping_v2;
|
||||
struct afe_param_id_custom_tdm_header_cfg custom_tdm_header;
|
||||
} __packed;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user