Changeset 18162
- Timestamp:
- 01/12/12 16:57:15 (16 months ago)
- File:
-
- 1 edited
-
src/linux/pb42/linux-3.2/drivers/net/phy/ar8216.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/linux/pb42/linux-3.2/drivers/net/phy/ar8216.c
r18148 r18162 34 34 /* size of the vlan table */ 35 35 #define AR8X16_MAX_VLANS 128 36 #define AR8X16_PROBE_RETRIES 1036 #define AR8X16_PROBE_RETRIES 20 37 37 38 38 struct ar8216_priv { … … 120 120 } 121 121 122 static inline int 123 ar8216_id_chip(struct ar8216_priv *priv) 124 { 125 u32 val; 126 u16 id; 127 int i; 128 129 val = ar8216_mii_read(priv, AR8216_REG_CTRL); 130 if (val == ~0) 131 return UNKNOWN; 132 133 id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION); 134 for (i = 0; i < AR8X16_PROBE_RETRIES; i++) { 135 u16 t; 136 137 val = ar8216_mii_read(priv, AR8216_REG_CTRL); 138 if (val == ~0) 139 return UNKNOWN; 140 141 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION); 142 if (t != id) 143 return UNKNOWN; 144 } 145 122 static inline int id_to_type(int id) 123 { 146 124 switch (id) { 147 125 case 0x0101: … … 153 131 return AR8316; 154 132 default: 133 return UNKNOWN; 134 } 135 136 } 137 138 static inline int 139 ar8216_id_chip(struct ar8216_priv *priv) 140 { 141 u32 val; 142 u16 id; 143 int i,type; 144 145 val = ar8216_mii_read(priv, AR8216_REG_CTRL); 146 id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION); 147 type = id_to_type(id); 148 149 if (type==UNKNOWN) { 150 for (i = 0; i < AR8X16_PROBE_RETRIES; i++) { 151 u16 t; 152 val = ar8216_mii_read(priv, AR8216_REG_CTRL); 153 if (val == ~0) 154 continue; 155 156 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION); 157 158 if (id_to_type(t)!=UNKNOWN) { 159 id = t; 160 type = id_to_type(id); 161 break; 162 } 163 } 164 } 165 166 if (type==UNKNOWN) 155 167 printk(KERN_DEBUG 156 168 "ar8216: Unknown Atheros device [ver=%d, rev=%d, phy_id=%04x%04x]\n", … … 159 171 mdiobus_read(priv->phy->bus, priv->phy->addr, 2), 160 172 mdiobus_read(priv->phy->bus, priv->phy->addr, 3)); 161 162 return UNKNOWN; 163 } 173 else 174 printk(KERN_DEBUG 175 "ar8216: Atheros device found [ver=%d, rev=%d, phy_id=%04x%04x]\n", 176 (int)(id >> AR8216_CTRL_VERSION_S), 177 (int)(id & AR8216_CTRL_REVISION), 178 mdiobus_read(priv->phy->bus, priv->phy->addr, 2), 179 mdiobus_read(priv->phy->bus, priv->phy->addr, 3)); 180 181 182 return type; 183 164 184 } 165 185 … … 967 987 struct ar8216_priv priv; 968 988 u16 chip; 969 970 989 priv.phy = pdev; 990 971 991 chip = ar8216_id_chip(&priv); 972 992 if (chip == UNKNOWN)
Note: See TracChangeset
for help on using the changeset viewer.
