From bc07d91ccacd26833afd2793efe41f42e737aa0c Mon Sep 17 00:00:00 2001 From: Camille BAUD Date: Sat, 13 Dec 2025 01:08:12 +0100 Subject: [PATCH] drivers: lora: Add ability to force enable LDRO Allows Enabling LDRO all the time via DTS Signed-off-by: Camille BAUD --- drivers/lora/lora-basics-modem/lbm_common.c | 3 ++- drivers/lora/lora-basics-modem/lbm_common.h | 1 + drivers/lora/lora-basics-modem/lbm_sx126x.c | 1 + drivers/lora/lora-basics-modem/lbm_sx127x.c | 1 + dts/bindings/lora/semtech,sx126x-base.yaml | 6 ++++++ dts/bindings/lora/semtech,sx127x-base.yaml | 6 ++++++ 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/lora/lora-basics-modem/lbm_common.c b/drivers/lora/lora-basics-modem/lbm_common.c index 1bcdf6862fe..59402b66a27 100644 --- a/drivers/lora/lora-basics-modem/lbm_common.c +++ b/drivers/lora/lora-basics-modem/lbm_common.c @@ -81,7 +81,8 @@ int lbm_lora_config(const struct device *dev, struct lora_modem_config *lora_con .mod_params = { .sf = lora_config->datarate, .cr = lora_config->coding_rate, - .ldro = LORA_LDRO(lora_config->datarate, lora_config->bandwidth), + .ldro = config->force_ldro ? 1 : LORA_LDRO(lora_config->datarate, + lora_config->bandwidth), }, .pkt_params = { .preamble_len_in_symb = lora_config->preamble_len, diff --git a/drivers/lora/lora-basics-modem/lbm_common.h b/drivers/lora/lora-basics-modem/lbm_common.h index e78b500a5b8..ad13e58cb4d 100644 --- a/drivers/lora/lora-basics-modem/lbm_common.h +++ b/drivers/lora/lora-basics-modem/lbm_common.h @@ -34,6 +34,7 @@ enum lbm_modem_mode { struct lbm_lora_config_common { /* LBM radio abstration layer structure */ ralf_t ralf; + bool force_ldro; }; /* Common LBM modem data, must be first element of device data */ diff --git a/drivers/lora/lora-basics-modem/lbm_sx126x.c b/drivers/lora/lora-basics-modem/lbm_sx126x.c index ab71e64d16e..6be78584903 100644 --- a/drivers/lora/lora-basics-modem/lbm_sx126x.c +++ b/drivers/lora/lora-basics-modem/lbm_sx126x.c @@ -574,6 +574,7 @@ static int sx126x_init(const struct device *dev) #define SX126X_DEFINE(node_id, sx_variant) \ static const struct lbm_sx126x_config config_##node_id = { \ .lbm_common.ralf = RALF_SX126X_INSTANTIATE(DEVICE_DT_GET(node_id)), \ + .lbm_common.force_ldro = DT_PROP(node_id, force_ldro), \ .spi = SPI_DT_SPEC_GET( \ node_id, SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB), \ .reset = GPIO_DT_SPEC_GET(node_id, reset_gpios), \ diff --git a/drivers/lora/lora-basics-modem/lbm_sx127x.c b/drivers/lora/lora-basics-modem/lbm_sx127x.c index 7a62c1709ed..75fc8f72a21 100644 --- a/drivers/lora/lora-basics-modem/lbm_sx127x.c +++ b/drivers/lora/lora-basics-modem/lbm_sx127x.c @@ -467,6 +467,7 @@ static int sx127x_driver_init(const struct device *dev) static struct lbm_sx127x_data data_##node_id; \ static const struct lbm_sx127x_config config_##node_id = { \ .lbm_common.ralf = RALF_SX127X_INSTANTIATE(&data_##node_id.radio), \ + .lbm_common.force_ldro = DT_PROP(node_id, force_ldro), \ .spi = SPI_DT_SPEC_GET( \ node_id, SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB), \ .reset = GPIO_DT_SPEC_GET(node_id, reset_gpios), \ diff --git a/dts/bindings/lora/semtech,sx126x-base.yaml b/dts/bindings/lora/semtech,sx126x-base.yaml index 72143f2564f..2d13d758695 100644 --- a/dts/bindings/lora/semtech,sx126x-base.yaml +++ b/dts/bindings/lora/semtech,sx126x-base.yaml @@ -70,3 +70,9 @@ properties: type: boolean description: | Use the internal LDO instead of the internal DCDC. Increases power consumption. + + force-ldro: + type: boolean + description: | + Force usage of Low Data Rate Optimization even in cases where the symbol time is shorter than + 16.38ms. Useful for designs using no TCXO or with bad heat dissipation. diff --git a/dts/bindings/lora/semtech,sx127x-base.yaml b/dts/bindings/lora/semtech,sx127x-base.yaml index 6a7b92f4b27..aca0cb79292 100644 --- a/dts/bindings/lora/semtech,sx127x-base.yaml +++ b/dts/bindings/lora/semtech,sx127x-base.yaml @@ -61,3 +61,9 @@ properties: type: int description: | Delay which has to be applied after enabling TCXO power. + + force-ldro: + type: boolean + description: | + Force usage of Low Data Rate Optimization even in cases where the symbol time is shorter than + 16.38ms. Useful for designs using no TCXO or with bad heat dissipation.