Skip to content

Commit

Permalink
cpmac: add support for fixed PHY
Browse files Browse the repository at this point in the history
This patch adds support for fixed PHY connected in MII mode
to cpmac. We allow external and dumb_switch module parameters
to override the PHY detection process since they are always connected
with MDIO bus identifier 0. This lets fixed PHYs to be detected
correctly and be connected to the their corresponding MDIO
bus identifier.

Signed-off-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Florian Fainelli authored and David S. Miller committed Aug 5, 2009
1 parent 1e2c8d8 commit 76e61ea
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions drivers/net/cpmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -1117,22 +1117,23 @@ static int __devinit cpmac_probe(struct platform_device *pdev)

pdata = pdev->dev.platform_data;

for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) {
if (!(pdata->phy_mask & (1 << phy_id)))
continue;
if (!cpmac_mii->phy_map[phy_id])
continue;
break;
if (external_switch || dumb_switch) {
strncpy(mdio_bus_id, "0", BUS_ID_SIZE); /* fixed phys bus */
phy_id = pdev->id;
} else {
for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) {
if (!(pdata->phy_mask & (1 << phy_id)))
continue;
if (!cpmac_mii->phy_map[phy_id])
continue;
strncpy(mdio_bus_id, cpmac_mii->id, BUS_ID_SIZE);
break;
}
}

if (phy_id == PHY_MAX_ADDR) {
if (external_switch || dumb_switch) {
strncpy(mdio_bus_id, "0", BUS_ID_SIZE); /* fixed phys bus */
phy_id = pdev->id;
} else {
dev_err(&pdev->dev, "no PHY present\n");
return -ENODEV;
}
dev_err(&pdev->dev, "no PHY present\n");
return -ENODEV;
}

dev = alloc_etherdev_mq(sizeof(*priv), CPMAC_QUEUES);
Expand Down Expand Up @@ -1166,8 +1167,11 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
priv->msg_enable = netif_msg_init(debug_level, 0xff);
memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr));

priv->phy = phy_connect(dev, dev_name(&cpmac_mii->phy_map[phy_id]->dev),
&cpmac_adjust_link, 0, PHY_INTERFACE_MODE_MII);
snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id);

priv->phy = phy_connect(dev, priv->phy_name, &cpmac_adjust_link, 0,
PHY_INTERFACE_MODE_MII);

if (IS_ERR(priv->phy)) {
if (netif_msg_drv(priv))
printk(KERN_ERR "%s: Could not attach to PHY\n",
Expand Down

0 comments on commit 76e61ea

Please sign in to comment.