rtl8211f_init.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2006-2025, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2025-02-11 Rbb666 the first version
  9. */
  10. #include <hal_data.h>
  11. #include <rtthread.h>
  12. #define RTL_8211F_PAGE_SELECT 0x1F
  13. #define RTL_8211F_EEELCR_ADDR 0x11
  14. #define RTL_8211F_LED_PAGE 0xD04
  15. #define RTL_8211F_LCR_ADDR 0x10
  16. static int phy_rtl8211f_led_fixup(ether_phy_instance_ctrl_t *phydev)
  17. {
  18. uint32_t val1, val2 = 0;
  19. /* switch to led page */
  20. R_ETHER_PHY_Write(phydev, RTL_8211F_PAGE_SELECT, RTL_8211F_LED_PAGE);
  21. /* set led1(green) Link 10/100/1000M, and set led2(yellow) Link 10/100/1000M+Active */
  22. R_ETHER_PHY_Read(phydev, RTL_8211F_LCR_ADDR, &val1);
  23. val1 |= (1 << 5);
  24. val1 |= (1 << 8);
  25. val1 &= (~(1 << 9));
  26. val1 |= (1 << 10);
  27. val1 |= (1 << 11);
  28. R_ETHER_PHY_Write(phydev, RTL_8211F_LCR_ADDR, val1);
  29. /* set led1(green) EEE LED function disabled so it can keep on when linked */
  30. R_ETHER_PHY_Read(phydev, RTL_8211F_EEELCR_ADDR, &val2);
  31. val2 &= (~(1 << 2));
  32. R_ETHER_PHY_Write(phydev, RTL_8211F_EEELCR_ADDR, val2);
  33. /* switch back to page0 */
  34. R_ETHER_PHY_Write(phydev, RTL_8211F_PAGE_SELECT, 0xa42);
  35. return 0;
  36. }
  37. void ether_phy_targets_initialize_rtl8211_rgmii(ether_phy_instance_ctrl_t *p_instance_ctrl)
  38. {
  39. rt_thread_mdelay(100);
  40. phy_rtl8211f_led_fixup(p_instance_ctrl);
  41. }