atheros.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Atheros PHY drivers
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. *
  6. * Copyright 2011, 2013 Freescale Semiconductor, Inc.
  7. * author Andy Fleming
  8. */
  9. #include <phy.h>
  10. static int ar8021_config(struct phy_device *phydev)
  11. {
  12. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  13. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x3D47);
  14. return 0;
  15. }
  16. static int ar8035_config(struct phy_device *phydev)
  17. {
  18. int regval;
  19. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007);
  20. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
  21. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
  22. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
  23. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (regval|0x0018));
  24. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  25. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
  26. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100));
  27. genphy_config_aneg(phydev);
  28. phy_reset(phydev);
  29. return 0;
  30. }
  31. static struct phy_driver AR8021_driver = {
  32. .name = "AR8021",
  33. .uid = 0x4dd040,
  34. .mask = 0x4fffff,
  35. .features = PHY_GBIT_FEATURES,
  36. .config = ar8021_config,
  37. .startup = genphy_startup,
  38. .shutdown = genphy_shutdown,
  39. };
  40. static struct phy_driver AR8031_driver = {
  41. .name = "AR8031/AR8033",
  42. .uid = 0x4dd074,
  43. .mask = 0xffffffef,
  44. .features = PHY_GBIT_FEATURES,
  45. .config = genphy_config,
  46. .startup = genphy_startup,
  47. .shutdown = genphy_shutdown,
  48. };
  49. static struct phy_driver AR8035_driver = {
  50. .name = "AR8035",
  51. .uid = 0x4dd072,
  52. .mask = 0xffffffef,
  53. .features = PHY_GBIT_FEATURES,
  54. .config = ar8035_config,
  55. .startup = genphy_startup,
  56. .shutdown = genphy_shutdown,
  57. };
  58. int phy_atheros_init(void)
  59. {
  60. phy_register(&AR8021_driver);
  61. phy_register(&AR8031_driver);
  62. phy_register(&AR8035_driver);
  63. return 0;
  64. }