net: phy: remove the .did_interrupt() and .ack_interrupt() callback
Now that all the PHY drivers have been migrated to directly implement the generic .handle_interrupt() callback for a seamless support of shared IRQs and all the .config_inter() implementations clear any pending interrupts, we can safely remove the two callbacks. With this patch, phylib has a proper support for shared IRQs (and not just for multi-PHY devices. A PHY driver must implement both the .handle_interrupt() and .config_intr() callbacks for the IRQs to be actually used. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a1a4417458
commit
6527b93842
@ -113,23 +113,6 @@ void phy_print_status(struct phy_device *phydev)
|
||||
}
|
||||
EXPORT_SYMBOL(phy_print_status);
|
||||
|
||||
/**
|
||||
* phy_clear_interrupt - Ack the phy device's interrupt
|
||||
* @phydev: the phy_device struct
|
||||
*
|
||||
* If the @phydev driver has an ack_interrupt function, call it to
|
||||
* ack and clear the phy device's interrupt.
|
||||
*
|
||||
* Returns 0 on success or < 0 on error.
|
||||
*/
|
||||
static int phy_clear_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
if (phydev->drv->ack_interrupt)
|
||||
return phydev->drv->ack_interrupt(phydev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* phy_config_interrupt - configure the PHY device for the requested interrupts
|
||||
* @phydev: the phy_device struct
|
||||
@ -943,15 +926,8 @@ EXPORT_SYMBOL(phy_error);
|
||||
*/
|
||||
int phy_disable_interrupts(struct phy_device *phydev)
|
||||
{
|
||||
int err;
|
||||
|
||||
/* Disable PHY interrupts */
|
||||
err = phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Clear the interrupt */
|
||||
return phy_clear_interrupt(phydev);
|
||||
return phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -966,22 +942,7 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
|
||||
struct phy_device *phydev = phy_dat;
|
||||
struct phy_driver *drv = phydev->drv;
|
||||
|
||||
if (drv->handle_interrupt)
|
||||
return drv->handle_interrupt(phydev);
|
||||
|
||||
if (drv->did_interrupt && !drv->did_interrupt(phydev))
|
||||
return IRQ_NONE;
|
||||
|
||||
/* reschedule state queue work to run as soon as possible */
|
||||
phy_trigger_machine(phydev);
|
||||
|
||||
/* did_interrupt() may have cleared the interrupt already */
|
||||
if (!drv->did_interrupt && phy_clear_interrupt(phydev)) {
|
||||
phy_error(phydev);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
return drv->handle_interrupt(phydev);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -990,11 +951,6 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
|
||||
*/
|
||||
static int phy_enable_interrupts(struct phy_device *phydev)
|
||||
{
|
||||
int err = phy_clear_interrupt(phydev);
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED);
|
||||
}
|
||||
|
||||
|
@ -2826,7 +2826,7 @@ EXPORT_SYMBOL(phy_get_internal_delay);
|
||||
|
||||
static bool phy_drv_supports_irq(struct phy_driver *phydrv)
|
||||
{
|
||||
return phydrv->config_intr && (phydrv->ack_interrupt || phydrv->handle_interrupt);
|
||||
return phydrv->config_intr && phydrv->handle_interrupt;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -743,18 +743,11 @@ struct phy_driver {
|
||||
/** @read_status: Determines the negotiated speed and duplex */
|
||||
int (*read_status)(struct phy_device *phydev);
|
||||
|
||||
/** @ack_interrupt: Clears any pending interrupts */
|
||||
int (*ack_interrupt)(struct phy_device *phydev);
|
||||
|
||||
/** @config_intr: Enables or disables interrupts */
|
||||
int (*config_intr)(struct phy_device *phydev);
|
||||
|
||||
/**
|
||||
* @did_interrupt: Checks if the PHY generated an interrupt.
|
||||
* For multi-PHY devices with shared PHY interrupt pin
|
||||
* Set interrupt bits have to be cleared.
|
||||
/** @config_intr: Enables or disables interrupts.
|
||||
* It should also clear any pending interrupts prior to enabling the
|
||||
* IRQs and after disabling them.
|
||||
*/
|
||||
int (*did_interrupt)(struct phy_device *phydev);
|
||||
int (*config_intr)(struct phy_device *phydev);
|
||||
|
||||
/** @handle_interrupt: Override default interrupt handling */
|
||||
irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
|
||||
@ -1487,10 +1480,6 @@ static inline int genphy_config_aneg(struct phy_device *phydev)
|
||||
return __genphy_config_aneg(phydev, false);
|
||||
}
|
||||
|
||||
static inline int genphy_no_ack_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int genphy_no_config_intr(struct phy_device *phydev)
|
||||
{
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user