blob: 830c32064d965b1e106167b7201c8df7ac39dab2 [file] [log] [blame]
limin.tian79bf2b12023-02-24 10:28:26 +00001 /*
limin.tian75338482022-06-20 09:27:34 +08002 * 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 */
9
10#ifndef MESON_DRM_DISPLAY_H_
11#define MESON_DRM_DISPLAY_H_
12#include <stdio.h>
13#include <stdint.h>
14#include <stdlib.h>
15#include <unistd.h>
16#include <stdbool.h>
17#include <xf86drmMode.h>
18#if defined(__cplusplus)
19extern "C" {
20#endif
21#define DRM_DISPLAY_MODE_LEN 32
22typedef enum
23{
24 HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
25 HDMI_EOTF_SMPTE_ST2084 = 2,
26 HDMI_EOTF_MESON_DOLBYVISION = 18,
27 HDMI_EOTF_MESON_DOLBYVISION_L = 19,
28 HDMI_EOTF_MAX
29
30} ENUM_DRM_HDMITX_PROP_EOTF;
31
32typedef enum {
33 MESON_DRM_DISCONNECTED = 0,
34 MESON_DRM_CONNECTED = 1,
35 MESON_DRM_UNKNOWNCONNECTION = 2
36} ENUM_MESON_DRM_CONNECTION;
37
38typedef enum {
39 MESON_DRM_AR_UNKNOWN = 0,
40 MESON_DRM_AR_4_3 = 1,
41 MESON_DRM_AR_16_9 = 2
42} ENUM_MESON_DRM_ASPECT_RATIO;
43
44typedef enum _ENUM_MESON_DRM_PROP{
45 ENUM_DRM_PROP_HDMI_ENABLE = 0,
46 ENUM_DRM_PROP_HDMITX_EOTF,
47 ENUM_DRM_PROP_CONTENT_PROTECTION,
48 ENUM_DRM_PROP_HDCP_VERSION,
49 ENUM_DRM_PROP_HDR_POLICY,
50 ENUM_DRM_PROP_GETRX_HDCP_SUPPORTED_VERS,
51 ENUM_DRM_PROP_GETRX_HDR_CAP,
52 ENUM_DRM_PROP_GETTX_HDR_MODE,
limin.tiane709cad2022-07-07 17:07:21 +080053 ENUM_DRM_PROP_GETRX_HDCP_AUTHMODE,
limin.tian75338482022-06-20 09:27:34 +080054 ENUM_DRM_PROP_HDMI_ASPECT_RATIO,
limin.tianb3c16ad2022-06-22 14:28:27 +080055 ENUM_DRM_PROP_HDMI_DV_ENABLE,
limin.tian75338482022-06-20 09:27:34 +080056 ENUM_DRM_PROP_MAX
57} ENUM_MESON_DRM_PROP;
58
limin.tianb3c16ad2022-06-22 14:28:27 +080059typedef struct _DisplayMode {
limin.tian75338482022-06-20 09:27:34 +080060 uint16_t w;
61 uint16_t h;
62 uint32_t vrefresh;
63 bool interlace;
64 char name[DRM_DISPLAY_MODE_LEN];
limin.tianb3c16ad2022-06-22 14:28:27 +080065} DisplayMode;
limin.tian75338482022-06-20 09:27:34 +080066
67typedef enum _ENUM_MESON_DRM_HDR_MODE {
68 MESON_DRM_HDR10PLUS = 0,
69 MESON_DRM_DOLBYVISION_STD,
70 MESON_DRM_DOLBYVISION_LL,
71 MESON_DRM_HDR10_ST2084,
72 MESON_DRM_HDR10_TRADITIONAL,
73 MESON_DRM_HDR_HLG,
74 MESON_DRM_SDR
75} ENUM_MESON_DRM_HDR_MODE;
76
77typedef enum _ENUM_HDCP_VERSION {
78 ENUM_HDCP_VERSION_DEFAULT = 0,
79 ENUM_HDCP_VERSION_FORCE_2_2,
80 ENUM_HDCP_VERSION_FORCE_1_4,
81 ENUM_HDCP_VERSION_MAX
82} ENUM_HDCP_VERSION;
83
limin.tianb3c16ad2022-06-22 14:28:27 +080084int meson_drm_setMode(DisplayMode* mode);
85int meson_drm_getMode(DisplayMode* mode);
86
87int meson_drm_getRxPreferredMode( DisplayMode* mode);
88int meson_drm_getRxSurportedModes( DisplayMode** modes, int* modeCount );
limin.tian75338482022-06-20 09:27:34 +080089int meson_drm_getEDID( int * data_Len, char **data);
90
91ENUM_MESON_DRM_CONNECTION meson_drm_getConnection();
92int meson_drm_set_prop( ENUM_MESON_DRM_PROP enProp, int prop_value );
93int meson_drm_get_prop( ENUM_MESON_DRM_PROP enProp, uint32_t* prop_value );
limin.tian3eaf1a62023-12-01 07:27:03 +000094int meson_drm_get_vblank_time(int drmFd, int nextVsync,uint64_t *vblankTime, uint64_t *refreshInterval, int crtc_pipe);
limin.tianb3c16ad2022-06-22 14:28:27 +080095void meson_drm_close_fd(int drmFd);
96int meson_drm_open();
limin.tian75338482022-06-20 09:27:34 +080097
98#if defined(__cplusplus)
99}
100#endif
101
102#endif