Changeset 22850


Ignore:
Timestamp:
2010-08-31T16:09:25+02:00 (7 years ago)
Author:
florian
Message:

[ar7] rework multi_probe patch to be cleaner

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar7/patches-2.6.32/972-cpmac_multi_probe.patch

    r22771 r22850  
    2222 { 
    2323        int i; 
    24 @@ -1122,12 +1129,39 @@ static int __devinit cpmac_probe(struct 
     24@@ -1111,9 +1118,13 @@ static int __devinit cpmac_probe(struct  
     25        struct cpmac_priv *priv; 
     26        struct net_device *dev; 
     27        struct plat_cpmac_data *pdata; 
     28+       void __iomem *mii_reg; 
     29+       u32 tmp; 
     30+       unsigned external_mii = 0; 
     31  
     32        pdata = pdev->dev.platform_data; 
     33  
     34+detect_again: 
     35        for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { 
     36                if (!(pdata->phy_mask & (1 << phy_id))) 
     37                        continue; 
     38@@ -1122,12 +1133,43 @@ static int __devinit cpmac_probe(struct  
    2539                strncpy(mdio_bus_id, cpmac_mii->id, MII_BUS_ID_SIZE); 
    2640                break; 
     
    3145-               return -ENODEV; 
    3246+ 
    33 +       if (phy_id < PHY_MAX_ADDR) 
     47+       if (phy_id < PHY_MAX_ADDR && !external_mii) 
    3448+               goto dev_alloc; 
    3549+ 
     50+       /* Now disable EPHY and enable MII */ 
    3651+       dev_info(&pdev->dev, "trying external MII\n"); 
    37 +       /* Now disable EPHY and enable MII */ 
    3852+       ar7_device_disable(AR7_RESET_BIT_EPHY); 
    39 +       *(unsigned long*) ioremap(0x08611A08, 4) |= 0x00000001; 
    4053+ 
    41 +       for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { 
    42 +               if (!(pdata->phy_mask & (1 << phy_id))) 
    43 +                       continue; 
    44 +               if (!cpmac_mii->phy_map[phy_id]) 
    45 +                       continue; 
    46 +               strncpy(mdio_bus_id, cpmac_mii->id, MII_BUS_ID_SIZE); 
    47 +               break; 
    48 +       } 
     54+       mii_reg = ioremap(AR7_REGS_MII, 4); 
     55+       if (!mii_reg) { 
     56+               dev_err(&pdev->dev, "failed to iorenamp MII_SEL\n"); 
     57+               return -ENOMEM; 
     58        } 
     59  
     60+       tmp = readl(mii_reg); 
     61+       tmp |= 1; 
     62+       writel(tmp, mii_reg); 
     63+       external_mii++; 
     64+ 
     65+       if (external_mii == 1) 
     66+               goto detect_again; 
    4967+ 
    5068+       if (phy_id < PHY_MAX_ADDR) 
     
    5775+               dev_err(&pdev->dev, "unable to register fixed PHY\n"); 
    5876+               return rc; 
    59         } 
    60   
     77+       } 
     78+ 
    6179+       strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ 
    6280+       phy_id = pdev->id; 
     
    6684  
    6785        if (!dev) { 
     86--- a/arch/mips/include/asm/mach-ar7/ar7.h 
     87+++ b/arch/mips/include/asm/mach-ar7/ar7.h 
     88@@ -41,6 +41,7 @@ 
     89 #define AR7_REGS_RESET (AR7_REGS_BASE + 0x1600) 
     90 #define AR7_REGS_VLYNQ0        (AR7_REGS_BASE + 0x1800) 
     91 #define AR7_REGS_DCL   (AR7_REGS_BASE + 0x1a00) 
     92+#define AR7_REGS_MII   (AR7_REGS_BASE + 0x1a08) 
     93 #define AR7_REGS_VLYNQ1        (AR7_REGS_BASE + 0x1c00) 
     94 #define AR7_REGS_MDIO  (AR7_REGS_BASE + 0x1e00) 
     95 #define AR7_REGS_IRQ   (AR7_REGS_BASE + 0x2400) 
Note: See TracChangeset for help on using the changeset viewer.