#define MDIO_MMD_PCS_MV_TDR_OFF_CUTOFF                 65246
 
+struct mv88q2xxx_priv {
+       bool enable_temp;
+};
+
 struct mmd_val {
        int devad;
        u32 regnum;
 
 static int mv88q2xxx_hwmon_probe(struct phy_device *phydev)
 {
+       struct mv88q2xxx_priv *priv = phydev->priv;
        struct device *dev = &phydev->mdio.dev;
        struct device *hwmon;
        char *hwmon_name;
-       int ret;
-
-       /* Enable temperature sense */
-       ret = phy_modify_mmd(phydev, MDIO_MMD_PCS, MDIO_MMD_PCS_MV_TEMP_SENSOR2,
-                            MDIO_MMD_PCS_MV_TEMP_SENSOR2_DIS_MASK, 0);
-       if (ret < 0)
-               return ret;
 
+       priv->enable_temp = true;
        hwmon_name = devm_hwmon_sanitize_name(dev, dev_name(dev));
        if (IS_ERR(hwmon_name))
                return PTR_ERR(hwmon_name);
 
 static int mv88q2xxx_probe(struct phy_device *phydev)
 {
+       struct mv88q2xxx_priv *priv;
+
+       priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
+       if (!priv)
+               return -ENOMEM;
+
+       phydev->priv = priv;
+
        return mv88q2xxx_hwmon_probe(phydev);
 }
 
 
 static int mv88q222x_config_init(struct phy_device *phydev)
 {
+       struct mv88q2xxx_priv *priv = phydev->priv;
+       int ret;
+
+       /* Enable temperature sense */
+       if (priv->enable_temp) {
+               ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
+                                    MDIO_MMD_PCS_MV_TEMP_SENSOR2,
+                                    MDIO_MMD_PCS_MV_TEMP_SENSOR2_DIS_MASK, 0);
+               if (ret < 0)
+                       return ret;
+       }
+
        if (phydev->c45_ids.device_ids[MDIO_MMD_PMAPMD] == PHY_ID_88Q2220_REVB0)
                return mv88q222x_revb0_config_init(phydev);
        else