Setting PA/LNA pins on port 1 results in NRF_ERROR_INVALID_PARAM

SoftDevice: S113 v7.0.1

SDK: 15

Chip: nRF52840

It looks like setting PA/LNA pins on port 1 result in NRF_ERROR_INVALID_PARAM being returned by sd_ble_opt_set().
When PA/LNA pins are set on port 0, the problem does not exist.

I can't find such a constraint anywhere in the documentation. I need PA/LNA pins on port 1 because I use u-blox BMD-345 module.

Please advise.

My code:


void Amplifier_Init(uint32_t pa_pin, uint32_t lna_pin)
{
Amplifier.is_init = true;
Amplifier.pa_pin = pa_pin;
Amplifier.lna_pin = lna_pin;

nrf_gpio_cfg_output(Amplifier.pa_pin);
nrf_gpio_cfg_output(Amplifier.lna_pin);

uint32_t eep = (uint32_t)(&NRF_RADIO->EVENTS_READY);
uint32_t tep = nrf_gpiote_task_addr_get(AMPLIFIER_GPIOTE_SET_TASK);
nrf_ppi_channel_endpoint_setup(AMPLIFIER_PPI_SET_CHAN, eep, tep);
nrf_ppi_channel_enable(AMPLIFIER_PPI_SET_CHAN);

ble_opt_t opt;
memset(&opt, 0, sizeof(ble_opt_t));

opt.common_opt.pa_lna.gpiote_ch_id = AMPLIFIER_GPIOTE_IDX;
opt.common_opt.pa_lna.ppi_ch_id_clr = AMPLIFIER_PPI_SD_SET_CHAN;
opt.common_opt.pa_lna.ppi_ch_id_set = AMPLIFIER_PPI_SD_CLR_CHAN;
opt.common_opt.pa_lna.pa_cfg.active_high = 1;
opt.common_opt.pa_lna.pa_cfg.enable = 1;
opt.common_opt.pa_lna.pa_cfg.gpio_pin = pa_pin;
opt.common_opt.pa_lna.lna_cfg.active_high = 1;
opt.common_opt.pa_lna.lna_cfg.enable = 1;
opt.common_opt.pa_lna.lna_cfg.gpio_pin = lna_pin;

// FIXME: this fails with NRF_ERROR_INVALID_PARAM
uint32_t err_code = sd_ble_opt_set(BLE_COMMON_OPT_PA_LNA, &opt);
NRF_STATUS_CHECK(err_code);
}

------ // used #define constants
#define AMPLIFIER_GPIOTE_IDX 0
#define AMPLIFIER_GPIOTE_SET_TASK NRF_GPIOTE_TASKS_SET_0
#define AMPLIFIER_PPI_SD_SET_CHAN NRF_PPI_CHANNEL6
#define AMPLIFIER_PPI_SD_CLR_CHAN NRF_PPI_CHANNEL7
#define AMPLIFIER_PPI_SET_CHAN NRF_PPI_CHANNEL8

#define AMPLIFIER_PA_PIN_NUMBER NRF_GPIO_PIN_MAP(1, 5)
#define AMPLIFIER_LNA_PIN_NUMBER NRF_GPIO_PIN_MAP(1, 6)
Related