diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index 4dbd5a9b99..9214f7a7b8 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -177,6 +177,7 @@ bool EnginePins::stopPins() { void EnginePins::unregisterPins() { stopInjectionPins(); stopIgnitionPins(); + stopAuxValves(); #if EFI_ELECTRONIC_THROTTLE_BODY unregisterEtbPins(); @@ -247,11 +248,26 @@ void EnginePins::stopInjectionPins(void) { #endif /* EFI_PROD_CODE */ } +void EnginePins::stopAuxValves(void) { +#if EFI_PROD_CODE + for (int i = 0; i < AUX_DIGITAL_VALVE_COUNT; i++) { + NamedOutputPin *output = &enginePins.auxValve[i]; + // todo: do we need auxValveMode and reuse code? + if (isConfigurationChanged(auxValves[i])) { + (output)->deInit(); + } + } +#endif /* EFI_PROD_CODE */ +} + void EnginePins::startAuxValves(void) { #if EFI_PROD_CODE for (int i = 0; i < AUX_DIGITAL_VALVE_COUNT; i++) { NamedOutputPin *output = &enginePins.auxValve[i]; - output->initPin(output->name, engineConfiguration->auxValves[i]); + // todo: do we need auxValveMode and reuse code? + if (isConfigurationChanged(auxValves[i])) { + output->initPin(output->name, engineConfiguration->auxValves[i]); + } } #endif /* EFI_PROD_CODE */ } diff --git a/firmware/controllers/system/efi_gpio.h b/firmware/controllers/system/efi_gpio.h index 181186e707..f07cbe78f4 100644 --- a/firmware/controllers/system/efi_gpio.h +++ b/firmware/controllers/system/efi_gpio.h @@ -216,6 +216,7 @@ private: void stopInjectionPins(); void stopIgnitionPins(); + void stopAuxValves(); }; #endif /* __cplusplus */ diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 2611b2fa1a..74b864b53a 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -351,7 +351,7 @@ void applyNewHardwareSettings(void) { #endif /* EFI_EMULATE_POSITION_SENSORS */ #if EFI_AUX_PID - stopAuxPins(); + stopVvtControlPins(); #endif /* EFI_AUX_PID */ if (isConfigurationChanged(is_enabled_spi_1)) {