From 812763d48e6daa3895406d100008307d7154985e Mon Sep 17 00:00:00 2001
From: juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 15 Dec 2011 22:25:11 +0000
Subject: ar71xx: introduce ar71xx_switch_data

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29549 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 target/linux/ar71xx/files/arch/mips/ar71xx/devices.c           |  6 ++++--
 target/linux/ar71xx/files/arch/mips/ar71xx/devices.h           |  2 ++
 .../ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h  |  7 ++++++-
 target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c   |  3 +++
 target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c      | 10 +++++-----
 5 files changed, 20 insertions(+), 8 deletions(-)

(limited to 'target')

diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c
index 548a35e85..966afeac6 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c
@@ -527,6 +527,8 @@ struct platform_device ar71xx_eth1_device = {
 	},
 };
 
+struct ag71xx_switch_platform_data ar71xx_switch_data;
+
 #define AR71XX_PLL_VAL_1000	0x00110000
 #define AR71XX_PLL_VAL_100	0x00001099
 #define AR71XX_PLL_VAL_10	0x00991099
@@ -830,7 +832,7 @@ void __init ar71xx_add_device_eth(unsigned int id)
 
 			pdata->speed = SPEED_1000;
 			pdata->duplex = DUPLEX_FULL;
-			pdata->has_ar7240_switch = 1;
+			pdata->switch_data = &ar71xx_switch_data;
 		}
 		pdata->has_gbit = 1;
 		pdata->is_ar724x = 1;
@@ -885,7 +887,7 @@ void __init ar71xx_add_device_eth(unsigned int id)
 
 			pdata->speed = SPEED_1000;
 			pdata->duplex = DUPLEX_FULL;
-			pdata->has_ar7240_switch = 1;
+			pdata->switch_data = &ar71xx_switch_data;
 		}
 
 		pdata->has_gbit = 1;
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.h b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.h
index b92e482a5..0f75fe7d8 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.h
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.h
@@ -40,6 +40,8 @@ extern struct platform_device ar71xx_eth0_device;
 extern struct platform_device ar71xx_eth1_device;
 void ar71xx_add_device_eth(unsigned int id) __init;
 
+extern struct ag71xx_switch_platform_data ar71xx_switch_data;
+
 extern struct platform_device ar71xx_mdio0_device;
 extern struct platform_device ar71xx_mdio1_device;
 void ar71xx_add_device_mdio(unsigned int id, u32 phy_mask) __init;
diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h
index c60641b51..88dd05182 100644
--- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h
+++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h
@@ -17,6 +17,10 @@
 #include <linux/phy.h>
 #include <linux/spi/spi.h>
 
+struct ag71xx_switch_platform_data {
+	int		dummy;
+};
+
 struct ag71xx_platform_data {
 	phy_interface_t	phy_if_mode;
 	u32		phy_mask;
@@ -31,7 +35,8 @@ struct ag71xx_platform_data {
 	u8		is_ar7240:1;
 	u8		is_ar724x:1;
 	u8		has_ar8216:1;
-	u8		has_ar7240_switch:1;
+
+	struct ag71xx_switch_platform_data *switch_data;
 
 	void		(*ddr_flush)(void);
 	void		(*set_speed)(int speed);
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
index c0eca4ae4..e96fe3626 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
@@ -198,6 +198,7 @@
 
 struct ar7240sw {
 	struct mii_bus	*mii_bus;
+	struct ag71xx_switch_platform_data *swdata;
 	struct switch_dev swdev;
 	int num_ports;
 	bool vlan;
@@ -843,6 +844,7 @@ static const struct switch_dev_ops ar7240_ops = {
 
 static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
 {
+	struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
 	struct mii_bus *mii = ag->mii_bus;
 	struct ar7240sw *as;
 	struct switch_dev *swdev;
@@ -865,6 +867,7 @@ static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
 		return NULL;
 
 	as->mii_bus = mii;
+	as->swdata = pdata->switch_data;
 
 	ctrl = ar7240sw_reg_read(mii, AR7240_REG_MASK_CTRL);
 	ver = (ctrl >> AR7240_MASK_CTRL_VERSION_S) & AR7240_MASK_CTRL_VERSION_M;
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 9b88b3d41..b10dd4917 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
@@ -48,7 +48,7 @@ void ag71xx_phy_start(struct ag71xx *ag)
 
 	if (ag->phy_dev) {
 		phy_start(ag->phy_dev);
-	} else if (pdata->has_ar7240_switch) {
+	} else if (pdata->switch_data) {
 		ag71xx_ar7240_start(ag);
 	} else {
 		ag->link = 1;
@@ -63,8 +63,8 @@ void ag71xx_phy_stop(struct ag71xx *ag)
 
 	if (ag->phy_dev)
 		phy_stop(ag->phy_dev);
-	else if (pdata->has_ar7240_switch)
-			ag71xx_ar7240_stop(ag);
+	else if (pdata->switch_data)
+		ag71xx_ar7240_stop(ag);
 
 	spin_lock_irqsave(&ag->lock, flags);
 	if (ag->link) {
@@ -216,7 +216,7 @@ int __devinit ag71xx_phy_connect(struct ag71xx *ag)
 		mutex_unlock(&ag->mii_bus->mdio_lock);
 	}
 
-	if (pdata->has_ar7240_switch)
+	if (pdata->switch_data)
 		return ag71xx_ar7240_init(ag);
 
 	if (pdata->phy_mask)
@@ -229,7 +229,7 @@ void ag71xx_phy_disconnect(struct ag71xx *ag)
 {
 	struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
 
-	if (pdata->has_ar7240_switch)
+	if (pdata->switch_data)
 		ag71xx_ar7240_cleanup(ag);
 	else if (ag->phy_dev)
 		phy_disconnect(ag->phy_dev);
-- 
cgit v1.2.3