aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHimangi Saraogi <himangi774@gmail.com>2014-08-01 11:29:13 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-02 19:40:52 -0400
commit54789983d14c00c80933beb782205df2a6c59afc (patch)
tree740721faa0e425df49426b383d83d97cae249713
parent6751edeb870034d95dc227716863c4e5572e35b6 (diff)
net: ks8851-ml: Use devm_ioremap_resource
This patch introduces the use of devm_ioremap_resource, devm_kmalloc and does away with the functions to free the allocated memory in the probe and remove functions. Also, some labels are done away with. A bug is fixed as two regions are allocated in the probe function, but only one is freed in the remove function. 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/micrel/ks8851_mll.c59
1 files changed, 21 insertions, 38 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c
index c83d16dc7cd5..0eb47649191b 100644
--- a/drivers/net/ethernet/micrel/ks8851_mll.c
+++ b/drivers/net/ethernet/micrel/ks8851_mll.c
@@ -1519,7 +1519,8 @@ static int ks_hw_init(struct ks_net *ks)
1519 ks->all_mcast = 0; 1519 ks->all_mcast = 0;
1520 ks->mcast_lst_size = 0; 1520 ks->mcast_lst_size = 0;
1521 1521
1522 ks->frame_head_info = kmalloc(MHEADER_SIZE, GFP_KERNEL); 1522 ks->frame_head_info = devm_kmalloc(&ks->pdev->dev, MHEADER_SIZE,
1523 GFP_KERNEL);
1523 if (!ks->frame_head_info) 1524 if (!ks->frame_head_info)
1524 return false; 1525 return false;
1525 1526
@@ -1537,44 +1538,41 @@ MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids);
1537 1538
1538static int ks8851_probe(struct platform_device *pdev) 1539static int ks8851_probe(struct platform_device *pdev)
1539{ 1540{
1540 int err = -ENOMEM; 1541 int err;
1541 struct resource *io_d, *io_c; 1542 struct resource *io_d, *io_c;
1542 struct net_device *netdev; 1543 struct net_device *netdev;
1543 struct ks_net *ks; 1544 struct ks_net *ks;
1544 u16 id, data; 1545 u16 id, data;
1545 const char *mac; 1546 const char *mac;
1546 1547
1547 io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1548 io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1549
1550 if (!request_mem_region(io_d->start, resource_size(io_d), DRV_NAME))
1551 goto err_mem_region;
1552
1553 if (!request_mem_region(io_c->start, resource_size(io_c), DRV_NAME))
1554 goto err_mem_region1;
1555
1556 netdev = alloc_etherdev(sizeof(struct ks_net)); 1548 netdev = alloc_etherdev(sizeof(struct ks_net));
1557 if (!netdev) 1549 if (!netdev)
1558 goto err_alloc_etherdev; 1550 return -ENOMEM;
1559 1551
1560 SET_NETDEV_DEV(netdev, &pdev->dev); 1552 SET_NETDEV_DEV(netdev, &pdev->dev);
1561 1553
1562 ks = netdev_priv(netdev); 1554 ks = netdev_priv(netdev);
1563 ks->netdev = netdev; 1555 ks->netdev = netdev;
1564 ks->hw_addr = ioremap(io_d->start, resource_size(io_d));
1565 1556
1566 if (!ks->hw_addr) 1557 io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1567 goto err_ioremap; 1558 ks->hw_addr = devm_ioremap_resource(&pdev->dev, io_d);
1559 if (IS_ERR(ks->hw_addr)) {
1560 err = PTR_ERR(ks->hw_addr);
1561 goto err_free;
1562 }
1568 1563
1569 ks->hw_addr_cmd = ioremap(io_c->start, resource_size(io_c)); 1564 io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1570 if (!ks->hw_addr_cmd) 1565 ks->hw_addr_cmd = devm_ioremap_resource(&pdev->dev, io_c);
1571 goto err_ioremap1; 1566 if (IS_ERR(ks->hw_addr_cmd)) {
1567 err = PTR_ERR(ks->hw_addr_cmd);
1568 goto err_free;
1569 }
1572 1570
1573 netdev->irq = platform_get_irq(pdev, 0); 1571 netdev->irq = platform_get_irq(pdev, 0);
1574 1572
1575 if ((int)netdev->irq < 0) { 1573 if ((int)netdev->irq < 0) {
1576 err = netdev->irq; 1574 err = netdev->irq;
1577 goto err_get_irq; 1575 goto err_free;
1578 } 1576 }
1579 1577
1580 ks->pdev = pdev; 1578 ks->pdev = pdev;
@@ -1604,18 +1602,18 @@ static int ks8851_probe(struct platform_device *pdev)
1604 if ((ks_rdreg16(ks, KS_CIDER) & ~CIDER_REV_MASK) != CIDER_ID) { 1602 if ((ks_rdreg16(ks, KS_CIDER) & ~CIDER_REV_MASK) != CIDER_ID) {
1605 netdev_err(netdev, "failed to read device ID\n"); 1603 netdev_err(netdev, "failed to read device ID\n");
1606 err = -ENODEV; 1604 err = -ENODEV;
1607 goto err_register; 1605 goto err_free;
1608 } 1606 }
1609 1607
1610 if (ks_read_selftest(ks)) { 1608 if (ks_read_selftest(ks)) {
1611 netdev_err(netdev, "failed to read device ID\n"); 1609 netdev_err(netdev, "failed to read device ID\n");
1612 err = -ENODEV; 1610 err = -ENODEV;
1613 goto err_register; 1611 goto err_free;
1614 } 1612 }
1615 1613
1616 err = register_netdev(netdev); 1614 err = register_netdev(netdev);
1617 if (err) 1615 if (err)
1618 goto err_register; 1616 goto err_free;
1619 1617
1620 platform_set_drvdata(pdev, netdev); 1618 platform_set_drvdata(pdev, netdev);
1621 1619
@@ -1663,32 +1661,17 @@ static int ks8851_probe(struct platform_device *pdev)
1663 1661
1664err_pdata: 1662err_pdata:
1665 unregister_netdev(netdev); 1663 unregister_netdev(netdev);
1666err_register: 1664err_free:
1667err_get_irq:
1668 iounmap(ks->hw_addr_cmd);
1669err_ioremap1:
1670 iounmap(ks->hw_addr);
1671err_ioremap:
1672 free_netdev(netdev); 1665 free_netdev(netdev);
1673err_alloc_etherdev:
1674 release_mem_region(io_c->start, resource_size(io_c));
1675err_mem_region1:
1676 release_mem_region(io_d->start, resource_size(io_d));
1677err_mem_region:
1678 return err; 1666 return err;
1679} 1667}
1680 1668
1681static int ks8851_remove(struct platform_device *pdev) 1669static int ks8851_remove(struct platform_device *pdev)
1682{ 1670{
1683 struct net_device *netdev = platform_get_drvdata(pdev); 1671 struct net_device *netdev = platform_get_drvdata(pdev);
1684 struct ks_net *ks = netdev_priv(netdev);
1685 struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1686 1672
1687 kfree(ks->frame_head_info);
1688 unregister_netdev(netdev); 1673 unregister_netdev(netdev);
1689 iounmap(ks->hw_addr);
1690 free_netdev(netdev); 1674 free_netdev(netdev);
1691 release_mem_region(iomem->start, resource_size(iomem));
1692 return 0; 1675 return 0;
1693 1676
1694} 1677}