162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Defines for Mobile High-Definition Link (MHL) interface
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2015, Samsung Electronics, Co., Ltd.
662306a36Sopenharmony_ci * Andrzej Hajda <a.hajda@samsung.com>
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Based on MHL driver for Android devices.
962306a36Sopenharmony_ci * Copyright (C) 2013-2014 Silicon Image, Inc.
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#ifndef __MHL_H__
1362306a36Sopenharmony_ci#define __MHL_H__
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include <linux/types.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/* Device Capabilities Registers */
1862306a36Sopenharmony_cienum {
1962306a36Sopenharmony_ci	MHL_DCAP_DEV_STATE,
2062306a36Sopenharmony_ci	MHL_DCAP_MHL_VERSION,
2162306a36Sopenharmony_ci	MHL_DCAP_CAT,
2262306a36Sopenharmony_ci	MHL_DCAP_ADOPTER_ID_H,
2362306a36Sopenharmony_ci	MHL_DCAP_ADOPTER_ID_L,
2462306a36Sopenharmony_ci	MHL_DCAP_VID_LINK_MODE,
2562306a36Sopenharmony_ci	MHL_DCAP_AUD_LINK_MODE,
2662306a36Sopenharmony_ci	MHL_DCAP_VIDEO_TYPE,
2762306a36Sopenharmony_ci	MHL_DCAP_LOG_DEV_MAP,
2862306a36Sopenharmony_ci	MHL_DCAP_BANDWIDTH,
2962306a36Sopenharmony_ci	MHL_DCAP_FEATURE_FLAG,
3062306a36Sopenharmony_ci	MHL_DCAP_DEVICE_ID_H,
3162306a36Sopenharmony_ci	MHL_DCAP_DEVICE_ID_L,
3262306a36Sopenharmony_ci	MHL_DCAP_SCRATCHPAD_SIZE,
3362306a36Sopenharmony_ci	MHL_DCAP_INT_STAT_SIZE,
3462306a36Sopenharmony_ci	MHL_DCAP_RESERVED,
3562306a36Sopenharmony_ci	MHL_DCAP_SIZE
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#define MHL_DCAP_CAT_SINK			0x01
3962306a36Sopenharmony_ci#define MHL_DCAP_CAT_SOURCE			0x02
4062306a36Sopenharmony_ci#define MHL_DCAP_CAT_POWER			0x10
4162306a36Sopenharmony_ci#define MHL_DCAP_CAT_PLIM(x)			((x) << 5)
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_RGB444		0x01
4462306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_YCBCR444		0x02
4562306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_YCBCR422		0x04
4662306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_PPIXEL		0x08
4762306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_ISLANDS		0x10
4862306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_VGA			0x20
4962306a36Sopenharmony_ci#define MHL_DCAP_VID_LINK_16BPP			0x40
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#define MHL_DCAP_AUD_LINK_2CH			0x01
5262306a36Sopenharmony_ci#define MHL_DCAP_AUD_LINK_8CH			0x02
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#define MHL_DCAP_VT_GRAPHICS			0x00
5562306a36Sopenharmony_ci#define MHL_DCAP_VT_PHOTO			0x02
5662306a36Sopenharmony_ci#define MHL_DCAP_VT_CINEMA			0x04
5762306a36Sopenharmony_ci#define MHL_DCAP_VT_GAMES			0x08
5862306a36Sopenharmony_ci#define MHL_DCAP_SUPP_VT			0x80
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci#define MHL_DCAP_LD_DISPLAY			0x01
6162306a36Sopenharmony_ci#define MHL_DCAP_LD_VIDEO			0x02
6262306a36Sopenharmony_ci#define MHL_DCAP_LD_AUDIO			0x04
6362306a36Sopenharmony_ci#define MHL_DCAP_LD_MEDIA			0x08
6462306a36Sopenharmony_ci#define MHL_DCAP_LD_TUNER			0x10
6562306a36Sopenharmony_ci#define MHL_DCAP_LD_RECORD			0x20
6662306a36Sopenharmony_ci#define MHL_DCAP_LD_SPEAKER			0x40
6762306a36Sopenharmony_ci#define MHL_DCAP_LD_GUI				0x80
6862306a36Sopenharmony_ci#define MHL_DCAP_LD_ALL				0xFF
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_RCP_SUPPORT		0x01
7162306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_RAP_SUPPORT		0x02
7262306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_SP_SUPPORT		0x04
7362306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_UCP_SEND_SUPPOR	0x08
7462306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_UCP_RECV_SUPPORT	0x10
7562306a36Sopenharmony_ci#define MHL_DCAP_FEATURE_RBP_SUPPORT		0x40
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/* Extended Device Capabilities Registers */
7862306a36Sopenharmony_cienum {
7962306a36Sopenharmony_ci	MHL_XDC_ECBUS_SPEEDS,
8062306a36Sopenharmony_ci	MHL_XDC_TMDS_SPEEDS,
8162306a36Sopenharmony_ci	MHL_XDC_ECBUS_ROLES,
8262306a36Sopenharmony_ci	MHL_XDC_LOG_DEV_MAPX,
8362306a36Sopenharmony_ci	MHL_XDC_SIZE
8462306a36Sopenharmony_ci};
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci#define MHL_XDC_ECBUS_S_075			0x01
8762306a36Sopenharmony_ci#define MHL_XDC_ECBUS_S_8BIT			0x02
8862306a36Sopenharmony_ci#define MHL_XDC_ECBUS_S_12BIT			0x04
8962306a36Sopenharmony_ci#define MHL_XDC_ECBUS_D_150			0x10
9062306a36Sopenharmony_ci#define MHL_XDC_ECBUS_D_8BIT			0x20
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci#define MHL_XDC_TMDS_000			0x00
9362306a36Sopenharmony_ci#define MHL_XDC_TMDS_150			0x01
9462306a36Sopenharmony_ci#define MHL_XDC_TMDS_300			0x02
9562306a36Sopenharmony_ci#define MHL_XDC_TMDS_600			0x04
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci/* MHL_XDC_ECBUS_ROLES flags */
9862306a36Sopenharmony_ci#define MHL_XDC_DEV_HOST			0x01
9962306a36Sopenharmony_ci#define MHL_XDC_DEV_DEVICE			0x02
10062306a36Sopenharmony_ci#define MHL_XDC_DEV_CHARGER			0x04
10162306a36Sopenharmony_ci#define MHL_XDC_HID_HOST			0x08
10262306a36Sopenharmony_ci#define MHL_XDC_HID_DEVICE			0x10
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci/* MHL_XDC_LOG_DEV_MAPX flags */
10562306a36Sopenharmony_ci#define MHL_XDC_LD_PHONE			0x01
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci/* Device Status Registers */
10862306a36Sopenharmony_cienum {
10962306a36Sopenharmony_ci	MHL_DST_CONNECTED_RDY,
11062306a36Sopenharmony_ci	MHL_DST_LINK_MODE,
11162306a36Sopenharmony_ci	MHL_DST_VERSION,
11262306a36Sopenharmony_ci	MHL_DST_SIZE
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci/* Offset of DEVSTAT registers */
11662306a36Sopenharmony_ci#define MHL_DST_OFFSET				0x30
11762306a36Sopenharmony_ci#define MHL_DST_REG(name) (MHL_DST_OFFSET + MHL_DST_##name)
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci#define MHL_DST_CONN_DCAP_RDY			0x01
12062306a36Sopenharmony_ci#define MHL_DST_CONN_XDEVCAPP_SUPP		0x02
12162306a36Sopenharmony_ci#define MHL_DST_CONN_POW_STAT			0x04
12262306a36Sopenharmony_ci#define MHL_DST_CONN_PLIM_STAT_MASK		0x38
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci#define MHL_DST_LM_CLK_MODE_MASK		0x07
12562306a36Sopenharmony_ci#define MHL_DST_LM_CLK_MODE_PACKED_PIXEL	0x02
12662306a36Sopenharmony_ci#define MHL_DST_LM_CLK_MODE_NORMAL		0x03
12762306a36Sopenharmony_ci#define MHL_DST_LM_PATH_EN_MASK			0x08
12862306a36Sopenharmony_ci#define MHL_DST_LM_PATH_ENABLED			0x08
12962306a36Sopenharmony_ci#define MHL_DST_LM_PATH_DISABLED		0x00
13062306a36Sopenharmony_ci#define MHL_DST_LM_MUTED_MASK			0x10
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci/* Extended Device Status Registers */
13362306a36Sopenharmony_cienum {
13462306a36Sopenharmony_ci	MHL_XDS_CURR_ECBUS_MODE,
13562306a36Sopenharmony_ci	MHL_XDS_AVLINK_MODE_STATUS,
13662306a36Sopenharmony_ci	MHL_XDS_AVLINK_MODE_CONTROL,
13762306a36Sopenharmony_ci	MHL_XDS_MULTI_SINK_STATUS,
13862306a36Sopenharmony_ci	MHL_XDS_SIZE
13962306a36Sopenharmony_ci};
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci/* Offset of XDEVSTAT registers */
14262306a36Sopenharmony_ci#define MHL_XDS_OFFSET				0x90
14362306a36Sopenharmony_ci#define MHL_XDS_REG(name) (MHL_XDS_OFFSET + MHL_XDS_##name)
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci/* MHL_XDS_REG_CURR_ECBUS_MODE flags */
14662306a36Sopenharmony_ci#define MHL_XDS_SLOT_MODE_8BIT			0x00
14762306a36Sopenharmony_ci#define MHL_XDS_SLOT_MODE_6BIT			0x01
14862306a36Sopenharmony_ci#define MHL_XDS_ECBUS_S				0x04
14962306a36Sopenharmony_ci#define MHL_XDS_ECBUS_D				0x08
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci#define MHL_XDS_LINK_CLOCK_75MHZ		0x00
15262306a36Sopenharmony_ci#define MHL_XDS_LINK_CLOCK_150MHZ		0x10
15362306a36Sopenharmony_ci#define MHL_XDS_LINK_CLOCK_300MHZ		0x20
15462306a36Sopenharmony_ci#define MHL_XDS_LINK_CLOCK_600MHZ		0x30
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci#define MHL_XDS_LINK_STATUS_NO_SIGNAL		0x00
15762306a36Sopenharmony_ci#define MHL_XDS_LINK_STATUS_CRU_LOCKED		0x01
15862306a36Sopenharmony_ci#define MHL_XDS_LINK_STATUS_TMDS_NORMAL		0x02
15962306a36Sopenharmony_ci#define MHL_XDS_LINK_STATUS_TMDS_RESERVED	0x03
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci#define MHL_XDS_LINK_RATE_1_5_GBPS		0x00
16262306a36Sopenharmony_ci#define MHL_XDS_LINK_RATE_3_0_GBPS		0x01
16362306a36Sopenharmony_ci#define MHL_XDS_LINK_RATE_6_0_GBPS		0x02
16462306a36Sopenharmony_ci#define MHL_XDS_ATT_CAPABLE			0x08
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_1_HPD_LOW		0x00
16762306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_1_HPD_HIGH		0x01
16862306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_2_HPD_LOW		0x00
16962306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_2_HPD_HIGH		0x04
17062306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_3_HPD_LOW		0x00
17162306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_3_HPD_HIGH		0x10
17262306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_4_HPD_LOW		0x00
17362306a36Sopenharmony_ci#define MHL_XDS_SINK_STATUS_4_HPD_HIGH		0x40
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci/* Interrupt Registers */
17662306a36Sopenharmony_cienum {
17762306a36Sopenharmony_ci	MHL_INT_RCHANGE,
17862306a36Sopenharmony_ci	MHL_INT_DCHANGE,
17962306a36Sopenharmony_ci	MHL_INT_SIZE
18062306a36Sopenharmony_ci};
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci/* Offset of DEVSTAT registers */
18362306a36Sopenharmony_ci#define MHL_INT_OFFSET				0x20
18462306a36Sopenharmony_ci#define MHL_INT_REG(name) (MHL_INT_OFFSET + MHL_INT_##name)
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci#define	MHL_INT_RC_DCAP_CHG			0x01
18762306a36Sopenharmony_ci#define MHL_INT_RC_DSCR_CHG			0x02
18862306a36Sopenharmony_ci#define MHL_INT_RC_REQ_WRT			0x04
18962306a36Sopenharmony_ci#define MHL_INT_RC_GRT_WRT			0x08
19062306a36Sopenharmony_ci#define MHL_INT_RC_3D_REQ			0x10
19162306a36Sopenharmony_ci#define MHL_INT_RC_FEAT_REQ			0x20
19262306a36Sopenharmony_ci#define MHL_INT_RC_FEAT_COMPLETE		0x40
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci#define MHL_INT_DC_EDID_CHG			0x02
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_cienum {
19762306a36Sopenharmony_ci	MHL_ACK = 0x33, /* Command or Data byte acknowledge */
19862306a36Sopenharmony_ci	MHL_NACK = 0x34, /* Command or Data byte not acknowledge */
19962306a36Sopenharmony_ci	MHL_ABORT = 0x35, /* Transaction abort */
20062306a36Sopenharmony_ci	MHL_WRITE_STAT = 0xe0, /* Write one status register */
20162306a36Sopenharmony_ci	MHL_SET_INT = 0x60, /* Write one interrupt register */
20262306a36Sopenharmony_ci	MHL_READ_DEVCAP_REG = 0x61, /* Read one register */
20362306a36Sopenharmony_ci	MHL_GET_STATE = 0x62, /* Read CBUS revision level from follower */
20462306a36Sopenharmony_ci	MHL_GET_VENDOR_ID = 0x63, /* Read vendor ID value from follower */
20562306a36Sopenharmony_ci	MHL_SET_HPD = 0x64, /* Set Hot Plug Detect in follower */
20662306a36Sopenharmony_ci	MHL_CLR_HPD = 0x65, /* Clear Hot Plug Detect in follower */
20762306a36Sopenharmony_ci	MHL_SET_CAP_ID = 0x66, /* Set Capture ID for downstream device */
20862306a36Sopenharmony_ci	MHL_GET_CAP_ID = 0x67, /* Get Capture ID from downstream device */
20962306a36Sopenharmony_ci	MHL_MSC_MSG = 0x68, /* VS command to send RCP sub-commands */
21062306a36Sopenharmony_ci	MHL_GET_SC1_ERRORCODE = 0x69, /* Get Vendor-Specific error code */
21162306a36Sopenharmony_ci	MHL_GET_DDC_ERRORCODE = 0x6A, /* Get DDC channel command error code */
21262306a36Sopenharmony_ci	MHL_GET_MSC_ERRORCODE = 0x6B, /* Get MSC command error code */
21362306a36Sopenharmony_ci	MHL_WRITE_BURST = 0x6C, /* Write 1-16 bytes to responder's scratchpad */
21462306a36Sopenharmony_ci	MHL_GET_SC3_ERRORCODE = 0x6D, /* Get channel 3 command error code */
21562306a36Sopenharmony_ci	MHL_WRITE_XSTAT = 0x70, /* Write one extended status register */
21662306a36Sopenharmony_ci	MHL_READ_XDEVCAP_REG = 0x71, /* Read one extended devcap register */
21762306a36Sopenharmony_ci	/* let the rest of these float, they are software specific */
21862306a36Sopenharmony_ci	MHL_READ_EDID_BLOCK,
21962306a36Sopenharmony_ci	MHL_SEND_3D_REQ_OR_FEAT_REQ,
22062306a36Sopenharmony_ci	MHL_READ_DEVCAP,
22162306a36Sopenharmony_ci	MHL_READ_XDEVCAP
22262306a36Sopenharmony_ci};
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci/* MSC message types */
22562306a36Sopenharmony_cienum {
22662306a36Sopenharmony_ci	MHL_MSC_MSG_RCP = 0x10, /* RCP sub-command */
22762306a36Sopenharmony_ci	MHL_MSC_MSG_RCPK = 0x11, /* RCP Acknowledge sub-command */
22862306a36Sopenharmony_ci	MHL_MSC_MSG_RCPE = 0x12, /* RCP Error sub-command */
22962306a36Sopenharmony_ci	MHL_MSC_MSG_RAP = 0x20, /* Mode Change Warning sub-command */
23062306a36Sopenharmony_ci	MHL_MSC_MSG_RAPK = 0x21, /* MCW Acknowledge sub-command */
23162306a36Sopenharmony_ci	MHL_MSC_MSG_RBP = 0x22, /* Remote Button Protocol sub-command */
23262306a36Sopenharmony_ci	MHL_MSC_MSG_RBPK = 0x23, /* RBP Acknowledge sub-command */
23362306a36Sopenharmony_ci	MHL_MSC_MSG_RBPE = 0x24, /* RBP Error sub-command */
23462306a36Sopenharmony_ci	MHL_MSC_MSG_UCP = 0x30, /* UCP sub-command */
23562306a36Sopenharmony_ci	MHL_MSC_MSG_UCPK = 0x31, /* UCP Acknowledge sub-command */
23662306a36Sopenharmony_ci	MHL_MSC_MSG_UCPE = 0x32, /* UCP Error sub-command */
23762306a36Sopenharmony_ci	MHL_MSC_MSG_RUSB = 0x40, /* Request USB host role */
23862306a36Sopenharmony_ci	MHL_MSC_MSG_RUSBK = 0x41, /* Acknowledge request for USB host role */
23962306a36Sopenharmony_ci	MHL_MSC_MSG_RHID = 0x42, /* Request HID host role */
24062306a36Sopenharmony_ci	MHL_MSC_MSG_RHIDK = 0x43, /* Acknowledge request for HID host role */
24162306a36Sopenharmony_ci	MHL_MSC_MSG_ATT = 0x50, /* Request attention sub-command */
24262306a36Sopenharmony_ci	MHL_MSC_MSG_ATTK = 0x51, /* ATT Acknowledge sub-command */
24362306a36Sopenharmony_ci	MHL_MSC_MSG_BIST_TRIGGER = 0x60,
24462306a36Sopenharmony_ci	MHL_MSC_MSG_BIST_REQUEST_STAT = 0x61,
24562306a36Sopenharmony_ci	MHL_MSC_MSG_BIST_READY = 0x62,
24662306a36Sopenharmony_ci	MHL_MSC_MSG_BIST_STOP = 0x63,
24762306a36Sopenharmony_ci};
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci/* RAP action codes */
25062306a36Sopenharmony_ci#define MHL_RAP_POLL		0x00	/* Just do an ack */
25162306a36Sopenharmony_ci#define MHL_RAP_CONTENT_ON	0x10	/* Turn content stream ON */
25262306a36Sopenharmony_ci#define MHL_RAP_CONTENT_OFF	0x11	/* Turn content stream OFF */
25362306a36Sopenharmony_ci#define MHL_RAP_CBUS_MODE_DOWN	0x20
25462306a36Sopenharmony_ci#define MHL_RAP_CBUS_MODE_UP	0x21
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci/* RAPK status codes */
25762306a36Sopenharmony_ci#define MHL_RAPK_NO_ERR		0x00	/* RAP action recognized & supported */
25862306a36Sopenharmony_ci#define MHL_RAPK_UNRECOGNIZED	0x01	/* Unknown RAP action code received */
25962306a36Sopenharmony_ci#define MHL_RAPK_UNSUPPORTED	0x02	/* Rcvd RAP action code not supported */
26062306a36Sopenharmony_ci#define MHL_RAPK_BUSY		0x03	/* Responder too busy to respond */
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci/* Bit masks for RCP messages */
26362306a36Sopenharmony_ci#define MHL_RCP_KEY_RELEASED_MASK	0x80
26462306a36Sopenharmony_ci#define MHL_RCP_KEY_ID_MASK		0x7F
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci/*
26762306a36Sopenharmony_ci * Error status codes for RCPE messages
26862306a36Sopenharmony_ci */
26962306a36Sopenharmony_ci/* No error. (Not allowed in RCPE messages) */
27062306a36Sopenharmony_ci#define MHL_RCPE_STATUS_NO_ERROR		0x00
27162306a36Sopenharmony_ci/* Unsupported/unrecognized key code */
27262306a36Sopenharmony_ci#define MHL_RCPE_STATUS_INEFFECTIVE_KEY_CODE	0x01
27362306a36Sopenharmony_ci/* Responder busy. Initiator may retry message */
27462306a36Sopenharmony_ci#define MHL_RCPE_STATUS_BUSY			0x02
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ci/*
27762306a36Sopenharmony_ci * Error status codes for RBPE messages
27862306a36Sopenharmony_ci */
27962306a36Sopenharmony_ci/* No error. (Not allowed in RBPE messages) */
28062306a36Sopenharmony_ci#define MHL_RBPE_STATUS_NO_ERROR		0x00
28162306a36Sopenharmony_ci/* Unsupported/unrecognized button code */
28262306a36Sopenharmony_ci#define MHL_RBPE_STATUS_INEFFECTIVE_BUTTON_CODE	0x01
28362306a36Sopenharmony_ci/* Responder busy. Initiator may retry message */
28462306a36Sopenharmony_ci#define MHL_RBPE_STATUS_BUSY			0x02
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci/*
28762306a36Sopenharmony_ci * Error status codes for UCPE messages
28862306a36Sopenharmony_ci */
28962306a36Sopenharmony_ci/* No error. (Not allowed in UCPE messages) */
29062306a36Sopenharmony_ci#define MHL_UCPE_STATUS_NO_ERROR		0x00
29162306a36Sopenharmony_ci/* Unsupported/unrecognized key code */
29262306a36Sopenharmony_ci#define MHL_UCPE_STATUS_INEFFECTIVE_KEY_CODE	0x01
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_cienum mhl_burst_id {
29562306a36Sopenharmony_ci	MHL_BURST_ID_3D_VIC = 0x10,
29662306a36Sopenharmony_ci	MHL_BURST_ID_3D_DTD = 0x11,
29762306a36Sopenharmony_ci	MHL_BURST_ID_HEV_VIC = 0x20,
29862306a36Sopenharmony_ci	MHL_BURST_ID_HEV_DTDA = 0x21,
29962306a36Sopenharmony_ci	MHL_BURST_ID_HEV_DTDB = 0x22,
30062306a36Sopenharmony_ci	MHL_BURST_ID_VC_ASSIGN = 0x38,
30162306a36Sopenharmony_ci	MHL_BURST_ID_VC_CONFIRM = 0x39,
30262306a36Sopenharmony_ci	MHL_BURST_ID_AUD_DELAY = 0x40,
30362306a36Sopenharmony_ci	MHL_BURST_ID_ADT_BURSTID = 0x41,
30462306a36Sopenharmony_ci	MHL_BURST_ID_BIST_SETUP = 0x51,
30562306a36Sopenharmony_ci	MHL_BURST_ID_BIST_RETURN_STAT = 0x52,
30662306a36Sopenharmony_ci	MHL_BURST_ID_EMSC_SUPPORT = 0x61,
30762306a36Sopenharmony_ci	MHL_BURST_ID_HID_PAYLOAD = 0x62,
30862306a36Sopenharmony_ci	MHL_BURST_ID_BLK_RCV_BUFFER_INFO = 0x63,
30962306a36Sopenharmony_ci	MHL_BURST_ID_BITS_PER_PIXEL_FMT = 0x64,
31062306a36Sopenharmony_ci};
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_cistruct mhl_burst_blk_rcv_buffer_info {
31362306a36Sopenharmony_ci	__be16 id;
31462306a36Sopenharmony_ci	__le16 size;
31562306a36Sopenharmony_ci} __packed;
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_cistruct mhl3_burst_header {
31862306a36Sopenharmony_ci	__be16 id;
31962306a36Sopenharmony_ci	u8 checksum;
32062306a36Sopenharmony_ci	u8 total_entries;
32162306a36Sopenharmony_ci	u8 sequence_index;
32262306a36Sopenharmony_ci} __packed;
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_cistruct mhl_burst_bits_per_pixel_fmt {
32562306a36Sopenharmony_ci	struct mhl3_burst_header hdr;
32662306a36Sopenharmony_ci	u8 num_entries;
32762306a36Sopenharmony_ci	struct {
32862306a36Sopenharmony_ci		u8 stream_id;
32962306a36Sopenharmony_ci		u8 pixel_format;
33062306a36Sopenharmony_ci	} __packed desc[];
33162306a36Sopenharmony_ci} __packed;
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_cistruct mhl_burst_emsc_support {
33462306a36Sopenharmony_ci	struct mhl3_burst_header hdr;
33562306a36Sopenharmony_ci	u8 num_entries;
33662306a36Sopenharmony_ci	__be16 burst_id[];
33762306a36Sopenharmony_ci} __packed;
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_cistruct mhl_burst_audio_descr {
34062306a36Sopenharmony_ci	struct mhl3_burst_header hdr;
34162306a36Sopenharmony_ci	u8 flags;
34262306a36Sopenharmony_ci	u8 short_desc[9];
34362306a36Sopenharmony_ci} __packed;
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci/*
34662306a36Sopenharmony_ci * MHL3 infoframe related definitions
34762306a36Sopenharmony_ci */
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci#define MHL3_IEEE_OUI		0x7ca61d
35062306a36Sopenharmony_ci#define MHL3_INFOFRAME_SIZE	15
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cienum mhl3_video_format {
35362306a36Sopenharmony_ci	MHL3_VIDEO_FORMAT_NONE,
35462306a36Sopenharmony_ci	MHL3_VIDEO_FORMAT_3D,
35562306a36Sopenharmony_ci	MHL3_VIDEO_FORMAT_MULTI_VIEW,
35662306a36Sopenharmony_ci	MHL3_VIDEO_FORMAT_DUAL_3D
35762306a36Sopenharmony_ci};
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_cienum mhl3_3d_format_type {
36062306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_FS, /* frame sequential */
36162306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_TB, /* top-bottom */
36262306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_LR, /* left-right */
36362306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_FS_TB, /* frame sequential, top-bottom */
36462306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_FS_LR, /* frame sequential, left-right */
36562306a36Sopenharmony_ci	MHL3_3D_FORMAT_TYPE_TB_LR /* top-bottom, left-right */
36662306a36Sopenharmony_ci};
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_cistruct mhl3_infoframe {
36962306a36Sopenharmony_ci	unsigned char version;
37062306a36Sopenharmony_ci	enum mhl3_video_format video_format;
37162306a36Sopenharmony_ci	enum mhl3_3d_format_type format_type;
37262306a36Sopenharmony_ci	bool sep_audio;
37362306a36Sopenharmony_ci	int hev_format;
37462306a36Sopenharmony_ci	int av_delay;
37562306a36Sopenharmony_ci};
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci#endif /* __MHL_H__ */
378