--- a/drivers/net/phy/motorcomm.c
+++ b/drivers/net/phy/motorcomm.c
@@ -228,6 +228,12 @@
 #define YTPHY_WCR_INTR_SEL			BIT(6)
 #define YTPHY_WCR_ENABLE			BIT(3)
 
+#define YTPHY_LED_NUM_CONFIG			5
+/* LED_GENERAL_CFG: 0xA00B, LED0_CFG: 0xA00C, LED1_CFG: 0xA00D
+ * LED2_CFG: 0xA00E, LED_BLINK_CFG: 0xA00F
+ */
+#define YTPHY_LED_CONFIG_REG(x)			(0xA00B + x)
+
 /* 2b00 84ms
  * 2b01 168ms  *default*
  * 2b10 336ms
@@ -1564,6 +1570,27 @@ static int yt8521_resume(struct phy_devi
 	return yt8521_modify_utp_fiber_bmcr(phydev, BMCR_PDOWN, 0);
 }
 
+static int ytphy_config_led(struct phy_device *phydev)
+{
+	struct device_node *node = phydev->mdio.dev.of_node;
+	u32 led_data[YTPHY_LED_NUM_CONFIG];
+	int ret;
+
+	ret = of_property_read_u32_array(node, "motorcomm,led-data",
+				         led_data, YTPHY_LED_NUM_CONFIG);
+	if (ret)
+		return 0;
+
+	for (int i = 0; i < YTPHY_LED_NUM_CONFIG; i++) {
+		ret = ytphy_write_ext(phydev, YTPHY_LED_CONFIG_REG(i),
+				      led_data[i]);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+
 /**
  * yt8521_config_init() - called to initialize the PHY
  * @phydev: a pointer to a &struct phy_device
@@ -1602,6 +1629,10 @@ static int yt8521_config_init(struct phy
 		if (ret < 0)
 			goto err_restore_page;
 	}
+
+	ret = ytphy_config_led(phydev);
+	if (ret < 0)
+		goto err_restore_page;
 err_restore_page:
 	return phy_restore_page(phydev, old_page, ret);
 }
@@ -1637,7 +1668,7 @@ static int yt8531_config_init(struct phy
 	if (ret < 0)
 		return ret;
 
-	return 0;
+	return ytphy_config_led(phydev);
 }
 
 /**
