diff options
| author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2008-01-21 23:49:53 +0300 | 
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2008-02-05 23:19:03 -0600 | 
| commit | 8353ec7b0d6666c0674ca978379c55234609dae8 (patch) | |
| tree | c95f9678b52891c6748ee68b4c8e6f7dd96f3051 /drivers/net/cpmac.c | |
| parent | 9ef9dc69d4167276c04590d67ee55de8380bc1ad (diff) | |
cpmac: convert to new Fixed PHY infrastructure
This patch converts cpmac to the new Fixed PHY infrastructure, though it
doesn't fix all the problems with that driver. I didn't even bother to
test this patch to compile, because cpmac driver is broken in several ways:
1. This driver won't compile by itself because lack of its header describing
   platform data;
2. It assumes that fixed PHYs should be created by the ethernet driver.
   It is wrong assumption: fixed PHYs creation is platform code authority,
   driver must blindly accept bus_id and phy_id platform data variables
   instead.
Also, it seem that that driver doesn't have actual in-tree users, so
nothing to fix further.
The main purpose of that patch is to get rid of the following Kconfig
warning:
scripts/kconfig/conf -s arch/powerpc/Kconfig
drivers/net/Kconfig:1713:warning: 'select' used by config symbol
'CPMAC' refers to undefined symbol 'FIXED_MII_100_FDX'
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'drivers/net/cpmac.c')
| -rw-r--r-- | drivers/net/cpmac.c | 55 | 
1 files changed, 18 insertions, 37 deletions
| diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c index 6ccebb830ff9..c85194f2cd2d 100644 --- a/drivers/net/cpmac.c +++ b/drivers/net/cpmac.c @@ -845,15 +845,6 @@ static void cpmac_adjust_link(struct net_device *dev)  	spin_unlock(&priv->lock);  } -static int cpmac_link_update(struct net_device *dev, -			     struct fixed_phy_status *status) -{ -	status->link = 1; -	status->speed = 100; -	status->duplex = 1; -	return 0; -} -  static int cpmac_open(struct net_device *dev)  {  	int i, size, res; @@ -996,11 +987,11 @@ static int external_switch;  static int __devinit cpmac_probe(struct platform_device *pdev)  {  	int rc, phy_id, i; +	int mdio_bus_id = cpmac_mii.id;  	struct resource *mem;  	struct cpmac_priv *priv;  	struct net_device *dev;  	struct plat_cpmac_data *pdata; -	struct fixed_info *fixed_phy;  	DECLARE_MAC_BUF(mac);  	pdata = pdev->dev.platform_data; @@ -1014,9 +1005,23 @@ static int __devinit cpmac_probe(struct platform_device *pdev)  	}  	if (phy_id == PHY_MAX_ADDR) { -		if (external_switch || dumb_switch) +		if (external_switch || dumb_switch) { +			struct fixed_phy_status status = {}; + +			mdio_bus_id = 0; + +			/* +			 * FIXME: this should be in the platform code! +			 * Since there is not platform code at all (that is, +			 * no mainline users of that driver), place it here +			 * for now. +			 */  			phy_id = 0; -		else { +			status.link = 1; +			status.duplex = 1; +			status.speed = 100; +			fixed_phy_add(PHY_POLL, phy_id, &status); +		} else {  			printk(KERN_ERR "cpmac: no PHY present\n");  			return -ENODEV;  		} @@ -1060,32 +1065,8 @@ 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)); -	if (phy_id == 31) { -		snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, cpmac_mii.id, -			 phy_id); -	} else { -		/* Let's try to get a free fixed phy... */ -		for (i = 0; i < MAX_PHY_AMNT; i++) { -			fixed_phy = fixed_mdio_get_phydev(i); -			if (!fixed_phy) -				continue; -			if (!fixed_phy->phydev->attached_dev) { -				strncpy(priv->phy_name, -					fixed_phy->phydev->dev.bus_id, -					BUS_ID_SIZE); -				fixed_mdio_set_link_update(fixed_phy->phydev, -							   &cpmac_link_update); -				goto phy_found; -			} -		} -		if (netif_msg_drv(priv)) -			printk(KERN_ERR "%s: Could not find fixed PHY\n", -			       dev->name); -		rc = -ENODEV; -		goto fail; -	} +	snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); -phy_found:  	priv->phy = phy_connect(dev, priv->phy_name, &cpmac_adjust_link, 0,  				PHY_INTERFACE_MODE_MII);  	if (IS_ERR(priv->phy)) { | 
