mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
ASoC: amd: acp: Use pcim_iomap_region() in acp-pci
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> Link: https://patch.msgid.link/20260720001054.1439409-1-rosenp@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
ef9c8eb307
commit
596f78db19
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user