mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
ASoC: amd: acp: refactor acp version
Merge series from Vijendar Mukunda <Vijendar.Mukunda@amd.com>: Currently different logics being used in the code for acp version differentiation. This patch series refactors the code to use acp pci revision id for handling acp version specific code.
This commit is contained in:
commit
5aa3027e20
|
|
@ -59,9 +59,9 @@ static inline void acp_set_i2s_clk(struct acp_dev_data *adata, int dai_id)
|
|||
val |= BIT(1);
|
||||
|
||||
switch (chip->acp_rev) {
|
||||
case ACP63_DEV:
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
val |= FIELD_PREP(ACP63_LRCLK_DIV_FIELD, adata->lrclk_div);
|
||||
val |= FIELD_PREP(ACP63_BCLK_DIV_FIELD, adata->bclk_div);
|
||||
break;
|
||||
|
|
@ -121,8 +121,8 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
|
|||
}
|
||||
|
||||
switch (chip->acp_rev) {
|
||||
case ACP3X_DEV:
|
||||
case ACP6X_DEV:
|
||||
case ACP_RN_PCI_ID:
|
||||
case ACP_RMB_PCI_ID:
|
||||
switch (slots) {
|
||||
case 1 ... 7:
|
||||
no_of_slots = slots;
|
||||
|
|
@ -135,9 +135,9 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
|
|||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
case ACP63_DEV:
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
switch (slots) {
|
||||
case 1 ... 31:
|
||||
no_of_slots = slots;
|
||||
|
|
@ -160,8 +160,8 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
|
|||
spin_lock_irq(&adata->acp_lock);
|
||||
list_for_each_entry(stream, &adata->stream_list, list) {
|
||||
switch (chip->acp_rev) {
|
||||
case ACP3X_DEV:
|
||||
case ACP6X_DEV:
|
||||
case ACP_RN_PCI_ID:
|
||||
case ACP_RMB_PCI_ID:
|
||||
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
adata->tdm_tx_fmt[stream->dai_id - 1] =
|
||||
FRM_LEN | (slots << 15) | (slot_len << 18);
|
||||
|
|
@ -169,9 +169,9 @@ static int acp_i2s_set_tdm_slot(struct snd_soc_dai *dai, u32 tx_mask, u32 rx_mas
|
|||
adata->tdm_rx_fmt[stream->dai_id - 1] =
|
||||
FRM_LEN | (slots << 15) | (slot_len << 18);
|
||||
break;
|
||||
case ACP63_DEV:
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
if (tx_mask && stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
adata->tdm_tx_fmt[stream->dai_id - 1] =
|
||||
FRM_LEN | (slots << 13) | (slot_len << 18);
|
||||
|
|
@ -534,7 +534,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_I2S_TX_FIFOADDR(adata);
|
||||
reg_fifo_size = ACP_I2S_TX_FIFOSIZE(adata);
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_SP_TX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
@ -546,7 +546,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_I2S_RX_FIFOADDR(adata);
|
||||
reg_fifo_size = ACP_I2S_RX_FIFOSIZE(adata);
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_SP_RX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
@ -561,7 +561,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_BT_TX_FIFOADDR(adata);
|
||||
reg_fifo_size = ACP_BT_TX_FIFOSIZE(adata);
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_BT_TX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
@ -573,7 +573,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_BT_RX_FIFOADDR(adata);
|
||||
reg_fifo_size = ACP_BT_RX_FIFOSIZE(adata);
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_BT_RX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
@ -588,7 +588,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_HS_TX_FIFOADDR;
|
||||
reg_fifo_size = ACP_HS_TX_FIFOSIZE;
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_HS_TX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
@ -600,7 +600,7 @@ static int acp_i2s_prepare(struct snd_pcm_substream *substream, struct snd_soc_d
|
|||
reg_fifo_addr = ACP_HS_RX_FIFOADDR;
|
||||
reg_fifo_size = ACP_HS_RX_FIFOSIZE;
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
phy_addr = ACP7x_I2S_HS_RX_MEM_WINDOW_START;
|
||||
else
|
||||
phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset;
|
||||
|
|
|
|||
|
|
@ -257,20 +257,20 @@ static int acp_power_on(struct acp_chip_info *chip)
|
|||
|
||||
base = chip->base;
|
||||
switch (chip->acp_rev) {
|
||||
case ACP3X_DEV:
|
||||
case ACP_RN_PCI_ID:
|
||||
acp_pgfsm_stat_reg = ACP_PGFSM_STATUS;
|
||||
acp_pgfsm_ctrl_reg = ACP_PGFSM_CONTROL;
|
||||
break;
|
||||
case ACP6X_DEV:
|
||||
case ACP_RMB_PCI_ID:
|
||||
acp_pgfsm_stat_reg = ACP6X_PGFSM_STATUS;
|
||||
acp_pgfsm_ctrl_reg = ACP6X_PGFSM_CONTROL;
|
||||
break;
|
||||
case ACP63_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
acp_pgfsm_stat_reg = ACP63_PGFSM_STATUS;
|
||||
acp_pgfsm_ctrl_reg = ACP63_PGFSM_CONTROL;
|
||||
break;
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
acp_pgfsm_stat_reg = ACP70_PGFSM_STATUS;
|
||||
acp_pgfsm_ctrl_reg = ACP70_PGFSM_CONTROL;
|
||||
break;
|
||||
|
|
@ -322,7 +322,7 @@ int acp_init(struct acp_chip_info *chip)
|
|||
pr_err("ACP reset failed\n");
|
||||
return ret;
|
||||
}
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
writel(0, chip->base + ACP_ZSC_DSP_CTRL);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -337,7 +337,7 @@ int acp_deinit(struct acp_chip_info *chip)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (chip->acp_rev < ACP70_DEV)
|
||||
if (chip->acp_rev < ACP70_PCI_ID)
|
||||
writel(0, chip->base + ACP_CONTROL);
|
||||
else
|
||||
writel(0x01, chip->base + ACP_ZSC_DSP_CTRL);
|
||||
|
|
@ -448,20 +448,20 @@ void check_acp_config(struct pci_dev *pci, struct acp_chip_info *chip)
|
|||
u32 pdm_addr;
|
||||
|
||||
switch (chip->acp_rev) {
|
||||
case ACP3X_DEV:
|
||||
case ACP_RN_PCI_ID:
|
||||
pdm_addr = ACP_RENOIR_PDM_ADDR;
|
||||
check_acp3x_config(chip);
|
||||
break;
|
||||
case ACP6X_DEV:
|
||||
case ACP_RMB_PCI_ID:
|
||||
pdm_addr = ACP_REMBRANDT_PDM_ADDR;
|
||||
check_acp6x_config(chip);
|
||||
break;
|
||||
case ACP63_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
pdm_addr = ACP63_PDM_ADDR;
|
||||
check_acp6x_config(chip);
|
||||
break;
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
pdm_addr = ACP70_PDM_ADDR;
|
||||
check_acp70_config(chip);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ static struct acp_card_drvdata es83xx_rn_data = {
|
|||
.dmic_cpu_id = DMIC,
|
||||
.hs_codec_id = ES83XX,
|
||||
.dmic_codec_id = DMIC,
|
||||
.platform = RENOIR,
|
||||
};
|
||||
|
||||
static struct acp_card_drvdata max_nau8825_data = {
|
||||
|
|
@ -68,7 +67,6 @@ static struct acp_card_drvdata max_nau8825_data = {
|
|||
.amp_codec_id = MAX98360A,
|
||||
.dmic_codec_id = DMIC,
|
||||
.soc_mclk = true,
|
||||
.platform = REMBRANDT,
|
||||
.tdm_mode = false,
|
||||
};
|
||||
|
||||
|
|
@ -80,7 +78,6 @@ static struct acp_card_drvdata rt5682s_rt1019_rmb_data = {
|
|||
.amp_codec_id = RT1019,
|
||||
.dmic_codec_id = DMIC,
|
||||
.soc_mclk = true,
|
||||
.platform = REMBRANDT,
|
||||
.tdm_mode = false,
|
||||
};
|
||||
|
||||
|
|
@ -126,6 +123,7 @@ static int acp_asoc_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_card *card = NULL;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
|
||||
const struct dmi_system_id *dmi_id;
|
||||
struct acp_card_drvdata *acp_card_drvdata;
|
||||
int ret;
|
||||
|
|
@ -171,7 +169,9 @@ static int acp_asoc_probe(struct platform_device *pdev)
|
|||
goto out;
|
||||
}
|
||||
if (!strcmp(pdev->name, "acp-pdm-mach"))
|
||||
acp_card_drvdata->platform = *((int *)dev->platform_data);
|
||||
acp_card_drvdata->acp_rev = *((int *)dev->platform_data);
|
||||
else
|
||||
acp_card_drvdata->acp_rev = mach->mach_params.subsystem_rev;
|
||||
|
||||
dmi_id = dmi_first_match(acp_quirk_table);
|
||||
if (dmi_id && dmi_id->driver_data)
|
||||
|
|
|
|||
|
|
@ -1471,7 +1471,7 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
|
|||
if (drv_data->amp_cpu_id == I2S_SP) {
|
||||
links[i].name = "acp-amp-codec";
|
||||
links[i].id = AMP_BE_ID;
|
||||
if (drv_data->platform == RENOIR) {
|
||||
if (drv_data->acp_rev == ACP_RN_PCI_ID) {
|
||||
links[i].cpus = sof_sp;
|
||||
links[i].num_cpus = ARRAY_SIZE(sof_sp);
|
||||
} else {
|
||||
|
|
@ -1647,16 +1647,21 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
|
|||
links[i].id = HEADSET_BE_ID;
|
||||
links[i].cpus = i2s_hs;
|
||||
links[i].num_cpus = ARRAY_SIZE(i2s_hs);
|
||||
if (drv_data->platform == REMBRANDT) {
|
||||
switch (drv_data->acp_rev) {
|
||||
case ACP_RMB_PCI_ID:
|
||||
links[i].platforms = platform_rmb_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
|
||||
} else if (drv_data->platform == ACP63) {
|
||||
break;
|
||||
case ACP63_PCI_ID:
|
||||
links[i].platforms = platform_acp63_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
links[i].platforms = platform_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_component);
|
||||
break;
|
||||
}
|
||||
|
||||
links[i].dpcm_playback = 1;
|
||||
links[i].dpcm_capture = 1;
|
||||
if (!drv_data->hs_codec_id) {
|
||||
|
|
@ -1714,16 +1719,21 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
|
|||
links[i].id = AMP_BE_ID;
|
||||
links[i].cpus = i2s_hs;
|
||||
links[i].num_cpus = ARRAY_SIZE(i2s_hs);
|
||||
if (drv_data->platform == REMBRANDT) {
|
||||
switch (drv_data->acp_rev) {
|
||||
case ACP_RMB_PCI_ID:
|
||||
links[i].platforms = platform_rmb_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
|
||||
} else if (drv_data->platform == ACP63) {
|
||||
break;
|
||||
case ACP63_PCI_ID:
|
||||
links[i].platforms = platform_acp63_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
links[i].platforms = platform_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_component);
|
||||
break;
|
||||
}
|
||||
|
||||
links[i].dpcm_playback = 1;
|
||||
if (!drv_data->amp_codec_id) {
|
||||
/* Use dummy codec if codec id not specified */
|
||||
|
|
@ -1760,18 +1770,24 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
|
|||
}
|
||||
links[i].cpus = pdm_dmic;
|
||||
links[i].num_cpus = ARRAY_SIZE(pdm_dmic);
|
||||
if (drv_data->platform == REMBRANDT) {
|
||||
switch (drv_data->acp_rev) {
|
||||
case ACP_RMB_PCI_ID:
|
||||
links[i].platforms = platform_rmb_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_rmb_component);
|
||||
} else if (drv_data->platform == ACP63) {
|
||||
break;
|
||||
case ACP63_PCI_ID:
|
||||
links[i].platforms = platform_acp63_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_acp63_component);
|
||||
} else if ((drv_data->platform == ACP70) || (drv_data->platform == ACP71)) {
|
||||
break;
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
links[i].platforms = platform_acp70_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_acp70_component);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
links[i].platforms = platform_component;
|
||||
links[i].num_platforms = ARRAY_SIZE(platform_component);
|
||||
break;
|
||||
}
|
||||
links[i].ops = &acp_card_dmic_ops;
|
||||
links[i].dpcm_capture = 1;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
#include <linux/module.h>
|
||||
#include <sound/soc.h>
|
||||
|
||||
#include "acp_common.h"
|
||||
|
||||
#define TDM_CHANNELS 8
|
||||
|
||||
#define ACP_OPS(priv, cb) ((priv)->ops.cb)
|
||||
|
|
@ -51,14 +53,6 @@ enum codec_endpoints {
|
|||
ES83XX,
|
||||
};
|
||||
|
||||
enum platform_end_point {
|
||||
RENOIR = 0,
|
||||
REMBRANDT,
|
||||
ACP63,
|
||||
ACP70,
|
||||
ACP71,
|
||||
};
|
||||
|
||||
struct acp_mach_ops {
|
||||
int (*probe)(struct snd_soc_card *card);
|
||||
int (*configure_link)(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link);
|
||||
|
|
@ -77,7 +71,7 @@ struct acp_card_drvdata {
|
|||
unsigned int bt_codec_id;
|
||||
unsigned int dmic_codec_id;
|
||||
unsigned int dai_fmt;
|
||||
unsigned int platform;
|
||||
unsigned int acp_rev;
|
||||
struct clk *wclk;
|
||||
struct clk *bclk;
|
||||
struct acp_mach_ops ops;
|
||||
|
|
|
|||
|
|
@ -77,27 +77,22 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
|
|||
|
||||
res_acp = acp_res;
|
||||
num_res = ARRAY_SIZE(acp_res);
|
||||
|
||||
chip->acp_rev = pci->revision;
|
||||
switch (pci->revision) {
|
||||
case 0x01:
|
||||
chip->name = "acp_asoc_renoir";
|
||||
chip->acp_rev = ACP3X_DEV;
|
||||
break;
|
||||
case 0x6f:
|
||||
chip->name = "acp_asoc_rembrandt";
|
||||
chip->acp_rev = ACP6X_DEV;
|
||||
break;
|
||||
case 0x63:
|
||||
chip->name = "acp_asoc_acp63";
|
||||
chip->acp_rev = ACP63_DEV;
|
||||
break;
|
||||
case 0x70:
|
||||
chip->name = "acp_asoc_acp70";
|
||||
chip->acp_rev = ACP70_DEV;
|
||||
break;
|
||||
case 0x71:
|
||||
chip->name = "acp_asoc_acp70";
|
||||
chip->acp_rev = ACP71_DEV;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "Unsupported device revision:0x%x\n", pci->revision);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ static int acp_dmic_prepare(struct snd_pcm_substream *substream,
|
|||
size_dmic = frames_to_bytes(substream->runtime,
|
||||
substream->runtime->buffer_size);
|
||||
|
||||
if (chip->acp_rev >= ACP70_DEV)
|
||||
if (chip->acp_rev >= ACP70_PCI_ID)
|
||||
physical_addr = ACP7x_DMIC_MEM_WINDOW_START;
|
||||
else
|
||||
physical_addr = stream->reg_offset + MEM_WINDOW_START;
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ int acp_machine_select(struct acp_dev_data *adata)
|
|||
int size, platform;
|
||||
|
||||
if (adata->flag == FLAG_AMD_LEGACY_ONLY_DMIC) {
|
||||
platform = adata->platform;
|
||||
platform = adata->acp_rev;
|
||||
adata->mach_dev = platform_device_register_data(adata->dev, "acp-pdm-mach",
|
||||
PLATFORM_DEVID_NONE, &platform,
|
||||
sizeof(platform));
|
||||
|
|
@ -125,6 +125,7 @@ int acp_machine_select(struct acp_dev_data *adata)
|
|||
dev_err(adata->dev, "warning: No matching ASoC machine driver found\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
mach->mach_params.subsystem_rev = adata->acp_rev;
|
||||
adata->mach_dev = platform_device_register_data(adata->dev, mach->drv_name,
|
||||
PLATFORM_DEVID_NONE, mach, size);
|
||||
}
|
||||
|
|
@ -204,9 +205,9 @@ void config_acp_dma(struct acp_dev_data *adata, struct acp_stream *stream, int s
|
|||
u32 low, high, val;
|
||||
u16 page_idx;
|
||||
|
||||
switch (adata->platform) {
|
||||
case ACP70:
|
||||
case ACP71:
|
||||
switch (adata->acp_rev) {
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
switch (stream->dai_id) {
|
||||
case I2S_SP_INSTANCE:
|
||||
if (stream->dir == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
|
|
@ -270,9 +271,9 @@ static int acp_dma_open(struct snd_soc_component *component, struct snd_pcm_subs
|
|||
stream->substream = substream;
|
||||
chip = dev_get_platdata(dev);
|
||||
switch (chip->acp_rev) {
|
||||
case ACP63_DEV:
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP63_PCI_ID:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
runtime->hw = acp6x_pcm_hardware_playback;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ static int rembrandt_audio_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (chip->acp_rev != ACP6X_DEV) {
|
||||
if (chip->acp_rev != ACP_RMB_PCI_ID) {
|
||||
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
@ -227,7 +227,7 @@ static int rembrandt_audio_probe(struct platform_device *pdev)
|
|||
adata->dai_driver = acp_rmb_dai;
|
||||
adata->num_dai = ARRAY_SIZE(acp_rmb_dai);
|
||||
adata->rsrc = &rsrc;
|
||||
adata->platform = REMBRANDT;
|
||||
adata->acp_rev = chip->acp_rev;
|
||||
adata->flag = chip->flag;
|
||||
adata->is_i2s_config = chip->is_i2s_config;
|
||||
adata->machines = snd_soc_acpi_amd_rmb_acp_machines;
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ static int renoir_audio_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (chip->acp_rev != ACP3X_DEV) {
|
||||
if (chip->acp_rev != ACP_RN_PCI_ID) {
|
||||
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
@ -185,7 +185,7 @@ static int renoir_audio_probe(struct platform_device *pdev)
|
|||
adata->dai_driver = acp_renoir_dai;
|
||||
adata->num_dai = ARRAY_SIZE(acp_renoir_dai);
|
||||
adata->rsrc = &rsrc;
|
||||
adata->platform = RENOIR;
|
||||
adata->acp_rev = chip->acp_rev;
|
||||
adata->flag = chip->flag;
|
||||
|
||||
adata->machines = snd_soc_acpi_amd_acp_machines;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = {
|
|||
.hs_codec_id = RT5682S,
|
||||
.amp_codec_id = RT1019,
|
||||
.dmic_codec_id = DMIC,
|
||||
.platform = RENOIR,
|
||||
};
|
||||
|
||||
static struct acp_card_drvdata sof_rt5682s_max_data = {
|
||||
|
|
@ -56,7 +55,6 @@ static struct acp_card_drvdata sof_rt5682s_max_data = {
|
|||
.hs_codec_id = RT5682S,
|
||||
.amp_codec_id = MAX98360A,
|
||||
.dmic_codec_id = DMIC,
|
||||
.platform = RENOIR,
|
||||
};
|
||||
|
||||
static struct acp_card_drvdata sof_nau8825_data = {
|
||||
|
|
@ -66,7 +64,6 @@ static struct acp_card_drvdata sof_nau8825_data = {
|
|||
.hs_codec_id = NAU8825,
|
||||
.amp_codec_id = MAX98360A,
|
||||
.dmic_codec_id = DMIC,
|
||||
.platform = REMBRANDT,
|
||||
.soc_mclk = true,
|
||||
};
|
||||
|
||||
|
|
@ -77,7 +74,6 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
|
|||
.hs_codec_id = RT5682S,
|
||||
.amp_codec_id = RT1019,
|
||||
.dmic_codec_id = DMIC,
|
||||
.platform = REMBRANDT,
|
||||
.soc_mclk = true,
|
||||
};
|
||||
|
||||
|
|
@ -94,6 +90,7 @@ static int acp_sof_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_card *card = NULL;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
|
||||
const struct dmi_system_id *dmi_id;
|
||||
struct acp_card_drvdata *acp_card_drvdata;
|
||||
int ret;
|
||||
|
|
@ -116,6 +113,7 @@ static int acp_sof_probe(struct platform_device *pdev)
|
|||
if (dmi_id && dmi_id->driver_data)
|
||||
acp_card_drvdata->tdm_mode = dmi_id->driver_data;
|
||||
|
||||
acp_card_drvdata->acp_rev = mach->mach_params.subsystem_rev;
|
||||
ret = acp_sofdsp_dai_links_create(card);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Failed to create DAI links\n");
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ static int acp63_audio_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (chip->acp_rev != ACP63_DEV) {
|
||||
if (chip->acp_rev != ACP63_PCI_ID) {
|
||||
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
@ -237,7 +237,7 @@ static int acp63_audio_probe(struct platform_device *pdev)
|
|||
adata->dai_driver = acp63_dai;
|
||||
adata->num_dai = ARRAY_SIZE(acp63_dai);
|
||||
adata->rsrc = &rsrc;
|
||||
adata->platform = ACP63;
|
||||
adata->acp_rev = chip->acp_rev;
|
||||
adata->flag = chip->flag;
|
||||
adata->is_i2s_config = chip->is_i2s_config;
|
||||
adata->machines = snd_soc_acpi_amd_acp63_acp_machines;
|
||||
|
|
|
|||
|
|
@ -142,9 +142,9 @@ static int acp70_i2s_master_clock_generate(struct acp_dev_data *adata)
|
|||
struct pci_dev *smn_dev;
|
||||
u32 device_id;
|
||||
|
||||
if (adata->platform == ACP70)
|
||||
if (adata->acp_rev == ACP70_PCI_ID)
|
||||
device_id = 0x1507;
|
||||
else if (adata->platform == ACP71)
|
||||
else if (adata->acp_rev == ACP71_PCI_ID)
|
||||
device_id = 0x1122;
|
||||
else
|
||||
return -ENODEV;
|
||||
|
|
@ -175,8 +175,8 @@ static int acp_acp70_audio_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
switch (chip->acp_rev) {
|
||||
case ACP70_DEV:
|
||||
case ACP71_DEV:
|
||||
case ACP70_PCI_ID:
|
||||
case ACP71_PCI_ID:
|
||||
break;
|
||||
default:
|
||||
dev_err(&pdev->dev, "Un-supported ACP Revision %d\n", chip->acp_rev);
|
||||
|
|
@ -209,11 +209,7 @@ static int acp_acp70_audio_probe(struct platform_device *pdev)
|
|||
adata->num_dai = ARRAY_SIZE(acp70_dai);
|
||||
adata->rsrc = &rsrc;
|
||||
adata->machines = snd_soc_acpi_amd_acp70_acp_machines;
|
||||
if (chip->acp_rev == ACP70_DEV)
|
||||
adata->platform = ACP70;
|
||||
else
|
||||
adata->platform = ACP71;
|
||||
|
||||
adata->acp_rev = chip->acp_rev;
|
||||
adata->flag = chip->flag;
|
||||
acp_machine_select(adata);
|
||||
|
||||
|
|
|
|||
19
sound/soc/amd/acp/acp_common.h
Normal file
19
sound/soc/amd/acp/acp_common.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only
|
||||
* Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved
|
||||
*/
|
||||
|
||||
/*
|
||||
* acp_common.h - acp common header file
|
||||
*/
|
||||
|
||||
#ifndef __ACP_COMMON_H
|
||||
#define __ACP_COMMON_H
|
||||
|
||||
#define ACP_RN_PCI_ID 0x01
|
||||
#define ACP_VANGOGH_PCI_ID 0x50
|
||||
#define ACP_RMB_PCI_ID 0x6F
|
||||
#define ACP63_PCI_ID 0x63
|
||||
#define ACP70_PCI_ID 0x70
|
||||
#define ACP71_PCI_ID 0x71
|
||||
|
||||
#endif
|
||||
|
|
@ -16,14 +16,9 @@
|
|||
#include <sound/soc-acpi.h>
|
||||
#include <sound/soc-dai.h>
|
||||
|
||||
#include "acp_common.h"
|
||||
#include "chip_offset_byte.h"
|
||||
|
||||
#define ACP3X_DEV 3
|
||||
#define ACP6X_DEV 6
|
||||
#define ACP63_DEV 0x63
|
||||
#define ACP70_DEV 0x70
|
||||
#define ACP71_DEV 0x71
|
||||
|
||||
#define DMIC_INSTANCE 0x00
|
||||
#define I2S_SP_INSTANCE 0x01
|
||||
#define I2S_BT_INSTANCE 0x02
|
||||
|
|
@ -182,6 +177,7 @@ struct acp_dev_data {
|
|||
struct device *dev;
|
||||
void __iomem *acp_base;
|
||||
unsigned int i2s_irq;
|
||||
unsigned int acp_rev; /* ACP Revision id */
|
||||
|
||||
bool tdm_mode;
|
||||
bool is_i2s_config;
|
||||
|
|
@ -205,7 +201,6 @@ struct acp_dev_data {
|
|||
u32 xfer_tx_resolution[3];
|
||||
u32 xfer_rx_resolution[3];
|
||||
unsigned int flag;
|
||||
unsigned int platform;
|
||||
};
|
||||
|
||||
enum acp_config {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user