[PATCH] ASoC: amd: acp: Use pcim_iomap_region() in acp-pci

Rosen Penev posted 1 patch 5 days, 2 hours ago
sound/soc/amd/acp/acp-pci.c | 26 ++++++--------------------
1 file changed, 6 insertions(+), 20 deletions(-)
[PATCH] ASoC: amd: acp: Use pcim_iomap_region() in acp-pci
Posted by Rosen Penev 5 days, 2 hours ago
Convert acp-pci to the pcim-managed PCI life-cycle. Replace
pci_enable_device() with pcim_enable_device() and fold the
open-coded pci_request_regions() + devm_ioremap() pair into a single
pcim_iomap_region() call for BAR0, which reserves and iomaps the
register window.

This lets the driver drop the manual pci_release_regions() and
pci_disable_device() calls from the probe error path; pcim releases
the device and region automatically on detach or probe failure. The
error check moves from a NULL test to IS_ERR(), since pcim_iomap_region()
returns an IOMEM_ERR_PTR on failure.

The child platform devices only use devm_ioremap() on their sub-range
of BAR0 (no request_mem_region), so reserving the full BAR0 here does
not conflict with them.

Assisted-by: opencode:hy3-free
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 sound/soc/amd/acp/acp-pci.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/sound/soc/amd/acp/acp-pci.c b/sound/soc/amd/acp/acp-pci.c
index f83708755ed1..98771323eace 100644
--- a/sound/soc/amd/acp/acp-pci.c
+++ b/sound/soc/amd/acp/acp-pci.c
@@ -118,17 +118,10 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
 	if (!chip)
 		return -ENOMEM;
 
-	if (pci_enable_device(pci))
+	if (pcim_enable_device(pci))
 		return dev_err_probe(&pci->dev, -ENODEV,
 				     "pci_enable_device failed\n");
 
-	ret = pci_request_regions(pci, "AMD ACP3x audio");
-	if (ret < 0) {
-		dev_err(&pci->dev, "pci_request_regions failed\n");
-		ret = -ENOMEM;
-		goto disable_pci;
-	}
-
 	pci_set_master(pci);
 
 	chip->acp_rev = pci->revision;
@@ -161,24 +154,21 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
 		break;
 	default:
 		dev_err(dev, "Unsupported device revision:0x%x\n", pci->revision);
-		ret = -EINVAL;
-		goto release_regions;
+		return -EINVAL;
 	}
 	chip->flag = flag;
 
 	addr = pci_resource_start(pci, 0);
-	chip->base = devm_ioremap(&pci->dev, addr, pci_resource_len(pci, 0));
-	if (!chip->base) {
-		ret = -ENOMEM;
-		goto release_regions;
-	}
+	chip->base = pcim_iomap_region(pci, 0, "AMD ACP3x audio");
+	if (IS_ERR(chip->base))
+		return PTR_ERR(chip->base);
 
 	chip->addr = addr;
 
 	chip->acp_hw_ops_init(chip);
 	ret = acp_hw_init(chip);
 	if (ret)
-		goto release_regions;
+		goto de_init;
 
 	ret = devm_request_irq(dev, pci->irq, irq_handler,
 			       IRQF_SHARED, "ACP_I2S_IRQ", chip);
@@ -214,10 +204,6 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
 
 de_init:
 	acp_hw_deinit(chip);
-release_regions:
-	pci_release_regions(pci);
-disable_pci:
-	pci_disable_device(pci);
 
 	return ret;
 };
-- 
2.55.0