mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
net: phy: marvell-88q2xxx: Enable temperature measurement in probe again
Enabling of the temperature sensor was moved from mv88q2xxx_hwmon_probe to mv88q222x_config_init with the consequence that the sensor is only usable when the PHY is configured. Enable the sensor in mv88q2xxx_hwmon_probe as well to fix this. Signed-off-by: Dimitri Fedrau <dima.fedrau@gmail.com> Link: https://patch.msgid.link/20250512-marvell-88q2xxx-hwmon-enable-at-probe-v4-1-9256a5c8f603@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
4cde0e4224
commit
10465365f3
@@ -119,7 +119,6 @@
|
||||
#define MV88Q2XXX_LED_INDEX_GPIO 1
|
||||
|
||||
struct mv88q2xxx_priv {
|
||||
bool enable_temp;
|
||||
bool enable_led0;
|
||||
};
|
||||
|
||||
@@ -482,49 +481,6 @@ static int mv88q2xxx_config_aneg(struct phy_device *phydev)
|
||||
return phydev->drv->soft_reset(phydev);
|
||||
}
|
||||
|
||||
static int mv88q2xxx_config_init(struct phy_device *phydev)
|
||||
{
|
||||
struct mv88q2xxx_priv *priv = phydev->priv;
|
||||
int ret;
|
||||
|
||||
/* The 88Q2XXX PHYs do have the extended ability register available, but
|
||||
* register MDIO_PMA_EXTABLE where they should signalize it does not
|
||||
* work according to specification. Therefore, we force it here.
|
||||
*/
|
||||
phydev->pma_extable = MDIO_PMA_EXTABLE_BT1;
|
||||
|
||||
/* Configure interrupt with default settings, output is driven low for
|
||||
* active interrupt and high for inactive.
|
||||
*/
|
||||
if (phy_interrupt_is_valid(phydev)) {
|
||||
ret = phy_set_bits_mmd(phydev, MDIO_MMD_PCS,
|
||||
MDIO_MMD_PCS_MV_GPIO_INT_CTRL,
|
||||
MDIO_MMD_PCS_MV_GPIO_INT_CTRL_TRI_DIS);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable LED function and disable TX disable feature on LED/TX_ENABLE */
|
||||
if (priv->enable_led0) {
|
||||
ret = phy_clear_bits_mmd(phydev, MDIO_MMD_PCS,
|
||||
MDIO_MMD_PCS_MV_RESET_CTRL,
|
||||
MDIO_MMD_PCS_MV_RESET_CTRL_TX_DISABLE);
|
||||
if (ret < 0)
|
||||
return 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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mv88q2xxx_get_sqi(struct phy_device *phydev)
|
||||
{
|
||||
int ret;
|
||||
@@ -667,6 +623,12 @@ static int mv88q2xxx_resume(struct phy_device *phydev)
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_HWMON)
|
||||
static int mv88q2xxx_enable_temp_sense(struct phy_device *phydev)
|
||||
{
|
||||
return phy_modify_mmd(phydev, MDIO_MMD_PCS, MDIO_MMD_PCS_MV_TEMP_SENSOR2,
|
||||
MDIO_MMD_PCS_MV_TEMP_SENSOR2_DIS_MASK, 0);
|
||||
}
|
||||
|
||||
static const struct hwmon_channel_info * const mv88q2xxx_hwmon_info[] = {
|
||||
HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_ALARM),
|
||||
NULL
|
||||
@@ -762,11 +724,13 @@ 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;
|
||||
int ret;
|
||||
|
||||
priv->enable_temp = true;
|
||||
ret = mv88q2xxx_enable_temp_sense(phydev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
hwmon = devm_hwmon_device_register_with_info(dev, NULL, phydev,
|
||||
&mv88q2xxx_hwmon_chip_info,
|
||||
@@ -776,6 +740,11 @@ static int mv88q2xxx_hwmon_probe(struct phy_device *phydev)
|
||||
}
|
||||
|
||||
#else
|
||||
static int mv88q2xxx_enable_temp_sense(struct phy_device *phydev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mv88q2xxx_hwmon_probe(struct phy_device *phydev)
|
||||
{
|
||||
return 0;
|
||||
@@ -843,6 +812,48 @@ static int mv88q2xxx_probe(struct phy_device *phydev)
|
||||
return mv88q2xxx_hwmon_probe(phydev);
|
||||
}
|
||||
|
||||
static int mv88q2xxx_config_init(struct phy_device *phydev)
|
||||
{
|
||||
struct mv88q2xxx_priv *priv = phydev->priv;
|
||||
int ret;
|
||||
|
||||
/* The 88Q2XXX PHYs do have the extended ability register available, but
|
||||
* register MDIO_PMA_EXTABLE where they should signalize it does not
|
||||
* work according to specification. Therefore, we force it here.
|
||||
*/
|
||||
phydev->pma_extable = MDIO_PMA_EXTABLE_BT1;
|
||||
|
||||
/* Configure interrupt with default settings, output is driven low for
|
||||
* active interrupt and high for inactive.
|
||||
*/
|
||||
if (phy_interrupt_is_valid(phydev)) {
|
||||
ret = phy_set_bits_mmd(phydev, MDIO_MMD_PCS,
|
||||
MDIO_MMD_PCS_MV_GPIO_INT_CTRL,
|
||||
MDIO_MMD_PCS_MV_GPIO_INT_CTRL_TRI_DIS);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable LED function and disable TX disable feature on LED/TX_ENABLE */
|
||||
if (priv->enable_led0) {
|
||||
ret = phy_clear_bits_mmd(phydev, MDIO_MMD_PCS,
|
||||
MDIO_MMD_PCS_MV_RESET_CTRL,
|
||||
MDIO_MMD_PCS_MV_RESET_CTRL_TX_DISABLE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable temperature sense again. There might have been a hard reset
|
||||
* of the PHY and in this case the register content is restored to
|
||||
* defaults and we need to enable it again.
|
||||
*/
|
||||
ret = mv88q2xxx_enable_temp_sense(phydev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mv88q2110_config_init(struct phy_device *phydev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
Reference in New Issue
Block a user