Hi Paul
Which board are you using and are you using a PHY interrupt or polling?
The KSZ8081 is used with the FRDM-K64F in pollling mode (since there is no interrupt line connected) and I don't have problems detecting link up and link down.
The reason for this is the following code in the if (PHY_LINK_STATE_CHANGE & usInterrupt) { block:
#if (defined _DP83849I || defined _KSZ8081RNA) && defined INTERRUPT_TASK_PHY // {52}{84}
default: // link has gone down
int_phy_message[MSG_INTERRUPT_EVENT] = LAN_LINK_DOWN;
break;
#endif
where the change {84} was added on
02.06.2014 Add _KSZ8081RNA status register settings {84}
Prior to this I agree that the link down case would never be caught when #define PHY_LINK_STATE_CHANGE (PHY_LINK_UP_INT | PHY_LINK_DOWN_INT) is used.
In any case, I think that your modification is also correct - it is used by boards that have the KS8041, whereby probably both methods lead to the same result.
Best regards
Mark