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
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <tactility/bindings/bindings.h>
#include <tactility/drivers/display_placeholder.h>
#ifdef __cplusplus
extern "C" {
#endif
DEFINE_DEVICETREE(display_placeholder, struct DisplayPlaceholderConfig)
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <tactility/bindings/bindings.h>
#include <tactility/drivers/spi_peripheral.h>
#ifdef __cplusplus
extern "C" {
#endif
DEFINE_DEVICETREE(spi_peripheral, struct SpiPeripheralConfig)
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <tactility/bindings/bindings.h>
#include <tactility/drivers/touch_placeholder.h>
#ifdef __cplusplus
extern "C" {
#endif
DEFINE_DEVICETREE(touch_placeholder, struct TouchPlaceholderConfig)
#ifdef __cplusplus
}
#endif
@@ -26,6 +26,9 @@ struct DeviceType {
/** Represents a piece of hardware */
struct Device {
/** Device address. Can represent an index, a memory address, or some kind of offset */
int32_t address;
/** The name of the device. Valid characters: a-z a-Z 0-9 - _ . */
const char* name;
@@ -248,6 +251,13 @@ void device_for_each(void* callback_context, bool(*on_device)(struct Device* dev
*/
void device_for_each_child(struct Device* device, void* callback_context, bool(*on_device)(struct Device* device, void* context));
/**
* @brief Get the number of child devices.
* @param[in] device non-null device pointer
* @return the number of children
*/
size_t device_get_child_count(struct Device* device);
/**
* Iterate through all the known devices of a specific type
*
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <tactility/device.h>
extern const struct DeviceType DISPLAY_TYPE;
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
struct DisplayPlaceholderConfig {
uint8_t _unused;
};
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <tactility/device.h>
extern const struct DeviceType SDCARD_TYPE;
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <stdint.h>
#include <tactility/device.h>
#ifdef __cplusplus
extern "C" {
#endif
struct SpiPeripheralConfig {
uint8_t _unused;
};
extern const struct DeviceType SPI_PERIPHERAL_TYPE;
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <tactility/device.h>
extern const struct DeviceType TOUCH_TYPE;
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
struct TouchPlaceholderConfig {
uint8_t _unused;
};
#ifdef __cplusplus
}
#endif
@@ -24,6 +24,7 @@ typedef int error_t;
#define ERROR_NOT_SUPPORTED 10
#define ERROR_NOT_ALLOWED 11
#define ERROR_BUFFER_OVERFLOW 12
#define ERROR_OUT_OF_RANGE 13
/** Convert an error_t to a human-readable text. Useful for logging. */
const char* error_to_string(error_t error);
@@ -101,6 +101,20 @@ bool file_system_is_mounted(struct FileSystem* fs);
*/
error_t file_system_get_path(struct FileSystem* fs, char* out_path, size_t out_path_size);
/**
* @brief Sets the owner device of the file system.
* @param[in] fs the FileSystem object
* @param[in] owner the owning device, or NULL
*/
void file_system_set_owner(struct FileSystem* fs, struct Device* owner);
/**
* @brief Gets the owner device of the file system.
* @param[in] fs the FileSystem object
* @return the owning device, or NULL if not set
*/
struct Device* file_system_get_owner(struct FileSystem* fs);
#ifdef __cplusplus
}
#endif