mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
68 lines
2.6 KiB
Diff
68 lines
2.6 KiB
Diff
|
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;
|