Add kernel drivers for SPI and UART and make locking APIs more consistent (#489)

- Add kernel support for SPI driver
- Add kernel support for UART driver
- Implemented ESP32 UART kernel driver
- Update existing UART-related code in Tactility to use new kernel driver
- Remove UART from tt::hal::Configuration
- Remove tt_hal_uart functionality but keep functions for now
- Update devicetrees for UART changes
- Kernel mutex and recursive mutex: improved locking API design
- Other kernel improvements
- Added device_exists_of_type() and device_find_by_name()
This commit is contained in:
Ken Van Hoeylandt
2026-02-07 21:28:11 +01:00
committed by GitHub
parent 7e24105d0c
commit 74127a5f6c
119 changed files with 1679 additions and 1792 deletions
+29 -2
View File
@@ -293,8 +293,8 @@ void device_lock(struct Device* device) {
mutex_lock(&device->internal->mutex);
}
bool device_try_lock(struct Device* device) {
return mutex_try_lock(&device->internal->mutex);
bool device_try_lock(struct Device* device, TickType_t timeout) {
return mutex_try_lock(&device->internal->mutex, timeout);
}
void device_unlock(struct Device* device) {
@@ -338,4 +338,31 @@ void device_for_each_of_type(const DeviceType* type, void* callbackContext, bool
ledger_unlock();
}
bool device_exists_of_type(const DeviceType* type) {
bool found = false;
ledger_lock();
for (auto* device : ledger.devices) {
auto* driver = device->internal->driver;
if (driver != nullptr && driver->device_type == type) {
found = true;
break;
}
}
ledger_unlock();
return found;
}
Device* device_find_by_name(const char* name) {
Device* found = nullptr;
ledger_lock();
for (auto* device : ledger.devices) {
if (device->name != nullptr && std::strcmp(device->name, name) == 0) {
found = device;
break;
}
}
ledger_unlock();
return found;
}
} // extern "C"