aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch')
-rw-r--r--package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch b/package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch
new file mode 100644
index 0000000000..b8ebb08047
--- /dev/null
+++ b/package/kernel/qca-ssdk/patches/0007-qca807x-add-a-LED-quirk-for-Xiaomi-AX9000.patch
@@ -0,0 +1,67 @@
+From 20a7945b82a4aefcb9ca0a14978412e4ae0057c9 Mon Sep 17 00:00:00 2001
+From: Robert Marko <robimarko@gmail.com>
+Date: Tue, 11 Jan 2022 00:28:42 +0100
+Subject: [PATCH 07/11] qca807x: add a LED quirk for Xiaomi AX9000
+
+Xiaomi AX9000 has a single LED for each of 4 gigabit ethernet ports that
+are connected to QCA8075, and that LED is connected to the 100M LED pin.
+
+So, by default it will only work when in 10 or 100Mbit mode, this is quite
+annoying and makes no sense(If they have connected it to the 1000Mbit LED
+pin then it would have worked for 10/100 by default as well).
+
+So, to solve this add a check for system compatible as we cant parse if
+from DTS in any other way and set the 100M LED to blink on 1000Base-T
+as well.
+
+Signed-off-by: Robert Marko <robimarko@gmail.com>
+---
+ include/hsl/phy/malibu_phy.h | 2 ++
+ src/hsl/phy/malibu_phy.c | 11 +++++++++++
+ 2 files changed, 13 insertions(+)
+
+--- a/include/hsl/phy/malibu_phy.h
++++ b/include/hsl/phy/malibu_phy.h
+@@ -94,6 +94,7 @@ extern "C"
+ #define MALIBU_DAC_CTRL_MASK 0x380
+ #define MALIBU_DAC_CTRL_VALUE 0x280
+ #define MALIBU_LED_1000_CTRL1_100_10_MASK 0x30
++#define MALIBU_LED_100_CTRL1_1000_MASK 0x40
+
+ #define MALIBU_PHY_EEE_ADV_100M 0x0002
+ #define MALIBU_PHY_EEE_ADV_1000M 0x0004
+@@ -118,6 +119,7 @@ extern "C"
+ #define MALIBU_PHY_MMD7_EGRESS_COUNTER_HIGH 0x802d
+ #define MALIBU_PHY_MMD7_EGRESS_COUNTER_LOW 0x802e
+ #define MALIBU_PHY_MMD7_EGRESS_ERROR_COUNTER 0x802f
++#define MALIBU_PHY_MMD7_LED_100_CTRL1 0x8074
+ #define MALIBU_PHY_MMD7_LED_1000_CTRL1 0x8076
+
+
+--- a/src/hsl/phy/malibu_phy.c
++++ b/src/hsl/phy/malibu_phy.c
+@@ -15,6 +15,8 @@
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
++#include <linux/of.h>
++
+ #include "sw.h"
+ #include "fal_port_ctrl.h"
+ #include "hsl_api.h"
+@@ -2708,6 +2710,15 @@ malibu_phy_hw_init(a_uint32_t dev_id, a_
+ led_status |= MALIBU_LED_1000_CTRL1_100_10_MASK;
+ malibu_phy_mmd_write(dev_id, phy_addr, MALIBU_PHY_MMD7_NUM,
+ MALIBU_PHY_MMD7_LED_1000_CTRL1, led_status);
++ if (of_machine_is_compatible("xiaomi,ax9000")) {
++ /* add 1000M link LED behavior for Xiaomi AX9000 */
++ led_status = malibu_phy_mmd_read(dev_id, phy_addr, MALIBU_PHY_MMD7_NUM,
++ MALIBU_PHY_MMD7_LED_100_CTRL1);
++ led_status &= ~MALIBU_LED_100_CTRL1_1000_MASK;
++ led_status |= MALIBU_LED_100_CTRL1_1000_MASK;
++ malibu_phy_mmd_write(dev_id, phy_addr, MALIBU_PHY_MMD7_NUM,
++ MALIBU_PHY_MMD7_LED_100_CTRL1, led_status);
++ }
+ /*disable Extended next page*/
+ phy_data = malibu_phy_reg_read(dev_id, phy_addr, MALIBU_AUTONEG_ADVERT);
+ phy_data &= ~MALIBU_EXTENDED_NEXT_PAGE_EN;