Zephyr API Documentation 4.3.99
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)
47
48#define MIPI_DBI_SPI_CS_GPIOS_DT_SPEC_GET(node_id) \
49 GPIO_DT_SPEC_GET_BY_IDX_OR(MIPI_DBI_DT_SPI_DEV(node_id), \
50 cs_gpios, DT_REG_ADDR_RAW(node_id), {})
51
52#define MIPI_DBI_SPI_CS_CONTROL_INIT_GPIO(node_id, delay_) \
53 .gpio = MIPI_DBI_SPI_CS_GPIOS_DT_SPEC_GET(node_id), \
54 .delay = delay_,
56
68#define MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_) \
69 { \
70 .frequency = DT_PROP(node_id, mipi_max_frequency), \
71 .operation = (operation_) | \
72 DT_PROP_OR(node_id, duplex, 0) | \
73 COND_CODE_1(DT_PROP(node_id, mipi_cpol), SPI_MODE_CPOL, (0)) | \
74 COND_CODE_1(DT_PROP(node_id, mipi_cpha), SPI_MODE_CPHA, (0)) | \
75 COND_CODE_1(DT_PROP(node_id, mipi_hold_cs), SPI_HOLD_ON_CS, (0)), \
76 .slave = DT_REG_ADDR(node_id), \
77 .cs = { \
78 COND_CODE_1(DT_SPI_HAS_CS_GPIOS(MIPI_DBI_DT_SPI_DEV(node_id)), \
79 (MIPI_DBI_SPI_CS_CONTROL_INIT_GPIO(node_id, delay_)), \
80 (SPI_CS_CONTROL_INIT_NATIVE(node_id))) \
81 .cs_is_gpio = DT_SPI_HAS_CS_GPIOS(MIPI_DBI_DT_SPI_DEV(node_id)),\
82 }, \
83 }
84
95#define MIPI_DBI_SPI_CONFIG_DT_INST(inst, operation_, delay_) \
96 MIPI_DBI_SPI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
97
110#define MIPI_DBI_CONFIG_DT(node_id, operation_, delay_) \
111 { \
112 .mode = DT_STRING_UPPER_TOKEN(node_id, mipi_mode), \
113 .config = MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_), \
114 }
115
125#define MIPI_DBI_CONFIG_DT_INST(inst, operation_, delay_) \
126 MIPI_DBI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
127
137#define MIPI_DBI_TE_MODE_DT(node_id, edge_prop) \
138 DT_STRING_UPPER_TOKEN(node_id, edge_prop)
139
149#define MIPI_DBI_TE_MODE_DT_INST(inst, edge_prop) \
150 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), edge_prop)
151
165
166
168__subsystem struct mipi_dbi_driver_api {
169 int (*command_write)(const struct device *dev,
170 const struct mipi_dbi_config *config, uint8_t cmd,
171 const uint8_t *data, size_t len);
172 int (*command_read)(const struct device *dev,
173 const struct mipi_dbi_config *config, uint8_t *cmds,
174 size_t num_cmds, uint8_t *response, size_t len);
175 int (*write_display)(const struct device *dev,
176 const struct mipi_dbi_config *config,
177 const uint8_t *framebuf,
178 struct display_buffer_descriptor *desc,
179 enum display_pixel_format pixfmt);
180 int (*reset)(const struct device *dev, k_timeout_t delay);
181 int (*release)(const struct device *dev,
182 const struct mipi_dbi_config *config);
183 int (*configure_te)(const struct device *dev,
184 uint8_t edge,
185 k_timeout_t delay);
186};
187
208static inline int mipi_dbi_command_write(const struct device *dev,
209 const struct mipi_dbi_config *config,
210 uint8_t cmd, const uint8_t *data,
211 size_t len)
212{
213 const struct mipi_dbi_driver_api *api =
214 (const struct mipi_dbi_driver_api *)dev->api;
215
216 if (api->command_write == NULL) {
217 return -ENOSYS;
218 }
219 return api->command_write(dev, config, cmd, data, len);
220}
221
239static inline int mipi_dbi_command_read(const struct device *dev,
240 const struct mipi_dbi_config *config,
241 uint8_t *cmds, size_t num_cmd,
242 uint8_t *response, size_t len)
243{
244 const struct mipi_dbi_driver_api *api =
245 (const struct mipi_dbi_driver_api *)dev->api;
246
247 if (api->command_read == NULL) {
248 return -ENOSYS;
249 }
250 return api->command_read(dev, config, cmds, num_cmd, response, len);
251}
252
272static inline int mipi_dbi_write_display(const struct device *dev,
273 const struct mipi_dbi_config *config,
274 const uint8_t *framebuf,
275 struct display_buffer_descriptor *desc,
276 enum display_pixel_format pixfmt)
277{
278 const struct mipi_dbi_driver_api *api =
279 (const struct mipi_dbi_driver_api *)dev->api;
280
281 if (api->write_display == NULL) {
282 return -ENOSYS;
283 }
284 return api->write_display(dev, config, framebuf, desc, pixfmt);
285}
286
298static inline int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
299{
300 const struct mipi_dbi_driver_api *api =
301 (const struct mipi_dbi_driver_api *)dev->api;
302
303 if (api->reset == NULL) {
304 return -ENOSYS;
305 }
306 return api->reset(dev, K_MSEC(delay_ms));
307}
308
326static inline int mipi_dbi_release(const struct device *dev,
327 const struct mipi_dbi_config *config)
328{
329 const struct mipi_dbi_driver_api *api =
330 (const struct mipi_dbi_driver_api *)dev->api;
331
332 if (api->release == NULL) {
333 return -ENOSYS;
334 }
335 return api->release(dev, config);
336}
337
364static inline int mipi_dbi_configure_te(const struct device *dev,
365 uint8_t edge,
366 uint32_t delay_us)
367{
368 const struct mipi_dbi_driver_api *api =
369 (const struct mipi_dbi_driver_api *)dev->api;
370
371 if (api->configure_te == NULL) {
372 return -ENOSYS;
373 }
374 return api->configure_te(dev, edge, K_USEC(delay_us));
375}
376
377#ifdef __cplusplus
378}
379#endif
380
384
385#endif /* ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_ */
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:1620
#define K_USEC(t)
Generate timeout delay from microseconds.
Definition kernel.h:1584
display_pixel_format
Display pixel formats.
Definition display.h:48
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
static int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
Resets attached display controller.
Definition mipi_dbi.h:298
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:272
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:364
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:208
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:326
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:239
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
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:513
void * data
Address of the device instance private data.
Definition device.h:523
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
const void * config
Address of device instance config information.
Definition device.h:517
Structure to describe display data buffer layout.
Definition display.h:152
Kernel timeout type.
Definition clock.h:65
MIPI DBI controller configuration.
Definition mipi_dbi.h:157
uint8_t mode
MIPI DBI mode.
Definition mipi_dbi.h:159
struct spi_config config
SPI configuration.
Definition mipi_dbi.h:163
uint8_t color_coding
MIPI DBI color coding for Type A or Type B(6800/8080) interface.
Definition mipi_dbi.h:161
MIPI-DBI host driver API.
Definition mipi_dbi.h:168
int(* reset)(const struct device *dev, k_timeout_t delay)
Definition mipi_dbi.h:180
int(* release)(const struct device *dev, const struct mipi_dbi_config *config)
Definition mipi_dbi.h:181
int(* command_read)(const struct device *dev, const struct mipi_dbi_config *config, uint8_t *cmds, size_t num_cmds, uint8_t *response, size_t len)
Definition mipi_dbi.h:172
int(* command_write)(const struct device *dev, const struct mipi_dbi_config *config, uint8_t cmd, const uint8_t *data, size_t len)
Definition mipi_dbi.h:169
int(* 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)
Definition mipi_dbi.h:175
int(* configure_te)(const struct device *dev, uint8_t edge, k_timeout_t delay)
Definition mipi_dbi.h:183
SPI controller configuration structure.
Definition spi.h:438