Skip to content

Commit cd60dec

Browse files
Venkata-Prasad-Potturubroonie
authored andcommitted
ASoC: amd: acp: Refactor TDM slots selction based on acp revision id
Refactor TDM slots selection based on acp revision id. Signed-off-by: Venkata Prasad Potturu <venkataprasad.potturu@amd.com> Link: https://patch.msgid.link/20240903113427.182997-2-venkataprasad.potturu@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent dc70fd0 commit cd60dec

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

sound/soc/amd/acp/acp-i2s.c

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
9595
{
9696
struct device *dev = dai->component->dev;
9797
struct acp_dev_data *adata = snd_soc_dai_get_drvdata(dai);
98+
struct acp_chip_info *chip;
9899
struct acp_stream *stream;
99100
int slot_len, no_of_slots;
100101

102+
chip = dev_get_platdata(dev);
101103
switch (slot_width) {
102104
case SLOT_WIDTH_8:
103105
slot_len = 8;
@@ -116,28 +118,44 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
116118
return -EINVAL;
117119
}
118120

119-
switch (slots) {
120-
case 1 ... 7:
121-
no_of_slots = slots;
122-
break;
123-
case 8:
124-
no_of_slots = 0;
121+
switch (chip->acp_rev) {
122+
case ACP3X_DEV:
123+
case ACP6X_DEV:
124+
switch (slots) {
125+
case 1 ... 7:
126+
no_of_slots = slots;
127+
break;
128+
case 8:
129+
no_of_slots = 0;
130+
break;
131+
default:
132+
dev_err(dev, "Unsupported slots %d\n", slots);
133+
return -EINVAL;
134+
}
125135
break;
126136
default:
127-
dev_err(dev, "Unsupported slots %d\n", slots);
137+
dev_err(dev, "Unknown chip revision %d\n", chip->acp_rev);
128138
return -EINVAL;
129139
}
130140

131141
slots = no_of_slots;
132142

133143
spin_lock_irq(&adata->acp_lock);
134144
list_for_each_entry(stream, &adata->stream_list, list) {
135-
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
136-
adata->tdm_tx_fmt[stream->dai_id - 1] =
145+
switch (chip->acp_rev) {
146+
case ACP3X_DEV:
147+
case ACP6X_DEV:
148+
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
149+
adata->tdm_tx_fmt[stream->dai_id - 1] =
137150
FRM_LEN | (slots << 15) | (slot_len << 18);
138-
else if (rx_mask && stream->dir == SNDRV_PCM_STREAM_CAPTURE)
139-
adata->tdm_rx_fmt[stream->dai_id - 1] =
151+
else if (rx_mask && stream->dir == SNDRV_PCM_STREAM_CAPTURE)
152+
adata->tdm_rx_fmt[stream->dai_id - 1] =
140153
FRM_LEN | (slots << 15) | (slot_len << 18);
154+
break;
155+
default:
156+
dev_err(dev, "Unknown chip revision %d\n", chip->acp_rev);
157+
return -EINVAL;
158+
}
141159
}
142160
spin_unlock_irq(&adata->acp_lock);
143161
return 0;

0 commit comments

Comments
 (0)