|
@@ -145,7 +145,6 @@ struct net_local {
|
|
|
int force; /* force various values; see FORCE* above. */
|
|
|
spinlock_t lock;
|
|
|
void __iomem *virt_addr;/* CS89x0 virtual address. */
|
|
|
- unsigned long size; /* Length of CS89x0 memory region. */
|
|
|
#if ALLOW_DMA
|
|
|
int use_dma; /* Flag: we're using dma */
|
|
|
int dma; /* DMA channel */
|
|
@@ -1854,41 +1853,29 @@ static int __init cs89x0_platform_probe(struct platform_device *pdev)
|
|
|
|
|
|
lp = netdev_priv(dev);
|
|
|
|
|
|
- mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
dev->irq = platform_get_irq(pdev, 0);
|
|
|
- if (mem_res == NULL || dev->irq <= 0) {
|
|
|
- dev_warn(&dev->dev, "memory/interrupt resource missing\n");
|
|
|
+ if (dev->irq <= 0) {
|
|
|
+ dev_warn(&dev->dev, "interrupt resource missing\n");
|
|
|
err = -ENXIO;
|
|
|
goto free;
|
|
|
}
|
|
|
|
|
|
- lp->size = resource_size(mem_res);
|
|
|
- if (!request_mem_region(mem_res->start, lp->size, DRV_NAME)) {
|
|
|
- dev_warn(&dev->dev, "request_mem_region() failed\n");
|
|
|
- err = -EBUSY;
|
|
|
+ mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
+ virt_addr = devm_ioremap_resource(&pdev->dev, mem_res);
|
|
|
+ if (IS_ERR(virt_addr)) {
|
|
|
+ err = PTR_ERR(virt_addr);
|
|
|
goto free;
|
|
|
}
|
|
|
|
|
|
- virt_addr = ioremap(mem_res->start, lp->size);
|
|
|
- if (!virt_addr) {
|
|
|
- dev_warn(&dev->dev, "ioremap() failed\n");
|
|
|
- err = -ENOMEM;
|
|
|
- goto release;
|
|
|
- }
|
|
|
-
|
|
|
err = cs89x0_probe1(dev, virt_addr, 0);
|
|
|
if (err) {
|
|
|
dev_warn(&dev->dev, "no cs8900 or cs8920 detected\n");
|
|
|
- goto unmap;
|
|
|
+ goto free;
|
|
|
}
|
|
|
|
|
|
platform_set_drvdata(pdev, dev);
|
|
|
return 0;
|
|
|
|
|
|
-unmap:
|
|
|
- iounmap(virt_addr);
|
|
|
-release:
|
|
|
- release_mem_region(mem_res->start, lp->size);
|
|
|
free:
|
|
|
free_netdev(dev);
|
|
|
return err;
|
|
@@ -1897,17 +1884,12 @@ free:
|
|
|
static int cs89x0_platform_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
struct net_device *dev = platform_get_drvdata(pdev);
|
|
|
- struct net_local *lp = netdev_priv(dev);
|
|
|
- struct resource *mem_res;
|
|
|
|
|
|
/* This platform_get_resource() call will not return NULL, because
|
|
|
* the same call in cs89x0_platform_probe() has returned a non NULL
|
|
|
* value.
|
|
|
*/
|
|
|
- mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
unregister_netdev(dev);
|
|
|
- iounmap(lp->virt_addr);
|
|
|
- release_mem_region(mem_res->start, lp->size);
|
|
|
free_netdev(dev);
|
|
|
return 0;
|
|
|
}
|