ark7116.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. #include "FreeRTOS.h"
  2. #include "board.h"
  3. #include "chip.h"
  4. #include "ark7116.h"
  5. #ifdef VIDEO_DECODER_ARK7116
  6. #define ARK7116_RST_GPIO 7
  7. PanlstaticPara AV1_staticPara[]=
  8. {
  9. //GLOBAL
  10. {0XFD02,0X00},
  11. {0XFD0A,0X48},
  12. {0XFD0B,0X1D},
  13. {0XFD0C,0X33},
  14. {0XFD0D,0X20},
  15. {0XFD0E,0X2C},
  16. {0XFD0F,0X09},
  17. {0XFD10,0X01},
  18. {0XFD11,0XFF},
  19. {0XFD12,0XFF},
  20. {0XFD13,0XFF},
  21. {0XFD14,0X02},
  22. {0XFD15,0X02},
  23. {0XFD16,0X02},
  24. {0XFD1A,0X45},
  25. {0XFD19,0X0A},
  26. //PWM
  27. //DECODER
  28. {0XFE01,0X06},
  29. {0XFE02,0X00},
  30. {0XFE06,0X07},
  31. {0XFE07,0X80},
  32. {0XFE08,0X0E},
  33. {0XFE0C,0X10},
  34. {0XFE0F,0X07},
  35. {0XFE13,0X16},
  36. {0XFE14,0X22},
  37. {0XFE15,0X05},
  38. {0XFE26,0X0E},
  39. {0XFE27,0X00},
  40. {0XFE48,0X87},
  41. {0XFE54,0X00},
  42. {0XFE55,0X01},
  43. {0XFE63,0XC0},
  44. {0XFE83,0XFF},
  45. {0XFED5,0X81},
  46. {0XFED7,0XF7},
  47. {0XFEDC,0X00},
  48. {0XFE44,0X20},
  49. {0XFE45,0X80},
  50. {0XFE43,0X80},
  51. {0XFECB,0X00},
  52. {0XFE56,0X07},
  53. {0XFEC9,0X01},
  54. {0XFE46,0X00},
  55. {0XFE42,0X00},
  56. {0XFE19,0X82},
  57. {0XFE1A,0X50},
  58. {0XFE1B,0X22},
  59. {0XFE1C,0X61},
  60. {0XFE1D,0X70},
  61. //VP
  62. {0XFFB0,0X67},
  63. {0XFFB1,0X0F},
  64. {0XFFB2,0X10},
  65. {0XFFB3,0X10},
  66. {0XFFB4,0X10},
  67. {0XFFB7,0X10},
  68. {0XFFB8,0X10},
  69. {0XFFB9,0X22},
  70. {0XFFBA,0X20},
  71. {0XFFBB,0XFF},
  72. {0XFFBC,0X10},
  73. {0XFFC7,0X31},
  74. {0XFFC8,0X03},
  75. {0XFFC9,0X10},
  76. {0XFFCB,0X80},
  77. {0XFFCC,0X80},
  78. {0XFFCD,0X00},
  79. {0XFFCE,0X10},
  80. {0XFFCF,0X80},
  81. {0XFFD0,0X80},
  82. {0XFFD2,0X4F},
  83. {0XFFD3,0X80},
  84. {0XFFD4,0X80},
  85. {0XFFD7,0X05},
  86. {0XFFD8,0X80},
  87. {0XFFE7,0X50},
  88. {0XFFE8,0X10},
  89. {0XFFE9,0X22},
  90. {0XFFEA,0X20},
  91. {0XFFF0,0X2F},
  92. {0XFFF1,0XE1},
  93. {0XFFF2,0XEE},
  94. {0XFFF3,0XDC},
  95. {0XFFF4,0XFD},
  96. {0XFFF5,0X29},
  97. {0XFFF6,0XF7},
  98. {0XFFF7,0X9E},
  99. {0XFFF8,0X10},
  100. {0XFFF9,0X3D},
  101. {0XFFFA,0X4E},
  102. {0XFFFB,0X81},
  103. {0XFFD5,0X00},
  104. {0XFFD6,0X35},
  105. //TCON
  106. {0XFC00,0X48},
  107. {0XFC01,0X00},
  108. {0XFC02,0X00},
  109. {0XFC09,0X06},
  110. {0XFC0A,0X33},
  111. //SCALE
  112. {0XFC90,0X42},
  113. {0XFC91,0X00},
  114. {0XFC92,0X00},
  115. {0XFC93,0X0C},
  116. {0XFC94,0X00},
  117. {0XFC95,0X00},
  118. {0XFC96,0XE0},
  119. {0XFC97,0X03},
  120. {0XFC98,0X00},
  121. {0XFC99,0X04},
  122. {0XFC9A,0X57},
  123. {0XFC9B,0X03},
  124. {0XFC9C,0X02},
  125. {0XFC9D,0X00},
  126. {0XFC9E,0X06},
  127. {0XFC9F,0X00},
  128. {0XFCA0,0X23},
  129. {0XFCA1,0X00},
  130. {0XFCA2,0X1D},
  131. {0XFCA3,0X04},
  132. {0XFCA4,0X06},
  133. {0XFCA5,0X00},
  134. {0XFCA6,0X08},
  135. {0XFCA7,0X00},
  136. {0XFCA8,0X0A},
  137. {0XFCA9,0X00},
  138. {0XFCAA,0X09},
  139. {0XFCAB,0X01},
  140. {0XFCAC,0X12},
  141. {0XFCAD,0X00},
  142. {0XFCAE,0X00},
  143. {0XFCAF,0X00},
  144. {0XFCB0,0X00},
  145. {0XFCB1,0X00},
  146. {0XFCB2,0X00},
  147. {0XFCB3,0X00},
  148. {0XFCB4,0X00},
  149. {0XFCB5,0X00},
  150. {0XFCB7,0X0E},
  151. {0XFCB8,0X02},
  152. {0XFCBB,0X3B},
  153. {0XFCBC,0X01},
  154. {0XFCBD,0X00},
  155. {0XFCBE,0X00},
  156. {0XFCBF,0X0C},
  157. {0XFCC0,0X00},
  158. {0XFCC1,0X00},
  159. {0XFCC2,0X00},
  160. {0XFCC3,0X04},
  161. {0XFCC4,0X00},
  162. {0XFCC5,0X04},
  163. {0XFCC6,0X60},
  164. {0XFCC7,0X03},
  165. {0XFCC8,0X02},
  166. {0XFCC9,0X00},
  167. {0XFCCA,0X06},
  168. {0XFCCB,0X00},
  169. {0XFCCC,0X28},
  170. {0XFCCD,0X00},
  171. {0XFCCE,0XF8},
  172. {0XFCCF,0X02},
  173. {0XFCD1,0X00},
  174. {0XFCD2,0X15},
  175. {0XFCD3,0X00},
  176. {0XFCD4,0X0A},
  177. {0XFCD5,0X00},
  178. {0XFCD6,0X2F},
  179. {0XFCD7,0X01},
  180. {0XFCD8,0X00},
  181. {0XFCD9,0X07},
  182. {0XFCDA,0X00},
  183. {0XFCDB,0X00},
  184. {0XFCDC,0X00},
  185. {0XFCDD,0X14},
  186. {0XFCDE,0X00},
  187. {0XFCDF,0X00},
  188. {0XFCE0,0X00},
  189. {0XFCE1,0X02},
  190. {0XFCE3,0X01},
  191. {0XFCE4,0X02},
  192. {0XFCE7,0X03},
  193. {0XFCD0,0X0A},
  194. {0XFCE2,0X00},
  195. {0XFCB6,0X00},
  196. {0XFB35,0X00},
  197. {0XFB89,0X00},
  198. //GAMMA
  199. {0XFF00,0X03},
  200. {0XFF01,0X0F},
  201. {0XFF02,0X1E},
  202. {0XFF03,0X2B},
  203. {0XFF04,0X36},
  204. {0XFF05,0X40},
  205. {0XFF06,0X4B},
  206. {0XFF07,0X55},
  207. {0XFF08,0X5F},
  208. {0XFF09,0X69},
  209. {0XFF0A,0X73},
  210. {0XFF0B,0X7D},
  211. {0XFF0C,0X85},
  212. {0XFF0D,0X8E},
  213. {0XFF0E,0X96},
  214. {0XFF0F,0X9F},
  215. {0XFF10,0XA7},
  216. {0XFF11,0XAE},
  217. {0XFF12,0XB6},
  218. {0XFF13,0XBD},
  219. {0XFF14,0XC4},
  220. {0XFF15,0XCA},
  221. {0XFF16,0XD1},
  222. {0XFF17,0XD7},
  223. {0XFF18,0XDD},
  224. {0XFF19,0XE3},
  225. {0XFF1A,0XE8},
  226. {0XFF1B,0XED},
  227. {0XFF1C,0XF1},
  228. {0XFF1D,0XF5},
  229. {0XFF1E,0XF8},
  230. {0XFF1F,0XFC},
  231. {0XFF20,0X0F},
  232. {0XFF21,0X1E},
  233. {0XFF22,0X2B},
  234. {0XFF23,0X36},
  235. {0XFF24,0X40},
  236. {0XFF25,0X4B},
  237. {0XFF26,0X55},
  238. {0XFF27,0X5F},
  239. {0XFF28,0X69},
  240. {0XFF29,0X73},
  241. {0XFF2A,0X7D},
  242. {0XFF2B,0X85},
  243. {0XFF2C,0X8E},
  244. {0XFF2D,0X96},
  245. {0XFF2E,0X9F},
  246. {0XFF2F,0XA7},
  247. {0XFF30,0XAE},
  248. {0XFF31,0XB6},
  249. {0XFF32,0XBD},
  250. {0XFF33,0XC4},
  251. {0XFF34,0XCA},
  252. {0XFF35,0XD1},
  253. {0XFF36,0XD7},
  254. {0XFF37,0XDD},
  255. {0XFF38,0XE3},
  256. {0XFF39,0XE8},
  257. {0XFF3A,0XED},
  258. {0XFF3B,0XF1},
  259. {0XFF3C,0XF5},
  260. {0XFF3D,0XF8},
  261. {0XFF3E,0XFC},
  262. {0XFF3F,0X0F},
  263. {0XFF40,0X1E},
  264. {0XFF41,0X2B},
  265. {0XFF42,0X36},
  266. {0XFF43,0X40},
  267. {0XFF44,0X4B},
  268. {0XFF45,0X55},
  269. {0XFF46,0X5F},
  270. {0XFF47,0X69},
  271. {0XFF48,0X73},
  272. {0XFF49,0X7D},
  273. {0XFF4A,0X85},
  274. {0XFF4B,0X8E},
  275. {0XFF4C,0X96},
  276. {0XFF4D,0X9F},
  277. {0XFF4E,0XA7},
  278. {0XFF4F,0XAE},
  279. {0XFF50,0XB6},
  280. {0XFF51,0XBD},
  281. {0XFF52,0XC4},
  282. {0XFF53,0XCA},
  283. {0XFF54,0XD1},
  284. {0XFF55,0XD7},
  285. {0XFF56,0XDD},
  286. {0XFF57,0XE3},
  287. {0XFF58,0XE8},
  288. {0XFF59,0XED},
  289. {0XFF5A,0XF1},
  290. {0XFF5B,0XF5},
  291. {0XFF5C,0XF8},
  292. {0XFF5D,0XFC},
  293. {0XFF5E,0XFF},
  294. {0XFF5F,0XFF},
  295. {0XFF60,0XFF},
  296. };
  297. /*点屏 PAD MUX 参数*/
  298. PanlstaticPara AMT_PadMuxStaticPara[]=
  299. {
  300. //PAD MUX
  301. {0XFD30,0X22},
  302. {0XFD32,0X11},
  303. {0XFD33,0X11},
  304. {0XFD34,0X55},
  305. {0XFD35,0X55},
  306. {0XFD36,0X55},
  307. {0XFD37,0X55},
  308. {0XFD38,0X55},
  309. {0XFD39,0X55},
  310. {0XFD3A,0X11},
  311. {0XFD3B,0X11},
  312. {0XFD3C,0X44},
  313. {0XFD3D,0X44},
  314. {0XFD3E,0X44},
  315. {0XFD3F,0X44},
  316. {0XFD40,0X44},
  317. {0XFD41,0X44},
  318. {0XFD44,0X01},
  319. {0XFD45,0X00},
  320. {0XFD46,0X00},
  321. {0XFD47,0X00},
  322. {0XFD48,0X00},
  323. {0XFD49,0X00},
  324. {0XFD4A,0X00},
  325. {0XFD4B,0X00},
  326. {0XFD50,0X0B},
  327. {0XFD51,0X55},
  328. {0XFD52,0X55},
  329. {0XFD53,0X57},
  330. {0XFD54,0X57},
  331. {0XFD55,0X55},
  332. {0XFD56,0X55},
  333. {0XFD57,0X55},
  334. {0XFD58,0X55},
  335. {0XFD59,0X5D},
  336. {0XFD5A,0X55},
  337. };
  338. /*-----------------------------------------------------------*/
  339. static int ark7116_i2c_write (struct i2c_adapter *adap, UINT16 RegAddr, unsigned int data)
  340. {
  341. struct i2c_msg msg;
  342. int ret = -1;
  343. u8 retries = 0;
  344. u8 buf[2];
  345. UINT8 ucDeviceAddr;
  346. UINT8 uctmpDeviceAddr;
  347. UINT8 ucSubAddr;
  348. uctmpDeviceAddr = (unsigned char)((RegAddr>>8)&0XFF);
  349. ucSubAddr = (UINT8)(RegAddr&0XFF);
  350. switch(uctmpDeviceAddr)
  351. {
  352. case 0XF9:
  353. case 0XFD:
  354. ucDeviceAddr= 0XB0;
  355. break;
  356. case 0XFA:
  357. ucDeviceAddr= 0XBE;
  358. break;
  359. case 0XFB:
  360. ucDeviceAddr= 0XB6;
  361. break;
  362. case 0XFC:
  363. ucDeviceAddr= 0XB8;
  364. break;
  365. case 0XFE:
  366. ucDeviceAddr= 0XB2;
  367. break;
  368. case 0XFF:
  369. ucDeviceAddr= 0XB4;
  370. break;
  371. case 0X00:
  372. ucDeviceAddr = 0XBE;
  373. break;
  374. default:
  375. ucDeviceAddr= 0XB0;
  376. break;
  377. }
  378. buf[0] = (ucSubAddr);
  379. buf[1] = (data & 0xFF);
  380. msg.flags = !I2C_M_RD;
  381. msg.addr = (ucDeviceAddr>>1);
  382. msg.len = sizeof(buf);
  383. msg.buf = buf;
  384. //printf("msg.addr is %x\n", msg.addr);
  385. //printf("msg.ucSubAddr is %x\n",buf[0]);
  386. //printf("msg.data is %x\n", buf[1]);
  387. while(retries < 10)
  388. {
  389. //printf("retries is %x\n", retries);
  390. ret = i2c_transfer(adap, &msg, 1);
  391. //printf("ret is %x\n", ret);
  392. if (ret == 1)
  393. break;
  394. retries++;
  395. vTaskDelay (20);
  396. }
  397. if (retries >= 10)
  398. {
  399. printf("%s timeout11\n", __FUNCTION__);
  400. return -1;
  401. }
  402. return 0;
  403. }
  404. static void ARK7116_reset(void)
  405. {
  406. gpio_direction_output(ARK7116_RST_GPIO, 0);
  407. vTaskDelay(10);
  408. gpio_direction_output(ARK7116_RST_GPIO, 1);
  409. vTaskDelay(10);
  410. gpio_direction_output(ARK7116_RST_GPIO, 0);
  411. vTaskDelay(10);
  412. }
  413. int ConfigSlaveMode(struct i2c_adapter *adap)
  414. {
  415. unsigned char AddrBuff[6] = {0xa1,0xa2,0xa3,0xa4,0xa5,0xa6};
  416. unsigned char DataBuff[6] = {0x00,0x00,0x00,0x00,0x00,0x00};
  417. unsigned char i;
  418. DataBuff[0] = 0X55;
  419. DataBuff[1] = 0xAA;
  420. DataBuff[2] = 0X03;
  421. DataBuff[3] = 0X50; //slave mode
  422. DataBuff[4] = 0; // crc val
  423. DataBuff[5] = DataBuff[2]^DataBuff[3]^DataBuff[4];
  424. printf("ConfigSlaveMode\n");
  425. ark7116_i2c_write(adap,MCU_CFG_ADDR,0X40);
  426. ark7116_i2c_write(adap,RSTN,0X00);
  427. ark7116_i2c_write(adap,RSTN,0X5A);
  428. if(ark7116_i2c_write(adap,BUS_STATUS_ADDR, 0x00) < 0) //I2c Write Start
  429. return -1;
  430. for(i =0;i < 6;i++)
  431. {
  432. if(ark7116_i2c_write(adap,AddrBuff[i], DataBuff[i]) < 0)
  433. return -1;
  434. }
  435. if(ark7116_i2c_write(adap,BUS_STATUS_ADDR, 0x11) < 0) //I2c Write End
  436. return -1;
  437. vTaskDelay (200);
  438. return 0;
  439. }
  440. int AMT_WriteStaticPara(struct i2c_adapter *adap,PanlstaticPara * dataPt,UINT16 num)
  441. {
  442. struct i2c_msg msg;
  443. int ret = -1;
  444. u8 retries = 0;
  445. u8 buf[2];
  446. u8 ucDeviceAddr;
  447. u8 uctmpDeviceAddr;
  448. u8 ucSubAddr;
  449. u8 ucRegVal;
  450. while(num--)
  451. {
  452. uctmpDeviceAddr = (unsigned char)(((*dataPt).addr>>8)&0XFF);
  453. ucSubAddr = (unsigned char)(((*dataPt).addr)&0XFF);
  454. ucRegVal = (*dataPt).dat;
  455. switch(uctmpDeviceAddr)
  456. {
  457. case 0XF9:
  458. case 0XFD:
  459. ucDeviceAddr= 0XB0;
  460. break;
  461. case 0XFA:
  462. ucDeviceAddr= 0XBE;
  463. break;
  464. case 0XFB:
  465. ucDeviceAddr= 0XB6;
  466. break;
  467. case 0XFC:
  468. ucDeviceAddr= 0XB8;
  469. break;
  470. case 0XFE:
  471. ucDeviceAddr= 0XB2;
  472. break;
  473. case 0XFF:
  474. ucDeviceAddr= 0XB4;
  475. break;
  476. case 0X00:
  477. ucDeviceAddr = 0XBE;
  478. break;
  479. default:
  480. ucDeviceAddr= 0XB0;
  481. break;
  482. }
  483. buf[0] = (ucSubAddr);
  484. buf[1] = (ucRegVal & 0xFF);
  485. msg.flags = !I2C_M_RD;
  486. msg.addr = (ucDeviceAddr>>1);
  487. msg.len = sizeof(buf);
  488. msg.buf = buf;
  489. while(retries < 10)
  490. {
  491. ret = i2c_transfer(adap, &msg, 1);
  492. if (ret == 1)
  493. break;
  494. retries++;
  495. vTaskDelay (20);
  496. }
  497. if (retries >= 10)
  498. {
  499. return -1;
  500. }
  501. dataPt++;
  502. }
  503. return 0;
  504. }
  505. void ConfigStaticPara(struct i2c_adapter *adap)
  506. {
  507. //CurretSource = CurretSource;
  508. AMT_WriteStaticPara(adap,AV1_staticPara,sizeof(AV1_staticPara)/sizeof(AV1_staticPara[0]));
  509. }
  510. void ConfigPadMuxPara(struct i2c_adapter *adap)
  511. {
  512. AMT_WriteStaticPara(adap,AMT_PadMuxStaticPara,
  513. sizeof(AMT_PadMuxStaticPara)/sizeof(AMT_PadMuxStaticPara[0]));
  514. }
  515. void InitGlobalPara(struct i2c_adapter *adap) //165
  516. {
  517. printf("InitGlobalPara\n");
  518. ark7116_i2c_write(adap,ENH_PLL,0X20);
  519. ConfigStaticPara(adap);
  520. ConfigPadMuxPara(adap);
  521. ark7116_i2c_write(adap,0xFD0C,0X33);
  522. ark7116_i2c_write(adap,0xFD14,0X02);
  523. //黑屏
  524. ark7116_i2c_write(adap,0xFFCE,0X00);
  525. ark7116_i2c_write(adap,0xFFCF,0X80);
  526. ark7116_i2c_write(adap,0xFFD0,0X80);
  527. ark7116_i2c_write(adap,ENH_PLL,0X2C);
  528. #if 1 //20190117 增加每次上电初始化完之后复位decoder
  529. //复位Decoder
  530. vTaskDelay (200);
  531. ark7116_i2c_write(adap,DECODER_RST,0X03);
  532. vTaskDelay (10);
  533. ark7116_i2c_write(adap,DECODER_RST,0X02);
  534. #endif
  535. }
  536. int ark7116_init(void)
  537. {
  538. struct i2c_adapter *adap = NULL;
  539. if (!(adap = i2c_open("i2c1"))) {
  540. printf("open i2c1 fail.\n");
  541. return -1;
  542. }
  543. ARK7116_reset();
  544. if(ConfigSlaveMode(adap) < 0)
  545. return -1;
  546. InitGlobalPara(adap);
  547. return 0;
  548. }
  549. #endif