diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2016-08-18 18:30:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-08-19 20:15:36 -0400 |
commit | 4bd11675cf0d39e912b55e4d8fa91c85a82d946a (patch) | |
tree | 988a0dc09ee2c4ff4b085e1325e776e3818259f5 /drivers/net/dsa | |
parent | d9338023fb8e60aa09014034a993f8ddc86c65fa (diff) |
net: dsa: bcm_sf2: Use device managed helpers
Now that we have converted the drivers into a proper platform device
driver, we can use the device managed helper functions to simplify the
error paths a bit wrt. register resources and IRQs.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r-- | drivers/net/dsa/bcm_sf2.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index fe1cc92f72a8..9f8e007b01d6 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c | |||
@@ -1630,6 +1630,7 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1630 | struct bcm_sf2_priv *priv; | 1630 | struct bcm_sf2_priv *priv; |
1631 | struct dsa_switch *ds; | 1631 | struct dsa_switch *ds; |
1632 | void __iomem **base; | 1632 | void __iomem **base; |
1633 | struct resource *r; | ||
1633 | unsigned int i; | 1634 | unsigned int i; |
1634 | u32 reg, rev; | 1635 | u32 reg, rev; |
1635 | int ret; | 1636 | int ret; |
@@ -1655,11 +1656,11 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1655 | 1656 | ||
1656 | base = &priv->core; | 1657 | base = &priv->core; |
1657 | for (i = 0; i < BCM_SF2_REGS_NUM; i++) { | 1658 | for (i = 0; i < BCM_SF2_REGS_NUM; i++) { |
1658 | *base = of_iomap(dn, i); | 1659 | r = platform_get_resource(pdev, IORESOURCE_MEM, i); |
1659 | if (*base == NULL) { | 1660 | *base = devm_ioremap_resource(&pdev->dev, r); |
1661 | if (IS_ERR(*base)) { | ||
1660 | pr_err("unable to find register: %s\n", reg_names[i]); | 1662 | pr_err("unable to find register: %s\n", reg_names[i]); |
1661 | ret = -ENOMEM; | 1663 | return PTR_ERR(*base); |
1662 | goto out_unmap; | ||
1663 | } | 1664 | } |
1664 | base++; | 1665 | base++; |
1665 | } | 1666 | } |
@@ -1667,30 +1668,30 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1667 | ret = bcm_sf2_sw_rst(priv); | 1668 | ret = bcm_sf2_sw_rst(priv); |
1668 | if (ret) { | 1669 | if (ret) { |
1669 | pr_err("unable to software reset switch: %d\n", ret); | 1670 | pr_err("unable to software reset switch: %d\n", ret); |
1670 | goto out_unmap; | 1671 | return ret; |
1671 | } | 1672 | } |
1672 | 1673 | ||
1673 | ret = bcm_sf2_mdio_register(ds); | 1674 | ret = bcm_sf2_mdio_register(ds); |
1674 | if (ret) { | 1675 | if (ret) { |
1675 | pr_err("failed to register MDIO bus\n"); | 1676 | pr_err("failed to register MDIO bus\n"); |
1676 | goto out_unmap; | 1677 | return ret; |
1677 | } | 1678 | } |
1678 | 1679 | ||
1679 | /* Disable all interrupts and request them */ | 1680 | /* Disable all interrupts and request them */ |
1680 | bcm_sf2_intr_disable(priv); | 1681 | bcm_sf2_intr_disable(priv); |
1681 | 1682 | ||
1682 | ret = request_irq(priv->irq0, bcm_sf2_switch_0_isr, 0, | 1683 | ret = devm_request_irq(&pdev->dev, priv->irq0, bcm_sf2_switch_0_isr, 0, |
1683 | "switch_0", priv); | 1684 | "switch_0", priv); |
1684 | if (ret < 0) { | 1685 | if (ret < 0) { |
1685 | pr_err("failed to request switch_0 IRQ\n"); | 1686 | pr_err("failed to request switch_0 IRQ\n"); |
1686 | goto out_mdio; | 1687 | goto out_mdio; |
1687 | } | 1688 | } |
1688 | 1689 | ||
1689 | ret = request_irq(priv->irq1, bcm_sf2_switch_1_isr, 0, | 1690 | ret = devm_request_irq(&pdev->dev, priv->irq1, bcm_sf2_switch_1_isr, 0, |
1690 | "switch_1", priv); | 1691 | "switch_1", priv); |
1691 | if (ret < 0) { | 1692 | if (ret < 0) { |
1692 | pr_err("failed to request switch_1 IRQ\n"); | 1693 | pr_err("failed to request switch_1 IRQ\n"); |
1693 | goto out_free_irq0; | 1694 | goto out_mdio; |
1694 | } | 1695 | } |
1695 | 1696 | ||
1696 | /* Reset the MIB counters */ | 1697 | /* Reset the MIB counters */ |
@@ -1720,7 +1721,7 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1720 | 1721 | ||
1721 | ret = dsa_register_switch(ds, dn); | 1722 | ret = dsa_register_switch(ds, dn); |
1722 | if (ret) | 1723 | if (ret) |
1723 | goto out_free_irq1; | 1724 | goto out_mdio; |
1724 | 1725 | ||
1725 | pr_info("Starfighter 2 top: %x.%02x, core: %x.%02x base: 0x%p, IRQs: %d, %d\n", | 1726 | pr_info("Starfighter 2 top: %x.%02x, core: %x.%02x base: 0x%p, IRQs: %d, %d\n", |
1726 | priv->hw_params.top_rev >> 8, priv->hw_params.top_rev & 0xff, | 1727 | priv->hw_params.top_rev >> 8, priv->hw_params.top_rev & 0xff, |
@@ -1729,19 +1730,8 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1729 | 1730 | ||
1730 | return 0; | 1731 | return 0; |
1731 | 1732 | ||
1732 | out_free_irq1: | ||
1733 | free_irq(priv->irq1, priv); | ||
1734 | out_free_irq0: | ||
1735 | free_irq(priv->irq0, priv); | ||
1736 | out_mdio: | 1733 | out_mdio: |
1737 | bcm_sf2_mdio_unregister(priv); | 1734 | bcm_sf2_mdio_unregister(priv); |
1738 | out_unmap: | ||
1739 | base = &priv->core; | ||
1740 | for (i = 0; i < BCM_SF2_REGS_NUM; i++) { | ||
1741 | if (*base) | ||
1742 | iounmap(*base); | ||
1743 | base++; | ||
1744 | } | ||
1745 | return ret; | 1735 | return ret; |
1746 | } | 1736 | } |
1747 | 1737 | ||