Skip to content

Commit 7e88b11

Browse files
oleremdavem330
authored andcommitted
net: usb: asix: refactor asix_read_phy_addr() and handle errors on return
Refactor asix_read_phy_addr() to return usable error value directly and make sure all callers handle this error. Signed-off-by: Oleksij Rempel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 218d154 commit 7e88b11

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

drivers/net/usb/asix.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
205205
int asix_set_sw_mii(struct usbnet *dev, int in_pm);
206206
int asix_set_hw_mii(struct usbnet *dev, int in_pm);
207207

208-
int asix_read_phy_addr(struct usbnet *dev, int internal);
209-
int asix_get_phy_addr(struct usbnet *dev);
208+
int asix_read_phy_addr(struct usbnet *dev, bool internal);
210209

211210
int asix_sw_reset(struct usbnet *dev, u8 flags, int in_pm);
212211

drivers/net/usb/asix_common.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -288,32 +288,33 @@ int asix_set_hw_mii(struct usbnet *dev, int in_pm)
288288
return ret;
289289
}
290290

291-
int asix_read_phy_addr(struct usbnet *dev, int internal)
291+
int asix_read_phy_addr(struct usbnet *dev, bool internal)
292292
{
293-
int offset = (internal ? 1 : 0);
293+
int ret, offset;
294294
u8 buf[2];
295-
int ret = asix_read_cmd(dev, AX_CMD_READ_PHY_ID, 0, 0, 2, buf, 0);
296295

297-
netdev_dbg(dev->net, "asix_get_phy_addr()\n");
296+
ret = asix_read_cmd(dev, AX_CMD_READ_PHY_ID, 0, 0, 2, buf, 0);
297+
if (ret < 0)
298+
goto error;
298299

299300
if (ret < 2) {
300-
netdev_err(dev->net, "Error reading PHYID register: %02x\n", ret);
301-
goto out;
301+
ret = -EIO;
302+
goto error;
302303
}
303-
netdev_dbg(dev->net, "asix_get_phy_addr() returning 0x%04x\n",
304-
*((__le16 *)buf));
304+
305+
offset = (internal ? 1 : 0);
305306
ret = buf[offset];
306307

307-
out:
308+
netdev_dbg(dev->net, "%s PHY address 0x%x\n",
309+
internal ? "internal" : "external", ret);
310+
308311
return ret;
309-
}
310312

311-
int asix_get_phy_addr(struct usbnet *dev)
312-
{
313-
/* return the address of the internal phy */
314-
return asix_read_phy_addr(dev, 1);
315-
}
313+
error:
314+
netdev_err(dev->net, "Error reading PHY_ID register: %02x\n", ret);
316315

316+
return ret;
317+
}
317318

318319
int asix_sw_reset(struct usbnet *dev, u8 flags, int in_pm)
319320
{

drivers/net/usb/asix_devices.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,10 @@ static int ax88172_bind(struct usbnet *dev, struct usb_interface *intf)
262262
dev->mii.mdio_write = asix_mdio_write;
263263
dev->mii.phy_id_mask = 0x3f;
264264
dev->mii.reg_num_mask = 0x1f;
265-
dev->mii.phy_id = asix_get_phy_addr(dev);
265+
266+
dev->mii.phy_id = asix_read_phy_addr(dev, true);
267+
if (dev->mii.phy_id < 0)
268+
return dev->mii.phy_id;
266269

267270
dev->net->netdev_ops = &ax88172_netdev_ops;
268271
dev->net->ethtool_ops = &ax88172_ethtool_ops;
@@ -717,7 +720,10 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
717720
dev->mii.mdio_write = asix_mdio_write;
718721
dev->mii.phy_id_mask = 0x1f;
719722
dev->mii.reg_num_mask = 0x1f;
720-
dev->mii.phy_id = asix_get_phy_addr(dev);
723+
724+
dev->mii.phy_id = asix_read_phy_addr(dev, true);
725+
if (dev->mii.phy_id < 0)
726+
return dev->mii.phy_id;
721727

722728
dev->net->netdev_ops = &ax88772_netdev_ops;
723729
dev->net->ethtool_ops = &ax88772_ethtool_ops;
@@ -1080,7 +1086,10 @@ static int ax88178_bind(struct usbnet *dev, struct usb_interface *intf)
10801086
dev->mii.phy_id_mask = 0x1f;
10811087
dev->mii.reg_num_mask = 0xff;
10821088
dev->mii.supports_gmii = 1;
1083-
dev->mii.phy_id = asix_get_phy_addr(dev);
1089+
1090+
dev->mii.phy_id = asix_read_phy_addr(dev, true);
1091+
if (dev->mii.phy_id < 0)
1092+
return dev->mii.phy_id;
10841093

10851094
dev->net->netdev_ops = &ax88178_netdev_ops;
10861095
dev->net->ethtool_ops = &ax88178_ethtool_ops;

drivers/net/usb/ax88172a.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,11 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf)
220220
}
221221

222222
priv->phy_addr = asix_read_phy_addr(dev, priv->use_embdphy);
223+
if (priv->phy_addr < 0) {
224+
ret = priv->phy_addr;
225+
goto free;
226+
}
227+
223228
ax88172a_reset_phy(dev, priv->use_embdphy);
224229

225230
/* Asix framing packs multiple eth frames into a 2K usb bulk transfer */

0 commit comments

Comments
 (0)