> +static int vsc85xx_mac_if_set(struct phy_device *phydev, > + phy_interface_t *interface) > +{ > + int rc; > + u16 reg_val; > + > + mutex_lock(&phydev->lock); > + reg_val = phy_read(phydev, MSCC_PHY_EXT_PHY_CNTL_1); > + switch (*interface) { > + case PHY_INTERFACE_MODE_RGMII: > + reg_val &= ~(MAC_IF_SELECTION_MASK); > + reg_val |= (MAC_IF_SELECTION_RGMII << MAC_IF_SELECTION_POS); > + break; > + case PHY_INTERFACE_MODE_RMII: > + reg_val &= ~(MAC_IF_SELECTION_MASK); > + reg_val |= (MAC_IF_SELECTION_RMII << MAC_IF_SELECTION_POS); > + break; > + case PHY_INTERFACE_MODE_MII: > + case PHY_INTERFACE_MODE_GMII: > + default: > + reg_val &= ~(MAC_IF_SELECTION_MASK); > + reg_val |= (MAC_IF_SELECTION_GMII << MAC_IF_SELECTION_POS); > + break; > + } > + rc = phy_write(phydev, MSCC_PHY_EXT_PHY_CNTL_1, reg_val); > + if (rc != 0) > + goto out_unlock; > + > + rc = vsc85xx_soft_reset(phydev); > + > +out_unlock: > + mutex_unlock(&phydev->lock); > + > + return rc; > +}
Again, you need to justify why you are doing something completely different to all other phy drivers. You cannot you do what m88e1121_config_aneg(), mv88e111_config_init(), dp83867_config_init() does? Andrew