diff options
author | Himangi Saraogi <himangi774@gmail.com> | 2014-08-01 11:29:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-02 19:40:52 -0400 |
commit | 54789983d14c00c80933beb782205df2a6c59afc (patch) | |
tree | 740721faa0e425df49426b383d83d97cae249713 | |
parent | 6751edeb870034d95dc227716863c4e5572e35b6 (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.c | 59 |
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 | ||
1538 | static int ks8851_probe(struct platform_device *pdev) | 1539 | static 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 | ||
1664 | err_pdata: | 1662 | err_pdata: |
1665 | unregister_netdev(netdev); | 1663 | unregister_netdev(netdev); |
1666 | err_register: | 1664 | err_free: |
1667 | err_get_irq: | ||
1668 | iounmap(ks->hw_addr_cmd); | ||
1669 | err_ioremap1: | ||
1670 | iounmap(ks->hw_addr); | ||
1671 | err_ioremap: | ||
1672 | free_netdev(netdev); | 1665 | free_netdev(netdev); |
1673 | err_alloc_etherdev: | ||
1674 | release_mem_region(io_c->start, resource_size(io_c)); | ||
1675 | err_mem_region1: | ||
1676 | release_mem_region(io_d->start, resource_size(io_d)); | ||
1677 | err_mem_region: | ||
1678 | return err; | 1666 | return err; |
1679 | } | 1667 | } |
1680 | 1668 | ||
1681 | static int ks8851_remove(struct platform_device *pdev) | 1669 | static 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 | } |