From 2569e2e8d1f690ca9f095b9346f4c4d13b6253e0 Mon Sep 17 00:00:00 2001 From: Ricardo Salveti Date: Wed, 25 Jan 2017 23:26:10 -0200 Subject: [PATCH] Bluetooth: SPI: retry spi_transceive calls if invalid spi_transceive can return successfuly even if the data provided by the slave is invalid, so check if the content is correct and retry until a valid data is available. Change-Id: Ia951de391e0b24c5b41eeabfb5c10b056d32b62e Signed-off-by: Ricardo Salveti --- drivers/bluetooth/hci/spi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/hci/spi.c b/drivers/bluetooth/hci/spi.c index c7377614c7f..08e9778182f 100644 --- a/drivers/bluetooth/hci/spi.c +++ b/drivers/bluetooth/hci/spi.c @@ -155,7 +155,9 @@ static void bt_spi_rx_thread(void) header_slave[STATUS_HEADER_TOREAD] == 0xFF); size = header_slave[STATUS_HEADER_TOREAD]; - spi_transceive(spi_dev, &txmsg, size, &rxmsg, size); + do { + spi_transceive(spi_dev, &txmsg, size, &rxmsg, size); + } while (rxmsg[0] == 0); #if defined(CONFIG_BLUETOOTH_SPI_BLUENRG) gpio_pin_write(cs_dev, GPIO_CS_PIN, 1); @@ -251,7 +253,9 @@ static int bt_spi_send(struct net_buf *buf) (rxmsg[1] | rxmsg[2] | rxmsg[3] | rxmsg[4]) == 0); /* Transmit the message */ - spi_transceive(spi_dev, buf->data, buf->len, rxmsg, buf->len); + do { + spi_transceive(spi_dev, buf->data, buf->len, rxmsg, buf->len); + } while (rxmsg[0] == 0); #if defined(CONFIG_BLUETOOTH_SPI_BLUENRG) /* Deselect chip */