static int m88e1510_config_init(struct phy_device *phydev) { int err; int temp; /* SGMII-to-Copper mode initialization */ if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { /* Select page 18 */ err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 18); if (err < 0) return err; /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */ temp = phy_read(phydev, MII_88E1510_GEN_CTRL_REG_1); temp &= ~MII_88E1510_GEN_CTRL_REG_1_MODE_MASK; temp |= MII_88E1510_GEN_CTRL_REG_1_MODE_SGMII; err = phy_write(phydev, MII_88E1510_GEN_CTRL_REG_1, temp); if (err < 0) return err; /* PHY reset is necessary after changing MODE[2:0] */ temp |= MII_88E1510_GEN_CTRL_REG_1_RESET; err = phy_write(phydev, MII_88E1510_GEN_CTRL_REG_1, temp); if (err < 0) return err; /* Reset page selection */ err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0); if (err < 0) return err; } return m88e1121_config_init(phydev); }
static int m88e1318s_config_init(struct phy_device *phydev) { u16 reg; int ret; ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_88E1121_PHY_MSCR_PAGE); if (ret < 0) return ret; reg = phy_read(phydev, MII_88E1318S_PHY_MSCR1_REG); reg |= MII_88E1318S_PHY_MSCR1_PAD_ODD; ret = phy_write(phydev, MII_88E1318S_PHY_MSCR1_REG, reg); if (ret < 0) return ret; return m88e1121_config_init(phydev); }