Zephyr API Documentation 4.2.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
55#define MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_) \
56 { \
57 .frequency = DT_PROP(node_id, mipi_max_frequency), \
58 .operation = (operation_) | \
59 DT_PROP_OR(node_id, duplex, 0) | \
60 COND_CODE_1(DT_PROP(node_id, mipi_cpol), SPI_MODE_CPOL, (0)) | \
61 COND_CODE_1(DT_PROP(node_id, mipi_cpha), SPI_MODE_CPHA, (0)) | \
62 COND_CODE_1(DT_PROP(node_id, mipi_hold_cs), SPI_HOLD_ON_CS, (0)), \
63 .slave = DT_REG_ADDR(node_id), \
64 .cs = { \
65 .gpio = GPIO_DT_SPEC_GET_BY_IDX_OR(DT_PHANDLE(DT_PARENT(node_id), \
66 spi_dev), cs_gpios, \
67 DT_REG_ADDR_RAW(node_id), \
68 {}), \
69 .delay = (delay_), \
70 .cs_is_gpio = true, \
71 }, \
72 }
73
84#define MIPI_DBI_SPI_CONFIG_DT_INST(inst, operation_, delay_) \
85 MIPI_DBI_SPI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
86
99#define MIPI_DBI_CONFIG_DT(node_id, operation_, delay_) \
100 { \
101 .mode = DT_STRING_UPPER_TOKEN(node_id, mipi_mode), \
102 .config = MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_), \
103 }
104
114#define MIPI_DBI_CONFIG_DT_INST(inst, operation_, delay_) \
115 MIPI_DBI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
116
126#define MIPI_DBI_TE_MODE_DT(node_id, edge_prop) \
127 DT_STRING_UPPER_TOKEN(node_id, edge_prop)
128
138#define MIPI_DBI_TE_MODE_DT_INST(inst, edge_prop) \
139 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), edge_prop)
140
152
153
155__subsystem struct mipi_dbi_driver_api {
156 int (*command_write)(const struct device *dev,
157 const struct mipi_dbi_config *config, uint8_t cmd,
158 const uint8_t *data, size_t len);
159 int (*command_read)(const struct device *dev,
160 const struct mipi_dbi_config *config, uint8_t *cmds,
161 size_t num_cmds, uint8_t *response, size_t len);
162 int (*write_display)(const struct device *dev,
163 const struct mipi_dbi_config *config,
164 const uint8_t *framebuf,
165 struct display_buffer_descriptor *desc,
166 enum display_pixel_format pixfmt);
167 int (*reset)(const struct device *dev, k_timeout_t delay);
168 int (*release)(const struct device *dev,
169 const struct mipi_dbi_config *config);
170 int (*configure_te)(const struct device *dev,
171 uint8_t edge,
172 k_timeout_t delay);
173};
174
195static inline int mipi_dbi_command_write(const struct device *dev,
196 const struct mipi_dbi_config *config,
197 uint8_t cmd, const uint8_t *data,
198 size_t len)
199{
200 const struct mipi_dbi_driver_api *api =
201 (const struct mipi_dbi_driver_api *)dev->api;
202
203 if (api->command_write == NULL) {
204 return -ENOSYS;
205 }
206 return api->command_write(dev, config, cmd, data, len);
207}
208
226static inline int mipi_dbi_command_read(const struct device *dev,
227 const struct mipi_dbi_config *config,
228 uint8_t *cmds, size_t num_cmd,
229 uint8_t *response, size_t len)
230{
231 const struct mipi_dbi_driver_api *api =
232 (const struct mipi_dbi_driver_api *)dev->api;
233
234 if (api->command_read == NULL) {
235 return -ENOSYS;
236 }
237 return api->command_read(dev, config, cmds, num_cmd, response, len);
238}
239
259static inline int mipi_dbi_write_display(const struct device *dev,
260 const struct mipi_dbi_config *config,
261 const uint8_t *framebuf,
262 struct display_buffer_descriptor *desc,
263 enum display_pixel_format pixfmt)
264{
265 const struct mipi_dbi_driver_api *api =
266 (const struct mipi_dbi_driver_api *)dev->api;
267
268 if (api->write_display == NULL) {
269 return -ENOSYS;
270 }
271 return api->write_display(dev, config, framebuf, desc, pixfmt);
272}
273
285static inline int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
286{
287 const struct mipi_dbi_driver_api *api =
288 (const struct mipi_dbi_driver_api *)dev->api;
289
290 if (api->reset == NULL) {
291 return -ENOSYS;
292 }
293 return api->reset(dev, K_MSEC(delay_ms));
294}
295
313static inline int mipi_dbi_release(const struct device *dev,
314 const struct mipi_dbi_config *config)
315{
316 const struct mipi_dbi_driver_api *api =
317 (const struct mipi_dbi_driver_api *)dev->api;
318
319 if (api->release == NULL) {
320 return -ENOSYS;
321 }
322 return api->release(dev, config);
323}
324
351static inline int mipi_dbi_configure_te(const struct device *dev,
352 uint8_t edge,
353 uint32_t delay_us)
354{
355 const struct mipi_dbi_driver_api *api =
356 (const struct mipi_dbi_driver_api *)dev->api;
357
358 if (api->configure_te == NULL) {
359 return -ENOSYS;
360 }
361 return api->configure_te(dev, edge, K_USEC(delay_us));
362}
363
364#ifdef __cplusplus
365}
366#endif
367
371
372#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:1476
#define K_USEC(t)
Generate timeout delay from microseconds.
Definition kernel.h:1440
display_pixel_format
Display pixel formats.
Definition display.h:43
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:285
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:259
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:351
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:195
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:313
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:226
#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:510
void * data
Address of the device instance private data.
Definition device.h:520
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
const void * config
Address of device instance config information.
Definition device.h:514
Structure to describe display data buffer layout.
Definition display.h:147
Kernel timeout type.
Definition clock.h:65
MIPI DBI controller configuration.
Definition mipi_dbi.h:146
uint8_t mode
MIPI DBI mode.
Definition mipi_dbi.h:148
struct spi_config config
SPI configuration.
Definition mipi_dbi.h:150
MIPI-DBI host driver API.
Definition mipi_dbi.h:155
int(* reset)(const struct device *dev, k_timeout_t delay)
Definition mipi_dbi.h:167
int(* release)(const struct device *dev, const struct mipi_dbi_config *config)
Definition mipi_dbi.h:168
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:159
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:156
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:162
int(* configure_te)(const struct device *dev, uint8_t edge, k_timeout_t delay)
Definition mipi_dbi.h:170
SPI controller configuration structure.
Definition spi.h:438