rn6752.c 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  1. #include "FreeRTOS.h"
  2. #include "board.h"
  3. #include "chip.h"
  4. #ifdef VIDEO_DECODER_RN6752
  5. #define RN6752_RST_GPIO 130
  6. #define RN6752_SLAVE_ADDR (0x58 >> 1)
  7. /*-----------------------------------------------------------*/
  8. static int rn6752_i2c_write (struct i2c_adapter *adap, unsigned int addr, unsigned int data)
  9. {
  10. struct i2c_msg msg;
  11. int ret = -1;
  12. u8 retries = 0;
  13. u8 buf[2];
  14. buf[0] = (addr & 0xFF);
  15. buf[1] = (data & 0xFF);
  16. msg.flags = !I2C_M_RD;
  17. msg.addr = RN6752_SLAVE_ADDR;
  18. msg.len = sizeof(buf);
  19. msg.buf = buf;
  20. while(retries < 5)
  21. {
  22. ret = i2c_transfer(adap, &msg, 1);
  23. if (ret == 1)
  24. break;
  25. retries++;
  26. }
  27. if (retries >= 5)
  28. {
  29. printf("%s timeout\n", __FUNCTION__);
  30. return -1;
  31. }
  32. return 0;
  33. }
  34. /* static unsigned int rn6752_i2c_read(struct i2c_adapter *adap, unsigned int addr)
  35. {
  36. struct i2c_msg msgs[2];
  37. int retries = 0;
  38. int ret = -1;
  39. u8 buf;
  40. buf = addr & 0xFF;
  41. msgs[0].flags = !I2C_M_RD;
  42. msgs[0].addr = RN6752_SLAVE_ADDR;
  43. msgs[0].len = 1;
  44. msgs[0].buf = &buf;
  45. msgs[1].flags = I2C_M_RD;
  46. msgs[1].addr = RN6752_SLAVE_ADDR;
  47. msgs[1].len = 1;
  48. msgs[1].buf = &buf;
  49. while(retries < 5)
  50. {
  51. ret = i2c_transfer(adap, msgs, 2);
  52. if(ret == 2)
  53. break;
  54. retries++;
  55. }
  56. if (retries >= 5)
  57. {
  58. printf( "%s timeout\n", __FUNCTION__);
  59. return 0;
  60. }
  61. return buf;
  62. } */
  63. static void rn6752_reset(void)
  64. {
  65. gpio_direction_output(RN6752_RST_GPIO, 1);
  66. vTaskDelay(10);
  67. gpio_direction_output(RN6752_RST_GPIO, 0);
  68. vTaskDelay(10);
  69. gpio_direction_output(RN6752_RST_GPIO, 1);
  70. vTaskDelay(100);
  71. }
  72. typedef struct _RXCCHIPstaticPara
  73. {
  74. unsigned int addr;
  75. unsigned int dat;
  76. } RXCHIPstaticPara;
  77. #if VIDEO_IN_FORMAT == VIN_AHD_720P_25
  78. const RXCHIPstaticPara rn6752m_720p_25_staticPara[]=
  79. {
  80. //RN6752M-601-720P(°üÀ¨Í¬Öá¿ØÖÆ)
  81. // 720P@25 BT601
  82. // Slave address is 0x58
  83. // Register, data
  84. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  85. //0xD2, 0x85, // disable auto clock detect
  86. //0xD6, 0x37, // 27MHz default
  87. //0xD8, 0x18, // switch to 26MHz clock
  88. //delay(100), // delay 100ms
  89. {0x81, 0x01}, // turn on video decoder
  90. {0xA3, 0x04},
  91. {0xDF, 0xFE}, // enable HD format
  92. {0x88, 0x40}, // disable SCLK0B out
  93. {0xF6, 0x40}, // disable SCLK3A out
  94. // ch0
  95. {0xFF, 0x00}, // switch to ch0 (default; optional)
  96. {0x2C, 0x30},
  97. {0x2D, 0xF0},
  98. {0x00, 0x20}, // internal use*
  99. {0x06, 0x08}, // internal use*
  100. {0x07, 0x63}, // HD format
  101. {0x2A, 0x01}, // filter control
  102. {0x3A, 0x00}, // No Insert Channel ID in SAV/EAV code
  103. {0x3F, 0x10}, // channel ID
  104. {0x4C, 0x37}, // equalizer
  105. {0x4F, 0x03}, // sync control
  106. {0x50, 0x02}, // 720p resolution
  107. {0x56, 0x05}, // BT 72M mode and BT601 mode
  108. {0x5F, 0x40}, // blank level
  109. {0x63, 0xF5}, // filter control
  110. {0x59, 0x00}, // extended register access
  111. {0x5A, 0x42}, // data for extended register
  112. {0x58, 0x01}, // enable extended register write
  113. {0x59, 0x33}, // extended register access
  114. {0x5A, 0x23}, // data for extended register
  115. {0x58, 0x01}, // enable extended register write
  116. {0x51, 0xE1}, // scale factor1
  117. {0x52, 0x88}, // scale factor2
  118. {0x53, 0x12}, // scale factor3
  119. {0x5B, 0x07}, // H-scaling control
  120. {0x5E, 0x08}, // enable H-scaling control
  121. {0x6A, 0x82}, // H-scaling control
  122. {0x28, 0x92}, // cropping
  123. {0x01, 0x08}, // brightness
  124. {0x02, 0x80}, // contrast
  125. {0x03, 0x80}, // saturation
  126. {0x04, 0x80}, // hue
  127. {0x05, 0x03}, // sharpness
  128. {0x09, 0xC8}, // EQ
  129. {0x34, 0x02}, // OB
  130. {0x57, 0x15}, // black/white stretch
  131. {0x68, 0x32}, // coring
  132. {0x00, 0x20}, // internal use*
  133. {0x0D, 0x20}, // cagc initial value
  134. //{0x2D, 0xF2}, // cagc adjust
  135. {0x37, 0X33},
  136. {0x61, 0X6C},
  137. //{0x30, 0X30},// V30H_0836_NEW
  138. //{0x0d, 0X50},
  139. //{0x3A, 0x04},
  140. //{0x3E, 0x32},
  141. {0x3A, 0x02},//P-MOS
  142. {0x3E, 0xf6},//ͬÖáÓ³Éäµ½AVID½Å
  143. {0x40, 0x04},
  144. {0x46, 0x23},
  145. {0x47, 0x30},
  146. //{0x49, 0x84},//85
  147. {0x6d, 0x00},
  148. {0x8E, 0x00}, // single channel output for VP
  149. {0x8F, 0x80}, // 720p mode for VP
  150. {0x8D, 0x31}, // enable VP out
  151. {0x89, 0x09}, // select 72MHz for SCLK
  152. {0x88, 0x41}, // enable SCLK out
  153. {0x96, 0x00}, // select AVID & VBLK as status indicator
  154. {0x97, 0x0B}, // enable status indicator out on AVID,VBLK & VSYNC
  155. {0x98, 0x00}, // video timing pin status
  156. {0x9A, 0x40}, // select AVID & VBLK as status indicator
  157. {0x9B, 0xE1}, // enable status indicator out on HSYNC
  158. {0x9C, 0x00}, // video timing pin status
  159. //{0x00, 0xC0},//test bar color
  160. };
  161. const RXCHIPstaticPara HD_720P25_video_mipi[] =
  162. {
  163. #if 0
  164. //2 lun
  165. 0x81, 0x01, // turn on video decoder
  166. 0xA3, 0x04,
  167. 0xDF, 0xFE, // enable HD format
  168. 0x88, 0x40, // disable SCLK1 out
  169. 0xFF, 0x00, //ch0
  170. 0x00, 0x00, // internal use*
  171. 0x06, 0x08, // internal use*
  172. 0x07, 0x63, // HD format
  173. 0x2A, 0x01, // filter control
  174. 0x3A, 0x24,
  175. 0x3F, 0x10,
  176. 0x4C, 0x37, // equalizer
  177. 0x4F, 0x03, // sync control
  178. 0x50, 0x02, // 720p resolution
  179. 0x56, 0x01, // 72M mode and BT656 mode
  180. 0x5F, 0x40, // blank level
  181. 0x63, 0xF5, // filter control
  182. 0x59, 0x00, // extended register access
  183. 0x5A, 0x42, // data for extended register
  184. 0x58, 0x01, // enable extended register write
  185. 0x59, 0x33, // extended register access
  186. 0x5A, 0x02, // data for extended register
  187. 0x58, 0x01, // enable extended register write
  188. 0x51, 0xE1, // scale factor1
  189. 0x52, 0x88, // scale factor2
  190. 0x53, 0x12, // scale factor3
  191. 0x5B, 0x07, // H-scaling control
  192. 0x5E, 0x08, // enable H-scaling control
  193. 0x6A, 0x82, // H-scaling control
  194. 0x28, 0x92, // cropping
  195. 0x03, 0x80, // saturation
  196. 0x04, 0x80, // hue
  197. 0x05, 0x00, // sharpness
  198. 0x57, 0x23, // black/white stretch
  199. 0x68, 0x32, // coring
  200. 0x37, 0x33,
  201. 0x61, 0x6C,
  202. //#ifdef USE_BLUE_SCREEN
  203. 0x3A, 0x24,
  204. 0x33, 0x10, // video in detection
  205. 0x4A, 0xA8, // video in detection
  206. 0x2E, 0x30, // force no video
  207. 0x2E, 0x00, // return to normal
  208. 0xFF, 0x09,
  209. 0x00, 0x03,
  210. 0xFF, 0x08,
  211. 0x04, 0x03,
  212. 0x6C, 0x11,
  213. //#ifdef USE_MIPI_4LANES
  214. 0x06, 0x4C,
  215. ////#ifdef USE MIPI DOWN FREO
  216. //0x28,0x02,
  217. //0x29,0x02,
  218. //0x2A,0x01,
  219. //0x2B,0x04,
  220. //0x32,0x02,
  221. //0x33,0x04,
  222. //0x34,0x01,
  223. //0x35,0x05,
  224. //0x36,0x01,
  225. //0xAE,0x09,
  226. //0x89,0x0A,
  227. //0x88,0x41,
  228. ////#endif
  229. //#endif
  230. 0x21, 0x01,
  231. 0x34, 0x06,
  232. 0x35, 0x0B,
  233. 0x78, 0x80,
  234. 0x79, 0x02,
  235. 0x6C, 0x01,
  236. 0x04, 0x00,
  237. 0x20, 0xAA,
  238. //#ifdef USE_MIPI_NON_CONTINUOUS_CLOCK
  239. 0x07, 0x04,
  240. 0xFF, 0x0A,
  241. 0x6C, 0x10,
  242. //#endif
  243. #else
  244. ///4lun
  245. 0x81, 0x01, // turn on video decoder
  246. 0xA3, 0x04,
  247. 0xDF, 0xFE, // enable HD format
  248. 0x88, 0x40, // disable SCLK1 out
  249. 0xFF, 0x00, //ch0
  250. 0x00, 0x20, // internal use*
  251. 0x06, 0x08, // internal use*
  252. 0x07, 0x63, // HD format
  253. 0x2A, 0x01, // filter control
  254. 0x3A, 0x24,
  255. 0x3F, 0x10,
  256. 0x4C, 0x37, // equalizer
  257. 0x4F, 0x03, // sync control
  258. 0x50, 0x02, // 720p resolution
  259. 0x56, 0x01, // 72M mode and BT656 mode
  260. 0x5F, 0x40, // blank level
  261. 0x63, 0xF5, // filter control
  262. 0x59, 0x00, // extended register access
  263. 0x5A, 0x42, // data for extended register
  264. 0x58, 0x01, // enable extended register write
  265. 0x59, 0x33, // extended register access
  266. 0x5A, 0x02, // data for extended register
  267. 0x58, 0x01, // enable extended register write
  268. 0x51, 0xE1, // scale factor1
  269. 0x52, 0x88, // scale factor2
  270. 0x53, 0x12, // scale factor3
  271. 0x5B, 0x07, // H-scaling control
  272. 0x5E, 0x08, // enable H-scaling control
  273. 0x6A, 0x82, // H-scaling control
  274. 0x28, 0x92, // cropping
  275. 0x03, 0x80, // saturation
  276. 0x04, 0x80, // hue
  277. 0x05, 0x00, // sharpness
  278. 0x57, 0x23, // black/white stretch
  279. 0x68, 0x32, // coring
  280. 0x37, 0x33,
  281. 0x61, 0x6C,
  282. //#ifdef USE_BLUE_SCREEN
  283. 0x3A, 0x24,
  284. //#endif
  285. 0x33, 0x10, // video in detection
  286. 0x4A, 0xA8, // video in detection
  287. 0x2E, 0x30, // force no video
  288. 0x2E, 0x00, // return to normal
  289. //#else
  290. 0xFF, 0x09,
  291. 0x00, 0x03,
  292. 0xFF, 0x08,
  293. 0x04, 0x03,
  294. 0x6C, 0x11,
  295. //#ifdef USE_MIPI_4LANES
  296. 0x06, 0x7C,
  297. ////#ifdef USE MIPI DOWN FREO
  298. //0x28,0x02,
  299. //0x29,0x02,
  300. //0x2A,0x01,
  301. //0x2B,0x04,
  302. //0x32,0x02,
  303. //0x33,0x04,
  304. //0x34,0x01,
  305. //0x35,0x05,
  306. //0x36,0x01,
  307. //0xAE,0x09,
  308. //0x89,0x0A,
  309. //0x88,0x41,
  310. ////#endif
  311. //#endif
  312. 0x21, 0x01,
  313. 0x34, 0x06,
  314. 0x35, 0x0B,
  315. 0x78, 0x80,
  316. 0x79, 0x02,
  317. 0x6C, 0x01,
  318. 0x04, 0x00,
  319. 0x20, 0xAA,
  320. //#ifdef USE_MIPI_NON_CONTINUOUS_CLOCK
  321. 0x07, 0x05,
  322. //#endif
  323. 0xFF, 0x0A,
  324. 0x6C, 0x10,
  325. //#endif
  326. #endif
  327. };
  328. #endif
  329. #if VIDEO_IN_FORMAT == VIN_AHD_720P_30
  330. const RXCHIPstaticPara rn6752m_720p_30_staticPara[]=
  331. {
  332. // 720P@30 BT601
  333. // Slave address is 0x58
  334. // Register, data
  335. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  336. //0xD2, 0x85, // disable auto clock detect
  337. //0xD6, 0x37, // 27MHz default
  338. //0xD8, 0x18, // switch to 26MHz clock
  339. //delay(100), // delay 100ms
  340. 0x49,0x01,
  341. 0x19,0x07,
  342. 0x81, 0x01, // turn on video decoder
  343. 0xA3, 0x04,
  344. 0xDF, 0xFE, // enable HD format
  345. 0x88, 0x40, // disable SCLK0B out
  346. 0xF6, 0x40, // disable SCLK3A out
  347. // ch0
  348. 0xFF, 0x00, // switch to ch0 (default; optional)
  349. 0x00, 0x20, // internal use*
  350. 0x06, 0x08, // internal use*
  351. 0x07, 0x63, // HD format
  352. 0x2A, 0x01, // filter control
  353. 0x3A, 0x00, // No Insert Channel ID in SAV/EAV code
  354. 0x3F, 0x10, // channel ID
  355. 0x4C, 0x37, // equalizer
  356. 0x4F, 0x03, // sync control
  357. 0x50, 0x02, // 720p resolution
  358. 0x56, 0x05, // BT 72M mode and BT601 mode
  359. 0x5F, 0x40, // blank level
  360. 0x63, 0xF5, // filter control
  361. 0x59, 0x00, // extended register access
  362. 0x5A, 0x44, // data for extended register
  363. 0x58, 0x01, // enable extended register write
  364. 0x59, 0x33, // extended register access
  365. 0x5A, 0x23, // data for extended register
  366. 0x58, 0x01, // enable extended register write
  367. 0x51, 0xE1, // scale factor1
  368. 0x52, 0x88, // scale factor2
  369. 0x53, 0x12, // scale factor3
  370. 0x5B, 0x07, // H-scaling control
  371. 0x5E, 0x0B, // enable H-scaling control
  372. 0x6A, 0x82, // H-scaling control
  373. 0x28, 0x92, // cropping
  374. 0x03, 0x80, // saturation
  375. 0x04, 0x80, // hue
  376. 0x05, 0x00, // sharpness
  377. 0x57, 0x23, // black/white stretch
  378. 0x68, 0x32, // coring
  379. 0x3A, 0x04,
  380. 0x3E, 0x32,
  381. 0x40, 0x04,
  382. 0x46, 0x23,
  383. 0x8E, 0x00, // single channel output for VP
  384. 0x8F, 0x80, // 720p mode for VP
  385. 0x8D, 0x31, // enable VP out
  386. 0x89, 0x09, // select 72MHz for SCLK
  387. 0x88, 0x41, // enable SCLK out
  388. 0XD3,0X00,//channel 0 0x00 channel 1 0X01
  389. 0x96, 0x00, // select AVID & VBLK as status indicator
  390. 0x97, 0x0B, // enable status indicator out on AVID,VBLK & VSYNC
  391. 0x98, 0x00, // video timing pin status
  392. 0x9A, 0x40, // select AVID & VBLK as status indicator
  393. 0x9B, 0xE1, // enable status indicator out on HSYNC
  394. 0x9C, 0x00, // video timing pin status
  395. };
  396. #endif
  397. #if VIDEO_IN_FORMAT == VIN_CVBS_NTSC
  398. const RXCHIPstaticPara rn6752m_cvbs_ntsc_staticPara[]=
  399. {
  400. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  401. //0xD2, 0x85, // disable auto clock detect
  402. //0xD6, 0x37, // 27MHz default
  403. //0xD8, 0x18, // switch to 26MHz clock
  404. //delay(100), // delay 100ms
  405. 0x81, 0x01, // turn on video decoder
  406. 0xA3, 0x00,
  407. 0xDF, 0xFF, // enable CVBS format
  408. // ch0
  409. 0xFF, 0x00, // switch to ch0 (default; optional)
  410. 0x00, 0x00, // internal use*
  411. 0x06, 0x08, // internal use*
  412. 0x07, 0x63, // HD format
  413. 0x2A, 0x81, // filter control
  414. 0x3A, 0x00, // No Insert Channel ID in SAV/EAV code
  415. 0x3F, 0x10, // channel ID
  416. 0x4C, 0x37, // equalizer
  417. 0x4F, 0x00, // sync control
  418. 0x50, 0x00, // D1 resolution
  419. 0x56, 0x04, // 27M mode and BT601 mode
  420. 0x5F, 0x00, // blank level
  421. 0x63, 0x75, // filter control
  422. 0x59, 0x00, // extended register access
  423. 0x5A, 0x00, // data for extended register
  424. 0x58, 0x01, // enable extended register write
  425. 0x59, 0x33, // extended register access
  426. 0x5A, 0x02, // data for extended register
  427. 0x58, 0x01, // enable extended register write
  428. 0x5B, 0x00, // H-scaling control
  429. 0x5E, 0x01, // enable H-scaling control
  430. 0x6A, 0x00, // H-scaling control
  431. 0x28, 0xB2, // cropping
  432. 0x20, 0x24,
  433. 0x23, 0x11,
  434. 0x24, 0x05,
  435. 0x25, 0x11,
  436. 0x26, 0x00,
  437. 0x42, 0x00,
  438. 0x03, 0x80, // saturation
  439. 0x04, 0x80, // hue
  440. 0x05, 0x03, // sharpness
  441. 0x57, 0x20, // black/white stretch
  442. 0x68, 0x32, // coring
  443. 0x3A, 0x04,
  444. 0x3E, 0x32,
  445. 0x40, 0x04,
  446. 0x46, 0x23,
  447. 0x8E, 0x00, // single channel output for VP
  448. 0x8F, 0x00, // D1 mode for VP
  449. 0x8D, 0x31, // enable VP out
  450. 0x89, 0x00, // select 27MHz for SCLK
  451. 0x88, 0x41, // enable SCLK out
  452. 0x96, 0x00, // select AVID & VBLK as status indicator
  453. 0x97, 0x0B, // enable status indicator out on AVID,VBLK & VSYNC
  454. 0x98, 0x00, // video timing pin status
  455. 0x9A, 0x40, // select AVID & VBLK as status indicator
  456. 0x9B, 0xE1, // enable status indicator out on HSYNC
  457. 0x9C, 0x00, // video timing pin status
  458. };
  459. const RXCHIPstaticPara rn6752m_cvbs_ntsc_Mipi_staticPara[]=
  460. {
  461. 0x81, 0x01, // turn on video decoder
  462. 0xA3, 0x04,
  463. 0xDF, 0x0F, // enable CVBS format
  464. 0x88, 0x40, // disable SCLK1 out
  465. 0xFF, 0x00, // ch0
  466. 0x00, 0x00, // internal use*
  467. 0x06, 0x08, // internal use*
  468. 0x07, 0x63, // HD format
  469. 0x2A, 0x81, // filter control
  470. 0x3A, 0x24,
  471. 0x3F, 0x10,
  472. 0x4C, 0x37, // equalizer
  473. 0x4F, 0x00, // sync control
  474. 0x50, 0x00, // D1 resolution
  475. 0x56, 0x01, // 72M mode and BT656 mode
  476. 0x5F, 0x00, // blank level
  477. 0x63, 0x75, // filter control
  478. 0x59, 0x00, // extended register access
  479. 0x5A, 0x00, // data for extended register
  480. 0x58, 0x01, // enable extended register write
  481. 0x59, 0x33, // extended register access
  482. 0x5A, 0x02, // data for extended register
  483. 0x58, 0x01, // enable extended register write
  484. 0x5B, 0x00, // H-scaling control
  485. 0x28, 0xB2, // cropping
  486. 0x51, 0xE8,
  487. 0x52, 0x08,
  488. 0x53, 0x11,
  489. 0x5E, 0x08,
  490. 0x6A, 0x89,
  491. //#ifdef USE_CVBS_ONE_FIELD
  492. 0x20, 0x24,
  493. 0x23, 0x11,
  494. 0x24, 0x05,
  495. 0x25, 0x11,
  496. 0x26, 0x00,
  497. 0x42, 0x00,
  498. 0x03, 0x80, // saturation
  499. 0x04, 0x80, // hue
  500. 0x05, 0x03, // sharpness
  501. 0x57, 0x20, // black/white stretch
  502. 0x68, 0x32, // coring
  503. 0x37, 0x33,
  504. 0x61, 0x6C,
  505. //#ifdef USE_BLUE_SCREEN
  506. 0x3A, 0x24,
  507. //
  508. //#endif
  509. 0x33, 0x10, // video in detection
  510. 0x4A, 0xA8, // video in detection
  511. 0x2E, 0x30, // force no video
  512. 0x2E, 0x00, // return to normal
  513. //#else
  514. 0xFF, 0x09,
  515. 0x00, 0x03,
  516. 0xFF, 0x08,
  517. 0x04, 0x03,
  518. 0x6C, 0x11,
  519. //#ifdef USE_MIPI_1LANES
  520. 0x06, 0x44,
  521. //#endif
  522. 0x21, 0x01,
  523. 0x2B, 0x08,
  524. 0x34, 0x06,
  525. 0x35, 0x0B,
  526. //#endif
  527. 0x78, 0x68,
  528. 0x79, 0x01,
  529. 0x6C, 0x01,
  530. 0x04, 0x00,
  531. 0x20, 0xAA,
  532. //#ifdef USE_MIPI_NON_CONTINUOUS_CLOCK
  533. 0x07, 0x05,
  534. //#else
  535. //0x07, 0x04,
  536. //#endif
  537. 0xFF, 0x0A,
  538. 0x6C, 0x10,
  539. //#endif
  540. };
  541. #endif
  542. #if VIDEO_IN_FORMAT == VIN_CVBS_PAL
  543. const RXCHIPstaticPara rn6752m_cvbs_pal_staticPara[]=
  544. {
  545. // cvbs@25 BT601
  546. // Slave address is 0x58
  547. // Register, data
  548. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  549. //0xD2, 0x85, // disable auto clock detect
  550. //0xD6, 0x37, // 27MHz default
  551. //0xD8, 0x18, // switch to 26MHz clock
  552. //delay(100), // delay 100ms
  553. 0x49,0x01,
  554. 0x19,0x07,
  555. 0x81, 0x01, // turn on video decoder
  556. 0xA3, 0x04,
  557. 0xDF, 0x0F, // enable CVBS format
  558. 0x88, 0x40, // disable SCLK0B out
  559. 0xF6, 0x40, // disable SCLK3A out
  560. // ch0
  561. 0xFF, 0x00, // switch to ch0 (default; optional)
  562. 0x00, 0x00, // internal use*
  563. 0x06, 0x08, // internal use*
  564. 0x07, 0x62, // HD format
  565. 0x2A, 0x81, // filter control
  566. 0x3A, 0x00, // No Insert Channel ID in SAV/EAV code
  567. 0x3F, 0x10, // channel ID
  568. 0x4C, 0x37, // equalizer
  569. 0x4F, 0x00, // sync control
  570. 0x50, 0x00, // 720p resolution
  571. 0x56, 0x05, // 72M mode and BT601 mode
  572. 0x5F, 0x00, // blank level
  573. 0x63, 0x75, // filter control
  574. 0x59, 0x00, // extended register access
  575. 0x5A, 0x00, // data for extended register
  576. 0x58, 0x01, // enable extended register write
  577. 0x59, 0x33, // extended register access
  578. 0x5A, 0x02, // data for extended register
  579. 0x58, 0x01, // enable extended register write
  580. 0x5B, 0x00, // H-scaling control
  581. 0x5E, 0x01, // enable H-scaling control
  582. 0x6A, 0x00, // H-scaling control
  583. 0x28, 0xB2, // cropping
  584. 0x20, 0x24,
  585. 0x23, 0x17,
  586. 0x24, 0x37,
  587. 0x25, 0x17,
  588. 0x26, 0x00,
  589. 0x42, 0x00,
  590. 0x03, 0x80, // saturation
  591. 0x04, 0x80, // hue
  592. 0x05, 0x03, // sharpness
  593. 0x57, 0x20, // black/white stretch
  594. 0x68, 0x32, // coring
  595. 0x3A, 0x04,
  596. 0x3E, 0x32,
  597. 0x40, 0x04,
  598. 0x46, 0x23,
  599. 0x8E, 0x00, // single channel output for VP
  600. 0x8F, 0x80, // 720p mode for VP
  601. 0x8D, 0x31, // enable VP out
  602. 0x89, 0x09, // select 72MHz for SCLK
  603. 0x88, 0x41, // enable SCLK out
  604. 0x96, 0x00, // select AVID & VBLK as status indicator
  605. 0x97, 0x0B, // enable status indicator out on AVID,VBLK & VSYNC
  606. 0x98, 0x00, // video timing pin status
  607. 0x9A, 0x40, // select AVID & VBLK as status indicator
  608. 0x9B, 0xE1, // enable status indicator out on HSYNC
  609. 0x9C, 0x00, // video timing pin status
  610. };
  611. #endif
  612. const RXCHIPstaticPara rn6752m_bt656_1080p_25pfs[] = {
  613. // 1080P@25 BT656
  614. // Slave address is 0x58
  615. // Register, data
  616. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  617. //0xD2, 0x85, // disable auto clock detect
  618. //0xD6, 0x37, // 27MHz default
  619. //0xD8, 0x18, // switch to 26MHz clock
  620. //delay(100), // delay 100ms
  621. 0x81, 0x01, // turn on video decoder
  622. 0xA3, 0x04, //
  623. 0xDF, 0xFE, // enable HD format
  624. 0xF0, 0xC0,
  625. 0x88, 0x40, // disable SCLK0B out
  626. 0xF6, 0x40, // disable SCLK3A out
  627. // ch0
  628. 0xFF, 0x00, // switch to ch0 (default; optional)
  629. 0x00, 0x20, // internal use*
  630. 0x06, 0x08, // internal use*
  631. 0x07, 0x63, // HD format
  632. 0x2A, 0x01, // filter control
  633. 0x3A, 0x00, // No Insert Channel ID in SAV/EAV code
  634. 0x3F, 0x10, // channel ID
  635. 0x4C, 0x37, // equalizer
  636. 0x4F, 0x03, // sync control
  637. 0x50, 0x03, // 1080p resolution
  638. 0x56, 0x02, // 144M and BT656 mode
  639. 0x5F, 0x44, // blank level
  640. 0x63, 0xF8, // filter control
  641. 0x59, 0x00, // extended register access
  642. 0x5A, 0x48, // data for extended register
  643. 0x58, 0x01, // enable extended register write
  644. 0x59, 0x33, // extended register access
  645. 0x5A, 0x23, // data for extended register
  646. 0x58, 0x01, // enable extended register write
  647. 0x51, 0xF4, // scale factor1
  648. 0x52, 0x29, // scale factor2
  649. 0x53, 0x15, // scale factor3
  650. 0x5B, 0x01, // H-scaling control
  651. 0x5E, 0x08, // enable H-scaling control
  652. 0x6A, 0x87, // H-scaling control
  653. 0x28, 0x92, // cropping
  654. 0x03, 0x80, // saturation
  655. 0x04, 0x80, // hue
  656. 0x05, 0x04, // sharpness
  657. 0x57, 0x23, // black/white stretch
  658. 0x68, 0x00, // coring
  659. 0x37, 0x33,
  660. 0x61, 0x6C,
  661. 0x8E, 0x00, // single channel output for VP
  662. 0x8F, 0x80, // 1080p mode for VP
  663. 0x8D, 0x31, // enable VP out
  664. 0x89, 0x0A, // select 144MHz for SCLK
  665. 0x88, 0x41 // enable SCLK out
  666. };
  667. const RXCHIPstaticPara FHD_1080P25_video_MIPI[] =
  668. {
  669. #if 0
  670. 0x81, 0x01, // turn on video decoder
  671. 0xA3, 0x04, //
  672. 0xDF, 0xFE, // enable HD format
  673. 0xF0, 0xC0,
  674. 0x88, 0x40, // disable SCLK1 out
  675. 0xFF, 0x00,
  676. 0x00, 0x20, // internal use*
  677. 0x06, 0x08, // internal use*
  678. 0x07, 0x63, // HD format
  679. 0x2A, 0x01, // filter control
  680. 0x3A, 0x24,
  681. 0x3F, 0x10,
  682. 0x4C, 0x37, // equalizer
  683. 0x4F, 0x03, // sync control
  684. 0x50, 0x03, // 1080p resolution
  685. 0x56, 0x02, // 144M and BT656 mode
  686. 0x5F, 0x44, // blank level
  687. 0x63, 0xF8, // filter control
  688. 0x59, 0x00, // extended register access
  689. 0x5A, 0x48, // data for extended register
  690. 0x58, 0x01, // enable extended register write
  691. 0x59, 0x33, // extended register access
  692. 0x5A, 0x23, // data for extended register
  693. 0x58, 0x01, // enable extended register write
  694. 0x51, 0xF4, // scale factor1
  695. 0x52, 0x29, // scale factor2
  696. 0x53, 0x15, // scale factor3
  697. 0x5B, 0x01, // H-scaling control
  698. 0x5E, 0x08, // enable H-scaling control
  699. 0x6A, 0x87, // H-scaling control
  700. 0x28, 0x92, // cropping
  701. 0x03, 0x80, // saturation
  702. 0x04, 0x80, // hue
  703. 0x05, 0x04, // sharpness
  704. 0x57, 0x23, // black/white stretch
  705. 0x68, 0x00, // coring
  706. 0x37, 0x33,
  707. 0x61, 0x6C,
  708. #ifdef USE_BLUE_SCREEN
  709. 0x3A, 0x24,
  710. #else
  711. 0x3A, 0x2C,
  712. 0x3B, 0x00,
  713. 0x3C, 0x80,
  714. 0x3D, 0x80,
  715. #endif
  716. 0x33, 0x10, // video in detection
  717. 0x4A, 0xA8, // video in detection
  718. 0x2E, 0x30, // force no video
  719. 0x2E, 0x00, // return to normal
  720. #ifdef USE_DVP
  721. 0x8E, 0x00,
  722. 0x8F, 0x80,
  723. 0x8D, 0x31,
  724. 0x89, 0x0A,
  725. 0x88, 0x41,
  726. #ifdef USE_BT601
  727. 0xFF, 0x00,
  728. 0x56, 0x06,
  729. 0x3A, 0x24,
  730. 0x3E, 0x32,
  731. 0x40, 0x04,
  732. 0x46, 0x23,
  733. 0x96, 0x00,
  734. 0x97, 0x0B,
  735. 0x98, 0x00,
  736. 0x9A, 0x40,
  737. 0x9B, 0xE1,
  738. 0x9C, 0x00,
  739. #endif
  740. #else
  741. 0xFF, 0x09,
  742. 0x00, 0x03,
  743. 0xFF, 0x08,
  744. 0x04, 0x03,
  745. 0x6C, 0x11,
  746. #ifdef USE_MIPI_4LANES
  747. 0x06, 0x7C,
  748. #else
  749. 0x06, 0x4C,
  750. #endif
  751. 0x21, 0x01,
  752. 0x34, 0x06,
  753. 0x35, 0x0B,
  754. 0x78, 0xC0,
  755. 0x79, 0x03,
  756. 0x6C, 0x01,
  757. 0x04, 0x00,
  758. 0x20, 0xAA,
  759. #ifdef USE_MIPI_NON_CONTINUOUS_CLOCK
  760. 0x07, 0x05,
  761. #else
  762. 0x07, 0x04,
  763. #endif
  764. 0xFF, 0x0A,
  765. 0x6C, 0x10,
  766. #endif
  767. #else
  768. //0x19, 0x0A,
  769. 0x81, 0x01, // turn on video decoder
  770. 0xDF, 0xFE, // enable HD format
  771. 0xF0, 0xC0, //
  772. 0xA3, 0x04, //
  773. 0x88, 0x40, // disable SCLK0B out
  774. 0xF6, 0x40, // disable SCLK3A out
  775. //0xD3, 0x01, // 2021-05-19
  776. // ch0
  777. 0xFF, 0x00, // switch to ch0 (default; optional)
  778. 0x33, 0x10, // 2021-05-18
  779. 0x4A, 0x08, // 2021-05-18
  780. 0x00, 0x20, // internal use*
  781. 0x06, 0x08, // internal use*
  782. 0x07, 0x63, // HD format
  783. 0x2A, 0x01, // filter control
  784. 0x3A, 0x20, // Insert Channel ID in SAV/EAV code
  785. 0x3F, 0x10, // channel ID
  786. 0x4C, 0x37, // equalizer
  787. 0x4F, 0x03, // sync control
  788. 0x50, 0x03, // 1080p resolution
  789. 0x56, 0x02, // 144M mode
  790. 0x5F, 0x44, // blank level
  791. 0x63, 0xF8, // filter control
  792. 0x59, 0x00, // extended register access
  793. 0x5A, 0x48, // data for extended register
  794. 0x58, 0x01, // enable extended register write
  795. 0x59, 0x33, // extended register access
  796. 0x5A, 0x23, // data for extended register
  797. 0x58, 0x01, // enable extended register write
  798. 0x51, 0xF4, // scale factor1
  799. 0x52, 0x29, // scale factor2
  800. 0x53, 0x15, // scale factor3
  801. 0x5B, 0x01, // H-scaling control
  802. 0x5E, 0x08, // enable H-scaling control
  803. 0x6A, 0x87, // H-scaling control
  804. 0x28, 0x92, // cropping
  805. 0x03, 0x80, // saturation
  806. 0x04, 0x80, // hue
  807. 0x05, 0x04, // sharpness
  808. 0x57, 0x23, // black/white stretch
  809. 0x68, 0x00, // coring
  810. 0x37, 0x33,
  811. 0x61, 0x6C,
  812. //0x49, 0x81,
  813. //0x33, 0x10,
  814. //0x4A, 0xa8,
  815. 0x3E, 0x35, // 2021-05-18
  816. 0x96, 0x40, // 2021-05-18
  817. 0x97, 0xE1, // 2021-05-18
  818. 0x8D, 0x31, // 2021-05-18
  819. 0x8E, 0x00, // 2021-05-18
  820. // mipi link1
  821. 0xFF, 0x09, // switch to mipi tx1
  822. 0x00, 0x03, // enable bias
  823. 0xFF, 0x08, // switch to mipi csi1
  824. 0x04, 0x03, // csi1 and tx1 reset
  825. 0x6C, 0x11, // disable ch output; turn on ch0
  826. 0x06, 0x7C,
  827. 0x21, 0x01, // enable hs clock
  828. 0x34, 0x06,
  829. 0x35, 0x0B,
  830. 0x78, 0xC0, // Y/C counts for ch0
  831. 0x79, 0x03, // Y/C counts for ch0
  832. 0x6C, 0x01, // enable ch output
  833. 0x04, 0x00, // csi1 and tx1 reset finish
  834. 0x07, 0x05, //enable non-continuous clock
  835. 0x20, 0xAA, // invert hs clock
  836. // mipi link3
  837. 0xFF, 0x0A, // switch to mipi csi3
  838. 0x6C, 0x10, // disable ch output; turn off ch0~3
  839. #endif
  840. };
  841. const RXCHIPstaticPara rn6752m_bt601_1080p_25pfs[] = {
  842. // 1080P@25 BT601
  843. // Slave address is 0x58
  844. // Register, data
  845. // if clock source(Xin) of RN6752 is 26MHz, please add these procedures marked first
  846. //0xD2, 0x85, // disable auto clock detect
  847. //0xD6, 0x37, // 27MHz default
  848. //0xD8, 0x18, // switch to 26MHz clock
  849. //delay(100), // delay 100ms
  850. 0x49,0x01,//
  851. 0x19,0x07,
  852. 0x81, 0x01, // turn on video decoder
  853. 0xA3, 0x04,
  854. 0xDF, 0xFE, // enable HD format
  855. 0xF0, 0xC0, // 144MHz output
  856. 0x88, 0x40, // disable SCLK0B out
  857. 0xF6, 0x40, // disable SCLK3A out
  858. // ch0
  859. 0xFF, 0x00, // switch to ch0 (default; optional)
  860. 0x00, 0x20, // internal use*
  861. 0x06, 0x08, // internal use*
  862. 0x07, 0x63, // HD format
  863. 0x2A, 0x01, // filter control
  864. 0x3A, 0x20, // Insert Channel ID in SAV/EAV code
  865. 0x3F, 0x10, // channel ID
  866. 0x4C, 0x37, // equalizer
  867. 0x4F, 0x03, // sync control
  868. 0x50, 0x03, // 1080p resolution
  869. 0x56, 0x06, // 144M and BT601 mode
  870. 0x5F, 0x44, // blank level
  871. 0x63, 0xF8, // filter control
  872. 0x59, 0x00, // extended register access
  873. 0x5A, 0x48, // data for extended register
  874. 0x58, 0x01, // enable extended register write
  875. 0x59, 0x33, // extended register access
  876. 0x5A, 0x23, // data for extended register
  877. 0x58, 0x01, // enable extended register write
  878. 0x51, 0xF4, // scale factor1
  879. 0x52, 0x29, // scale factor2
  880. 0x53, 0x15, // scale factor3
  881. 0x5B, 0x01, // H-scaling control
  882. 0x5E, 0x0F, // enable H-scaling control
  883. 0x6A, 0x87, // H-scaling control
  884. 0x28, 0x92, // cropping
  885. 0x01, 0xEF, // brightness
  886. 0x03, 0x80, // saturation
  887. 0x04, 0x80, // hue
  888. 0x05, 0x04, // sharpness
  889. 0x57, 0x23, // black/white stretch
  890. 0x68, 0x00, // coring
  891. 0x3A, 0x04,
  892. 0x3E, 0x32,
  893. 0x40, 0x04,
  894. 0x46, 0x23,
  895. 0x8E, 0x00, // single channel output for VP
  896. 0x8F, 0x80, // 1080p mode for VP
  897. 0x8D, 0x31, // enable VP out
  898. 0x89, 0x0A, // select 144MHz for SCLK
  899. 0x88, 0x41, // enable SCLK out // CLK inv bit1
  900. //0XD3,0X00,//channel 0 0x00 channel 1 0X01
  901. 0x96, 0x00, // select AVID & VBLK as status indicator
  902. 0x97, 0x0B, // enable status indicator out on AVID,VBLK & VSYNC
  903. 0x98, 0x00, // video timing pin status
  904. 0x9A, 0x40, // select AVID & VBLK as status indicator
  905. 0x9B, 0xE1, // enable status indicator out on HSYNC
  906. 0x9C, 0x00 // video timing pin status
  907. };
  908. static void rn6752_config(struct i2c_adapter *adap)
  909. {
  910. int i;
  911. //int val;
  912. #if VIDEO_IN_FORMAT == VIN_CVBS_PAL
  913. for (i = 0; i < sizeof(rn6752m_cvbs_pal_staticPara) / sizeof(RXCHIPstaticPara); i++)
  914. {
  915. rn6752_i2c_write(adap, rn6752m_cvbs_pal_staticPara[i].addr,
  916. rn6752m_cvbs_pal_staticPara[i].dat);
  917. }
  918. #elif VIDEO_IN_FORMAT == VIN_CVBS_NTSC
  919. #ifdef VIDEO_DECODER_MIPI
  920. for (i = 0; i < sizeof(rn6752m_cvbs_ntsc_Mipi_staticPara) / sizeof(RXCHIPstaticPara); i++)
  921. {
  922. rn6752_i2c_write(adap, rn6752m_cvbs_ntsc_Mipi_staticPara[i].addr,
  923. rn6752m_cvbs_ntsc_Mipi_staticPara[i].dat);
  924. }
  925. #else
  926. for (i = 0; i < sizeof(rn6752m_cvbs_ntsc_staticPara) / sizeof(RXCHIPstaticPara); i++)
  927. {
  928. rn6752_i2c_write(adap, rn6752m_cvbs_ntsc_staticPara[i].addr,
  929. rn6752m_cvbs_ntsc_staticPara[i].dat);
  930. }
  931. #endif
  932. #elif VIDEO_IN_FORMAT == VIN_AHD_720P_25
  933. #ifdef VIDEO_DECODER_MIPI
  934. for (i = 0; i < sizeof(HD_720P25_video_mipi) / sizeof(RXCHIPstaticPara); i++)
  935. {
  936. rn6752_i2c_write(adap, HD_720P25_video_mipi[i].addr,
  937. HD_720P25_video_mipi[i].dat);
  938. }
  939. #else
  940. for (i = 0; i < sizeof(rn6752m_720p_25_staticPara) / sizeof(RXCHIPstaticPara); i++)
  941. {
  942. rn6752_i2c_write(adap, rn6752m_720p_25_staticPara[i].addr,
  943. rn6752m_720p_25_staticPara[i].dat);
  944. }
  945. #endif
  946. #elif VIDEO_IN_FORMAT == VIN_AHD_1080P_25
  947. #ifdef VIDEO_DECODER_MIPI
  948. for (i = 0; i < sizeof(FHD_1080P25_video_MIPI) / sizeof(RXCHIPstaticPara); i++)
  949. {
  950. rn6752_i2c_write(adap, FHD_1080P25_video_MIPI[i].addr,
  951. FHD_1080P25_video_MIPI[i].dat);
  952. }
  953. #else
  954. #ifdef DECODER_ITU601OUT
  955. for (i = 0; i < sizeof(rn6752m_bt601_1080p_25pfs) / sizeof(RXCHIPstaticPara); i++)
  956. {
  957. rn6752_i2c_write(adap, rn6752m_bt601_1080p_25pfs[i].addr,
  958. rn6752m_bt601_1080p_25pfs[i].dat);
  959. }
  960. #else
  961. for (i = 0; i < sizeof(rn6752m_bt656_1080p_25pfs) / sizeof(RXCHIPstaticPara); i++)
  962. {
  963. rn6752_i2c_write(adap, rn6752m_bt656_1080p_25pfs[i].addr,
  964. rn6752m_bt656_1080p_25pfs[i].dat);
  965. }
  966. #endif
  967. #endif
  968. #endif
  969. }
  970. int rn6752_init(void)
  971. {
  972. struct i2c_adapter *adap = NULL;
  973. rn6752_reset();
  974. if (!(adap = i2c_open("i2c0"))) {
  975. printf("open i2c0 fail.\n");
  976. return -1;
  977. }
  978. rn6752_config(adap);
  979. return 0;
  980. }
  981. #endif