Changeset 41517


Ignore:
Timestamp:
2014-07-05T23:35:15+02:00 (4 years ago)
Author:
hauke
Message:

brcm47xx: make it possible to unregister the adm switch

Signed-off-by: Hauke Mehrtens <hauke@…>

Location:
trunk/target/linux/brcm47xx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch

    r39166 r41517  
    2020 #include <asm/uaccess.h> 
    2121 #include <asm/io.h> 
    22 @@ -2227,6 +2229,58 @@ static void b44_adjust_link(struct net_d 
     22@@ -2227,6 +2229,70 @@ static void b44_adjust_link(struct net_d 
    2323        } 
    2424 } 
    2525  
    2626+#ifdef CONFIG_BCM47XX 
    27 +static struct adm6996_gpio_platform_data b44_adm_data = { 
    28 +       .eecs   = 2, 
    29 +       .eesk   = 3, 
    30 +       .eedi   = 4, 
    31 +       .eerc   = 5, 
    32 +       .model  = ADM6996L, 
    33 +}; 
    34 + 
    35 +static struct platform_device b44_adm_dev = { 
    36 +       .name           = "adm6996_gpio", 
    37 +       .id             = -1, 
    38 +       .dev            = { 
    39 +               .platform_data = &b44_adm_data, 
    40 +       }, 
    41 +}; 
    42 + 
    4327+static int b44_register_adm_switch(struct b44 *bp) 
    4428+{ 
    4529+       int gpio; 
    46 +       int err; 
     30+       struct platform_device *pdev; 
     31+       struct adm6996_gpio_platform_data adm_data = {0}; 
     32+       struct platform_device_info info = {0}; 
    4733+ 
     34+       adm_data.model = ADM6996L; 
    4835+       gpio = bcm47xx_nvram_gpio_pin("adm_eecs"); 
    4936+       if (gpio >= 0) 
    50 +               b44_adm_data.eecs = gpio; 
     37+               adm_data.eecs = gpio; 
     38+       else 
     39+               adm_data.eecs = 2; 
    5140+ 
    5241+       gpio = bcm47xx_nvram_gpio_pin("adm_eesk"); 
    5342+       if (gpio >= 0) 
    54 +               b44_adm_data.eesk = gpio; 
     43+               adm_data.eesk = gpio; 
     44+       else 
     45+               adm_data.eesk = 3; 
    5546+ 
    5647+       gpio = bcm47xx_nvram_gpio_pin("adm_eedi"); 
    5748+       if (gpio >= 0) 
    58 +               b44_adm_data.eedi = gpio; 
     49+               adm_data.eedi = gpio; 
     50+       else 
     51+               adm_data.eedi = 4; 
    5952+ 
    6053+       gpio = bcm47xx_nvram_gpio_pin("adm_rc"); 
    6154+       if (gpio >= 0) 
    62 +               b44_adm_data.eerc = gpio; 
     55+               adm_data.eerc = gpio; 
     56+       else 
     57+               adm_data.eerc = 5; 
     58+ 
     59+       info.parent = bp->sdev->dev; 
     60+       info.name = "adm6996_gpio"; 
     61+       info.id = -1; 
     62+       info.data = &adm_data; 
     63+       info.size_data = sizeof(adm_data); 
    6364+ 
    6465+       if (!bp->adm_switch) { 
    65 +               err = platform_device_register(&b44_adm_dev); 
    66 +               if (!err) 
    67 +                       bp->adm_switch = &b44_adm_dev; 
     66+               pdev = platform_device_register_full(&info); 
     67+               if (IS_ERR(pdev)) 
     68+                       return PTR_ERR(pdev); 
     69+ 
     70+               bp->adm_switch = pdev; 
    6871+       } 
    69 +       return err; 
     72+       return 0; 
     73+} 
     74+static void b44_unregister_adm_switch(struct b44 *bp) 
     75+{ 
     76+       if (bp->adm_switch) 
     77+               platform_device_unregister(bp->adm_switch); 
    7078+} 
    7179+#else 
     
    7482+       return 0; 
    7583+} 
     84+static void b44_unregister_adm_switch(struct b44 *bp) 
     85+{ 
     86+ 
     87+} 
    7688+#endif /* CONFIG_BCM47XX */ 
    7789+ 
     
    7991 { 
    8092        struct mii_bus *mii_bus; 
    81 @@ -2270,6 +2324,9 @@ static int b44_register_phy_one(struct b 
     93@@ -2270,6 +2336,9 @@ static int b44_register_phy_one(struct b 
    8294        if (!bp->mii_bus->phy_map[bp->phy_addr] && 
    8395            (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { 
     
    89101                         "could not find PHY at %i, use fixed one\n", 
    90102                         bp->phy_addr); 
     103@@ -2465,6 +2534,7 @@ static void b44_remove_one(struct ssb_de 
     104        unregister_netdev(dev); 
     105        if (bp->flags & B44_FLAG_EXTERNAL_PHY) 
     106                b44_unregister_phy_one(bp); 
     107+       b44_unregister_adm_switch(bp); 
     108        ssb_device_disable(sdev, 0); 
     109        ssb_bus_may_powerdown(sdev->bus); 
     110        free_netdev(dev); 
    91111--- a/drivers/net/ethernet/broadcom/b44.h 
    92112+++ b/drivers/net/ethernet/broadcom/b44.h 
  • trunk/target/linux/brcm47xx/patches-3.14/209-b44-register-adm-switch.patch

    r39905 r41517  
    2020 #include <asm/uaccess.h> 
    2121 #include <asm/io.h> 
    22 @@ -2239,6 +2241,58 @@ static void b44_adjust_link(struct net_d 
     22@@ -2239,6 +2241,70 @@ static void b44_adjust_link(struct net_d 
    2323        } 
    2424 } 
    2525  
    2626+#ifdef CONFIG_BCM47XX 
    27 +static struct adm6996_gpio_platform_data b44_adm_data = { 
    28 +       .eecs   = 2, 
    29 +       .eesk   = 3, 
    30 +       .eedi   = 4, 
    31 +       .eerc   = 5, 
    32 +       .model  = ADM6996L, 
    33 +}; 
    34 + 
    35 +static struct platform_device b44_adm_dev = { 
    36 +       .name           = "adm6996_gpio", 
    37 +       .id             = -1, 
    38 +       .dev            = { 
    39 +               .platform_data = &b44_adm_data, 
    40 +       }, 
    41 +}; 
    42 + 
    4327+static int b44_register_adm_switch(struct b44 *bp) 
    4428+{ 
    4529+       int gpio; 
    46 +       int err; 
     30+       struct platform_device *pdev; 
     31+       struct adm6996_gpio_platform_data adm_data = {0}; 
     32+       struct platform_device_info info = {0}; 
    4733+ 
     34+       adm_data.model = ADM6996L; 
    4835+       gpio = bcm47xx_nvram_gpio_pin("adm_eecs"); 
    4936+       if (gpio >= 0) 
    50 +               b44_adm_data.eecs = gpio; 
     37+               adm_data.eecs = gpio; 
     38+       else 
     39+               adm_data.eecs = 2; 
    5140+ 
    5241+       gpio = bcm47xx_nvram_gpio_pin("adm_eesk"); 
    5342+       if (gpio >= 0) 
    54 +               b44_adm_data.eesk = gpio; 
     43+               adm_data.eesk = gpio; 
     44+       else 
     45+               adm_data.eesk = 3; 
    5546+ 
    5647+       gpio = bcm47xx_nvram_gpio_pin("adm_eedi"); 
    5748+       if (gpio >= 0) 
    58 +               b44_adm_data.eedi = gpio; 
     49+               adm_data.eedi = gpio; 
     50+       else 
     51+               adm_data.eedi = 4; 
    5952+ 
    6053+       gpio = bcm47xx_nvram_gpio_pin("adm_rc"); 
    6154+       if (gpio >= 0) 
    62 +               b44_adm_data.eerc = gpio; 
     55+               adm_data.eerc = gpio; 
     56+       else 
     57+               adm_data.eerc = 5; 
     58+ 
     59+       info.parent = bp->sdev->dev; 
     60+       info.name = "adm6996_gpio"; 
     61+       info.id = -1; 
     62+       info.data = &adm_data; 
     63+       info.size_data = sizeof(adm_data); 
    6364+ 
    6465+       if (!bp->adm_switch) { 
    65 +               err = platform_device_register(&b44_adm_dev); 
    66 +               if (!err) 
    67 +                       bp->adm_switch = &b44_adm_dev; 
     66+               pdev = platform_device_register_full(&info); 
     67+               if (IS_ERR(pdev)) 
     68+                       return PTR_ERR(pdev); 
     69+ 
     70+               bp->adm_switch = pdev; 
    6871+       } 
    69 +       return err; 
     72+       return 0; 
     73+} 
     74+static void b44_unregister_adm_switch(struct b44 *bp) 
     75+{ 
     76+       if (bp->adm_switch) 
     77+               platform_device_unregister(bp->adm_switch); 
    7078+} 
    7179+#else 
     
    7482+       return 0; 
    7583+} 
     84+static void b44_unregister_adm_switch(struct b44 *bp) 
     85+{ 
     86+ 
     87+} 
    7688+#endif /* CONFIG_BCM47XX */ 
    7789+ 
     
    7991 { 
    8092        struct mii_bus *mii_bus; 
    81 @@ -2282,6 +2336,9 @@ static int b44_register_phy_one(struct b 
     93@@ -2282,6 +2348,9 @@ static int b44_register_phy_one(struct b 
    8294        if (!bp->mii_bus->phy_map[bp->phy_addr] && 
    8395            (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { 
     
    89101                         "could not find PHY at %i, use fixed one\n", 
    90102                         bp->phy_addr); 
     103@@ -2476,6 +2545,7 @@ static void b44_remove_one(struct ssb_de 
     104        unregister_netdev(dev); 
     105        if (bp->flags & B44_FLAG_EXTERNAL_PHY) 
     106                b44_unregister_phy_one(bp); 
     107+       b44_unregister_adm_switch(bp); 
     108        ssb_device_disable(sdev, 0); 
     109        ssb_bus_may_powerdown(sdev->bus); 
     110        free_netdev(dev); 
    91111--- a/drivers/net/ethernet/broadcom/b44.h 
    92112+++ b/drivers/net/ethernet/broadcom/b44.h 
Note: See TracChangeset for help on using the changeset viewer.