Browse Source

phylib: SIOCGMIIREG/SIOCSMIIREG: allow access to all mdio addresses

phylib would silently ignore the phy_id argument to these ioctls and
perform the read/write with the active phydev address, whereas most
non-phylib drivers seem to allow access to all mdio addresses
(E.G. pcnet_cs).

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Peter Korsgaard 14 năm trước cách đây
mục cha
commit
af1dc13e60
1 tập tin đã thay đổi với 5 bổ sung3 xóa
  1. 5 3
      drivers/net/phy/phy.c

+ 5 - 3
drivers/net/phy/phy.c

@@ -319,7 +319,8 @@ int phy_mii_ioctl(struct phy_device *phydev,
 		/* fall through */
 		/* fall through */
 
 
 	case SIOCGMIIREG:
 	case SIOCGMIIREG:
-		mii_data->val_out = phy_read(phydev, mii_data->reg_num);
+		mii_data->val_out = mdiobus_read(phydev->bus, mii_data->phy_id,
+						 mii_data->reg_num);
 		break;
 		break;
 
 
 	case SIOCSMIIREG:
 	case SIOCSMIIREG:
@@ -350,8 +351,9 @@ int phy_mii_ioctl(struct phy_device *phydev,
 			}
 			}
 		}
 		}
 
 
-		phy_write(phydev, mii_data->reg_num, val);
-		
+		mdiobus_write(phydev->bus, mii_data->phy_id,
+			      mii_data->reg_num, val);
+
 		if (mii_data->reg_num == MII_BMCR &&
 		if (mii_data->reg_num == MII_BMCR &&
 		    val & BMCR_RESET &&
 		    val & BMCR_RESET &&
 		    phydev->drv->config_init) {
 		    phydev->drv->config_init) {