diff --git a/src/shared/radio/SX1278/SX1278Defs.h b/src/shared/radio/SX1278/SX1278Defs.h
index d19874b1b209234fbf1597baaa4c328e733baaf3..28dae0016b114e49f987f453cab964844ac98fc3 100644
--- a/src/shared/radio/SX1278/SX1278Defs.h
+++ b/src/shared/radio/SX1278/SX1278Defs.h
@@ -54,9 +54,6 @@ inline SPIBusConfig getSpiBusConfig(SPI::ClockDivider clock_divider)
     return bus_config;
 }
 
-constexpr int MIN_BITRATE = FXOSC / 0xffff;
-constexpr int MAX_BITRATE = FXOSC;
-
 constexpr int MIN_FREQ_DEV = 0;
 constexpr int MAX_FREQ_DEV = 0x3fff * FSTEP;
 
diff --git a/src/shared/radio/SX1278/SX1278Fsk.cpp b/src/shared/radio/SX1278/SX1278Fsk.cpp
index 49878b1a3e4f473566ed4eec877cc00c84628068..75701ded057e6d67f32406cb6e67d08d7e10032f 100644
--- a/src/shared/radio/SX1278/SX1278Fsk.cpp
+++ b/src/shared/radio/SX1278/SX1278Fsk.cpp
@@ -80,8 +80,6 @@ SX1278Fsk::Error SX1278Fsk::configure(const Config &config)
     assert(((config.ocp >= 0 && config.ocp <= 120) ||
             (config.ocp >= 130 && config.ocp <= 240)) &&
            "[sx1278] Invalid ocp!");
-    assert(config.bitrate >= MIN_BITRATE && config.bitrate <= MAX_BITRATE &&
-           "[sx1278] Invalid bitrate!");
     assert(config.freq_dev >= MIN_FREQ_DEV && config.freq_dev <= MAX_FREQ_DEV &&
            "[sx1278] Invalid freq_dev!");
     assert(config.freq_rf >= MIN_FREQ_RF && config.freq_rf <= MAX_FREQ_RF &&
@@ -105,7 +103,7 @@ SX1278Fsk::Error SX1278Fsk::configure(const Config &config)
     // if (!waitForIrqBusy(guard_mode, RegIrqFlags::MODE_READY, 0, 1000))
     //     return Error::IRQ_TIMEOUT;
 
-    int bitrate = std::max(std::min(config.bitrate, MAX_BITRATE), MIN_BITRATE);
+    int bitrate = config.bitrate;
     int freq_dev =
         std::max(std::min(config.freq_dev, MAX_FREQ_DEV), MIN_FREQ_DEV);
     int freq_rf = std::max(std::min(config.freq_rf, MAX_FREQ_RF), MIN_FREQ_RF);
diff --git a/src/shared/radio/SX1278/SX1278Lora.cpp b/src/shared/radio/SX1278/SX1278Lora.cpp
index 43e5ab18861fc1f42d0f863cea842e02bb060015..6062b50b231dbd2437207dbedd5a04c19fb04db4 100644
--- a/src/shared/radio/SX1278/SX1278Lora.cpp
+++ b/src/shared/radio/SX1278/SX1278Lora.cpp
@@ -159,6 +159,19 @@ bool SX1278Lora::checkVersion()
 
 SX1278Lora::Error SX1278Lora::configure(const Config &config)
 {
+    // Check that the configuration is actually valid
+    bool pa_boost = getFrontend().isOnPaBoost();
+    int min_power = pa_boost ? 2 : 0;
+    int max_power = getFrontend().maxInPower();
+
+    assert(config.power >= min_power && config.power <= max_power &&
+           "[sx1278] Configured power invalid for given frontend!");
+    assert(((config.ocp >= 0 && config.ocp <= 120) ||
+            (config.ocp >= 130 && config.ocp <= 240)) &&
+           "[sx1278] Invalid ocp!");
+    assert(config.freq_rf >= MIN_FREQ_RF && config.freq_rf <= MAX_FREQ_RF &&
+           "[sx1278] Invalid freq_rf");
+
     // First make sure the device is in lora mode and in standby
     enterLoraMode();
 
@@ -177,10 +190,10 @@ SX1278Lora::Error SX1278Lora::configure(const Config &config)
     RegModemConfig2::Sf sf =
         static_cast<RegModemConfig2::Sf>(config.spreading_factor);
 
-    int freq_rf   = config.freq_rf;
-    int ocp       = config.ocp;
-    int power     = std::min(config.power, getFrontend().maxInPower());
-    bool pa_boost = getFrontend().isOnPaBoost();
+    int freq_rf = std::max(std::min(config.freq_rf, MAX_FREQ_RF), MIN_FREQ_RF);
+    int ocp     = config.ocp <= 120 ? std::max(std::min(config.ocp, 120), 0)
+                                    : std::max(std::min(config.ocp, 240), 130);
+    int power   = std::max(std::min(config.power, max_power), min_power);
 
     bool low_data_rate_optimize = config.low_data_rate_optimize;