diff options
5 files changed, 20 insertions, 8 deletions
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); |