diff options
| -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 | } |
