[RFC PATCH v2 2/4] net: dsa: bcm_sf2: cleanup resources in remove callback

2015-10-28 Thread Neil Armstrong
Implement a remove callback allowing the switch driver to cleanup
resources it used: interrupts and remapped register ranges.

Signed-off-by: Florian Fainelli 
Signed-off-by: Neil Armstrong 
---
 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 = >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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[RFC PATCH v2 2/4] net: dsa: bcm_sf2: cleanup resources in remove callback

2015-10-28 Thread Neil Armstrong
Implement a remove callback allowing the switch driver to cleanup
resources it used: interrupts and remapped register ranges.

Signed-off-by: Florian Fainelli 
Signed-off-by: Neil Armstrong 
---
 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 = >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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/