From a312d0611d6c8da5b08ca770a36455e7cad779a7 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Wed, 15 Oct 2008 18:31:21 +0000
Subject: [PATCH] minor ethernet driver update

SVN-Revision: 12985
---
 .../ar71xx/files/drivers/net/ag71xx/ag71xx.h     |  2 +-
 .../ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c | 16 ++++++++--------
 .../include/asm-mips/mach-ar71xx/platform.h      |  2 ++
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
index d2d055d556..2f60d19b5f 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
@@ -37,7 +37,7 @@
 #define ETH_FCS_LEN	4
 
 #define AG71XX_DRV_NAME		"ag71xx"
-#define AG71XX_DRV_VERSION	"0.4.1"
+#define AG71XX_DRV_VERSION	"0.4.2"
 
 #define AG71XX_NAPI_TX		1
 
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
index 086de22291..512b42eb5c 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
@@ -193,8 +193,10 @@ void ag71xx_phy_start(struct ag71xx *ag)
 	if (ag->phy_dev) {
 		phy_start(ag->phy_dev);
 	} else {
-		ag->duplex = DUPLEX_FULL;
-		ag->speed = SPEED_100;
+		struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
+
+		ag->duplex = pdata->duplex;
+		ag->speed = pdata->speed;
 		ag->link = 1;
 		ag71xx_phy_link_update(ag);
 	}
@@ -220,8 +222,8 @@ int ag71xx_phy_connect(struct ag71xx *ag)
 	int phy_count = 0;
 	int phy_addr;
 
-	if (ag->mii_bus) {
-		/* TODO: use mutex of the mdio bus */
+	if (ag->mii_bus && pdata->phy_mask) {
+		/* TODO: use mutex of the mdio bus? */
 		for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
 			if (!(pdata->phy_mask & (1 << phy_addr)))
 				continue;
@@ -242,9 +244,6 @@ int ag71xx_phy_connect(struct ag71xx *ag)
 	}
 
 	switch (phy_count) {
-	case 0:
-		printk(KERN_ERR "%s: no PHY found\n", dev->name);
-		return -ENODEV;
 	case 1:
 		ag->phy_dev = phy_connect(dev, phydev->dev.bus_id,
 			&ag71xx_phy_link_adjust, 0, pdata->phy_if_mode);
@@ -275,9 +274,10 @@ int ag71xx_phy_connect(struct ag71xx *ag)
 		ag->speed = 0;
 		ag->duplex = -1;
 		break;
+
 	default:
 		ag->phy_dev = NULL;
-		printk(KERN_DEBUG "%s: connected to multiple PHYs (%d)\n",
+		printk(KERN_DEBUG "%s: connected to %d PHYs\n",
 			dev->name, phy_count);
 		break;
 	}
diff --git a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
index 5b00e00be7..f712f3391c 100644
--- a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
+++ b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
@@ -25,6 +25,8 @@ struct ag71xx_platform_data {
 	u32		phy_mask;
 	phy_interface_t	phy_if_mode;
 	u32		mii_if;
+	int		speed;
+	int		duplex;
 	u8		mac_addr[ETH_ALEN];
 };
 
-- 
2.30.2