db6e5e3eba441d93484800c3aad5c8d94e3f1a9e
[openwrt.git] / target / linux / brcm47xx / patches-3.10 / 208-b44-add-dummy-phy-device-if-we-do-not-find-any.patch
1 From 1a900b17b34ddca0336c739a2836bcb7f8aad5a8 Mon Sep 17 00:00:00 2001
2 From: Hauke Mehrtens <hauke@hauke-m.de>
3 Date: Fri, 25 Oct 2013 00:03:33 +0200
4 Subject: [PATCH 9/9] b44: add dummy phy device if we do not find any
5
6 ---
7  drivers/net/ethernet/broadcom/b44.c |   25 +++++++++++++++++++++----
8  1 file changed, 21 insertions(+), 4 deletions(-)
9
10 --- a/drivers/net/ethernet/broadcom/b44.c
11 +++ b/drivers/net/ethernet/broadcom/b44.c
12 @@ -2222,6 +2222,7 @@ static int b44_register_phy_one(struct b
13         struct ssb_device *sdev = bp->sdev;
14         struct phy_device *phydev;
15         int err;
16 +       struct phy_c45_device_ids c45_ids = {0};
17  
18         mii_bus = mdiobus_alloc();
19         if (!mii_bus) {
20 @@ -2256,9 +2257,20 @@ static int b44_register_phy_one(struct b
21  
22         phydev = bp->mii_bus->phy_map[bp->phy_addr];
23         if (!phydev) {
24 -               dev_err(sdev->dev, "could not find PHY at %i\n", bp->phy_addr);
25 -               err = -ENODEV;
26 -               goto err_out_mdiobus_unregister;
27 +               dev_info(sdev->dev, "could not find PHY at %i, create dummy one\n",
28 +                        bp->phy_addr);
29 +
30 +               phydev = phy_device_create(bp->mii_bus, bp->phy_addr, 0x0, false, &c45_ids);
31 +               if (IS_ERR(phydev)) {
32 +                       err = PTR_ERR(phydev);
33 +                       dev_err(sdev->dev, "Can not create dummy PHY\n");
34 +                       goto err_out_mdiobus_unregister;
35 +               }
36 +               err = phy_device_register(phydev);
37 +               if (err) {
38 +                       dev_err(sdev->dev, "failed to register MII bus\n");
39 +                       goto err_out_mdiobus_unregister;
40 +               }
41         }
42  
43         err = phy_connect_direct(bp->dev, phydev, &b44_adjust_link,