summaryrefslogtreecommitdiff
path: root/drivers/net/phy/qcom/qca808x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/phy/qcom/qca808x.c')
-rw-r--r--drivers/net/phy/qcom/qca808x.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/phy/qcom/qca808x.c b/drivers/net/phy/qcom/qca808x.c
index 8eb51b1a006c..bab26e4c6140 100644
--- a/drivers/net/phy/qcom/qca808x.c
+++ b/drivers/net/phy/qcom/qca808x.c
@@ -87,6 +87,9 @@
#define QCA8081_PHY_ID 0x004dd101
+/* led_polarity_mode otherwise holds a PHY_LED_ACTIVE_* value */
+#define QCA808X_PHY_LED_UNSET -1
+
MODULE_DESCRIPTION("Qualcomm Atheros QCA808X PHY driver");
MODULE_AUTHOR("Matus Ujhelyi");
MODULE_LICENSE("GPL");
@@ -187,8 +190,7 @@ static int qca808x_probe(struct phy_device *phydev)
if (!priv)
return -ENOMEM;
- /* Init LED polarity mode to -1 */
- priv->led_polarity_mode = -1;
+ priv->led_polarity_mode = QCA808X_PHY_LED_UNSET;
phydev->priv = priv;
@@ -200,8 +202,8 @@ static int qca808x_config_init(struct phy_device *phydev)
struct qca808x_priv *priv = phydev->priv;
int ret;
- /* Default to LED Active High if active-low not in DT */
- if (priv->led_polarity_mode == -1) {
+ /* Set LED Active High unless active-low was requested in DT */
+ if (priv->led_polarity_mode != PHY_LED_ACTIVE_LOW) {
ret = phy_set_bits_mmd(phydev, MDIO_MMD_AN,
QCA808X_MMD7_LED_POLARITY_CTRL,
QCA808X_LED_ACTIVE_HIGH);
@@ -603,6 +605,9 @@ static int qca808x_led_polarity_set(struct phy_device *phydev, int index,
case PHY_LED_ACTIVE_LOW:
active_low = true;
break;
+ case PHY_LED_ACTIVE_HIGH:
+ active_low = false;
+ break;
default:
return -EINVAL;
}
@@ -612,7 +617,7 @@ static int qca808x_led_polarity_set(struct phy_device *phydev, int index,
* To detect this, check if last requested polarity mode
* match the new one.
*/
- if (priv->led_polarity_mode >= 0 &&
+ if (priv->led_polarity_mode != QCA808X_PHY_LED_UNSET &&
priv->led_polarity_mode != active_low) {
phydev_err(phydev, "PHY polarity is global. Mismatched polarity on different LED\n");
return -EINVAL;