diff options
Diffstat (limited to 'drivers/net/phy/micrel.c')
| -rw-r--r-- | drivers/net/phy/micrel.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index 6f52b4fb6888..38234d7e14c5 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -2679,16 +2679,19 @@ static int lan8804_config_init(struct phy_device *phydev)  static irqreturn_t lan8814_handle_interrupt(struct phy_device *phydev)  {  	int irq_status, tsu_irq_status; +	int ret = IRQ_NONE;  	irq_status = phy_read(phydev, LAN8814_INTS); -	if (irq_status > 0 && (irq_status & LAN8814_INT_LINK)) -		phy_trigger_machine(phydev); -  	if (irq_status < 0) {  		phy_error(phydev);  		return IRQ_NONE;  	} +	if (irq_status & LAN8814_INT_LINK) { +		phy_trigger_machine(phydev); +		ret = IRQ_HANDLED; +	} +  	while (1) {  		tsu_irq_status = lanphy_read_page_reg(phydev, 4,  						      LAN8814_INTR_STS_REG); @@ -2697,12 +2700,15 @@ static irqreturn_t lan8814_handle_interrupt(struct phy_device *phydev)  		    (tsu_irq_status & (LAN8814_INTR_STS_REG_1588_TSU0_ |  				       LAN8814_INTR_STS_REG_1588_TSU1_ |  				       LAN8814_INTR_STS_REG_1588_TSU2_ | -				       LAN8814_INTR_STS_REG_1588_TSU3_))) +				       LAN8814_INTR_STS_REG_1588_TSU3_))) {  			lan8814_handle_ptp_interrupt(phydev); -		else +			ret = IRQ_HANDLED; +		} else {  			break; +		}  	} -	return IRQ_HANDLED; + +	return ret;  }  static int lan8814_ack_interrupt(struct phy_device *phydev) | 
