diff options
Diffstat (limited to 'target/linux/generic/files/drivers/net')
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 35 | 
1 files changed, 18 insertions, 17 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index f20cc281b..e47a7da28 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -1074,19 +1074,13 @@ ar8327_init_globals(struct ar8216_priv *priv)  }  static void -ar8327_init_cpuport(struct ar8216_priv *priv) +ar8327_config_port(struct ar8216_priv *priv, unsigned int port, +		    struct ar8327_port_cfg *cfg)  { -	struct ar8327_platform_data *pdata; -	struct ar8327_port_cfg *cfg;  	u32 t; -	pdata = priv->phy->dev.platform_data; -	if (!pdata) -		return; - -	cfg = &pdata->port0_cfg; -	if (!cfg->force_link) { -		priv->write(priv, AR8327_REG_PORT_STATUS(AR8216_PORT_CPU), +	if (!cfg || !cfg->force_link) { +		priv->write(priv, AR8327_REG_PORT_STATUS(port),  			    AR8216_PORT_STATUS_LINK_AUTO);  		return;  	} @@ -1095,6 +1089,7 @@ ar8327_init_cpuport(struct ar8216_priv *priv)  	t |= cfg->duplex ? AR8216_PORT_STATUS_DUPLEX : 0;  	t |= cfg->rxpause ? AR8216_PORT_STATUS_RXFLOW : 0;  	t |= cfg->txpause ? AR8216_PORT_STATUS_TXFLOW : 0; +  	switch (cfg->speed) {  	case AR8327_PORT_SPEED_10:  		t |= AR8216_PORT_SPEED_10M; @@ -1107,21 +1102,27 @@ ar8327_init_cpuport(struct ar8216_priv *priv)  		break;  	} -	priv->write(priv, AR8327_REG_PORT_STATUS(AR8216_PORT_CPU), t); +	priv->write(priv, AR8327_REG_PORT_STATUS(port), t);  }  static void  ar8327_init_port(struct ar8216_priv *priv, int port)  { +	struct ar8327_platform_data *pdata; +	struct ar8327_port_cfg *cfg;  	u32 t; -	if (port == AR8216_PORT_CPU) { -		ar8327_init_cpuport(priv); -	} else { -		t = AR8216_PORT_STATUS_LINK_AUTO; -		priv->write(priv, AR8327_REG_PORT_STATUS(port), t); -	} +	pdata = priv->phy->dev.platform_data; + +	if (pdata && port == AR8216_PORT_CPU) +		cfg = &pdata->port0_cfg; +	else if (pdata && port == 6) +		cfg = &pdata->port6_cfg; +	else +		cfg = NULL; +	ar8327_config_port(priv, port, cfg); +	  	priv->write(priv, AR8327_REG_PORT_HEADER(port), 0);  	priv->write(priv, AR8327_REG_PORT_VLAN0(port), 0);  | 
