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
13 #define RTL_8211F_PAGE_SELECT 0x1F
14 #define RTL_8211F_EEELCR_ADDR 0x11
15 #define RTL_8211F_LED_PAGE 0xD04
16 #define RTL_8211F_LCR_ADDR 0x10
17
phy_rtl8211f_led_fixup(ether_phy_instance_ctrl_t * phydev)18 static int phy_rtl8211f_led_fixup(ether_phy_instance_ctrl_t *phydev)
19 {
20 uint32_t val1, val2 = 0;
21
22 /* switch to led page */
23 R_ETHER_PHY_Write(phydev, RTL_8211F_PAGE_SELECT, RTL_8211F_LED_PAGE);
24
25 /* set led1(green) Link 10/100/1000M, and set led2(yellow) Link 10/100/1000M+Active */
26 R_ETHER_PHY_Read(phydev, RTL_8211F_LCR_ADDR, &val1);
27 val1 |= (1 << 5);
28 val1 |= (1 << 8);
29 val1 &= (~(1 << 9));
30 val1 |= (1 << 10);
31 val1 |= (1 << 11);
32 R_ETHER_PHY_Write(phydev, RTL_8211F_LCR_ADDR, val1);
33
34 /* set led1(green) EEE LED function disabled so it can keep on when linked */
35 R_ETHER_PHY_Read(phydev, RTL_8211F_EEELCR_ADDR, &val2);
36 val2 &= (~(1 << 2));
37 R_ETHER_PHY_Write(phydev, RTL_8211F_EEELCR_ADDR, val2);
38
39 /* switch back to page0 */
40 R_ETHER_PHY_Write(phydev, RTL_8211F_PAGE_SELECT, 0xa42);
41
42 return 0;
43 }
44
ether_phy_targets_initialize_rtl8211_rgmii(ether_phy_instance_ctrl_t * p_instance_ctrl)45 void ether_phy_targets_initialize_rtl8211_rgmii(ether_phy_instance_ctrl_t *p_instance_ctrl)
46 {
47 rt_thread_mdelay(100);
48 phy_rtl8211f_led_fixup(p_instance_ctrl);
49 }
50