wifi: wilc1000: correct CRC7 calculation
authorDavid Mosberger-Tang <davidm@egauge.net>
Wed, 7 Feb 2024 05:07:42 +0000 (05:07 +0000)
committerKalle Valo <kvalo@kernel.org>
Mon, 12 Feb 2024 15:37:40 +0000 (17:37 +0200)
Document

    ATWILC1000/ATWILC3000
    Baremetal Wi-Fi/BLE Link Controller Software Design Guide

    https://tinyurl.com/yer2xhyc

says that bit 0 of the CRC7 code must always be a 1.

I confirmed that today with a logic analyzer: setting bit 0 causes
wilc1000 to accept a command with CRC7 enabled, whereas clearing bit 0
causes wilc1000 to reject the command with a CRC error.

Signed-off-by: David Mosberger-Tang <davidm@egauge.net>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240207050736.2717641-1-davidm@egauge.net
drivers/net/wireless/microchip/wilc1000/spi.c

index eaf4dda9c54032f0eec4159419541bfe900f68ec..c92ee4b73a744d31610ce63143acba11330fd83c 100644 (file)
@@ -473,7 +473,7 @@ static int spi_data_write(struct wilc *wilc, u8 *b, u32 sz)
  ********************************************/
 static u8 wilc_get_crc7(u8 *buffer, u32 len)
 {
-       return crc7_be(0xfe, buffer, len);
+       return crc7_be(0xfe, buffer, len) | 0x01;
 }
 
 static int wilc_spi_single_read(struct wilc *wilc, u8 cmd, u32 adr, void *b,