mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
fix(hw_support): spi buslock fix unregister dev api issue
This commit is contained in:
@@ -301,13 +301,17 @@ esp_err_t spi_bus_remove_flash_device(esp_flash_t *chip)
|
||||
}
|
||||
|
||||
spi_bus_lock_dev_handle_t dev_handle = NULL;
|
||||
esp_flash_deinit_os_functions(chip, &dev_handle);
|
||||
esp_err_t ret = esp_flash_deinit_os_functions(chip, &dev_handle);
|
||||
if (ret != ESP_OK) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dev_handle) {
|
||||
spi_bus_lock_unregister_dev(dev_handle);
|
||||
}
|
||||
free(chip->host);
|
||||
free(chip);
|
||||
return ESP_OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* The default (ie initial boot) no-OS ROM esp_flash_os_functions_t */
|
||||
|
||||
@@ -63,7 +63,9 @@ esp_err_t esp_flash_init_os_functions(esp_flash_t *chip, int host_id, spi_bus_lo
|
||||
* @param chip The chip to deinit os functions
|
||||
* @param out_dev_handle The SPI bus lock passed from `esp_flash_init_os_functions`. The caller should deinitialize
|
||||
* the lock.
|
||||
* @return always ESP_OK.
|
||||
* @return
|
||||
* - ESP_ERR_INVALID_STATE: the chip is still acquiring the SPI bus lock.
|
||||
* - ESP_OK: success.
|
||||
*/
|
||||
esp_err_t esp_flash_deinit_os_functions(esp_flash_t* chip, spi_bus_lock_dev_handle_t* out_dev_handle);
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ esp_err_t spi_bus_add_flash_device(esp_flash_t **out_chip, const esp_flash_spi_d
|
||||
*
|
||||
* @return
|
||||
* - ESP_ERR_INVALID_ARG: The chip is invalid.
|
||||
* - ESP_ERR_INVALID_STATE: The chip is still acquiring the SPI bus lock.
|
||||
* - ESP_OK: success.
|
||||
*/
|
||||
esp_err_t spi_bus_remove_flash_device(esp_flash_t *chip);
|
||||
|
||||
@@ -336,9 +336,15 @@ esp_err_t esp_flash_init_os_functions(esp_flash_t *chip, int host_id, spi_bus_lo
|
||||
|
||||
esp_err_t esp_flash_deinit_os_functions(esp_flash_t* chip, spi_bus_lock_dev_handle_t* out_dev_handle)
|
||||
{
|
||||
*out_dev_handle = NULL;
|
||||
if (chip->os_func_data) {
|
||||
app_func_arg_t *ctx = (app_func_arg_t*)chip->os_func_data;
|
||||
spi_bus_lock_dev_handle_t dev_handle = ctx->dev_lock;
|
||||
if (dev_handle && spi_bus_lock_get_acquiring_dev(spi_bus_lock_get_parent(dev_handle)) == dev_handle) {
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
}
|
||||
// SPI bus lock is possibly not used on SPI1 bus
|
||||
*out_dev_handle = ((app_func_arg_t*)chip->os_func_data)->dev_lock;
|
||||
*out_dev_handle = dev_handle;
|
||||
free(chip->os_func_data);
|
||||
}
|
||||
chip->os_func = NULL;
|
||||
|
||||
Reference in New Issue
Block a user