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