--- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -183,6 +184,7 @@ enum rtl_registers { MAR0 = 8, /* Multicast filter. */ CounterAddrLow = 0x10, CounterAddrHigh = 0x14, + CustomLED = 0x18, TxDescStartAddrLow = 0x20, TxDescStartAddrHigh = 0x24, TxHDescStartAddrLow = 0x28, @@ -5274,6 +5276,22 @@ done: rtl_rar_set(tp, mac_addr); } +static int rtl_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 int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct rtl8169_private *tp; @@ -5438,6 +5456,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct if (!tp->counters) return -ENOMEM; + rtl_led_configuration(tp); pci_set_drvdata(pdev, tp); rc = r8169_mdio_register(tp);