On 11/15/2016 01:57 PM, woojung....@microchip.com wrote:
> From: Woojung Huh <woojung....@microchip.com>
> 
> Relocate mdix code to phy driver to be called at config_init().
> 
> Signed-off-by: Woojung Huh <woojung....@microchip.com>
> ---
>  drivers/net/phy/microchip.c | 43 +++++++++++++++++++++++++-
>  drivers/net/usb/lan78xx.c   | 73 
> ++-------------------------------------------
>  2 files changed, 45 insertions(+), 71 deletions(-)
> 
> diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c
> index 7c00e50..13553df 100644
> --- a/drivers/net/phy/microchip.c
> +++ b/drivers/net/phy/microchip.c
> @@ -106,6 +106,47 @@ static int lan88xx_set_wol(struct phy_device *phydev,
>       return 0;
>  }
>  
> +static void lan88xx_set_mdix(struct phy_device *phydev)
> +{
> +     int buf;
> +
> +     if (phydev->mdix == ETH_TP_MDI) {
> +             phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
> +                       LAN88XX_EXT_PAGE_SPACE_1);

Should you take this write out of the if/else

> +             buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);

And this one too

> +             buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
> +             phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
> +                       buf | LAN88XX_EXT_MODE_CTRL_MDI_);
> +             phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
> +                       LAN88XX_EXT_PAGE_SPACE_0);

And this one too as well

> +     } else if (phydev->mdix == ETH_TP_MDI_X) {

switch/case statement would be more appropriate and it would be easier
to add support for future possible modes.

And once you take the write/read/write out of the switch case, it's just
a matter of translating phydev->mdix into the appropriate mask value to
write.

So essentially, this comes down to:

static void lan88xx_set_mdix(struct phy_device *phydev)
{
        int buf;
        int mask_val;

        switch (phydev->mdix) {
        case ETH_TP_MDI:
                mask_val = LAN88XX_EXT_MODE_CTRL_MDI_;
                break;
        case ETH_TP_MDI_X:
                mask_val = LAN88XX_EXT_MODE_CTRL_MDI_X_;
                break;
        case ETH_TP_MDI_AUTO:
                mask_val = LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_:
                break:
        default:
                return;
        }

        phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
                  LAN88XX_EXT_PAGE_SPACE_1);
        buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
        buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
        buf |= mask_val;
        phy_write(phydev, LAN88XX_EXT_MODE_CTRL, buf);
        phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
                  LAN88XX_EXT_PAGE_SPACE_0);
}

I leave it up to you whether you need to do this now, or as a subsequent
clean up patch.
-- 
Florian

Reply via email to