Skip to content

Commit

Permalink
drivers: video: esp32s3: Add signals for vsync and image received
Browse files Browse the repository at this point in the history
This PR implements the set_signal callback from the video API.
It introduces two signals:
1. A signal registered on VIDEO_EP_OUT raises once a new image has
been received completely.
2. A signal registered on VIDEO_EP_ALL raises with the vsync interrupt

Signed-off-by: Armin Kessler <[email protected]>
  • Loading branch information
epc-ake committed Sep 17, 2024
1 parent 1000738 commit 8518b6b
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 4 deletions.
7 changes: 7 additions & 0 deletions drivers/video/Kconfig.esp32_dvp
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ config VIDEO_ESP32
default y
help
This option enables the video interface for the esp32s3.

config VIDEO_ESP32_VSYNC_INTERRUPT
bool "Enable VSync interrupt"
select POLL
default n
help

Check failure on line 16 in drivers/video/Kconfig.esp32_dvp

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/Kconfig.esp32_dvp:16 trailing whitespace

Check failure on line 16 in drivers/video/Kconfig.esp32_dvp

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/Kconfig.esp32_dvp:16 trailing whitespace
Enables a new signal that gets triggered on vsync interrupt

Check failure on line 17 in drivers/video/Kconfig.esp32_dvp

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/Kconfig.esp32_dvp:17 trailing whitespace

Check failure on line 17 in drivers/video/Kconfig.esp32_dvp

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/Kconfig.esp32_dvp:17 trailing whitespace
96 changes: 92 additions & 4 deletions drivers/video/video_esp32_dvp.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <zephyr/drivers/dma/dma_esp32.h>
#include <zephyr/drivers/pinctrl.h>
#include <zephyr/drivers/video.h>
#include <zephyr/drivers/interrupt_controller/intc_esp32.h>
#include <zephyr/kernel.h>
#include <hal/cam_hal.h>
#include <hal/cam_ll.h>
Expand All @@ -23,6 +24,16 @@
LOG_MODULE_REGISTER(video_esp32_lcd_cam, LOG_LEVEL_INF);

#define VIDEO_ESP32_DMA_BUFFER_MAX_SIZE 4095
#define VIDEO_ESP32_VSYNC_MASK 0x04

#ifdef CONFIG_POLL
#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result) \
if (data->signal_out) { \
k_poll_signal_raise(data->signal_out, result); \
}

Check notice on line 33 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:33 -#define VIDEO_ESP32_VSYNC_MASK 0x04 +#define VIDEO_ESP32_VSYNC_MASK 0x04 #ifdef CONFIG_POLL -#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result) \ - if (data->signal_out) { \ - k_poll_signal_raise(data->signal_out, result); \ +#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result) \ + if (data->signal_out) { \ + k_poll_signal_raise(data->signal_out, result); \

Check notice on line 33 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:33 -#define VIDEO_ESP32_VSYNC_MASK 0x04 +#define VIDEO_ESP32_VSYNC_MASK 0x04 #ifdef CONFIG_POLL -#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result) \ - if (data->signal_out) { \ - k_poll_signal_raise(data->signal_out, result); \ +#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result) \ + if (data->signal_out) { \ + k_poll_signal_raise(data->signal_out, result); \
#else
#define VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(result)
#endif

enum video_esp32_cam_clk_sel_values {
VIDEO_ESP32_CAM_CLK_SEL_NONE = 0,
Expand All @@ -39,6 +50,10 @@ struct video_esp32_config {
const struct device *source_dev;
uint32_t cam_clk;
uint8_t rx_dma_channel;
#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
int irq_source;
int irq_priority;
#endif
uint8_t data_width;

Check notice on line 57 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:57 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT int irq_source; int irq_priority; - #endif +#endif

Check notice on line 57 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:57 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT int irq_source; int irq_priority; - #endif +#endif
uint8_t invert_de;
uint8_t invert_byte_order;
Expand All @@ -57,8 +72,29 @@ struct video_esp32_data {
struct k_fifo fifo_in;
struct k_fifo fifo_out;
struct dma_block_config dma_blocks[CONFIG_DMA_ESP32_MAX_DESCRIPTOR_NUM];
#ifdef CONFIG_POLL
struct k_poll_signal* signal_out;

Check failure on line 76 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

POINTER_LOCATION

drivers/video/video_esp32_dvp.c:76 "foo* bar" should be "foo *bar"

Check failure on line 76 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

POINTER_LOCATION

drivers/video/video_esp32_dvp.c:76 "foo* bar" should be "foo *bar"
#endif
#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
struct k_poll_signal* signal_all;

Check failure on line 79 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

POINTER_LOCATION

drivers/video/video_esp32_dvp.c:79 "foo* bar" should be "foo *bar"

Check failure on line 79 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

POINTER_LOCATION

drivers/video/video_esp32_dvp.c:79 "foo* bar" should be "foo *bar"
#endif
};

Check notice on line 81 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:81 - #ifdef CONFIG_POLL - struct k_poll_signal* signal_out; - #endif - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT - struct k_poll_signal* signal_all; - #endif +#ifdef CONFIG_POLL + struct k_poll_signal *signal_out; +#endif +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT + struct k_poll_signal *signal_all; +#endif

Check notice on line 81 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:81 - #ifdef CONFIG_POLL - struct k_poll_signal* signal_out; - #endif - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT - struct k_poll_signal* signal_all; - #endif +#ifdef CONFIG_POLL + struct k_poll_signal *signal_out; +#endif +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT + struct k_poll_signal *signal_all; +#endif

#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
static void video_esp32_irq_handler(void *arg)
{
const struct device *dev = (const struct device *)arg;
struct video_esp32_data *data = dev->data;

uint32_t status = cam_ll_get_interrupt_status(data->hal.hw);
cam_ll_clear_interrupt_status(data->hal.hw, status);

Check warning on line 90 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

LINE_SPACING

drivers/video/video_esp32_dvp.c:90 Missing a blank line after declarations

Check notice on line 90 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:90 - uint32_t status = cam_ll_get_interrupt_status(data->hal.hw); + uint32_t status = cam_ll_get_interrupt_status(data->hal.hw);

Check warning on line 90 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

LINE_SPACING

drivers/video/video_esp32_dvp.c:90 Missing a blank line after declarations

Check notice on line 90 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:90 - uint32_t status = cam_ll_get_interrupt_status(data->hal.hw); + uint32_t status = cam_ll_get_interrupt_status(data->hal.hw);

if (data->signal_all && status & VIDEO_ESP32_VSYNC_MASK) {
k_poll_signal_raise(data->signal_all, VIDEO_BUF_STARTED);
}
}
#endif

static int video_esp32_reload_dma(struct video_esp32_data *data)
{
const struct video_esp32_config *cfg = data->config;
Expand Down Expand Up @@ -89,28 +125,31 @@ void video_esp32_dma_rx_done(const struct device *dev, void *user_data, uint32_t
int status)
{
struct video_esp32_data *data = user_data;
int ret = 0;

if (status == DMA_STATUS_BLOCK) {
LOG_DBG("received block");
return;
}

if (status != DMA_STATUS_COMPLETE) {
VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(VIDEO_BUF_ERROR)
LOG_ERR("DMA error: %d", status);
return;
}

if (data->active_vbuf == NULL) {
VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(VIDEO_BUF_ERROR)
LOG_ERR("No video buffer available. Enque some buffers first.");
return;
}

k_fifo_put(&data->fifo_out, data->active_vbuf);
VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(VIDEO_BUF_DONE)
data->active_vbuf = k_fifo_get(&data->fifo_in, K_NO_WAIT);

if (data->active_vbuf == NULL) {
LOG_WRN("Frame dropped. No buffer available");
VIDEO_ESP32_RAISE_OUT_SIG_IF_ENABLED(VIDEO_BUF_ERROR)
return;
}
video_esp32_reload_dma(data);
Expand Down Expand Up @@ -193,7 +232,6 @@ static int video_esp32_stream_start(const struct device *dev)
}

cam_hal_start_streaming(&data->hal);

data->is_streaming = true;

return 0;
Expand Down Expand Up @@ -270,7 +308,6 @@ static int video_esp32_set_fmt(const struct device *dev, enum video_endpoint_id
static int video_esp32_enqueue(const struct device *dev, enum video_endpoint_id ep,
struct video_buffer *vbuf)
{
const struct video_esp32_config *cfg = dev->config;
struct video_esp32_data *data = dev->data;

if (ep != VIDEO_EP_OUT) {
Expand Down Expand Up @@ -316,6 +353,30 @@ static int video_esp32_get_ctrl(const struct device *dev, unsigned int cid, void
return video_get_ctrl(cfg->source_dev, cid, value);
}

#ifdef CONFIG_POLL
int video_esp32_set_signal(const struct device *dev,
enum video_endpoint_id ep,
struct k_poll_signal *signal)
{
struct video_esp32_data *data = dev->data;

if (ep == VIDEO_EP_OUT) {
data->signal_out = signal;
return 0;
}

Check failure on line 366 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:366 trailing whitespace

Check failure on line 366 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:366 trailing whitespace
#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
else if (ep == VIDEO_EP_ALL) {
data->signal_all = signal;
return 0;
}
#endif

LOG_ERR("Invalid endpoint id");

return -EINVAL;
}

Check failure on line 377 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:377 trailing whitespace

Check failure on line 377 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:377 trailing whitespace
#endif

Check failure on line 378 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:378 trailing whitespace

Check failure on line 378 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:378 trailing whitespace

Check notice on line 379 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:379 -int video_esp32_set_signal(const struct device *dev, - enum video_endpoint_id ep, - struct k_poll_signal *signal) +int video_esp32_set_signal(const struct device *dev, enum video_endpoint_id ep, + struct k_poll_signal *signal) { struct video_esp32_data *data = dev->data; if (ep == VIDEO_EP_OUT) { data->signal_out = signal; return 0; - } - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT + } +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT else if (ep == VIDEO_EP_ALL) { data->signal_all = signal; return 0; } - #endif +#endif LOG_ERR("Invalid endpoint id"); return -EINVAL; -} -#endif +} +#endif

Check notice on line 379 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:379 -int video_esp32_set_signal(const struct device *dev, - enum video_endpoint_id ep, - struct k_poll_signal *signal) +int video_esp32_set_signal(const struct device *dev, enum video_endpoint_id ep, + struct k_poll_signal *signal) { struct video_esp32_data *data = dev->data; if (ep == VIDEO_EP_OUT) { data->signal_out = signal; return 0; - } - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT + } +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT else if (ep == VIDEO_EP_ALL) { data->signal_all = signal; return 0; } - #endif +#endif LOG_ERR("Invalid endpoint id"); return -EINVAL; -} -#endif +} +#endif
static void video_esp32_cam_ctrl_init(const struct device *dev)
{
const struct video_esp32_config *cfg = dev->config;
Expand All @@ -336,6 +397,20 @@ static void video_esp32_cam_ctrl_init(const struct device *dev)
cam_ll_enable_invert_hsync(data->hal.hw, cfg->invert_hsync);
}

#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
static int video_esp32_enable_interrupt(const struct device *dev)
{
const struct video_esp32_config *cfg = dev->config;

Check failure on line 403 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:403 trailing whitespace

Check failure on line 403 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TRAILING_WHITESPACE

drivers/video/video_esp32_dvp.c:403 trailing whitespace
struct video_esp32_data *data = dev->data;

cam_ll_clear_interrupt_status(data->hal.hw, VIDEO_ESP32_VSYNC_MASK);
cam_ll_enable_interrupt(data->hal.hw, VIDEO_ESP32_VSYNC_MASK, true);
return esp_intr_alloc(cfg->irq_source, cfg->irq_priority,
(intr_handler_t)video_esp32_irq_handler, (void *)dev, NULL);

}

Check notice on line 411 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:411 - const struct video_esp32_config *cfg = dev->config; + const struct video_esp32_config *cfg = dev->config; struct video_esp32_data *data = dev->data; cam_ll_clear_interrupt_status(data->hal.hw, VIDEO_ESP32_VSYNC_MASK); cam_ll_enable_interrupt(data->hal.hw, VIDEO_ESP32_VSYNC_MASK, true); return esp_intr_alloc(cfg->irq_source, cfg->irq_priority, - (intr_handler_t)video_esp32_irq_handler, (void *)dev, NULL); - + (intr_handler_t)video_esp32_irq_handler, (void *)dev, NULL);

Check notice on line 411 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:411 - const struct video_esp32_config *cfg = dev->config; + const struct video_esp32_config *cfg = dev->config; struct video_esp32_data *data = dev->data; cam_ll_clear_interrupt_status(data->hal.hw, VIDEO_ESP32_VSYNC_MASK); cam_ll_enable_interrupt(data->hal.hw, VIDEO_ESP32_VSYNC_MASK, true); return esp_intr_alloc(cfg->irq_source, cfg->irq_priority, - (intr_handler_t)video_esp32_irq_handler, (void *)dev, NULL); - + (intr_handler_t)video_esp32_irq_handler, (void *)dev, NULL);
#endif

static int video_esp32_init(const struct device *dev)
{
const struct video_esp32_config *cfg = dev->config;
Expand All @@ -351,6 +426,13 @@ static int video_esp32_init(const struct device *dev)
return -ENODEV;
}

#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
if (!video_esp32_enable_interrupt(dev)) {
LOG_ERR("Failed to enable interrupt");
return -EIO;
}
#endif

Check notice on line 435 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:435 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT if (!video_esp32_enable_interrupt(dev)) { LOG_ERR("Failed to enable interrupt"); return -EIO; } - #endif +#endif

Check notice on line 435 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:435 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT if (!video_esp32_enable_interrupt(dev)) { LOG_ERR("Failed to enable interrupt"); return -EIO; } - #endif +#endif
return 0;
}

Expand All @@ -367,7 +449,9 @@ static const struct video_driver_api esp32_driver_api = {
.flush = NULL,
.set_ctrl = video_esp32_set_ctrl,
.get_ctrl = video_esp32_get_ctrl,
.set_signal = NULL,
#ifdef CONFIG_POLL
.set_signal = video_esp32_set_signal,
#endif
};

Check notice on line 455 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:455 - #ifdef CONFIG_POLL +#ifdef CONFIG_POLL .set_signal = video_esp32_set_signal, - #endif +#endif

Check notice on line 455 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:455 - #ifdef CONFIG_POLL +#ifdef CONFIG_POLL .set_signal = video_esp32_set_signal, - #endif +#endif

PINCTRL_DT_INST_DEFINE(0);
Expand All @@ -378,6 +462,10 @@ static const struct video_esp32_config esp32_config = {
.dma_dev = ESP32_DT_INST_DMA_CTLR(0, rx),
.rx_dma_channel = DT_INST_DMAS_CELL_BY_NAME(0, rx, channel),
.data_width = DT_INST_PROP_OR(0, data_width, 8),
#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT
.irq_source = DT_INST_IRQN(0),
.irq_priority = ESP_INTR_FLAG_LOWMED,
#endif
.invert_bit_order = DT_INST_PROP(0, invert_bit_order),

Check notice on line 469 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:469 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT .irq_source = DT_INST_IRQN(0), .irq_priority = ESP_INTR_FLAG_LOWMED, - #endif +#endif

Check notice on line 469 in drivers/video/video_esp32_dvp.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/video/video_esp32_dvp.c:469 - #ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT +#ifdef CONFIG_VIDEO_ESP32_VSYNC_INTERRUPT .irq_source = DT_INST_IRQN(0), .irq_priority = ESP_INTR_FLAG_LOWMED, - #endif +#endif
.invert_byte_order = DT_INST_PROP(0, invert_byte_order),
.invert_pclk = DT_INST_PROP(0, invert_pclk),
Expand Down

0 comments on commit 8518b6b

Please sign in to comment.