--- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -174,6 +175,7 @@ enum rtl_registers { MAR0 = 8, /* Multicast filter. */ CounterAddrLow = 0x10, CounterAddrHigh = 0x14, + CustomLED = 0x18, TxDescStartAddrLow = 0x20, TxDescStartAddrHigh = 0x24, TxHDescStartAddrLow = 0x28, @@ -2204,6 +2206,22 @@ void r8169_apply_firmware(struct rtl8169 } } +static int rtl8169_led_configuration(struct rtl8169_private *tp) +{ + u32 led_data; + int ret; + + ret = of_property_read_u32(tp->pci_dev->dev.of_node, + "realtek,led-data", &led_data); + + if (ret) + return ret; + + RTL_W16(tp, CustomLED, led_data); + + return 0; +} + static void rtl8168_config_eee_mac(struct rtl8169_private *tp) { /* Adjust EEE LED frequency */ @@ -3344,6 +3362,7 @@ static void rtl_hw_start_8168h_1(struct r8168_mac_ocp_write(tp, 0xe63e, 0x0000); r8168_mac_ocp_write(tp, 0xc094, 0x0000); r8168_mac_ocp_write(tp, 0xc09e, 0x0000); + rtl8169_led_configuration(tp); } static void rtl_hw_start_8168ep(struct rtl8169_private *tp) @@ -3695,6 +3714,7 @@ static void rtl_hw_start_8125b(struct rt rtl_set_def_aspm_entry_latency(tp); rtl_ephy_init(tp, e_info_8125b); rtl_hw_start_8125_common(tp); + rtl8169_led_configuration(tp); } static void rtl_hw_config(struct rtl8169_private *tp)