mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
net: phy: marvell-88q2xxx: Fix temperature measurement with reset-gpios
When using temperature measurement on Marvell 88Q2XXX devices and the
reset-gpios property is set in DT, the device does a hardware reset when
interface is brought down and up again. That means that the content of
the register MDIO_MMD_PCS_MV_TEMP_SENSOR2 is reset to default and that
leads to permanent deactivation of the temperature measurement, because
activation is done in mv88q2xxx_probe. To fix this move activation of
temperature measurement to mv88q222x_config_init.
Fixes: a557a92e68 ("net: phy: marvell-88q2xxx: add support for temperature sensor")
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Dimitri Fedrau <dima.fedrau@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20250118-marvell-88q2xxx-fix-hwmon-v2-1-402e62ba2dcb@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
92e5995773
commit
a197004cf3
|
|
@ -95,6 +95,10 @@
|
|||
|
||||
#define MDIO_MMD_PCS_MV_TDR_OFF_CUTOFF 65246
|
||||
|
||||
struct mv88q2xxx_priv {
|
||||
bool enable_temp;
|
||||
};
|
||||
|
||||
struct mmd_val {
|
||||
int devad;
|
||||
u32 regnum;
|
||||
|
|
@ -710,17 +714,12 @@ static const struct hwmon_chip_info mv88q2xxx_hwmon_chip_info = {
|
|||
|
||||
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);
|
||||
|
|
@ -743,6 +742,14 @@ static int mv88q2xxx_hwmon_probe(struct phy_device *phydev)
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
@ -810,6 +817,18 @@ static int mv88q222x_revb1_revb2_config_init(struct phy_device *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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user