diff -urN linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.c linux-2.6.27-rc6/drivers/net/arm/at91_ether.c --- linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.c 2008-09-16 21:15:53.000000000 +0200 +++ linux-2.6.27-rc6/drivers/net/arm/at91_ether.c 2008-09-16 21:15:59.000000000 +0200 @@ -220,7 +220,7 @@ if (!(phy & (1 << 0))) goto done; } - else if (lp->phy_type == MII_KS8721_ID) { + else if ((lp->phy_type == MII_KS8721_ID) || (lp->phy_type == MII_KSZ8041_ID)) { read_phy(lp->phy_address, MII_TPISTATUS, &phy); /* ack interrupt in Micrel PHY */ if (!(phy & ((1 << 2) | 1))) goto done; @@ -286,7 +286,7 @@ dsintr = (1 << 15) | ( 1 << 14); write_phy(lp->phy_address, MII_BCMINTR_REG, dsintr); } - else if (lp->phy_type == MII_KS8721_ID) { /* for Micrel PHY */ + else if ((lp->phy_type == MII_KS8721_ID) || (lp->phy_type == MII_KSZ8041_ID)) { /* for Micrel PHY */ dsintr = (1 << 10) | ( 1 << 8); write_phy(lp->phy_address, MII_TPISTATUS, dsintr); } @@ -341,7 +341,7 @@ dsintr = ~(1 << 14); write_phy(lp->phy_address, MII_BCMINTR_REG, dsintr); } - else if (lp->phy_type == MII_KS8721_ID) { /* for Micrel PHY */ + else if ((lp->phy_type == MII_KS8721_ID) || (lp->phy_type == MII_KSZ8041_ID)) { /* for Micrel PHY */ read_phy(lp->phy_address, MII_TPISTATUS, &dsintr); dsintr = ~((1 << 10) | (1 << 8)); write_phy(lp->phy_address, MII_TPISTATUS, dsintr); @@ -1102,6 +1102,8 @@ printk(KERN_INFO "%s: National Semiconductor DP83848 PHY\n", dev->name); else if (phy_type == MII_AC101L_ID) printk(KERN_INFO "%s: Altima AC101L PHY\n", dev->name); + else if (phy_type == MII_KSZ8041_ID) + printk(KERN_INFO "%s: Micrel KSZ8041 PHY\n", dev->name); else if (phy_type == MII_KS8721_ID) printk(KERN_INFO "%s: Micrel KS8721 PHY\n", dev->name); else if (phy_type == MII_T78Q21x3_ID) @@ -1147,6 +1149,7 @@ case MII_DP83847_ID: /* National Semiconductor DP83847: */ case MII_DP83848_ID: /* National Semiconductor DP83848: */ case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */ + case MII_KSZ8041_ID: /* Micrel KSZ8041: PHY_ID1 = 0x22, PHY_ID2 = 0x1512 */ case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */ case MII_T78Q21x3_ID: /* Teridian 78Q21x3: PHY_ID1 = 0x0E, PHY_ID2 = 7237 */ case MII_LAN83C185_ID: /* SMSC LAN83C185: PHY_ID1 = 0x0007, PHY_ID2 = 0xC0A1 */ diff -urN linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.h linux-2.6.27-rc6/drivers/net/arm/at91_ether.h --- linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.h 2008-09-14 20:15:27.000000000 +0200 +++ linux-2.6.27-rc6/drivers/net/arm/at91_ether.h 2008-09-16 21:15:59.000000000 +0200 @@ -48,6 +48,9 @@ /* Altima AC101L PHY */ #define MII_AC101L_ID 0x00225520 +/* Micrel KSZ8041 PHY */ +#define MII_KSZ8041_ID 0x00221510 + /* Micrel KS8721 PHY */ #define MII_KS8721_ID 0x00221610