From e7646d45d50d32ca0416ea530e041319cec0ee59 Mon Sep 17 00:00:00 2001 From: aiamadeus <2789289348@qq.com> Date: Wed, 17 Jul 2024 23:15:06 +0800 Subject: [PATCH] generic: add missing realtek phy led patches --- ...tek-add-led-link-select-for-RTL8221.patch} | 0 ...ltek-add-led-link-select-for-RTL8221.patch | 69 +++++++++++++++++++ ...ltek-add-led-link-select-for-RTL8221.patch | 69 +++++++++++++++++++ 3 files changed, 138 insertions(+) rename target/linux/generic/hack-5.15/{766-net-phy-realtek-add-led-link-select-for-RTL8221.patch => 767-net-phy-realtek-add-led-link-select-for-RTL8221.patch} (100%) create mode 100644 target/linux/generic/hack-6.1/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch create mode 100644 target/linux/generic/hack-6.6/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch diff --git a/target/linux/generic/hack-5.15/766-net-phy-realtek-add-led-link-select-for-RTL8221.patch b/target/linux/generic/hack-5.15/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch similarity index 100% rename from target/linux/generic/hack-5.15/766-net-phy-realtek-add-led-link-select-for-RTL8221.patch rename to target/linux/generic/hack-5.15/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch diff --git a/target/linux/generic/hack-6.1/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch b/target/linux/generic/hack-6.1/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch new file mode 100644 index 000000000..613d971a2 --- /dev/null +++ b/target/linux/generic/hack-6.1/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch @@ -0,0 +1,69 @@ +From f9e17c264d316611c26b98ad1a3ca01c289c67b4 Mon Sep 17 00:00:00 2001 +From: Yangyu Chen +Date: Sun, 23 Apr 2023 20:06:41 +0800 +Subject: [PATCH] net: phy: realtek: add led-link-select for RTL8221 + +RTL8221B PHYs will select the different speeds for 3 LEDs to 10M/100M/1G +respectively by default. Some devices like TP-Link TL-XDR6088/TL-XDR6086 +have only one LED connects to the PHY chip LED0. If we didn't change the +default settings, the LED will only blink at 10M speed. + +This patch allows configuring LED link select bitmask from DT. And it +has been tested with TP-Link XDR6088 with different DT configurations. + +Signed-off-by: Yangyu Chen +--- + drivers/net/phy/realtek.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +--- a/drivers/net/phy/realtek.c ++++ b/drivers/net/phy/realtek.c +@@ -66,6 +66,10 @@ + #define RTL8221B_PHYCR1_ALDPS_EN BIT(2) + #define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12) + ++#define RTL8221B_NR_LEDS 3 ++#define RTL8221B_LED_LINK_SELECT 0xd032 ++#define RTL8221B_LED_LINK_SELECT_OFFSET 0x2 ++ + #define RTL8366RB_POWER_SAVE 0x15 + #define RTL8366RB_POWER_SAVE_ON BIT(12) + +@@ -932,6 +936,28 @@ static irqreturn_t rtl9000a_handle_inter + return IRQ_HANDLED; + } + ++static int rtl8221b_config_led(struct phy_device *phydev) { ++ struct device_node *node = phydev->mdio.dev.of_node; ++ u32 link_select[RTL8221B_NR_LEDS]; ++ int i, val; ++ ++ val = of_property_read_u32_array(node, "realtek,led-link-select", ++ link_select, RTL8221B_NR_LEDS); ++ ++ if (val) ++ return 0; ++ ++ for (i = 0; i < RTL8221B_NR_LEDS; i++) { ++ val = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, ++ RTL8221B_LED_LINK_SELECT + i * RTL8221B_LED_LINK_SELECT_OFFSET, ++ link_select[i]); ++ if (val < 0) ++ return val; ++ } ++ ++ return 0; ++} ++ + static int rtl8221b_config_init(struct phy_device *phydev) + { + u16 option_mode; +@@ -979,7 +1005,7 @@ static int rtl8221b_config_init(struct p + phy_read_mmd_poll_timeout(phydev, RTL8221B_MMD_SERDES_CTRL, 0x7587, + val, !(val & BIT(0)), 500, 100000, false); + +- return 0; ++ return rtl8221b_config_led(phydev); + } + + static int rtl8221b_ack_interrupt(struct phy_device *phydev) diff --git a/target/linux/generic/hack-6.6/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch b/target/linux/generic/hack-6.6/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch new file mode 100644 index 000000000..22ff113f1 --- /dev/null +++ b/target/linux/generic/hack-6.6/767-net-phy-realtek-add-led-link-select-for-RTL8221.patch @@ -0,0 +1,69 @@ +From f9e17c264d316611c26b98ad1a3ca01c289c67b4 Mon Sep 17 00:00:00 2001 +From: Yangyu Chen +Date: Sun, 23 Apr 2023 20:06:41 +0800 +Subject: [PATCH] net: phy: realtek: add led-link-select for RTL8221 + +RTL8221B PHYs will select the different speeds for 3 LEDs to 10M/100M/1G +respectively by default. Some devices like TP-Link TL-XDR6088/TL-XDR6086 +have only one LED connects to the PHY chip LED0. If we didn't change the +default settings, the LED will only blink at 10M speed. + +This patch allows configuring LED link select bitmask from DT. And it +has been tested with TP-Link XDR6088 with different DT configurations. + +Signed-off-by: Yangyu Chen +--- + drivers/net/phy/realtek.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +--- a/drivers/net/phy/realtek.c ++++ b/drivers/net/phy/realtek.c +@@ -67,6 +67,10 @@ + #define RTL8221B_PHYCR1_ALDPS_EN BIT(2) + #define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12) + ++#define RTL8221B_NR_LEDS 3 ++#define RTL8221B_LED_LINK_SELECT 0xd032 ++#define RTL8221B_LED_LINK_SELECT_OFFSET 0x2 ++ + #define RTL8366RB_POWER_SAVE 0x15 + #define RTL8366RB_POWER_SAVE_ON BIT(12) + +@@ -960,6 +964,28 @@ static irqreturn_t rtl9000a_handle_inter + return IRQ_HANDLED; + } + ++static int rtl8221b_config_led(struct phy_device *phydev) { ++ struct device_node *node = phydev->mdio.dev.of_node; ++ u32 link_select[RTL8221B_NR_LEDS]; ++ int i, val; ++ ++ val = of_property_read_u32_array(node, "realtek,led-link-select", ++ link_select, RTL8221B_NR_LEDS); ++ ++ if (val) ++ return 0; ++ ++ for (i = 0; i < RTL8221B_NR_LEDS; i++) { ++ val = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, ++ RTL8221B_LED_LINK_SELECT + i * RTL8221B_LED_LINK_SELECT_OFFSET, ++ link_select[i]); ++ if (val < 0) ++ return val; ++ } ++ ++ return 0; ++} ++ + static int rtl8221b_config_init(struct phy_device *phydev) + { + u16 option_mode; +@@ -1007,7 +1033,7 @@ static int rtl8221b_config_init(struct p + phy_read_mmd_poll_timeout(phydev, RTL8221B_MMD_SERDES_CTRL, 0x7587, + val, !(val & BIT(0)), 500, 100000, false); + +- return 0; ++ return rtl8221b_config_led(phydev); + } + + static int rtl8221b_ack_interrupt(struct phy_device *phydev)