diff options
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-mdio.c')
| -rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 29 | 
1 files changed, 8 insertions, 21 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c index 363b210560f3..59e267f3f1b7 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c @@ -205,25 +205,16 @@ void xgbe_dump_phy_registers(struct xgbe_prv_data *pdata)  int xgbe_mdio_register(struct xgbe_prv_data *pdata)  { -	struct device_node *phy_node;  	struct mii_bus *mii;  	struct phy_device *phydev;  	int ret = 0;  	DBGPR("-->xgbe_mdio_register\n"); -	/* Retrieve the phy-handle */ -	phy_node = of_parse_phandle(pdata->dev->of_node, "phy-handle", 0); -	if (!phy_node) { -		dev_err(pdata->dev, "unable to parse phy-handle\n"); -		return -EINVAL; -	} -  	mii = mdiobus_alloc(); -	if (mii == NULL) { +	if (!mii) {  		dev_err(pdata->dev, "mdiobus_alloc failed\n"); -		ret = -ENOMEM; -		goto err_node_get; +		return -ENOMEM;  	}  	/* Register on the MDIO bus (don't probe any PHYs) */ @@ -252,18 +243,19 @@ int xgbe_mdio_register(struct xgbe_prv_data *pdata)  	request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT,  		       MDIO_ID_ARGS(phydev->c45_ids.device_ids[MDIO_MMD_PCS])); -	of_node_get(phy_node); -	phydev->dev.of_node = phy_node;  	ret = phy_device_register(phydev);  	if (ret) {  		dev_err(pdata->dev, "phy_device_register failed\n"); -		of_node_put(phy_node); +		goto err_phy_device; +	} +	if (!phydev->dev.driver) { +		dev_err(pdata->dev, "phy driver probe failed\n"); +		ret = -EIO;  		goto err_phy_device;  	}  	/* Add a reference to the PHY driver so it can't be unloaded */ -	pdata->phy_module = phydev->dev.driver ? -			    phydev->dev.driver->owner : NULL; +	pdata->phy_module = phydev->dev.driver->owner;  	if (!try_module_get(pdata->phy_module)) {  		dev_err(pdata->dev, "try_module_get failed\n");  		ret = -EIO; @@ -283,8 +275,6 @@ int xgbe_mdio_register(struct xgbe_prv_data *pdata)  	pdata->phydev = phydev; -	of_node_put(phy_node); -  	DBGPHY_REGS(pdata);  	DBGPR("<--xgbe_mdio_register\n"); @@ -300,9 +290,6 @@ err_mdiobus_register:  err_mdiobus_alloc:  	mdiobus_free(mii); -err_node_get: -	of_node_put(phy_node); -  	return ret;  }  | 

