Zephyr API 3.6.99
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#ifndef ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_
22#define ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_
23
33#include <zephyr/device.h>
36#include <zephyr/drivers/spi.h>
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
54#define MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_) \
55 { \
56 .frequency = DT_PROP(node_id, mipi_max_frequency), \
57 .operation = (operation_) | \
58 DT_PROP_OR(node_id, duplex, 0) | \
59 COND_CODE_1(DT_PROP(node_id, mipi_cpol), SPI_MODE_CPOL, (0)) | \
60 COND_CODE_1(DT_PROP(node_id, mipi_cpha), SPI_MODE_CPHA, (0)) | \
61 COND_CODE_1(DT_PROP(node_id, mipi_hold_cs), SPI_HOLD_ON_CS, (0)), \
62 .slave = DT_REG_ADDR(node_id), \
63 .cs = { \
64 .gpio = GPIO_DT_SPEC_GET_BY_IDX_OR(DT_PHANDLE(DT_PARENT(node_id), \
65 spi_dev), cs_gpios, \
66 DT_REG_ADDR(node_id), \
67 {}), \
68 .delay = (delay_), \
69 }, \
70 }
71
82#define MIPI_DBI_SPI_CONFIG_DT_INST(inst, operation_, delay_) \
83 MIPI_DBI_SPI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
84
97#define MIPI_DBI_CONFIG_DT(node_id, operation_, delay_) \
98 { \
99 .mode = DT_PROP(node_id, mipi_mode), \
100 .config = MIPI_DBI_SPI_CONFIG_DT(node_id, operation_, delay_), \
101 }
102
112#define MIPI_DBI_CONFIG_DT_INST(inst, operation_, delay_) \
113 MIPI_DBI_CONFIG_DT(DT_DRV_INST(inst), operation_, delay_)
114
126
127
129__subsystem struct mipi_dbi_driver_api {
130 int (*command_write)(const struct device *dev,
131 const struct mipi_dbi_config *config, uint8_t cmd,
132 const uint8_t *data, size_t len);
133 int (*command_read)(const struct device *dev,
134 const struct mipi_dbi_config *config, uint8_t *cmds,
135 size_t num_cmds, uint8_t *response, size_t len);
136 int (*write_display)(const struct device *dev,
137 const struct mipi_dbi_config *config,
138 const uint8_t *framebuf,
139 struct display_buffer_descriptor *desc,
140 enum display_pixel_format pixfmt);
141 int (*reset)(const struct device *dev, k_timeout_t delay);
142 int (*release)(const struct device *dev,
143 const struct mipi_dbi_config *config);
144};
145
166static inline int mipi_dbi_command_write(const struct device *dev,
167 const struct mipi_dbi_config *config,
168 uint8_t cmd, const uint8_t *data,
169 size_t len)
170{
171 const struct mipi_dbi_driver_api *api =
172 (const struct mipi_dbi_driver_api *)dev->api;
173
174 if (api->command_write == NULL) {
175 return -ENOSYS;
176 }
177 return api->command_write(dev, config, cmd, data, len);
178}
179
197static inline int mipi_dbi_command_read(const struct device *dev,
198 const struct mipi_dbi_config *config,
199 uint8_t *cmds, size_t num_cmd,
200 uint8_t *response, size_t len)
201{
202 const struct mipi_dbi_driver_api *api =
203 (const struct mipi_dbi_driver_api *)dev->api;
204
205 if (api->command_read == NULL) {
206 return -ENOSYS;
207 }
208 return api->command_read(dev, config, cmds, num_cmd, response, len);
209}
210
230static inline int mipi_dbi_write_display(const struct device *dev,
231 const struct mipi_dbi_config *config,
232 const uint8_t *framebuf,
233 struct display_buffer_descriptor *desc,
234 enum display_pixel_format pixfmt)
235{
236 const struct mipi_dbi_driver_api *api =
237 (const struct mipi_dbi_driver_api *)dev->api;
238
239 if (api->write_display == NULL) {
240 return -ENOSYS;
241 }
242 return api->write_display(dev, config, framebuf, desc, pixfmt);
243}
244
256static inline int mipi_dbi_reset(const struct device *dev, uint32_t delay_ms)
257{
258 const struct mipi_dbi_driver_api *api =
259 (const struct mipi_dbi_driver_api *)dev->api;
260
261 if (api->reset == NULL) {
262 return -ENOSYS;
263 }
264 return api->reset(dev, K_MSEC(delay_ms));
265}
266
284static inline int mipi_dbi_release(const struct device *dev,
285 const struct mipi_dbi_config *config)
286{
287 const struct mipi_dbi_driver_api *api =
288 (const struct mipi_dbi_driver_api *)dev->api;
289
290 if (api->release == NULL) {
291 return -ENOSYS;
292 }
293 return api->release(dev, config);
294}
295
296#ifdef __cplusplus
297}
298#endif
299
304#endif /* ZEPHYR_INCLUDE_DRIVERS_MIPI_DBI_H_ */
Public API for display drivers and applications.
Public API for SPI drivers and applications.
#define K_MSEC(ms)
Generate timeout delay from milliseconds.
Definition kernel.h:1394
display_pixel_format
Display pixel formats.
Definition display.h:42
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:256
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:230
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:166
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:284
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:197
#define ENOSYS
Function not implemented.
Definition errno.h:82
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:403
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:409
Structure to describe display data buffer layout.
Definition display.h:121
Kernel timeout type.
Definition sys_clock.h:65
MIPI DBI controller configuration.
Definition mipi_dbi.h:120
uint8_t mode
MIPI DBI mode (SPI 3 wire or 4 wire)
Definition mipi_dbi.h:122
struct spi_config config
SPI configuration.
Definition mipi_dbi.h:124
MIPI-DBI host driver API.
Definition mipi_dbi.h:129
int(* reset)(const struct device *dev, k_timeout_t delay)
Definition mipi_dbi.h:141
int(* release)(const struct device *dev, const struct mipi_dbi_config *config)
Definition mipi_dbi.h:142
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:133
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:130
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:136
SPI controller configuration structure.
Definition spi.h:301