uboot/drivers/net/phy/lxt.c
<<
>>
Prefs
   1/*
   2 * LXT PHY drivers
   3 *
   4 * SPDX-License-Identifier:     GPL-2.0+
   5 *
   6 * Copyright 2010-2011 Freescale Semiconductor, Inc.
   7 * author Andy Fleming
   8 */
   9#include <phy.h>
  10
  11/* LXT971 Status 2 registers */
  12#define MIIM_LXT971_SR2                     0x11  /* Status Register 2  */
  13#define MIIM_LXT971_SR2_SPEED_MASK 0x4200
  14#define MIIM_LXT971_SR2_10HDX     0x0000  /*  10 Mbit half duplex selected */
  15#define MIIM_LXT971_SR2_10FDX     0x0200  /*  10 Mbit full duplex selected */
  16#define MIIM_LXT971_SR2_100HDX    0x4000  /* 100 Mbit half duplex selected */
  17#define MIIM_LXT971_SR2_100FDX    0x4200  /* 100 Mbit full duplex selected */
  18
  19
  20/* LXT971 */
  21static int lxt971_parse_status(struct phy_device *phydev)
  22{
  23        int mii_reg;
  24        int speed;
  25
  26        mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_LXT971_SR2);
  27        speed = mii_reg & MIIM_LXT971_SR2_SPEED_MASK;
  28
  29        switch (speed) {
  30        case MIIM_LXT971_SR2_10HDX:
  31                phydev->speed = SPEED_10;
  32                phydev->duplex = DUPLEX_HALF;
  33                break;
  34        case MIIM_LXT971_SR2_10FDX:
  35                phydev->speed = SPEED_10;
  36                phydev->duplex = DUPLEX_FULL;
  37                break;
  38        case MIIM_LXT971_SR2_100HDX:
  39                phydev->speed = SPEED_100;
  40                phydev->duplex = DUPLEX_HALF;
  41                break;
  42        default:
  43                phydev->speed = SPEED_100;
  44                phydev->duplex = DUPLEX_FULL;
  45        }
  46
  47        return 0;
  48}
  49
  50static int lxt971_startup(struct phy_device *phydev)
  51{
  52        genphy_update_link(phydev);
  53        lxt971_parse_status(phydev);
  54
  55        return 0;
  56}
  57
  58static struct phy_driver LXT971_driver = {
  59        .name = "LXT971",
  60        .uid = 0x1378e0,
  61        .mask = 0xfffff0,
  62        .features = PHY_BASIC_FEATURES,
  63        .config = &genphy_config_aneg,
  64        .startup = &lxt971_startup,
  65        .shutdown = &genphy_shutdown,
  66};
  67
  68int phy_lxt_init(void)
  69{
  70        phy_register(&LXT971_driver);
  71
  72        return 0;
  73}
  74