Changeset 14495


Ignore:
Timestamp:
2009-02-13T11:43:40+01:00 (7 years ago)
Author:
juhosg
Message:

[ar71xx] ag71xx driver: update phy connecting code

Location:
trunk/target/linux/ar71xx/files/drivers/net/ag71xx
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h

    r14204 r14495  
    22 *  Atheros AR71xx built-in ethernet mac driver 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    3939 
    4040#define AG71XX_DRV_NAME         "ag71xx" 
    41 #define AG71XX_DRV_VERSION      "0.5.17" 
     41#define AG71XX_DRV_VERSION      "0.5.18" 
    4242 
    4343#define AG71XX_NAPI_WEIGHT      64 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ethtool.c

    r12262 r14495  
    22 *  Atheros AR71xx built-in ethernet mac driver 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c

    r14204 r14495  
    22 *  Atheros AR71xx built-in ethernet mac driver 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c

    r14486 r14495  
    22 *  Atheros AR71xx built-in ethernet mac driver 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c

    r14494 r14495  
    22 *  Atheros AR71xx built-in ethernet mac driver 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    178178} 
    179179 
    180 int ag71xx_phy_connect(struct ag71xx *ag) 
     180static int ag71xx_phy_connect_fixed(struct ag71xx *ag) 
     181{ 
     182        struct net_device *dev = ag->dev; 
     183        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     184        int ret = 0; 
     185 
     186        /* use fixed settings */ 
     187        switch (pdata->speed) { 
     188        case SPEED_10: 
     189        case SPEED_100: 
     190        case SPEED_1000: 
     191                break; 
     192        default: 
     193                printk(KERN_ERR "%s: invalid speed specified\n", 
     194                        dev->name); 
     195                ret = -EINVAL; 
     196                break; 
     197        } 
     198 
     199        return ret; 
     200} 
     201 
     202static int ag71xx_phy_connect_multi(struct ag71xx *ag) 
    181203{ 
    182204        struct net_device *dev = ag->dev; 
     
    185207        int phy_count = 0; 
    186208        int phy_addr; 
    187  
    188         if (ag->mii_bus && pdata->phy_mask) { 
    189                 /* TODO: use mutex of the mdio bus? */ 
    190                 for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) { 
    191                         if (!(pdata->phy_mask & (1 << phy_addr))) 
    192                                 continue; 
    193  
    194                         if (ag->mii_bus->phy_map[phy_addr] == NULL) 
    195                                 continue; 
    196  
    197                         DBG("%s: PHY found at %s, uid=%08x\n", 
    198                                 dev->name, 
    199                                 ag->mii_bus->phy_map[phy_addr]->dev.bus_id, 
    200                                 ag->mii_bus->phy_map[phy_addr]->phy_id); 
    201  
    202                         if (phydev == NULL) 
    203                                 phydev = ag->mii_bus->phy_map[phy_addr]; 
    204  
    205                         phy_count++; 
    206                 } 
     209        int ret = 0; 
     210 
     211        for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) { 
     212                if (!(pdata->phy_mask & (1 << phy_addr))) 
     213                        continue; 
     214 
     215                if (ag->mii_bus->phy_map[phy_addr] == NULL) 
     216                        continue; 
     217 
     218                DBG("%s: PHY found at %s, uid=%08x\n", 
     219                        dev->name, 
     220                        ag->mii_bus->phy_map[phy_addr]->dev.bus_id, 
     221                        ag->mii_bus->phy_map[phy_addr]->phy_id); 
     222 
     223                if (phydev == NULL) 
     224                        phydev = ag->mii_bus->phy_map[phy_addr]; 
     225 
     226                phy_count++; 
    207227        } 
    208228 
    209229        switch (phy_count) { 
     230        case 0: 
     231                printk(KERN_ERR "%s: no PHY found with phy_mask=%08x\n", 
     232                        dev->name, pdata->phy_mask); 
     233                ret = -ENODEV; 
     234                break; 
    210235        case 1: 
    211236                ag->phy_dev = phy_connect(dev, phydev->dev.bus_id, 
     
    237262 
    238263        default: 
    239                 switch (pdata->speed) { 
    240                 case SPEED_10: 
    241                 case SPEED_100: 
    242                 case SPEED_1000: 
    243                         break; 
    244                 default: 
    245                         printk(KERN_ERR "%s: invalid speed specified\n", 
    246                                 dev->name); 
    247                         return -EINVAL; 
    248                 } 
    249  
    250                 ag->phy_dev = NULL; 
    251264                printk(KERN_DEBUG "%s: connected to %d PHYs\n", 
    252265                        dev->name, phy_count); 
    253                 break; 
    254         } 
    255  
    256         return 0; 
     266                ret = ag71xx_phy_connect_fixed(ag); 
     267                break; 
     268        } 
     269 
     270        return ret; 
     271} 
     272 
     273int ag71xx_phy_connect(struct ag71xx *ag) 
     274{ 
     275        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     276 
     277        if (pdata->phy_mask) 
     278                return ag71xx_phy_connect_multi(ag); 
     279 
     280        return ag71xx_phy_connect_fixed(ag); 
    257281} 
    258282 
Note: See TracChangeset for help on using the changeset viewer.