|
@@ -1410,6 +1410,7 @@ static int emac_dev_open(struct net_device *ndev)
|
|
|
int i = 0;
|
|
|
struct emac_priv *priv = netdev_priv(ndev);
|
|
|
struct phy_device *phydev = NULL;
|
|
|
+ struct device *phy = NULL;
|
|
|
|
|
|
ret = pm_runtime_get_sync(&priv->pdev->dev);
|
|
|
if (ret < 0) {
|
|
@@ -1488,19 +1489,20 @@ static int emac_dev_open(struct net_device *ndev)
|
|
|
|
|
|
/* use the first phy on the bus if pdata did not give us a phy id */
|
|
|
if (!phydev && !priv->phy_id) {
|
|
|
- struct device *phy;
|
|
|
-
|
|
|
phy = bus_find_device(&mdio_bus_type, NULL, NULL,
|
|
|
match_first_device);
|
|
|
- if (phy)
|
|
|
+ if (phy) {
|
|
|
priv->phy_id = dev_name(phy);
|
|
|
+ if (!priv->phy_id || !*priv->phy_id)
|
|
|
+ put_device(phy);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (!phydev && priv->phy_id && *priv->phy_id) {
|
|
|
phydev = phy_connect(ndev, priv->phy_id,
|
|
|
&emac_adjust_link,
|
|
|
PHY_INTERFACE_MODE_MII);
|
|
|
-
|
|
|
+ put_device(phy); /* reference taken by bus_find_device */
|
|
|
if (IS_ERR(phydev)) {
|
|
|
dev_err(emac_dev, "could not connect to phy %s\n",
|
|
|
priv->phy_id);
|