atheros.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * Atheros PHY drivers
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License as
  6. * published by the Free Software Foundation; either version 2 of
  7. * the License, or (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  17. * MA 02111-1307 USA
  18. *
  19. * Copyright 2011, 2013 Freescale Semiconductor, Inc.
  20. * author Andy Fleming
  21. *
  22. */
  23. #include <phy.h>
  24. static int ar8021_config(struct phy_device *phydev)
  25. {
  26. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  27. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x3D47);
  28. return 0;
  29. }
  30. static int ar8035_config(struct phy_device *phydev)
  31. {
  32. int regval;
  33. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007);
  34. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
  35. phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
  36. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
  37. phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (regval|0x0018));
  38. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  39. regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
  40. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100));
  41. genphy_config_aneg(phydev);
  42. phy_reset(phydev);
  43. return 0;
  44. }
  45. static struct phy_driver AR8021_driver = {
  46. .name = "AR8021",
  47. .uid = 0x4dd040,
  48. .mask = 0xfffff0,
  49. .features = PHY_GBIT_FEATURES,
  50. .config = ar8021_config,
  51. .startup = genphy_startup,
  52. .shutdown = genphy_shutdown,
  53. };
  54. static struct phy_driver AR8031_driver = {
  55. .name = "AR8031",
  56. .uid = 0x4dd074,
  57. .mask = 0xfffff0,
  58. .features = PHY_GBIT_FEATURES,
  59. .config = genphy_config,
  60. .startup = genphy_startup,
  61. .shutdown = genphy_shutdown,
  62. };
  63. static struct phy_driver AR8035_driver = {
  64. .name = "AR8035",
  65. .uid = 0x4dd072,
  66. .mask = 0x4fffff,
  67. .features = PHY_GBIT_FEATURES,
  68. .config = ar8035_config,
  69. .startup = genphy_startup,
  70. .shutdown = genphy_shutdown,
  71. };
  72. int phy_atheros_init(void)
  73. {
  74. phy_register(&AR8021_driver);
  75. phy_register(&AR8031_driver);
  76. phy_register(&AR8035_driver);
  77. return 0;
  78. }