diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2013-05-30 17:38:22 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2013-05-30 17:38:22 +0000 |
commit | c170d3c3e46fb164b22c23852f9299f9dacf72e0 (patch) | |
tree | 96797b01e26b869be1ffdd86c527d20d123cd63b /target | |
parent | 3467b17e69e2e4eebe7b21f4792e5da55ead970c (diff) | |
download | upstream-c170d3c3e46fb164b22c23852f9299f9dacf72e0.tar.gz upstream-c170d3c3e46fb164b22c23852f9299f9dacf72e0.tar.bz2 upstream-c170d3c3e46fb164b22c23852f9299f9dacf72e0.zip |
generic: ar8216: add get_port_link callback
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
SVN-Revision: 36797
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 19 | ||||
-rw-r--r-- | target/linux/generic/files/include/linux/ar8216_platform.h | 2 |
2 files changed, 19 insertions, 2 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 6f836d7920..bc36efc3a8 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -88,8 +88,12 @@ struct ar8xxx_priv { struct switch_dev dev; struct mii_bus *mii_bus; struct phy_device *phy; + u32 (*read)(struct ar8xxx_priv *priv, int reg); void (*write)(struct ar8xxx_priv *priv, int reg, u32 val); + + int (*get_port_link)(unsigned port); + const struct net_device_ops *ndo_old; struct net_device_ops ndo; struct mutex reg_mutex; @@ -480,12 +484,21 @@ ar8216_read_port_link(struct ar8xxx_priv *priv, int port, link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO); if (link->aneg) { link->link = !!(status & AR8216_PORT_STATUS_LINK_UP); - if (!link->link) - return; } else { link->link = true; + + if (priv->get_port_link) { + int err; + + err = priv->get_port_link(port); + if (err >= 0) + link->link = !!err; + } } + if (!link->link) + return; + link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX); link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW); link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW); @@ -1058,6 +1071,8 @@ ar8327_hw_config_pdata(struct ar8xxx_priv *priv, if (!pdata) return -EINVAL; + priv->get_port_link = pdata->get_port_link; + data = &priv->chip_data.ar8327; data->port0_status = ar8327_get_port_init_status(&pdata->port0_cfg); diff --git a/target/linux/generic/files/include/linux/ar8216_platform.h b/target/linux/generic/files/include/linux/ar8216_platform.h index c6c6144e85..92e8eda663 100644 --- a/target/linux/generic/files/include/linux/ar8216_platform.h +++ b/target/linux/generic/files/include/linux/ar8216_platform.h @@ -78,6 +78,8 @@ struct ar8327_platform_data { struct ar8327_port_cfg port0_cfg; struct ar8327_port_cfg port6_cfg; struct ar8327_led_cfg *led_cfg; + + int (*get_port_link)(unsigned port); }; #endif /* AR8216_PLATFORM_H */
\ No newline at end of file |