1 From d7943c31d57c11e1a517aa3ce2006fca44866870 Mon Sep 17 00:00:00 2001
2 From: Jianhui Zhao <zhaojh329@gmail.com>
3 Date: Sun, 24 Sep 2023 22:15:00 +0800
4 Subject: [PATCH] net: phy: realtek: add interrupt support for RTL8221B
6 This commit introduces interrupt support for RTL8221B.
8 Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
10 drivers/net/phy/realtek.c | 47 +++++++++++++++++++++++++++++++++++++++
11 1 file changed, 47 insertions(+)
13 --- a/drivers/net/phy/realtek.c
14 +++ b/drivers/net/phy/realtek.c
15 @@ -981,6 +981,51 @@ static int rtl8221b_config_init(struct p
19 +static int rtl8221b_ack_interrupt(struct phy_device *phydev)
23 + err = phy_read_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d4);
25 + return (err < 0) ? err : 0;
28 +static int rtl8221b_config_intr(struct phy_device *phydev)
32 + if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
33 + err = rtl8221b_ack_interrupt(phydev);
37 + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x7ff);
39 + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x0);
43 + err = rtl8221b_ack_interrupt(phydev);
49 +static irqreturn_t rtl8221b_handle_interrupt(struct phy_device *phydev)
53 + err = rtl8221b_ack_interrupt(phydev);
59 + phy_trigger_machine(phydev);
64 static struct phy_driver realtek_drvs[] = {
66 PHY_ID_MATCH_EXACT(0x00008201),
67 @@ -1141,6 +1186,8 @@ static struct phy_driver realtek_drvs[]
68 .get_features = rtl822x_get_features,
69 .config_init = rtl8221b_config_init,
70 .config_aneg = rtl822x_config_aneg,
71 + .config_intr = rtl8221b_config_intr,
72 + .handle_interrupt = rtl8221b_handle_interrupt,
73 .probe = rtl822x_probe,
74 .read_status = rtl822x_read_status,
75 .suspend = genphy_suspend,