diff --git a/drivers/spi/spi_b91.c b/drivers/spi/spi_b91.c index bf3185c0fe7..7a9d0029ce5 100644 --- a/drivers/spi/spi_b91.c +++ b/drivers/spi/spi_b91.c @@ -242,6 +242,11 @@ static void spi_b91_txrx(const struct device *dev, uint32_t len) static bool spi_b91_is_config_supported(const struct spi_config *config, struct spi_b91_cfg *b91_config) { + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return false; + } + /* check for loop back */ if (config->operation & SPI_MODE_LOOP) { LOG_ERR("Loop back mode not supported"); diff --git a/drivers/spi/spi_cc13xx_cc26xx.c b/drivers/spi/spi_cc13xx_cc26xx.c index dcfd103262a..00906488865 100644 --- a/drivers/spi/spi_cc13xx_cc26xx.c +++ b/drivers/spi/spi_cc13xx_cc26xx.c @@ -59,6 +59,11 @@ static int spi_cc13xx_cc26xx_configure(const struct device *dev, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + /* Slave mode has not been implemented */ if (SPI_OP_MODE_GET(config->operation) != SPI_OP_MODE_MASTER) { LOG_ERR("Slave mode is not supported"); diff --git a/drivers/spi/spi_dw.c b/drivers/spi/spi_dw.c index b91d4360939..e77f75bacc2 100644 --- a/drivers/spi/spi_dw.c +++ b/drivers/spi/spi_dw.c @@ -207,6 +207,11 @@ static int spi_dw_configure(const struct spi_dw_config *info, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + /* Verify if requested op mode is relevant to this controller */ if (config->operation & SPI_OP_MODE_SLAVE) { if (!(info->op_modes & SPI_CTX_RUNTIME_OP_MODE_SLAVE)) { diff --git a/drivers/spi/spi_esp32_spim.c b/drivers/spi/spi_esp32_spim.c index 8052f37853e..31752ac391c 100644 --- a/drivers/spi/spi_esp32_spim.c +++ b/drivers/spi/spi_esp32_spim.c @@ -235,6 +235,11 @@ static int IRAM_ATTR spi_esp32_configure(const struct device *dev, ctx->config = spi_cfg; + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (spi_cfg->operation & SPI_OP_MODE_SLAVE) { LOG_ERR("Slave mode not supported"); return -ENOTSUP; diff --git a/drivers/spi/spi_gecko.c b/drivers/spi/spi_gecko.c index 4e9901f7617..f5445e6f982 100644 --- a/drivers/spi/spi_gecko.c +++ b/drivers/spi/spi_gecko.c @@ -57,6 +57,11 @@ static int spi_config(const struct device *dev, const struct spi_gecko_config *gecko_config = dev->config; struct spi_gecko_data *data = DEV_DATA(dev); + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_WORD_SIZE_GET(config->operation) != SPI_WORD_SIZE) { LOG_ERR("Word size must be %d", SPI_WORD_SIZE); return -ENOTSUP; diff --git a/drivers/spi/spi_litespi.c b/drivers/spi/spi_litespi.c index ad61a46804b..c4c35323cce 100644 --- a/drivers/spi/spi_litespi.c +++ b/drivers/spi/spi_litespi.c @@ -25,6 +25,11 @@ static int spi_config(const struct spi_config *config, uint16_t *control) cs = (uint8_t)(config->slave); } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_WORD_SIZE_GET(config->operation) != 8) { LOG_ERR("Word size must be %d", SPI_WORD_SIZE); return -ENOTSUP; diff --git a/drivers/spi/spi_mcux_dspi.c b/drivers/spi/spi_mcux_dspi.c index d5ae5786c4e..607b37f49f4 100644 --- a/drivers/spi/spi_mcux_dspi.c +++ b/drivers/spi/spi_mcux_dspi.c @@ -575,6 +575,11 @@ static int spi_mcux_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + DSPI_MasterGetDefaultConfig(&master_config); master_config.whichPcs = spi_cfg->slave; diff --git a/drivers/spi/spi_mcux_flexcomm.c b/drivers/spi/spi_mcux_flexcomm.c index 9b96f6a690f..a2e9d5cebc3 100644 --- a/drivers/spi/spi_mcux_flexcomm.c +++ b/drivers/spi/spi_mcux_flexcomm.c @@ -157,6 +157,11 @@ static int spi_mcux_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + word_size = SPI_WORD_SIZE_GET(spi_cfg->operation); if (word_size > SPI_MAX_DATA_WIDTH) { LOG_ERR("Word size %d is greater than %d", diff --git a/drivers/spi/spi_mcux_lpspi.c b/drivers/spi/spi_mcux_lpspi.c index 6e7513c71b5..468df33e720 100644 --- a/drivers/spi/spi_mcux_lpspi.c +++ b/drivers/spi/spi_mcux_lpspi.c @@ -139,6 +139,11 @@ static int spi_mcux_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + LPSPI_MasterGetDefaultConfig(&master_config); if (spi_cfg->slave > CHIP_SELECT_COUNT) { diff --git a/drivers/spi/spi_nrfx_spi.c b/drivers/spi/spi_nrfx_spi.c index 37b708bc26d..0863809faf1 100644 --- a/drivers/spi/spi_nrfx_spi.c +++ b/drivers/spi/spi_nrfx_spi.c @@ -100,6 +100,11 @@ static int configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(spi_cfg->operation) != SPI_OP_MODE_MASTER) { LOG_ERR("Slave mode is not supported on %s", dev->name); return -EINVAL; diff --git a/drivers/spi/spi_nrfx_spim.c b/drivers/spi/spi_nrfx_spim.c index 21a237b791a..2ee1f575400 100644 --- a/drivers/spi/spi_nrfx_spim.c +++ b/drivers/spi/spi_nrfx_spim.c @@ -132,6 +132,11 @@ static int configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(spi_cfg->operation) != SPI_OP_MODE_MASTER) { LOG_ERR("Slave mode is not supported on %s", dev->name); return -EINVAL; diff --git a/drivers/spi/spi_nrfx_spis.c b/drivers/spi/spi_nrfx_spis.c index f1906153c26..392831ccb1a 100644 --- a/drivers/spi/spi_nrfx_spis.c +++ b/drivers/spi/spi_nrfx_spis.c @@ -69,6 +69,11 @@ static int configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(spi_cfg->operation) == SPI_OP_MODE_MASTER) { LOG_ERR("Master mode is not supported on %s", dev->name); return -EINVAL; diff --git a/drivers/spi/spi_oc_simple.c b/drivers/spi/spi_oc_simple.c index d8a2504258a..dd5efa10b03 100644 --- a/drivers/spi/spi_oc_simple.c +++ b/drivers/spi/spi_oc_simple.c @@ -42,6 +42,11 @@ static int spi_oc_simple_configure(const struct spi_oc_simple_cfg *info, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + /* Simple SPI only supports master mode */ if (spi_context_is_slave(&spi->ctx)) { LOG_ERR("Slave mode not supported"); diff --git a/drivers/spi/spi_psoc6.c b/drivers/spi/spi_psoc6.c index 83c96fa1e80..70d4fc5732e 100644 --- a/drivers/spi/spi_psoc6.c +++ b/drivers/spi/spi_psoc6.c @@ -216,6 +216,11 @@ static int spi_psoc6_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + word_size = SPI_WORD_SIZE_GET(spi_cfg->operation); if (word_size > SPI_MAX_DATA_WIDTH) { LOG_ERR("Word size %d is greater than %d", diff --git a/drivers/spi/spi_rv32m1_lpspi.c b/drivers/spi/spi_rv32m1_lpspi.c index 9e95f9cd0b5..e674d071515 100644 --- a/drivers/spi/spi_rv32m1_lpspi.c +++ b/drivers/spi/spi_rv32m1_lpspi.c @@ -140,6 +140,11 @@ static int spi_mcux_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + LPSPI_MasterGetDefaultConfig(&master_config); if (spi_cfg->slave > CHIP_SELECT_COUNT) { diff --git a/drivers/spi/spi_sam.c b/drivers/spi/spi_sam.c index e3601c7f22c..70c8aef7027 100644 --- a/drivers/spi/spi_sam.c +++ b/drivers/spi/spi_sam.c @@ -61,6 +61,11 @@ static int spi_sam_configure(const struct device *dev, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(config->operation) != SPI_OP_MODE_MASTER) { /* Slave mode is not implemented. */ return -ENOTSUP; diff --git a/drivers/spi/spi_sam0.c b/drivers/spi/spi_sam0.c index ea527a38df8..6dc6bb1dc30 100644 --- a/drivers/spi/spi_sam0.c +++ b/drivers/spi/spi_sam0.c @@ -79,6 +79,11 @@ static int spi_sam0_configure(const struct device *dev, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(config->operation) != SPI_OP_MODE_MASTER) { /* Slave mode is not implemented. */ return -ENOTSUP; diff --git a/drivers/spi/spi_sifive.c b/drivers/spi/spi_sifive.c index b4ec1ce49ac..100086aed19 100644 --- a/drivers/spi/spi_sifive.c +++ b/drivers/spi/spi_sifive.c @@ -32,6 +32,10 @@ int spi_config(const struct device *dev, uint32_t frequency, uint32_t div; uint32_t fmt_len; + if (operation & SPI_HALF_DUPLEX) { + return -ENOTSUP; + } + if (SPI_OP_MODE_GET(operation) != SPI_OP_MODE_MASTER) { return -ENOTSUP; } diff --git a/drivers/spi/spi_xec_qmspi.c b/drivers/spi/spi_xec_qmspi.c index 91232453215..7f751d0f7f9 100644 --- a/drivers/spi/spi_xec_qmspi.c +++ b/drivers/spi/spi_xec_qmspi.c @@ -181,6 +181,10 @@ static int qmspi_configure(const struct device *dev, return 0; } + if (config->operation & SPI_HALF_DUPLEX) { + return -ENOTSUP; + } + if (config->operation & (SPI_TRANSFER_LSB | SPI_OP_MODE_SLAVE | SPI_MODE_LOOP)) { return -ENOTSUP; diff --git a/drivers/spi/spi_xlnx_axi_quadspi.c b/drivers/spi/spi_xlnx_axi_quadspi.c index 173d85545d1..cdccd989fde 100644 --- a/drivers/spi/spi_xlnx_axi_quadspi.c +++ b/drivers/spi/spi_xlnx_axi_quadspi.c @@ -150,6 +150,11 @@ static int xlnx_quadspi_configure(const struct device *dev, return 0; } + if (spi_cfg->operation & SPI_HALF_DUPLEX) { + LOG_ERR("Half-duplex not supported"); + return -ENOTSUP; + } + if (spi_cfg->slave >= config->num_ss_bits) { LOG_ERR("unsupported slave %d, num_ss_bits %d", spi_cfg->slave, config->num_ss_bits);