sii8240_driver.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074
  1. /*
  2. * Copyright (C) 2012 Samsung Electronics
  3. *
  4. * Author: Kyungmin Park <kmini.park@samsung.com>
  5. *
  6. * Date: 3:00 PM, 31st May,2012
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. *
  22. */
  23. #ifndef __SII8240_H__
  24. #define __SII8240_H__
  25. #include <linux/notifier.h>
  26. #include <linux/timer.h>
  27. #include <linux/switch.h>
  28. #ifdef CONFIG_EXTCON
  29. #include <linux/extcon.h>
  30. #endif
  31. #include "sii8240_rcp.h"
  32. #include "../../mdss/mdss_hdmi_util.h"
  33. #undef MHL_2X_3D
  34. /* for factory test process */
  35. #define CONFIG_SS_FACTORY
  36. #define SFEATURE_UNSTABLE_SOURCE_WA
  37. #define SFEATURE_HDCP_SUPPORT
  38. #define SII8240_CHECK_MONITOR
  39. #define MHL_MAJOR 271
  40. /* I2C Register pages mentioned in SII8240 PRM */
  41. /* Page-0:TMDS & MISC control */
  42. #define SII8240_MHL_TMDS_TX 0x72
  43. /* Page-1:Reserved */
  44. #define SII8240_MHL_RESERVED 0x7A
  45. /* Page-2:HDMI, Analog core control */
  46. #define SII8240_MHL_HDMI_RX 0x92
  47. /* Page-3:Discover control & interrupt */
  48. #define SII8240_MHL_DISC_TX 0x9A
  49. /* TPI:TMDS,HDCP,EDID,InfoFrame Control */
  50. #define SII8240_MHL_TPI_TX 0xB2
  51. /* VS:Reserved */
  52. #define SII8240_MHL_VS_RESERVED 0xC0
  53. /* CBUS:Cbus config,control etc */
  54. #define SII8240_MHL_CBUS_TX 0xC8
  55. /* DDC:EDID Segment Pointer */
  56. #define SII8240_MHL_EDID_SEG_TX 0x60
  57. /* DDC:HDCP Protocol */
  58. #define SII8240_MHL_HDCP_TX 0x74
  59. /* DDC:EDID Transfer */
  60. #define SII8240_MHL_EDID_XFER_TX 0xA0
  61. /* Page-0[0x72]:TMDS & MISC control Registers & Bit-defintions */
  62. #define MHL_TX_DEV_IDLOW_REG 0x02 /* default value: 0x40 */
  63. #define MHL_TX_DEV_IDHIGH_REG 0x03 /* default value: 0x82 */
  64. #define MHL_TX_DEV_IDREV_REG 0x04 /* default value: 0x00 */
  65. #define UPSTRM_HPD_CTRL_REG 0x79
  66. #define HPD_OVERRIDE_EN (1<<4)
  67. #define HPD_OUT_OVERRIDE_VAL (1<<5)
  68. #define HPD_OUTPUT_OD_EN (1<<6)
  69. #define TPI_DISABLE_REG 0xC7 /* Not documented */
  70. #define SW_TPI_EN_MASK 0x80
  71. #define SW_TPI_EN_HW_TPI 0x00
  72. #define SW_TPI_EN_NON_HW_TPI 0x80
  73. #define DCTL_REG 0x0D /* Not documented */
  74. #define TCLK3X_PHASE 0x01
  75. #define TCLK_PHASE_MASK 0x02
  76. #define TCLK_PHASE_NORMAL 0x00
  77. #define TCLK_PHASE_INVERTED 0x02
  78. #define TRANSCODE_MASK 0x08
  79. #define TRANSCODE_OFF 0x00
  80. #define TRANSCODE_ON 0x08
  81. #define EXT_DDC_SEL 0x10
  82. /* Page-2[0x92]: Analog Core Registers */
  83. #define TMDS_CLK_EN_REG 0x11 /* Not documented */
  84. #define TMDS_CH_EN_REG 0x12 /* Not documented */
  85. #define MHLTX_TERM_CTRL_REG 0x80
  86. #define MHLTX_TERM_OFF ((1<<6) | (1<<7))
  87. #define MHLTX_CTL4_REG 0x83 /* Not documented */
  88. #define DATA_SWING_CTL_MASK 0x07
  89. #define CLK_SWING_CTL_MASK 0x38
  90. #define MHLTX_CTL7_REG 0x86 /* Not documented */
  91. #define TPI_PACKET_FILTER_REG 0x90 /* Not documented */
  92. #define DROP_GCP_PKT (1<<0)
  93. #define DROP_CTS_PKT (1<<1)
  94. #define DROP_AVI_PKT (1<<2)
  95. #define DROP_AIF_PKT (1<<3)
  96. #define DROP_SPIF_PKT (1<<4)
  97. #define DROP_MPEG_PKT (1<<5)
  98. #define DROP_CEA_CP_PKT (1<<6)
  99. #define DROP_CEA_GAMUT_PKT (1<<7)
  100. #define EDID_CTRL_REG 0xE3 /* Not documented */
  101. /* PAge-3[0x9A]:Power & Interrupt Registers */
  102. #define POWER_CTRL_REG 0x01
  103. #define MASTER_POWER_CTRL_D0 (1<<0)
  104. #define MASTER_POWER_CTRL_D3 (~(1<<0))
  105. #define PCLK_EN (1<<2)
  106. #define OSC_EN (1<<4)
  107. #define TMDS_RX_EN (1<<5)
  108. #define TMDS_TX_EN (1<<6)
  109. #define POWER_TO_D0 (MASTER_POWER_CTRL_D0 | PCLK_EN | OSC_EN | \
  110. TMDS_RX_EN | TMDS_TX_EN)
  111. #define POWER_DOWN 0x00
  112. #define INT_CTRL_REG 0x20
  113. #define INTR_OPEN_DRAIN (1<<2)
  114. #define INTR_POLARITY (1<<1)
  115. /* PAge-3[0x9A]: Discovery Registers */
  116. #define DISC_INTR_REG 0x21
  117. #define RGND_RDY_INT (1<<6)
  118. #define CBUS_DISCONNECT_INT (1<<5)
  119. #define CBUS_UNSTABLE_INT (1<<4)
  120. #define NON_MHL_DETECTION_INT (1<<3)
  121. #define MHL_EST_INT (1<<2)
  122. #define MHL_VUBS_CHG (1<<1)
  123. #define DISC_INTR_ENABLE_REG 0x22
  124. #define DISC_CTRL1_REG 0x10
  125. #define CBUS_DISCOVERY_ENABLED (1<<0)
  126. #define PDN_REGS_ACCESS_STROBE (~(1<<1))
  127. #define DISC_CTRL3_REG 0x12
  128. #define MHL_MODE_FORCED (1<<6)
  129. #define MHL_MODE_NORMAL (~(1<<6))
  130. #define USB_ID_SWITCH_SW_ENABLED (1<<3)
  131. #define USB_ID_SWITCH_SW_DISABLED (~(1<<3))
  132. #define DISC_CTRL6_REG 0x15
  133. #define USB_ID_SWITCH_SW (1<<6)
  134. #define DISC_CTRL9_REG 0x18 /* Not Documented */
  135. #define VBUS_OUTPUT_CAPABILITY_SRC 0x01
  136. #define WAKE_PULSE_BYPASS 0x02
  137. #define DISC_PULSE_PROCEED 0x04
  138. #define USB_EST 0x08
  139. #define WAKE_DRVFLT 0x10
  140. #define CBUS_LOW_TO_DISCONNECT 0x20
  141. #define VBUS_EN_OVERRIDE 0x40
  142. #define VBUS_EN_OVERRIDE_VAL 0x80
  143. #define MHLTX_CTRL_AON_REG 0x32
  144. #define DISC_RGND_REG 0x1C
  145. #define RGND_INTP_MASK 0x03
  146. #define RGND_INTP_OPEN 0
  147. #define RGND_INTP_2K 1
  148. #define RGND_INTP_1K 2
  149. #define RGND_INTP_SHORT 3
  150. #define US_TMDS_STATUS 0x74
  151. /* MHL TX SYS STAT Registers */
  152. #define MHL_TX_SYSSTAT_REG 0x09
  153. #define BIT_INTR5_SCDT_CHANGE 0x01
  154. #define BIT_INTR5_CKDT_CHANGE 0x02
  155. #define BIT_INTR5_MHL_FIFO_OVERFLOW 0x04
  156. #define BIT_INTR5_MHL_FIFO_UNDERFLOW 0x08
  157. #define BIT_INTR5_RPWR5V_CHG 0x10
  158. #define BIT_INTR5_PQ_OVERFLOW 0x80
  159. /* TPI[0xB2]:HDCP Registers */
  160. #define TPI_AV_MUTE_REG 0x1A /* Not Documented */
  161. #define AV_MUTE_NORMAL 0x00
  162. #define AV_MUTE_MUTED 0x08
  163. #define AV_MUTE_MASK 0x08
  164. #define TPI_HDCP_CTRL_REG 0x2A
  165. #define INTERM_RI_CHECK_EN (1<<3)
  166. #define DOUBLE_RI_CHECK (1<<2)
  167. #define DDC_SHORT_RI_RD (1<<1)
  168. #define HDCP_START (1<<0)
  169. #define BIT_DPD_PDIDCK_MASK 0x04
  170. #define BIT_DPD_PDIDCK_POWER_DOWN 0x00
  171. /* Device Capbaility Register address and offsets have same values now.
  172. * For ex- while receving SET_INT, use these Registers [0x21...0x23],
  173. * while sending SET_INT, use these Offset[0x21...0x23]. */
  174. /* 0xC8: CBUS Device Capability Registers */
  175. #define MHL_VER_MAJOR (CONFIG_MHL_VERSION >> 4) /* Most Significant 4-bits */
  176. #define MHL_VER_MINOR (CONFIG_MHL_VERSION & 0x0F) /* Least significant 4-bits */
  177. #define DEV_TYPE_SOURCE 0x02
  178. #define DEV_TYPE_SINK 0x01
  179. #define DEV_TYPE_DONGLE 0x03
  180. /* set when Device can supply power across VBUS,else clear this bit */
  181. #define DEV_POW_SUPPLY (1<<4)
  182. #define VID_LINK_SUPP_RGB444 (1<<0)
  183. #define VID_LINK_SUPP_YCBCR444 (1<<1)
  184. #define VID_LINK_SUPP_YCBCR422 (1<<2)
  185. #define VID_LINK_SUPP_PPIXEL (1<<3)
  186. #define VID_LINK_SUPP_ISLANDS (1<<4)
  187. #define VID_LINK_SUPP_VGA (1<<5)
  188. #define CBUS_AUD_LINK_MODE_REG 0x06
  189. #define DEV_AUDIO_LINK_2CH (1<<0)
  190. #define DEV_AUDIO_LINK_8CH (1<<1)
  191. #define VIDEO_TYPE_GRAPHICS (1<<0)
  192. #define VIDEO_TYPE_PHOTO (1<<1)
  193. #define VIDEO_TYPE_CINEMA (1<<2)
  194. #define VIDEO_TYPE_GAME (1<<3)
  195. /* When cleared,ignore the video type */
  196. #define SUPPORT_VT (1<<7)
  197. #define LOG_DEV_DISPLAY (1<<0)
  198. #define LOG_DEV_VIDEO (1<<1)
  199. #define LOG_DEV_AUDIO (1<<2)
  200. #define LOG_DEV_MEDIA (1<<3)
  201. #define LOG_DEV_TUNER (1<<4)
  202. #define LOG_DEV_RECORD (1<<5)
  203. #define LOG_DEV_SPEAKER (1<<6)
  204. #define LOG_DEV_GUI (1<<7)
  205. #define CBUS_FEATURE_FLAG_REG 0x0A
  206. #define RCP_SUPPORT (1<<0)
  207. #define RAP_SUPPORT (1<<1)
  208. #define SP_SUPPORT (1<<2)
  209. /* Bits [4...7] */
  210. #define STATUS_SIZE 0x3
  211. /* Bits [0...3] */
  212. #define INTR_SIZE 0x3
  213. #define DEVCAP_COUNT_MAX 16
  214. #define MHL_DEVCAP_DEVSTATE 0x0
  215. #define MHL_DEVCAP_MHL_VERSION 0x1
  216. #define MHL_DEVCAP_DEV_CAT 0x2
  217. #define MHL_DEVCAP_ADOPTER_ID_H 0x3
  218. #define MHL_DEVCAP_ADOPTER_ID_L 0x4
  219. #define MHL_DEVCAP_VID_LINK_MODE 0x5
  220. #define MHL_DEVCAP_AUD_LINK_MODE 0x6
  221. #define MHL_DEVCAP_VIDEO_TYPE 0x7
  222. #define MHL_DEVCAP_LOG_DEV_MAP 0x8
  223. #define MHL_DEVCAP_BANDWIDTH 0x9
  224. #define MHL_DEVCAP_FEATURE_FLAG 0xa
  225. #define MHL_DEVCAP_DEVICE_ID_H 0xb
  226. #define MHL_DEVCAP_DEVICE_ID_L 0xc
  227. #define MHL_DEVCAP_SCRATHPAD_SIZE 0xd
  228. #define MHL_DEVCAP_INT_STAT_SIZE 0xe
  229. #define MHL_DEVCAP_RESERVED 0xf
  230. /* Device interrupt register offset of connected device */
  231. #define CBUS_MHL_INTR_REG_0 0x20
  232. #define MHL_INT_DCAP_CHG (1<<0)
  233. #define MHL_INT_DSCR_CHG (1<<1)
  234. #define MHL_INT_REQ_WRT (1<<2)
  235. #define MHL_INT_GRT_WRT (1<<3)
  236. #define MHL_INT_3D_REQ (1<<4)
  237. #define CBUS_MHL_INTR_REG_1 0x21
  238. #define MHL_INT_EDID_CHG (1<<1)
  239. #define CBUS_MHL_INTR_REG_2 0x22
  240. #define CBUS_MHL_INTR_REG_3 0x23
  241. /* CBUS: Mask Registers for Interrupt offset registers(0x21...0x23) */
  242. #define CBUS_MHL_INTR_REG_0_MASK 0x80
  243. #define CBUS_MHL_INTR_REG_1_MASK 0x81
  244. #define CBUS_MHL_INTR_REG_2_MASK 0x82
  245. #define CBUS_MHL_INTR_REG_3_MASK 0x83
  246. /* CBUS: Status Register offset for connected device */
  247. #define CBUS_MHL_STATUS_OFFSET_0 0x30 /* CONNECTED_RDY */
  248. #define MHL_STATUS_DCAP_READY (1<<0)
  249. #define CBUS_MHL_STATUS_OFFSET_1 0x31 /* LINK_MODE */
  250. #define MHL_STATUS_CLK_PACKED_PIXEL (1<<1)
  251. #define MHL_STATUS_CLK_NORMAL ((1<<0) | (1<<1))
  252. #define MHL_STATUS_PATH_ENABLED (1<<3)
  253. #define MHL_STATUS_MUTED (1<<4)
  254. #define MHL_STATUS_PATH_DISABLED 0x00
  255. #define CBUS_MHL_STATUS_OFFSET_2 0x32
  256. #define CBUS_MHL_STATUS_OFFSET_3 0x33
  257. /* CBUS: Scratchpad Registers */
  258. #define CBUS_MHL_SCRPAD_REG_0 0x40
  259. #define CBUS_MHL_SCRPAD_REG_1 0x41
  260. #define CBUS_MHL_SCRPAD_REG_2 0x42
  261. #define CBUS_MHL_SCRPAD_REG_3 0x43
  262. #define CBUS_MHL_SCRPAD_REG_4 0x44
  263. #define CBUS_MHL_SCRPAD_REG_5 0x45
  264. #define CBUS_MHL_SCRPAD_REG_6 0x46
  265. #define CBUS_MHL_SCRPAD_REG_7 0x47
  266. #define CBUS_MHL_SCRPAD_REG_8 0x48
  267. #define CBUS_MHL_SCRPAD_REG_9 0x49
  268. #define CBUS_MHL_SCRPAD_REG_A 0x4A
  269. #define CBUS_MHL_SCRPAD_REG_B 0x4B
  270. #define CBUS_MHL_SCRPAD_REG_C 0x4C
  271. #define CBUS_MHL_SCRPAD_REG_D 0x4D
  272. #define CBUS_MHL_SCRPAD_REG_E 0x4E
  273. #define CBUS_MHL_SCRPAD_REG_F 0x4F
  274. #define CBUS_CONN_STATUS_REG 0x91
  275. #define DOWNSTREAM_HPD_MASK 0x04
  276. #define DOWNSTREAM_CLR_HPD_RECD 0
  277. #define DOWNSTREAM_SET_HPD_RECD 1
  278. #define CBUS_MSC_INTR_REG 0x92
  279. #define CBUS_MSC_INTR_ENABLE_REG 0x93
  280. #define MSC_MSG_NACK_RCVD (1<<7)
  281. #define MSC_SET_INT_RCVD (1<<6)
  282. #define MSC_WRITE_BURST_RCVD (1<<5)
  283. #define MSC_MSG_RCVD (1<<4)
  284. #define MSC_WRITE_STAT_RCVD (1<<3)
  285. #define MSC_HPD_RCVD (1<<2)
  286. #define MSC_CMD_DONE (1<<1)
  287. #define CBUS_MSC_CMD_START_REG 0xB8
  288. #define START_WRITE_BURST (1<<4)
  289. /*start WRITE_STAT or SET_INT */
  290. #define START_WRITE_STAT_SET_INT (1<<3)
  291. #define START_READ_DEVCAP (1<<2)
  292. #define START_MSC_MSG (1<<1)
  293. #define START_MISC_CMD (1<<0)
  294. /* sii8240 MSC error interrupt mask register 0xC8:0x95*/
  295. /* Responder aborted DDC command at translation layer */
  296. #define BIT_CBUS_CEC_ABRT 0x02
  297. /* Responder sent a VS_MSG packet (response data or command.) */
  298. #define BIT_CBUS_DDC_ABRT 0x04
  299. #define BIT_CBUS_MSC_ABORT_RCVD 0x08
  300. #define BIT_CBUS_MSC_SET_CAP_ID_RCVD 0x10
  301. #define BIT_CBUS_RCV_VALID 0x20
  302. #define BIT_CBUS_CMD_ABORT 0x40
  303. #define BIT_CBUS_MHL_CABLE_CNX_CHG 0x80
  304. /* MSC Command Opcode or offset for MSC commands.
  305. * if START_MISC_CMD, used as command Opcode,else used as offset[except
  306. * in case of MSC_MSG]
  307. */
  308. #define MSC_CMD_OR_OFFSET_REG 0xB9
  309. #define MSC_SEND_DATA1_REG 0xBA
  310. #define MSC_SEND_DATA2_REG 0xBB
  311. #define MSC_RCVD_DATA1_REG 0xBC
  312. #define MSC_MSG_RCVD_DATA1_REG 0xBF
  313. #define MSC_MSG_RCVD_DATA2_REG 0xC0
  314. #define MSC_RETRY_INTERVAL_REG 0xD5 /* default:0x14 */
  315. #define CBUS_MSC_ERROR_INTR_REG 0x94
  316. #define CBUS_MSC_ERROR_INTR_ENABLE_REG 0x95
  317. /* sii8240 initiated an MSC command,but an error occured;exact error
  318. * available in CBUS:0x9A */
  319. #define SEND_ERROR_INT (1<<6)
  320. /* sii8240 was receiving an MSC command,but an error occured;exact error
  321. * available in CBUS:0x9C */
  322. #define RECD_ERROR_INT (1<<3)
  323. #define RECD_DDC_ABORT_INT (1<<2)
  324. #define MSC_SEND_ERROR_REG 0x9A
  325. #define MSC_RECVD_ERROR_REG 0x9C
  326. /* [Sender]:Last command sent was ABORT-ed;[Receiver]:Received an ABORT */
  327. #define CMD_ABORT (1<<7)
  328. /* [Sender]:Last command rejected because of undefined opcode,never sent over
  329. * CBUS;[Receiver]:first packet contained an undefined opcode */
  330. #define CMD_UNDEF_OPCODE (1<<3)
  331. /* [Sender]:Failed to receive a response from Receiver[Timeout];
  332. * [Receiver]:Failed to receieve sender's response(Sender Timeout) */
  333. #define CMD_TIMEOUT (1<<2)
  334. /*[Sender]: Last packet of MSC command received Protocol error
  335. *[Receiver]: Last packet of MSC command response received protocol error
  336. */
  337. #define CMD_RCVD_PROT_ERR (1<<1)
  338. /* Retry Threshold exceeded */
  339. #define CMD_MAX_FAIL (1<<0)
  340. /* events to be used by notifier;issued by board file or connector driver
  341. to notify MHL driver of various events */
  342. #define DONGLE_DETACHED 0x00
  343. #define DONGLE_ATTACHED 0x01
  344. #define DONGLE_POWER_ATTACHED 0x02
  345. #define DONGLE_POWER_DETACHED 0x03
  346. #define MHL_CON_UNHANDLED 0
  347. #define MHL_CON_HANDLED 1
  348. #define MHL_CON_RETRY 2
  349. /* Some Time limits as per MHL Specifications */
  350. #define T_WAIT_TIMEOUT_RGND_INT 3000
  351. #define T_WAIT_TIMEOUT_DISC_INT 2000
  352. /* Host Device capabilities values */
  353. #define DEV_STATE 0
  354. /* MHL Version 1.2 */
  355. #define DEV_MHL_VERSION CONFIG_MHL_VERSION
  356. /* A source kind of device which will not provide power across VBUS */
  357. #define DEV_CAT_SOURCE_NO_PWR (DEV_POW_SUPPLY | DEV_TYPE_SOURCE)
  358. #define DEV_ADOPTER_ID_H 0x01 /* Samsung's Adopter ID? */
  359. #define DEV_ADOPTER_ID_L 0x41
  360. #define DEV_VID_LINK_MODE (VID_LINK_SUPP_RGB444 | \
  361. VID_LINK_SUPP_PPIXEL)
  362. #define DEV_AUDIO_LINK_MODE DEV_AUDIO_LINK_2CH
  363. #define DEV_VIDEO_TYPE 0
  364. #define DEV_LOGICAL_DEV LOG_DEV_GUI
  365. /*TODO: need to check bandwidth value whether 75MHz or 150 MHz */
  366. #define DEV_BANDWIDTH 0xF
  367. #define DEV_FEATURE_FLAG (RCP_SUPPORT | RAP_SUPPORT | SP_SUPPORT)
  368. #define DEV_DEVICE_ID_H 0x00 /* Samsung Device Specific values */
  369. #define DEV_DEVICE_ID_L 0x00
  370. #define DEV_SCRATCHPAD_SIZE 16
  371. #define DEV_INT_STATUS_SIZE ((STATUS_SIZE<<4) | INTR_SIZE)
  372. #define DEV_RESERVED 0
  373. #define INFO_BUFFER 31
  374. #define SIZE_AVI_INFOFRAME 14
  375. #define EDID_SIZE 128
  376. #define MHL_STATUS_CLK_MODE_PACKED_PIXEL 0x02
  377. #define MHL_STATUS_CLK_MODE_NORMAL 0x03
  378. #define BIT_INTR4_VBUS_CHG 0x01
  379. #define BIT_INTR4_MHL_EST 0x04
  380. #define BIT_INTR4_NON_MHL_EST 0x08
  381. #define BIT_INTR4_CBUS_LKOUT 0x10
  382. #define BIT_INTR4_CBUS_DISCONNECT 0x20
  383. #define BIT_INTR4_RGND_DETECTION 0x40
  384. #define BIT_INTR1_RSEN_CHG 0x20
  385. #define BIT_INTR1_HPD_CHG 0x40
  386. #define BIT_MHLTX_CTL1_VCO_FMAX_CTL_MASK 0x0F
  387. #define BIT_MHLTX_CTL1_DISC_OVRIDE_MASK 0x10
  388. #define BIT_MHLTX_CTL1_DISC_OVRIDE_OFF 0x00
  389. #define BIT_MHLTX_CTL1_DISC_OVRIDE_ON 0x10
  390. #define BIT_MHLTX_CTL1_TX_TERM_MODE_MASK 0xC0
  391. /*MSC interrupt mask register 0xC8:0x93*/
  392. #define BIT_CBUS_CNX_CHG (1<<0)
  393. #define BIT_CBUS_MSC_MT_DONE (1<<1)
  394. #define BIT_CBUS_HPD_RCVD (1<<2)
  395. #define BIT_CBUS_MSC_MR_WRITE_STAT (1<<3)
  396. #define BIT_CBUS_MSC_MR_MSC_MSG (1<<4)
  397. #define BIT_CBUS_MSC_MR_WRITE_BURST (1<<5)
  398. #define BIT_CBUS_MSC_MR_SET_INT (1<<6)
  399. #define BIT_CBUS_MSC_MT_DONE_NACK (1<<7)
  400. /*TPI control*/
  401. #define TMDS_OUTPUT_MODE_MASK 0x01
  402. #define TMDS_OUTPUT_MODE_DVI 0x00
  403. #define TMDS_OUTPUT_MODE_HDMI 0x01
  404. /*TMDS control*/
  405. #define TMDS_OUTPUT_CONTROL_MASK 0x10
  406. #define TMDS_OUTPUT_CONTROL_ACTIVE 0x00
  407. #define TMDS_OUTPUT_CONTROL_POWER_DOWN 0x10
  408. #define BIT_DC6_USB_OVERRIDE_MASK 0x40
  409. #define BIT_DC6_USB_OVERRIDE_OFF 0x00
  410. #define BIT_DC6_USB_OVERRIDE_ON 0x40
  411. #define BIT_DC3_DLYTRG_SEL_MASK 0x07
  412. #define BIT_DC3_DLYTRG_SEL_133us 0x00
  413. #define BIT_DC3_DLYTRG_SEL_534us 0x01
  414. #define BIT_DC3_DLYTRG_SEL_002ms 0x02
  415. #define BIT_DC3_DLYTRG_SEL_008ms 0x03
  416. #define BIT_DC3_DLYTRG_SEL_016ms 0x04
  417. #define BIT_DC3_DLYTRG_SEL_032ms 0x05
  418. #define BIT_DC3_DLYTRG_SEL_064ms 0x06
  419. #define BIT_DC3_DLYTRG_SEL_128ms 0x07
  420. #define BIT_DC3_USB_EN_MASK 0x08
  421. #define BIT_DC3_USB_EN_OFF 0x00
  422. #define BIT_DC3_USB_EN_ON 0x08
  423. #define BIT_DC3_FORCE_USB_MASK 0x10
  424. #define BIT_DC3_FORCE_USB_OFF 0x00
  425. #define BIT_DC3_FORCE_USB_ON 0x10
  426. #define BIT_DC3_DISC_SIMODE_MASK 0x20
  427. #define BIT_DC3_DISC_SIMODE_OFF 0x00
  428. #define BIT_DC3_DISC_SIMODE_ON 0x20
  429. #define BIT_DC3_FORCE_MHL_MASK 0x40
  430. #define BIT_DC3_FORCE_MHL_OFF 0x00
  431. #define BIT_DC3_FORCE_MHL_ON 0x40
  432. #define BIT_DC3_COMM_IMME_MASK 0x80
  433. #define BIT_DC3_COMM_IMME_OFF 0x00
  434. #define BIT_DC3_COMM_IMME_ON 0x80
  435. #define BIT_HPD_CTRL_HPD_OUT_OVR_EN_MASK 0x10
  436. #define BIT_HPD_CTRL_HPD_OUT_OVR_EN_OFF 0x00
  437. #define BIT_HPD_CTRL_HPD_OUT_OVR_EN_ON 0x10
  438. #define BIT_HPD_CTRL_HPD_OUT_OVR_VAL_MASK 0x20
  439. #define BIT_HPD_CTRL_HPD_OUT_OVR_VAL_OFF 0x00
  440. #define BIT_HPD_CTRL_HPD_OUT_OVR_VAL_ON 0x20
  441. /*Video link mode*/
  442. #define MHL_DEV_VID_LINK_SUPPRGB444 0x01
  443. #define MHL_DEV_VID_LINK_SUPPYCBCR444 0x02
  444. #define MHL_DEV_VID_LINK_SUPPYCBCR422 0x04
  445. #define MHL_DEV_VID_LINK_SUPP_PPIXEL 0x08
  446. #define MHL_DEV_VID_LINK_SUPP_ISLANDS 0x10
  447. #define MHL_DEV_AUD_LINK_2CH 0x01
  448. #define MHL_DEV_AUD_LINK_8CH 0x02
  449. /*Edid*/
  450. #define EDID_MAX_LENGTH 512
  451. #define EDID_STATUS_HW_ASSIST_REG 0xE0
  452. #define HW_EDID_DONE (1<<5)
  453. #define HW_EDID_ERROR (1<<6)
  454. #define EDID_CTRL_REG 0xE3
  455. #define EDID_MODE_EN (1<<0)
  456. #define INVALID_BKSV (1<<1)
  457. #define EDID_FIFO_ADDR_AUTO (1<<4)
  458. #define SELECT_DEVCAP (1<<5)
  459. #define EDID_PRIME_VALID (1<<7)
  460. #define EDID_PAGE_HW_ASSIST_REG 0xE2
  461. #define HW_READ_EDID_BLOCK_0 (1<<1)
  462. /* none of the below 4 registers are documented in PRM */
  463. #define EDID_FIFO_ADDR_REG 0xE9
  464. #define EDID_FIFO_WR_DATA_REG 0xEA
  465. #define EDID_FIFO_RD_DATA_REG 0xEC
  466. #define EDID_BLOCK_ADDR_HW_ASSIST_REG 0xED
  467. /* Upstream register which means that MHL source */
  468. #define US_HDMI_INFO_PKT_CTRL 0xA3
  469. #define US_HPD_CTRL 0x79
  470. #define US_INTR 0x7B
  471. #define US_INTR_MASK 0x7D
  472. #define REG_US_TMDS_STATUS 0x74
  473. #define REG_US_TMDS_STATUS_MASK 0x78
  474. #define BIT_INTR7_MUTE_ON 0x01
  475. #define BIT_INTR7_CP_NEW_CP 0x02
  476. #define BIT_INTR7_CP_SET_MUTE 0x04
  477. #define BIT_INTR7_CP_CLR_MUTE 0x08
  478. #define BIT_INTR7_CEA_NO_AVI 0x40
  479. #define BIT_INTR7_CEA_NO_VSI 0x80
  480. #define BIT_INTR8_CEA_DET_AIF 0x01
  481. #define BIT_INTR8_CEA_NEW_AVI 0x02
  482. #define BIT_INTR8_CEA_NEW_VSI 0x04
  483. #define BIT_INTR8_CEA_DET_ACP 0x08
  484. #define BIT_INTR8_CEA_DET_SPD 0x10
  485. #define BIT_INTR8_CEA_DET_IS_RC1 0x20
  486. #define BIT_INTR8_CEA_DET_IS_RC2 0x40
  487. /*AVI information data*/
  488. enum {
  489. INFO_DATA_CHECK = 0x00,
  490. INFO_DATA1 = 0x01,
  491. INFO_DATA2,
  492. INFO_DATA3,
  493. INFO_DATA4,
  494. INFO_DATA5,
  495. INFO_DATA6,
  496. INFO_DATA7,
  497. INFO_DATA8,
  498. INFO_DATA9,
  499. INFO_DATA10,
  500. INFO_DATA11,
  501. INFO_DATA12,
  502. INFO_DATA13
  503. };
  504. #define INFO_BUFFER 31
  505. #define INFO_TYPE 0x00
  506. #define INFO_VER 0x01
  507. #define INFO_LENTH 0x02
  508. #define INFO_CHECKSUM 0x03
  509. #define INFO_VIC (INFO_CHECKSUM + INFO_DATA4)
  510. /*Color Space*/
  511. #define BIT_DATA_SWING_CTL_MASK 0x07
  512. #define BIT_CLK_SWING_CTL_MASK 0x38
  513. #define BIT_MHLTX_CTL4_MHL_CLK_RATIO_MASK 0x40
  514. #define BIT_MHLTX_CTL4_MHL_CLK_RATIO_2X 0x00
  515. #define BIT_MHLTX_CTL4_MHL_CLK_RATIO_3X 0x40
  516. #define BIT_TPI_INPUT_QUAN_RANGE_MASK 0x0C
  517. #define BIT_TPI_INPUT_QUAN_RANGE_AUTO 0x00
  518. #define BIT_TPI_INPUT_QUAN_RANGE_LIMITED 0x04
  519. #define BIT_TPI_INPUT_QUAN_RANGE_FULL 0x08
  520. #define BIT_TPI_INPUT_QUAN_RANGE_RSVD 0x0C
  521. #define BIT_TPI_OUTPUT_QUAN_RANGE_MASK 0x0C
  522. #define BIT_TPI_OUTPUT_QUAN_RANGE_AUTO 0x00
  523. #define BIT_TPI_OUTPUT_QUAN_RANGE_LIMITED 0x04
  524. #define BIT_TPI_OUTPUT_QUAN_RANGE_FULL 0x08
  525. #define BIT_TPI_OUTPUT_QUAN_RANGE_RSVD 0x0C
  526. #define BIT_TPI_INPUT_FORMAT_MASK 0x03
  527. #define BIT_TPI_INPUT_FORMAT_RGB 0x00
  528. #define BIT_TPI_INPUT_FORMAT_YCbCr444 0x01
  529. #define BIT_TPI_INPUT_FORMAT_YCbCr422 0x02
  530. #define BIT_TPI_INPUT_FORMAT_INTERNAL_RGB 0x03
  531. #define BIT_TPI_OUTPUT_FORMAT_MASK 0x03
  532. #define BIT_TPI_OUTPUT_FORMAT_HDMI_TO_RGB 0x00
  533. #define BIT_TPI_OUTPUT_FORMAT_YCbCr444 0x01
  534. #define BIT_TPI_OUTPUT_FORMAT_YCbCr422 0x02
  535. #define BIT_TPI_OUTPUT_FORMAT_DVI_TO_RGB 0x03
  536. #define BIT_MHLTX_CTL3_DAMPING_SEL_MASK 0x30
  537. #define BIT_MHLTX_CTL3_DAMPING_SEL_OFF 0x30
  538. #define BIT_MHLTX_CTL3_DAMPING_SEL_200_OHM 0x10
  539. #define BIT_MHLTX_CTL3_DAMPING_SEL_300_OHM 0x20
  540. #define BIT_MHLTX_CTL3_DAMPING_SEL_150_OHM 0x00
  541. #define BIT_MHLTX_CTL1_TX_TERM_MODE_MASK 0xC0
  542. #define BIT_MHLTX_CTL1_TX_TERM_MODE_100DIFF 0x00
  543. #define BIT_MHLTX_CTL1_TX_TERM_MODE_150DIFF 0x40
  544. #define BIT_MHLTX_CTL1_TX_TERM_MODE_300DIFF 0x80
  545. #define BIT_MHLTX_CTL1_TX_TERM_MODE_OFF 0xC0
  546. /*HDCP*/
  547. #define AKSV_SIZE 5
  548. #define NUM_OF_ONES_IN_KSV 20
  549. #define TPI_HDCP_QUERY_DATA_REG 0x29
  550. #define HDCP_CTRL 0x2A
  551. #define HDCP_INTR 0x3D
  552. #define HDCP_INTR_MASK 0x3C
  553. #define HDCP_KEY 0x36
  554. #define PROTECTION_TYPE_MASK 0x02
  555. #define PROTECTION_TYPE_NONE 0x00
  556. #define PROTECTION_TYPE_HDCP 0x02
  557. #define HDCP_REPEATER_MASK 0x08
  558. #define HDCP_REPEATER_NO 0x00
  559. #define HDCP_REPEATER_YES 0x08
  560. /*HDCP interrupt status reg*/
  561. #define BIT_TPI_INTR_ST0_BKSV_DONE 0x04
  562. #define BIT_TPI_INTR_ST0_BKSV_ERR 0x02
  563. #define BIT_TPI_INTR_ST0_KSV_FIFO_FIRST 0x08
  564. #define BIT_TPI_INTR_ST0_AUDIO_ERROR_EVENT 0x10
  565. #define BIT_TPI_INTR_ST0_HDCP_SECURITY_CHANGE_EVENT 0x20
  566. #define BIT_TPI_INTR_ST0_HDCP_VPRIME_VALUE_READY_EVENT 0x40
  567. #define BIT_TPI_INTR_ST0_HDCP_AUTH_STATUS_CHANGE_EVENT 0x80
  568. /*Link status*/
  569. #define LINK_STATUS_MASK ((1<<5)|(1<<4))
  570. #define LINK_STATUS_NORMAL (0x00)
  571. #define LINK_STATUS_LINK_LOST (0x10)
  572. #define LINK_STATUS_RENEGOTIATION_REQ (0x20)
  573. #define LINK_STATUS_LINK_SUSPENDED (0x30)
  574. #define EXTENDED_LINK_PROTECTION_MASK (1<<7)
  575. #define EXTENDED_LINK_PROTECTION_NONE (0x00)
  576. #define EXTENDED_LINK_PROTECTION_SECURE (0x80)
  577. #define LOCAL_LINK_PROTECTION_MASK (1<<6)
  578. #define LOCAL_LINK_PROTECTION_NONE (0x00)
  579. #define LOCAL_LINK_PROTECTION_SECURE (0x40)
  580. #define BIT_TMDS_CCTRL_BGRCTL_MASK 0x07
  581. #define BIT_TMDS_CCTRL_SEL_BGR 0x08
  582. #define BIT_TMDS_CCTRL_TMDS_OE 0x10
  583. #define BIT_TMDS_CCTRL_CKDT_EN 0x20
  584. /*Clock*/
  585. #define BIT_TMDS_CSTAT_P3_PDO_MASK 0x01
  586. #define BIT_TMDS_CSTAT_P3_PDO_CLOCK_DETECTED 0x00
  587. #define BIT_TMDS_CSTAT_P3_PDO_CLOCK_STOPPED 0x01
  588. #define BIT_TMDS_CSTAT_P3_SCDT 0x02
  589. #define BIT_TMDS_CSTAT_RPWR5V_STATUS 0x04
  590. /* MSC_MSG Sub-Command data */
  591. /*Turn content streaming ON.*/
  592. #define MHL_RAP_CONTENT_ON 0x10
  593. /*Turn content streaming OFF.*/
  594. #define MHL_RAP_CONTENT_OFF 0x11
  595. #ifdef SII8240_CHECK_MONITOR
  596. /*check HDCP enable for DRM contents*/
  597. #define _SCM_SVC_OEM 249
  598. #define _SCM_OEM_CMD 1
  599. __packed struct hdcp_auth_status {
  600. uint32_t a;
  601. void *b;
  602. void *c;
  603. uint32_t d;
  604. };
  605. #endif
  606. /* need these to keep track of chip power state when we are using unpowered MHL
  607. * dongles/bridges and hence need to do some power-saving during suspend
  608. * (D0-->D2-->D3) or resume(D3-->D2-->D0).Also,some boards/devices are
  609. * designed to keep the chip dormant in D3 Mode after probe succeeds.
  610. */
  611. enum mhl_attached_type {
  612. MHL_DETACHED,
  613. MHL_ATTACHED,
  614. };
  615. enum rgnd_state {
  616. RGND_UNKNOWN = 0,
  617. RGND_OPEN,
  618. RGND_1K,
  619. RGND_2K,
  620. RGND_SHORT,
  621. };
  622. enum mhl_state {
  623. STATE_DISCONNECTED = 0,
  624. STATE_MHL_READY_RGND_DETECT,
  625. STATE_CBUS_UNSTABLE,
  626. STATE_MHL_CONNECTED,
  627. STATE_NON_MHL_DETECTED,
  628. STATE_MHL_USB_CONNECTED,
  629. STATE_MHL_DISCOVERY_SUCCESS,
  630. STATE_MHL_DISCOVERY_FAIL,
  631. STATE_MHL_DISCOVERY_ON,
  632. STATE_ESTABLISHED,
  633. STATE_WAIT_FOR_DISCONNECTION,
  634. };
  635. enum {
  636. BIT_TPI_INFO_SEL_MASK = 0x07
  637. , BIT_TPI_INFO_SEL_AVI = 0x00
  638. , BIT_TPI_INFO_SEL_SPD = 0x01
  639. , BIT_TPI_INFO_SEL_Audio = 0x02
  640. , BIT_TPI_INFO_SEL_MPEG = 0x03
  641. , BIT_TPI_INFO_SEL_GENERIC = 0x04
  642. , BIT_TPI_INFO_SEL_GENERIC2 = 0x05
  643. , BIT_TPI_INFO_READ_FLAG_MASK = 0x20
  644. , BIT_TPI_INFO_READ_FLAG_NO_READ = 0x00
  645. , BIT_TPI_INFO_READ_FLAG_READ = 0x20
  646. , BIT_TPI_INFO_RPT = 0x40
  647. , BIT_TPI_INFO_EN = 0x80
  648. };
  649. enum cbus_command {
  650. IDLE = 0x00,
  651. END_OF_FRAME = 0x32,
  652. ACK = 0x33,
  653. NACK = 0x34,
  654. ABORT = 0x35,
  655. WRITE_STAT = 0x60 | 0x80,
  656. SET_INT = 0x60,
  657. READ_DEVCAP = 0x61,
  658. GET_STATE = 0x62,
  659. GET_VENDOR_ID = 0x63,
  660. SET_HPD = 0x64,
  661. CLR_HPD = 0x65,
  662. SET_CAP_ID = 0x66,
  663. GET_CAP_ID = 0x67,
  664. MSC_MSG = 0x68,
  665. GET_SC1_ERR_CODE = 0x69,
  666. GET_DDC_ERR_CODE = 0x6A,
  667. GET_MSC_ERR_CODE = 0x6B,
  668. WRITE_BURST = 0x6C,
  669. GET_SC3_ERR_CODE = 0x6D,
  670. };
  671. enum msc_subcommand {
  672. /* MSC_MSG Sub-Command codes */
  673. MSG_RCP = 0x10,
  674. MSG_RCPK = 0x11,
  675. MSG_RCPE = 0x12,
  676. MSG_RAP = 0x20,
  677. MSG_RAPK = 0x21,
  678. };
  679. enum avi_cmd_type {
  680. AVI_CMD_NONE = 0x00,
  681. HPD_HIGH_EVENT = 0x01,
  682. HPD_LOW_EVENT,
  683. CEA_NO_AVI,
  684. CEA_NEW_AVI,
  685. AVI_CMD_MAX,
  686. };
  687. enum {
  688. BIT_RX_HDMI_CTRL2_VSI_MON_SEL_MASK = 0x01
  689. , BIT_RX_HDMI_CTRL2_VSI_MON_SEL_AVI_INFOFRAME = 0x00
  690. , BIT_RX_HDMI_CTRL2_VSI_MON_SEL_VS_INFOFRAME = 0x01
  691. , BIT_RX_HDMI_CTRL2_USE_AV_MUTE_SUPPORT_MASK = 0x08
  692. , BIT_RX_HDMI_CTRL2_USE_AV_MUTE_SUPPORT_DISABLE = 0x00
  693. , BIT_RX_HDMI_CTRL2_USE_AV_MUTE_SUPPORT_ENABLE = 0x08
  694. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_MASK = 0xF0
  695. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_0 = 0x00
  696. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_1 = 0x10
  697. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_2 = 0x20
  698. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_3 = 0x30
  699. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_4 = 0x40
  700. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_5 = 0x50
  701. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_6 = 0x60
  702. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_7 = 0x70
  703. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_8 = 0x80
  704. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_9 = 0x90
  705. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_A = 0xA0
  706. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_B = 0xB0
  707. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_C = 0xC0
  708. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_D = 0xD0
  709. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_E = 0xE0
  710. , BIT_RX_HDMI_CTRL2_IDLE_CNT_3_0_VAL_F = 0xF0
  711. };
  712. /*Pack pixel*/
  713. enum {
  714. BIT_VID_OVRRD_3DCONV_EN_MASK = 0x10
  715. , BIT_VID_OVRRD_3DCONV_EN_NORMAL = 0x00
  716. , BIT_VID_OVRRD_3DCONV_EN_FRAME_PACK = 0x10
  717. , BIT_VID_MODE_m1080p_MASK = 0x40
  718. , BIT_VID_MODE_m1080p_DISABLE = 0x00
  719. , BIT_VID_MODE_m1080p_ENABLE = 0x40
  720. };
  721. /*HDCP*/
  722. enum {
  723. BIT_TPI_HDCP_CONTROL_DATA_COPP_PROTLEVEL_MASK = 0x01
  724. , BIT_TPI_HDCP_CONTROL_DATA_COPP_PROTLEVEL_MIN = 0x00
  725. , BIT_TPI_HDCP_CONTROL_DATA_COPP_PROTLEVEL_MAX = 0x01
  726. , BIT_TPI_HDCP_CONTROL_DATA_DOUBLE_RI_CHECK_MASK = 0x04
  727. , BIT_TPI_HDCP_CONTROL_DATA_DOUBLE_RI_CHECK_DISABLE = 0x00
  728. , BIT_TPI_HDCP_CONTROL_DATA_DOUBLE_RI_CHECK_ENABLE = 0x04
  729. };
  730. enum {
  731. BIT_REG_RX_HDMI_CTRL0_rx_hdmi_hdmi_mode_MASK = 0x01
  732. , BIT_REG_RX_HDMI_CTRL0_rx_hdmi_hdmi_mode_en_MASK = 0x02
  733. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_overwrite_MASK = 0x04
  734. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_overwrite_HW_CTRL = 0x00
  735. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_overwrite_SW_CTRL = 0x04
  736. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_sw_value_MASK = 0x08
  737. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_sw_value_DVI = 0x00
  738. , BIT_REG_RX_HDMI_CTRL0_hdmi_mode_sw_value_HDMI = 0x08
  739. , BIT_REG_RX_HDMI_CTRL0_ri_hdmi_mode_en_itself_clr_MASK = 0x10
  740. , BIT_REG_RX_HDMI_CTRL0_byp_dvifilt_sync_MASK = 0x20
  741. };
  742. enum {
  743. BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_EN_MASK = 0x01
  744. , BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_EN_STALE = 0x00
  745. , BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_EN_CLEAR = 0x01
  746. , BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_W_AVI_EN_MASK = 0x10
  747. , BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_W_AVI_EN_STALE = 0x00
  748. , BIT_HDMI_CLR_BUFFER_RX_HDMI_VSI_CLR_W_AVI_EN_CLEAR = 0x10
  749. };
  750. #define VIDEO_CAPABILITY_D_BLOCK 0x00
  751. #define MAX_V_DESCRIPTORS 20
  752. #define MAX_A_DESCRIPTORS 10
  753. #define MAX_SPEAKER_CONFIGURATIONS 4
  754. #define AUDIO_DESCR_SIZE 3
  755. #define HDMI_PATTERN_GEN 0
  756. #define MHL_3D_VIC_CODE 0x0010
  757. #define MHL_3D_DTD_CODE 0x0011
  758. enum {
  759. NON_3D_VIDEO = 0x00
  760. , NON_FRAME_PACKING_3D = 0x01
  761. , FRAME_PACKING_3D = 0x02
  762. };
  763. enum {
  764. B_ID_H = 0x00,
  765. B_ID_L = 0x01,
  766. CHECK_SUM = 0x02,
  767. TOT_ENT = 0x03,
  768. SEQ = 0x04,
  769. NUM_ENT = 0x05,
  770. VDI_0_H = 0x06,
  771. VDI_0_L = 0x07,
  772. VDI_1_H = 0x08,
  773. VDI_1_L = 0x09,
  774. VDI_2_H = 0x0A,
  775. VDI_2_L = 0x0B,
  776. VDI_3_H = 0x0C,
  777. VDI_3_L = 0x0D,
  778. VDI_4_H = 0x0E,
  779. VDI_4_L = 0x0F
  780. };
  781. struct cbus_data {
  782. enum cbus_command cmd; /* cbus command type */
  783. u8 offset; /* for MSC_MSG,stores msc_subcommand */
  784. u8 data;
  785. struct completion complete;
  786. bool use_completion;
  787. int *ret; /* optional return value */
  788. struct list_head list;
  789. };
  790. struct sii8240_intr_regs {
  791. u8 disc_intr; /* Discovery & Connection interrupts */
  792. u8 msc_intr; /* CBUS: MSC transaction interrupts */
  793. u8 spad_intr[2]; /* CBUS: scratchpad interrupts */
  794. u8 msc_error_intr; /* CBUS: MSC transaction error interrupts */
  795. u8 hdcp_intr; /* TPI: HDCP interrupts */
  796. u8 upstrm_intr[2]; /* Miscellanous: Upstream Interrupts */
  797. };
  798. struct sii8240_intr_regs_mask {
  799. u8 intr1_mask_value;
  800. u8 intr2_mask_value;
  801. u8 intr3_mask_value;
  802. u8 intr4_mask_value;
  803. u8 intr5_mask_value;
  804. u8 intr7_mask_value;
  805. u8 intr8_mask_value;
  806. u8 intr_cbus0_mask_value;
  807. u8 intr_cbus1_mask_value;
  808. u8 intr_tpi_mask_value;
  809. };
  810. struct sii8240_regs_cache {
  811. u8 link_mode;
  812. u8 host_devcap[DEVCAP_COUNT_MAX];
  813. u8 peer_devcap[DEVCAP_COUNT_MAX];
  814. struct sii8240_intr_regs intrs;
  815. struct sii8240_intr_regs_mask intr_masks;
  816. };
  817. struct mhl_3D_VDI {
  818. u8 reservedHigh;
  819. u8 FrameSequential:1;
  820. u8 TopBottom:1;
  821. u8 LeftRight:1;
  822. u8 reservedLow:5;
  823. };
  824. struct mhl_3D_data {
  825. struct mhl_3D_VDI vdi[50];
  826. u8 tot_ent;
  827. u8 num_ent;
  828. };
  829. struct mhl_timing {
  830. u8 avi_infoframe[HDMI_VFRMT_MAX];
  831. u8 d_format[HDMI_VFRMT_MAX];
  832. };
  833. struct sii8240_data;
  834. #ifdef CONFIG_EXTCON
  835. struct sec_mhl_cable {
  836. struct work_struct work;
  837. struct notifier_block nb;
  838. struct extcon_specific_cable_nb extcon_nb;
  839. struct extcon_dev *edev;
  840. enum extcon_cable_name cable_type;
  841. unsigned long cable_state;
  842. };
  843. #endif
  844. struct sii8240_data {
  845. struct sii8240_platform_data *pdata;
  846. /* single device entry-point,e.g. /dev/mhl; all the factory-related
  847. * sysfs entries,debugfs and class-creation etc should be
  848. * done on this device */
  849. struct device mhl_dev;
  850. /* Notifier block for registering MHL callback function.The callback
  851. * function will serve as entry-point into the MHL driver from Board
  852. * file or connector drivers(USB-type, 30-pin or 11-pin) */
  853. #ifndef CONFIG_EXTCON
  854. struct notifier_block mhl_nb;
  855. #endif
  856. struct mutex lock;
  857. struct mutex msc_lock;
  858. struct mutex restart_lock;
  859. struct sii8240_regs_cache regs;
  860. wait_queue_head_t wq;
  861. int irq;
  862. enum mhl_state state;
  863. enum rgnd_state rgnd;
  864. enum mhl_attached_type muic_state;
  865. bool cbus_ready;
  866. struct mutex cbus_lock;
  867. struct completion cbus_complete;
  868. struct work_struct cbus_work;
  869. struct work_struct mhl_power_on;
  870. struct work_struct cbus_cmd_work;
  871. struct work_struct avi_control_work;
  872. struct work_struct redetect_work;
  873. #ifdef SII8240_CHECK_MONITOR
  874. struct work_struct mhl_link_monitor_work;
  875. bool ckdt_stable;
  876. #endif
  877. #ifdef SFEATURE_UNSTABLE_SOURCE_WA
  878. struct work_struct avi_check_work;
  879. #endif
  880. struct workqueue_struct *avi_cmd_wqs;
  881. struct workqueue_struct *cbus_cmd_wqs;
  882. struct workqueue_struct *mhl_link_monitor_wq;
  883. struct workqueue_struct *mhl_detection_workqueue;
  884. struct list_head cbus_data_list;
  885. /*mhl tx configuration*/
  886. u8 aviInfoFrame[INFO_BUFFER];
  887. u8 current_aviInfoFrame[INFO_BUFFER];
  888. u8 output_avi_data[SIZE_AVI_INFOFRAME];
  889. u8 vendorSpecificInfoFrame[INFO_BUFFER];
  890. u8 input_3d_format;
  891. u8 edid[EDID_MAX_LENGTH];
  892. bool hdmi_sink;
  893. bool hdmi_mode;
  894. bool avi_work;
  895. enum avi_cmd_type avi_cmd;
  896. struct mhl_3D_data vic_data;
  897. struct mhl_3D_data dtd_data;
  898. struct mhl_timing support_mhl_timing;
  899. bool rcp_support;
  900. bool rap_support;
  901. bool sp_support;
  902. bool hpd_status;
  903. bool cbus_abort;
  904. bool mhl_rgnd;
  905. bool cbus_connected;
  906. bool irq_enabled;
  907. bool mhl_connected;
  908. u8 connected_ready;
  909. bool hdcp_support;
  910. struct input_dev *input_dev;
  911. struct mutex input_lock;
  912. u16 keycode[SII8240_RCP_NUM_KEYS];
  913. #ifdef SFEATURE_UNSTABLE_SOURCE_WA
  914. u8 r281;
  915. struct timer_list avi_check_timer;
  916. #endif
  917. struct switch_dev mhl_event_switch;
  918. struct timer_list mhl_timer;
  919. struct wakeup_source mhl_ws;
  920. bool tmds_enable;
  921. bool ap_hdcp_success;
  922. void (*mhl_ddc_bypass)(bool bypass_on);
  923. };
  924. uint8_t *sii8240_get_mhl_edid(void);
  925. u8 sii8240_mhl_get_version(void);
  926. u8 sii8240_support_packedpixel(void);
  927. #endif /* __SII8240_H__ */