Commit 76e61eaa authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller
Browse files

cpmac: add support for fixed PHY



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: default avatarFlorian Fainelli <florian@openwrt.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e2c8d83
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -1117,23 +1117,24 @@ static int __devinit cpmac_probe(struct platform_device *pdev)

	pdata = pdev->dev.platform_data;

	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 = alloc_etherdev_mq(sizeof(*priv), CPMAC_QUEUES);

@@ -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",