aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHimangi Saraogi <himangi774@gmail.com>2014-08-01 11:28:19 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-02 19:40:52 -0400
commit6751edeb870034d95dc227716863c4e5572e35b6 (patch)
tree3c825f7b8be6e9657975c798739db6901c7e8eaf
parent0f76b9d83b2b010b63a094024b3cfd82e20af28d (diff)
cirrus: cs89x0: Use managed interfaces
This patch introduces the use of managed interfaces like devm_ioremap_resource and does away with the functions to free the allocated memory in the probe and remove functions. Also, many labels are done away with. The field size in no longer needed and is hence removed from the struct net_local. Signed-off-by: Himangi Saraogi <himangi774@gmail.com> Acked-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/cirrus/cs89x0.c32
1 files changed, 7 insertions, 25 deletions
diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c
index fe84fbabc0d4..9823a0ea7937 100644
--- a/drivers/net/ethernet/cirrus/cs89x0.c
+++ b/drivers/net/ethernet/cirrus/cs89x0.c
@@ -145,7 +145,6 @@ struct net_local {
145 int force; /* force various values; see FORCE* above. */ 145 int force; /* force various values; see FORCE* above. */
146 spinlock_t lock; 146 spinlock_t lock;
147 void __iomem *virt_addr;/* CS89x0 virtual address. */ 147 void __iomem *virt_addr;/* CS89x0 virtual address. */
148 unsigned long size; /* Length of CS89x0 memory region. */
149#if ALLOW_DMA 148#if ALLOW_DMA
150 int use_dma; /* Flag: we're using dma */ 149 int use_dma; /* Flag: we're using dma */
151 int dma; /* DMA channel */ 150 int dma; /* DMA channel */
@@ -1854,41 +1853,29 @@ static int __init cs89x0_platform_probe(struct platform_device *pdev)
1854 1853
1855 lp = netdev_priv(dev); 1854 lp = netdev_priv(dev);
1856 1855
1857 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1858 dev->irq = platform_get_irq(pdev, 0); 1856 dev->irq = platform_get_irq(pdev, 0);
1859 if (mem_res == NULL || dev->irq <= 0) { 1857 if (dev->irq <= 0) {
1860 dev_warn(&dev->dev, "memory/interrupt resource missing\n"); 1858 dev_warn(&dev->dev, "interrupt resource missing\n");
1861 err = -ENXIO; 1859 err = -ENXIO;
1862 goto free; 1860 goto free;
1863 } 1861 }
1864 1862
1865 lp->size = resource_size(mem_res); 1863 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1866 if (!request_mem_region(mem_res->start, lp->size, DRV_NAME)) { 1864 virt_addr = devm_ioremap_resource(&pdev->dev, mem_res);
1867 dev_warn(&dev->dev, "request_mem_region() failed\n"); 1865 if (IS_ERR(virt_addr)) {
1868 err = -EBUSY; 1866 err = PTR_ERR(virt_addr);
1869 goto free; 1867 goto free;
1870 } 1868 }
1871 1869
1872 virt_addr = ioremap(mem_res->start, lp->size);
1873 if (!virt_addr) {
1874 dev_warn(&dev->dev, "ioremap() failed\n");
1875 err = -ENOMEM;
1876 goto release;
1877 }
1878
1879 err = cs89x0_probe1(dev, virt_addr, 0); 1870 err = cs89x0_probe1(dev, virt_addr, 0);
1880 if (err) { 1871 if (err) {
1881 dev_warn(&dev->dev, "no cs8900 or cs8920 detected\n"); 1872 dev_warn(&dev->dev, "no cs8900 or cs8920 detected\n");
1882 goto unmap; 1873 goto free;
1883 } 1874 }
1884 1875
1885 platform_set_drvdata(pdev, dev); 1876 platform_set_drvdata(pdev, dev);
1886 return 0; 1877 return 0;
1887 1878
1888unmap:
1889 iounmap(virt_addr);
1890release:
1891 release_mem_region(mem_res->start, lp->size);
1892free: 1879free:
1893 free_netdev(dev); 1880 free_netdev(dev);
1894 return err; 1881 return err;
@@ -1897,17 +1884,12 @@ free:
1897static int cs89x0_platform_remove(struct platform_device *pdev) 1884static int cs89x0_platform_remove(struct platform_device *pdev)
1898{ 1885{
1899 struct net_device *dev = platform_get_drvdata(pdev); 1886 struct net_device *dev = platform_get_drvdata(pdev);
1900 struct net_local *lp = netdev_priv(dev);
1901 struct resource *mem_res;
1902 1887
1903 /* This platform_get_resource() call will not return NULL, because 1888 /* This platform_get_resource() call will not return NULL, because
1904 * the same call in cs89x0_platform_probe() has returned a non NULL 1889 * the same call in cs89x0_platform_probe() has returned a non NULL
1905 * value. 1890 * value.
1906 */ 1891 */
1907 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1908 unregister_netdev(dev); 1892 unregister_netdev(dev);
1909 iounmap(lp->virt_addr);
1910 release_mem_region(mem_res->start, lp->size);
1911 free_netdev(dev); 1893 free_netdev(dev);
1912 return 0; 1894 return 0;
1913} 1895}