Hi Andrw,+static int hclge_set_led_status_phy(struct phy_device *phydev, int value)Sorry, but NACK.
+{
+ int ret, cur_page;
+
+ mutex_lock(&phydev->lock);
+
+ ret = phy_read(phydev, HCLGE_PHY_PAGE_REG);
+ if (ret < 0)
+ goto out;
+ else
+ cur_page = ret;
+
+ ret = phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_LED);
+ if (ret)
+ goto out;
+
+ ret = phy_write(phydev, HCLGE_LED_FC_REG, value);
+ if (ret)
+ goto out;
+
+ ret = phy_write(phydev, HCLGE_PHY_PAGE_REG, cur_page);
+
+out:
+ mutex_unlock(&phydev->lock);
+ return ret;
+}
Please add an interface to phylib and the phy driver you are using to
do this.
#define HCLGE_PHY_PAGE_MDIX 0By the looks of these defines, you assume you have a Marvell PHY.
#define HCLGE_PHY_PAGE_COPPER 0
+#define HCLGE_PHY_PAGE_LED 3
/* Page Selection Reg. */
#define HCLGE_PHY_PAGE_REG 22
@@ -73,6 +74,15 @@
/* Copper Specific Status Register */
#define HCLGE_PHY_CSS_REG 17
+/* LED Function Control Register */
+#define HCLGE_LED_FC_REG 16
+
+/* LED Polarity Control Register */
+#define HCLGE_LED_PC_REG 17
+
+#define HCLGE_LED_FORCE_ON 9
+#define HCLGE_LED_FORCE_OFF 8
+
Please make this generic so anybody with a Marvell PHY can use it.
Andrew
.