ar71xx: introduce ar71xx_switch_data
authorGabor Juhos <juhosg@openwrt.org>
Thu, 15 Dec 2011 22:25:11 +0000 (22:25 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Thu, 15 Dec 2011 22:25:11 +0000 (22:25 +0000)
SVN-Revision: 29549

target/linux/ar71xx/files/arch/mips/ar71xx/devices.c
target/linux/ar71xx/files/arch/mips/ar71xx/devices.h
target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h
target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c

index 548a35e8535397f4d1f92048d1dc937cb2fdb474..966afeac62d7c69758a294786d332f43d38f10a7 100644 (file)
@@ -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;
index b92e482a58d4b4899fc3f6c16df143be49aa51f9..0f75fe7d83fa8b30eade83c4ac7a1e03710307bf 100644 (file)
@@ -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;
index c60641b5129736cd434edb77df95d8f54beba0da..88dd051823f4c97196837bfe9f3ec4aae67bb24f 100644 (file)
 #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);
index c0eca4ae41f742d9597a97b50389e00df1cdeaab..e96fe3626165be2f6019fd1d621d59a6d4c9e130 100644 (file)
 
 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;
index 9b88b3d417cc70ab2e6ba010e4f9853b057cc0ae..b10dd4917df22b79b76c520c3cacd18c30d141df 100644 (file)
@@ -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);