Driver improvements (#535)

- New drivers:
  - SD SPI
  - spi_peripheral
  - touch_placeholder
  - display_placeholder
- Devicetree compiler:
  - Implement phandle-arrays
  - Implement device addresses
- Add placeholder drivers to all devices with a SPI display
- SPI driver: add `cs-pins` and set them to high on driver start
- FileSystem: add `file_system_set_owner()` and `file_system_get_owner()`
- File locking is now checking if the related `FileSystem` is part of a shared SPI bus
- Add `device_get_child_count()`
- SDMMC driver: Remove default of `slot` value
- Fix for Crowpanel Basic 3.5" display (add delay to booting)
- Fix for LilyGO T-HMI SD card mounting (delayed mounting by disabling it initially in the dts)
This commit is contained in:
Ken Van Hoeylandt
2026-06-27 17:32:05 +02:00
committed by GitHub
parent e50659a3fb
commit 599fa46766
222 changed files with 1713 additions and 2257 deletions
+4
View File
@@ -328,6 +328,10 @@ void device_for_each_child(Device* device, void* callbackContext, bool(*on_devic
}
}
size_t device_get_child_count(Device* device) {
return device->internal->children.size();
}
void device_for_each_of_type(const DeviceType* type, void* callbackContext, bool(*on_device)(Device* device, void* context)) {
ledger_lock();
for (auto* device : ledger.devices) {
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/display.h>
extern "C" {
const struct DeviceType DISPLAY_TYPE {
.name = "display"
};
}
@@ -0,0 +1,26 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/display_placeholder.h>
#include <tactility/device.h>
#include <tactility/driver.h>
#include <tactility/drivers/display.h>
#include <tactility/module.h>
extern "C" {
static error_t start(Device*) { return ERROR_NONE; }
static error_t stop(Device*) { return ERROR_NONE; }
extern Module root_module;
Driver display_placeholder_driver = {
.name = "display_placeholder",
.compatible = (const char*[]) { "display-placeholder", nullptr },
.start_device = start,
.stop_device = stop,
.api = nullptr,
.device_type = &DISPLAY_TYPE,
.owner = &root_module,
.internal = nullptr
};
}
+10
View File
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/sdcard.h>
extern "C" {
const struct DeviceType SDCARD_TYPE {
.name = "sdcard"
};
}
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/spi_peripheral.h>
#include <tactility/driver.h>
#include <tactility/module.h>
extern "C" {
static error_t start(Device*) { return ERROR_NONE; }
static error_t stop(Device*) { return ERROR_NONE; }
const DeviceType SPI_PERIPHERAL_TYPE = {
.name = "spi_peripheral"
};
extern Module root_module;
Driver spi_peripheral_driver = {
.name = "spi_peripheral",
.compatible = (const char*[]) { "spi-peripheral", nullptr },
.start_device = start,
.stop_device = stop,
.api = nullptr,
.device_type = &SPI_PERIPHERAL_TYPE,
.owner = &root_module,
.internal = nullptr
};
}
+10
View File
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/touch.h>
extern "C" {
const struct DeviceType TOUCH_TYPE {
.name = "touch"
};
}
@@ -0,0 +1,26 @@
// SPDX-License-Identifier: Apache-2.0
#include <tactility/drivers/touch_placeholder.h>
#include <tactility/device.h>
#include <tactility/driver.h>
#include <tactility/drivers/touch.h>
#include <tactility/module.h>
extern "C" {
static error_t start(Device*) { return ERROR_NONE; }
static error_t stop(Device*) { return ERROR_NONE; }
extern Module root_module;
Driver touch_placeholder_driver = {
.name = "touch_placeholder",
.compatible = (const char*[]) { "touch-placeholder", nullptr },
.start_device = start,
.stop_device = stop,
.api = nullptr,
.device_type = &TOUCH_TYPE,
.owner = &root_module,
.internal = nullptr
};
}
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
#include <algorithm>
#include <tactility/device.h>
#include <tactility/concurrent/mutex.h>
#include <tactility/concurrent/recursive_mutex.h>
#include <tactility/filesystem/file_system.h>
@@ -10,6 +11,7 @@
struct FileSystem {
const FileSystemApi* api;
void* data;
Device* owner;
};
// Global list of file systems and its mutex
@@ -42,6 +44,7 @@ FileSystem* file_system_add(const FileSystemApi* fs_api, void* data) {
check(fs != nullptr);
fs->api = fs_api;
fs->data = data;
fs->owner = nullptr;
ledger.file_systems.push_back(fs);
ledger.unlock();
@@ -90,4 +93,12 @@ error_t file_system_get_path(FileSystem* fs, char* out_path, size_t out_path_siz
return fs->api->get_path(fs->data, out_path, out_path_size);
}
void file_system_set_owner(FileSystem* fs, Device* owner) {
fs->owner = owner;
}
Device* file_system_get_owner(FileSystem* fs) {
return fs->owner;
}
}
+6
View File
@@ -14,6 +14,12 @@ extern const ModuleSymbol KERNEL_SYMBOLS[];
static error_t start() {
extern Driver root_driver;
if (driver_construct_add(&root_driver) != ERROR_NONE) return ERROR_RESOURCE;
extern Driver display_placeholder_driver;
if (driver_construct_add(&display_placeholder_driver) != ERROR_NONE) return ERROR_RESOURCE;
extern Driver touch_placeholder_driver;
if (driver_construct_add(&touch_placeholder_driver) != ERROR_NONE) return ERROR_RESOURCE;
extern Driver spi_peripheral_driver;
if (driver_construct_add(&spi_peripheral_driver) != ERROR_NONE) return ERROR_RESOURCE;
return ERROR_NONE;
}