net: phylink, dsa: eliminate phylink_fixed_state_cb()

Move the callback into the phylink_config structure, rather than
providing a callback to set this up.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Russell King
2020-04-23 17:02:56 +01:00
committed by David S. Miller
parent 6861d6d9cf
commit 5c05c1dbb1
3 changed files with 29 additions and 43 deletions

View File

@@ -480,8 +480,8 @@ static void phylink_get_fixed_state(struct phylink *pl,
struct phylink_link_state *state)
{
*state = pl->link_config;
if (pl->get_fixed_state)
pl->get_fixed_state(pl->netdev, state);
if (pl->config->get_fixed_state)
pl->config->get_fixed_state(pl->config, state);
else if (pl->link_gpio)
state->link = !!gpiod_get_value_cansleep(pl->link_gpio);
@@ -1044,32 +1044,6 @@ void phylink_disconnect_phy(struct phylink *pl)
}
EXPORT_SYMBOL_GPL(phylink_disconnect_phy);
/**
* phylink_fixed_state_cb() - allow setting a fixed link callback
* @pl: a pointer to a &struct phylink returned from phylink_create()
* @cb: callback to execute to determine the fixed link state.
*
* The MAC driver should call this driver when the state of its link
* can be determined through e.g: an out of band MMIO register.
*/
int phylink_fixed_state_cb(struct phylink *pl,
void (*cb)(struct net_device *dev,
struct phylink_link_state *state))
{
/* It does not make sense to let the link be overriden unless we use
* MLO_AN_FIXED
*/
if (pl->cfg_link_an_mode != MLO_AN_FIXED)
return -EINVAL;
mutex_lock(&pl->state_mutex);
pl->get_fixed_state = cb;
mutex_unlock(&pl->state_mutex);
return 0;
}
EXPORT_SYMBOL_GPL(phylink_fixed_state_cb);
/**
* phylink_mac_change() - notify phylink of a change in MAC state
* @pl: a pointer to a &struct phylink returned from phylink_create()
@@ -1106,6 +1080,8 @@ static irqreturn_t phylink_link_handler(int irq, void *data)
*/
void phylink_start(struct phylink *pl)
{
bool poll = false;
ASSERT_RTNL();
phylink_info(pl, "configuring for %s/%s link mode\n",
@@ -1142,10 +1118,18 @@ void phylink_start(struct phylink *pl)
irq = 0;
}
if (irq <= 0)
mod_timer(&pl->link_poll, jiffies + HZ);
poll = true;
}
if ((pl->cfg_link_an_mode == MLO_AN_FIXED && pl->get_fixed_state) ||
pl->config->pcs_poll)
switch (pl->cfg_link_an_mode) {
case MLO_AN_FIXED:
poll |= pl->config->poll_fixed_state;
break;
case MLO_AN_INBAND:
poll |= pl->config->pcs_poll;
break;
}
if (poll)
mod_timer(&pl->link_poll, jiffies + HZ);
if (pl->phydev)
phy_start(pl->phydev);