reg, val);
 }
 
+static int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip,
+                                int lane, int device, int reg, u16 *val)
+{
+       int reg_c45 = MII_ADDR_C45 | device << 16 | reg;
+
+       return mv88e6xxx_phy_read(chip, lane, reg_c45, val);
+}
+
+static int mv88e6390_serdes_write(struct mv88e6xxx_chip *chip,
+                                 int lane, int device, int reg, u16 val)
+{
+       int reg_c45 = MII_ADDR_C45 | device << 16 | reg;
+
+       return mv88e6xxx_phy_write(chip, lane, reg_c45, val);
+}
+
 static int mv88e6352_serdes_power_set(struct mv88e6xxx_chip *chip, bool on)
 {
        u16 val, new_val;
                                      bool on)
 {
        u16 val, new_val;
-       int reg_c45;
        int err;
 
-       reg_c45 = MII_ADDR_C45 | MV88E6390_SERDES_DEVICE |
-               MV88E6390_PCS_CONTROL_1;
-       err = mv88e6xxx_phy_read(chip, lane, reg_c45, &val);
+       err = mv88e6390_serdes_read(chip, lane, MDIO_MMD_PHYXS,
+                                   MV88E6390_PCS_CONTROL_1, &val);
+
        if (err)
                return err;
 
                new_val = val | MV88E6390_PCS_CONTROL_1_PDOWN;
 
        if (val != new_val)
-               err = mv88e6xxx_phy_write(chip, lane, reg_c45, new_val);
+               err = mv88e6390_serdes_write(chip, lane, MDIO_MMD_PHYXS,
+                                            MV88E6390_PCS_CONTROL_1, new_val);
 
        return err;
 }
                                        bool on)
 {
        u16 val, new_val;
-       int reg_c45;
        int err;
 
-       reg_c45 = MII_ADDR_C45 | MV88E6390_SERDES_DEVICE |
-               MV88E6390_SGMII_CONTROL;
-       err = mv88e6xxx_phy_read(chip, lane, reg_c45, &val);
+       err = mv88e6390_serdes_read(chip, lane, MDIO_MMD_PHYXS,
+                                   MV88E6390_SGMII_CONTROL, &val);
        if (err)
                return err;
 
                new_val = val | MV88E6390_SGMII_CONTROL_PDOWN;
 
        if (val != new_val)
-               err = mv88e6xxx_phy_write(chip, lane, reg_c45, new_val);
+               err = mv88e6390_serdes_write(chip, lane, MDIO_MMD_PHYXS,
+                                            MV88E6390_SGMII_CONTROL, new_val);
 
        return err;
 }