1 /* 2 * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 2 7 * of the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 */ 18 #ifndef __DRV_HDMI_IOCTL_H__ 19 #define __DRV_HDMI_IOCTL_H__ 20 21 #include "hi_type.h" 22 #include "autoconf.h" 23 #include "drv_hdmi_infoframe.h" 24 #include "drv_hdmi_edid.h" 25 #include "drv_hdmi_common.h" 26 #if defined(CONFIG_HI_PLATFORM_H8) 27 #include "hi_common_hdmi.h" 28 #else 29 #include "hi_comm_hdmi.h" 30 #include "hi_comm_hdmi_adapt.h" 31 #endif 32 #include "mkp_ioctl.h" 33 34 typedef struct { 35 hdmi_device_id hdmi_id; 36 hdmi_video_capability video_cap; 37 } drv_hdmi_video_capability; 38 39 #if defined(CONFIG_HI_PLATFORM_H8) 40 typedef hi_hdmi_colorimetry drv_hdmi_colorimetry; 41 typedef hi_hdmi_rgb_quant_range drv_hdmi_rgb_quant_range; 42 typedef hi_hdmi_ycc_quant_range drv_hdmi_ycc_quant_range; 43 typedef hi_hdmi_pic_scaline drv_hdmi_pic_scaline; 44 #else 45 typedef HI_HDMI_VIDEO_FMT_E hi_hdmi_video_format; 46 typedef HI_HDMI_COLORIMETRY_E drv_hdmi_colorimetry; 47 typedef HI_HDMI_RGB_QUAN_RAGE_E drv_hdmi_rgb_quant_range; 48 typedef HI_HDMI_YCC_QUAN_RAGE_E drv_hdmi_ycc_quant_range; 49 typedef HI_HDMI_PICTURE_SCALING_E drv_hdmi_pic_scaline; 50 #endif 51 52 typedef struct { 53 hi_hdmi_video_format video_fmt; 54 hi_u32 clk_fs; 55 hi_u32 pixel_repeat; 56 hdmi_3d_mode stereo_mode; 57 hi_hdmi_video_mode in_color_space; 58 hdmi_hvsync_polarity hv_sync_pol; 59 drv_hdmi_colorimetry colorimetry; 60 drv_hdmi_rgb_quant_range rgb_quantization; 61 drv_hdmi_ycc_quant_range ycc_quantization; 62 hi_pic_aspect_ratio picture_aspect; 63 hdmi_active_aspect active_aspect; 64 drv_hdmi_pic_scaline picture_scaling; 65 hi_hdmi_deep_color in_bit_depth; 66 } hdmi_video_attr; 67 68 typedef struct { 69 hdmi_device_id hdmi_id; 70 hdmi_video_attr video_attr; 71 } drv_hdmi_disp_attr; 72 73 typedef struct { 74 hdmi_device_id hdmi_id; 75 hdmi_default_action default_mode; 76 } hdmi_open; 77 78 typedef struct { 79 hdmi_device_id hdmi_id; 80 hdmi_event event; 81 } drv_hdmi_event; 82 83 typedef struct { 84 hdmi_device_id hdmi_id; 85 hdmi_default_action default_action; 86 } drv_hdmi_default_action; 87 88 typedef struct { 89 hdmi_device_id hdmi_id; 90 hdmi_audio_capability audio_cap; 91 } drv_hdmi_audio_capability; 92 93 typedef struct { 94 hdmi_device_id hdmi_id; 95 hdmi_sink_capability cap; 96 } drv_hdmi_sink_capability; 97 98 typedef struct { 99 hdmi_device_id hdmi_id; 100 hdmi_property prop; 101 } drv_hdmi_property; 102 103 typedef struct { 104 hdmi_device_id hdmi_id; 105 hdmi_vo_attr vo_attr; 106 } drv_hdmi_vo_attr; 107 108 typedef struct { 109 hdmi_device_id hdmi_id; 110 hdmi_infoframe_id infoframe_id; 111 hdmi_infoframe infoframe; 112 } drv_hdmi_infoframe; 113 114 typedef struct { 115 hdmi_device_id hdmi_id; 116 hi_bool avmute; 117 } drv_hdmi_avmute; 118 119 typedef struct { 120 hdmi_device_id hdmi_id; 121 hdmi_deep_color deep_color_mode; 122 } drv_hdmi_deep_color; 123 124 typedef struct { 125 hdmi_device_id hdmi_id; 126 hdmi_cec_info cec_info; 127 } drv_hdmi_cec_info; 128 129 typedef struct { 130 hdmi_device_id hdmi_id; 131 hdmi_cec_cmd cec_cmd; 132 hi_u32 timeout; 133 } drv_hdmi_cec_cmd_code; 134 135 typedef struct { 136 hdmi_device_id hdmi_id; 137 hdmi_edid_raw_data edid_raw; 138 } drv_hdmi_edid_raw_data; 139 140 typedef struct { 141 hdmi_device_id hdmi_id; 142 hdmi_load_key key; 143 } drv_hdmi_load_key; 144 145 typedef struct { 146 hdmi_device_id hdmi_id; 147 hdmi_status status; 148 } drv_hdmi_status; 149 150 typedef struct { 151 hdmi_device_id hdmi_id; 152 hi_bool enable; 153 } drv_hdmi_xvycc_enable; 154 155 typedef struct { 156 hdmi_device_id hdmi_id; 157 hi_u32 status; 158 } drv_hdmi_play_status; 159 160 typedef struct { 161 hdmi_device_id hdmi_id; 162 hdmi_delay delay; 163 } drv_hdmi_delay; 164 165 typedef struct { 166 hdmi_device_id hdmi_id; 167 drv_hdmi_hdr_attr hdr_attr; 168 } drv_hdmi_hdr; 169 170 typedef struct { 171 hdmi_device_id hdmi_id; 172 hdmi_trace_len trace_len; 173 } drv_hdmi_mod_param; 174 175 typedef struct { 176 hdmi_device_id hdmi_id; 177 hdmi_hw_spec hw_spec; 178 } drv_hdmi_hw_spec; 179 180 enum hi_ioctl_hdmi { 181 IOCTL_HDMI_INIT = 0x01, 182 IOCTL_HDMI_DEINIT, 183 IOCTL_HDMI_OPEN, 184 IOCTL_HDMI_CLOSE, 185 IOCTL_HDMI_START, 186 IOCTL_HDMI_STOP, 187 IOCTL_HDMI_GET_AUDIO_CAPABILITY, 188 IOCTL_HDMI_GET_SINK_CAPABILITY, 189 IOCTL_HDMI_POLL_EVENT, 190 IOCTL_HDMI_GET_ATTR, 191 IOCTL_HDMI_SET_ATTR, 192 IOCTL_HDMI_GET_VO_ATTR, 193 IOCTL_HDMI_SET_VO_ATTR, 194 IOCTL_HDMI_GET_INFOFRAME, 195 IOCTL_HDMI_SET_INFOFRAME, 196 IOCTL_HDMI_AVMUTE, 197 IOCTL_HDMI_GET_DEEPCOLOR, 198 IOCTL_HDMI_SET_DEEPCOLOR, 199 IOCTL_HDMI_XVYCC, 200 IOCTL_HDMI_SET_CEC, 201 IOCTL_HDMI_GET_CEC, 202 IOCTL_HDMI_GET_CECSTATUS, 203 IOCTL_HDMI_UPDATE_EDID, 204 IOCTL_HDMI_GET_HDMI_PLAYSTATUS, 205 IOCTL_HDMI_CEC_ENABLE, 206 IOCTL_HDMI_CEC_DISABLE, 207 IOCTL_HDMI_REG_CALLBACK_FUNC, 208 IOCTL_HDMI_LOAD_KEY, 209 IOCTL_HDMI_LOAD_HDCP22_CODE, 210 IOCTL_HDMI_GET_STATUS, 211 IOCTL_HDMI_GET_DELAY, 212 IOCTL_HDMI_SET_DELAY, 213 IOCTL_HDMI_REGISTER_CALLBACK, 214 IOCTL_HDMI_UNREGISTER_CALLBACK, 215 IOCTL_HDMI_GET_VIDEO_CAPABILITY, 216 IOCTL_HDMI_SET_DISP_ATTR, 217 IOCTL_HDMI_SET_MOD_PARAM, 218 IOCTL_HDMI_GET_MOD_PARAM, 219 IOCTL_HDMI_SET_HW_SPEC, 220 IOCTL_HDMI_GET_HW_SPEC, 221 #ifdef HDMI_HDR_SUPPORT 222 IOCTL_HDMI_GET_HDR_ATTR, 223 IOCTL_HDMI_SET_HDR_ATTR, 224 #endif 225 IOCTL_HDMI_MAX 226 }; 227 228 #define CMD_HDMI_INIT _IO(IOC_TYPE_HDMI, IOCTL_HDMI_INIT) 229 #define CMD_HDMI_DEINIT _IO(IOC_TYPE_HDMI, IOCTL_HDMI_DEINIT) 230 #define CMD_HDMI_OPEN _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_OPEN, drv_hdmi_default_action) 231 #define CMD_HDMI_CLOSE _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_CLOSE, hdmi_device_id) 232 #define CMD_HDMI_START _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_START, hdmi_device_id) 233 #define CMD_HDMI_STOP _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_STOP, hdmi_device_id) 234 #define CMD_HDMI_GET_AUDIO_CAPABILITY _IOWR(HI_ID_HDMI, IOCTL_HDMI_GET_AUDIO_CAPABILITY, drv_hdmi_audio_capability) 235 #define CMD_HDMI_GET_SINK_CAPABILITY _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_SINK_CAPABILITY, drv_hdmi_sink_capability) 236 #define CMD_HDMI_POLL_EVENT _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_POLL_EVENT, drv_hdmi_event) 237 #define CMD_HDMI_GET_INFOFRAME _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_INFOFRAME, drv_hdmi_infoframe) 238 #define CMD_HDMI_SET_INFOFRAME _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_INFOFRAME, drv_hdmi_infoframe) 239 #define CMD_HDMI_SET_AVMUTE _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_AVMUTE, drv_hdmi_avmute) 240 #define CMD_HDMI_GET_DEEPCOLOR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_DEEPCOLOR, drv_hdmi_deep_color) 241 #define CMD_HDMI_SET_DEEPCOLOR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_DEEPCOLOR, drv_hdmi_deep_color) 242 #define CMD_HDMI_SET_XVYCC _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_XVYCC, drv_hdmi_xvycc_enable) 243 #define CMD_HDMI_GET_CEC _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_CEC, drv_hdmi_cec_cmd_code) 244 #define CMD_HDMI_SET_CEC _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_CEC, drv_hdmi_cec_cmd_code) 245 #define CMD_HDMI_GET_CECSTATUS _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_CECSTATUS, drv_hdmi_cec_info) 246 #define CMD_HDMI_UPDATE_EDID _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_UPDATE_EDID, drv_hdmi_edid_raw_data) 247 #define CMD_HDMI_GET_HDMI_PLAYSTATUS _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_HDMI_PLAYSTATUS, drv_hdmi_play_status) 248 #define CMD_HDMI_CEC_ENABLE _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_CEC_ENABLE, hdmi_device_id) 249 #define CMD_HDMI_CEC_DISABLE _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_CEC_DISABLE, hdmi_device_id) 250 #define CMD_HDMI_LOAD_KEY _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_LOAD_KEY, drv_hdmi_load_key) 251 #define CMD_HDMI_GET_STATUS _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_STATUS, drv_hdmi_status) 252 #define CMD_HDMI_GET_DELAY _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_DELAY, hdmi_delay) 253 #define CMD_HDMI_SET_DELAY _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_DELAY, hdmi_delay) 254 #define CMD_HDMI_GET_VIDEO_CAPABILITY _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_VIDEO_CAPABILITY, drv_hdmi_video_capability) 255 #define CMD_HDMI_SET_DISP_ATTR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_DISP_ATTR, drv_hdmi_disp_attr) 256 #define CMD_HDMI_REGISTER_CALLBACK _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_REGISTER_CALLBACK, hdmi_device_id) 257 #define CMD_HDMI_UNREGISTER_CALLBACK _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_UNREGISTER_CALLBACK, hdmi_device_id) 258 #define CMD_HDMI_SET_MOD_PARAM _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_MOD_PARAM, drv_hdmi_mod_param) 259 #define CMD_HDMI_GET_MOD_PARAM _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_MOD_PARAM, drv_hdmi_mod_param) 260 #define CMD_HDMI_SET_ATTR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_ATTR, drv_hdmi_property) 261 #define CMD_HDMI_GET_ATTR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_ATTR, drv_hdmi_property) 262 #define CMD_HDMI_SET_VO_ATTR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_VO_ATTR, drv_hdmi_vo_attr) 263 #define CMD_HDMI_GET_VO_ATTR _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_VO_ATTR, drv_hdmi_vo_attr) 264 #define CMD_HDMI_GET_HW_SPEC _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_GET_HW_SPEC, drv_hdmi_hw_spec) 265 #define CMD_HDMI_SET_HW_SPEC _IOWR(IOC_TYPE_HDMI, IOCTL_HDMI_SET_HW_SPEC, drv_hdmi_hw_spec) 266 #ifdef HDMI_HDR_SUPPORT 267 #define CMD_HDMI_GET_HDR_ATTR _IOWR(HI_ID_HDMI, IOCTL_HDMI_GET_HDR_ATTR, drv_hdmi_hdr) 268 #define CMD_HDMI_SET_HDR_ATTR _IOWR(HI_ID_HDMI, IOCTL_HDMI_SET_HDR_ATTR, drv_hdmi_hdr) 269 #endif 270 271 #endif /* __DRV_HDMI_IOCTL_H__ */ 272 273