Skip to content

Commit eb41818

Browse files
Gavin Shandavem330
authored andcommitted
net/faraday: Helper functions to create or destroy MDIO interface
This introduces two helper functions to create or destroy MDIO interface. No logical changes introduced except the proper MDIO names are given when having more than one MDIO bus. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Acked-by: Joel Stanley <joel@jms.id.au> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7a82ecf commit eb41818

File tree

1 file changed

+60
-35
lines changed

1 file changed

+60
-35
lines changed

drivers/net/ethernet/faraday/ftgmac100.c

Lines changed: 60 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,60 @@ static const struct net_device_ops ftgmac100_netdev_ops = {
11461146
.ndo_do_ioctl = ftgmac100_do_ioctl,
11471147
};
11481148

1149+
static int ftgmac100_setup_mdio(struct net_device *netdev)
1150+
{
1151+
struct ftgmac100 *priv = netdev_priv(netdev);
1152+
struct platform_device *pdev = to_platform_device(priv->dev);
1153+
int i, err = 0;
1154+
1155+
/* initialize mdio bus */
1156+
priv->mii_bus = mdiobus_alloc();
1157+
if (!priv->mii_bus)
1158+
return -EIO;
1159+
1160+
priv->mii_bus->name = "ftgmac100_mdio";
1161+
snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%d",
1162+
pdev->name, pdev->id);
1163+
priv->mii_bus->priv = priv->netdev;
1164+
priv->mii_bus->read = ftgmac100_mdiobus_read;
1165+
priv->mii_bus->write = ftgmac100_mdiobus_write;
1166+
1167+
for (i = 0; i < PHY_MAX_ADDR; i++)
1168+
priv->mii_bus->irq[i] = PHY_POLL;
1169+
1170+
err = mdiobus_register(priv->mii_bus);
1171+
if (err) {
1172+
dev_err(priv->dev, "Cannot register MDIO bus!\n");
1173+
goto err_register_mdiobus;
1174+
}
1175+
1176+
err = ftgmac100_mii_probe(priv);
1177+
if (err) {
1178+
dev_err(priv->dev, "MII Probe failed!\n");
1179+
goto err_mii_probe;
1180+
}
1181+
1182+
return 0;
1183+
1184+
err_mii_probe:
1185+
mdiobus_unregister(priv->mii_bus);
1186+
err_register_mdiobus:
1187+
mdiobus_free(priv->mii_bus);
1188+
return err;
1189+
}
1190+
1191+
static void ftgmac100_destroy_mdio(struct net_device *netdev)
1192+
{
1193+
struct ftgmac100 *priv = netdev_priv(netdev);
1194+
1195+
if (!netdev->phydev)
1196+
return;
1197+
1198+
phy_disconnect(netdev->phydev);
1199+
mdiobus_unregister(priv->mii_bus);
1200+
mdiobus_free(priv->mii_bus);
1201+
}
1202+
11491203
/******************************************************************************
11501204
* struct platform_driver functions
11511205
*****************************************************************************/
@@ -1211,31 +1265,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
12111265

12121266
priv->irq = irq;
12131267

1214-
/* initialize mdio bus */
1215-
priv->mii_bus = mdiobus_alloc();
1216-
if (!priv->mii_bus) {
1217-
err = -EIO;
1218-
goto err_alloc_mdiobus;
1219-
}
1220-
1221-
priv->mii_bus->name = "ftgmac100_mdio";
1222-
snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "ftgmac100_mii");
1223-
1224-
priv->mii_bus->priv = netdev;
1225-
priv->mii_bus->read = ftgmac100_mdiobus_read;
1226-
priv->mii_bus->write = ftgmac100_mdiobus_write;
1227-
1228-
err = mdiobus_register(priv->mii_bus);
1229-
if (err) {
1230-
dev_err(&pdev->dev, "Cannot register MDIO bus!\n");
1231-
goto err_register_mdiobus;
1232-
}
1233-
1234-
err = ftgmac100_mii_probe(priv);
1235-
if (err) {
1236-
dev_err(&pdev->dev, "MII Probe failed!\n");
1237-
goto err_mii_probe;
1238-
}
1268+
err = ftgmac100_setup_mdio(netdev);
1269+
if (err)
1270+
goto err_setup_mdio;
12391271

12401272
/* register network device */
12411273
err = register_netdev(netdev);
@@ -1255,12 +1287,8 @@ static int ftgmac100_probe(struct platform_device *pdev)
12551287
return 0;
12561288

12571289
err_register_netdev:
1258-
phy_disconnect(netdev->phydev);
1259-
err_mii_probe:
1260-
mdiobus_unregister(priv->mii_bus);
1261-
err_register_mdiobus:
1262-
mdiobus_free(priv->mii_bus);
1263-
err_alloc_mdiobus:
1290+
ftgmac100_destroy_mdio(netdev);
1291+
err_setup_mdio:
12641292
iounmap(priv->base);
12651293
err_ioremap:
12661294
release_resource(priv->res);
@@ -1280,10 +1308,7 @@ static int __exit ftgmac100_remove(struct platform_device *pdev)
12801308
priv = netdev_priv(netdev);
12811309

12821310
unregister_netdev(netdev);
1283-
1284-
phy_disconnect(netdev->phydev);
1285-
mdiobus_unregister(priv->mii_bus);
1286-
mdiobus_free(priv->mii_bus);
1311+
ftgmac100_destroy_mdio(netdev);
12871312

12881313
iounmap(priv->base);
12891314
release_resource(priv->res);

0 commit comments

Comments
 (0)