@@ -596,7 +596,9 @@ void OutputMonitor::RemovePortConfiguration(int port, const Json::Value& config)
596596 // fusePins is keyed by the interrupt pin's name -- erasing it here
597597 // is what lets a later AddPortConfiguration re-register the
598598 // callback; leaving it behind means fuse trips are silently
599- // ignored after a config reload.
599+ // ignored after a config reload. getPinByName() matches on name
600+ // exactly (there are no aliases), so the name here is the same
601+ // string the add side keyed on.
600602 bool sharedInterrupt = false ;
601603 for (auto other : portPins) {
602604 if (other && other != pi && other->eFuseInterruptPin == pi->eFuseInterruptPin ) {
@@ -665,9 +667,14 @@ void OutputMonitor::AddPortConfiguration(int port, const Json::Value& pinConfig,
665667 if (pinConfig.isMember (" eFusePin" )) {
666668 if (pinConfig.isMember (" eFuseInterruptPin" )) {
667669 std::string eFuseInterruptPin = pinConfig.get (" eFuseInterruptPin" , " " ).asString ();
668- bool eFuseInterruptHigh = false ;
670+ // A leading '!' is stripped but carries no meaning here, and there
671+ // is deliberately no inverted-interrupt flag to go with it: the
672+ // callback below ignores the edge value it is handed and re-reads
673+ // every affected port's eFusePin, so which edge announced the trip
674+ // cannot change the outcome. (The pin is registered for BOTH edges
675+ // anyway -- some i2c expanders mislabel a single-edge request -- so
676+ // a polarity flag would have nothing to act on.)
669677 if (eFuseInterruptPin[0 ] == ' !' ) {
670- eFuseInterruptHigh = true ;
671678 eFuseInterruptPin = eFuseInterruptPin.substr (1 );
672679 }
673680 std::string postFix = " " ;
0 commit comments