Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49644e68 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller
Browse files

net: phy: add callback for custom interrupt handler to struct phy_driver



The phylib interrupt handler handles link change events only currently.
However PHY drivers may want to use other interrupt sources too,
e.g. to report temperature monitoring events. Therefore add a callback
to struct phy_driver allowing PHY drivers to implement a custom
interrupt handler.

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Suggested-by: default avatarRussell King - ARM Linux admin <linux@armlinux.org.uk>
Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 07b09289
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -772,8 +772,13 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
	if (phydev->drv->did_interrupt && !phydev->drv->did_interrupt(phydev))
		return IRQ_NONE;

	if (phydev->drv->handle_interrupt) {
		if (phydev->drv->handle_interrupt(phydev))
			goto phy_err;
	} else {
		/* reschedule state queue work to run as soon as possible */
		phy_trigger_machine(phydev);
	}

	if (phy_clear_interrupt(phydev))
		goto phy_err;
+3 −0
Original line number Diff line number Diff line
@@ -537,6 +537,9 @@ struct phy_driver {
	 */
	int (*did_interrupt)(struct phy_device *phydev);

	/* Override default interrupt handling */
	int (*handle_interrupt)(struct phy_device *phydev);

	/* Clears up any memory if needed */
	void (*remove)(struct phy_device *phydev);