Zephyr API Documentation 4.5.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
mipi_dbi.h
Go to the documentation of this file.
1/*
2 * Copyright 2023 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
21
22#ifndef ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_
23#define ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_
24
33
34#include <zephyr/device.h>
37#include <zephyr/drivers/spi.h>
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
45#define MIPI_DBI_DT_SPI_DEV(node_id) \
46 DT_PHANDLE(DT_PARENT(node_id), spi_dev)
48
60#define MIPI_DBI_SPI_DEV_HAS_CS_GPIOS(node_id) \
61 DT_PROP_HAS_IDX(MIPI_DBI_DT_SPI_DEV(node_id), cs_gpios, \
62 DT_REG_ADDR_RAW(node_id))
63
65#define MIPI_DBI_SPI_CS_GPIOS_DT_SPEC_GET(node_id) \
66 GPIO_DT_SPEC_GET_BY_IDX_OR(MIPI_DBI_DT_SPI_DEV(node_id), \
67 cs_gpios, DT_REG_ADDR_RAW(node_id), {})
68
69#define MIPI_DBI_SPI_CS_CONTROL_INIT_GPIO(node_id, delay_) \
70 .gpio = MIPI_DBI_SPI_CS_GPIOS_DT_SPEC_GET(node_id), \
71 .delay = delay_,
73
85#define MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_) \
86 { \
87 .frequency = DT_PROP(node_id, mipi_max_frequency), \
88 .operation = (operation_) | \
89 DT_PROP_OR(node_id, duplex, 0) | \
90 COND_CODE_1(DT_PROP(node_id, mipi_cpol), SPI_MODE_CPOL, (0)) | \
91 COND_CODE_1(DT_PROP(node_id, mipi_cpha), SPI_MODE_CPHA, (0)) | \
92 COND_CODE_1(DT_PROP(node_id, mipi_hold_cs), SPI_HOLD_ON_CS, (0)), \
93 .peripheral = DT_REG_ADDR(node_id), \
94 .cs = { \
95 COND_CODE_1(MIPI_DBI_SPI_DEV_HAS_CS_GPIOS(node_id), \
96 (MIPI_DBI_SPI_CS_CONTROL_INIT_GPIO(node_id, delay_)), \
97 (SPI_CS_CONTROL_INIT_NATIVE(node_id))) \
98 .cs_is_gpio = MIPI_DBI_SPI_DEV_HAS_CS_GPIOS(node_id), \
99 }, \
100 }
101
112#define MIPI_DBI_SPI_CONFIG_DT_INST(inst, operation_, delay_) \
113 MIPI_DBI_SPI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
114
129#define MIPI_DBI_CONFIG_DT(node_id, operation_, delay_) \
130 { \
131 .mode = DT_STRING_UPPER_TOKEN(node_id, mipi_mode), \
132 .color_coding = DT_STRING_UPPER_TOKEN_OR(node_id, color_coding, 0), \
133 .config = MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_), \
134 }
135
145#define MIPI_DBI_CONFIG_DT_INST(inst, operation_, delay_) \
146 MIPI_DBI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
147
157#define MIPI_DBI_TE_MODE_DT(node_id, edge_prop) \
158 DT_STRING_UPPER_TOKEN(node_id, edge_prop)
159
169#define MIPI_DBI_TE_MODE_DT_INST(inst, edge_prop) \
170 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), edge_prop)
171
176
190
195typedef int (*mipi_dbi_command_write_t)(const struct device *dev,
196 const struct mipi_dbi_config *config, uint8_t cmd,
197 const uint8_t *data, size_t len);
198
203typedef int (*mipi_dbi_command_read_t)(const struct device *dev,
204 const struct mipi_dbi_config *config, uint8_t *cmds,
205 size_t num_cmds, uint8_t *response, size_t len);
206
211typedef int (*mipi_dbi_write_display_t)(const struct device *dev,
212 const struct mipi_dbi_config *config,
213 const uint8_t *framebuf,
214 struct display_buffer_descriptor *desc,
215 enum display_pixel_format pixfmt);
216
221typedef int (*mipi_dbi_reset_t)(const struct device *dev, k_timeout_t delay);
222
227typedef int (*mipi_dbi_release_t)(const struct device *dev, const struct mipi_dbi_config *config);
228
233typedef int (*mipi_dbi_configure_te_t)(const struct device *dev, uint8_t edge, k_timeout_t delay);
234
264
267
288static inline int mipi_dbi_command_write(const struct device *dev,
289 const struct mipi_dbi_config *config,
290 uint8_t cmd, const uint8_t *data,
291 size_t len)
292{
293 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
294
295 if (api->command_write == NULL) {
296 return -ENOSYS;
297 }
298 return api->command_write(dev, config, cmd, data, len);
299}
300
318static inline int mipi_dbi_command_read(const struct device *dev,
319 const struct mipi_dbi_config *config,
320 uint8_t *cmds, size_t num_cmd,
321 uint8_t *response, size_t len)
322{
323 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
324
325 if (api->command_read == NULL) {
326 return -ENOSYS;
327 }
328 return api->command_read(dev, config, cmds, num_cmd, response, len);
329}
330
350static inline int mipi_dbi_write_display(const struct device *dev,
351 const struct mipi_dbi_config *config,
352 const uint8_t *framebuf,
353 struct display_buffer_descriptor *desc,
354 enum display_pixel_format pixfmt)
355{
356 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
357
358 if (api->write_display == NULL) {
359 return -ENOSYS;
360 }
361 return api->write_display(dev, config, framebuf, desc, pixfmt);
362}
363
375static inline int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
376{
377 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
378
379 if (api->reset == NULL) {
380 return -ENOSYS;
381 }
382 return api->reset(dev, K_MSEC(delay_ms));
383}
384
402static inline int mipi_dbi_release(const struct device *dev,
403 const struct mipi_dbi_config *config)
404{
405 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
406
407 if (api->release == NULL) {
408 return -ENOSYS;
409 }
410 return api->release(dev, config);
411}
412
439static inline int mipi_dbi_configure_te(const struct device *dev,
440 uint8_t edge,
441 uint32_t delay_us)
442{
443 const struct mipi_dbi_driver_api *api = DEVICE_API_GET(mipi_dbi, dev);
444
445 if (api->configure_te == NULL) {
446 return -ENOSYS;
447 }
448 return api->configure_te(dev, edge, K_USEC(delay_us));
449}
450
451#ifdef __cplusplus
452}
453#endif
454
458
459#endif /* ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_ */
APIs and macros for the Zephyr device model.
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1486
Main header file for display driver API.
Main header file for SPI (Serial Peripheral Interface) driver API.
#define K_MSEC(ms)
Generate timeout delay from milliseconds.
Definition kernel.h:1666
#define K_USEC(t)
Generate timeout delay from microseconds.
Definition kernel.h:1630
display_pixel_format
Display pixel formats.
Definition display.h:49
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
int(* mipi_dbi_release_t)(const struct device *dev, const struct mipi_dbi_config *config)
Callback API to release a locked MIPI DBI device.
Definition mipi_dbi.h:227
int(* mipi_dbi_configure_te_t)(const struct device *dev, uint8_t edge, k_timeout_t delay)
Callback API to configure the MIPI DBI tearing effect signal.
Definition mipi_dbi.h:233
int(* mipi_dbi_reset_t)(const struct device *dev, k_timeout_t delay)
Callback API to reset the attached display controller.
Definition mipi_dbi.h:221
int(* mipi_dbi_command_write_t)(const struct device *dev, const struct mipi_dbi_config *config, uint8_t cmd, const uint8_t *data, size_t len)
Callback API to write a command to the display controller.
Definition mipi_dbi.h:195
int(* mipi_dbi_command_read_t)(const struct device *dev, const struct mipi_dbi_config *config, uint8_t *cmds, size_t num_cmds, uint8_t *response, size_t len)
Callback API to read a command response from the display controller.
Definition mipi_dbi.h:203
int(* mipi_dbi_write_display_t)(const struct device *dev, const struct mipi_dbi_config *config, const uint8_t *framebuf, struct display_buffer_descriptor *desc, enum display_pixel_format pixfmt)
Callback API to write a display buffer to the display controller.
Definition mipi_dbi.h:211
static int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
Resets attached display controller.
Definition mipi_dbi.h:375
static int mipi_dbi_write_display(const struct device *dev, const struct mipi_dbi_config *config, const uint8_t *framebuf, struct display_buffer_descriptor *desc, enum display_pixel_format pixfmt)
Write a display buffer to the display controller.
Definition mipi_dbi.h:350
static int mipi_dbi_configure_te(const struct device *dev, uint8_t edge, uint32_t delay_us)
Configures MIPI DBI tearing effect signal.
Definition mipi_dbi.h:439
static int mipi_dbi_command_write(const struct device *dev, const struct mipi_dbi_config *config, uint8_t cmd, const uint8_t *data, size_t len)
Write a command to the display controller.
Definition mipi_dbi.h:288
static int mipi_dbi_release(const struct device *dev, const struct mipi_dbi_config *config)
Releases a locked MIPI DBI device.
Definition mipi_dbi.h:402
static int mipi_dbi_command_read(const struct device *dev, const struct mipi_dbi_config *config, uint8_t *cmds, size_t num_cmd, uint8_t *response, size_t len)
Read a command response from the display controller.
Definition mipi_dbi.h:318
#define ENOSYS
Function not implemented.
Definition errno.h:83
Display definitions for MIPI devices.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:543
Structure to describe display data buffer layout.
Definition display.h:373
Kernel timeout type.
Definition clock.h:65
MIPI DBI controller configuration.
Definition mipi_dbi.h:182
uint8_t mode
MIPI DBI mode.
Definition mipi_dbi.h:184
struct spi_config config
SPI configuration.
Definition mipi_dbi.h:188
uint8_t color_coding
MIPI DBI color coding for Type A or Type B(6800/8080) interface.
Definition mipi_dbi.h:186
<span class="mlabel">Driver Operations</span> MIPI-DBI driver operations
Definition mipi_dbi.h:238
mipi_dbi_write_display_t write_display
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:250
mipi_dbi_command_write_t command_write
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:242
mipi_dbi_reset_t reset
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:254
mipi_dbi_command_read_t command_read
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:246
mipi_dbi_configure_te_t configure_te
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:262
mipi_dbi_release_t release
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition mipi_dbi.h:258
SPI controller configuration structure.
Definition spi.h:449