0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef __MHL_H__
0013 #define __MHL_H__
0014
0015 #include <linux/types.h>
0016
0017
0018 enum {
0019 MHL_DCAP_DEV_STATE,
0020 MHL_DCAP_MHL_VERSION,
0021 MHL_DCAP_CAT,
0022 MHL_DCAP_ADOPTER_ID_H,
0023 MHL_DCAP_ADOPTER_ID_L,
0024 MHL_DCAP_VID_LINK_MODE,
0025 MHL_DCAP_AUD_LINK_MODE,
0026 MHL_DCAP_VIDEO_TYPE,
0027 MHL_DCAP_LOG_DEV_MAP,
0028 MHL_DCAP_BANDWIDTH,
0029 MHL_DCAP_FEATURE_FLAG,
0030 MHL_DCAP_DEVICE_ID_H,
0031 MHL_DCAP_DEVICE_ID_L,
0032 MHL_DCAP_SCRATCHPAD_SIZE,
0033 MHL_DCAP_INT_STAT_SIZE,
0034 MHL_DCAP_RESERVED,
0035 MHL_DCAP_SIZE
0036 };
0037
0038 #define MHL_DCAP_CAT_SINK 0x01
0039 #define MHL_DCAP_CAT_SOURCE 0x02
0040 #define MHL_DCAP_CAT_POWER 0x10
0041 #define MHL_DCAP_CAT_PLIM(x) ((x) << 5)
0042
0043 #define MHL_DCAP_VID_LINK_RGB444 0x01
0044 #define MHL_DCAP_VID_LINK_YCBCR444 0x02
0045 #define MHL_DCAP_VID_LINK_YCBCR422 0x04
0046 #define MHL_DCAP_VID_LINK_PPIXEL 0x08
0047 #define MHL_DCAP_VID_LINK_ISLANDS 0x10
0048 #define MHL_DCAP_VID_LINK_VGA 0x20
0049 #define MHL_DCAP_VID_LINK_16BPP 0x40
0050
0051 #define MHL_DCAP_AUD_LINK_2CH 0x01
0052 #define MHL_DCAP_AUD_LINK_8CH 0x02
0053
0054 #define MHL_DCAP_VT_GRAPHICS 0x00
0055 #define MHL_DCAP_VT_PHOTO 0x02
0056 #define MHL_DCAP_VT_CINEMA 0x04
0057 #define MHL_DCAP_VT_GAMES 0x08
0058 #define MHL_DCAP_SUPP_VT 0x80
0059
0060 #define MHL_DCAP_LD_DISPLAY 0x01
0061 #define MHL_DCAP_LD_VIDEO 0x02
0062 #define MHL_DCAP_LD_AUDIO 0x04
0063 #define MHL_DCAP_LD_MEDIA 0x08
0064 #define MHL_DCAP_LD_TUNER 0x10
0065 #define MHL_DCAP_LD_RECORD 0x20
0066 #define MHL_DCAP_LD_SPEAKER 0x40
0067 #define MHL_DCAP_LD_GUI 0x80
0068 #define MHL_DCAP_LD_ALL 0xFF
0069
0070 #define MHL_DCAP_FEATURE_RCP_SUPPORT 0x01
0071 #define MHL_DCAP_FEATURE_RAP_SUPPORT 0x02
0072 #define MHL_DCAP_FEATURE_SP_SUPPORT 0x04
0073 #define MHL_DCAP_FEATURE_UCP_SEND_SUPPOR 0x08
0074 #define MHL_DCAP_FEATURE_UCP_RECV_SUPPORT 0x10
0075 #define MHL_DCAP_FEATURE_RBP_SUPPORT 0x40
0076
0077
0078 enum {
0079 MHL_XDC_ECBUS_SPEEDS,
0080 MHL_XDC_TMDS_SPEEDS,
0081 MHL_XDC_ECBUS_ROLES,
0082 MHL_XDC_LOG_DEV_MAPX,
0083 MHL_XDC_SIZE
0084 };
0085
0086 #define MHL_XDC_ECBUS_S_075 0x01
0087 #define MHL_XDC_ECBUS_S_8BIT 0x02
0088 #define MHL_XDC_ECBUS_S_12BIT 0x04
0089 #define MHL_XDC_ECBUS_D_150 0x10
0090 #define MHL_XDC_ECBUS_D_8BIT 0x20
0091
0092 #define MHL_XDC_TMDS_000 0x00
0093 #define MHL_XDC_TMDS_150 0x01
0094 #define MHL_XDC_TMDS_300 0x02
0095 #define MHL_XDC_TMDS_600 0x04
0096
0097
0098 #define MHL_XDC_DEV_HOST 0x01
0099 #define MHL_XDC_DEV_DEVICE 0x02
0100 #define MHL_XDC_DEV_CHARGER 0x04
0101 #define MHL_XDC_HID_HOST 0x08
0102 #define MHL_XDC_HID_DEVICE 0x10
0103
0104
0105 #define MHL_XDC_LD_PHONE 0x01
0106
0107
0108 enum {
0109 MHL_DST_CONNECTED_RDY,
0110 MHL_DST_LINK_MODE,
0111 MHL_DST_VERSION,
0112 MHL_DST_SIZE
0113 };
0114
0115
0116 #define MHL_DST_OFFSET 0x30
0117 #define MHL_DST_REG(name) (MHL_DST_OFFSET + MHL_DST_##name)
0118
0119 #define MHL_DST_CONN_DCAP_RDY 0x01
0120 #define MHL_DST_CONN_XDEVCAPP_SUPP 0x02
0121 #define MHL_DST_CONN_POW_STAT 0x04
0122 #define MHL_DST_CONN_PLIM_STAT_MASK 0x38
0123
0124 #define MHL_DST_LM_CLK_MODE_MASK 0x07
0125 #define MHL_DST_LM_CLK_MODE_PACKED_PIXEL 0x02
0126 #define MHL_DST_LM_CLK_MODE_NORMAL 0x03
0127 #define MHL_DST_LM_PATH_EN_MASK 0x08
0128 #define MHL_DST_LM_PATH_ENABLED 0x08
0129 #define MHL_DST_LM_PATH_DISABLED 0x00
0130 #define MHL_DST_LM_MUTED_MASK 0x10
0131
0132
0133 enum {
0134 MHL_XDS_CURR_ECBUS_MODE,
0135 MHL_XDS_AVLINK_MODE_STATUS,
0136 MHL_XDS_AVLINK_MODE_CONTROL,
0137 MHL_XDS_MULTI_SINK_STATUS,
0138 MHL_XDS_SIZE
0139 };
0140
0141
0142 #define MHL_XDS_OFFSET 0x90
0143 #define MHL_XDS_REG(name) (MHL_XDS_OFFSET + MHL_XDS_##name)
0144
0145
0146 #define MHL_XDS_SLOT_MODE_8BIT 0x00
0147 #define MHL_XDS_SLOT_MODE_6BIT 0x01
0148 #define MHL_XDS_ECBUS_S 0x04
0149 #define MHL_XDS_ECBUS_D 0x08
0150
0151 #define MHL_XDS_LINK_CLOCK_75MHZ 0x00
0152 #define MHL_XDS_LINK_CLOCK_150MHZ 0x10
0153 #define MHL_XDS_LINK_CLOCK_300MHZ 0x20
0154 #define MHL_XDS_LINK_CLOCK_600MHZ 0x30
0155
0156 #define MHL_XDS_LINK_STATUS_NO_SIGNAL 0x00
0157 #define MHL_XDS_LINK_STATUS_CRU_LOCKED 0x01
0158 #define MHL_XDS_LINK_STATUS_TMDS_NORMAL 0x02
0159 #define MHL_XDS_LINK_STATUS_TMDS_RESERVED 0x03
0160
0161 #define MHL_XDS_LINK_RATE_1_5_GBPS 0x00
0162 #define MHL_XDS_LINK_RATE_3_0_GBPS 0x01
0163 #define MHL_XDS_LINK_RATE_6_0_GBPS 0x02
0164 #define MHL_XDS_ATT_CAPABLE 0x08
0165
0166 #define MHL_XDS_SINK_STATUS_1_HPD_LOW 0x00
0167 #define MHL_XDS_SINK_STATUS_1_HPD_HIGH 0x01
0168 #define MHL_XDS_SINK_STATUS_2_HPD_LOW 0x00
0169 #define MHL_XDS_SINK_STATUS_2_HPD_HIGH 0x04
0170 #define MHL_XDS_SINK_STATUS_3_HPD_LOW 0x00
0171 #define MHL_XDS_SINK_STATUS_3_HPD_HIGH 0x10
0172 #define MHL_XDS_SINK_STATUS_4_HPD_LOW 0x00
0173 #define MHL_XDS_SINK_STATUS_4_HPD_HIGH 0x40
0174
0175
0176 enum {
0177 MHL_INT_RCHANGE,
0178 MHL_INT_DCHANGE,
0179 MHL_INT_SIZE
0180 };
0181
0182
0183 #define MHL_INT_OFFSET 0x20
0184 #define MHL_INT_REG(name) (MHL_INT_OFFSET + MHL_INT_##name)
0185
0186 #define MHL_INT_RC_DCAP_CHG 0x01
0187 #define MHL_INT_RC_DSCR_CHG 0x02
0188 #define MHL_INT_RC_REQ_WRT 0x04
0189 #define MHL_INT_RC_GRT_WRT 0x08
0190 #define MHL_INT_RC_3D_REQ 0x10
0191 #define MHL_INT_RC_FEAT_REQ 0x20
0192 #define MHL_INT_RC_FEAT_COMPLETE 0x40
0193
0194 #define MHL_INT_DC_EDID_CHG 0x02
0195
0196 enum {
0197 MHL_ACK = 0x33,
0198 MHL_NACK = 0x34,
0199 MHL_ABORT = 0x35,
0200 MHL_WRITE_STAT = 0xe0,
0201 MHL_SET_INT = 0x60,
0202 MHL_READ_DEVCAP_REG = 0x61,
0203 MHL_GET_STATE = 0x62,
0204 MHL_GET_VENDOR_ID = 0x63,
0205 MHL_SET_HPD = 0x64,
0206 MHL_CLR_HPD = 0x65,
0207 MHL_SET_CAP_ID = 0x66,
0208 MHL_GET_CAP_ID = 0x67,
0209 MHL_MSC_MSG = 0x68,
0210 MHL_GET_SC1_ERRORCODE = 0x69,
0211 MHL_GET_DDC_ERRORCODE = 0x6A,
0212 MHL_GET_MSC_ERRORCODE = 0x6B,
0213 MHL_WRITE_BURST = 0x6C,
0214 MHL_GET_SC3_ERRORCODE = 0x6D,
0215 MHL_WRITE_XSTAT = 0x70,
0216 MHL_READ_XDEVCAP_REG = 0x71,
0217
0218 MHL_READ_EDID_BLOCK,
0219 MHL_SEND_3D_REQ_OR_FEAT_REQ,
0220 MHL_READ_DEVCAP,
0221 MHL_READ_XDEVCAP
0222 };
0223
0224
0225 enum {
0226 MHL_MSC_MSG_RCP = 0x10,
0227 MHL_MSC_MSG_RCPK = 0x11,
0228 MHL_MSC_MSG_RCPE = 0x12,
0229 MHL_MSC_MSG_RAP = 0x20,
0230 MHL_MSC_MSG_RAPK = 0x21,
0231 MHL_MSC_MSG_RBP = 0x22,
0232 MHL_MSC_MSG_RBPK = 0x23,
0233 MHL_MSC_MSG_RBPE = 0x24,
0234 MHL_MSC_MSG_UCP = 0x30,
0235 MHL_MSC_MSG_UCPK = 0x31,
0236 MHL_MSC_MSG_UCPE = 0x32,
0237 MHL_MSC_MSG_RUSB = 0x40,
0238 MHL_MSC_MSG_RUSBK = 0x41,
0239 MHL_MSC_MSG_RHID = 0x42,
0240 MHL_MSC_MSG_RHIDK = 0x43,
0241 MHL_MSC_MSG_ATT = 0x50,
0242 MHL_MSC_MSG_ATTK = 0x51,
0243 MHL_MSC_MSG_BIST_TRIGGER = 0x60,
0244 MHL_MSC_MSG_BIST_REQUEST_STAT = 0x61,
0245 MHL_MSC_MSG_BIST_READY = 0x62,
0246 MHL_MSC_MSG_BIST_STOP = 0x63,
0247 };
0248
0249
0250 #define MHL_RAP_POLL 0x00
0251 #define MHL_RAP_CONTENT_ON 0x10
0252 #define MHL_RAP_CONTENT_OFF 0x11
0253 #define MHL_RAP_CBUS_MODE_DOWN 0x20
0254 #define MHL_RAP_CBUS_MODE_UP 0x21
0255
0256
0257 #define MHL_RAPK_NO_ERR 0x00
0258 #define MHL_RAPK_UNRECOGNIZED 0x01
0259 #define MHL_RAPK_UNSUPPORTED 0x02
0260 #define MHL_RAPK_BUSY 0x03
0261
0262
0263 #define MHL_RCP_KEY_RELEASED_MASK 0x80
0264 #define MHL_RCP_KEY_ID_MASK 0x7F
0265
0266
0267
0268
0269
0270 #define MHL_RCPE_STATUS_NO_ERROR 0x00
0271
0272 #define MHL_RCPE_STATUS_INEFFECTIVE_KEY_CODE 0x01
0273
0274 #define MHL_RCPE_STATUS_BUSY 0x02
0275
0276
0277
0278
0279
0280 #define MHL_RBPE_STATUS_NO_ERROR 0x00
0281
0282 #define MHL_RBPE_STATUS_INEFFECTIVE_BUTTON_CODE 0x01
0283
0284 #define MHL_RBPE_STATUS_BUSY 0x02
0285
0286
0287
0288
0289
0290 #define MHL_UCPE_STATUS_NO_ERROR 0x00
0291
0292 #define MHL_UCPE_STATUS_INEFFECTIVE_KEY_CODE 0x01
0293
0294 enum mhl_burst_id {
0295 MHL_BURST_ID_3D_VIC = 0x10,
0296 MHL_BURST_ID_3D_DTD = 0x11,
0297 MHL_BURST_ID_HEV_VIC = 0x20,
0298 MHL_BURST_ID_HEV_DTDA = 0x21,
0299 MHL_BURST_ID_HEV_DTDB = 0x22,
0300 MHL_BURST_ID_VC_ASSIGN = 0x38,
0301 MHL_BURST_ID_VC_CONFIRM = 0x39,
0302 MHL_BURST_ID_AUD_DELAY = 0x40,
0303 MHL_BURST_ID_ADT_BURSTID = 0x41,
0304 MHL_BURST_ID_BIST_SETUP = 0x51,
0305 MHL_BURST_ID_BIST_RETURN_STAT = 0x52,
0306 MHL_BURST_ID_EMSC_SUPPORT = 0x61,
0307 MHL_BURST_ID_HID_PAYLOAD = 0x62,
0308 MHL_BURST_ID_BLK_RCV_BUFFER_INFO = 0x63,
0309 MHL_BURST_ID_BITS_PER_PIXEL_FMT = 0x64,
0310 };
0311
0312 struct mhl_burst_blk_rcv_buffer_info {
0313 __be16 id;
0314 __le16 size;
0315 } __packed;
0316
0317 struct mhl3_burst_header {
0318 __be16 id;
0319 u8 checksum;
0320 u8 total_entries;
0321 u8 sequence_index;
0322 } __packed;
0323
0324 struct mhl_burst_bits_per_pixel_fmt {
0325 struct mhl3_burst_header hdr;
0326 u8 num_entries;
0327 struct {
0328 u8 stream_id;
0329 u8 pixel_format;
0330 } __packed desc[];
0331 } __packed;
0332
0333 struct mhl_burst_emsc_support {
0334 struct mhl3_burst_header hdr;
0335 u8 num_entries;
0336 __be16 burst_id[];
0337 } __packed;
0338
0339 struct mhl_burst_audio_descr {
0340 struct mhl3_burst_header hdr;
0341 u8 flags;
0342 u8 short_desc[9];
0343 } __packed;
0344
0345
0346
0347
0348
0349 #define MHL3_IEEE_OUI 0x7ca61d
0350 #define MHL3_INFOFRAME_SIZE 15
0351
0352 enum mhl3_video_format {
0353 MHL3_VIDEO_FORMAT_NONE,
0354 MHL3_VIDEO_FORMAT_3D,
0355 MHL3_VIDEO_FORMAT_MULTI_VIEW,
0356 MHL3_VIDEO_FORMAT_DUAL_3D
0357 };
0358
0359 enum mhl3_3d_format_type {
0360 MHL3_3D_FORMAT_TYPE_FS,
0361 MHL3_3D_FORMAT_TYPE_TB,
0362 MHL3_3D_FORMAT_TYPE_LR,
0363 MHL3_3D_FORMAT_TYPE_FS_TB,
0364 MHL3_3D_FORMAT_TYPE_FS_LR,
0365 MHL3_3D_FORMAT_TYPE_TB_LR
0366 };
0367
0368 struct mhl3_infoframe {
0369 unsigned char version;
0370 enum mhl3_video_format video_format;
0371 enum mhl3_3d_format_type format_type;
0372 bool sep_audio;
0373 int hev_format;
0374 int av_delay;
0375 };
0376
0377 #endif