Browse Source

generic: ar8216: set chip type directly in ar8216_id_chip

SVN-Revision: 30854
Gabor Juhos 14 years ago
parent
commit
e3538fa852
1 changed files with 18 additions and 14 deletions
  1. 18 14
      target/linux/generic/files/drivers/net/phy/ar8216.c

+ 18 - 14
target/linux/generic/files/drivers/net/phy/ar8216.c

@@ -137,9 +137,11 @@ ar8216_id_chip(struct ar8216_priv *priv)
 	u16 id;
 	int i;
 
+	priv->chip = UNKNOWN;
+
 	val = ar8216_mii_read(priv, AR8216_REG_CTRL);
 	if (val == ~0)
-		return UNKNOWN;
+		return -ENODEV;
 
 	id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
 	for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
@@ -147,21 +149,24 @@ ar8216_id_chip(struct ar8216_priv *priv)
 
 		val = ar8216_mii_read(priv, AR8216_REG_CTRL);
 		if (val == ~0)
-			return UNKNOWN;
+			return -ENODEV;
 
 		t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
 		if (t != id)
-			return UNKNOWN;
+			return -ENODEV;
 	}
 
 	switch (id) {
 	case 0x0101:
-		return AR8216;
+		priv->chip = AR8216;
+		break;
 	case 0x0301:
-		return AR8236;
+		priv->chip = AR8236;
+		break;
 	case 0x1000:
 	case 0x1001:
-		return AR8316;
+		priv->chip = AR8316;
+		break;
 	default:
 		printk(KERN_DEBUG
 			"ar8216: Unknown Atheros device [ver=%d, rev=%d, phy_id=%04x%04x]\n",
@@ -170,8 +175,10 @@ ar8216_id_chip(struct ar8216_priv *priv)
 			mdiobus_read(priv->phy->bus, priv->phy->addr, 2),
 			mdiobus_read(priv->phy->bus, priv->phy->addr, 3));
 
-		return UNKNOWN;
+		return -ENODEV;
 	}
+
+	return 0;
 }
 
 static void
@@ -821,7 +828,9 @@ ar8216_config_init(struct phy_device *pdev)
 
 	priv->phy = pdev;
 
-	priv->chip = ar8216_id_chip(priv);
+	ret = ar8216_id_chip(priv);
+	if (ret)
+		goto err_free_priv;
 
 	if (pdev->addr != 0) {
 		if (priv->chip == AR8316) {
@@ -990,14 +999,9 @@ static int
 ar8216_probe(struct phy_device *pdev)
 {
 	struct ar8216_priv priv;
-	u16 chip;
 
 	priv.phy = pdev;
-	chip = ar8216_id_chip(&priv);
-	if (chip == UNKNOWN)
-		return -ENODEV;
-
-	return 0;
+	return ar8216_id_chip(&priv);
 }
 
 static void