generic: add missing patch headers
[openwrt/staging/stintel.git] / target / linux / generic / pending-5.15 / 731-net-phy-realtek-support-interrupt-of-RTL8221B.patch
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
5
6 This commit introduces interrupt support for RTL8221B.
7
8 Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
9 ---
10 drivers/net/phy/realtek.c | 47 +++++++++++++++++++++++++++++++++++++++
11 1 file changed, 47 insertions(+)
12
13 --- a/drivers/net/phy/realtek.c
14 +++ b/drivers/net/phy/realtek.c
15 @@ -971,6 +971,51 @@ static int rtl8221b_config_init(struct p
16 return 0;
17 }
18
19 +static int rtl8221b_ack_interrupt(struct phy_device *phydev)
20 +{
21 + int err;
22 +
23 + err = phy_read_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d4);
24 +
25 + return (err < 0) ? err : 0;
26 +}
27 +
28 +static int rtl8221b_config_intr(struct phy_device *phydev)
29 +{
30 + int err;
31 +
32 + if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
33 + err = rtl8221b_ack_interrupt(phydev);
34 + if (err)
35 + return err;
36 +
37 + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x7ff);
38 + } else {
39 + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x0);
40 + if (err)
41 + return err;
42 +
43 + err = rtl8221b_ack_interrupt(phydev);
44 + }
45 +
46 + return err;
47 +}
48 +
49 +static irqreturn_t rtl8221b_handle_interrupt(struct phy_device *phydev)
50 +{
51 + int err;
52 +
53 + err = rtl8221b_ack_interrupt(phydev);
54 + if (err) {
55 + phy_error(phydev);
56 + return IRQ_NONE;
57 + }
58 +
59 + phy_trigger_machine(phydev);
60 +
61 + return IRQ_HANDLED;
62 +}
63 +
64 static struct phy_driver realtek_drvs[] = {
65 {
66 PHY_ID_MATCH_EXACT(0x00008201),
67 @@ -1119,6 +1164,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,