int chip_id;
int chip_rev;
__u32 wolopts;
+ u8 downshift_cnt;
};
static int lan88xx_read_page(struct phy_device *phydev)
static int lan88xx_set_tunable(struct phy_device *phydev,
struct ethtool_tunable *tuna, const void *data)
{
+ struct lan88xx_priv *priv = phydev->priv;
+ int ret;
+
switch (tuna->id) {
case ETHTOOL_PHY_DOWNSHIFT:
- return lan88xx_set_downshift(phydev, *(const u8 *)data);
+ ret = lan88xx_set_downshift(phydev, *(const u8 *)data);
+ if (!ret)
+ priv->downshift_cnt = *(const u8 *)data;
+ return ret;
default:
return -EOPNOTSUPP;
}
return -ENOMEM;
priv->wolopts = 0;
+ priv->downshift_cnt = 2;
len = of_property_read_variable_u32_array(dev->of_node,
"microchip,led-modes",
static int lan88xx_config_init(struct phy_device *phydev)
{
- int val;
+ struct lan88xx_priv *priv = phydev->priv;
+ int val, err;
/*Zerodetect delay enable */
val = phy_read_mmd(phydev, MDIO_MMD_PCS,
/* Config DSP registers */
lan88xx_config_TR_regs(phydev);
+ err = lan88xx_set_downshift(phydev, priv->downshift_cnt);
+ if (err < 0)
+ return err;
+
return 0;
}