40790e6b84
When the mdio bus is unregistered the newly created phy will also be unregistered and freed. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 38539
43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
From 1a900b17b34ddca0336c739a2836bcb7f8aad5a8 Mon Sep 17 00:00:00 2001
|
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
Date: Fri, 25 Oct 2013 00:03:33 +0200
|
|
Subject: [PATCH 9/9] b44: add dummy phy device if we do not find any
|
|
|
|
---
|
|
drivers/net/ethernet/broadcom/b44.c | 25 +++++++++++++++++++++----
|
|
1 file changed, 21 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/broadcom/b44.c
|
|
+++ b/drivers/net/ethernet/broadcom/b44.c
|
|
@@ -2222,6 +2222,7 @@ static int b44_register_phy_one(struct b
|
|
struct ssb_device *sdev = bp->sdev;
|
|
struct phy_device *phydev;
|
|
int err;
|
|
+ struct phy_c45_device_ids c45_ids = {0};
|
|
|
|
mii_bus = mdiobus_alloc();
|
|
if (!mii_bus) {
|
|
@@ -2256,9 +2257,20 @@ static int b44_register_phy_one(struct b
|
|
|
|
phydev = bp->mii_bus->phy_map[bp->phy_addr];
|
|
if (!phydev) {
|
|
- dev_err(sdev->dev, "could not find PHY at %i\n", bp->phy_addr);
|
|
- err = -ENODEV;
|
|
- goto err_out_mdiobus_unregister;
|
|
+ dev_info(sdev->dev, "could not find PHY at %i, create dummy one\n",
|
|
+ bp->phy_addr);
|
|
+
|
|
+ phydev = phy_device_create(bp->mii_bus, bp->phy_addr, 0x0, false, &c45_ids);
|
|
+ if (IS_ERR(phydev)) {
|
|
+ err = PTR_ERR(phydev);
|
|
+ dev_err(sdev->dev, "Can not create dummy PHY\n");
|
|
+ goto err_out_mdiobus_unregister;
|
|
+ }
|
|
+ err = phy_device_register(phydev);
|
|
+ if (err) {
|
|
+ dev_err(sdev->dev, "failed to register MII bus\n");
|
|
+ goto err_out_mdiobus_unregister;
|
|
+ }
|
|
}
|
|
|
|
err = phy_connect_direct(bp->dev, phydev, &b44_adjust_link,
|