kernel: hack: support inverted LEDs on MaxLinear GPY211 PHY
[openwrt/staging/blocktrron.git] / target / linux / generic / hack-6.1 / 765-mxl-gpy-control-LED-reg-from-DT.patch
index d7165cb30ac7c0bf964489f21fe0fa4720fdde48..2724efa15eb5e1d7a9cb32693e3e1d0ff0a5685d 100644 (file)
@@ -55,7 +55,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
  /* SGMII */
  #define VSPEC1_SGMII_CTRL     0x08
  #define VSPEC1_SGMII_CTRL_ANEN        BIT(12)         /* Aneg enable */
-@@ -241,6 +248,31 @@ out:
+@@ -241,6 +248,35 @@ out:
        return ret;
  }
  
@@ -64,6 +64,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 +      struct device_node *node = phydev->mdio.dev.of_node;
 +      u32 led_regs[PHY_LED_NUM_LEDS];
 +      int i, ret;
++      u16 val = 0xff00;
 +
 +      if (!IS_ENABLED(CONFIG_OF_MDIO))
 +              return 0;
@@ -71,8 +72,11 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 +      if (of_property_read_u32_array(node, "mxl,led-config", led_regs, PHY_LED_NUM_LEDS))
 +              return 0;
 +
++      if (of_property_read_bool(node, "mxl,led-drive-vdd"))
++              val &= 0x0fff;
++
 +      /* Enable LED function handling on all ports*/
-+      phy_write(phydev, PHY_LED, 0xFF00);
++      phy_write(phydev, PHY_LED, val);
 +
 +      /* Write LED register values */
 +      for (i = 0; i < PHY_LED_NUM_LEDS; i++) {
@@ -87,7 +91,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
  static int gpy_config_init(struct phy_device *phydev)
  {
        int ret;
-@@ -252,7 +284,10 @@ static int gpy_config_init(struct phy_de
+@@ -252,7 +288,10 @@ static int gpy_config_init(struct phy_de
  
        /* Clear all pending interrupts */
        ret = phy_read(phydev, PHY_ISTAT);