diff --git a/boards/arm/cxd56xx/common/src/cxd56_gs2200m.c b/boards/arm/cxd56xx/common/src/cxd56_gs2200m.c index 64845da1bc6..691c2d64646 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_gs2200m.c +++ b/boards/arm/cxd56xx/common/src/cxd56_gs2200m.c @@ -62,6 +62,7 @@ static int gs2200m_irq_attach(xcpt_t, FAR void *); static void gs2200m_irq_enable(void); static void gs2200m_irq_disable(void); static uint32_t gs2200m_dready(int *); +static void gs2200m_reset(bool); /**************************************************************************** * Private Data @@ -73,6 +74,7 @@ static const struct gs2200m_lower_s g_wifi_lower = .enable = gs2200m_irq_enable, .disable = gs2200m_irq_disable, .dready = gs2200m_dready, + .reset = gs2200m_reset }; static FAR void *g_devhandle = NULL; @@ -144,7 +146,7 @@ static void gs2200m_irq_disable(void) } /**************************************************************************** - * Name: gs2200m_disable + * Name: gs2200m_dready ****************************************************************************/ static uint32_t gs2200m_dready(int *ec) @@ -164,6 +166,15 @@ static uint32_t gs2200m_dready(int *ec) return r; } +/**************************************************************************** + * Name: gs2200m_reset + ****************************************************************************/ + +static void gs2200m_reset(bool reset) +{ + cxd56_gpio_write(PIN_UART2_RTS, !reset); +} + /**************************************************************************** * Name: spi_pincontrol * @@ -221,6 +232,7 @@ int board_gs2200m_initialize(FAR const char *devpath, int bus) CXD56_PIN_CONFIGS(PINCONFS_UART2_GPIO); (void)cxd56_gpio_config(PIN_UART2_CTS, true); + (void)cxd56_gpio_config(PIN_UART2_RTS, false); /* Initialize spi deivce */ diff --git a/drivers/wireless/gs2200m.c b/drivers/wireless/gs2200m.c index 04ffd0bc22a..762e668f851 100644 --- a/drivers/wireless/gs2200m.c +++ b/drivers/wireless/gs2200m.c @@ -2919,6 +2919,13 @@ static int gs2200m_initialize(FAR struct gs2200m_dev_s *dev, ret = gs2200m_spi_init(dev); + /* Reset and Unreset GS2200M */ + + lower->reset(true); + up_mdelay(1); + lower->reset(false); + up_mdelay(180); + /* Attach interrupt handler */ lower->attach(gs2200m_irq, dev); diff --git a/include/nuttx/wireless/gs2200m.h b/include/nuttx/wireless/gs2200m.h index 4a63ae7d2d6..a9d43c31d7b 100644 --- a/include/nuttx/wireless/gs2200m.h +++ b/include/nuttx/wireless/gs2200m.h @@ -143,6 +143,7 @@ struct gs2200m_lower_s void (*enable)(void); void (*disable)(void); uint32_t (*dready)(int *); + void (*reset)(bool); }; FAR void *gs2200m_register(FAR const char *devpath,