diff options
Diffstat (limited to 'src/include/device/mipi_panel.h')
-rw-r--r-- | src/include/device/mipi_panel.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/include/device/mipi_panel.h b/src/include/device/mipi_panel.h new file mode 100644 index 0000000000..95fcb69633 --- /dev/null +++ b/src/include/device/mipi_panel.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __DEVICE_MIPI_PANEL_H__ +#define __DEVICE_MIPI_PANEL_H__ + +#include <edid.h> +#include <types.h> + +/* Definitions for cmd in panel_init_command */ +enum panel_init_cmd { + PANEL_CMD_END = 0, + PANEL_CMD_DELAY = 1, + PANEL_CMD_GENERIC = 2, + PANEL_CMD_DCS = 3, +}; + +struct panel_init_command { + u8 cmd; + u8 len; + u8 data[]; +}; + +/* + * The data to be serialized and put into CBFS. + * Note some fields, for example edid.mode.name, were actually pointers and + * cannot be really serialized. + */ +struct panel_serializable_data { + struct edid edid; /* edid info of this panel */ + enum lb_fb_orientation orientation; /* Panel orientation */ + u8 init[]; /* A packed array of panel_init_command */ +}; + +typedef cb_err_t (*mipi_cmd_func_t)(enum panel_init_cmd cmd, const u8 *data, u8 len); + +/* Parse a command array and call cmd_func() for each entry. Delays get handled internally. */ +cb_err_t mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_func); + +#define PANEL_DCS(...) \ + PANEL_CMD_DCS, \ + sizeof((u8[]){__VA_ARGS__}), \ + __VA_ARGS__ + +#define PANEL_GENERIC(...) \ + PANEL_CMD_GENERIC, \ + sizeof((u8[]){__VA_ARGS__}), \ + __VA_ARGS__ + +#define PANEL_DELAY(delay) \ + PANEL_CMD_DELAY, \ + delay + +#define PANEL_END \ + PANEL_CMD_END + +#endif /* __DEVICE_MIPI_PANEL_H__ */ |