chry_phy_jl1111.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2024, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "chry_phy.h"
  7. void jl1111_phy_init(struct chry_phy_device *phydev, struct chry_phy_config *config)
  8. {
  9. }
  10. void jl1111_phy_get_status(struct chry_phy_device *phydev, struct chry_phy_status *status)
  11. {
  12. uint16_t regval;
  13. regval = phydev->mdio_read(phydev, phydev->phy_addr, MII_BMSR);
  14. status->link = regval & BMSR_LINKSTATUS;
  15. if (status->link) {
  16. regval = phydev->mdio_read(phydev, phydev->phy_addr, MII_ANAR) & phydev->mdio_read(phydev, phydev->phy_addr, MII_ANLPAR);
  17. if (regval & ANAR_100HALF) {
  18. if (regval & ANAR_100FULL) {
  19. status->speed = 100;
  20. status->duplex = true;
  21. } else {
  22. status->speed = 100;
  23. status->duplex = false;
  24. }
  25. } else if (regval & ANAR_10HALF) {
  26. if (regval & ANAR_10FULL) {
  27. status->speed = 10;
  28. status->duplex = true;
  29. } else {
  30. status->speed = 10;
  31. status->duplex = false;
  32. }
  33. }
  34. }
  35. }
  36. const struct chry_phy_driver jl1111_driver = {
  37. .phy_id = 0x937C4020,
  38. .phy_id_mask = 0xFFFFFFF0,
  39. .phy_name = "JL1111",
  40. .phy_desc = "JLSemi JL1111 Ethernet PHY",
  41. .phy_init = jl1111_phy_init,
  42. .phy_get_status = jl1111_phy_get_status,
  43. };