This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new c4780f1a69 drivers/spi_slave: call SPIS_DEV_NOTIFY when rx or tx
complete for all spi slave driver
c4780f1a69 is described below
commit c4780f1a6964085a7464a84508c16ffe960897d8
Author: dongjiuzhu1 <[email protected]>
AuthorDate: Sat Oct 19 23:08:21 2024 +0800
drivers/spi_slave: call SPIS_DEV_NOTIFY when rx or tx complete for all spi
slave driver
Signed-off-by: dongjiuzhu1 <[email protected]>
---
arch/arm/src/samv7/sam_spi_slave.c | 2 ++
arch/arm/src/stm32h7/stm32_spi_slave.c | 2 ++
arch/risc-v/src/common/espressif/esp_spi_slave.c | 2 ++
arch/risc-v/src/esp32c3-legacy/esp32c3_spi_slave.c | 2 ++
arch/xtensa/src/esp32/esp32_spi_slave.c | 4 ++++
arch/xtensa/src/esp32s2/esp32s2_spi_slave.c | 2 ++
arch/xtensa/src/esp32s3/esp32s3_spi_slave.c | 2 ++
7 files changed, 16 insertions(+)
diff --git a/arch/arm/src/samv7/sam_spi_slave.c
b/arch/arm/src/samv7/sam_spi_slave.c
index 2b8a2a560b..e9dbf72c4a 100644
--- a/arch/arm/src/samv7/sam_spi_slave.c
+++ b/arch/arm/src/samv7/sam_spi_slave.c
@@ -462,6 +462,7 @@ static int spi_interrupt(int irq, void *context, void *arg)
SPIS_DEV_RECEIVE(priv->dev, (const uint16_t *)&data,
sizeof(data));
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
/* When a transfer starts, the data shifted out is the data present
@@ -509,6 +510,7 @@ static int spi_interrupt(int irq, void *context, void *arg)
regval = spi_dequeue(priv);
spi_putreg(priv, regval, SAM_SPI_TDR_OFFSET);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
/* The SPI slave hardware provides only an event when NSS rises
diff --git a/arch/arm/src/stm32h7/stm32_spi_slave.c
b/arch/arm/src/stm32h7/stm32_spi_slave.c
index b8e9e7e90e..a320c80c2f 100644
--- a/arch/arm/src/stm32h7/stm32_spi_slave.c
+++ b/arch/arm/src/stm32h7/stm32_spi_slave.c
@@ -710,6 +710,7 @@ static void spi_dmarxcallback(DMA_HANDLE handle, uint8_t
isr, void *arg)
/* Wake-up the SPI driver */
priv->rxresult = isr | 0x080; /* OR'ed with 0x80 to assure non-zero */
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
#endif
@@ -729,6 +730,7 @@ static void spi_dmatxcallback(DMA_HANDLE handle, uint8_t
isr, void *arg)
/* Wake-up the SPI driver */
priv->txresult = isr | 0x080; /* OR'ed with 0x80 to assure non-zero */
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
#endif
diff --git a/arch/risc-v/src/common/espressif/esp_spi_slave.c
b/arch/risc-v/src/common/espressif/esp_spi_slave.c
index a33057d5f5..6d0adc8a89 100644
--- a/arch/risc-v/src/common/espressif/esp_spi_slave.c
+++ b/arch/risc-v/src/common/espressif/esp_spi_slave.c
@@ -578,6 +578,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
{
spi_slave_hal_store_result(&priv->ctx);
priv->rx_length += transfer_size;
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
#ifdef CONFIG_ESPRESSIF_SPI2_DMA
@@ -592,6 +593,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (transfer_size > 0 && priv->is_tx_enabled)
{
spislave_evict_sent_data(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
priv->ctx.bitlen = priv->tx_length;
diff --git a/arch/risc-v/src/esp32c3-legacy/esp32c3_spi_slave.c
b/arch/risc-v/src/esp32c3-legacy/esp32c3_spi_slave.c
index 3bc8e8b9b3..93ddf17930 100644
--- a/arch/risc-v/src/esp32c3-legacy/esp32c3_spi_slave.c
+++ b/arch/risc-v/src/esp32c3-legacy/esp32c3_spi_slave.c
@@ -863,6 +863,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (transfer_size > 0)
{
spislave_store_result(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
spislave_prepare_next_rx(priv);
@@ -872,6 +873,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (transfer_size > 0 && priv->is_tx_enabled)
{
spislave_evict_sent_data(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
spislave_prepare_next_tx(priv);
diff --git a/arch/xtensa/src/esp32/esp32_spi_slave.c
b/arch/xtensa/src/esp32/esp32_spi_slave.c
index cb8a34417e..0de9852f35 100644
--- a/arch/xtensa/src/esp32/esp32_spi_slave.c
+++ b/arch/xtensa/src/esp32/esp32_spi_slave.c
@@ -840,6 +840,8 @@ static int esp32_spislv_interrupt(int irq, void *context,
void *arg)
tmp = esp32_spi_get_reg(priv, SPI_W0_OFFSET + i);
memcpy(priv->rxbuffer + priv->rxlen + i, &tmp, 4);
}
+
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
priv->rxlen += n;
@@ -861,6 +863,8 @@ static int esp32_spislv_interrupt(int irq, void *context,
void *arg)
priv->txlen = 0;
priv->txen = false;
}
+
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
if (priv->txlen)
diff --git a/arch/xtensa/src/esp32s2/esp32s2_spi_slave.c
b/arch/xtensa/src/esp32s2/esp32s2_spi_slave.c
index edf2c60f08..397aefb105 100644
--- a/arch/xtensa/src/esp32s2/esp32s2_spi_slave.c
+++ b/arch/xtensa/src/esp32s2/esp32s2_spi_slave.c
@@ -966,6 +966,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (transfer_size > 0)
{
spislave_store_result(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
#ifdef CONFIG_ESP32S2_SPI_DMA
@@ -977,6 +978,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (priv->is_tx_enabled && transfer_size > 0)
{
spislave_evict_sent_data(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
spislave_prepare_next_tx(priv);
diff --git a/arch/xtensa/src/esp32s3/esp32s3_spi_slave.c
b/arch/xtensa/src/esp32s3/esp32s3_spi_slave.c
index d6a18d3d69..0731025150 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_spi_slave.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_spi_slave.c
@@ -1054,6 +1054,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (transfer_size > 0)
{
spislave_store_result(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_RX_COMPLETE);
}
#ifdef CONFIG_ESP32S3_SPI_DMA
@@ -1074,6 +1075,7 @@ static int spislave_periph_interrupt(int irq, void
*context, void *arg)
if (priv->is_tx_enabled && transfer_size > 0)
{
spislave_evict_sent_data(priv, transfer_size);
+ SPIS_DEV_NOTIFY(priv->dev, SPISLAVE_TX_COMPLETE);
}
spislave_prepare_next_tx(priv);