DRM私有属性
及接口说明
1. 客制化properties¶
1.1. CRTC¶
Name | type | Description | R/W |
---|---|---|---|
preferred | range | 在DTS中设置的值,app优先选择带有preferred 属性的CRTC |
R |
1.2. Plane¶
Name | type | Description | R/W |
---|---|---|---|
sstar type | enum | Plane所在的layer,GOP UI/Cursor或MOPG、MOPS | R |
colorkey | range | 通过这个property设置colorkey,只有sstar type 为GOP的plane会带这个property |
R/W |
mop_layer_id | range | MOPG/S的layerid,当使用mop merge功能时通过这个ID来确认plane所属的layer | R |
realtime_mode | range | 是否使用realtime mode,设置此属性的话创建mop layer时将选择realtime模式,用于接收前级HVP的输出。可在dts中设置disp是否支持realtime mode,支持的话该disp上的某个sstar type 为MOPS的plane将带有这个property |
R/W |
1.3. Connector¶
Name | type | Description | R/W |
---|---|---|---|
preferred | range | 在DTS中设置的值,app优先选择带有preferred 属性的Connector |
R |
backlight brightness | range | 背光亮度,通过此property设置屏的背光亮度 | R/W |
2. 客制化modifiers¶
User通过modifier
设置一张framebuffer
的属性,kernel中原生已定义了一些modifier(如ARM的afbc压缩的格式AFBC_FORMAT_MOD_YTR
等)。各个厂商可按照这套模式定义自己的modifier,为了支持MOP特有的tile mode
跟compress mode
功能我们定义了一些私有的modifier,客户使用时需include我们的头文件sstar_drm.h
。这里将新增的modifier列举如下:
Vendor code:
#deifne DRM_FORMAT_MOD_VENDOR_SSTAR 0x0b
Mode | Option |
---|---|
Tile mode | SSTAR_MOP_TILE_MODE_16x16SSTAR_MOP_TILE_MODE_16x32SSTAR_MOP_TILE_MODE_32x16SSTAR_MOP_TILE_MODE_32x32 |
Compress mode | SSTAR_MOP_COMPRESS_MODE_SEGSSTAR_MOP_COMPRESS_MODE_LINESSTAR_MOP_COMPRESS_MODE_FRAMESSTAR_MOP_COMPRESS_MODE_TO_8BITSSTAR_MOP_COMPRESS_MODE_TO_6BITSSTAR_MOP_COMPRESS_MODE_IFCSSTAR_MOP_COMPRESS_MODE_SFBC0SSTAR_MOP_COMPRESS_MODE__SFBC1SSTAR_MOP_COMPRESS_MODE__SFBC2SSTAR_MOP_COMPRESS_MODE_BUTT |
3. 客制化IOCTL接口¶
-
IOCTL定义
#define DRM_SSTAR_TUNNEL_UPDATE 0x00 #define DRM_SSTAR_SET_SSC 0x01 #define DRM_SSTAR_LOAD_PQ 0x02 #define DRM_SSTAR_SET_COLOR_TEMPETURE 0x03 #define DRM_SSTAR_OUTPUT_PARAM 0x04 #define DRM_IOCTL_SSTAR_TUNNEL_UPDATE \ DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_TUNNEL_UPDATE, struct drm_sstar_tunnel_update) #define DRM_IOCTL_SSTAR_SET_SSC DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_SET_SSC, struct drm_sstar_set_ssc) #define DRM_IOCTL_SSTAR_LOAD_PQ DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_LOAD_PQ, struct drm_sstar_load_pq) #define DRM_IOCTL_SSTAR_SET_COLOR_TEMPETURE \ DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_SET_COLOR_TEMPETURE, struct drm_sstar_set_color_tempeture) #define DRM_IOCTL_SSTAR_OUTPUT_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_OUTPUT_PARAM, struct drm_sstar_output_param)
-
相应的数据结构定义
///< Define sstar op type typedef enum { SSTAR_OP_GET = 0, SSTAR_OP_SET = 1, } SSTAR_OP_T; struct drm_sstar_tunnel_update { // fenceId / buffer address ... uint32_t crtcId; uint32_t planeId; }; struct drm_sstar_set_ssc { bool bEn; ///< 1 : enable, 0 : disalbe uint32_t crtcId; ///< crtc id uint16_t step; ///< step of SSC uint16_t span; ///< span of SSC }; ///< Define the flag of PQ typedef enum { SSTAR_PQ_FLAG_NONE = 0x0000, ///< No action SSTAR_PQ_FLAG_LOAD_BIN = 0x0001, ///< Load binary file SSTAR_PQ_FLAG_SET_SRC_ID = 0x0002, ///< Set source ID SSTAR_PQ_FLAG_PROCESS = 0x0003, ///< Aplly PQ Setting SSTAR_PQ_FLAG_SET_LOAD_SETTING_TYPE = 0x0004, ///< Set load type SSTAR_PQ_FLAG_FREE_BIN = 0x0005, ///< Free binary file SSTAR_PQ_FLAG_BYPASS = 0x0006, ///< OFF device pq setting. } SSTAR_PQFLAG_E; struct drm_sstar_load_pq { uint32_t crtcId; ///< crtc id SSTAR_PQFLAG_E pqFlags; ///< The flag of pq action uint32_t dataSize; ///< size of PQ binary uint64_t data; ///< Data of PQ binary }; struct drm_sstar_set_color_tempeture { uint32_t crtcId; ///< crtc id uint16_t redOffset; ///< Offset of color R uint16_t greenOffset; ///< Offset of color G uint16_t blueOffset; ///< Offset of color B uint16_t redColor; ///< Gain of Color R uint16_t greenColor; ///< Gain of Color G uint16_t blueColor; ///< Gain of Color B }; ///< Define CSC matrix type typedef enum { SSTAR_CSC_MATRIX_BYPASS = 0, ///< Do not change color space SSTAR_CSC_MATRIX_BT601_TO_BT709, ///< Change color space from BT.601 to BT.709 SSTAR_CSC_MATRIX_BT709_TO_BT601, ///< Change color space from BT.709 to BT.601 SSTAR_CSC_MATRIX_BT601_TO_RGB_PC, ///< Change color space from BT.601 to RGB SSTAR_CSC_MATRIX_BT709_TO_RGB_PC, ///< Change color space from BT.709 to RGB SSTAR_CSC_MATRIX_RGB_TO_BT601_PC, ///< Change color space from RGB to BT.601 SSTAR_CSC_MATRIX_RGB_TO_BT709_PC, ///< Change color space from RGB to BT.709 SSTAR_CSC_MATRIX_USER, SSTAR_CSC_MATRIX_MAX } SSTAR_CSC_MATRIX_E; ///< Define color space transform inforamtion typedef struct { SSTAR_CSC_MATRIX_E cscMatrix; ///< CSC matrix type uint32_t luma; ///< Adjustment of luminance, Range: 0 ~ 100 uint32_t contrast; ///< Adjustment of contrast, Range: 0 ~ 100 uint32_t hue; ///< Adjustment of Hue, Range: 0 ~ 100 uint32_t saturation; ///< Adjustment of saturation, Range: 0 ~ 100 } SSTAR_CSC_T; struct drm_sstar_output_param { uint32_t crtcId; ///< crtc id uint32_t connectorId; ///< connector id SSTAR_OP_T op; ///< get or set parameter SSTAR_CSC_T csc; ///< Adjustment of CSC uint32_t sharpness; ///< Adjustment of sharpness uint32_t gain; ///< Adjustment of driving current, only for VGA };