ASoC: amd: pcm-dma: Use platform_get_irq() to get the interrupt
platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static allocation of IRQ resources in DT core code, this causes an issue when using hierarchical interrupt domains using "interrupts" property in the node as this bypassed the hierarchical setup and messed up the irq chaining. In preparation for removal of static setup of IRQ resource from DT core code use platform_get_irq(). Signed-off-by: Meng Tang <tangmeng@uniontech.com> Link: https://lore.kernel.org/r/20220227050928.32270-1-tangmeng@uniontech.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
df63fb10a5
commit
87d71a1287
|
@ -1217,9 +1217,8 @@ static const struct snd_soc_component_driver acp_asoc_platform = {
|
|||
|
||||
static int acp_audio_probe(struct platform_device *pdev)
|
||||
{
|
||||
int status;
|
||||
int status, irq;
|
||||
struct audio_drv_data *audio_drv_data;
|
||||
struct resource *res;
|
||||
const u32 *pdata = pdev->dev.platform_data;
|
||||
|
||||
if (!pdata) {
|
||||
|
@ -1249,13 +1248,11 @@ static int acp_audio_probe(struct platform_device *pdev)
|
|||
|
||||
audio_drv_data->asic_type = *pdata;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
status = devm_request_irq(&pdev->dev, res->start, dma_irq_handler,
|
||||
status = devm_request_irq(&pdev->dev, irq, dma_irq_handler,
|
||||
0, "ACP_IRQ", &pdev->dev);
|
||||
if (status) {
|
||||
dev_err(&pdev->dev, "ACP IRQ request failed\n");
|
||||
|
|
|
@ -394,13 +394,9 @@ static int acp3x_audio_probe(struct platform_device *pdev)
|
|||
if (!adata->acp3x_base)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
|
||||
adata->i2s_irq = platform_get_irq(pdev, 0);
|
||||
if (adata->i2s_irq < 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
adata->i2s_irq = res->start;
|
||||
|
||||
dev_set_drvdata(&pdev->dev, adata);
|
||||
status = devm_snd_soc_register_component(&pdev->dev,
|
||||
|
|
|
@ -399,13 +399,10 @@ static int acp_pdm_audio_probe(struct platform_device *pdev)
|
|||
if (!adata->acp_base)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
|
||||
adata->pdm_irq = platform_get_irq(pdev, 0);
|
||||
if (adata->pdm_irq < 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
adata->pdm_irq = res->start;
|
||||
adata->capture_stream = NULL;
|
||||
|
||||
dev_set_drvdata(&pdev->dev, adata);
|
||||
|
|
|
@ -388,13 +388,10 @@ static int acp5x_audio_probe(struct platform_device *pdev)
|
|||
if (!adata->acp5x_base)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
|
||||
adata->i2s_irq = platform_get_irq(pdev, 0);
|
||||
if (adata->i2s_irq < 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
adata->i2s_irq = res->start;
|
||||
dev_set_drvdata(&pdev->dev, adata);
|
||||
status = devm_snd_soc_register_component(&pdev->dev,
|
||||
&acp5x_i2s_component,
|
||||
|
|
Loading…
Reference in New Issue