From: Michal Simek Date: Thu, 24 Sep 2015 15:36:00 +0000 (+0200) Subject: net: phy: Add support for NatSemi DP83867 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bba49814a3280f7385adc37bcb89550ba966f8cf;p=thirdparty%2Fu-boot.git net: phy: Add support for NatSemi DP83867 This is temporary version to get dc1 up and running without breaking different boards. Signed-off-by: Michal Simek --- diff --git a/drivers/net/phy/natsemi.c b/drivers/net/phy/natsemi.c index ea9fe833ed8..d5c694011ab 100644 --- a/drivers/net/phy/natsemi.c +++ b/drivers/net/phy/natsemi.c @@ -110,10 +110,57 @@ static struct phy_driver DP83865_driver = { .shutdown = &genphy_shutdown, }; +int dp83867_config(struct phy_device *phydev) +{ + /* FIXME - describe this sequence in better way */ + phy_write(phydev, MDIO_DEVAD_NONE, 0x10, 0x5048); + + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x1F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0x86); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x401F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0xA8); + + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x1F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0x86); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x401F); + + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x1F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0x32); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x401F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0xD3); + + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x1F); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0E, 0x32); + phy_write(phydev, MDIO_DEVAD_NONE, 0x0D, 0x401F); + + genphy_config_aneg(phydev); + + return 0; +} + +int dp83867_startup(struct phy_device *phydev) +{ + genphy_update_link(phydev); + genphy_parse_link(phydev); + + return 0; +} + +static struct phy_driver DP83867_driver = { + .name = "NatSemi DP83867", + .uid = 0x2000a231, + .mask = 0xfffffff0, + .features = PHY_GBIT_FEATURES, + .config = &dp83867_config, + .startup = &dp83867_startup, + .shutdown = &genphy_shutdown, +}; + int phy_natsemi_init(void) { phy_register(&DP83630_driver); phy_register(&DP83865_driver); + phy_register(&DP83867_driver); return 0; }