analogix-anx78xx.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright(c) 2016, Analogix Semiconductor.
  4. *
  5. * Based on anx7808 driver obtained from chromeos with copyright:
  6. * Copyright(c) 2013, Google Inc.
  7. */
  8. #include <linux/delay.h>
  9. #include <linux/err.h>
  10. #include <linux/gpio/consumer.h>
  11. #include <linux/i2c.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/kernel.h>
  14. #include <linux/module.h>
  15. #include <linux/of_irq.h>
  16. #include <linux/of_platform.h>
  17. #include <linux/regmap.h>
  18. #include <linux/regulator/consumer.h>
  19. #include <linux/types.h>
  20. #include <drm/display/drm_dp_helper.h>
  21. #include <drm/drm_atomic_helper.h>
  22. #include <drm/drm_bridge.h>
  23. #include <drm/drm_crtc.h>
  24. #include <drm/drm_edid.h>
  25. #include <drm/drm_print.h>
  26. #include <drm/drm_probe_helper.h>
  27. #include "analogix-anx78xx.h"
  28. #define I2C_NUM_ADDRESSES 5
  29. #define I2C_IDX_TX_P0 0
  30. #define I2C_IDX_TX_P1 1
  31. #define I2C_IDX_TX_P2 2
  32. #define I2C_IDX_RX_P0 3
  33. #define I2C_IDX_RX_P1 4
  34. #define XTAL_CLK 270 /* 27M */
  35. static const u8 anx7808_i2c_addresses[] = {
  36. [I2C_IDX_TX_P0] = 0x78,
  37. [I2C_IDX_TX_P1] = 0x7a,
  38. [I2C_IDX_TX_P2] = 0x72,
  39. [I2C_IDX_RX_P0] = 0x7e,
  40. [I2C_IDX_RX_P1] = 0x80,
  41. };
  42. static const u8 anx781x_i2c_addresses[] = {
  43. [I2C_IDX_TX_P0] = 0x70,
  44. [I2C_IDX_TX_P1] = 0x7a,
  45. [I2C_IDX_TX_P2] = 0x72,
  46. [I2C_IDX_RX_P0] = 0x7e,
  47. [I2C_IDX_RX_P1] = 0x80,
  48. };
  49. struct anx78xx_platform_data {
  50. struct regulator *dvdd10;
  51. struct gpio_desc *gpiod_hpd;
  52. struct gpio_desc *gpiod_pd;
  53. struct gpio_desc *gpiod_reset;
  54. int hpd_irq;
  55. int intp_irq;
  56. };
  57. struct anx78xx {
  58. struct drm_dp_aux aux;
  59. struct drm_bridge bridge;
  60. struct i2c_client *client;
  61. struct edid *edid;
  62. struct drm_connector connector;
  63. struct anx78xx_platform_data pdata;
  64. struct mutex lock;
  65. /*
  66. * I2C Slave addresses of ANX7814 are mapped as TX_P0, TX_P1, TX_P2,
  67. * RX_P0 and RX_P1.
  68. */
  69. struct i2c_client *i2c_dummy[I2C_NUM_ADDRESSES];
  70. struct regmap *map[I2C_NUM_ADDRESSES];
  71. u16 chipid;
  72. u8 dpcd[DP_RECEIVER_CAP_SIZE];
  73. bool powered;
  74. };
  75. static inline struct anx78xx *connector_to_anx78xx(struct drm_connector *c)
  76. {
  77. return container_of(c, struct anx78xx, connector);
  78. }
  79. static inline struct anx78xx *bridge_to_anx78xx(struct drm_bridge *bridge)
  80. {
  81. return container_of(bridge, struct anx78xx, bridge);
  82. }
  83. static int anx78xx_set_bits(struct regmap *map, u8 reg, u8 mask)
  84. {
  85. return regmap_update_bits(map, reg, mask, mask);
  86. }
  87. static int anx78xx_clear_bits(struct regmap *map, u8 reg, u8 mask)
  88. {
  89. return regmap_update_bits(map, reg, mask, 0);
  90. }
  91. static ssize_t anx78xx_aux_transfer(struct drm_dp_aux *aux,
  92. struct drm_dp_aux_msg *msg)
  93. {
  94. struct anx78xx *anx78xx = container_of(aux, struct anx78xx, aux);
  95. return anx_dp_aux_transfer(anx78xx->map[I2C_IDX_TX_P0], msg);
  96. }
  97. static int anx78xx_set_hpd(struct anx78xx *anx78xx)
  98. {
  99. int err;
  100. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0],
  101. SP_TMDS_CTRL_BASE + 7, SP_PD_RT);
  102. if (err)
  103. return err;
  104. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG,
  105. SP_HPD_OUT);
  106. if (err)
  107. return err;
  108. return 0;
  109. }
  110. static int anx78xx_clear_hpd(struct anx78xx *anx78xx)
  111. {
  112. int err;
  113. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG,
  114. SP_HPD_OUT);
  115. if (err)
  116. return err;
  117. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0],
  118. SP_TMDS_CTRL_BASE + 7, SP_PD_RT);
  119. if (err)
  120. return err;
  121. return 0;
  122. }
  123. static const struct reg_sequence tmds_phy_initialization[] = {
  124. { SP_TMDS_CTRL_BASE + 1, 0x90 },
  125. { SP_TMDS_CTRL_BASE + 2, 0xa9 },
  126. { SP_TMDS_CTRL_BASE + 6, 0x92 },
  127. { SP_TMDS_CTRL_BASE + 7, 0x80 },
  128. { SP_TMDS_CTRL_BASE + 20, 0xf2 },
  129. { SP_TMDS_CTRL_BASE + 22, 0xc4 },
  130. { SP_TMDS_CTRL_BASE + 23, 0x18 },
  131. };
  132. static int anx78xx_rx_initialization(struct anx78xx *anx78xx)
  133. {
  134. int err;
  135. err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG,
  136. SP_AUD_MUTE | SP_VID_MUTE);
  137. if (err)
  138. return err;
  139. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_CHIP_CTRL_REG,
  140. SP_MAN_HDMI5V_DET | SP_PLLLOCK_CKDT_EN |
  141. SP_DIGITAL_CKDT_EN);
  142. if (err)
  143. return err;
  144. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0],
  145. SP_SOFTWARE_RESET1_REG, SP_HDCP_MAN_RST |
  146. SP_SW_MAN_RST | SP_TMDS_RST | SP_VIDEO_RST);
  147. if (err)
  148. return err;
  149. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0],
  150. SP_SOFTWARE_RESET1_REG, SP_HDCP_MAN_RST |
  151. SP_SW_MAN_RST | SP_TMDS_RST | SP_VIDEO_RST);
  152. if (err)
  153. return err;
  154. /* Sync detect change, GP set mute */
  155. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0],
  156. SP_AUD_EXCEPTION_ENABLE_BASE + 1, BIT(5) |
  157. BIT(6));
  158. if (err)
  159. return err;
  160. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0],
  161. SP_AUD_EXCEPTION_ENABLE_BASE + 3,
  162. SP_AEC_EN21);
  163. if (err)
  164. return err;
  165. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_AUDVID_CTRL_REG,
  166. SP_AVC_EN | SP_AAC_OE | SP_AAC_EN);
  167. if (err)
  168. return err;
  169. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0],
  170. SP_SYSTEM_POWER_DOWN1_REG, SP_PWDN_CTRL);
  171. if (err)
  172. return err;
  173. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0],
  174. SP_VID_DATA_RANGE_CTRL_REG, SP_R2Y_INPUT_LIMIT);
  175. if (err)
  176. return err;
  177. /* Enable DDC stretch */
  178. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  179. SP_DP_EXTRA_I2C_DEV_ADDR_REG, SP_I2C_EXTRA_ADDR);
  180. if (err)
  181. return err;
  182. /* TMDS phy initialization */
  183. err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_RX_P0],
  184. tmds_phy_initialization,
  185. ARRAY_SIZE(tmds_phy_initialization));
  186. if (err)
  187. return err;
  188. err = anx78xx_clear_hpd(anx78xx);
  189. if (err)
  190. return err;
  191. return 0;
  192. }
  193. static const u8 dp_tx_output_precise_tune_bits[20] = {
  194. 0x01, 0x03, 0x07, 0x7f, 0x71, 0x6b, 0x7f,
  195. 0x73, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00,
  196. 0x0c, 0x42, 0x1e, 0x3e, 0x72, 0x7e,
  197. };
  198. static int anx78xx_link_phy_initialization(struct anx78xx *anx78xx)
  199. {
  200. int err;
  201. /*
  202. * REVISIT : It is writing to a RESERVED bits in Analog Control 0
  203. * register.
  204. */
  205. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_ANALOG_CTRL0_REG,
  206. 0x02);
  207. if (err)
  208. return err;
  209. /*
  210. * Write DP TX output emphasis precise tune bits.
  211. */
  212. err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P1],
  213. SP_DP_TX_LT_CTRL0_REG,
  214. dp_tx_output_precise_tune_bits,
  215. ARRAY_SIZE(dp_tx_output_precise_tune_bits));
  216. if (err)
  217. return err;
  218. return 0;
  219. }
  220. static int anx78xx_xtal_clk_sel(struct anx78xx *anx78xx)
  221. {
  222. unsigned int value;
  223. int err;
  224. err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P2],
  225. SP_ANALOG_DEBUG2_REG,
  226. SP_XTAL_FRQ | SP_FORCE_SW_OFF_BYPASS,
  227. SP_XTAL_FRQ_27M);
  228. if (err)
  229. return err;
  230. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL3_REG,
  231. XTAL_CLK & SP_WAIT_COUNTER_7_0_MASK);
  232. if (err)
  233. return err;
  234. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL4_REG,
  235. ((XTAL_CLK & 0xff00) >> 2) | (XTAL_CLK / 10));
  236. if (err)
  237. return err;
  238. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  239. SP_I2C_GEN_10US_TIMER0_REG, XTAL_CLK & 0xff);
  240. if (err)
  241. return err;
  242. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  243. SP_I2C_GEN_10US_TIMER1_REG,
  244. (XTAL_CLK & 0xff00) >> 8);
  245. if (err)
  246. return err;
  247. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_MISC_CTRL_REG,
  248. XTAL_CLK / 10 - 1);
  249. if (err)
  250. return err;
  251. err = regmap_read(anx78xx->map[I2C_IDX_RX_P0],
  252. SP_HDMI_US_TIMER_CTRL_REG,
  253. &value);
  254. if (err)
  255. return err;
  256. err = regmap_write(anx78xx->map[I2C_IDX_RX_P0],
  257. SP_HDMI_US_TIMER_CTRL_REG,
  258. (value & SP_MS_TIMER_MARGIN_10_8_MASK) |
  259. ((((XTAL_CLK / 10) >> 1) - 2) << 3));
  260. if (err)
  261. return err;
  262. return 0;
  263. }
  264. static const struct reg_sequence otp_key_protect[] = {
  265. { SP_OTP_KEY_PROTECT1_REG, SP_OTP_PSW1 },
  266. { SP_OTP_KEY_PROTECT2_REG, SP_OTP_PSW2 },
  267. { SP_OTP_KEY_PROTECT3_REG, SP_OTP_PSW3 },
  268. };
  269. static int anx78xx_tx_initialization(struct anx78xx *anx78xx)
  270. {
  271. int err;
  272. /* Set terminal resistor to 50 ohm */
  273. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL2_REG,
  274. 0x30);
  275. if (err)
  276. return err;
  277. /* Enable aux double diff output */
  278. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  279. SP_DP_AUX_CH_CTRL2_REG, 0x08);
  280. if (err)
  281. return err;
  282. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0],
  283. SP_DP_HDCP_CTRL_REG, SP_AUTO_EN |
  284. SP_AUTO_START);
  285. if (err)
  286. return err;
  287. err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_TX_P0],
  288. otp_key_protect,
  289. ARRAY_SIZE(otp_key_protect));
  290. if (err)
  291. return err;
  292. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  293. SP_HDCP_KEY_COMMAND_REG, SP_DISABLE_SYNC_HDCP);
  294. if (err)
  295. return err;
  296. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL8_REG,
  297. SP_VID_VRES_TH);
  298. if (err)
  299. return err;
  300. /*
  301. * DP HDCP auto authentication wait timer (when downstream starts to
  302. * auth, DP side will wait for this period then do auth automatically)
  303. */
  304. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_HDCP_AUTO_TIMER_REG,
  305. 0x00);
  306. if (err)
  307. return err;
  308. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  309. SP_DP_HDCP_CTRL_REG, SP_LINK_POLLING);
  310. if (err)
  311. return err;
  312. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  313. SP_DP_LINK_DEBUG_CTRL_REG, SP_M_VID_DEBUG);
  314. if (err)
  315. return err;
  316. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2],
  317. SP_ANALOG_DEBUG2_REG, SP_POWERON_TIME_1P5MS);
  318. if (err)
  319. return err;
  320. err = anx78xx_xtal_clk_sel(anx78xx);
  321. if (err)
  322. return err;
  323. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_DEFER_CTRL_REG,
  324. SP_DEFER_CTRL_EN | 0x0c);
  325. if (err)
  326. return err;
  327. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  328. SP_DP_POLLING_CTRL_REG,
  329. SP_AUTO_POLLING_DISABLE);
  330. if (err)
  331. return err;
  332. /*
  333. * Short the link integrity check timer to speed up bstatus
  334. * polling for HDCP CTS item 1A-07
  335. */
  336. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  337. SP_HDCP_LINK_CHECK_TIMER_REG, 0x1d);
  338. if (err)
  339. return err;
  340. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  341. SP_DP_MISC_CTRL_REG, SP_EQ_TRAINING_LOOP);
  342. if (err)
  343. return err;
  344. /* Power down the main link by default */
  345. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  346. SP_DP_ANALOG_POWER_DOWN_REG, SP_CH0_PD);
  347. if (err)
  348. return err;
  349. err = anx78xx_link_phy_initialization(anx78xx);
  350. if (err)
  351. return err;
  352. /* Gen m_clk with downspreading */
  353. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  354. SP_DP_M_CALCULATION_CTRL_REG, SP_M_GEN_CLK_SEL);
  355. if (err)
  356. return err;
  357. return 0;
  358. }
  359. static int anx78xx_enable_interrupts(struct anx78xx *anx78xx)
  360. {
  361. int err;
  362. /*
  363. * BIT0: INT pin assertion polarity: 1 = assert high
  364. * BIT1: INT pin output type: 0 = push/pull
  365. */
  366. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_INT_CTRL_REG, 0x01);
  367. if (err)
  368. return err;
  369. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2],
  370. SP_COMMON_INT_MASK4_REG, SP_HPD_LOST | SP_HPD_PLUG);
  371. if (err)
  372. return err;
  373. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_MASK1_REG,
  374. SP_TRAINING_FINISH);
  375. if (err)
  376. return err;
  377. err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_MASK1_REG,
  378. SP_CKDT_CHG | SP_SCDT_CHG);
  379. if (err)
  380. return err;
  381. return 0;
  382. }
  383. static void anx78xx_poweron(struct anx78xx *anx78xx)
  384. {
  385. struct anx78xx_platform_data *pdata = &anx78xx->pdata;
  386. int err;
  387. if (WARN_ON(anx78xx->powered))
  388. return;
  389. if (pdata->dvdd10) {
  390. err = regulator_enable(pdata->dvdd10);
  391. if (err) {
  392. DRM_ERROR("Failed to enable DVDD10 regulator: %d\n",
  393. err);
  394. return;
  395. }
  396. usleep_range(1000, 2000);
  397. }
  398. gpiod_set_value_cansleep(pdata->gpiod_reset, 1);
  399. usleep_range(1000, 2000);
  400. gpiod_set_value_cansleep(pdata->gpiod_pd, 0);
  401. usleep_range(1000, 2000);
  402. gpiod_set_value_cansleep(pdata->gpiod_reset, 0);
  403. /* Power on registers module */
  404. anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG,
  405. SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD | SP_LINK_PD);
  406. anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG,
  407. SP_REGISTER_PD | SP_TOTAL_PD);
  408. anx78xx->powered = true;
  409. }
  410. static void anx78xx_poweroff(struct anx78xx *anx78xx)
  411. {
  412. struct anx78xx_platform_data *pdata = &anx78xx->pdata;
  413. int err;
  414. if (WARN_ON(!anx78xx->powered))
  415. return;
  416. gpiod_set_value_cansleep(pdata->gpiod_reset, 1);
  417. usleep_range(1000, 2000);
  418. gpiod_set_value_cansleep(pdata->gpiod_pd, 1);
  419. usleep_range(1000, 2000);
  420. if (pdata->dvdd10) {
  421. err = regulator_disable(pdata->dvdd10);
  422. if (err) {
  423. DRM_ERROR("Failed to disable DVDD10 regulator: %d\n",
  424. err);
  425. return;
  426. }
  427. usleep_range(1000, 2000);
  428. }
  429. anx78xx->powered = false;
  430. }
  431. static int anx78xx_start(struct anx78xx *anx78xx)
  432. {
  433. int err;
  434. /* Power on all modules */
  435. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2],
  436. SP_POWERDOWN_CTRL_REG,
  437. SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD |
  438. SP_LINK_PD);
  439. err = anx78xx_enable_interrupts(anx78xx);
  440. if (err) {
  441. DRM_ERROR("Failed to enable interrupts: %d\n", err);
  442. goto err_poweroff;
  443. }
  444. err = anx78xx_rx_initialization(anx78xx);
  445. if (err) {
  446. DRM_ERROR("Failed receiver initialization: %d\n", err);
  447. goto err_poweroff;
  448. }
  449. err = anx78xx_tx_initialization(anx78xx);
  450. if (err) {
  451. DRM_ERROR("Failed transmitter initialization: %d\n", err);
  452. goto err_poweroff;
  453. }
  454. /*
  455. * This delay seems to help keep the hardware in a good state. Without
  456. * it, there are times where it fails silently.
  457. */
  458. usleep_range(10000, 15000);
  459. return 0;
  460. err_poweroff:
  461. DRM_ERROR("Failed SlimPort transmitter initialization: %d\n", err);
  462. anx78xx_poweroff(anx78xx);
  463. return err;
  464. }
  465. static int anx78xx_init_pdata(struct anx78xx *anx78xx)
  466. {
  467. struct anx78xx_platform_data *pdata = &anx78xx->pdata;
  468. struct device *dev = &anx78xx->client->dev;
  469. /* 1.0V digital core power regulator */
  470. pdata->dvdd10 = devm_regulator_get(dev, "dvdd10");
  471. if (IS_ERR(pdata->dvdd10)) {
  472. if (PTR_ERR(pdata->dvdd10) != -EPROBE_DEFER)
  473. DRM_ERROR("DVDD10 regulator not found\n");
  474. return PTR_ERR(pdata->dvdd10);
  475. }
  476. /* GPIO for HPD */
  477. pdata->gpiod_hpd = devm_gpiod_get(dev, "hpd", GPIOD_IN);
  478. if (IS_ERR(pdata->gpiod_hpd))
  479. return PTR_ERR(pdata->gpiod_hpd);
  480. /* GPIO for chip power down */
  481. pdata->gpiod_pd = devm_gpiod_get(dev, "pd", GPIOD_OUT_HIGH);
  482. if (IS_ERR(pdata->gpiod_pd))
  483. return PTR_ERR(pdata->gpiod_pd);
  484. /* GPIO for chip reset */
  485. pdata->gpiod_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
  486. return PTR_ERR_OR_ZERO(pdata->gpiod_reset);
  487. }
  488. static int anx78xx_dp_link_training(struct anx78xx *anx78xx)
  489. {
  490. u8 dp_bw, dpcd[2];
  491. int err;
  492. err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG,
  493. 0x0);
  494. if (err)
  495. return err;
  496. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2],
  497. SP_POWERDOWN_CTRL_REG,
  498. SP_TOTAL_PD);
  499. if (err)
  500. return err;
  501. err = drm_dp_dpcd_readb(&anx78xx->aux, DP_MAX_LINK_RATE, &dp_bw);
  502. if (err < 0)
  503. return err;
  504. switch (dp_bw) {
  505. case DP_LINK_BW_1_62:
  506. case DP_LINK_BW_2_7:
  507. case DP_LINK_BW_5_4:
  508. break;
  509. default:
  510. DRM_DEBUG_KMS("DP bandwidth (%#02x) not supported\n", dp_bw);
  511. return -EINVAL;
  512. }
  513. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG,
  514. SP_VIDEO_MUTE);
  515. if (err)
  516. return err;
  517. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2],
  518. SP_VID_CTRL1_REG, SP_VIDEO_EN);
  519. if (err)
  520. return err;
  521. /* Get DPCD info */
  522. err = drm_dp_dpcd_read(&anx78xx->aux, DP_DPCD_REV,
  523. &anx78xx->dpcd, DP_RECEIVER_CAP_SIZE);
  524. if (err < 0) {
  525. DRM_ERROR("Failed to read DPCD: %d\n", err);
  526. return err;
  527. }
  528. /* Clear channel x SERDES power down */
  529. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0],
  530. SP_DP_ANALOG_POWER_DOWN_REG, SP_CH0_PD);
  531. if (err)
  532. return err;
  533. /*
  534. * Power up the sink (DP_SET_POWER register is only available on DPCD
  535. * v1.1 and later).
  536. */
  537. if (anx78xx->dpcd[DP_DPCD_REV] >= 0x11) {
  538. err = drm_dp_dpcd_readb(&anx78xx->aux, DP_SET_POWER, &dpcd[0]);
  539. if (err < 0) {
  540. DRM_ERROR("Failed to read DP_SET_POWER register: %d\n",
  541. err);
  542. return err;
  543. }
  544. dpcd[0] &= ~DP_SET_POWER_MASK;
  545. dpcd[0] |= DP_SET_POWER_D0;
  546. err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_SET_POWER, dpcd[0]);
  547. if (err < 0) {
  548. DRM_ERROR("Failed to power up DisplayPort link: %d\n",
  549. err);
  550. return err;
  551. }
  552. /*
  553. * According to the DP 1.1 specification, a "Sink Device must
  554. * exit the power saving state within 1 ms" (Section 2.5.3.1,
  555. * Table 5-52, "Sink Control Field" (register 0x600).
  556. */
  557. usleep_range(1000, 2000);
  558. }
  559. /* Possibly enable downspread on the sink */
  560. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  561. SP_DP_DOWNSPREAD_CTRL1_REG, 0);
  562. if (err)
  563. return err;
  564. if (anx78xx->dpcd[DP_MAX_DOWNSPREAD] & DP_MAX_DOWNSPREAD_0_5) {
  565. DRM_DEBUG("Enable downspread on the sink\n");
  566. /* 4000PPM */
  567. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  568. SP_DP_DOWNSPREAD_CTRL1_REG, 8);
  569. if (err)
  570. return err;
  571. err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL,
  572. DP_SPREAD_AMP_0_5);
  573. if (err < 0)
  574. return err;
  575. } else {
  576. err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL, 0);
  577. if (err < 0)
  578. return err;
  579. }
  580. /* Set the lane count and the link rate on the sink */
  581. if (drm_dp_enhanced_frame_cap(anx78xx->dpcd))
  582. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  583. SP_DP_SYSTEM_CTRL_BASE + 4,
  584. SP_ENHANCED_MODE);
  585. else
  586. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0],
  587. SP_DP_SYSTEM_CTRL_BASE + 4,
  588. SP_ENHANCED_MODE);
  589. if (err)
  590. return err;
  591. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0],
  592. SP_DP_MAIN_LINK_BW_SET_REG,
  593. anx78xx->dpcd[DP_MAX_LINK_RATE]);
  594. if (err)
  595. return err;
  596. dpcd[1] = drm_dp_max_lane_count(anx78xx->dpcd);
  597. if (drm_dp_enhanced_frame_cap(anx78xx->dpcd))
  598. dpcd[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
  599. err = drm_dp_dpcd_write(&anx78xx->aux, DP_LINK_BW_SET, dpcd,
  600. sizeof(dpcd));
  601. if (err < 0) {
  602. DRM_ERROR("Failed to configure link: %d\n", err);
  603. return err;
  604. }
  605. /* Start training on the source */
  606. err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_LT_CTRL_REG,
  607. SP_LT_EN);
  608. if (err)
  609. return err;
  610. return 0;
  611. }
  612. static int anx78xx_config_dp_output(struct anx78xx *anx78xx)
  613. {
  614. int err;
  615. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG,
  616. SP_VIDEO_MUTE);
  617. if (err)
  618. return err;
  619. /* Enable DP output */
  620. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG,
  621. SP_VIDEO_EN);
  622. if (err)
  623. return err;
  624. return 0;
  625. }
  626. static int anx78xx_send_video_infoframe(struct anx78xx *anx78xx,
  627. struct hdmi_avi_infoframe *frame)
  628. {
  629. u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE];
  630. int err;
  631. err = hdmi_avi_infoframe_pack(frame, buffer, sizeof(buffer));
  632. if (err < 0) {
  633. DRM_ERROR("Failed to pack AVI infoframe: %d\n", err);
  634. return err;
  635. }
  636. err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0],
  637. SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_EN);
  638. if (err)
  639. return err;
  640. err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P2],
  641. SP_INFOFRAME_AVI_DB1_REG, buffer,
  642. frame->length);
  643. if (err)
  644. return err;
  645. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  646. SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_UD);
  647. if (err)
  648. return err;
  649. err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0],
  650. SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_EN);
  651. if (err)
  652. return err;
  653. return 0;
  654. }
  655. static int anx78xx_get_downstream_info(struct anx78xx *anx78xx)
  656. {
  657. u8 value;
  658. int err;
  659. err = drm_dp_dpcd_readb(&anx78xx->aux, DP_SINK_COUNT, &value);
  660. if (err < 0) {
  661. DRM_ERROR("Get sink count failed %d\n", err);
  662. return err;
  663. }
  664. if (!DP_GET_SINK_COUNT(value)) {
  665. DRM_ERROR("Downstream disconnected\n");
  666. return -EIO;
  667. }
  668. return 0;
  669. }
  670. static int anx78xx_get_modes(struct drm_connector *connector)
  671. {
  672. struct anx78xx *anx78xx = connector_to_anx78xx(connector);
  673. int err, num_modes = 0;
  674. if (WARN_ON(!anx78xx->powered))
  675. return 0;
  676. if (anx78xx->edid)
  677. return drm_add_edid_modes(connector, anx78xx->edid);
  678. mutex_lock(&anx78xx->lock);
  679. err = anx78xx_get_downstream_info(anx78xx);
  680. if (err) {
  681. DRM_ERROR("Failed to get downstream info: %d\n", err);
  682. goto unlock;
  683. }
  684. anx78xx->edid = drm_get_edid(connector, &anx78xx->aux.ddc);
  685. if (!anx78xx->edid) {
  686. DRM_ERROR("Failed to read EDID\n");
  687. goto unlock;
  688. }
  689. err = drm_connector_update_edid_property(connector,
  690. anx78xx->edid);
  691. if (err) {
  692. DRM_ERROR("Failed to update EDID property: %d\n", err);
  693. goto unlock;
  694. }
  695. num_modes = drm_add_edid_modes(connector, anx78xx->edid);
  696. unlock:
  697. mutex_unlock(&anx78xx->lock);
  698. return num_modes;
  699. }
  700. static const struct drm_connector_helper_funcs anx78xx_connector_helper_funcs = {
  701. .get_modes = anx78xx_get_modes,
  702. };
  703. static enum drm_connector_status anx78xx_detect(struct drm_connector *connector,
  704. bool force)
  705. {
  706. struct anx78xx *anx78xx = connector_to_anx78xx(connector);
  707. if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd))
  708. return connector_status_disconnected;
  709. return connector_status_connected;
  710. }
  711. static const struct drm_connector_funcs anx78xx_connector_funcs = {
  712. .fill_modes = drm_helper_probe_single_connector_modes,
  713. .detect = anx78xx_detect,
  714. .destroy = drm_connector_cleanup,
  715. .reset = drm_atomic_helper_connector_reset,
  716. .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
  717. .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
  718. };
  719. static int anx78xx_bridge_attach(struct drm_bridge *bridge,
  720. enum drm_bridge_attach_flags flags)
  721. {
  722. struct anx78xx *anx78xx = bridge_to_anx78xx(bridge);
  723. int err;
  724. if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
  725. DRM_ERROR("Fix bridge driver to make connector optional!");
  726. return -EINVAL;
  727. }
  728. if (!bridge->encoder) {
  729. DRM_ERROR("Parent encoder object not found");
  730. return -ENODEV;
  731. }
  732. /* Register aux channel */
  733. anx78xx->aux.name = "DP-AUX";
  734. anx78xx->aux.dev = &anx78xx->client->dev;
  735. anx78xx->aux.drm_dev = bridge->dev;
  736. anx78xx->aux.transfer = anx78xx_aux_transfer;
  737. err = drm_dp_aux_register(&anx78xx->aux);
  738. if (err < 0) {
  739. DRM_ERROR("Failed to register aux channel: %d\n", err);
  740. return err;
  741. }
  742. err = drm_connector_init(bridge->dev, &anx78xx->connector,
  743. &anx78xx_connector_funcs,
  744. DRM_MODE_CONNECTOR_DisplayPort);
  745. if (err) {
  746. DRM_ERROR("Failed to initialize connector: %d\n", err);
  747. goto aux_unregister;
  748. }
  749. drm_connector_helper_add(&anx78xx->connector,
  750. &anx78xx_connector_helper_funcs);
  751. anx78xx->connector.polled = DRM_CONNECTOR_POLL_HPD;
  752. err = drm_connector_attach_encoder(&anx78xx->connector,
  753. bridge->encoder);
  754. if (err) {
  755. DRM_ERROR("Failed to link up connector to encoder: %d\n", err);
  756. goto connector_cleanup;
  757. }
  758. err = drm_connector_register(&anx78xx->connector);
  759. if (err) {
  760. DRM_ERROR("Failed to register connector: %d\n", err);
  761. goto connector_cleanup;
  762. }
  763. return 0;
  764. connector_cleanup:
  765. drm_connector_cleanup(&anx78xx->connector);
  766. aux_unregister:
  767. drm_dp_aux_unregister(&anx78xx->aux);
  768. return err;
  769. }
  770. static void anx78xx_bridge_detach(struct drm_bridge *bridge)
  771. {
  772. drm_dp_aux_unregister(&bridge_to_anx78xx(bridge)->aux);
  773. }
  774. static enum drm_mode_status
  775. anx78xx_bridge_mode_valid(struct drm_bridge *bridge,
  776. const struct drm_display_info *info,
  777. const struct drm_display_mode *mode)
  778. {
  779. if (mode->flags & DRM_MODE_FLAG_INTERLACE)
  780. return MODE_NO_INTERLACE;
  781. /* Max 1200p at 5.4 Ghz, one lane */
  782. if (mode->clock > 154000)
  783. return MODE_CLOCK_HIGH;
  784. return MODE_OK;
  785. }
  786. static void anx78xx_bridge_disable(struct drm_bridge *bridge)
  787. {
  788. struct anx78xx *anx78xx = bridge_to_anx78xx(bridge);
  789. /* Power off all modules except configuration registers access */
  790. anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG,
  791. SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD | SP_LINK_PD);
  792. }
  793. static void anx78xx_bridge_mode_set(struct drm_bridge *bridge,
  794. const struct drm_display_mode *mode,
  795. const struct drm_display_mode *adjusted_mode)
  796. {
  797. struct anx78xx *anx78xx = bridge_to_anx78xx(bridge);
  798. struct hdmi_avi_infoframe frame;
  799. int err;
  800. if (WARN_ON(!anx78xx->powered))
  801. return;
  802. mutex_lock(&anx78xx->lock);
  803. err = drm_hdmi_avi_infoframe_from_display_mode(&frame,
  804. &anx78xx->connector,
  805. adjusted_mode);
  806. if (err) {
  807. DRM_ERROR("Failed to setup AVI infoframe: %d\n", err);
  808. goto unlock;
  809. }
  810. err = anx78xx_send_video_infoframe(anx78xx, &frame);
  811. if (err)
  812. DRM_ERROR("Failed to send AVI infoframe: %d\n", err);
  813. unlock:
  814. mutex_unlock(&anx78xx->lock);
  815. }
  816. static void anx78xx_bridge_enable(struct drm_bridge *bridge)
  817. {
  818. struct anx78xx *anx78xx = bridge_to_anx78xx(bridge);
  819. int err;
  820. err = anx78xx_start(anx78xx);
  821. if (err) {
  822. DRM_ERROR("Failed to initialize: %d\n", err);
  823. return;
  824. }
  825. err = anx78xx_set_hpd(anx78xx);
  826. if (err)
  827. DRM_ERROR("Failed to set HPD: %d\n", err);
  828. }
  829. static const struct drm_bridge_funcs anx78xx_bridge_funcs = {
  830. .attach = anx78xx_bridge_attach,
  831. .detach = anx78xx_bridge_detach,
  832. .mode_valid = anx78xx_bridge_mode_valid,
  833. .disable = anx78xx_bridge_disable,
  834. .mode_set = anx78xx_bridge_mode_set,
  835. .enable = anx78xx_bridge_enable,
  836. };
  837. static irqreturn_t anx78xx_hpd_threaded_handler(int irq, void *data)
  838. {
  839. struct anx78xx *anx78xx = data;
  840. int err;
  841. if (anx78xx->powered)
  842. return IRQ_HANDLED;
  843. mutex_lock(&anx78xx->lock);
  844. /* Cable is pulled, power on the chip */
  845. anx78xx_poweron(anx78xx);
  846. err = anx78xx_enable_interrupts(anx78xx);
  847. if (err)
  848. DRM_ERROR("Failed to enable interrupts: %d\n", err);
  849. mutex_unlock(&anx78xx->lock);
  850. return IRQ_HANDLED;
  851. }
  852. static int anx78xx_handle_dp_int_1(struct anx78xx *anx78xx, u8 irq)
  853. {
  854. int err;
  855. DRM_DEBUG_KMS("Handle DP interrupt 1: %02x\n", irq);
  856. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG,
  857. irq);
  858. if (err)
  859. return err;
  860. if (irq & SP_TRAINING_FINISH) {
  861. DRM_DEBUG_KMS("IRQ: hardware link training finished\n");
  862. err = anx78xx_config_dp_output(anx78xx);
  863. }
  864. return err;
  865. }
  866. static bool anx78xx_handle_common_int_4(struct anx78xx *anx78xx, u8 irq)
  867. {
  868. bool event = false;
  869. int err;
  870. DRM_DEBUG_KMS("Handle common interrupt 4: %02x\n", irq);
  871. err = regmap_write(anx78xx->map[I2C_IDX_TX_P2],
  872. SP_COMMON_INT_STATUS4_REG, irq);
  873. if (err) {
  874. DRM_ERROR("Failed to write SP_COMMON_INT_STATUS4 %d\n", err);
  875. return event;
  876. }
  877. if (irq & SP_HPD_LOST) {
  878. DRM_DEBUG_KMS("IRQ: Hot plug detect - cable is pulled out\n");
  879. event = true;
  880. anx78xx_poweroff(anx78xx);
  881. /* Free cached EDID */
  882. kfree(anx78xx->edid);
  883. anx78xx->edid = NULL;
  884. } else if (irq & SP_HPD_PLUG) {
  885. DRM_DEBUG_KMS("IRQ: Hot plug detect - cable plug\n");
  886. event = true;
  887. }
  888. return event;
  889. }
  890. static void anx78xx_handle_hdmi_int_1(struct anx78xx *anx78xx, u8 irq)
  891. {
  892. unsigned int value;
  893. int err;
  894. DRM_DEBUG_KMS("Handle HDMI interrupt 1: %02x\n", irq);
  895. err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG,
  896. irq);
  897. if (err) {
  898. DRM_ERROR("Write HDMI int 1 failed: %d\n", err);
  899. return;
  900. }
  901. if ((irq & SP_CKDT_CHG) || (irq & SP_SCDT_CHG)) {
  902. DRM_DEBUG_KMS("IRQ: HDMI input detected\n");
  903. err = regmap_read(anx78xx->map[I2C_IDX_RX_P0],
  904. SP_SYSTEM_STATUS_REG, &value);
  905. if (err) {
  906. DRM_ERROR("Read system status reg failed: %d\n", err);
  907. return;
  908. }
  909. if (!(value & SP_TMDS_CLOCK_DET)) {
  910. DRM_DEBUG_KMS("IRQ: *** Waiting for HDMI clock ***\n");
  911. return;
  912. }
  913. if (!(value & SP_TMDS_DE_DET)) {
  914. DRM_DEBUG_KMS("IRQ: *** Waiting for HDMI signal ***\n");
  915. return;
  916. }
  917. err = anx78xx_dp_link_training(anx78xx);
  918. if (err)
  919. DRM_ERROR("Failed to start link training: %d\n", err);
  920. }
  921. }
  922. static irqreturn_t anx78xx_intp_threaded_handler(int unused, void *data)
  923. {
  924. struct anx78xx *anx78xx = data;
  925. bool event = false;
  926. unsigned int irq;
  927. int err;
  928. mutex_lock(&anx78xx->lock);
  929. err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG,
  930. &irq);
  931. if (err) {
  932. DRM_ERROR("Failed to read DP interrupt 1 status: %d\n", err);
  933. goto unlock;
  934. }
  935. if (irq)
  936. anx78xx_handle_dp_int_1(anx78xx, irq);
  937. err = regmap_read(anx78xx->map[I2C_IDX_TX_P2],
  938. SP_COMMON_INT_STATUS4_REG, &irq);
  939. if (err) {
  940. DRM_ERROR("Failed to read common interrupt 4 status: %d\n",
  941. err);
  942. goto unlock;
  943. }
  944. if (irq)
  945. event = anx78xx_handle_common_int_4(anx78xx, irq);
  946. /* Make sure we are still powered after handle HPD events */
  947. if (!anx78xx->powered)
  948. goto unlock;
  949. err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG,
  950. &irq);
  951. if (err) {
  952. DRM_ERROR("Failed to read HDMI int 1 status: %d\n", err);
  953. goto unlock;
  954. }
  955. if (irq)
  956. anx78xx_handle_hdmi_int_1(anx78xx, irq);
  957. unlock:
  958. mutex_unlock(&anx78xx->lock);
  959. if (event)
  960. drm_helper_hpd_irq_event(anx78xx->connector.dev);
  961. return IRQ_HANDLED;
  962. }
  963. static void unregister_i2c_dummy_clients(struct anx78xx *anx78xx)
  964. {
  965. unsigned int i;
  966. for (i = 0; i < ARRAY_SIZE(anx78xx->i2c_dummy); i++)
  967. i2c_unregister_device(anx78xx->i2c_dummy[i]);
  968. }
  969. static const struct regmap_config anx78xx_regmap_config = {
  970. .reg_bits = 8,
  971. .val_bits = 8,
  972. };
  973. static const u16 anx78xx_chipid_list[] = {
  974. 0x7808,
  975. 0x7812,
  976. 0x7814,
  977. 0x7818,
  978. };
  979. static int anx78xx_i2c_probe(struct i2c_client *client,
  980. const struct i2c_device_id *id)
  981. {
  982. struct anx78xx *anx78xx;
  983. struct anx78xx_platform_data *pdata;
  984. unsigned int i, idl, idh, version;
  985. const u8 *i2c_addresses;
  986. bool found = false;
  987. int err;
  988. anx78xx = devm_kzalloc(&client->dev, sizeof(*anx78xx), GFP_KERNEL);
  989. if (!anx78xx)
  990. return -ENOMEM;
  991. pdata = &anx78xx->pdata;
  992. mutex_init(&anx78xx->lock);
  993. #if IS_ENABLED(CONFIG_OF)
  994. anx78xx->bridge.of_node = client->dev.of_node;
  995. #endif
  996. anx78xx->client = client;
  997. i2c_set_clientdata(client, anx78xx);
  998. err = anx78xx_init_pdata(anx78xx);
  999. if (err) {
  1000. if (err != -EPROBE_DEFER)
  1001. DRM_ERROR("Failed to initialize pdata: %d\n", err);
  1002. return err;
  1003. }
  1004. pdata->hpd_irq = gpiod_to_irq(pdata->gpiod_hpd);
  1005. if (pdata->hpd_irq < 0) {
  1006. DRM_ERROR("Failed to get HPD IRQ: %d\n", pdata->hpd_irq);
  1007. return -ENODEV;
  1008. }
  1009. pdata->intp_irq = client->irq;
  1010. if (!pdata->intp_irq) {
  1011. DRM_ERROR("Failed to get CABLE_DET and INTP IRQ\n");
  1012. return -ENODEV;
  1013. }
  1014. /* Map slave addresses of ANX7814 */
  1015. i2c_addresses = device_get_match_data(&client->dev);
  1016. for (i = 0; i < I2C_NUM_ADDRESSES; i++) {
  1017. struct i2c_client *i2c_dummy;
  1018. i2c_dummy = i2c_new_dummy_device(client->adapter,
  1019. i2c_addresses[i] >> 1);
  1020. if (IS_ERR(i2c_dummy)) {
  1021. err = PTR_ERR(i2c_dummy);
  1022. DRM_ERROR("Failed to reserve I2C bus %02x: %d\n",
  1023. i2c_addresses[i], err);
  1024. goto err_unregister_i2c;
  1025. }
  1026. anx78xx->i2c_dummy[i] = i2c_dummy;
  1027. anx78xx->map[i] = devm_regmap_init_i2c(anx78xx->i2c_dummy[i],
  1028. &anx78xx_regmap_config);
  1029. if (IS_ERR(anx78xx->map[i])) {
  1030. err = PTR_ERR(anx78xx->map[i]);
  1031. DRM_ERROR("Failed regmap initialization %02x\n",
  1032. i2c_addresses[i]);
  1033. goto err_unregister_i2c;
  1034. }
  1035. }
  1036. /* Look for supported chip ID */
  1037. anx78xx_poweron(anx78xx);
  1038. err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDL_REG,
  1039. &idl);
  1040. if (err)
  1041. goto err_poweroff;
  1042. err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDH_REG,
  1043. &idh);
  1044. if (err)
  1045. goto err_poweroff;
  1046. anx78xx->chipid = (u8)idl | ((u8)idh << 8);
  1047. err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_VERSION_REG,
  1048. &version);
  1049. if (err)
  1050. goto err_poweroff;
  1051. for (i = 0; i < ARRAY_SIZE(anx78xx_chipid_list); i++) {
  1052. if (anx78xx->chipid == anx78xx_chipid_list[i]) {
  1053. DRM_INFO("Found ANX%x (ver. %d) SlimPort Transmitter\n",
  1054. anx78xx->chipid, version);
  1055. found = true;
  1056. break;
  1057. }
  1058. }
  1059. if (!found) {
  1060. DRM_ERROR("ANX%x (ver. %d) not supported by this driver\n",
  1061. anx78xx->chipid, version);
  1062. err = -ENODEV;
  1063. goto err_poweroff;
  1064. }
  1065. err = devm_request_threaded_irq(&client->dev, pdata->hpd_irq, NULL,
  1066. anx78xx_hpd_threaded_handler,
  1067. IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  1068. "anx78xx-hpd", anx78xx);
  1069. if (err) {
  1070. DRM_ERROR("Failed to request CABLE_DET threaded IRQ: %d\n",
  1071. err);
  1072. goto err_poweroff;
  1073. }
  1074. err = devm_request_threaded_irq(&client->dev, pdata->intp_irq, NULL,
  1075. anx78xx_intp_threaded_handler,
  1076. IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  1077. "anx78xx-intp", anx78xx);
  1078. if (err) {
  1079. DRM_ERROR("Failed to request INTP threaded IRQ: %d\n", err);
  1080. goto err_poweroff;
  1081. }
  1082. anx78xx->bridge.funcs = &anx78xx_bridge_funcs;
  1083. drm_bridge_add(&anx78xx->bridge);
  1084. /* If cable is pulled out, just poweroff and wait for HPD event */
  1085. if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd))
  1086. anx78xx_poweroff(anx78xx);
  1087. return 0;
  1088. err_poweroff:
  1089. anx78xx_poweroff(anx78xx);
  1090. err_unregister_i2c:
  1091. unregister_i2c_dummy_clients(anx78xx);
  1092. return err;
  1093. }
  1094. static void anx78xx_i2c_remove(struct i2c_client *client)
  1095. {
  1096. struct anx78xx *anx78xx = i2c_get_clientdata(client);
  1097. drm_bridge_remove(&anx78xx->bridge);
  1098. unregister_i2c_dummy_clients(anx78xx);
  1099. kfree(anx78xx->edid);
  1100. }
  1101. static const struct i2c_device_id anx78xx_id[] = {
  1102. { "anx7814", 0 },
  1103. { /* sentinel */ }
  1104. };
  1105. MODULE_DEVICE_TABLE(i2c, anx78xx_id);
  1106. #if IS_ENABLED(CONFIG_OF)
  1107. static const struct of_device_id anx78xx_match_table[] = {
  1108. { .compatible = "analogix,anx7808", .data = anx7808_i2c_addresses },
  1109. { .compatible = "analogix,anx7812", .data = anx781x_i2c_addresses },
  1110. { .compatible = "analogix,anx7814", .data = anx781x_i2c_addresses },
  1111. { .compatible = "analogix,anx7818", .data = anx781x_i2c_addresses },
  1112. { /* sentinel */ },
  1113. };
  1114. MODULE_DEVICE_TABLE(of, anx78xx_match_table);
  1115. #endif
  1116. static struct i2c_driver anx78xx_driver = {
  1117. .driver = {
  1118. .name = "anx7814",
  1119. .of_match_table = of_match_ptr(anx78xx_match_table),
  1120. },
  1121. .probe = anx78xx_i2c_probe,
  1122. .remove = anx78xx_i2c_remove,
  1123. .id_table = anx78xx_id,
  1124. };
  1125. module_i2c_driver(anx78xx_driver);
  1126. MODULE_DESCRIPTION("ANX78xx SlimPort Transmitter driver");
  1127. MODULE_AUTHOR("Enric Balletbo i Serra <[email protected]>");
  1128. MODULE_LICENSE("GPL v2");