[PATCH v2] ASoC: amd: put off registering mach platform_dev to avoid -517 err
Hui Wang
hui.wang at canonical.com
Fri May 22 10:17:38 CEST 2020
If the mach driver's probe is called ahead of codec driver's probe,
the kernel will print -517 error message although the audio still
works finally:
acp_pdm_mach acp_pdm_mach.0: snd_soc_register_card(acp) failed: -517
we could workaround this issue by moving the registration of mach
platform_dev to plat driver's probe.
Signed-off-by: Hui Wang <hui.wang at canonical.com>
---
sound/soc/amd/renoir/acp3x-pdm-dma.c | 13 +++++++++++++
sound/soc/amd/renoir/rn-pci-acp3x.c | 3 ---
sound/soc/amd/renoir/rn_acp3x.h | 3 ++-
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/sound/soc/amd/renoir/acp3x-pdm-dma.c b/sound/soc/amd/renoir/acp3x-pdm-dma.c
index 623dfd3ea705..46055c244998 100644
--- a/sound/soc/amd/renoir/acp3x-pdm-dma.c
+++ b/sound/soc/amd/renoir/acp3x-pdm-dma.c
@@ -402,6 +402,7 @@ static int acp_pdm_audio_probe(struct platform_device *pdev)
struct pdm_dev_data *adata;
unsigned int irqflags;
int status;
+ struct platform_device_info pdevinfo = {0};
if (!pdev->dev.platform_data) {
dev_err(&pdev->dev, "platform_data not retrieved\n");
@@ -448,6 +449,16 @@ static int acp_pdm_audio_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "ACP PDM IRQ request failed\n");
return -ENODEV;
}
+
+ pdevinfo.name = "acp_pdm_mach";
+ pdevinfo.id = 0;
+ pdevinfo.parent = &pdev->dev;
+ adata->m_pdev = platform_device_register_full(&pdevinfo);
+ if (IS_ERR(adata->m_pdev)) {
+ dev_err(&pdev->dev, "cannot register %s device\n",
+ pdevinfo.name);
+ return PTR_ERR(adata->m_pdev);
+ }
pm_runtime_set_autosuspend_delay(&pdev->dev, ACP_SUSPEND_DELAY_MS);
pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_enable(&pdev->dev);
@@ -457,7 +468,9 @@ static int acp_pdm_audio_probe(struct platform_device *pdev)
static int acp_pdm_audio_remove(struct platform_device *pdev)
{
+ struct pdm_dev_data *adata = dev_get_drvdata(&pdev->dev);
pm_runtime_disable(&pdev->dev);
+ platform_device_unregister(adata->m_pdev);
return 0;
}
diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c
index 859ed67b93cf..f5f450cbd249 100644
--- a/sound/soc/amd/renoir/rn-pci-acp3x.c
+++ b/sound/soc/amd/renoir/rn-pci-acp3x.c
@@ -230,9 +230,6 @@ static int snd_rn_acp_probe(struct pci_dev *pci,
pdevinfo[1].name = "dmic-codec";
pdevinfo[1].id = 0;
pdevinfo[1].parent = &pci->dev;
- pdevinfo[2].name = "acp_pdm_mach";
- pdevinfo[2].id = 0;
- pdevinfo[2].parent = &pci->dev;
for (index = 0; index < ACP_DEVS; index++) {
adata->pdev[index] =
platform_device_register_full(&pdevinfo[index]);
diff --git a/sound/soc/amd/renoir/rn_acp3x.h b/sound/soc/amd/renoir/rn_acp3x.h
index 75228e306e0b..232eda4db055 100644
--- a/sound/soc/amd/renoir/rn_acp3x.h
+++ b/sound/soc/amd/renoir/rn_acp3x.h
@@ -7,7 +7,7 @@
#include "rn_chip_offset_byte.h"
-#define ACP_DEVS 3
+#define ACP_DEVS 2
#define ACP_PHY_BASE_ADDRESS 0x1240000
#define ACP_REG_START 0x1240000
#define ACP_REG_END 0x1250200
@@ -59,6 +59,7 @@ struct pdm_dev_data {
u32 pdm_irq;
void __iomem *acp_base;
struct snd_pcm_substream *capture_stream;
+ struct platform_device *m_pdev;
};
struct pdm_stream_instance {
--
2.17.1
More information about the Alsa-devel
mailing list