Re: [PATCH v3] net: phy: air_en8811h: add AN8811HB MCU assert/deassert support
From: Jakub Kicinski
Date: Thu Apr 23 2026 - 13:21:23 EST
Since you need to repost to fix the fixes tag, plaese also improve the
error handling
On Mon, 20 Apr 2026 21:45:06 +0800 Lucien.Jheng wrote:
> static int an8811hb_probe(struct phy_device *phydev)
> {
> + struct mdio_device *mdiodev;
> struct en8811h_priv *priv;
> int ret;
>
> @@ -1175,10 +1281,22 @@ static int an8811hb_probe(struct phy_device *phydev)
> return -ENOMEM;
> phydev->priv = priv;
>
> + mdiodev = mdio_device_create(phydev->mdio.bus,
> + phydev->mdio.addr + EN8811H_PBUS_ADDR_OFFS);
> + if (IS_ERR(mdiodev))
> + return PTR_ERR(mdiodev);
> +
> + ret = mdio_device_register(mdiodev);
> + if (ret) {
goto err_dev_free;
> + mdio_device_free(mdiodev);
> + return ret;
> + }
> + priv->pbusdev = mdiodev;
> +
> ret = an8811hb_load_firmware(phydev);
> if (ret < 0) {
> phydev_err(phydev, "Load firmware failed: %d\n", ret);
> - return ret;
> + goto error;
goto err_dev_create;
> }
>
> en8811h_print_fw_version(phydev);
> @@ -1191,22 +1309,27 @@ static int an8811hb_probe(struct phy_device *phydev)
>
> ret = en8811h_leds_setup(phydev);
> if (ret < 0)
> - return ret;
> + goto error;
>
> priv->phydev = phydev;
> /* Co-Clock Output */
> ret = an8811hb_clk_provider_setup(&phydev->mdio.dev, &priv->hw);
> if (ret)
> - return ret;
> + goto error;
>
> /* Configure led gpio pins as output */
> ret = air_buckpbus_reg_modify(phydev, AN8811HB_GPIO_OUTPUT,
> AN8811HB_GPIO_OUTPUT_345,
> AN8811HB_GPIO_OUTPUT_345);
> if (ret < 0)
> - return ret;
> + goto error;
>
> return 0;
> +
> +error:
err_dev_free:
> + mdio_device_remove(priv->pbusdev);
err_dev_create:
> + mdio_device_free(priv->pbusdev);
> + return ret;