blob: 7d691e7a1096dad0ecc376d260d13c2850f5d0e6 [file] [log] [blame]
limin.tian20df7d42023-02-10 10:05:52 +08001/*
2 * Copyright (c) 2021 Amlogic, Inc. All rights reserved.
3 *
4 * This source code is subject to the terms and conditions defined in the
5 * file 'LICENSE' which is part of this source code package.
6 *
7 * Description:
8 */
limin.tian20df7d42023-02-10 10:05:52 +08009#ifndef MESON_DRM_SETTINGS_H_
10#define MESON_DRM_SETTINGS_H_
11#include <stdio.h>
12#include <stdint.h>
13#include <stdlib.h>
14#include <unistd.h>
15#include <stdbool.h>
16#include <xf86drmMode.h>
17#if defined(__cplusplus)
18extern "C" {
19#endif
20#define DRM_DISPLAY_MODE_LEN 32
21
chen.wang18a2a9162023-12-28 11:50:16 +000022typedef enum _MESON_DRM_FORCE_MODE {
23 MESON_DRM_UNKNOWN_FMT = 0,
24 MESON_DRM_BT709,
25 MESON_DRM_BT2020,
26 MESON_DRM_BT2020_PQ,
27 MESON_DRM_BT2020_PQ_DYNAMIC,
28 MESON_DRM_BT2020_HLG,
29 MESON_DRM_BT2100_IPT,
30 MESON_DRM_BT2020YUV_BT2020RGB_CUVA,
31 MESON_DRM_BT_BYPASS
32} ENUM_MESON_DRM_FORCE_MODE;
33
34typedef enum _ENUM_MESON_DRM_PROP_NAME {
35 ENUM_MESON_DRM_PROP_CONTENT_PROTECTION = 0,
36 ENUM_MESON_DRM_PROP_HDR_POLICY,
37 ENUM_MESON_DRM_PROP_HDMI_ENABLE,
38 ENUM_MESON_DRM_PROP_COLOR_SPACE,
39 ENUM_MESON_DRM_PROP_COLOR_DEPTH,
40 ENUM_MESON_DRM_PROP_HDCP_VERSION,
41 ENUM_MESON_DRM_PROP_DOLBY_VISION_ENABLE,
42 ENUM_MESON_DRM_PROP_ACTIVE,
43 ENUM_MESON_DRM_PROP_VRR_ENABLED,
44 ENUM_MESON_DRM_PROP_ASPECT_RATIO,
45 ENUM_MESON_DRM_PROP_TX_HDR_OFF,
46 ENUM_MESON_DRM_PROP_DV_MODE
47} ENUM_MESON_DRM_PROP_NAME;
chen.wang17a8264c2023-11-17 08:39:21 +000048
chen.wang133a5c832023-07-12 04:23:36 +000049struct video_zpos {
50 unsigned int index;//<--Representing video index Index 0 corresponds to modifying video 0;Index 1 corresponds to modifying video 1-->//
51 unsigned int zpos; //<--Represents the zorder value set-->//
52 unsigned int flag; //<-- Make the settings effective Set flag equal to 1 to indicate effectiveness-->//
53};
54
chen.wang1c258d832023-10-18 09:28:25 +000055typedef enum _ENUM_MESON_ASPECTRATIO {
56 MESON_ASPECT_RATIO_AUTOMATIC =0,
57 MESON_ASPECT_RATIO_4_3,
58 MESON_ASPECT_RATIO_16_9,
59 MESON_ASPECT_RATIO_RESERVED
60} ENUM_MESON_ASPECT_RATIO;
61
chen.wang154f11d52023-04-14 07:56:49 +000062typedef enum _MESON_CONTENT_TYPE {
63 MESON_CONTENT_TYPE_Data = 0,
64 MESON_CONTENT_TYPE_Graphics,
65 MESON_CONTENT_TYPE_Photo,
66 MESON_CONTENT_TYPE_Cinema,
67 MESON_CONTENT_TYPE_Game,
68 MESON_CONTENT_TYPE_RESERVED
69} MESON_CONTENT_TYPE;
70
71/*HDCP transmission time divided into Type0&Type1 content*/
72typedef enum _ENUM_MESON_HDCP_Content_Type{
73 MESON_HDCP_Type0 = 0, //Type0 represents support for both 1.4 and 2.2
74 MESON_HDCP_Type1, //Type1 represents only support for 2.2
75 MESON_HDCP_Type_RESERVED
76} ENUM_MESON_HDCP_Content_Type;
77
limin.tian20df7d42023-02-10 10:05:52 +080078typedef enum {
79 MESON_DISCONNECTED = 0,
80 MESON_CONNECTED = 1,
81 MESON_UNKNOWNCONNECTION = 2
82} ENUM_MESON_CONN_CONNECTION;
83
84typedef struct _DisplayMode {
chen.wang154f11d52023-04-14 07:56:49 +000085 uint16_t w; //<--Number of horizontal pixels in the effective display area-->//
86 uint16_t h; //<--Number of vertical pixels in the effective display area-->//
87 uint32_t vrefresh; //<--Display refresh rate--->//
88 bool interlace; //<--Indicates which scanning form to choose, P represents progressive scanning, and i represents interlaced scanning; The default interlace value is 0 for P 1 for i-->//
limin.tian20df7d42023-02-10 10:05:52 +080089 char name[DRM_DISPLAY_MODE_LEN];
90} DisplayMode;
91
92typedef enum _ENUM_MESON_HDR_MODE {
93 MESON_HDR10PLUS = 0,
94 MESON_DOLBYVISION_STD,
95 MESON_DOLBYVISION_LL,
96 MESON_HDR10_ST2084,
97 MESON_HDR10_TRADITIONAL,
98 MESON_HDR_HLG,
99 MESON_SDR
100} ENUM_MESON_HDR_MODE;
101
102typedef enum _ENUM_MESON_CONNECTOR_TYPE {
chen.wang1a175cb02023-08-10 08:39:05 +0000103 MESON_CONNECTOR_HDMIA = 0,
limin.tian20df7d42023-02-10 10:05:52 +0800104 MESON_CONNECTOR_HDMIB,
105 MESON_CONNECTOR_LVDS,
106 MESON_CONNECTOR_CVBS,
chen.wang1a175cb02023-08-10 08:39:05 +0000107 MESON_CONNECTOR_DUMMY,
limin.tian20df7d42023-02-10 10:05:52 +0800108 MESON_CONNECTOR_RESERVED
109} MESON_CONNECTOR_TYPE;
110
111typedef enum _ENUM_MESON_COLOR_SPACE {
112 MESON_COLOR_SPACE_RGB = 0,
113 MESON_COLOR_SPACE_YCBCR422,
114 MESON_COLOR_SPACE_YCBCR444,
115 MESON_COLOR_SPACE_YCBCR420,
116 MESON_COLOR_SPACE_RESERVED
117} ENUM_MESON_COLOR_SPACE;
118
119typedef enum _ENUM_MESON_HDCP_VERSION {
120 MESON_HDCP_14 = 0,
121 MESON_HDCP_22,
122 MESON_HDCP_RESERVED
123} ENUM_MESON_HDCP_VERSION;
124
125typedef enum _ENUM_MESON_HDR_POLICY {
126 MESON_HDR_POLICY_FOLLOW_SINK = 0,
chen.wang18a2a9162023-12-28 11:50:16 +0000127 MESON_HDR_POLICY_FOLLOW_SOURCE,
128 MESON_HDR_POLICY_FOLLOW_FORCE_MODE
limin.tian20df7d42023-02-10 10:05:52 +0800129} ENUM_MESON_HDR_POLICY;
130
limin.tianfe2ab442023-03-06 08:40:15 +0000131typedef enum _ENUM_MESON_HDCP_AUTH_STATUS {
132 MESON_AUTH_STATUS_FAIL = 0,
133 MESON_AUTH_STATUS_SUCCESS
134} ENUM_MESON_HDCPAUTH_STATUS;
135
chen.wang154f11d52023-04-14 07:56:49 +0000136int meson_drm_setContentType(int drmFd, drmModeAtomicReq *req,
137 MESON_CONTENT_TYPE contentType, MESON_CONNECTOR_TYPE connType);
138
139int meson_drm_setVrrEnabled(int drmFd, drmModeAtomicReq *req,
140 uint32_t VrrEnable, MESON_CONNECTOR_TYPE connType);
141int meson_drm_getVrrEnabled( int drmFd, MESON_CONNECTOR_TYPE connType );
142
143
144int meson_drm_getActive( int drmFd, MESON_CONNECTOR_TYPE connType );
145
146int meson_drm_setActive(int drmFd, drmModeAtomicReq *req,
147 uint32_t active, MESON_CONNECTOR_TYPE connType);
148
149int meson_drm_getDvEnable( int drmFd, MESON_CONNECTOR_TYPE connType );
150int meson_drm_setDvEnable(int drmFd, drmModeAtomicReq *req,
151 uint32_t dvEnable, MESON_CONNECTOR_TYPE connType);
152
153MESON_CONTENT_TYPE meson_drm_getContentType(int drmFd, MESON_CONNECTOR_TYPE connType );
154
155
limin.tian20df7d42023-02-10 10:05:52 +0800156int meson_drm_changeMode(int drmFd, drmModeAtomicReq *req,
157 DisplayMode* modeInfo, MESON_CONNECTOR_TYPE connType);
158int meson_drm_getModeInfo(int drmFd, MESON_CONNECTOR_TYPE connType, DisplayMode* mode );
159
160ENUM_MESON_CONN_CONNECTION meson_drm_getConnectionStatus(int drmFd, MESON_CONNECTOR_TYPE connType);
161ENUM_MESON_HDR_MODE meson_drm_getHdrStatus(int drmFd, MESON_CONNECTOR_TYPE connType );
162ENUM_MESON_HDCP_VERSION meson_drm_getHdcpVersion(int drmFd, MESON_CONNECTOR_TYPE connType );
163ENUM_MESON_COLOR_SPACE meson_drm_getColorSpace(int drmFd, MESON_CONNECTOR_TYPE connType );
164int meson_drm_setColorSpace(int drmFd, drmModeAtomicReq *req,
165 ENUM_MESON_COLOR_SPACE colorSpace, MESON_CONNECTOR_TYPE connType);
166
167uint32_t meson_drm_getColorDepth(int drmFd, MESON_CONNECTOR_TYPE connType );
168int meson_drm_setColorDepth(int drmFd, drmModeAtomicReq *req,
169 uint32_t colorDepth, MESON_CONNECTOR_TYPE connType);
170
171ENUM_MESON_HDR_POLICY meson_drm_getHDRPolicy(int drmFd, MESON_CONNECTOR_TYPE connType );
172int meson_drm_setHDRPolicy(int drmFd, drmModeAtomicReq *req,
173 ENUM_MESON_HDR_POLICY hdrPolicy, MESON_CONNECTOR_TYPE connType);
174
limin.tianfe2ab442023-03-06 08:40:15 +0000175
176void meson_drm_getEDIDData(int drmFd, MESON_CONNECTOR_TYPE connType, int * data_Len, char **data );
177int meson_drm_setAVMute(int drmFd, drmModeAtomicReq *req,
178 bool mute, MESON_CONNECTOR_TYPE connType);
chen.wang154f11d52023-04-14 07:56:49 +0000179int meson_drm_getAVMute( int drmFd, MESON_CONNECTOR_TYPE connType );
180
limin.tianfe2ab442023-03-06 08:40:15 +0000181ENUM_MESON_HDCPAUTH_STATUS meson_drm_getHdcpAuthStatus( int drmFd, MESON_CONNECTOR_TYPE connType );
182int meson_drm_setHDCPEnable(int drmFd, drmModeAtomicReq *req,
chen.wang17a8264c2023-11-17 08:39:21 +0000183 int enable, MESON_CONNECTOR_TYPE connType);
limin.tianfe2ab442023-03-06 08:40:15 +0000184
chen.wang13c3450e2023-08-01 11:07:11 +0000185int meson_drm_getsupportedModesList(int drmFd, DisplayMode** modeInfo, int* modeCount ,MESON_CONNECTOR_TYPE connType);
186int meson_drm_getPreferredMode( DisplayMode* mode, MESON_CONNECTOR_TYPE connType);
chen.wang154f11d52023-04-14 07:56:49 +0000187
188int meson_drm_setHDCPContentType(int drmFd, drmModeAtomicReq *req,
189 ENUM_MESON_HDCP_Content_Type HDCPType, MESON_CONNECTOR_TYPE connType);
190ENUM_MESON_HDCP_Content_Type meson_drm_getHDCPContentType( int drmFd, MESON_CONNECTOR_TYPE connType );
191
192int meson_drm_getHdcpVer( int drmFd, MESON_CONNECTOR_TYPE connType );
193
chen.wang18a2a9162023-12-28 11:50:16 +0000194uint32_t meson_drm_getHdrCap( int drmFd, MESON_CONNECTOR_TYPE connType );
195uint32_t meson_drm_getDvCap( int drmFd, MESON_CONNECTOR_TYPE connType );
chen.wang1c258d832023-10-18 09:28:25 +0000196int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag);
197int meson_drm_setPlaneMute(int drmFd, unsigned int plane_type, unsigned int plane_mute);
198
199ENUM_MESON_ASPECT_RATIO meson_drm_getAspectRatioValue( int drmFd, MESON_CONNECTOR_TYPE connType );
200int meson_drm_setAspectRatioValue(int drmFd, drmModeAtomicReq *req,
201 ENUM_MESON_ASPECT_RATIO ASPECTRATIO, MESON_CONNECTOR_TYPE connType);
chen.wang18a2a9162023-12-28 11:50:16 +0000202int meson_drm_GetCrtcId(MESON_CONNECTOR_TYPE connType);
203int meson_drm_GetConnectorId(MESON_CONNECTOR_TYPE connType);
204char* meson_drm_GetPropName( ENUM_MESON_DRM_PROP_NAME enProp);
205
chen.wang1d5483452024-02-28 06:18:16 +0000206int meson_drm_setFracRatePolicy(int drmFd, drmModeAtomicReq *req, uint32_t FracRate,
chen.wang18a2a9162023-12-28 11:50:16 +0000207 MESON_CONNECTOR_TYPE connType);
208int meson_drm_getFracRatePolicy(int drmFd, MESON_CONNECTOR_TYPE connType);
209int meson_drm_getHdrForceMode(int drmFd, MESON_CONNECTOR_TYPE connType);
210int meson_drm_setHdrForceMode(int drmFd, drmModeAtomicReq *req,ENUM_MESON_DRM_FORCE_MODE forcemode,
211 MESON_CONNECTOR_TYPE connType);
212int meson_drm_setDvMode(int drmFd, drmModeAtomicReq *req, int dvMode, MESON_CONNECTOR_TYPE connType);
chen.wang1dca6a4f2024-03-14 11:50:08 +0000213int meson_drm_getDvMode( int drmFd, MESON_CONNECTOR_TYPE connType );
chen.wang18a2a9162023-12-28 11:50:16 +0000214int meson_drm_getGraphicPlaneSize(int drmFd, uint32_t* width, uint32_t* height);
chen.wang1b5930de2024-04-03 08:10:34 +0000215int meson_drm_setBackGroundColor(int drmFd, drmModeAtomicReq *req,uint64_t backgroundColor,
216 MESON_CONNECTOR_TYPE connType);
chen.wang18a2a9162023-12-28 11:50:16 +0000217int meson_drm_getPhysicalSize(int drmFd, uint32_t* width, uint32_t* height, MESON_CONNECTOR_TYPE connType);
chen.wang15f6e4a82024-01-19 06:23:56 +0000218int meson_drm_getSignalTimingInfo(int drmFd, uint16_t* htotal, uint16_t* vtotal, uint16_t* hstart,
219 uint16_t* vstart, MESON_CONNECTOR_TYPE connType);
chen.wang1efb8b802024-03-20 05:40:08 +0000220int meson_drm_getRxSupportedHdcpVersion( int drmFd, MESON_CONNECTOR_TYPE connType );
chen.wang154f11d52023-04-14 07:56:49 +0000221
limin.tian20df7d42023-02-10 10:05:52 +0800222int meson_open_drm();
223void meson_close_drm(int drmFd);
224
225#if defined(__cplusplus)
226}
227#endif
228
229#endif