mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-27 19:33:08 +02:00
ar71xx: introduce ar71xx_switch_data
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29549 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
867f0fa967
commit
812763d48e
@ -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_1000 0x00110000
|
||||||
#define AR71XX_PLL_VAL_100 0x00001099
|
#define AR71XX_PLL_VAL_100 0x00001099
|
||||||
#define AR71XX_PLL_VAL_10 0x00991099
|
#define AR71XX_PLL_VAL_10 0x00991099
|
||||||
@ -830,7 +832,7 @@ void __init ar71xx_add_device_eth(unsigned int id)
|
|||||||
|
|
||||||
pdata->speed = SPEED_1000;
|
pdata->speed = SPEED_1000;
|
||||||
pdata->duplex = DUPLEX_FULL;
|
pdata->duplex = DUPLEX_FULL;
|
||||||
pdata->has_ar7240_switch = 1;
|
pdata->switch_data = &ar71xx_switch_data;
|
||||||
}
|
}
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
pdata->is_ar724x = 1;
|
pdata->is_ar724x = 1;
|
||||||
@ -885,7 +887,7 @@ void __init ar71xx_add_device_eth(unsigned int id)
|
|||||||
|
|
||||||
pdata->speed = SPEED_1000;
|
pdata->speed = SPEED_1000;
|
||||||
pdata->duplex = DUPLEX_FULL;
|
pdata->duplex = DUPLEX_FULL;
|
||||||
pdata->has_ar7240_switch = 1;
|
pdata->switch_data = &ar71xx_switch_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
|
@ -40,6 +40,8 @@ extern struct platform_device ar71xx_eth0_device;
|
|||||||
extern struct platform_device ar71xx_eth1_device;
|
extern struct platform_device ar71xx_eth1_device;
|
||||||
void ar71xx_add_device_eth(unsigned int id) __init;
|
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_mdio0_device;
|
||||||
extern struct platform_device ar71xx_mdio1_device;
|
extern struct platform_device ar71xx_mdio1_device;
|
||||||
void ar71xx_add_device_mdio(unsigned int id, u32 phy_mask) __init;
|
void ar71xx_add_device_mdio(unsigned int id, u32 phy_mask) __init;
|
||||||
|
@ -17,6 +17,10 @@
|
|||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
|
|
||||||
|
struct ag71xx_switch_platform_data {
|
||||||
|
int dummy;
|
||||||
|
};
|
||||||
|
|
||||||
struct ag71xx_platform_data {
|
struct ag71xx_platform_data {
|
||||||
phy_interface_t phy_if_mode;
|
phy_interface_t phy_if_mode;
|
||||||
u32 phy_mask;
|
u32 phy_mask;
|
||||||
@ -31,7 +35,8 @@ struct ag71xx_platform_data {
|
|||||||
u8 is_ar7240:1;
|
u8 is_ar7240:1;
|
||||||
u8 is_ar724x:1;
|
u8 is_ar724x:1;
|
||||||
u8 has_ar8216:1;
|
u8 has_ar8216:1;
|
||||||
u8 has_ar7240_switch:1;
|
|
||||||
|
struct ag71xx_switch_platform_data *switch_data;
|
||||||
|
|
||||||
void (*ddr_flush)(void);
|
void (*ddr_flush)(void);
|
||||||
void (*set_speed)(int speed);
|
void (*set_speed)(int speed);
|
||||||
|
@ -198,6 +198,7 @@
|
|||||||
|
|
||||||
struct ar7240sw {
|
struct ar7240sw {
|
||||||
struct mii_bus *mii_bus;
|
struct mii_bus *mii_bus;
|
||||||
|
struct ag71xx_switch_platform_data *swdata;
|
||||||
struct switch_dev swdev;
|
struct switch_dev swdev;
|
||||||
int num_ports;
|
int num_ports;
|
||||||
bool vlan;
|
bool vlan;
|
||||||
@ -843,6 +844,7 @@ static const struct switch_dev_ops ar7240_ops = {
|
|||||||
|
|
||||||
static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
|
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 mii_bus *mii = ag->mii_bus;
|
||||||
struct ar7240sw *as;
|
struct ar7240sw *as;
|
||||||
struct switch_dev *swdev;
|
struct switch_dev *swdev;
|
||||||
@ -865,6 +867,7 @@ static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
as->mii_bus = mii;
|
as->mii_bus = mii;
|
||||||
|
as->swdata = pdata->switch_data;
|
||||||
|
|
||||||
ctrl = ar7240sw_reg_read(mii, AR7240_REG_MASK_CTRL);
|
ctrl = ar7240sw_reg_read(mii, AR7240_REG_MASK_CTRL);
|
||||||
ver = (ctrl >> AR7240_MASK_CTRL_VERSION_S) & AR7240_MASK_CTRL_VERSION_M;
|
ver = (ctrl >> AR7240_MASK_CTRL_VERSION_S) & AR7240_MASK_CTRL_VERSION_M;
|
||||||
|
@ -48,7 +48,7 @@ void ag71xx_phy_start(struct ag71xx *ag)
|
|||||||
|
|
||||||
if (ag->phy_dev) {
|
if (ag->phy_dev) {
|
||||||
phy_start(ag->phy_dev);
|
phy_start(ag->phy_dev);
|
||||||
} else if (pdata->has_ar7240_switch) {
|
} else if (pdata->switch_data) {
|
||||||
ag71xx_ar7240_start(ag);
|
ag71xx_ar7240_start(ag);
|
||||||
} else {
|
} else {
|
||||||
ag->link = 1;
|
ag->link = 1;
|
||||||
@ -63,8 +63,8 @@ void ag71xx_phy_stop(struct ag71xx *ag)
|
|||||||
|
|
||||||
if (ag->phy_dev)
|
if (ag->phy_dev)
|
||||||
phy_stop(ag->phy_dev);
|
phy_stop(ag->phy_dev);
|
||||||
else if (pdata->has_ar7240_switch)
|
else if (pdata->switch_data)
|
||||||
ag71xx_ar7240_stop(ag);
|
ag71xx_ar7240_stop(ag);
|
||||||
|
|
||||||
spin_lock_irqsave(&ag->lock, flags);
|
spin_lock_irqsave(&ag->lock, flags);
|
||||||
if (ag->link) {
|
if (ag->link) {
|
||||||
@ -216,7 +216,7 @@ int __devinit ag71xx_phy_connect(struct ag71xx *ag)
|
|||||||
mutex_unlock(&ag->mii_bus->mdio_lock);
|
mutex_unlock(&ag->mii_bus->mdio_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pdata->has_ar7240_switch)
|
if (pdata->switch_data)
|
||||||
return ag71xx_ar7240_init(ag);
|
return ag71xx_ar7240_init(ag);
|
||||||
|
|
||||||
if (pdata->phy_mask)
|
if (pdata->phy_mask)
|
||||||
@ -229,7 +229,7 @@ void ag71xx_phy_disconnect(struct ag71xx *ag)
|
|||||||
{
|
{
|
||||||
struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
|
struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
|
||||||
|
|
||||||
if (pdata->has_ar7240_switch)
|
if (pdata->switch_data)
|
||||||
ag71xx_ar7240_cleanup(ag);
|
ag71xx_ar7240_cleanup(ag);
|
||||||
else if (ag->phy_dev)
|
else if (ag->phy_dev)
|
||||||
phy_disconnect(ag->phy_dev);
|
phy_disconnect(ag->phy_dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user