diff options
| -rw-r--r-- | drivers/net/fec_8xx/Kconfig | 6 | ||||
| -rw-r--r-- | drivers/net/fec_8xx/fec_mii.c | 42 | 
2 files changed, 48 insertions, 0 deletions
| diff --git a/drivers/net/fec_8xx/Kconfig b/drivers/net/fec_8xx/Kconfig index de04d68673d9..4560026ed419 100644 --- a/drivers/net/fec_8xx/Kconfig +++ b/drivers/net/fec_8xx/Kconfig | |||
| @@ -12,3 +12,9 @@ config FEC_8XX_DM9161_PHY | |||
| 12 | bool "Support DM9161 PHY" | 12 | bool "Support DM9161 PHY" | 
| 13 | depends on FEC_8XX | 13 | depends on FEC_8XX | 
| 14 | default n | 14 | default n | 
| 15 | |||
| 16 | config FEC_8XX_LXT971_PHY | ||
| 17 | bool "Support LXT971/LXT972 PHY" | ||
| 18 | depends on FEC_8XX | ||
| 19 | default n | ||
| 20 | |||
| diff --git a/drivers/net/fec_8xx/fec_mii.c b/drivers/net/fec_8xx/fec_mii.c index 803eb095cf8e..3b44ac1a7bfe 100644 --- a/drivers/net/fec_8xx/fec_mii.c +++ b/drivers/net/fec_8xx/fec_mii.c | |||
| @@ -203,6 +203,39 @@ static void dm9161_shutdown(struct net_device *dev) | |||
| 203 | 203 | ||
| 204 | #endif | 204 | #endif | 
| 205 | 205 | ||
| 206 | #ifdef CONFIG_FEC_8XX_LXT971_PHY | ||
| 207 | |||
| 208 | /* Support for LXT971/972 PHY */ | ||
| 209 | |||
| 210 | #define MII_LXT971_PCR 16 /* Port Control Register */ | ||
| 211 | #define MII_LXT971_SR2 17 /* Status Register 2 */ | ||
| 212 | #define MII_LXT971_IER 18 /* Interrupt Enable Register */ | ||
| 213 | #define MII_LXT971_ISR 19 /* Interrupt Status Register */ | ||
| 214 | #define MII_LXT971_LCR 20 /* LED Control Register */ | ||
| 215 | #define MII_LXT971_TCR 30 /* Transmit Control Register */ | ||
| 216 | |||
| 217 | static void lxt971_startup(struct net_device *dev) | ||
| 218 | { | ||
| 219 | struct fec_enet_private *fep = netdev_priv(dev); | ||
| 220 | |||
| 221 | fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x00F2); | ||
| 222 | } | ||
| 223 | |||
| 224 | static void lxt971_ack_int(struct net_device *dev) | ||
| 225 | { | ||
| 226 | struct fec_enet_private *fep = netdev_priv(dev); | ||
| 227 | |||
| 228 | fec_mii_read(dev, fep->mii_if.phy_id, MII_LXT971_ISR); | ||
| 229 | } | ||
| 230 | |||
| 231 | static void lxt971_shutdown(struct net_device *dev) | ||
| 232 | { | ||
| 233 | struct fec_enet_private *fep = netdev_priv(dev); | ||
| 234 | |||
| 235 | fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x0000); | ||
| 236 | } | ||
| 237 | #endif | ||
| 238 | |||
| 206 | /**********************************************************************************/ | 239 | /**********************************************************************************/ | 
| 207 | 240 | ||
| 208 | static const struct phy_info phy_info[] = { | 241 | static const struct phy_info phy_info[] = { | 
| @@ -215,6 +248,15 @@ static const struct phy_info phy_info[] = { | |||
| 215 | .shutdown = dm9161_shutdown, | 248 | .shutdown = dm9161_shutdown, | 
| 216 | }, | 249 | }, | 
| 217 | #endif | 250 | #endif | 
| 251 | #ifdef CONFIG_FEC_8XX_LXT971_PHY | ||
| 252 | { | ||
| 253 | .id = 0x0001378e, | ||
| 254 | .name = "LXT971/972", | ||
| 255 | .startup = lxt971_startup, | ||
| 256 | .ack_int = lxt971_ack_int, | ||
| 257 | .shutdown = lxt971_shutdown, | ||
| 258 | }, | ||
| 259 | #endif | ||
| 218 | #ifdef CONFIG_FEC_8XX_GENERIC_PHY | 260 | #ifdef CONFIG_FEC_8XX_GENERIC_PHY | 
| 219 | { | 261 | { | 
| 220 | .id = 0, | 262 | .id = 0, | 
