Commit 447b80a9 authored by Alexander Stein's avatar Alexander Stein Committed by David S. Miller

net: phy: dp83867: Add support for active-low LEDs

Add the led_polarity_set callback for setting LED polarity.
Signed-off-by: default avatarAlexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 969337a4
...@@ -158,6 +158,7 @@ ...@@ -158,6 +158,7 @@
/* LED_DRV bits */ /* LED_DRV bits */
#define DP83867_LED_DRV_EN(x) BIT((x) * 4) #define DP83867_LED_DRV_EN(x) BIT((x) * 4)
#define DP83867_LED_DRV_VAL(x) BIT((x) * 4 + 1) #define DP83867_LED_DRV_VAL(x) BIT((x) * 4 + 1)
#define DP83867_LED_POLARITY(x) BIT((x) * 4 + 2)
#define DP83867_LED_FN(idx, val) (((val) & 0xf) << ((idx) * 4)) #define DP83867_LED_FN(idx, val) (((val) & 0xf) << ((idx) * 4))
#define DP83867_LED_FN_MASK(idx) (0xf << ((idx) * 4)) #define DP83867_LED_FN_MASK(idx) (0xf << ((idx) * 4))
...@@ -1152,6 +1153,26 @@ static int dp83867_led_hw_control_get(struct phy_device *phydev, u8 index, ...@@ -1152,6 +1153,26 @@ static int dp83867_led_hw_control_get(struct phy_device *phydev, u8 index,
return 0; return 0;
} }
static int dp83867_led_polarity_set(struct phy_device *phydev, int index,
unsigned long modes)
{
/* Default active high */
u16 polarity = DP83867_LED_POLARITY(index);
u32 mode;
for_each_set_bit(mode, &modes, __PHY_LED_MODES_NUM) {
switch (mode) {
case PHY_LED_ACTIVE_LOW:
polarity = 0;
break;
default:
return -EINVAL;
}
}
return phy_modify(phydev, DP83867_LEDCR2,
DP83867_LED_POLARITY(index), polarity);
}
static struct phy_driver dp83867_driver[] = { static struct phy_driver dp83867_driver[] = {
{ {
.phy_id = DP83867_PHY_ID, .phy_id = DP83867_PHY_ID,
...@@ -1184,6 +1205,7 @@ static struct phy_driver dp83867_driver[] = { ...@@ -1184,6 +1205,7 @@ static struct phy_driver dp83867_driver[] = {
.led_hw_is_supported = dp83867_led_hw_is_supported, .led_hw_is_supported = dp83867_led_hw_is_supported,
.led_hw_control_set = dp83867_led_hw_control_set, .led_hw_control_set = dp83867_led_hw_control_set,
.led_hw_control_get = dp83867_led_hw_control_get, .led_hw_control_get = dp83867_led_hw_control_get,
.led_polarity_set = dp83867_led_polarity_set,
}, },
}; };
module_phy_driver(dp83867_driver); module_phy_driver(dp83867_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment