mdss_edp_aux.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524
  1. /* Copyright (c) 2013, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. */
  13. #include <linux/module.h>
  14. #include <linux/kernel.h>
  15. #include <linux/sched.h>
  16. #include <linux/time.h>
  17. #include <linux/init.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/spinlock.h>
  20. #include <linux/delay.h>
  21. #include <linux/io.h>
  22. #include <linux/semaphore.h>
  23. #include <linux/uaccess.h>
  24. #include <linux/clk.h>
  25. #include <linux/platform_device.h>
  26. #include <linux/bug.h>
  27. #include <linux/of_gpio.h>
  28. #include <asm/system.h>
  29. #include <asm/mach-types.h>
  30. #include <mach/hardware.h>
  31. #include <mach/gpio.h>
  32. #include <mach/clk.h>
  33. #include <mach/dma.h>
  34. #include "mdss_panel.h"
  35. #include "mdss_edp.h"
  36. /*
  37. * edp buffer operation
  38. */
  39. #if defined(CONFIG_FB_MSM_EDP_SAMSUNG)
  40. static struct mdss_edp_drv_pdata *g_ep;
  41. void set_global_ep(struct mdss_edp_drv_pdata *ep)
  42. {
  43. g_ep = ep;
  44. }
  45. struct mdss_edp_drv_pdata *get_global_ep(void)
  46. {
  47. return g_ep;
  48. }
  49. #endif
  50. static char *edp_buf_init(struct edp_buf *eb, char *buf, int size)
  51. {
  52. eb->start = buf;
  53. eb->size = size;
  54. eb->data = eb->start;
  55. eb->end = eb->start + eb->size;
  56. eb->len = 0;
  57. eb->trans_num = 0;
  58. eb->i2c = 0;
  59. return eb->data;
  60. }
  61. static char *edp_buf_reset(struct edp_buf *eb)
  62. {
  63. eb->data = eb->start;
  64. eb->len = 0;
  65. eb->trans_num = 0;
  66. eb->i2c = 0;
  67. return eb->data;
  68. }
  69. static char *edp_buf_push(struct edp_buf *eb, int len)
  70. {
  71. eb->data += len;
  72. eb->len += len;
  73. return eb->data;
  74. }
  75. static int edp_buf_trailing(struct edp_buf *eb)
  76. {
  77. return (int)(eb->end - eb->data);
  78. }
  79. /*
  80. * edp aux edp_buf_add_cmd:
  81. * NO native and i2c command mix allowed
  82. */
  83. static int edp_buf_add_cmd(struct edp_buf *eb, struct edp_cmd *cmd)
  84. {
  85. char data;
  86. char *bp, *cp;
  87. int i, len;
  88. if (cmd->read) /* read */
  89. len = 4;
  90. else
  91. len = cmd->len + 4;
  92. if (edp_buf_trailing(eb) < len)
  93. return 0;
  94. /*
  95. * cmd fifo only has depth of 144 bytes
  96. * limit buf length to 128 bytes here
  97. */
  98. if ((eb->len + len) > 128)
  99. return 0;
  100. bp = eb->data;
  101. data = cmd->addr >> 16;
  102. data &= 0x0f; /* 4 addr bits */
  103. if (cmd->read)
  104. data |= BIT(4);
  105. *bp++ = data;
  106. *bp++ = cmd->addr >> 8;
  107. *bp++ = cmd->addr;
  108. *bp++ = cmd->len - 1;
  109. if (!cmd->read) { /* write */
  110. cp = cmd->datap;
  111. for (i = 0; i < cmd->len; i++)
  112. *bp++ = *cp++;
  113. }
  114. edp_buf_push(eb, len);
  115. if (cmd->i2c)
  116. eb->i2c++;
  117. eb->trans_num++; /* Increase transaction number */
  118. return cmd->len - 1;
  119. }
  120. static int edp_cmd_fifo_tx(struct edp_buf *tp, unsigned char *base)
  121. {
  122. u32 data;
  123. char *dp;
  124. int len, cnt;
  125. u32 reg;
  126. len = tp->len; /* total byte to cmd fifo */
  127. if (len == 0)
  128. return 0;
  129. cnt = 0;
  130. dp = tp->start;
  131. while (cnt < len) {
  132. data = *dp; /* data byte */
  133. data <<= 8;
  134. data &= 0x00ff00; /* index = 0, write */
  135. if (cnt == 0)
  136. data |= BIT(31); /* INDEX_WRITE */
  137. pr_debug("%s: data=%x\n", __func__, data);
  138. edp_write(base + EDP_AUX_DATA, data);
  139. cnt++;
  140. dp++;
  141. }
  142. data = (tp->trans_num - 1);
  143. if (tp->i2c)
  144. data |= BIT(8); /* I2C */
  145. /* To clear BIT(9) GO bit */
  146. reg = edp_read(base + EDP_AUX_TRANS_CTRL);
  147. edp_write(base + EDP_AUX_TRANS_CTRL, reg & (~(0x1 << 9)));
  148. data |= BIT(9); /* GO */
  149. pr_debug("%s: data=%x\n", __func__, data);
  150. edp_write(base + EDP_AUX_TRANS_CTRL, data);
  151. return tp->len;
  152. }
  153. static int edp_cmd_fifo_rx(struct edp_buf *rp, int len, unsigned char *base)
  154. {
  155. u32 data;
  156. char *dp;
  157. int i;
  158. data = 0; /* index = 0 */
  159. data |= BIT(31); /* INDEX_WRITE */
  160. data |= BIT(0); /* read */
  161. edp_write(base + EDP_AUX_DATA, data);
  162. dp = rp->data;
  163. /* discard first byte */
  164. data = edp_read(base + EDP_AUX_DATA);
  165. for (i = 0; i < len; i++) {
  166. data = edp_read(base + EDP_AUX_DATA);
  167. pr_debug("%s: data=%x\n", __func__, data);
  168. *dp++ = (char)((data >> 8) & 0xff);
  169. }
  170. rp->len = len;
  171. return len;
  172. }
  173. static int edp_aux_write_cmds(struct mdss_edp_drv_pdata *ep,
  174. struct edp_cmd *cmd)
  175. {
  176. struct edp_cmd *cm;
  177. struct edp_buf *tp;
  178. int len, ret;
  179. mutex_lock(&ep->aux_mutex);
  180. ep->aux_cmd_busy = 1;
  181. tp = &ep->txp;
  182. edp_buf_reset(tp);
  183. cm = cmd;
  184. while (cm) {
  185. pr_debug("%s: i2c=%d read=%d addr=%x len=%d next=%d\n",
  186. __func__, cm->i2c, cm->read, cm->addr, cm->len,
  187. cm->next);
  188. ret = edp_buf_add_cmd(tp, cm);
  189. if (ret <= 0)
  190. break;
  191. if (cm->next == 0)
  192. break;
  193. cm++;
  194. }
  195. if (tp->i2c)
  196. ep->aux_cmd_i2c = 1;
  197. else
  198. ep->aux_cmd_i2c = 0;
  199. INIT_COMPLETION(ep->aux_comp);
  200. len = edp_cmd_fifo_tx(&ep->txp, ep->base);
  201. wait_for_completion(&ep->aux_comp);
  202. if (ep->aux_error_num == EDP_AUX_ERR_NONE)
  203. ret = len;
  204. else
  205. ret = ep->aux_error_num;
  206. ep->aux_cmd_busy = 0;
  207. mutex_unlock(&ep->aux_mutex);
  208. return ret;
  209. }
  210. static int edp_aux_read_cmds(struct mdss_edp_drv_pdata *ep,
  211. struct edp_cmd *cmds)
  212. {
  213. struct edp_cmd *cm;
  214. struct edp_buf *tp;
  215. struct edp_buf *rp;
  216. int len, ret;
  217. mutex_lock(&ep->aux_mutex);
  218. ep->aux_cmd_busy = 1;
  219. tp = &ep->txp;
  220. rp = &ep->rxp;
  221. edp_buf_reset(tp);
  222. edp_buf_reset(rp);
  223. cm = cmds;
  224. len = 0;
  225. while (cm) {
  226. pr_debug("%s: i2c=%d read=%d addr=%x len=%d next=%d\n",
  227. __func__, cm->i2c, cm->read, cm->addr, cm->len,
  228. cm->next);
  229. ret = edp_buf_add_cmd(tp, cm);
  230. len += cm->len;
  231. if (ret <= 0)
  232. break;
  233. if (cm->next == 0)
  234. break;
  235. cm++;
  236. }
  237. if (tp->i2c)
  238. ep->aux_cmd_i2c = 1;
  239. else
  240. ep->aux_cmd_i2c = 0;
  241. INIT_COMPLETION(ep->aux_comp);
  242. edp_cmd_fifo_tx(tp, ep->base);
  243. wait_for_completion(&ep->aux_comp);
  244. if (ep->aux_error_num == EDP_AUX_ERR_NONE)
  245. ret = edp_cmd_fifo_rx(rp, len, ep->base);
  246. else
  247. ret = ep->aux_error_num;
  248. ep->aux_cmd_busy = 0;
  249. mutex_unlock(&ep->aux_mutex);
  250. return ret;
  251. }
  252. void edp_aux_native_handler(struct mdss_edp_drv_pdata *ep, u32 isr)
  253. {
  254. pr_debug("%s: isr=%x\n", __func__, isr);
  255. if (isr & EDP_INTR_AUX_I2C_DONE) {
  256. ep->aux_error_num = EDP_AUX_ERR_NONE;
  257. }
  258. else if (isr & EDP_INTR_WRONG_ADDR) {
  259. ep->aux_error_num = EDP_AUX_ERR_ADDR;
  260. pr_err("%s: isr=%x\n", __func__, isr);
  261. }
  262. else if (isr & EDP_INTR_TIMEOUT) {
  263. ep->aux_error_num = EDP_AUX_ERR_TOUT;
  264. pr_err("%s: isr=%x\n", __func__, isr);
  265. }
  266. if (isr & EDP_INTR_NACK_DEFER) {
  267. ep->aux_error_num = EDP_AUX_ERR_NACK;
  268. pr_err("%s: isr=%x\n", __func__, isr);
  269. }
  270. complete(&ep->aux_comp);
  271. }
  272. void edp_aux_i2c_handler(struct mdss_edp_drv_pdata *ep, u32 isr)
  273. {
  274. pr_debug("%s: isr=%x\n", __func__, isr);
  275. if (isr & EDP_INTR_AUX_I2C_DONE) {
  276. if (isr & (EDP_INTR_I2C_NACK | EDP_INTR_I2C_DEFER))
  277. ep->aux_error_num = EDP_AUX_ERR_NACK;
  278. else
  279. ep->aux_error_num = EDP_AUX_ERR_NONE;
  280. } else {
  281. if (isr & EDP_INTR_WRONG_ADDR)
  282. ep->aux_error_num = EDP_AUX_ERR_ADDR;
  283. else if (isr & EDP_INTR_TIMEOUT)
  284. ep->aux_error_num = EDP_AUX_ERR_TOUT;
  285. if (isr & EDP_INTR_NACK_DEFER)
  286. ep->aux_error_num = EDP_AUX_ERR_NACK;
  287. if (isr & EDP_INTR_I2C_NACK)
  288. ep->aux_error_num = EDP_AUX_ERR_NACK;
  289. if (isr & EDP_INTR_I2C_DEFER)
  290. ep->aux_error_num = EDP_AUX_ERR_NACK;
  291. }
  292. complete(&ep->aux_comp);
  293. }
  294. static int edp_aux_write_buf(struct mdss_edp_drv_pdata *ep, u32 addr,
  295. char *buf, int len, int i2c)
  296. {
  297. struct edp_cmd cmd;
  298. cmd.read = 0;
  299. cmd.i2c = i2c;
  300. cmd.addr = addr;
  301. cmd.datap = buf;
  302. cmd.len = len & 0x0ff;
  303. cmd.next = 0;
  304. return edp_aux_write_cmds(ep, &cmd);
  305. }
  306. static int edp_aux_read_buf(struct mdss_edp_drv_pdata *ep, u32 addr,
  307. int len, int i2c)
  308. {
  309. struct edp_cmd cmd;
  310. cmd.read = 1;
  311. cmd.i2c = i2c;
  312. cmd.addr = addr;
  313. cmd.datap = NULL;
  314. cmd.len = len & 0x0ff;
  315. cmd.next = 0;
  316. return edp_aux_read_cmds(ep, &cmd);
  317. }
  318. /*
  319. * edid standard header bytes
  320. */
  321. static char edid_hdr[8] = {0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
  322. int edp_edid_buf_error(char *buf, int len)
  323. {
  324. char *bp;
  325. int i;
  326. char csum = 0;
  327. bp = buf;
  328. if (len < 128) {
  329. pr_err("%s: Error: len=%x\n", __func__, len);
  330. return -EINVAL;
  331. }
  332. for (i = 0; i < 128; i++)
  333. csum += *bp++;
  334. if (csum != 0) {
  335. pr_err("%s: Error: csum=%x\n", __func__, csum);
  336. return -EINVAL;
  337. }
  338. if (strncmp(buf, edid_hdr, strlen(edid_hdr))) {
  339. pr_err("%s: Error: header\n", __func__);
  340. return -EINVAL;
  341. }
  342. return 0;
  343. }
  344. void edp_extract_edid_manufacturer(struct edp_edid *edid, char *buf)
  345. {
  346. char *bp;
  347. char data;
  348. bp = &buf[8];
  349. data = *bp & 0x7f;
  350. data >>= 2;
  351. edid->id_name[0] = 'A' + data - 1;
  352. data = *bp & 0x03;
  353. data <<= 3;
  354. bp++;
  355. data |= (*bp >> 5);
  356. edid->id_name[1] = 'A' + data - 1;
  357. data = *bp & 0x1f;
  358. edid->id_name[2] = 'A' + data - 1;
  359. edid->id_name[3] = 0;
  360. pr_info("%s: edid manufacturer = %s\n", __func__, edid->id_name);
  361. }
  362. void edp_extract_edid_product(struct edp_edid *edid, char *buf)
  363. {
  364. char *bp;
  365. u32 data;
  366. bp = &buf[0x0a];
  367. data = *bp;
  368. edid->id_product = *bp++;
  369. edid->id_product &= 0x0ff;
  370. data = *bp & 0x0ff;
  371. data <<= 8;
  372. edid->id_product |= data;
  373. pr_info("%s: edid product = 0x%x\n", __func__, edid->id_product);
  374. };
  375. void edp_extract_edid_version(struct edp_edid *edid, char *buf)
  376. {
  377. edid->version = buf[0x12];
  378. edid->revision = buf[0x13];
  379. pr_info("%s: edid version = %d.%d\n", __func__, edid->version,
  380. edid->revision);
  381. };
  382. void edp_extract_edid_ext_block_cnt(struct edp_edid *edid, char *buf)
  383. {
  384. edid->ext_block_cnt = buf[0x7e];
  385. pr_debug("%s: edid extension = %d\n", __func__,
  386. edid->ext_block_cnt);
  387. };
  388. void edp_extract_edid_video_support(struct edp_edid *edid, char *buf)
  389. {
  390. char *bp;
  391. bp = &buf[0x14];
  392. if (*bp & 0x80) {
  393. edid->video_intf = *bp & 0x0f;
  394. /* 6, 8, 10, 12, 14 and 16 bit per component */
  395. edid->color_depth = ((*bp & 0x70) >> 4); /* color bit depth */
  396. if (edid->color_depth) {
  397. edid->color_depth *= 2;
  398. edid->color_depth += 4;
  399. }
  400. pr_debug("%s: Digital Video intf=%d color_depth=%d\n",
  401. __func__, edid->video_intf, edid->color_depth);
  402. } else {
  403. pr_err("%s: Error, Analog video interface\n", __func__);
  404. }
  405. };
  406. void edp_extract_edid_feature(struct edp_edid *edid, char *buf)
  407. {
  408. char *bp;
  409. char data;
  410. bp = &buf[0x18];
  411. data = *bp;
  412. data &= 0xe0;
  413. data >>= 5;
  414. if (data == 0x01)
  415. edid->dpm = 1; /* display power management */
  416. if (edid->video_intf) {
  417. if (*bp & 0x80) {
  418. /* RGB 4:4:4, YcrCb 4:4:4 and YCrCb 4:2:2 */
  419. edid->color_format = *bp & 0x18;
  420. edid->color_format >>= 3;
  421. }
  422. }
  423. pr_debug("%s: edid dpm=%d color_format=%d\n", __func__,
  424. edid->dpm, edid->color_format);
  425. };
  426. void edp_extract_edid_detailed_timing_description(struct edp_edid *edid,
  427. char *buf)
  428. {
  429. char *bp;
  430. u32 data;
  431. struct display_timing_desc *dp;
  432. dp = &edid->timing[0];
  433. bp = &buf[0x36];
  434. dp->pclk = 0;
  435. dp->pclk = *bp++; /* byte 0x36 */
  436. dp->pclk |= (*bp++ << 8); /* byte 0x37 */
  437. dp->h_addressable = *bp++; /* byte 0x38 */
  438. if (dp->pclk == 0 && dp->h_addressable == 0)
  439. return; /* Not detailed timing definition */
  440. dp->pclk *= 10000;
  441. dp->h_blank = *bp++;/* byte 0x39 */
  442. data = *bp & 0xf0; /* byte 0x3A */
  443. data <<= 4;
  444. dp->h_addressable |= data;
  445. data = *bp++ & 0x0f;
  446. data <<= 8;
  447. dp->h_blank |= data;
  448. dp->v_addressable = *bp++; /* byte 0x3B */
  449. dp->v_blank = *bp++; /* byte 0x3C */
  450. data = *bp & 0xf0; /* byte 0x3D */
  451. data <<= 4;
  452. dp->v_addressable |= data;
  453. data = *bp++ & 0x0f;
  454. data <<= 8;
  455. dp->v_blank |= data;
  456. dp->h_fporch = *bp++; /* byte 0x3E */
  457. dp->h_sync_pulse = *bp++; /* byte 0x3F */
  458. dp->v_fporch = *bp & 0x0f0; /* byte 0x40 */
  459. dp->v_fporch >>= 4;
  460. dp->v_sync_pulse = *bp & 0x0f;
  461. bp++;
  462. data = *bp & 0xc0; /* byte 0x41 */
  463. data <<= 2;
  464. dp->h_fporch |= data;
  465. data = *bp & 0x30;
  466. data <<= 4;
  467. dp->h_sync_pulse |= data;
  468. data = *bp & 0x0c;
  469. data <<= 2;
  470. dp->v_fporch |= data;
  471. data = *bp & 0x03;
  472. data <<= 4;
  473. dp->v_sync_pulse |= data;
  474. bp++;
  475. dp->width_mm = *bp++; /* byte 0x42 */
  476. dp->height_mm = *bp++; /* byte 0x43 */
  477. data = *bp & 0x0f0; /* byte 0x44 */
  478. data <<= 4;
  479. dp->width_mm |= data;
  480. data = *bp & 0x0f;
  481. data <<= 8;
  482. dp->height_mm |= data;
  483. bp++;
  484. dp->h_border = *bp++; /* byte 0x45 */
  485. dp->v_border = *bp++; /* byte 0x46 */
  486. /* progressive or interlaved */
  487. dp->interlaced = *bp & 0x80; /* byte 0x47 */
  488. dp->stereo = *bp & 0x60;
  489. dp->stereo >>= 5;
  490. data = *bp & 0x1e; /* bit 4,3,2 1*/
  491. data >>= 1;
  492. dp->sync_type = data & 0x08;
  493. dp->sync_type >>= 3; /* analog or digital */
  494. if (dp->sync_type) {
  495. dp->sync_separate = data & 0x04;
  496. dp->sync_separate >>= 2;
  497. if (dp->sync_separate) {
  498. if (data & 0x02)
  499. dp->vsync_pol = 1; /* positive */
  500. else
  501. dp->vsync_pol = 0;/* negative */
  502. if (data & 0x01)
  503. dp->hsync_pol = 1; /* positive */
  504. else
  505. dp->hsync_pol = 0; /* negative */
  506. }
  507. }
  508. pr_info("%s: pixel_clock = %d\n", __func__, dp->pclk);
  509. pr_info("%s: horizontal=%d, blank=%d, porch=%d, sync=%d\n"
  510. , __func__, dp->h_addressable, dp->h_blank,
  511. dp->h_fporch, dp->h_sync_pulse);
  512. pr_info("%s: vertical=%d, blank=%d, porch=%d, vsync=%d\n"
  513. , __func__, dp->v_addressable, dp->v_blank,
  514. dp->v_fporch, dp->v_sync_pulse);
  515. pr_info("%s: panel size in mm, width=%d height=%d\n", __func__,
  516. dp->width_mm, dp->height_mm);
  517. pr_info("%s: panel border horizontal=%d vertical=%d\n", __func__,
  518. dp->h_border, dp->v_border);
  519. pr_info("%s: flags: interlaced=%d stereo=%d sync_type=%d sync_sep=%d\n"
  520. , __func__, dp->interlaced, dp->stereo,
  521. dp->sync_type, dp->sync_separate);
  522. pr_info("%s: polarity vsync=%d, hsync=%d", __func__,
  523. dp->vsync_pol, dp->hsync_pol);
  524. }
  525. /*
  526. * EDID structure can be found in VESA standart here:
  527. * http://read.pudn.com/downloads110/ebook/456020/E-EDID%20Standard.pdf
  528. *
  529. * following table contains default edid
  530. * static char edid_raw_data[128] = {
  531. * 0, 255, 255, 255, 255, 255, 255, 0,
  532. * 6, 175, 93, 48, 0, 0, 0, 0, 0, 22,
  533. * 1, 4,
  534. * 149, 26, 14, 120, 2,
  535. * 164, 21,158, 85, 78, 155, 38, 15, 80, 84,
  536. * 0, 0, 0,
  537. * 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  538. * 29, 54, 128, 160, 112, 56, 30, 64, 48, 32, 142, 0, 0, 144, 16,0,0,24,
  539. * 19, 36, 128, 160, 112, 56, 30, 64, 48, 32, 142, 0, 0, 144, 16,0,0,24,
  540. * 0, 0, 0, 254, 0, 65, 85, 79, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  541. * 0, 0, 0, 254, 0, 66, 49, 49, 54, 72, 65, 78, 48, 51, 46, 48, 32, 10,
  542. * 0, 75 };
  543. */
  544. static int edp_aux_chan_ready(struct mdss_edp_drv_pdata *ep)
  545. {
  546. #if defined(CONFIG_FB_MSM_EDP_SAMSUNG)
  547. return 1;
  548. #else
  549. int cnt, ret;
  550. char data = 0;
  551. for (cnt = 5; cnt; cnt--) {
  552. ret = edp_aux_write_buf(ep, 0x50, &data, 1, 1);
  553. pr_debug("%s: ret=%d\n", __func__, ret);
  554. if (ret >= 0)
  555. break;
  556. msleep(100);
  557. }
  558. if (cnt <= 0) {
  559. pr_err("%s: aux chan NOT ready\n", __func__);
  560. return 0;
  561. }
  562. return 1;
  563. #endif
  564. }
  565. static int edp_sink_edid_read(struct mdss_edp_drv_pdata *ep, int block)
  566. {
  567. struct edp_buf *rp;
  568. int cnt, rlen;
  569. int ret = 0;
  570. ret = edp_aux_chan_ready(ep);
  571. if (ret == 0) {
  572. pr_err("%s: aux chan NOT ready\n", __func__);
  573. return ret;
  574. }
  575. for (cnt = 5; cnt; cnt--) {
  576. rlen = edp_aux_read_buf(ep, 0x50, 128, 1);
  577. if (rlen > 0) {
  578. pr_debug("%s: rlen=%d\n", __func__, rlen);
  579. rp = &ep->rxp;
  580. if (!edp_edid_buf_error(rp->data, rp->len))
  581. break;
  582. }
  583. }
  584. if (cnt <= 0) {
  585. pr_err("%s: Failed\n", __func__);
  586. return -EINVAL;
  587. }
  588. edp_extract_edid_manufacturer(&ep->edid, rp->data);
  589. edp_extract_edid_product(&ep->edid, rp->data);
  590. edp_extract_edid_version(&ep->edid, rp->data);
  591. edp_extract_edid_ext_block_cnt(&ep->edid, rp->data);
  592. edp_extract_edid_video_support(&ep->edid, rp->data);
  593. edp_extract_edid_feature(&ep->edid, rp->data);
  594. edp_extract_edid_detailed_timing_description(&ep->edid, rp->data);
  595. return 128;
  596. }
  597. static void edp_sink_capability_read(struct mdss_edp_drv_pdata *ep,
  598. int len)
  599. {
  600. char *bp;
  601. char data;
  602. struct dpcd_cap *cap;
  603. struct edp_buf *rp;
  604. int rlen;
  605. rlen = edp_aux_read_buf(ep, 0, len, 0);
  606. if (rlen <= 0) {
  607. pr_err("%s: edp aux read failed\n", __func__);
  608. return;
  609. }
  610. rp = &ep->rxp;
  611. cap = &ep->dpcd;
  612. bp = rp->data;
  613. data = *bp++; /* byte 0 */
  614. cap->major = (data >> 4) & 0x0f;
  615. cap->minor = data & 0x0f;
  616. if (--rlen <= 0)
  617. return;
  618. pr_debug("%s: version: %d.%d\n", __func__, cap->major, cap->minor);
  619. data = *bp++; /* byte 1 */
  620. /* 162, 270 and 540 MB, symbol rate, NOT bit rate */
  621. cap->max_link_rate = data;
  622. if (--rlen <= 0)
  623. return;
  624. pr_info("%s: link_rate=%d\n", __func__, cap->max_link_rate);
  625. data = *bp++; /* byte 2 */
  626. if (data & BIT(7))
  627. cap->enhanced_frame++;
  628. if (data & 0x40)
  629. cap->flags |= DPCD_TPS3;
  630. data &= 0x0f;
  631. cap->max_lane_count = data;
  632. if (--rlen <= 0)
  633. return;
  634. pr_debug("%s: lane_count=%d\n", __func__, cap->max_lane_count);
  635. data = *bp++; /* byte 3 */
  636. if (data & BIT(0)) {
  637. cap->flags |= DPCD_MAX_DOWNSPREAD_0_5;
  638. pr_debug("%s: max_downspread\n", __func__);
  639. }
  640. if (data & BIT(6)) {
  641. cap->flags |= DPCD_NO_AUX_HANDSHAKE;
  642. pr_debug("%s: NO Link Training\n", __func__);
  643. }
  644. if (--rlen <= 0)
  645. return;
  646. data = *bp++; /* byte 4 */
  647. cap->num_rx_port = (data & BIT(0)) + 1;
  648. pr_debug("%s: rx_ports=%d", __func__, cap->num_rx_port);
  649. if (--rlen <= 0)
  650. return;
  651. bp += 3; /* skip 5, 6 and 7 */
  652. rlen -= 3;
  653. if (rlen <= 0)
  654. return;
  655. data = *bp++; /* byte 8 */
  656. if (data & BIT(1)) {
  657. cap->flags |= DPCD_PORT_0_EDID_PRESENTED;
  658. pr_debug("%s: edid presented\n", __func__);
  659. }
  660. if (--rlen <= 0)
  661. return;
  662. data = *bp++; /* byte 9 */
  663. cap->rx_port0_buf_size = (data + 1) * 32;
  664. pr_debug("%s: lane_buf_size=%d", __func__, cap->rx_port0_buf_size);
  665. if (--rlen <= 0)
  666. return;
  667. bp += 2; /* skip 10, 11 port1 capability */
  668. rlen -= 2;
  669. if (rlen <= 0)
  670. return;
  671. data = *bp++; /* byte 12 */
  672. cap->i2c_speed_ctrl = data;
  673. if (cap->i2c_speed_ctrl > 0)
  674. pr_debug("%s: i2c_rate=%d", __func__, cap->i2c_speed_ctrl);
  675. if (--rlen <= 0)
  676. return;
  677. data = *bp++; /* byte 13 */
  678. cap->scrambler_reset = data & BIT(0);
  679. pr_debug("%s: scrambler_reset=%d\n", __func__,
  680. cap->scrambler_reset);
  681. if (data & BIT(1))
  682. cap->enhanced_frame++;
  683. pr_debug("%s: enhanced_framing=%d\n", __func__,
  684. cap->enhanced_frame);
  685. if (--rlen <= 0)
  686. return;
  687. data = *bp++; /* byte 14 */
  688. if (data == 0)
  689. cap->training_read_interval = 4000; /* us */
  690. else
  691. cap->training_read_interval = 4000 * data; /* us */
  692. pr_debug("%s: training_interval=%d\n", __func__,
  693. cap->training_read_interval);
  694. }
  695. static int edp_link_status_read(struct mdss_edp_drv_pdata *ep, int len)
  696. {
  697. char *bp;
  698. char data;
  699. struct dpcd_link_status *sp;
  700. struct edp_buf *rp;
  701. int rlen;
  702. pr_debug("%s: len=%d", __func__, len);
  703. /* skip byte 0x200 and 0x201 */
  704. rlen = edp_aux_read_buf(ep, 0x202, len, 0);
  705. if (rlen < len) {
  706. pr_err("%s: edp aux read failed\n", __func__);
  707. return 0;
  708. }
  709. rp = &ep->rxp;
  710. bp = rp->data;
  711. sp = &ep->link_status;
  712. data = *bp++; /* byte 0x202 */
  713. sp->lane_01_status = data; /* lane 0, 1 */
  714. data = *bp++; /* byte 0x203 */
  715. sp->lane_23_status = data; /* lane 2, 3 */
  716. data = *bp++; /* byte 0x204 */
  717. sp->interlane_align_done = (data & BIT(0));
  718. sp->downstream_port_status_changed = (data & BIT(6));
  719. sp->link_status_updated = (data & BIT(7));
  720. data = *bp++; /* byte 0x205 */
  721. sp->port_0_in_sync = (data & BIT(0));
  722. sp->port_1_in_sync = (data & BIT(1));
  723. data = *bp++; /* byte 0x206 */
  724. sp->req_voltage_swing[0] = data & 0x03;
  725. data >>= 2;
  726. sp->req_pre_emphasis[0] = data & 0x03;
  727. data >>= 2;
  728. sp->req_voltage_swing[1] = data & 0x03;
  729. data >>= 2;
  730. sp->req_pre_emphasis[1] = data & 0x03;
  731. data = *bp++; /* byte 0x207 */
  732. sp->req_voltage_swing[2] = data & 0x03;
  733. data >>= 2;
  734. sp->req_pre_emphasis[2] = data & 0x03;
  735. data >>= 2;
  736. sp->req_voltage_swing[3] = data & 0x03;
  737. data >>= 2;
  738. sp->req_pre_emphasis[3] = data & 0x03;
  739. return len;
  740. }
  741. static int edp_cap_lane_rate_set(struct mdss_edp_drv_pdata *ep)
  742. {
  743. char buf[4];
  744. int len = 0;
  745. struct dpcd_cap *cap;
  746. cap = &ep->dpcd;
  747. pr_debug("%s: bw=%x lane=%d\n", __func__, ep->link_rate, ep->lane_cnt);
  748. buf[0] = ep->link_rate;
  749. buf[1] = ep->lane_cnt;
  750. if (cap->enhanced_frame)
  751. buf[1] |= 0x80;
  752. len = edp_aux_write_buf(ep, 0x100, buf, 2, 0);
  753. return len;
  754. }
  755. static int edp_lane_set_write(struct mdss_edp_drv_pdata *ep, int voltage_level,
  756. int pre_emphasis_level)
  757. {
  758. int i;
  759. char buf[4];
  760. if (voltage_level >= DPCD_LINK_VOLTAGE_MAX)
  761. voltage_level |= 0x04;
  762. if (pre_emphasis_level >= DPCD_LINK_PRE_EMPHASIS_MAX)
  763. pre_emphasis_level |= 0x04;
  764. pre_emphasis_level <<= 3;
  765. for (i = 0; i < 4; i++)
  766. buf[i] = voltage_level | pre_emphasis_level;
  767. pr_debug("%s: p|v=0x%x", __func__, voltage_level | pre_emphasis_level);
  768. return edp_aux_write_buf(ep, 0x103, buf, 4, 0);
  769. }
  770. static int edp_train_pattern_set_write(struct mdss_edp_drv_pdata *ep,
  771. int pattern)
  772. {
  773. char buf[4];
  774. pr_debug("%s: pattern=%x\n", __func__, pattern);
  775. buf[0] = pattern;
  776. return edp_aux_write_buf(ep, 0x102, buf, 1, 0);
  777. }
  778. static int edp_sink_clock_recovery_done(struct mdss_edp_drv_pdata *ep)
  779. {
  780. u32 mask;
  781. u32 data;
  782. if (ep->lane_cnt == 1) {
  783. mask = 0x01; /* lane 0 */
  784. data = ep->link_status.lane_01_status;
  785. } else if (ep->lane_cnt == 2) {
  786. mask = 0x011; /*B lane 0, 1 */
  787. data = ep->link_status.lane_01_status;
  788. } else {
  789. mask = 0x01111; /*B lane 0, 1 */
  790. data = ep->link_status.lane_23_status;
  791. data <<= 8;
  792. data |= ep->link_status.lane_01_status;
  793. }
  794. pr_debug("%s: data=%x mask=%x\n", __func__, data, mask);
  795. data &= mask;
  796. if (data == mask) /* all done */
  797. return 1;
  798. return 0;
  799. }
  800. static int edp_sink_channel_eq_done(struct mdss_edp_drv_pdata *ep)
  801. {
  802. u32 mask;
  803. u32 data;
  804. pr_debug("%s:\n", __func__);
  805. if (!ep->link_status.interlane_align_done) { /* not align */
  806. pr_err("%s: interlane align failed\n", __func__);
  807. return 0;
  808. }
  809. if (ep->lane_cnt == 1) {
  810. mask = 0x7;
  811. data = ep->link_status.lane_01_status;
  812. } else if (ep->lane_cnt == 2) {
  813. mask = 0x77;
  814. data = ep->link_status.lane_01_status;
  815. } else {
  816. mask = 0x7777;
  817. data = ep->link_status.lane_23_status;
  818. data <<= 8;
  819. data |= ep->link_status.lane_01_status;
  820. }
  821. pr_debug("%s: data=%x mask=%x\n", __func__, data, mask);
  822. data &= mask;
  823. if (data == mask)/* all done */
  824. return 1;
  825. return 0;
  826. }
  827. void edp_sink_train_set_adjust(struct mdss_edp_drv_pdata *ep)
  828. {
  829. int i;
  830. int max = 0;
  831. /* use the max level across lanes */
  832. for (i = 0; i < ep->lane_cnt; i++) {
  833. pr_debug("%s: lane=%d req_voltage_swing=%d",
  834. __func__, i, ep->link_status.req_voltage_swing[i]);
  835. if (max < ep->link_status.req_voltage_swing[i])
  836. max = ep->link_status.req_voltage_swing[i];
  837. }
  838. ep->v_level = max;
  839. /* use the max level across lanes */
  840. max = 0;
  841. for (i = 0; i < ep->lane_cnt; i++) {
  842. pr_debug(" %s: lane=%d req_pre_emphasis=%d",
  843. __func__, i, ep->link_status.req_pre_emphasis[i]);
  844. if (max < ep->link_status.req_pre_emphasis[i])
  845. max = ep->link_status.req_pre_emphasis[i];
  846. }
  847. ep->p_level = max;
  848. pr_debug("%s: v_level=%d, p_level=%d", __func__,
  849. ep->v_level, ep->p_level);
  850. }
  851. static void edp_host_train_set(struct mdss_edp_drv_pdata *ep, int train)
  852. {
  853. int bit, cnt;
  854. u32 data;
  855. bit = 1;
  856. bit <<= (train - 1);
  857. pr_debug("%s: bit=%d train=%d\n", __func__, bit, train);
  858. edp_write(ep->base + EDP_STATE_CTRL, bit);
  859. bit = 8;
  860. bit <<= (train - 1);
  861. cnt = 10;
  862. while (cnt--) {
  863. data = edp_read(ep->base + EDP_MAINLINK_READY);
  864. if (data & bit)
  865. break;
  866. }
  867. if (cnt == 0)
  868. pr_err("%s: set link_train=%d failed\n", __func__, train);
  869. }
  870. char vm_pre_emphasis[4][4] = {
  871. {0x03, 0x06, 0x09, 0x0C}, /* pe0, 0 db */
  872. {0x03, 0x06, 0x09, 0xFF}, /* pe1, 3.5 db */
  873. {0x03, 0x06, 0xFF, 0xFF}, /* pe2, 6.0 db */
  874. {0x03, 0xFF, 0xFF, 0xFF} /* pe3, 9.5 db */
  875. };
  876. /* voltage swing, 0.2v and 1.0v are not support */
  877. char vm_voltage_swing[4][4] = {
  878. {0x14, 0x18, 0x1A, 0x1E}, /* sw0, 0.4v */
  879. {0x18, 0x1A, 0x1E, 0xFF}, /* sw1, 0.6 v */
  880. {0x1A, 0x1E, 0xFF, 0xFF}, /* sw1, 0.8 v */
  881. {0x1E, 0xFF, 0xFF, 0xFF} /* sw1, 1.2 v, optional */
  882. };
  883. static void edp_voltage_pre_emphasise_set(struct mdss_edp_drv_pdata *ep)
  884. {
  885. u32 value0 = 0;
  886. u32 value1 = 0;
  887. pr_debug("%s: v=%d p=%d\n", __func__, ep->v_level, ep->p_level);
  888. value0 = vm_pre_emphasis[(int)(ep->v_level)][(int)(ep->p_level)];
  889. value1 = vm_voltage_swing[(int)(ep->v_level)][(int)(ep->p_level)];
  890. /* Configure host and panel only if both values are allowed */
  891. if (value0 != 0xFF && value1 != 0xFF) {
  892. edp_write(ep->base + EDP_PHY_EDPPHY_GLB_VM_CFG0, value0);
  893. edp_write(ep->base + EDP_PHY_EDPPHY_GLB_VM_CFG1, value1);
  894. pr_debug("%s: value0=0x%x value1=0x%x", __func__,
  895. value0, value1);
  896. edp_lane_set_write(ep, ep->v_level, ep->p_level);
  897. }
  898. }
  899. static int edp_start_link_train_1(struct mdss_edp_drv_pdata *ep)
  900. {
  901. int tries, old_v_level;
  902. int ret = 0;
  903. pr_debug("%s:", __func__);
  904. edp_host_train_set(ep, 0x01); /* train_1 */
  905. edp_voltage_pre_emphasise_set(ep);
  906. edp_train_pattern_set_write(ep, 0x21); /* train_1 */
  907. tries = 0;
  908. old_v_level = ep->v_level;
  909. while (1) {
  910. usleep(ep->dpcd.training_read_interval);
  911. if (edp_read(ep->base + EDP_MAINLINK_READY) & BIT(3))
  912. pr_debug("%s: Training pattern 1 was sent properly\n", __func__);
  913. else
  914. pr_err("%s: Error in sending training pattern 1 value : 0x%x\n", __func__, edp_read(ep->base + EDP_MAINLINK_READY) );
  915. edp_link_status_read(ep, 6);
  916. if (edp_sink_clock_recovery_done(ep)) {
  917. ret = 0;
  918. break;
  919. }
  920. if (ep->v_level == DPCD_LINK_VOLTAGE_MAX) {
  921. ret = -1;
  922. break; /* quit */
  923. }
  924. if (old_v_level == ep->v_level) {
  925. tries++;
  926. if (tries >= 5) {
  927. ret = -1;
  928. break; /* quit */
  929. }
  930. } else {
  931. tries = 0;
  932. old_v_level = ep->v_level;
  933. }
  934. edp_sink_train_set_adjust(ep);
  935. edp_voltage_pre_emphasise_set(ep);
  936. }
  937. return ret;
  938. }
  939. static int edp_start_link_train_2(struct mdss_edp_drv_pdata *ep)
  940. {
  941. int tries;
  942. int ret = 0;
  943. char pattern;
  944. pr_debug("%s:", __func__);
  945. if (ep->dpcd.flags & DPCD_TPS3)
  946. pattern = 0x03;
  947. else
  948. pattern = 0x02;
  949. edp_host_train_set(ep, pattern); /* train_2 */
  950. edp_voltage_pre_emphasise_set(ep);
  951. edp_train_pattern_set_write(ep, pattern | 0x20);/* train_2 */
  952. tries = 0;
  953. while (1) {
  954. usleep(ep->dpcd.training_read_interval);
  955. if (edp_read(ep->base + 0x84) & BIT(4))
  956. pr_debug("%s: Training pattern 2 was sent properly\n", __func__);
  957. else
  958. pr_err("%s: Error in sending training pattern 2\n", __func__);
  959. edp_link_status_read(ep, 6);
  960. if (edp_sink_channel_eq_done(ep)) {
  961. ret = 0;
  962. break;
  963. }
  964. tries++;
  965. if (tries > 5) {
  966. ret = -1;
  967. break;
  968. }
  969. edp_sink_train_set_adjust(ep);
  970. edp_voltage_pre_emphasise_set(ep);
  971. }
  972. return ret;
  973. }
  974. static int edp_link_rate_down_shift(struct mdss_edp_drv_pdata *ep)
  975. {
  976. u32 prate, lrate;
  977. int rate, lane, max_lane;
  978. int changed = 0;
  979. rate = ep->link_rate;
  980. lane = ep->lane_cnt;
  981. max_lane = ep->dpcd.max_lane_count;
  982. prate = ep->pixel_rate;
  983. prate /= 1000; /* avoid using 64 biits */
  984. prate *= ep->bpp;
  985. prate /= 8; /* byte */
  986. #if !defined(CONFIG_FB_MSM_EDP_SAMSUNG)
  987. /*
  988. Link rate is fixed to 2.7G for eDP panel.
  989. */
  990. if (rate > EDP_LINK_RATE_162 && rate <= EDP_LINK_RATE_MAX) {
  991. rate -= 4; /* reduce rate */
  992. changed++;
  993. }
  994. #endif
  995. if (changed) {
  996. if (lane >= 1 && lane < max_lane)
  997. lane <<= 1; /* increase lane */
  998. lrate = 270000000; /* 270M */
  999. lrate /= 1000; /* avoid using 64 bits */
  1000. lrate *= rate;
  1001. lrate /= 10; /* byte, 10 bits --> 8 bits */
  1002. lrate *= lane;
  1003. pr_info("%s: new lrate=%u prate=%u rate=%d lane=%d p=%d b=%d\n",
  1004. __func__, lrate, prate, rate, lane, ep->pixel_rate, ep->bpp);
  1005. if (lrate > prate) {
  1006. ep->link_rate = rate;
  1007. ep->lane_cnt = lane;
  1008. pr_info("%s: new rate=%d %d\n", __func__, rate, lane);
  1009. return 0;
  1010. }
  1011. }
  1012. /* add calculation later */
  1013. return -EINVAL;
  1014. }
  1015. static void edp_clear_training_pattern(struct mdss_edp_drv_pdata *ep)
  1016. {
  1017. pr_debug("%s:\n", __func__);
  1018. edp_train_pattern_set_write(ep, 0);
  1019. usleep(ep->dpcd.training_read_interval);
  1020. }
  1021. static int edp_aux_link_train(struct mdss_edp_drv_pdata *ep)
  1022. {
  1023. int ret = 0;
  1024. pr_info("%s", __func__);
  1025. ep->dpcd.training_read_interval = 1000;
  1026. ret = edp_aux_chan_ready(ep);
  1027. if (ret == 0) {
  1028. pr_err("%s: LINK Train failed: aux chan NOT ready\n", __func__);
  1029. complete(&ep->train_comp);
  1030. return ret;
  1031. }
  1032. edp_write(ep->base + EDP_MAINLINK_CTRL, 0x1);
  1033. mdss_edp_sink_power_state(ep, SINK_POWER_ON);
  1034. train_start:
  1035. ep->v_level = 0; /* start from default level */
  1036. ep->p_level = 0;
  1037. edp_cap_lane_rate_set(ep);
  1038. mdss_edp_config_ctrl(ep);
  1039. mdss_edp_lane_power_ctrl(ep, 1);
  1040. mdss_edp_state_ctrl(ep, 0);
  1041. edp_clear_training_pattern(ep);
  1042. usleep(ep->dpcd.training_read_interval);
  1043. ret = edp_start_link_train_1(ep);
  1044. if (ret < 0) {
  1045. if (edp_link_rate_down_shift(ep) == 0) {
  1046. goto train_start;
  1047. } else {
  1048. pr_err("%s: Training 1 failed", __func__);
  1049. ret = -1;
  1050. goto clear;
  1051. }
  1052. }
  1053. pr_debug("%s: Training 1 completed successfully", __func__);
  1054. mdss_edp_state_ctrl(ep, 0);
  1055. /* recovery_done : 0x1111*/
  1056. pr_info("%s: Training 1 completed successfully recovery_done : 0x%x", __func__,
  1057. (ep->link_status.lane_23_status << 8) | ep->link_status.lane_01_status);
  1058. #if !defined(CONFIG_FB_MSM_EDP_SAMSUNG)
  1059. edp_clear_training_pattern(ep);
  1060. #endif
  1061. ret = edp_start_link_train_2(ep);
  1062. if (ret < 0) {
  1063. if (edp_link_rate_down_shift(ep) == 0) {
  1064. goto train_start;
  1065. } else {
  1066. pr_err("%s: Training 2 failed", __func__);
  1067. ret = -1;
  1068. goto clear;
  1069. }
  1070. }
  1071. /* recovery_done : 0x7777*/
  1072. pr_info("%s: Training 2 completed successfully eq_done : 0x%x v_level : %d p_level : %d", __func__,
  1073. (ep->link_status.lane_23_status << 8) | ep->link_status.lane_01_status, ep->v_level, ep->p_level);
  1074. mdss_edp_state_ctrl(ep, ST_SEND_VIDEO);
  1075. clear:
  1076. edp_clear_training_pattern(ep);
  1077. complete(&ep->train_comp);
  1078. return ret;
  1079. }
  1080. void mdss_edp_dpcd_cap_read(struct mdss_edp_drv_pdata *ep)
  1081. {
  1082. edp_sink_capability_read(ep, 16);
  1083. }
  1084. int mdss_edp_dpcd_status_read(struct mdss_edp_drv_pdata *ep)
  1085. {
  1086. struct dpcd_link_status *sp;
  1087. int ret = 0; /* not sync */
  1088. ret = edp_link_status_read(ep, 6);
  1089. if (ret) {
  1090. sp = &ep->link_status;
  1091. ret = sp->port_0_in_sync; /* 1 == sync */
  1092. }
  1093. return ret;
  1094. }
  1095. void mdss_edp_fill_link_cfg(struct mdss_edp_drv_pdata *ep)
  1096. {
  1097. struct display_timing_desc *dp;
  1098. dp = &ep->edid.timing[0];
  1099. ep->pixel_rate = dp->pclk;
  1100. ep->lane_cnt = ep->dpcd.max_lane_count;
  1101. ep->link_rate = ep->dpcd.max_link_rate;
  1102. pr_debug("%s: pclk=%d rate=%d lane=%d\n", __func__,
  1103. ep->pixel_rate, ep->link_rate, ep->lane_cnt);
  1104. }
  1105. void mdss_edp_edid_read(struct mdss_edp_drv_pdata *ep, int block)
  1106. {
  1107. edp_sink_edid_read(ep, block);
  1108. }
  1109. int mdss_edp_sink_power_state(struct mdss_edp_drv_pdata *ep, char state)
  1110. {
  1111. int ret;
  1112. ret = edp_aux_write_buf(ep, 0x600, &state, 1, 0);
  1113. pr_info("%s: state=%d ret=%d\n", __func__, state, ret);
  1114. return ret;
  1115. }
  1116. int mdss_edp_link_train(struct mdss_edp_drv_pdata *ep)
  1117. {
  1118. int ret;
  1119. mutex_lock(&ep->train_mutex);
  1120. ret = edp_aux_link_train(ep);
  1121. mutex_unlock(&ep->train_mutex);
  1122. return ret;
  1123. }
  1124. void mdss_edp_aux_setup(struct mdss_edp_drv_pdata *ep)
  1125. {
  1126. mutex_init(&ep->aux_mutex);
  1127. init_completion(&ep->aux_comp);
  1128. edp_buf_init(&ep->txp, ep->txbuf, sizeof(ep->txbuf));
  1129. edp_buf_init(&ep->rxp, ep->rxbuf, sizeof(ep->rxbuf));
  1130. }
  1131. #if defined(CONFIG_FB_MSM_EDP_SAMSUNG)
  1132. int aux_tx(int addr, char *data, int len)
  1133. {
  1134. struct mdss_edp_drv_pdata *ep = get_global_ep();
  1135. if (!ep) {
  1136. pr_info("%s error", __func__);
  1137. return -1;
  1138. }
  1139. return edp_aux_write_buf(ep, addr, data, len, 0);
  1140. }
  1141. #if defined(CONFIG_MACH_VIENNAATT)
  1142. void tcon_interanl_clock(void)
  1143. {
  1144. /* ATT needs 577Mbps internal clock */
  1145. char data[3];
  1146. data[0] = 0x03; data[1] = 0xBB; data[2] = 0x27;
  1147. aux_tx(0x491, data, 3);
  1148. data[0] = 0x05; data[1] = 0x2A; data[2] = 0x34;
  1149. aux_tx(0x491, data, 3);
  1150. data[0] = 0x05; data[1] = 0x2B; data[2] = 0x6D;
  1151. aux_tx(0x491, data, 3);
  1152. data[0] = 0x05; data[1] = 0x32; data[2] = 0x34;
  1153. aux_tx(0x491, data, 3);
  1154. data[0] = 0x05; data[1] = 0x33; data[2] = 0x6D;
  1155. aux_tx(0x491, data, 3);
  1156. }
  1157. #elif defined(CONFIG_MACH_PICASSO_SPR)
  1158. void tcon_interanl_clock(void)
  1159. {
  1160. /* SPR needs 900Mbps internal clock */
  1161. char data[3];
  1162. //900Mbps
  1163. data[0] = 0x03; data[1] = 0xBB; data[2] = 0x26;
  1164. aux_tx(0x491, data, 3);
  1165. data[0] = 0x05; data[1] = 0x2A; data[2] = 0x28;
  1166. aux_tx(0x491, data, 3);
  1167. data[0] = 0x05; data[1] = 0x2B; data[2] = 0x43;
  1168. aux_tx(0x491, data, 3);
  1169. data[0] = 0x05; data[1] = 0x2E; data[2] = 0x28;
  1170. aux_tx(0x491, data, 3);
  1171. data[0] = 0x05; data[1] = 0x2F; data[2] = 0x43;
  1172. aux_tx(0x491, data, 3);
  1173. data[0] = 0x05; data[1] = 0x32; data[2] = 0x28;
  1174. aux_tx(0x491, data, 3);
  1175. data[0] = 0x05; data[1] = 0x33; data[2] = 0x43;
  1176. aux_tx(0x491, data, 3);
  1177. data[0] = 0x05; data[1] = 0x36; data[2] = 0x28;
  1178. aux_tx(0x491, data, 3);
  1179. data[0] = 0x05; data[1] = 0x37; data[2] = 0x43;
  1180. aux_tx(0x491, data, 3);
  1181. data[0] = 0x05; data[1] = 0x46; data[2] = 0x28;
  1182. aux_tx(0x491, data, 3);
  1183. data[0] = 0x05; data[1] = 0x47; data[2] = 0x43;
  1184. aux_tx(0x491, data, 3);
  1185. }
  1186. #else
  1187. void tcon_interanl_clock(void)
  1188. {
  1189. pr_debug("%s not change tcon internal clock", __func__);
  1190. }
  1191. #endif
  1192. void read_firmware_version(char *string)
  1193. {
  1194. struct mdss_edp_drv_pdata *ep = get_global_ep();
  1195. char *bp;
  1196. struct edp_buf *rp;
  1197. unsigned char data[4];
  1198. int read_size = 8;
  1199. if (!ep) {
  1200. pr_info("%s error", __func__);
  1201. return ;
  1202. }
  1203. rp = &ep->rxp;
  1204. bp = rp->data;
  1205. /* Indirect mode read eeprom*/
  1206. data[0] = 0x51;
  1207. data[1] = 0x0F; //MSB ADDR
  1208. data[2] = 0xEC; //LSB ADDR
  1209. data[3] = 0xC1;
  1210. edp_aux_write_buf(ep, 0x45C, data, 4, 0);
  1211. usleep(1000);
  1212. edp_aux_read_buf(ep, 0x454, read_size, 0);
  1213. memcpy(string, bp, read_size);
  1214. data[0] = 0x51;
  1215. data[1] = 0x0F; //MSB ADDR
  1216. data[2] = 0xF4; //LSB ADDR
  1217. data[3] = 0xC1;
  1218. edp_aux_write_buf(ep, 0x45C, data, 4, 0);
  1219. usleep(1000);
  1220. edp_aux_read_buf(ep, 0x454, read_size, 0);
  1221. memcpy(string + read_size, bp, read_size);
  1222. string[16] = '\0';
  1223. }
  1224. #endif
  1225. void mdss_edp_aux_init(struct mdss_edp_drv_pdata *ep)
  1226. {
  1227. mutex_init(&ep->aux_mutex);
  1228. mutex_init(&ep->train_mutex);
  1229. init_completion(&ep->aux_comp);
  1230. init_completion(&ep->train_comp);
  1231. init_completion(&ep->idle_comp);
  1232. init_completion(&ep->video_comp);
  1233. complete(&ep->train_comp); /* make non block at first time */
  1234. complete(&ep->video_comp); /* make non block at first time */
  1235. edp_buf_init(&ep->txp, ep->txbuf, sizeof(ep->txbuf));
  1236. edp_buf_init(&ep->rxp, ep->rxbuf, sizeof(ep->rxbuf));
  1237. }