Author: hauke
Date: 2014-07-05 23:35:15 +0200 (Sat, 05 Jul 2014)
New Revision: 41517

Modified:
   trunk/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch
   trunk/target/linux/brcm47xx/patches-3.14/209-b44-register-adm-switch.patch
Log:
brcm47xx: make it possible to unregister the adm switch

Signed-off-by: Hauke Mehrtens <[email protected]>


Modified: 
trunk/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch
===================================================================
--- trunk/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch  
2014-07-05 19:40:15 UTC (rev 41516)
+++ trunk/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch  
2014-07-05 21:35:15 UTC (rev 41517)
@@ -19,66 +19,78 @@
  
  #include <asm/uaccess.h>
  #include <asm/io.h>
-@@ -2227,6 +2229,58 @@ static void b44_adjust_link(struct net_d
+@@ -2227,6 +2229,70 @@ static void b44_adjust_link(struct net_d
        }
  }
  
 +#ifdef CONFIG_BCM47XX
-+static struct adm6996_gpio_platform_data b44_adm_data = {
-+      .eecs   = 2,
-+      .eesk   = 3,
-+      .eedi   = 4,
-+      .eerc   = 5,
-+      .model  = ADM6996L,
-+};
-+
-+static struct platform_device b44_adm_dev = {
-+      .name           = "adm6996_gpio",
-+      .id             = -1,
-+      .dev            = {
-+              .platform_data = &b44_adm_data,
-+      },
-+};
-+
 +static int b44_register_adm_switch(struct b44 *bp)
 +{
 +      int gpio;
-+      int err;
++      struct platform_device *pdev;
++      struct adm6996_gpio_platform_data adm_data = {0};
++      struct platform_device_info info = {0};
 +
++      adm_data.model = ADM6996L;
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eecs");
 +      if (gpio >= 0)
-+              b44_adm_data.eecs = gpio;
++              adm_data.eecs = gpio;
++      else
++              adm_data.eecs = 2;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eesk");
 +      if (gpio >= 0)
-+              b44_adm_data.eesk = gpio;
++              adm_data.eesk = gpio;
++      else
++              adm_data.eesk = 3;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eedi");
 +      if (gpio >= 0)
-+              b44_adm_data.eedi = gpio;
++              adm_data.eedi = gpio;
++      else
++              adm_data.eedi = 4;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_rc");
 +      if (gpio >= 0)
-+              b44_adm_data.eerc = gpio;
++              adm_data.eerc = gpio;
++      else
++              adm_data.eerc = 5;
 +
++      info.parent = bp->sdev->dev;
++      info.name = "adm6996_gpio";
++      info.id = -1;
++      info.data = &adm_data;
++      info.size_data = sizeof(adm_data);
++
 +      if (!bp->adm_switch) {
-+              err = platform_device_register(&b44_adm_dev);
-+              if (!err)
-+                      bp->adm_switch = &b44_adm_dev;
++              pdev = platform_device_register_full(&info);
++              if (IS_ERR(pdev))
++                      return PTR_ERR(pdev);
++
++              bp->adm_switch = pdev;
 +      }
-+      return err;
++      return 0;
 +}
++static void b44_unregister_adm_switch(struct b44 *bp)
++{
++      if (bp->adm_switch)
++              platform_device_unregister(bp->adm_switch);
++}
 +#else
 +static int b44_register_adm_switch(struct b44 *bp)
 +{
 +      return 0;
 +}
++static void b44_unregister_adm_switch(struct b44 *bp)
++{
++
++}
 +#endif /* CONFIG_BCM47XX */
 +
  static int b44_register_phy_one(struct b44 *bp)
  {
        struct mii_bus *mii_bus;
-@@ -2270,6 +2324,9 @@ static int b44_register_phy_one(struct b
+@@ -2270,6 +2336,9 @@ static int b44_register_phy_one(struct b
        if (!bp->mii_bus->phy_map[bp->phy_addr] &&
            (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
  
@@ -88,6 +100,14 @@
                dev_info(sdev->dev,
                         "could not find PHY at %i, use fixed one\n",
                         bp->phy_addr);
+@@ -2465,6 +2534,7 @@ static void b44_remove_one(struct ssb_de
+       unregister_netdev(dev);
+       if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+               b44_unregister_phy_one(bp);
++      b44_unregister_adm_switch(bp);
+       ssb_device_disable(sdev, 0);
+       ssb_bus_may_powerdown(sdev->bus);
+       free_netdev(dev);
 --- a/drivers/net/ethernet/broadcom/b44.h
 +++ b/drivers/net/ethernet/broadcom/b44.h
 @@ -404,6 +404,9 @@ struct b44 {

Modified: 
trunk/target/linux/brcm47xx/patches-3.14/209-b44-register-adm-switch.patch
===================================================================
--- trunk/target/linux/brcm47xx/patches-3.14/209-b44-register-adm-switch.patch  
2014-07-05 19:40:15 UTC (rev 41516)
+++ trunk/target/linux/brcm47xx/patches-3.14/209-b44-register-adm-switch.patch  
2014-07-05 21:35:15 UTC (rev 41517)
@@ -19,66 +19,78 @@
  
  #include <asm/uaccess.h>
  #include <asm/io.h>
-@@ -2239,6 +2241,58 @@ static void b44_adjust_link(struct net_d
+@@ -2239,6 +2241,70 @@ static void b44_adjust_link(struct net_d
        }
  }
  
 +#ifdef CONFIG_BCM47XX
-+static struct adm6996_gpio_platform_data b44_adm_data = {
-+      .eecs   = 2,
-+      .eesk   = 3,
-+      .eedi   = 4,
-+      .eerc   = 5,
-+      .model  = ADM6996L,
-+};
-+
-+static struct platform_device b44_adm_dev = {
-+      .name           = "adm6996_gpio",
-+      .id             = -1,
-+      .dev            = {
-+              .platform_data = &b44_adm_data,
-+      },
-+};
-+
 +static int b44_register_adm_switch(struct b44 *bp)
 +{
 +      int gpio;
-+      int err;
++      struct platform_device *pdev;
++      struct adm6996_gpio_platform_data adm_data = {0};
++      struct platform_device_info info = {0};
 +
++      adm_data.model = ADM6996L;
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eecs");
 +      if (gpio >= 0)
-+              b44_adm_data.eecs = gpio;
++              adm_data.eecs = gpio;
++      else
++              adm_data.eecs = 2;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eesk");
 +      if (gpio >= 0)
-+              b44_adm_data.eesk = gpio;
++              adm_data.eesk = gpio;
++      else
++              adm_data.eesk = 3;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_eedi");
 +      if (gpio >= 0)
-+              b44_adm_data.eedi = gpio;
++              adm_data.eedi = gpio;
++      else
++              adm_data.eedi = 4;
 +
 +      gpio = bcm47xx_nvram_gpio_pin("adm_rc");
 +      if (gpio >= 0)
-+              b44_adm_data.eerc = gpio;
++              adm_data.eerc = gpio;
++      else
++              adm_data.eerc = 5;
 +
++      info.parent = bp->sdev->dev;
++      info.name = "adm6996_gpio";
++      info.id = -1;
++      info.data = &adm_data;
++      info.size_data = sizeof(adm_data);
++
 +      if (!bp->adm_switch) {
-+              err = platform_device_register(&b44_adm_dev);
-+              if (!err)
-+                      bp->adm_switch = &b44_adm_dev;
++              pdev = platform_device_register_full(&info);
++              if (IS_ERR(pdev))
++                      return PTR_ERR(pdev);
++
++              bp->adm_switch = pdev;
 +      }
-+      return err;
++      return 0;
 +}
++static void b44_unregister_adm_switch(struct b44 *bp)
++{
++      if (bp->adm_switch)
++              platform_device_unregister(bp->adm_switch);
++}
 +#else
 +static int b44_register_adm_switch(struct b44 *bp)
 +{
 +      return 0;
 +}
++static void b44_unregister_adm_switch(struct b44 *bp)
++{
++
++}
 +#endif /* CONFIG_BCM47XX */
 +
  static int b44_register_phy_one(struct b44 *bp)
  {
        struct mii_bus *mii_bus;
-@@ -2282,6 +2336,9 @@ static int b44_register_phy_one(struct b
+@@ -2282,6 +2348,9 @@ static int b44_register_phy_one(struct b
        if (!bp->mii_bus->phy_map[bp->phy_addr] &&
            (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
  
@@ -88,6 +100,14 @@
                dev_info(sdev->dev,
                         "could not find PHY at %i, use fixed one\n",
                         bp->phy_addr);
+@@ -2476,6 +2545,7 @@ static void b44_remove_one(struct ssb_de
+       unregister_netdev(dev);
+       if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+               b44_unregister_phy_one(bp);
++      b44_unregister_adm_switch(bp);
+       ssb_device_disable(sdev, 0);
+       ssb_bus_may_powerdown(sdev->bus);
+       free_netdev(dev);
 --- a/drivers/net/ethernet/broadcom/b44.h
 +++ b/drivers/net/ethernet/broadcom/b44.h
 @@ -404,6 +404,9 @@ struct b44 {
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to