Message ID | 20240217-wilc_1000_reset_line-v2-1-b216f433d7d5@bootlin.com |
---|---|
State | New |
Headers | show |
Series | [v2] wifi: wilc1000: revert reset line logic flip | expand |
Alexis Lothoré <alexis.lothore@bootlin.com> wrote: > This reverts commit fcf690b0b47494df51d214db5c5a714a400b0257. > > When using a wilc1000 chip over a spi bus, users can optionally define a > reset gpio and a chip enable gpio. The reset line of wilc1000 is active > low, so to hold the chip in reset, a low (physical) value must be applied. > > The corresponding device tree binding documentation was introduced by > commit f31ee3c0a555 ("wilc1000: Document enable-gpios and reset-gpios > properties") and correctly indicates that the reset line is an active-low > signal. The corresponding driver part, brought by commit ec031ac4792c > ("wilc1000: Add reset/enable GPIO support to SPI driver") was applying the > correct logic. But commit fcf690b0b474 ("wifi: wilc1000: use correct > sequence of RESET for chip Power-UP/Down") eventually flipped this logic > and started misusing the gpiod APIs, applying an inverted logic when > powering up/down the chip (for example, setting the reset line to a logic > "1" during power up, which in fact asserts the reset line when device tree > describes the reset line as GPIO_ACTIVE_LOW). As a consequence, any > platform currently using the driver in SPI mode must use a faulty reset > line description in device tree, or else chip will be maintained in reset > and will not even allow to bring up the chip. > > Fix reset line usage by inverting back the gpiod APIs usage, setting the > reset line to the logic value "0" when powering the chip, and the logic > value "1" when powering off the chip. > > Fixes: fcf690b0b474 ("wifi: wilc1000: use correct sequence of RESET for chip Power-UP/Down") > Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com> > Acked-by: Conor Dooley <conor.dooley@microchip.com> > Acked-by: Ajay Singh <ajay.kathat@microchip.com> Patch applied to wireless-next.git, thanks. f3ec64394763 wifi: wilc1000: revert reset line logic flip
diff --git a/drivers/net/wireless/microchip/wilc1000/spi.c b/drivers/net/wireless/microchip/wilc1000/spi.c index 3c4451535c8a..61c3572ce321 100644 --- a/drivers/net/wireless/microchip/wilc1000/spi.c +++ b/drivers/net/wireless/microchip/wilc1000/spi.c @@ -194,11 +194,11 @@ static void wilc_wlan_power(struct wilc *wilc, bool on) /* assert ENABLE: */ gpiod_set_value(gpios->enable, 1); mdelay(5); - /* assert RESET: */ - gpiod_set_value(gpios->reset, 1); - } else { /* deassert RESET: */ gpiod_set_value(gpios->reset, 0); + } else { + /* assert RESET: */ + gpiod_set_value(gpios->reset, 1); /* deassert ENABLE: */ gpiod_set_value(gpios->enable, 0); }