History

net: phy: dp83867: handle the active-high LED polarity mode

Commit a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") added PHY_LED_ACTIVE_HIGH and made of_phy_led() set the matching bit in the modes mask when a LED node carries the 'active-high' property. dp83867 was not part of that series. dp83867_led_polarity_set() only recognizes PHY_LED_ACTIVE_LOW, so PHY_LED_ACTIVE_HIGH falls through to the default case and returns -EINVAL. of_phy_led() propagates the error, of_phy_leds() drops the LEDs registered so far and passes it on, and phy_probe() fails. A device tree marking a DP83867 LED as 'active-high', which leds/common.yaml allows and ethernet-phy.yaml references for led@N nodes, thus stops the PHY from probing. Active high is what the function programs when no polarity mode is requested at all, so the initial value of polarity already satisfies the request and only the case label is missing. The same series updated mxl-gpy in commit eb89c79c1b8f ("net: phy: mxl-gpy: correctly describe LED polarity") and aquantia in commit 9d55e68b19f2 ("net: phy: aquantia: correctly describe LED polarity override").

Donggeun Yoo committed 2 months ago

Commit 36a45fa1 parent 4f4b7431 file · +3 −0Browse files

Unified · Split

drivers/net/phy/dp83867.c+3−0
@@ -1150,6 +1150,9 @@ static int dp83867_led_polarity_set(struct phy_device *phydev, int index, · 1149 unmodified lines
1150 case PHY_LED_ACTIVE_LOW:1150 case PHY_LED_ACTIVE_LOW:
1151 polarity = 0;1151 polarity = 0;
1152 break;1152 break;
1153 case PHY_LED_ACTIVE_HIGH:
1154 polarity = DP83867_LED_POLARITY(index);
1155 break;
1153 default:1156 default:
1154 return -EINVAL;1157 return -EINVAL;
1155 }1158 }