atheros.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. phydev->supported = phydev->drv->features;
  15. return 0;
  16. }
  17. static int ar8035_config(struct phy_device *phydev)
  18. {
  19. int regval;
  20. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007);
  21. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
  22. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
  23. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
  24. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (regval|0x0018));
  25. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  26. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
  27. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100));
  28. phydev->supported = phydev->drv->features;
  29. return 0;
  30. }
  31. static struct phy_driver AR8021_driver = {
  32. .name = "AR8021",
  33. .uid = 0x4dd040,
  34. .mask = 0x4ffff0,
  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 = ar8021_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. }