123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- From d7943c31d57c11e1a517aa3ce2006fca44866870 Mon Sep 17 00:00:00 2001
- From: Jianhui Zhao <[email protected]>
- Date: Sun, 24 Sep 2023 22:15:00 +0800
- Subject: [PATCH] net: phy: realtek: add interrupt support for RTL8221B
- This commit introduces interrupt support for RTL8221B.
- Signed-off-by: Jianhui Zhao <[email protected]>
- ---
- drivers/net/phy/realtek.c | 47 +++++++++++++++++++++++++++++++++++++++
- 1 file changed, 47 insertions(+)
- --- a/drivers/net/phy/realtek.c
- +++ b/drivers/net/phy/realtek.c
- @@ -1026,6 +1026,51 @@ static int rtl8221b_config_init(struct p
- return 0;
- }
-
- +static int rtl8221b_ack_interrupt(struct phy_device *phydev)
- +{
- + int err;
- +
- + err = phy_read_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d4);
- +
- + return (err < 0) ? err : 0;
- +}
- +
- +static int rtl8221b_config_intr(struct phy_device *phydev)
- +{
- + int err;
- +
- + if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
- + err = rtl8221b_ack_interrupt(phydev);
- + if (err)
- + return err;
- +
- + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x7ff);
- + } else {
- + err = phy_write_mmd(phydev, RTL8221B_MMD_PHY_CTRL, 0xa4d2, 0x0);
- + if (err)
- + return err;
- +
- + err = rtl8221b_ack_interrupt(phydev);
- + }
- +
- + return err;
- +}
- +
- +static irqreturn_t rtl8221b_handle_interrupt(struct phy_device *phydev)
- +{
- + int err;
- +
- + err = rtl8221b_ack_interrupt(phydev);
- + if (err) {
- + phy_error(phydev);
- + return IRQ_NONE;
- + }
- +
- + phy_trigger_machine(phydev);
- +
- + return IRQ_HANDLED;
- +}
- +
- static struct phy_driver realtek_drvs[] = {
- {
- PHY_ID_MATCH_EXACT(0x00008201),
- @@ -1188,6 +1233,8 @@ static struct phy_driver realtek_drvs[]
- .get_features = rtl822x_get_features,
- .config_init = rtl8221b_config_init,
- .config_aneg = rtl822x_config_aneg,
- + .config_intr = rtl8221b_config_intr,
- + .handle_interrupt = rtl8221b_handle_interrupt,
- .probe = rtl822x_probe,
- .read_status = rtl822x_read_status,
- .suspend = genphy_suspend,
|