xref: /openbsd-src/sys/dev/pci/drm/include/drm/drm_mipi_dsi.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1 /* Public domain. */
2 
3 #ifndef _DRM_MIPI_DSI_H_
4 #define _DRM_MIPI_DSI_H_
5 
6 #include <sys/types.h>
7 #include <linux/errno.h>
8 #include <linux/types.h>
9 
10 struct mipi_dsi_host;
11 struct mipi_dsi_device;
12 struct mipi_dsi_msg;
13 struct drm_dsc_picture_parameter_set;
14 
15 struct mipi_dsi_host_ops {
16 	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
17 	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
18 	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
19 };
20 
21 struct mipi_dsi_host {
22 	const struct mipi_dsi_host_ops *ops;
23 };
24 
25 struct mipi_dsi_device {
26 	struct mipi_dsi_host *host;
27 	uint32_t channel;
28 	uint32_t mode_flags;
29 #define MIPI_DSI_MODE_LPM	(1 << 0)
30 };
31 
32 struct mipi_dsi_msg {
33 	uint8_t type;
34 	uint8_t channel;
35 	uint16_t flags;
36 #define MIPI_DSI_MSG_USE_LPM	(1 << 0)
37 	const void *tx_buf;
38 	size_t tx_len;
39 	uint8_t *rx_buf;
40 	size_t rx_len;
41 };
42 
43 struct mipi_dsi_packet {
44 	size_t size;
45 	size_t payload_length;
46 	uint8_t	header[4];
47 	const uint8_t *payload;
48 };
49 
50 enum mipi_dsi_dcs_tear_mode {
51 	MIPI_DSI_DCS_TEAR_MODE_UNUSED
52 };
53 
54 enum mipi_dsi_pixel_format {
55 	MIPI_DSI_FMT_RGB888,
56 	MIPI_DSI_FMT_RGB666,
57 	MIPI_DSI_FMT_RGB666_PACKED,
58 	MIPI_DSI_FMT_RGB565,
59 };
60 
61 int mipi_dsi_attach(struct mipi_dsi_device *);
62 int mipi_dsi_create_packet(struct mipi_dsi_packet *,
63     const struct mipi_dsi_msg *);
64 ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *, const void *, size_t);
65 ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *, const void *,
66     size_t);
67 ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *, u8, void *, size_t);
68 ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *, u8, const void *, size_t);
69 int mipi_dsi_dcs_nop(struct mipi_dsi_device *);
70 int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *, u16);
71 bool mipi_dsi_packet_format_is_long(u8);
72 ssize_t mipi_dsi_compression_mode(struct mipi_dsi_device *, bool);
73 ssize_t mipi_dsi_picture_parameter_set(struct mipi_dsi_device *,
74     const struct drm_dsc_picture_parameter_set *);
75 
76 static inline int
77 mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt)
78 {
79 	switch (fmt) {
80 	case MIPI_DSI_FMT_RGB888:
81 	case MIPI_DSI_FMT_RGB666:
82 		return 24;
83 	case MIPI_DSI_FMT_RGB666_PACKED:
84 		return 18;
85 	case MIPI_DSI_FMT_RGB565:
86 		return 16;
87 	}
88 	return -EINVAL;
89 }
90 
91 #endif
92