int bcm_5201_init(struct net_device *dev, int phy_addr) { s16 data; /* Stop auto-negotiation */ //printk("bcm_5201_init\n"); data = mdio_read(dev, phy_addr, MII_CONTROL); mdio_write(dev, phy_addr, MII_CONTROL, data & ~MII_CNTL_AUTO); /* Set advertisement to 10/100 and Half/Full duplex * (full capabilities) */ data = mdio_read(dev, phy_addr, MII_ANADV); data |= MII_NWAY_TX | MII_NWAY_TX_FDX | MII_NWAY_T_FDX | MII_NWAY_T; mdio_write(dev, phy_addr, MII_ANADV, data); /* Restart auto-negotiation */ data = mdio_read(dev, phy_addr, MII_CONTROL); data |= MII_CNTL_RST_AUTO | MII_CNTL_AUTO; mdio_write(dev, phy_addr, MII_CONTROL, data); /* Enable TX LED instead of FDX */ data = mdio_read(dev, phy_addr, MII_INT); data &= ~MII_FDX_LED; mdio_write(dev, phy_addr, MII_INT, data); if (au1000_debug > 4) dump_mii(dev, phy_addr); return 0; }
int am79c874_init(struct net_device *dev, int phy_addr) { s16 data; /* 79c874 has quit resembled bit assignments to BCM5201 */ if (au1000_debug > 4) printk("am79c847_init\n"); /* Stop auto-negotiation */ data = mdio_read(dev, phy_addr, MII_CONTROL); mdio_write(dev, phy_addr, MII_CONTROL, data & ~MII_CNTL_AUTO); /* Set advertisement to 10/100 and Half/Full duplex * (full capabilities) */ data = mdio_read(dev, phy_addr, MII_ANADV); data |= MII_NWAY_TX | MII_NWAY_TX_FDX | MII_NWAY_T_FDX | MII_NWAY_T; mdio_write(dev, phy_addr, MII_ANADV, data); /* Restart auto-negotiation */ data = mdio_read(dev, phy_addr, MII_CONTROL); data |= MII_CNTL_RST_AUTO | MII_CNTL_AUTO; mdio_write(dev, phy_addr, MII_CONTROL, data); if (au1000_debug > 4) dump_mii(dev, phy_addr); return 0; }
int lxt971a_init(struct net_device *dev, int phy_addr) { if (au1000_debug > 4) printk("lxt971a_init\n"); /* restart auto-negotiation */ mdio_write(dev, phy_addr, MII_CONTROL, MII_CNTL_F100 | MII_CNTL_AUTO | MII_CNTL_RST_AUTO | MII_CNTL_FDX); /* set up LEDs to correct display */ mdio_write(dev, phy_addr, 20, 0x0422); if (au1000_debug > 4) dump_mii(dev, phy_addr); return 0; }
int lsi_80227_init(struct net_device *dev, int phy_addr) { if (au1000_debug > 4) printk("lsi_80227_init\n"); /* restart auto-negotiation */ mdio_write(dev, phy_addr, 0, 0x3200); mdelay(1); /* set up LEDs to correct display */ mdio_write(dev, phy_addr, 17, 0xffc0); if (au1000_debug > 4) dump_mii(dev, phy_addr); return 0; }
int lsi_80227_init(struct net_device *dev, int phy_addr) { if (au1000_debug > 4) printk("lsi_80227_init\n"); /* restart auto-negotiation */ mdio_write(dev, phy_addr, MII_CONTROL, MII_CNTL_F100 | MII_CNTL_AUTO | MII_CNTL_RST_AUTO); // | MII_CNTL_FDX); mdelay(1); /* set up LEDs to correct display */ mdio_write(dev, phy_addr, 17, 0xffc0); if (au1000_debug > 4) dump_mii(dev, phy_addr); return 0; }
int lsi_80227_reset(struct net_device *dev, int phy_addr) { s16 mii_control, timeout; if (au1000_debug > 4) { printk("lsi_80227_reset\n"); dump_mii(dev, phy_addr); } mii_control = mdio_read(dev, phy_addr, MII_CONTROL); mdio_write(dev, phy_addr, MII_CONTROL, mii_control | MII_CNTL_RESET); mdelay(1); for (timeout = 100; timeout > 0; --timeout) { mii_control = mdio_read(dev, phy_addr, MII_CONTROL); if ((mii_control & MII_CNTL_RESET) == 0) break; mdelay(1); } if (mii_control & MII_CNTL_RESET) { printk(KERN_ERR "%s PHY reset timeout !\n", dev->name); return -1; } return 0; }