Re: [PATCH v4 2/4] net: phy: Add function to retrieve LED configuration from the DT

From: Andrew Lunn
Date: Fri Aug 02 2019 - 12:38:18 EST


On Thu, Aug 01, 2019 at 12:07:57PM -0700, Matthias Kaehlcke wrote:
> Add a phylib function for retrieving PHY LED configuration that
> is specified in the device tree using the generic binding. LEDs
> can be configured to be 'on' for a certain link speed or to blink
> when there is TX/RX activity.
>
> Signed-off-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx>
> ---
> Changes in v4:
> - patch added to the series
> ---
> drivers/net/phy/phy_device.c | 50 ++++++++++++++++++++++++++++++++++++
> include/linux/phy.h | 15 +++++++++++
> 2 files changed, 65 insertions(+)
>
> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index 6b5cb87f3866..b4b48de45712 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -2188,6 +2188,56 @@ static bool phy_drv_supports_irq(struct phy_driver *phydrv)
> return phydrv->config_intr && phydrv->ack_interrupt;
> }
>
> +int of_get_phy_led_cfg(struct phy_device *phydev, int led,
> + struct phy_led_config *cfg)
> +{
> + struct device_node *np, *child;
> + const char *trigger;
> + int ret;
> +
> + if (!IS_ENABLED(CONFIG_OF_MDIO))
> + return -ENOENT;
> +
> + np = of_find_node_by_name(phydev->mdio.dev.of_node, "leds");
> + if (!np)
> + return -ENOENT;
> +
> + for_each_child_of_node(np, child) {
> + u32 val;
> +
> + if (!of_property_read_u32(child, "reg", &val)) {
> + if (val == (u32)led)
> + break;
> + }
> + }

Hi Matthias

This is leaking references to np and child. In the past we have not
cared about this too much, but we are now getting patches adding the
missing releases. So it would be good to fix this.

Andrew