Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | /* SPDX-License-Identifier: GPL-2.0-only */ /* * Defines for Mobile High-Definition Link (MHL) interface * * Copyright (C) 2015, Samsung Electronics, Co., Ltd. * Andrzej Hajda <a.hajda@samsung.com> * * Based on MHL driver for Android devices. * Copyright (C) 2013-2014 Silicon Image, Inc. */ #ifndef __MHL_H__ #define __MHL_H__ #include <linux/types.h> /* Device Capabilities Registers */ enum { MHL_DCAP_DEV_STATE, MHL_DCAP_MHL_VERSION, MHL_DCAP_CAT, MHL_DCAP_ADOPTER_ID_H, MHL_DCAP_ADOPTER_ID_L, MHL_DCAP_VID_LINK_MODE, MHL_DCAP_AUD_LINK_MODE, MHL_DCAP_VIDEO_TYPE, MHL_DCAP_LOG_DEV_MAP, MHL_DCAP_BANDWIDTH, MHL_DCAP_FEATURE_FLAG, MHL_DCAP_DEVICE_ID_H, MHL_DCAP_DEVICE_ID_L, MHL_DCAP_SCRATCHPAD_SIZE, MHL_DCAP_INT_STAT_SIZE, MHL_DCAP_RESERVED, MHL_DCAP_SIZE }; #define MHL_DCAP_CAT_SINK 0x01 #define MHL_DCAP_CAT_SOURCE 0x02 #define MHL_DCAP_CAT_POWER 0x10 #define MHL_DCAP_CAT_PLIM(x) ((x) << 5) #define MHL_DCAP_VID_LINK_RGB444 0x01 #define MHL_DCAP_VID_LINK_YCBCR444 0x02 #define MHL_DCAP_VID_LINK_YCBCR422 0x04 #define MHL_DCAP_VID_LINK_PPIXEL 0x08 #define MHL_DCAP_VID_LINK_ISLANDS 0x10 #define MHL_DCAP_VID_LINK_VGA 0x20 #define MHL_DCAP_VID_LINK_16BPP 0x40 #define MHL_DCAP_AUD_LINK_2CH 0x01 #define MHL_DCAP_AUD_LINK_8CH 0x02 #define MHL_DCAP_VT_GRAPHICS 0x00 #define MHL_DCAP_VT_PHOTO 0x02 #define MHL_DCAP_VT_CINEMA 0x04 #define MHL_DCAP_VT_GAMES 0x08 #define MHL_DCAP_SUPP_VT 0x80 #define MHL_DCAP_LD_DISPLAY 0x01 #define MHL_DCAP_LD_VIDEO 0x02 #define MHL_DCAP_LD_AUDIO 0x04 #define MHL_DCAP_LD_MEDIA 0x08 #define MHL_DCAP_LD_TUNER 0x10 #define MHL_DCAP_LD_RECORD 0x20 #define MHL_DCAP_LD_SPEAKER 0x40 #define MHL_DCAP_LD_GUI 0x80 #define MHL_DCAP_LD_ALL 0xFF #define MHL_DCAP_FEATURE_RCP_SUPPORT 0x01 #define MHL_DCAP_FEATURE_RAP_SUPPORT 0x02 #define MHL_DCAP_FEATURE_SP_SUPPORT 0x04 #define MHL_DCAP_FEATURE_UCP_SEND_SUPPOR 0x08 #define MHL_DCAP_FEATURE_UCP_RECV_SUPPORT 0x10 #define MHL_DCAP_FEATURE_RBP_SUPPORT 0x40 /* Extended Device Capabilities Registers */ enum { MHL_XDC_ECBUS_SPEEDS, MHL_XDC_TMDS_SPEEDS, MHL_XDC_ECBUS_ROLES, MHL_XDC_LOG_DEV_MAPX, MHL_XDC_SIZE }; #define MHL_XDC_ECBUS_S_075 0x01 #define MHL_XDC_ECBUS_S_8BIT 0x02 #define MHL_XDC_ECBUS_S_12BIT 0x04 #define MHL_XDC_ECBUS_D_150 0x10 #define MHL_XDC_ECBUS_D_8BIT 0x20 #define MHL_XDC_TMDS_000 0x00 #define MHL_XDC_TMDS_150 0x01 #define MHL_XDC_TMDS_300 0x02 #define MHL_XDC_TMDS_600 0x04 /* MHL_XDC_ECBUS_ROLES flags */ #define MHL_XDC_DEV_HOST 0x01 #define MHL_XDC_DEV_DEVICE 0x02 #define MHL_XDC_DEV_CHARGER 0x04 #define MHL_XDC_HID_HOST 0x08 #define MHL_XDC_HID_DEVICE 0x10 /* MHL_XDC_LOG_DEV_MAPX flags */ #define MHL_XDC_LD_PHONE 0x01 /* Device Status Registers */ enum { MHL_DST_CONNECTED_RDY, MHL_DST_LINK_MODE, MHL_DST_VERSION, MHL_DST_SIZE }; /* Offset of DEVSTAT registers */ #define MHL_DST_OFFSET 0x30 #define MHL_DST_REG(name) (MHL_DST_OFFSET + MHL_DST_##name) #define MHL_DST_CONN_DCAP_RDY 0x01 #define MHL_DST_CONN_XDEVCAPP_SUPP 0x02 #define MHL_DST_CONN_POW_STAT 0x04 #define MHL_DST_CONN_PLIM_STAT_MASK 0x38 #define MHL_DST_LM_CLK_MODE_MASK 0x07 #define MHL_DST_LM_CLK_MODE_PACKED_PIXEL 0x02 #define MHL_DST_LM_CLK_MODE_NORMAL 0x03 #define MHL_DST_LM_PATH_EN_MASK 0x08 #define MHL_DST_LM_PATH_ENABLED 0x08 #define MHL_DST_LM_PATH_DISABLED 0x00 #define MHL_DST_LM_MUTED_MASK 0x10 /* Extended Device Status Registers */ enum { MHL_XDS_CURR_ECBUS_MODE, MHL_XDS_AVLINK_MODE_STATUS, MHL_XDS_AVLINK_MODE_CONTROL, MHL_XDS_MULTI_SINK_STATUS, MHL_XDS_SIZE }; /* Offset of XDEVSTAT registers */ #define MHL_XDS_OFFSET 0x90 #define MHL_XDS_REG(name) (MHL_XDS_OFFSET + MHL_XDS_##name) /* MHL_XDS_REG_CURR_ECBUS_MODE flags */ #define MHL_XDS_SLOT_MODE_8BIT 0x00 #define MHL_XDS_SLOT_MODE_6BIT 0x01 #define MHL_XDS_ECBUS_S 0x04 #define MHL_XDS_ECBUS_D 0x08 #define MHL_XDS_LINK_CLOCK_75MHZ 0x00 #define MHL_XDS_LINK_CLOCK_150MHZ 0x10 #define MHL_XDS_LINK_CLOCK_300MHZ 0x20 #define MHL_XDS_LINK_CLOCK_600MHZ 0x30 #define MHL_XDS_LINK_STATUS_NO_SIGNAL 0x00 #define MHL_XDS_LINK_STATUS_CRU_LOCKED 0x01 #define MHL_XDS_LINK_STATUS_TMDS_NORMAL 0x02 #define MHL_XDS_LINK_STATUS_TMDS_RESERVED 0x03 #define MHL_XDS_LINK_RATE_1_5_GBPS 0x00 #define MHL_XDS_LINK_RATE_3_0_GBPS 0x01 #define MHL_XDS_LINK_RATE_6_0_GBPS 0x02 #define MHL_XDS_ATT_CAPABLE 0x08 #define MHL_XDS_SINK_STATUS_1_HPD_LOW 0x00 #define MHL_XDS_SINK_STATUS_1_HPD_HIGH 0x01 #define MHL_XDS_SINK_STATUS_2_HPD_LOW 0x00 #define MHL_XDS_SINK_STATUS_2_HPD_HIGH 0x04 #define MHL_XDS_SINK_STATUS_3_HPD_LOW 0x00 #define MHL_XDS_SINK_STATUS_3_HPD_HIGH 0x10 #define MHL_XDS_SINK_STATUS_4_HPD_LOW 0x00 #define MHL_XDS_SINK_STATUS_4_HPD_HIGH 0x40 /* Interrupt Registers */ enum { MHL_INT_RCHANGE, MHL_INT_DCHANGE, MHL_INT_SIZE }; /* Offset of DEVSTAT registers */ #define MHL_INT_OFFSET 0x20 #define MHL_INT_REG(name) (MHL_INT_OFFSET + MHL_INT_##name) #define MHL_INT_RC_DCAP_CHG 0x01 #define MHL_INT_RC_DSCR_CHG 0x02 #define MHL_INT_RC_REQ_WRT 0x04 #define MHL_INT_RC_GRT_WRT 0x08 #define MHL_INT_RC_3D_REQ 0x10 #define MHL_INT_RC_FEAT_REQ 0x20 #define MHL_INT_RC_FEAT_COMPLETE 0x40 #define MHL_INT_DC_EDID_CHG 0x02 enum { MHL_ACK = 0x33, /* Command or Data byte acknowledge */ MHL_NACK = 0x34, /* Command or Data byte not acknowledge */ MHL_ABORT = 0x35, /* Transaction abort */ MHL_WRITE_STAT = 0xe0, /* Write one status register */ MHL_SET_INT = 0x60, /* Write one interrupt register */ MHL_READ_DEVCAP_REG = 0x61, /* Read one register */ MHL_GET_STATE = 0x62, /* Read CBUS revision level from follower */ MHL_GET_VENDOR_ID = 0x63, /* Read vendor ID value from follower */ MHL_SET_HPD = 0x64, /* Set Hot Plug Detect in follower */ MHL_CLR_HPD = 0x65, /* Clear Hot Plug Detect in follower */ MHL_SET_CAP_ID = 0x66, /* Set Capture ID for downstream device */ MHL_GET_CAP_ID = 0x67, /* Get Capture ID from downstream device */ MHL_MSC_MSG = 0x68, /* VS command to send RCP sub-commands */ MHL_GET_SC1_ERRORCODE = 0x69, /* Get Vendor-Specific error code */ MHL_GET_DDC_ERRORCODE = 0x6A, /* Get DDC channel command error code */ MHL_GET_MSC_ERRORCODE = 0x6B, /* Get MSC command error code */ MHL_WRITE_BURST = 0x6C, /* Write 1-16 bytes to responder's scratchpad */ MHL_GET_SC3_ERRORCODE = 0x6D, /* Get channel 3 command error code */ MHL_WRITE_XSTAT = 0x70, /* Write one extended status register */ MHL_READ_XDEVCAP_REG = 0x71, /* Read one extended devcap register */ /* let the rest of these float, they are software specific */ MHL_READ_EDID_BLOCK, MHL_SEND_3D_REQ_OR_FEAT_REQ, MHL_READ_DEVCAP, MHL_READ_XDEVCAP }; /* MSC message types */ enum { MHL_MSC_MSG_RCP = 0x10, /* RCP sub-command */ MHL_MSC_MSG_RCPK = 0x11, /* RCP Acknowledge sub-command */ MHL_MSC_MSG_RCPE = 0x12, /* RCP Error sub-command */ MHL_MSC_MSG_RAP = 0x20, /* Mode Change Warning sub-command */ MHL_MSC_MSG_RAPK = 0x21, /* MCW Acknowledge sub-command */ MHL_MSC_MSG_RBP = 0x22, /* Remote Button Protocol sub-command */ MHL_MSC_MSG_RBPK = 0x23, /* RBP Acknowledge sub-command */ MHL_MSC_MSG_RBPE = 0x24, /* RBP Error sub-command */ MHL_MSC_MSG_UCP = 0x30, /* UCP sub-command */ MHL_MSC_MSG_UCPK = 0x31, /* UCP Acknowledge sub-command */ MHL_MSC_MSG_UCPE = 0x32, /* UCP Error sub-command */ MHL_MSC_MSG_RUSB = 0x40, /* Request USB host role */ MHL_MSC_MSG_RUSBK = 0x41, /* Acknowledge request for USB host role */ MHL_MSC_MSG_RHID = 0x42, /* Request HID host role */ MHL_MSC_MSG_RHIDK = 0x43, /* Acknowledge request for HID host role */ MHL_MSC_MSG_ATT = 0x50, /* Request attention sub-command */ MHL_MSC_MSG_ATTK = 0x51, /* ATT Acknowledge sub-command */ MHL_MSC_MSG_BIST_TRIGGER = 0x60, MHL_MSC_MSG_BIST_REQUEST_STAT = 0x61, MHL_MSC_MSG_BIST_READY = 0x62, MHL_MSC_MSG_BIST_STOP = 0x63, }; /* RAP action codes */ #define MHL_RAP_POLL 0x00 /* Just do an ack */ #define MHL_RAP_CONTENT_ON 0x10 /* Turn content stream ON */ #define MHL_RAP_CONTENT_OFF 0x11 /* Turn content stream OFF */ #define MHL_RAP_CBUS_MODE_DOWN 0x20 #define MHL_RAP_CBUS_MODE_UP 0x21 /* RAPK status codes */ #define MHL_RAPK_NO_ERR 0x00 /* RAP action recognized & supported */ #define MHL_RAPK_UNRECOGNIZED 0x01 /* Unknown RAP action code received */ #define MHL_RAPK_UNSUPPORTED 0x02 /* Rcvd RAP action code not supported */ #define MHL_RAPK_BUSY 0x03 /* Responder too busy to respond */ /* Bit masks for RCP messages */ #define MHL_RCP_KEY_RELEASED_MASK 0x80 #define MHL_RCP_KEY_ID_MASK 0x7F /* * Error status codes for RCPE messages */ /* No error. (Not allowed in RCPE messages) */ #define MHL_RCPE_STATUS_NO_ERROR 0x00 /* Unsupported/unrecognized key code */ #define MHL_RCPE_STATUS_INEFFECTIVE_KEY_CODE 0x01 /* Responder busy. Initiator may retry message */ #define MHL_RCPE_STATUS_BUSY 0x02 /* * Error status codes for RBPE messages */ /* No error. (Not allowed in RBPE messages) */ #define MHL_RBPE_STATUS_NO_ERROR 0x00 /* Unsupported/unrecognized button code */ #define MHL_RBPE_STATUS_INEFFECTIVE_BUTTON_CODE 0x01 /* Responder busy. Initiator may retry message */ #define MHL_RBPE_STATUS_BUSY 0x02 /* * Error status codes for UCPE messages */ /* No error. (Not allowed in UCPE messages) */ #define MHL_UCPE_STATUS_NO_ERROR 0x00 /* Unsupported/unrecognized key code */ #define MHL_UCPE_STATUS_INEFFECTIVE_KEY_CODE 0x01 enum mhl_burst_id { MHL_BURST_ID_3D_VIC = 0x10, MHL_BURST_ID_3D_DTD = 0x11, MHL_BURST_ID_HEV_VIC = 0x20, MHL_BURST_ID_HEV_DTDA = 0x21, MHL_BURST_ID_HEV_DTDB = 0x22, MHL_BURST_ID_VC_ASSIGN = 0x38, MHL_BURST_ID_VC_CONFIRM = 0x39, MHL_BURST_ID_AUD_DELAY = 0x40, MHL_BURST_ID_ADT_BURSTID = 0x41, MHL_BURST_ID_BIST_SETUP = 0x51, MHL_BURST_ID_BIST_RETURN_STAT = 0x52, MHL_BURST_ID_EMSC_SUPPORT = 0x61, MHL_BURST_ID_HID_PAYLOAD = 0x62, MHL_BURST_ID_BLK_RCV_BUFFER_INFO = 0x63, MHL_BURST_ID_BITS_PER_PIXEL_FMT = 0x64, }; struct mhl_burst_blk_rcv_buffer_info { __be16 id; __le16 size; } __packed; struct mhl3_burst_header { __be16 id; u8 checksum; u8 total_entries; u8 sequence_index; } __packed; struct mhl_burst_bits_per_pixel_fmt { struct mhl3_burst_header hdr; u8 num_entries; struct { u8 stream_id; u8 pixel_format; } __packed desc[0]; } __packed; struct mhl_burst_emsc_support { struct mhl3_burst_header hdr; u8 num_entries; __be16 burst_id[0]; } __packed; struct mhl_burst_audio_descr { struct mhl3_burst_header hdr; u8 flags; u8 short_desc[9]; } __packed; /* * MHL3 infoframe related definitions */ #define MHL3_IEEE_OUI 0x7ca61d #define MHL3_INFOFRAME_SIZE 15 enum mhl3_video_format { MHL3_VIDEO_FORMAT_NONE, MHL3_VIDEO_FORMAT_3D, MHL3_VIDEO_FORMAT_MULTI_VIEW, MHL3_VIDEO_FORMAT_DUAL_3D }; enum mhl3_3d_format_type { MHL3_3D_FORMAT_TYPE_FS, /* frame sequential */ MHL3_3D_FORMAT_TYPE_TB, /* top-bottom */ MHL3_3D_FORMAT_TYPE_LR, /* left-right */ MHL3_3D_FORMAT_TYPE_FS_TB, /* frame sequential, top-bottom */ MHL3_3D_FORMAT_TYPE_FS_LR, /* frame sequential, left-right */ MHL3_3D_FORMAT_TYPE_TB_LR /* top-bottom, left-right */ }; struct mhl3_infoframe { unsigned char version; enum mhl3_video_format video_format; enum mhl3_3d_format_type format_type; bool sep_audio; int hev_format; int av_delay; }; #endif /* __MHL_H__ */ |