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
|
/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __MHL_SPEC_DEFS_H__
#define __MHL_SPEC_DEFS_H__
enum DevCapOffset_e {
DEVCAP_OFFSET_DEV_STATE = 0x00,
DEVCAP_OFFSET_MHL_VERSION = 0x01,
DEVCAP_OFFSET_DEV_CAT = 0x02,
DEVCAP_OFFSET_ADOPTER_ID_H = 0x03,
DEVCAP_OFFSET_ADOPTER_ID_L = 0x04,
DEVCAP_OFFSET_VID_LINK_MODE = 0x05,
DEVCAP_OFFSET_AUD_LINK_MODE = 0x06,
DEVCAP_OFFSET_VIDEO_TYPE = 0x07,
DEVCAP_OFFSET_LOG_DEV_MAP = 0x08,
DEVCAP_OFFSET_BANDWIDTH = 0x09,
DEVCAP_OFFSET_FEATURE_FLAG = 0x0A,
DEVCAP_OFFSET_DEVICE_ID_H = 0x0B,
DEVCAP_OFFSET_DEVICE_ID_L = 0x0C,
DEVCAP_OFFSET_SCRATCHPAD_SIZE = 0x0D,
DEVCAP_OFFSET_INT_STAT_SIZE = 0x0E,
DEVCAP_OFFSET_RESERVED = 0x0F,
/* this one must be last */
DEVCAP_SIZE
};
#ifndef __MHL_MSM_8334_REGS_H__
#define __MHL_MSM_8334_REGS_H__
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
#define LOW 0
#define HIGH 1
#define MAX_PAGES 8
#endif
/* Version that this chip supports*/
/* bits 4..7 */
#define MHL_VER_MAJOR (0x01 << 4)
/* bits 0..3 */
#define MHL_VER_MINOR 0x02
#define MHL_VERSION (MHL_VER_MAJOR | MHL_VER_MINOR)
/*Device Category*/
#define MHL_DEV_CATEGORY_OFFSET DEVCAP_OFFSET_DEV_CAT
#define MHL_DEV_CATEGORY_POW_BIT (BIT4)
#define MHL_DEV_CAT_SOURCE 0x02
/*Video Link Mode*/
#define MHL_DEV_VID_LINK_SUPPRGB444 0x01
#define MHL_DEV_VID_LINK_SUPPYCBCR444 0x02
#define MHL_DEV_VID_LINK_SUPPYCBCR422 0x04
#define MHL_DEV_VID_LINK_SUPP_PPIXEL 0x08
#define MHL_DEV_VID_LINK_SUPP_ISLANDS 0x10
/*Audio Link Mode Support*/
#define MHL_DEV_AUD_LINK_2CH 0x01
#define MHL_DEV_AUD_LINK_8CH 0x02
/*Feature Flag in the devcap*/
#define MHL_DEV_FEATURE_FLAG_OFFSET DEVCAP_OFFSET_FEATURE_FLAG
/* Dongles have freedom to not support RCP */
#define MHL_FEATURE_RCP_SUPPORT BIT0
/* Dongles have freedom to not support RAP */
#define MHL_FEATURE_RAP_SUPPORT BIT1
/* Dongles have freedom to not support SCRATCHPAD */
#define MHL_FEATURE_SP_SUPPORT BIT2
/*Logical Dev Map*/
#define MHL_DEV_LD_DISPLAY (0x01 << 0)
#define MHL_DEV_LD_VIDEO (0x01 << 1)
#define MHL_DEV_LD_AUDIO (0x01 << 2)
#define MHL_DEV_LD_MEDIA (0x01 << 3)
#define MHL_DEV_LD_TUNER (0x01 << 4)
#define MHL_DEV_LD_RECORD (0x01 << 5)
#define MHL_DEV_LD_SPEAKER (0x01 << 6)
#define MHL_DEV_LD_GUI (0x01 << 7)
/*Bandwidth*/
/* 225 MHz */
#define MHL_BANDWIDTH_LIMIT 22
#define MHL_STATUS_REG_CONNECTED_RDY 0x30
#define MHL_STATUS_REG_LINK_MODE 0x31
#define MHL_STATUS_DCAP_RDY BIT0
#define MHL_STATUS_CLK_MODE_MASK 0x07
#define MHL_STATUS_CLK_MODE_PACKED_PIXEL 0x02
#define MHL_STATUS_CLK_MODE_NORMAL 0x03
#define MHL_STATUS_PATH_EN_MASK 0x08
#define MHL_STATUS_PATH_ENABLED 0x08
#define MHL_STATUS_PATH_DISABLED 0x00
#define MHL_STATUS_MUTED_MASK 0x10
#define MHL_RCHANGE_INT 0x20
#define MHL_DCHANGE_INT 0x21
#define MHL_INT_DCAP_CHG BIT0
#define MHL_INT_DSCR_CHG BIT1
#define MHL_INT_REQ_WRT BIT2
#define MHL_INT_GRT_WRT BIT3
/* On INTR_1 the EDID_CHG is located at BIT 0*/
#define MHL_INT_EDID_CHG BIT1
/* This contains one nibble each - max offset */
#define MHL_INT_AND_STATUS_SIZE 0x33
#define MHL_SCRATCHPAD_OFFSET 0x40
#define MHL_SCRATCHPAD_SIZE 16
#define MAX_SCRATCHPAD_TRANSFER_SIZE 64
#define ADOPTER_ID_SIZE 2
#define MHL_DEVCAP_ALL 0xffff
/* manually define highest number */
#define MHL_MAX_BUFFER_SIZE MHL_SCRATCHPAD_SIZE
#define MHL_BURST_WAIT (1000)
enum {
/* RCP sub-command */
MHL_MSC_MSG_RCP = 0x10,
/* RCP Acknowledge sub-command */
MHL_MSC_MSG_RCPK = 0x11,
/* RCP Error sub-command */
MHL_MSC_MSG_RCPE = 0x12,
/* Mode Change Warning sub-command */
MHL_MSC_MSG_RAP = 0x20,
/* MCW Acknowledge sub-command */
MHL_MSC_MSG_RAPK = 0x21,
};
#define MHL_RCPE_NO_ERROR 0x00
#define MHL_RCPE_UNSUPPORTED_KEY_CODE 0x01
#define MHL_RCPE_INEFFECTIVE_KEY_CODE 0x01
#define MHL_RCPE_BUSY 0x02
#define MHL_RAPK_NO_ERROR 0x00
#define MHL_RAPK_UNRECOGNIZED_ACTION_CODE 0x01
#define MHL_RAPK_UNSUPPORTED_ACTION_CODE 0x02
#define MHL_RAPK_BUSY 0x03
#define T_ABORT_NEXT (2050)
/* MHL spec related defines*/
enum {
/* Command or Data byte acknowledge */
MHL_ACK = 0x33,
/* Command or Data byte not acknowledge */
MHL_NACK = 0x34,
/* Transaction abort */
MHL_ABORT = 0x35,
/* 0xE0 - Write one status register strip top bit */
MHL_WRITE_STAT = 0x60 | 0x80,
/* Write one interrupt register */
MHL_SET_INT = 0x60,
/* Read one register */
MHL_READ_DEVCAP = 0x61,
/* Read CBUS revision level from follower */
MHL_GET_STATE = 0x62,
/* Read vendor ID value from follower. */
MHL_GET_VENDOR_ID = 0x63,
/* Set Hot Plug Detect in follower */
MHL_SET_HPD = 0x64,
/* Clear Hot Plug Detect in follower */
MHL_CLR_HPD = 0x65,
/* Set Capture ID for downstream device. */
MHL_SET_CAP_ID = 0x66,
/* Get Capture ID from downstream device. */
MHL_GET_CAP_ID = 0x67,
/* VS command to send RCP sub-commands */
MHL_MSC_MSG = 0x68,
/* Get Vendor-Specific command error code. */
MHL_GET_SC1_ERRORCODE = 0x69,
/* Get DDC channel command error code. */
MHL_GET_DDC_ERRORCODE = 0x6A,
/* Get MSC command error code. */
MHL_GET_MSC_ERRORCODE = 0x6B,
/* Write 1-16 bytes to responder's scratchpad. */
MHL_WRITE_BURST = 0x6C,
/* Get channel 3 command error code. */
MHL_GET_SC3_ERRORCODE = 0x6D,
};
/* Polling. */
#define MHL_RAP_POLL 0x00
/* Turn content streaming ON. */
#define MHL_RAP_CONTENT_ON 0x10
/* Turn content streaming OFF. */
#define MHL_RAP_CONTENT_OFF 0x11
/*
*
* MHL Timings applicable to this driver.
*
*/
/* 100 - 1000 milliseconds. Per MHL 1.0 Specs */
#define T_SRC_VBUS_CBUS_TO_STABLE (200)
/* 20 milliseconds. Per MHL 1.0 Specs */
#define T_SRC_WAKE_PULSE_WIDTH_1 (20)
/* 60 milliseconds. Per MHL 1.0 Specs */
#define T_SRC_WAKE_PULSE_WIDTH_2 (60)
/* 100 - 1000 milliseconds. Per MHL 1.0 Specs */
#define T_SRC_WAKE_TO_DISCOVER (500)
#define T_SRC_VBUS_CBUS_T0_STABLE (500)
/* Allow RSEN to stay low this much before reacting.*/
#define T_SRC_RSEN_DEGLITCH (100)
/* Wait this much after connection before reacting to RSEN (300-500ms)*/
/* Per specs between 300 to 500 ms*/
#define T_SRC_RXSENSE_CHK (400)
#endif /* __MHL_SPEC_DEFS_H__ */
|