diff --git a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c index 20b7a5cf1..29620f093 100644 --- a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c +++ b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -204,7 +205,8 @@ bool subghz_device_cc1101_ext_alloc() { &furi_hal_spi_bus_handle_external_extra); // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_cc1101_handle == SpiDefault) { + if(XTREME_SETTINGS()->spi_cc1101_handle == SpiDefault && + !furi_hal_subghz_get_ext_power_amp()) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); } else if(XTREME_SETTINGS()->spi_cc1101_handle == SpiExtra) { diff --git a/applications/main/subghz/scenes/subghz_scene_radio_settings.c b/applications/main/subghz/scenes/subghz_scene_radio_settings.c index 634090264..c1cd7d78a 100644 --- a/applications/main/subghz/scenes/subghz_scene_radio_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_radio_settings.c @@ -119,6 +119,7 @@ static void subghz_scene_reciever_config_set_ext_mod_power_amp_text(VariableItem if(index == 1) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); + furi_hal_gpio_write(&gpio_ext_pc3, 0); } else { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); } diff --git a/lib/subghz/devices/devices.c b/lib/subghz/devices/devices.c index 0316b7997..c2e555ccc 100644 --- a/lib/subghz/devices/devices.c +++ b/lib/subghz/devices/devices.c @@ -7,16 +7,6 @@ void subghz_devices_init() { furi_check(!subghz_device_registry_is_valid()); subghz_device_registry_init(); - - SubGhzLastSettings* last_settings = subghz_last_settings_alloc(); - subghz_last_settings_load(last_settings, 0); - - if(last_settings->external_module_power_amp) { - furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); - furi_hal_subghz_set_ext_power_amp(true); - } - - subghz_last_settings_free(last_settings); } void subghz_devices_deinit(void) { @@ -48,6 +38,16 @@ bool subghz_devices_begin(const SubGhzDevice* device) { if(device->interconnect->begin) { // TODO: Remake this check and move this code if(strcmp("cc1101_ext", device->name) == 0) { + SubGhzLastSettings* last_settings = subghz_last_settings_alloc(); + subghz_last_settings_load(last_settings, 0); + + if(last_settings->external_module_power_amp) { + furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); + furi_hal_subghz_set_ext_power_amp(true); + } + + subghz_last_settings_free(last_settings); + if(furi_hal_subghz_get_ext_power_amp()) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); }