From: Raju Lakkaraju <Raju.Lakkaraju@xxxxxxxxxxxxx> Fix the LED mode DT parameters combine to a single property and change the vendor prefix i.e. mscc. Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@xxxxxxxxxxxxx> --- Change set: v0: Fix the LED mode DT parameters combine to a single property v1: Fix the build test ERROR v2: Add default LED mode "vsc85xx_dt_led_mode_get" function. .../devicetree/bindings/net/mscc-phy-vsc8531.txt | 20 +++---- drivers/net/phy/mscc.c | 65 ++++++++++++---------- 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/Documentation/devicetree/bindings/net/mscc-phy-vsc8531.txt b/Documentation/devicetree/bindings/net/mscc-phy-vsc8531.txt index 0eedabe..2253de5 100644 --- a/Documentation/devicetree/bindings/net/mscc-phy-vsc8531.txt +++ b/Documentation/devicetree/bindings/net/mscc-phy-vsc8531.txt @@ -6,12 +6,12 @@ Required properties: Documentation/devicetree/bindings/net/phy.txt Optional properties: -- vsc8531,vddmac : The vddmac in mV. Allowed values is listed +- mscc,vddmac : The vddmac in mV. Allowed values is listed in the first row of Table 1 (below). This property is only used in combination with the 'edge-slowdown' property. Default value is 3300. -- vsc8531,edge-slowdown : % the edge should be slowed down relative to +- mscc,edge-slowdown : % the edge should be slowed down relative to the fastest possible edge time. Edge rate sets the drive strength of the MAC interface output signals. Changing the @@ -27,14 +27,11 @@ Optional properties: 'vddmac'. Default value is 0%. Ref: Table:1 - Edge rate change (below). -- vsc8531,led-0-mode : LED mode. Specify how the LED[0] should behave. +- mscc,led-mode : LED mode. Specify how the LED[0] and LED[1] should behave. Allowed values are define in "include/dt-bindings/net/mscc-phy-vsc8531.h". - Default value is VSC8531_LINK_1000_ACTIVITY (1). -- vsc8531,led-1-mode : LED mode. Specify how the LED[1] should behave. - Allowed values are define in - "include/dt-bindings/net/mscc-phy-vsc8531.h". - Default value is VSC8531_LINK_100_ACTIVITY (2). + Default LED[0] value is VSC8531_LINK_1000_ACTIVITY (1). + Default LED[1] value is VSC8531_LINK_100_ACTIVITY (2). Table: 1 - Edge rate change ----------------------------------------------------------------| @@ -66,8 +63,7 @@ Example: vsc8531_0: ethernet-phy@0 { compatible = "ethernet-phy-id0007.0570"; - vsc8531,vddmac = <3300>; - vsc8531,edge-slowdown = <7>; - vsc8531,led-0-mode = <LINK_1000_ACTIVITY>; - vsc8531,led-1-mode = <LINK_100_ACTIVITY>; + mscc,vddmac = /bits/ 16 <3300>; + mscc,edge-slowdown = /bits/ 8 <7>; + mscc,led-mode = <LINK_1000_ACTIVITY LINK_100_ACTIVITY>; }; diff --git a/drivers/net/phy/mscc.c b/drivers/net/phy/mscc.c index 650c266..5cd705b 100644 --- a/drivers/net/phy/mscc.c +++ b/drivers/net/phy/mscc.c @@ -385,11 +385,11 @@ static int vsc85xx_edge_rate_magic_get(struct phy_device *phydev) if (!of_node) return -ENODEV; - rc = of_property_read_u16(of_node, "vsc8531,vddmac", &vdd); + rc = of_property_read_u16(of_node, "mscc,vddmac", &vdd); if (rc != 0) vdd = MSCC_VDDMAC_3300; - rc = of_property_read_u8(of_node, "vsc8531,edge-slowdown", &sd); + rc = of_property_read_u8(of_node, "mscc,edge-slowdown", &sd); if (rc != 0) sd = 0; @@ -402,26 +402,43 @@ static int vsc85xx_edge_rate_magic_get(struct phy_device *phydev) return -EINVAL; } -static int vsc85xx_dt_led_mode_get(struct phy_device *phydev, - char *led, - u8 default_mode) +static int vsc85xx_dt_led_mode_get(struct phy_device *phydev, char *led) { struct device *dev = &phydev->mdio.dev; struct device_node *of_node = dev->of_node; - u8 led_mode; - int err; + struct vsc8531_private *vsc8531 = phydev->priv; + u8 led_0_mode = VSC8531_LINK_1000_ACTIVITY; + u8 led_1_mode = VSC8531_LINK_100_ACTIVITY; + const __be32 *paddr_end; + const __be32 *paddr; + int len; if (!of_node) return -ENODEV; - led_mode = default_mode; - err = of_property_read_u8(of_node, led, &led_mode); - if (!err && (led_mode > 15 || led_mode == 7 || led_mode == 11)) { - phydev_err(phydev, "DT %s invalid\n", led); + paddr = of_get_property(of_node, "mscc,led-mode", &len); + if (!paddr) + return -EINVAL; + + paddr_end = paddr + (len /= sizeof(*paddr)); + while (paddr + 1 < paddr_end) { + led_0_mode = be32_to_cpup(paddr++); + led_1_mode = be32_to_cpup(paddr++); + } + + if (!len && (led_0_mode > 15 || led_0_mode == 7 || led_0_mode == 11)) { + phydev_err(phydev, "DT %s-0 invalid\n", led); return -EINVAL; } + vsc8531->led_0_mode = led_0_mode; - return led_mode; + if (!len && (led_1_mode > 15 || led_1_mode == 7 || led_1_mode == 11)) { + phydev_err(phydev, "DT %s-1 invalid\n", led); + return -EINVAL; + } + vsc8531->led_1_mode = led_1_mode; + + return 0; } #else @@ -430,11 +447,9 @@ static int vsc85xx_edge_rate_magic_get(struct phy_device *phydev) return 0; } -static int vsc85xx_dt_led_mode_get(struct phy_device *phydev, - char *led, - u8 default_mode) +static int vsc85xx_dt_led_mode_get(struct phy_device *phydev, char *led) { - return default_mode; + return 0; } #endif /* CONFIG_OF_MDIO */ @@ -626,7 +641,7 @@ static int vsc85xx_probe(struct phy_device *phydev) { struct vsc8531_private *vsc8531; int rate_magic; - int led_mode; + int err; rate_magic = vsc85xx_edge_rate_magic_get(phydev); if (rate_magic < 0) @@ -641,17 +656,11 @@ static int vsc85xx_probe(struct phy_device *phydev) vsc8531->rate_magic = rate_magic; /* LED[0] and LED[1] mode */ - led_mode = vsc85xx_dt_led_mode_get(phydev, "vsc8531,led-0-mode", - VSC8531_LINK_1000_ACTIVITY); - if (led_mode < 0) - return led_mode; - vsc8531->led_0_mode = led_mode; - - led_mode = vsc85xx_dt_led_mode_get(phydev, "vsc8531,led-1-mode", - VSC8531_LINK_100_ACTIVITY); - if (led_mode < 0) - return led_mode; - vsc8531->led_1_mode = led_mode; + vsc8531->led_0_mode = VSC8531_LINK_1000_ACTIVITY; + vsc8531->led_1_mode = VSC8531_LINK_100_ACTIVITY; + err = vsc85xx_dt_led_mode_get(phydev, "mscc,led-mode"); + if (err < 0) + return err; return 0; } -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html