drivers: lora: sx1276: support antenna power enable
RF SPDT switches used for RX/TX selection have often power enable pin connected to MCU's GPIO, so it is possible to disable it to save power when not doing any data transfers. Add 'antenna-enable-gpios' property to support such designs. Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
This commit is contained in:
parent
35328cc537
commit
af67b297a3
2 changed files with 40 additions and 0 deletions
|
@ -24,6 +24,11 @@ LOG_MODULE_REGISTER(sx1276);
|
||||||
#define GPIO_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios)
|
#define GPIO_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios)
|
||||||
#define GPIO_CS_PIN DT_INST_SPI_DEV_CS_GPIOS_PIN(0)
|
#define GPIO_CS_PIN DT_INST_SPI_DEV_CS_GPIOS_PIN(0)
|
||||||
|
|
||||||
|
#define GPIO_ANTENNA_ENABLE_PIN \
|
||||||
|
DT_INST_GPIO_PIN(0, antenna_enable_gpios)
|
||||||
|
#define GPIO_ANTENNA_ENABLE_FLAGS \
|
||||||
|
DT_INST_GPIO_FLAGS(0, antenna_enable_gpios)
|
||||||
|
|
||||||
#define GPIO_RFI_ENABLE_PIN \
|
#define GPIO_RFI_ENABLE_PIN \
|
||||||
DT_INST_GPIO_PIN(0, rfi_enable_gpios)
|
DT_INST_GPIO_PIN(0, rfi_enable_gpios)
|
||||||
#define GPIO_RFI_ENABLE_FLAGS \
|
#define GPIO_RFI_ENABLE_FLAGS \
|
||||||
|
@ -103,6 +108,9 @@ static const struct sx1276_dio sx1276_dios[] = { SX1276_DIO_GPIO_INIT(0) };
|
||||||
|
|
||||||
static struct sx1276_data {
|
static struct sx1276_data {
|
||||||
struct device *reset;
|
struct device *reset;
|
||||||
|
#if DT_INST_NODE_HAS_PROP(0, antenna_enable_gpios)
|
||||||
|
struct device *antenna_enable;
|
||||||
|
#endif
|
||||||
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
||||||
struct device *rfi_enable;
|
struct device *rfi_enable;
|
||||||
#endif
|
#endif
|
||||||
|
@ -143,6 +151,13 @@ bool SX1276CheckRfFrequency(uint32_t frequency)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void sx1276_antenna_enable(int val)
|
||||||
|
{
|
||||||
|
#if DT_INST_NODE_HAS_PROP(0, antenna_enable_gpios)
|
||||||
|
gpio_pin_set(dev_data.antenna_enable, GPIO_ANTENNA_ENABLE_PIN, val);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static inline void sx1276_rfi_enable(int val)
|
static inline void sx1276_rfi_enable(int val)
|
||||||
{
|
{
|
||||||
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
||||||
|
@ -172,7 +187,11 @@ void SX1276SetAntSwLowPower(bool low_power)
|
||||||
sx1276_rfi_enable(0);
|
sx1276_rfi_enable(0);
|
||||||
sx1276_rfo_enable(0);
|
sx1276_rfo_enable(0);
|
||||||
sx1276_pa_boost_enable(0);
|
sx1276_pa_boost_enable(0);
|
||||||
|
|
||||||
|
sx1276_antenna_enable(0);
|
||||||
} else {
|
} else {
|
||||||
|
sx1276_antenna_enable(1);
|
||||||
|
|
||||||
/* rely on SX1276SetAntSw() to configure proper antenna path */
|
/* rely on SX1276SetAntSw() to configure proper antenna path */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -443,6 +462,21 @@ static int sx1276_antenna_configure(void)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
#if DT_INST_NODE_HAS_PROP(0, antenna_enable_gpios)
|
||||||
|
dev_data.antenna_enable = device_get_binding(
|
||||||
|
DT_INST_GPIO_LABEL(0, antenna_enable_gpios));
|
||||||
|
if (!dev_data.antenna_enable) {
|
||||||
|
LOG_ERR("Cannot get pointer to %s device",
|
||||||
|
DT_INST_GPIO_LABEL(0, antenna_enable_gpios));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = gpio_pin_configure(dev_data.antenna_enable,
|
||||||
|
GPIO_ANTENNA_ENABLE_PIN,
|
||||||
|
GPIO_OUTPUT_INACTIVE |
|
||||||
|
GPIO_ANTENNA_ENABLE_FLAGS);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
#if DT_INST_NODE_HAS_PROP(0, rfi_enable_gpios)
|
||||||
dev_data.rfi_enable = device_get_binding(
|
dev_data.rfi_enable = device_get_binding(
|
||||||
DT_INST_GPIO_LABEL(0, rfi_enable_gpios));
|
DT_INST_GPIO_LABEL(0, rfi_enable_gpios));
|
||||||
|
|
|
@ -37,6 +37,12 @@ properties:
|
||||||
- "rfo"
|
- "rfo"
|
||||||
- "pa-boost"
|
- "pa-boost"
|
||||||
|
|
||||||
|
antenna-enable-gpios:
|
||||||
|
type: phandle-array
|
||||||
|
required: false
|
||||||
|
description: |
|
||||||
|
Antenna power enable pin.
|
||||||
|
|
||||||
rfi-enable-gpios:
|
rfi-enable-gpios:
|
||||||
type: phandle-array
|
type: phandle-array
|
||||||
required: false
|
required: false
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue