ibm_newemac: Add ET1011c PHY support
[pandora-kernel.git] / drivers / net / ibm_newemac / phy.c
index aa1f0dd..9308fad 100644 (file)
@@ -306,8 +306,84 @@ static struct mii_phy_def cis8201_phy_def = {
        .ops            = &cis8201_phy_ops
 };
 
+static struct mii_phy_def bcm5248_phy_def = {
+
+       .phy_id         = 0x0143bc00,
+       .phy_id_mask    = 0x0ffffff0,
+       .name           = "BCM5248 10/100 SMII Ethernet",
+       .ops            = &generic_phy_ops
+};
+
+static int m88e1111_init(struct mii_phy *phy)
+{
+       pr_debug("%s: Marvell 88E1111 Ethernet\n", __FUNCTION__);
+       phy_write(phy, 0x14, 0x0ce3);
+       phy_write(phy, 0x18, 0x4101);
+       phy_write(phy, 0x09, 0x0e00);
+       phy_write(phy, 0x04, 0x01e1);
+       phy_write(phy, 0x00, 0x9140);
+       phy_write(phy, 0x00, 0x1140);
+
+       return  0;
+}
+
+static int et1011c_init(struct mii_phy *phy)
+{
+       u16 reg_short;
+
+       reg_short = (u16)(phy_read(phy, 0x16));
+       reg_short &= ~(0x7);
+       reg_short |= 0x6;       /* RGMII Trace Delay*/
+       phy_write(phy, 0x16, reg_short);
+
+       reg_short = (u16)(phy_read(phy, 0x17));
+       reg_short &= ~(0x40);
+       phy_write(phy, 0x17, reg_short);
+
+       phy_write(phy, 0x1c, 0x74f0);
+       return 0;
+}
+
+static struct mii_phy_ops et1011c_phy_ops = {
+       .init           = et1011c_init,
+       .setup_aneg     = genmii_setup_aneg,
+       .setup_forced   = genmii_setup_forced,
+       .poll_link      = genmii_poll_link,
+       .read_link      = genmii_read_link
+};
+
+static struct mii_phy_def et1011c_phy_def = {
+       .phy_id         = 0x0282f000,
+       .phy_id_mask    = 0x0fffff00,
+       .name           = "ET1011C Gigabit Ethernet",
+       .ops            = &et1011c_phy_ops
+};
+
+
+
+
+
+static struct mii_phy_ops m88e1111_phy_ops = {
+       .init           = m88e1111_init,
+       .setup_aneg     = genmii_setup_aneg,
+       .setup_forced   = genmii_setup_forced,
+       .poll_link      = genmii_poll_link,
+       .read_link      = genmii_read_link
+};
+
+static struct mii_phy_def m88e1111_phy_def = {
+
+       .phy_id         = 0x01410CC0,
+       .phy_id_mask    = 0x0ffffff0,
+       .name           = "Marvell 88E1111 Ethernet",
+       .ops            = &m88e1111_phy_ops,
+};
+
 static struct mii_phy_def *mii_phy_table[] = {
+       &et1011c_phy_def,
        &cis8201_phy_def,
+       &bcm5248_phy_def,
+       &m88e1111_phy_def,
        &genmii_phy_def,
        NULL
 };