Merge branch 'fix/spi_buslock_unregister_issue' into 'master'

fix(hw_support): spi buslock fix unregister dev api issue

Closes SEC-1147

See merge request espressif/esp-idf!50583
This commit is contained in:
Wan Lei
2026-07-17 11:16:41 +08:00
6 changed files with 30 additions and 5 deletions
+11
View File
@@ -705,10 +705,16 @@ void spi_bus_lock_unregister_dev(spi_bus_lock_dev_handle_t dev_handle)
spi_bus_lock_t* lock = dev_handle->parent;
BUS_LOCK_DEBUG_EXECUTE_CHECK(atomic_load(&lock->dev[id]) == (intptr_t)dev_handle);
BUS_LOCK_DEBUG_EXECUTE_CHECK(lock->acquiring_dev != dev_handle);
BUS_LOCK_DEBUG_EXECUTE_CHECK((lock_status_fetch(lock) & dev_handle->mask) == 0);
if (lock->last_dev == dev_handle) {
lock->last_dev = NULL;
}
if (lock->acquiring_dev == dev_handle) {
lock->acquiring_dev = NULL;
lock->acq_dev_bg_active = false;
}
atomic_store(&lock->dev[id], (intptr_t)NULL);
if (dev_handle->semphr) {
@@ -735,6 +741,11 @@ void spi_bus_lock_set_bg_control(spi_bus_lock_handle_t lock, bg_ctrl_func_t bg_e
lock->bg_arg = arg;
}
IRAM_ATTR spi_bus_lock_handle_t spi_bus_lock_get_parent(spi_bus_lock_dev_handle_t dev_handle)
{
return (dev_handle ? dev_handle->parent : NULL);
}
IRAM_ATTR int spi_bus_lock_get_dev_id(spi_bus_lock_dev_handle_t dev_handle)
{
return (dev_handle ? dev_lock_get_id(dev_handle) : -1);