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 bool attached;
31 };
32
33 struct mipi_dsi_msg {
34 uint8_t type;
35 uint8_t channel;
36 uint16_t flags;
37 #define MIPI_DSI_MSG_USE_LPM (1 << 0)
38 const void *tx_buf;
39 size_t tx_len;
40 uint8_t *rx_buf;
41 size_t rx_len;
42 };
43
44 struct mipi_dsi_packet {
45 size_t size;
46 size_t payload_length;
47 uint8_t header[4];
48 const uint8_t *payload;
49 };
50
51 enum mipi_dsi_dcs_tear_mode {
52 MIPI_DSI_DCS_TEAR_MODE_UNUSED
53 };
54
55 enum mipi_dsi_pixel_format {
56 MIPI_DSI_FMT_RGB888,
57 MIPI_DSI_FMT_RGB666,
58 MIPI_DSI_FMT_RGB666_PACKED,
59 MIPI_DSI_FMT_RGB565,
60 };
61
62 int mipi_dsi_attach(struct mipi_dsi_device *);
63 int mipi_dsi_create_packet(struct mipi_dsi_packet *,
64 const struct mipi_dsi_msg *);
65 ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *, const void *, size_t);
66 ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *, const void *,
67 size_t);
68 ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *, u8, void *, size_t);
69 ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *, u8, const void *, size_t);
70 int mipi_dsi_dcs_nop(struct mipi_dsi_device *);
71 int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *, u16);
72 bool mipi_dsi_packet_format_is_long(u8);
73 int mipi_dsi_compression_mode(struct mipi_dsi_device *, bool);
74 int mipi_dsi_picture_parameter_set(struct mipi_dsi_device *,
75 const struct drm_dsc_picture_parameter_set *);
76
77 static inline int
mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt)78 mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt)
79 {
80 switch (fmt) {
81 case MIPI_DSI_FMT_RGB888:
82 case MIPI_DSI_FMT_RGB666:
83 return 24;
84 case MIPI_DSI_FMT_RGB666_PACKED:
85 return 18;
86 case MIPI_DSI_FMT_RGB565:
87 return 16;
88 }
89 return -EINVAL;
90 }
91
92 #endif
93