From 21ff8221cb5af58bef6767995bf3cb1f6f6432ee Mon Sep 17 00:00:00 2001 From: Chaitanya Tata Date: Tue, 17 Jun 2025 22:01:04 +0530 Subject: [PATCH 1/4] modules: nrf_wifi: Improve power down sequence Swap the order, IOVDD should be powered first and then BUCKEN. Signed-off-by: Chaitanya Tata --- modules/nrf_wifi/bus/rpu_hw_if.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/nrf_wifi/bus/rpu_hw_if.c b/modules/nrf_wifi/bus/rpu_hw_if.c index 5dd71a86de2b1..62291251fb782 100644 --- a/modules/nrf_wifi/bus/rpu_hw_if.c +++ b/modules/nrf_wifi/bus/rpu_hw_if.c @@ -260,15 +260,15 @@ static int rpu_pwroff(void) { int ret; - ret = gpio_pin_set_dt(&bucken_spec, 0); /* BUCKEN = 0 */ + ret = gpio_pin_set_dt(&iovdd_ctrl_spec, 0); /* IOVDD CNTRL = 0 */ if (ret) { - LOG_ERR("BUCKEN GPIO set failed..."); + LOG_ERR("IOVDD GPIO set failed..."); return ret; } - ret = gpio_pin_set_dt(&iovdd_ctrl_spec, 0); /* IOVDD CNTRL = 0 */ + ret = gpio_pin_set_dt(&bucken_spec, 0); /* BUCKEN = 0 */ if (ret) { - LOG_ERR("IOVDD GPIO set failed..."); + LOG_ERR("BUCKEN GPIO set failed..."); return ret; } From 2c4c616f2a1daf080d04b39385aabc5f3531093c Mon Sep 17 00:00:00 2001 From: Chaitanya Tata Date: Tue, 17 Jun 2025 22:06:06 +0530 Subject: [PATCH 2/4] modules: nrf_wifi: Remove co-ex GPIOs first Before powering off remove co-ex GPIOs. Signed-off-by: Chaitanya Tata --- modules/nrf_wifi/bus/rpu_hw_if.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/nrf_wifi/bus/rpu_hw_if.c b/modules/nrf_wifi/bus/rpu_hw_if.c index 62291251fb782..39525211486b5 100644 --- a/modules/nrf_wifi/bus/rpu_hw_if.c +++ b/modules/nrf_wifi/bus/rpu_hw_if.c @@ -503,21 +503,23 @@ int rpu_disable(void) { int ret; - ret = rpu_pwroff(); + #ifdef CONFIG_NRF70_SR_COEX_RF_SWITCH + ret = sr_gpio_remove(); if (ret) { goto out; } - ret = rpu_gpio_remove(); +#endif + + ret = rpu_pwroff(); if (ret) { goto out; } - -#ifdef CONFIG_NRF70_SR_COEX_RF_SWITCH - ret = sr_gpio_remove(); + ret = rpu_gpio_remove(); if (ret) { goto out; } -#endif + + qdev = NULL; cfg = NULL; From 9bccce100e9dfda30fc76c39a6d006dd8a3c8950 Mon Sep 17 00:00:00 2001 From: Chaitanya Tata Date: Tue, 17 Jun 2025 22:12:13 +0530 Subject: [PATCH 3/4] modules: nrf_wifi: Implement QSPI deinit By default QSPI is uninitialized after every transaction, so, deinit is a no-op, but if QSPI_LOW_POWER is disabled, then we need to uninitialize the QSPI in the deinit. Signed-off-by: Chaitanya Tata --- modules/nrf_wifi/bus/qspi_if.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/modules/nrf_wifi/bus/qspi_if.c b/modules/nrf_wifi/bus/qspi_if.c index 6107a5c4157ff..ad0534a95a373 100644 --- a/modules/nrf_wifi/bus/qspi_if.c +++ b/modules/nrf_wifi/bus/qspi_if.c @@ -528,14 +528,10 @@ static int qspi_device_init(const struct device *dev) return ret; } -static void qspi_device_uninit(const struct device *dev) +static void _qspi_device_uninit(const struct device *dev) { bool last = true; - if (!IS_ENABLED(CONFIG_NRF70_QSPI_LOW_POWER)) { - return; - } - qspi_lock(dev); #ifdef CONFIG_MULTITHREADING @@ -568,6 +564,15 @@ static void qspi_device_uninit(const struct device *dev) qspi_unlock(dev); } +static void qspi_device_uninit(const struct device *dev) +{ + if (!IS_ENABLED(CONFIG_NRF70_QSPI_LOW_POWER)) { + return; + } + + _qspi_device_uninit(dev); +} + /* QSPI send custom command. * * If this is used for both send and receive the buffer sizes must be @@ -1191,7 +1196,7 @@ struct device qspi_perip = { int qspi_deinit(void) { - LOG_DBG("TODO : %s", __func__); + _qspi_device_uninit(&qspi_perip); return 0; } From 0101617d34883ab9f7cb081519d9b2a50cd40894 Mon Sep 17 00:00:00 2001 From: Chaitanya Tata Date: Tue, 17 Jun 2025 22:17:11 +0530 Subject: [PATCH 4/4] modules: nrf_wifi: Implement SPI deinit Release the SPI during the deinit to put respective GPIOs in low-power state or disconnected. Signed-off-by: Chaitanya Tata --- modules/nrf_wifi/bus/spi_if.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/nrf_wifi/bus/spi_if.c b/modules/nrf_wifi/bus/spi_if.c index 7ef1694da58b9..641e1322899f4 100644 --- a/modules/nrf_wifi/bus/spi_if.c +++ b/modules/nrf_wifi/bus/spi_if.c @@ -263,9 +263,7 @@ int spim_init(struct qspi_config *config) int spim_deinit(void) { - LOG_DBG("TODO : %s", __func__); - - return 0; + return spi_release_dt(&spi_spec); } static void spim_addr_check(unsigned int addr, const void *data, unsigned int len)