diff --git a/components/driver/include/driver/spi_master.h b/components/driver/include/driver/spi_master.h index 16c9e26e79..6623a9b5d0 100644 --- a/components/driver/include/driver/spi_master.h +++ b/components/driver/include/driver/spi_master.h @@ -166,7 +166,8 @@ typedef struct spi_device_t *spi_device_handle_t; ///< Handle for a device on a * @param dev_config SPI interface protocol config for the device * @param handle Pointer to variable to hold the device handle * @return - * - ESP_ERR_INVALID_ARG if parameter is invalid + * - ESP_ERR_INVALID_ARG if parameter is invalid or configuration combination is not supported (e.g. + * `dev_config->post_cb` isn't set while flag `SPI_DEVICE_NO_RETURN_RESULT` is enabled) * - ESP_ERR_NOT_FOUND if host doesn't have any free CS slots * - ESP_ERR_NO_MEM if out of memory * - ESP_OK on success diff --git a/components/driver/spi_master.c b/components/driver/spi_master.c index c6f9d5004c..d31fdf2c54 100644 --- a/components/driver/spi_master.c +++ b/components/driver/spi_master.c @@ -329,6 +329,12 @@ esp_err_t spi_bus_add_device(spi_host_device_t host_id, const spi_device_interfa SPI_CHECK(dev_config->cs_ena_pretrans <= 1 || (dev_config->address_bits == 0 && dev_config->command_bits == 0) || (dev_config->flags & SPI_DEVICE_HALFDUPLEX), "In full-duplex mode, only support cs pretrans delay = 1 and without address_bits and command_bits", ESP_ERR_INVALID_ARG); #endif + + //Check post_cb status when `SPI_DEVICE_NO_RETURN_RESULT` flag is set. + if (dev_config->flags & SPI_DEVICE_NO_RETURN_RESULT) { + SPI_CHECK(dev_config->post_cb != NULL, "use feature flag 'SPI_DEVICE_NO_RETURN_RESULT' but no post callback function sets", ESP_ERR_INVALID_ARG); + } + uint32_t lock_flag = ((dev_config->spics_io_num != -1)? SPI_BUS_LOCK_DEV_FLAG_CS_REQUIRED: 0); spi_bus_lock_dev_config_t lock_config = {