[][kernel][mt7988][eth][phy: mediatek-2p5ge: Change LED pinmux after setting correct polarity]
[Description]
Change LED pinmux after setting correct polarity.
[Release-log]
N/A
Change-Id: I4884690296758aeaceae304d176da0e42f8f645f
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7353423
diff --git a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-i2p5g-spim-nand.dts b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-i2p5g-spim-nand.dts
index 9250e5c..7cd5748 100644
--- a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-i2p5g-spim-nand.dts
+++ b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-i2p5g-spim-nand.dts
@@ -197,8 +197,6 @@
};
ð {
- pinctrl-names = "default";
- pinctrl-0 = <&i2p5gbe_led0_pins>;
status = "okay";
gmac0: mac@0 {
@@ -234,6 +232,8 @@
#address-cells = <1>;
#size-cells = <0>;
phy0: ethernet-phy@0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2p5gbe_led0_pins>;
reg = <15>;
compatible = "ethernet-phy-ieee802.3-c45";
phy-mode = "xgmii";
diff --git a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988c-dsa-i2p5g-spim-nand.dts b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988c-dsa-i2p5g-spim-nand.dts
index ccedbbc..e8b6f14 100644
--- a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988c-dsa-i2p5g-spim-nand.dts
+++ b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988c-dsa-i2p5g-spim-nand.dts
@@ -197,8 +197,6 @@
};
ð {
- pinctrl-names = "default";
- pinctrl-0 = <&i2p5gbe_led0_pins>;
status = "okay";
gmac0: mac@0 {
@@ -226,6 +224,8 @@
#address-cells = <1>;
#size-cells = <0>;
phy0: ethernet-phy@0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2p5gbe_led0_pins>;
reg = <15>;
compatible = "ethernet-phy-ieee802.3-c45";
phy-mode = "xgmii";
diff --git a/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c b/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
index 30f53fc..f5964c3 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
@@ -5,6 +5,7 @@
#include <linux/nvmem-consumer.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
+#include <linux/pinctrl/consumer.h>
#include <linux/phy.h>
#define MEDAITEK_2P5GE_PHY_DMB_FW "mediatek-2p5ge-phy-dmb.bin"
@@ -21,6 +22,10 @@
#define PHY_AUX_DPX_MASK GENMASK(5, 5)
#define PHY_AUX_SPEED_MASK GENMASK(4, 2)
+/* Registers on MDIO_MMD_VEND2 */
+#define MTK_PHY_LED0_ON_CTRL (0x24)
+#define MTK_PHY_LED0_POLARITY BIT(14)
+
enum {
PHY_AUX_SPD_10 = 0,
PHY_AUX_SPD_100,
@@ -28,6 +33,22 @@
PHY_AUX_SPD_2500,
};
+static int mt798x_2p5ge_phy_probe(struct phy_device *phydev)
+{
+ struct pinctrl *pinctrl;
+
+ phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED0_ON_CTRL,
+ MTK_PHY_LED0_POLARITY);
+
+ pinctrl = devm_pinctrl_get_select_default(&phydev->mdio.dev);
+ if (IS_ERR(pinctrl)) {
+ dev_err(&phydev->mdio.dev, "Fail to set LED pins!\n");
+ return PTR_ERR(pinctrl);
+ }
+
+ return 0;
+}
+
static int mt798x_2p5ge_phy_config_init(struct phy_device *phydev)
{
int ret;
@@ -194,6 +215,7 @@
{
PHY_ID_MATCH_EXACT(0x00339c11),
.name = "MediaTek MT798x 2.5GbE PHY",
+ .probe = mt798x_2p5ge_phy_probe,
.config_init = mt798x_2p5ge_phy_config_init,
.config_aneg = mt798x_2p5ge_phy_config_aneg,
.get_features = mt798x_2p5ge_phy_get_features,