atheros.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. genphy_config_aneg(phydev);
  29. phy_reset(phydev);
  30. return 0;
  31. }
  32. static struct phy_driver AR8021_driver = {
  33. .name = "AR8021",
  34. .uid = 0x4dd040,
  35. .mask = 0x4fffff,
  36. .features = PHY_GBIT_FEATURES,
  37. .config = ar8021_config,
  38. .startup = genphy_startup,
  39. .shutdown = genphy_shutdown,
  40. };
  41. static struct phy_driver AR8031_driver = {
  42. .name = "AR8031/AR8033",
  43. .uid = 0x4dd074,
  44. .mask = 0xffffffef,
  45. .features = PHY_GBIT_FEATURES,
  46. .config = genphy_config,
  47. .startup = genphy_startup,
  48. .shutdown = genphy_shutdown,
  49. };
  50. static struct phy_driver AR8035_driver = {
  51. .name = "AR8035",
  52. .uid = 0x4dd072,
  53. .mask = 0xffffffef,
  54. .features = PHY_GBIT_FEATURES,
  55. .config = ar8035_config,
  56. .startup = genphy_startup,
  57. .shutdown = genphy_shutdown,
  58. };
  59. int phy_atheros_init(void)
  60. {
  61. phy_register(&AR8021_driver);
  62. phy_register(&AR8031_driver);
  63. phy_register(&AR8035_driver);
  64. return 0;
  65. }