mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
fbdev: nvidia: Convert to managed PCI and ioremap API
Fix missing pci_disable_device() in probe and remove. Use pcim_enable_device(), pcim_request_all_regions(), devm_ioremap() and devm_ioremap_wc() to replace manual resource management. Remove all pci_release_regions() and iounmap() calls. Signed-off-by: Shixiong Ou <oushixiong@kylinos.cn> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
e36aa3669e
commit
a41961f364
|
|
@ -1292,7 +1292,7 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
NVTRACE_ENTER();
|
||||
assert(pd != NULL);
|
||||
|
||||
if (pci_enable_device(pd)) {
|
||||
if (pcim_enable_device(pd)) {
|
||||
printk(KERN_ERR PFX "cannot enable PCI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
@ -1305,7 +1305,7 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
nvidiafb_fix.mmio_start = pci_resource_start(pd, 0);
|
||||
nvidiafb_fix.mmio_len = pci_resource_len(pd, 0);
|
||||
|
||||
REGS = ioremap(nvidiafb_fix.mmio_start, nvidiafb_fix.mmio_len);
|
||||
REGS = devm_ioremap(&pd->dev, nvidiafb_fix.mmio_start, nvidiafb_fix.mmio_len);
|
||||
if (!REGS) {
|
||||
printk(KERN_ERR PFX "cannot ioremap MMIO base\n");
|
||||
return -ENODEV;
|
||||
|
|
@ -1333,7 +1333,7 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
if (info->pixmap.addr == NULL)
|
||||
goto err_out_kfree;
|
||||
|
||||
if (pci_request_regions(pd, "nvidiafb")) {
|
||||
if (pcim_request_all_regions(pd, "nvidiafb")) {
|
||||
printk(KERN_ERR PFX "cannot request PCI regions\n");
|
||||
goto err_out_enable;
|
||||
}
|
||||
|
|
@ -1358,7 +1358,7 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
sprintf(nvidiafb_fix.id, "NV%x", (pd->device & 0x0ff0) >> 4);
|
||||
|
||||
if (NVCommonSetup(info))
|
||||
goto err_out_free_base0;
|
||||
goto err_out_enable;
|
||||
|
||||
par->FbAddress = nvidiafb_fix.smem_start;
|
||||
par->FbMapSize = par->RamAmountKBytes * 1024;
|
||||
|
|
@ -1378,8 +1378,8 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
par->ScratchBufferStart = par->FbUsableSize - par->ScratchBufferSize;
|
||||
par->CursorStart = par->FbUsableSize + (32 * 1024);
|
||||
|
||||
info->screen_base = ioremap_wc(nvidiafb_fix.smem_start,
|
||||
par->FbMapSize);
|
||||
info->screen_base = devm_ioremap_wc(&pd->dev, nvidiafb_fix.smem_start,
|
||||
par->FbMapSize);
|
||||
info->screen_size = par->FbUsableSize;
|
||||
nvidiafb_fix.smem_len = par->RamAmountKBytes * 1024;
|
||||
|
||||
|
|
@ -1423,19 +1423,15 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
|
|||
return 0;
|
||||
|
||||
err_out_iounmap_fb:
|
||||
iounmap(info->screen_base);
|
||||
fb_destroy_modelist(&info->modelist);
|
||||
err_out_free_base1:
|
||||
fb_destroy_modedb(info->monspecs.modedb);
|
||||
nvidia_delete_i2c_busses(par);
|
||||
err_out_free_base0:
|
||||
pci_release_regions(pd);
|
||||
err_out_enable:
|
||||
kfree(info->pixmap.addr);
|
||||
err_out_kfree:
|
||||
framebuffer_release(info);
|
||||
err_out:
|
||||
iounmap(REGS);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
@ -1450,11 +1446,8 @@ static void nvidiafb_remove(struct pci_dev *pd)
|
|||
unregister_framebuffer(info);
|
||||
|
||||
arch_phys_wc_del(par->wc_cookie);
|
||||
iounmap(info->screen_base);
|
||||
fb_destroy_modedb(info->monspecs.modedb);
|
||||
nvidia_delete_i2c_busses(par);
|
||||
iounmap(par->REGS);
|
||||
pci_release_regions(pd);
|
||||
kfree(info->pixmap.addr);
|
||||
framebuffer_release(info);
|
||||
NVTRACE_LEAVE();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user