@@ -723,30 +723,26 @@ static int phy_disable_interrupts(struct phy_device *phydev)
723
723
}
724
724
725
725
/**
726
- * phy_change - Called by the phy_interrupt to handle PHY changes
727
- * @phydev: phy_device struct that interrupted
726
+ * phy_interrupt - PHY interrupt handler
727
+ * @irq: interrupt line
728
+ * @phy_dat: phy_device pointer
729
+ *
730
+ * Description: Handle PHY interrupt
728
731
*/
729
- static irqreturn_t phy_change ( struct phy_device * phydev )
732
+ static irqreturn_t phy_interrupt ( int irq , void * phy_dat )
730
733
{
731
- if (phy_interrupt_is_valid (phydev )) {
732
- if (phydev -> drv -> did_interrupt &&
733
- !phydev -> drv -> did_interrupt (phydev ))
734
- return IRQ_NONE ;
735
-
736
- if (phydev -> state == PHY_HALTED )
737
- if (phy_disable_interrupts (phydev ))
738
- goto phy_err ;
739
- }
734
+ struct phy_device * phydev = phy_dat ;
740
735
741
- mutex_lock (& phydev -> lock );
742
- if ((PHY_RUNNING == phydev -> state ) || (PHY_NOLINK == phydev -> state ))
743
- phydev -> state = PHY_CHANGELINK ;
744
- mutex_unlock (& phydev -> lock );
736
+ if (PHY_HALTED == phydev -> state )
737
+ return IRQ_NONE ; /* It can't be ours. */
738
+
739
+ if (phydev -> drv -> did_interrupt && !phydev -> drv -> did_interrupt (phydev ))
740
+ return IRQ_NONE ;
745
741
746
742
/* reschedule state queue work to run as soon as possible */
747
743
phy_trigger_machine (phydev );
748
744
749
- if (phy_interrupt_is_valid ( phydev ) && phy_clear_interrupt (phydev ))
745
+ if (phy_clear_interrupt (phydev ))
750
746
goto phy_err ;
751
747
return IRQ_HANDLED ;
752
748
@@ -755,36 +751,6 @@ static irqreturn_t phy_change(struct phy_device *phydev)
755
751
return IRQ_NONE ;
756
752
}
757
753
758
- /**
759
- * phy_change_work - Scheduled by the phy_mac_interrupt to handle PHY changes
760
- * @work: work_struct that describes the work to be done
761
- */
762
- void phy_change_work (struct work_struct * work )
763
- {
764
- struct phy_device * phydev =
765
- container_of (work , struct phy_device , phy_queue );
766
-
767
- phy_change (phydev );
768
- }
769
-
770
- /**
771
- * phy_interrupt - PHY interrupt handler
772
- * @irq: interrupt line
773
- * @phy_dat: phy_device pointer
774
- *
775
- * Description: When a PHY interrupt occurs, the handler disables
776
- * interrupts, and uses phy_change to handle the interrupt.
777
- */
778
- static irqreturn_t phy_interrupt (int irq , void * phy_dat )
779
- {
780
- struct phy_device * phydev = phy_dat ;
781
-
782
- if (PHY_HALTED == phydev -> state )
783
- return IRQ_NONE ; /* It can't be ours. */
784
-
785
- return phy_change (phydev );
786
- }
787
-
788
754
/**
789
755
* phy_enable_interrupts - Enable the interrupts from the PHY side
790
756
* @phydev: target phy_device struct
@@ -863,7 +829,7 @@ void phy_stop(struct phy_device *phydev)
863
829
phy_state_machine (& phydev -> state_queue .work );
864
830
865
831
/* Cannot call flush_scheduled_work() here as desired because
866
- * of rtnl_lock(), but PHY_HALTED shall guarantee phy_change()
832
+ * of rtnl_lock(), but PHY_HALTED shall guarantee irq handler
867
833
* will not reenable interrupts.
868
834
*/
869
835
}
@@ -946,9 +912,6 @@ void phy_state_machine(struct work_struct *work)
946
912
break ;
947
913
case PHY_NOLINK :
948
914
case PHY_RUNNING :
949
- if (!phy_polling_mode (phydev ))
950
- break ;
951
- /* fall through */
952
915
case PHY_CHANGELINK :
953
916
case PHY_RESUMING :
954
917
err = phy_check_link_status (phydev );
@@ -1013,7 +976,7 @@ void phy_state_machine(struct work_struct *work)
1013
976
void phy_mac_interrupt (struct phy_device * phydev )
1014
977
{
1015
978
/* Trigger a state machine change */
1016
- queue_work ( system_power_efficient_wq , & phydev -> phy_queue );
979
+ phy_trigger_machine ( phydev );
1017
980
}
1018
981
EXPORT_SYMBOL (phy_mac_interrupt );
1019
982
0 commit comments