Messages in this thread Patch in this message | | | From | Neil Armstrong <> | Subject | [RFC PATCH v2 2/4] net: dsa: bcm_sf2: cleanup resources in remove callback | Date | Wed, 28 Oct 2015 15:13:07 +0100 |
| |
Implement a remove callback allowing the switch driver to cleanup resources it used: interrupts and remapped register ranges.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- drivers/net/dsa/bcm_sf2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 6f946fe..e0be318 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -1054,6 +1054,25 @@ out_unmap: return ret; }
+static void bcm_sf2_sw_remove(struct dsa_switch *ds) +{ + struct bcm_sf2_priv *priv = ds_to_priv(ds); + void __iomem **base; + unsigned int i; + + /* Disable all interrupts and free them */ + bcm_sf2_intr_disable(priv); + + free_irq(priv->irq0, priv); + free_irq(priv->irq1, priv); + + base = &priv->core; + for (i = 0; i < BCM_SF2_REGS_NUM; i++) { + iounmap(*base); + base++; + } +} + static int bcm_sf2_sw_set_addr(struct dsa_switch *ds, u8 *addr) { return 0; @@ -1367,6 +1386,7 @@ static struct dsa_switch_driver bcm_sf2_switch_driver = { .tag_protocol = DSA_TAG_PROTO_BRCM, .priv_size = sizeof(struct bcm_sf2_priv), .probe = bcm_sf2_sw_probe, + .remove = bcm_sf2_sw_remove, .setup = bcm_sf2_sw_setup, .set_addr = bcm_sf2_sw_set_addr, .get_phy_flags = bcm_sf2_sw_get_phy_flags, -- 1.9.1
| |