Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: phy: realtek: support for TRIGGER_NETDEV_LINK on RTL8211E and RTL8211F

This patch adds support for the TRIGGER_NETDEV_LINK trigger. It activates
the LED when a link is established, regardless of the speed.

Tested on Orange Pi PC2 with RTL8211E PHY.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20250825211059.143231-1-olek2@wp.pl
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Aleksander Jan Bajkowski and committed by
Jakub Kicinski
f63f21e8 24204116

+32 -7
+32 -7
drivers/net/phy/realtek/realtek_main.c
··· 756 756 static int rtl8211x_led_hw_is_supported(struct phy_device *phydev, u8 index, 757 757 unsigned long rules) 758 758 { 759 - const unsigned long mask = BIT(TRIGGER_NETDEV_LINK_10) | 759 + const unsigned long mask = BIT(TRIGGER_NETDEV_LINK) | 760 + BIT(TRIGGER_NETDEV_LINK_10) | 760 761 BIT(TRIGGER_NETDEV_LINK_100) | 761 762 BIT(TRIGGER_NETDEV_LINK_1000) | 762 763 BIT(TRIGGER_NETDEV_RX) | ··· 815 814 if (val & RTL8211F_LEDCR_LINK_1000) 816 815 __set_bit(TRIGGER_NETDEV_LINK_1000, rules); 817 816 817 + if ((val & RTL8211F_LEDCR_LINK_10) && 818 + (val & RTL8211F_LEDCR_LINK_100) && 819 + (val & RTL8211F_LEDCR_LINK_1000)) { 820 + __set_bit(TRIGGER_NETDEV_LINK, rules); 821 + } 822 + 818 823 if (val & RTL8211F_LEDCR_ACT_TXRX) { 819 824 __set_bit(TRIGGER_NETDEV_RX, rules); 820 825 __set_bit(TRIGGER_NETDEV_TX, rules); ··· 838 831 if (index >= RTL8211x_LED_COUNT) 839 832 return -EINVAL; 840 833 841 - if (test_bit(TRIGGER_NETDEV_LINK_10, &rules)) 834 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 835 + test_bit(TRIGGER_NETDEV_LINK_10, &rules)) { 842 836 reg |= RTL8211F_LEDCR_LINK_10; 837 + } 843 838 844 - if (test_bit(TRIGGER_NETDEV_LINK_100, &rules)) 839 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 840 + test_bit(TRIGGER_NETDEV_LINK_100, &rules)) { 845 841 reg |= RTL8211F_LEDCR_LINK_100; 842 + } 846 843 847 - if (test_bit(TRIGGER_NETDEV_LINK_1000, &rules)) 844 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 845 + test_bit(TRIGGER_NETDEV_LINK_1000, &rules)) { 848 846 reg |= RTL8211F_LEDCR_LINK_1000; 847 + } 849 848 850 849 if (test_bit(TRIGGER_NETDEV_RX, &rules) || 851 850 test_bit(TRIGGER_NETDEV_TX, &rules)) { ··· 899 886 if (cr2 & RTL8211E_LEDCR2_LINK_1000) 900 887 __set_bit(TRIGGER_NETDEV_LINK_1000, rules); 901 888 889 + if ((cr2 & RTL8211E_LEDCR2_LINK_10) && 890 + (cr2 & RTL8211E_LEDCR2_LINK_100) && 891 + (cr2 & RTL8211E_LEDCR2_LINK_1000)) { 892 + __set_bit(TRIGGER_NETDEV_LINK, rules); 893 + } 894 + 902 895 return ret; 903 896 } 904 897 ··· 932 913 if (ret < 0) 933 914 return ret; 934 915 935 - if (test_bit(TRIGGER_NETDEV_LINK_10, &rules)) 916 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 917 + test_bit(TRIGGER_NETDEV_LINK_10, &rules)) { 936 918 cr2 |= RTL8211E_LEDCR2_LINK_10; 919 + } 937 920 938 - if (test_bit(TRIGGER_NETDEV_LINK_100, &rules)) 921 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 922 + test_bit(TRIGGER_NETDEV_LINK_100, &rules)) { 939 923 cr2 |= RTL8211E_LEDCR2_LINK_100; 924 + } 940 925 941 - if (test_bit(TRIGGER_NETDEV_LINK_1000, &rules)) 926 + if (test_bit(TRIGGER_NETDEV_LINK, &rules) || 927 + test_bit(TRIGGER_NETDEV_LINK_1000, &rules)) { 942 928 cr2 |= RTL8211E_LEDCR2_LINK_1000; 929 + } 943 930 944 931 cr2 <<= RTL8211E_LEDCR2_SHIFT * index; 945 932 ret = rtl821x_modify_ext_page(phydev, RTL8211E_LEDCR_EXT_PAGE,