diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-03-18 22:06:23 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-03-18 22:06:23 +0000 | 
| commit | d29edcf013f273ebb64d5d065d7b3925a1993689 (patch) | |
| tree | 1ffac36159c01561ee433e37ad9a59de1c754329 /target/linux/generic | |
| parent | 9aeb2624acc2c1cb7654ed51c53e577b14abb49e (diff) | |
generic: ar8216: add init_port field to ar8xxx_chip
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31000 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic')
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 26 | 
1 files changed, 22 insertions, 4 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 4c64b460b..485cb5205 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -40,8 +40,10 @@ struct ar8216_priv;  struct ar8xxx_chip {  	int (*hw_init)(struct ar8216_priv *priv); +	void (*init_port)(struct ar8216_priv *priv, int port);  	void (*setup_port)(struct ar8216_priv *priv, int port, u32 egress,  			   u32 ingress, u32 members, u32 pvid); +	int (*atu_flush)(struct ar8216_priv *priv);  };  struct ar8216_priv { @@ -480,6 +482,18 @@ ar8216_vtu_op(struct ar8216_priv *priv, u32 op, u32 val)  	priv->write(priv, AR8216_REG_VTU, op);  } +static int +ar8216_atu_flush(struct ar8216_priv *priv) +{ +	int ret; + +	ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0); +	if (!ret) +		priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH); + +	return ret; +} +  static void  ar8216_setup_port(struct ar8216_priv *priv, int port, u32 egress, u32 ingress,  		  u32 members, u32 pvid) @@ -743,17 +757,23 @@ ar8216_init_port(struct ar8216_priv *priv, int port)  static const struct ar8xxx_chip ar8216_chip = {  	.hw_init = ar8216_hw_init, +	.init_port = ar8216_init_port,  	.setup_port = ar8216_setup_port, +	.atu_flush = ar8216_atu_flush,  };  static const struct ar8xxx_chip ar8236_chip = {  	.hw_init = ar8236_hw_init, +	.init_port = ar8216_init_port,  	.setup_port = ar8236_setup_port, +	.atu_flush = ar8216_atu_flush,  };  static const struct ar8xxx_chip ar8316_chip = {  	.hw_init = ar8316_hw_init, +	.init_port = ar8216_init_port,  	.setup_port = ar8216_setup_port, +	.atu_flush = ar8216_atu_flush,  };  static int @@ -771,7 +791,7 @@ ar8216_reset_switch(struct switch_dev *dev)  	/* Configure all ports */  	for (i = 0; i < AR8216_NUM_PORTS; i++) -		ar8216_init_port(priv, i); +		priv->chip->init_port(priv, i);  	ar8216_init_globals(priv);  	mutex_unlock(&priv->reg_mutex); @@ -1012,9 +1032,7 @@ ar8216_read_status(struct phy_device *phydev)  	/* flush the address translation unit */  	mutex_lock(&priv->reg_mutex); -	ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0); -	if (!ret) -		priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH); +	ret = priv->chip->atu_flush(priv);  	mutex_unlock(&priv->reg_mutex);  	phydev->state = PHY_RUNNING;  | 
