1 #ifdef CONFIG_MTK_INTERNAL_HDMI_SUPPORT
6 static unsigned int pdMpegInfoReg
[] =
8 0x19c, 0x00000001,//version
9 0x1A0, 0x00000085,//type
10 0x1A4, 0x0000000a,//length
11 0x188, 0x000000dE,//check sum
24 static unsigned int pdMpegInfoReg2
[] =
26 0x19c, 0x00000001,//version
27 0x1A0, 0x00000085,//type
28 0x1A4, 0x0000000a,//length
29 0x188, 0x000000d4,//check sum
44 static unsigned int pdSpdInfoReg
[] =
46 0x19c, 0x00000001,//version
47 0x1A0, 0x00000083,//type
48 0x1A4, 0x00000019,//length, 25 bytes
49 0x188, 0x000000d1,//check sum
77 static unsigned int pdSpdInfoReg2
[] =
79 0x19c, 0x00000001,//version
80 0x1A0, 0x00000083,//type
81 0x1A4, 0x00000019,//length, 25 bytes
82 0x188, 0x000000cf,//check sum
113 static unsigned int pdAudioInfoReg
[] =
115 0x19c, 0x00000001,//version
116 0x1A0, 0x00000084,//type
117 0x1A4, 0x0000000a,//length
118 0x188, 0x0000006a,//check sum
131 static unsigned int pdAudioInfoReg2
[] =
133 0x19c, 0x00000001,//version
134 0x1A0, 0x00000084,//type
135 0x1A4, 0x0000000a,//length
136 0x188, 0x00000055,//check sum
151 static unsigned int pdVendorSpecInfoReg
[] =
153 0x19c, 0x00000001,//version
154 0x1A0, 0x00000081,//type
155 0x1A4, 0x0000000a,//length
156 0x188, 0x000000E2,//check sum
169 static unsigned int pdVendorSpecInfoReg2
[] =
171 0x19c, 0x00000001,//version
172 0x1A0, 0x00000081,//type
173 0x1A4, 0x0000000a,//length
174 0x188, 0x000000d2,//check sum
189 static unsigned int pdGenericInfoReg
[] =
191 0x19c, 0x00000001,//version
192 0x1A0, 0x00000087,//type
193 0x1A4, 0x0000000a,//length
194 0x188, 0x000000DC,//check sum
206 static unsigned int pdGenericInfoReg2
[] =
208 0x19c, 0x00000001,//version
209 0x1A0, 0x00000087,//type
210 0x1A4, 0x0000000a,//length
211 0x188, 0x000000BA,//check sum
225 static unsigned int pdACPInfoReg
[] =
227 0x19c, 0x00000002,//version, acp type
228 0x1A0, 0x00000004,//type
229 0x1A4, 0x00000000,//length
230 0x188, 0x000000dE,//check sum, PB0
238 static unsigned int pdACPInfoReg2
[] =
240 0x19c, 0x00000002,//version, acp type
241 0x1A0, 0x00000004,//type
242 0x1A4, 0x00000000,//length
243 0x188, 0x000000dE,//check sum, PB0
253 static unsigned int pdISRC1InfoReg
[] =
255 0x19c, 0x00000002,//version, ISRC status
256 0x1A0, 0x00000005,//type
257 0x1A4, 0x00000000,//length
258 0x188, 0x000000dE,//check sum, PB0
265 static unsigned int pdISRC1InfoReg2
[] =
267 0x19c, 0x00000002,//version, ISRC status
268 0x1A0, 0x00000005,//type
269 0x1A4, 0x00000000,//length
270 0x188, 0x000000d0,//check sum, PB0
279 static unsigned int pdISRC2InfoReg
[] =
281 0x19c, 0x00000000,//version, ISRC status
282 0x1A0, 0x00000006,//type
283 0x1A4, 0x00000000,//length
284 0x188, 0x000000dE,//check sum, PB0
291 static unsigned int pdISRC2InfoReg2
[] =
293 0x19c, 0x00000000,//version, ISRC status
294 0x1A0, 0x00000006,//type
295 0x1A4, 0x00000000,//length
296 0x188, 0x000000d6,//check sum, PB0
305 static unsigned int pdGamutInfoReg
[] =
307 0x19c, 0x00000080,//HB1 version
308 0x1A0, 0x0000000a,//HB0 type
309 0x1A4, 0x00000030,//HB2
310 0x188, 0x00000000//PB0
313 static unsigned int pdGamutInfoReg2
[] =
315 0x19c, 0x00000080,//HB1 version
316 0x1A0, 0x0000000a,//HB0 type
317 0x1A4, 0x00000030,//HB2
318 0x188, 0x00000001//PB0
322 void hdmi_InfoframeSetting (unsigned char i1typemode
, unsigned char i1typeselect
)
327 if((i1typemode
==0xff)&&(i1typeselect
==0xff))
329 printk("Arg1: Infoframe output type\n");
330 printk("1: AVi, 2: Mpeg, 3: SPD\n");
331 printk("4: Vendor, 5: Audio, 6: ACP\n");
332 printk("7: ISRC1, 8: ISRC2, 9:GENERIC \n");
333 printk("10:GAMUT \n");
335 printk("Arg2: Infoframe data select\n");
336 printk("0: old(default), 1: new;\n");
340 if(i1typeselect
== 0)
346 vSendAVIInfoFrame(HDMI_VIDEO_1280x720p_50Hz
, 1);
351 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<4));
352 for(u4Ind
=0;u4Ind
< (sizeof(pdMpegInfoReg
)/4) ;u4Ind
+=2)
353 vWriteByteHdmiGRL(pdMpegInfoReg
[u4Ind
], pdMpegInfoReg
[u4Ind
+1]);
354 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<4),(1<<4));
359 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<3));
360 for(u4Ind
=0;u4Ind
< (sizeof(pdSpdInfoReg
)/4) ;u4Ind
+=2)
361 vWriteByteHdmiGRL(pdSpdInfoReg
[u4Ind
], pdSpdInfoReg
[u4Ind
+1]);
362 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<3),(1<<3));
368 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<0));
369 for(u4Ind
=0;u4Ind
< (sizeof(pdVendorSpecInfoReg
)/4) ;u4Ind
+=2)
370 vWriteByteHdmiGRL(pdVendorSpecInfoReg
[u4Ind
], pdVendorSpecInfoReg
[u4Ind
+1]);
371 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<0),(1<<0));
376 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<5));
377 for(u4Ind
=0;u4Ind
< (sizeof(pdAudioInfoReg
)/4) ;u4Ind
+=2)
378 vWriteByteHdmiGRL(pdAudioInfoReg
[u4Ind
], pdAudioInfoReg
[u4Ind
+1]);
379 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<5),(1<<5));
385 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<1));
386 for(u4Ind
=0;u4Ind
< (sizeof(pdACPInfoReg
)/4) ;u4Ind
+=2)
387 vWriteByteHdmiGRL(pdACPInfoReg
[u4Ind
], pdACPInfoReg
[u4Ind
+1]);
389 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
390 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
391 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<1),(1<<1));
396 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<2));
397 for(u4Ind
=0;u4Ind
< (sizeof(pdISRC1InfoReg
)/4) ;u4Ind
+=2)
398 vWriteByteHdmiGRL(pdISRC1InfoReg
[u4Ind
], pdISRC1InfoReg
[u4Ind
+1]);
400 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
401 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
403 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<2),(1<<2));
408 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<3));
409 for(u4Ind
=0;u4Ind
< (sizeof(pdISRC2InfoReg
)/4) ;u4Ind
+=2)
410 vWriteByteHdmiGRL(pdISRC2InfoReg
[u4Ind
], pdISRC2InfoReg
[u4Ind
+1]);
412 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
413 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
415 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<3),(1<<3));
421 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<2));
422 for(u4Ind
=0;u4Ind
< (sizeof(pdGenericInfoReg
)/4) ;u4Ind
+=2)
423 vWriteByteHdmiGRL(pdGenericInfoReg
[u4Ind
], pdGenericInfoReg
[u4Ind
+1]);
425 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<2),(1<<2));
430 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<4));
431 for(u4Ind
=0;u4Ind
< (sizeof(pdGamutInfoReg
)/4) ;u4Ind
+=2)
432 vWriteByteHdmiGRL(pdGamutInfoReg
[u4Ind
], pdGamutInfoReg
[u4Ind
+1]);
434 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1)
435 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
437 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<4),(1<<4));
439 vSendAVIInfoFrame(HDMI_VIDEO_720x480p_60Hz
, HDMI_XV_YCC
);
445 bData
=bReadByteHdmiGRL(GRL_CTRL
);
446 bData
&= ~(0x1 << 7) ;
447 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
449 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
451 bData
|= (0x1 << 7) ;
453 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
457 bData
=bReadByteHdmiGRL(GRL_CFG4
);
458 bData
|= (0x1 << 5);//disable original mute
459 bData
&= ~(0x1 << 6) ; //disable
460 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
462 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
464 bData
&= ~(0x1 << 5);//disable original mute
465 bData
|= (0x1 << 6) ; //disable
466 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
471 bData
=bReadByteHdmiGRL(GRL_CFG4
);
472 bData
&=~(0x1 << 5);//enable original mute
473 bData
&= ~(0x1 << 6); //disable
474 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
476 bData
=bReadByteHdmiGRL(GRL_CTRL
);
477 bData
&= ~(0x1 << 7) ;
478 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
480 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
482 bData
|= (0x1 << 7) ;
484 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
486 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
488 bData
&= ~(0x1 << 7) ;
489 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
493 bData
=bReadByteHdmiGRL(GRL_CFG4
);
494 bData
|= (0x1 << 6); //disable
495 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
496 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
497 bData
&= ~(0x1 << 6);
498 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
502 //vCMDHwNCTSOnOff(FALSE);// change to software NCTS;
503 // vCMDHDMI_NCTS(0x03, 0x12);
517 vSendAVIInfoFrame(HDMI_VIDEO_1280x720p_50Hz
, 2);
522 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<4));
523 for(u4Ind
=0;u4Ind
< (sizeof(pdMpegInfoReg2
)/4) ;u4Ind
+=2)
524 vWriteByteHdmiGRL(pdMpegInfoReg2
[u4Ind
], pdMpegInfoReg2
[u4Ind
+1]);
525 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<4),(1<<4));
530 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<3));
531 for(u4Ind
=0;u4Ind
< (sizeof(pdSpdInfoReg2
)/4) ;u4Ind
+=2)
532 vWriteByteHdmiGRL(pdSpdInfoReg2
[u4Ind
], pdSpdInfoReg2
[u4Ind
+1]);
533 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<3),(1<<3));
539 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<0));
540 for(u4Ind
=0;u4Ind
< (sizeof(pdVendorSpecInfoReg2
)/4) ;u4Ind
+=2)
541 vWriteByteHdmiGRL(pdVendorSpecInfoReg2
[u4Ind
], pdVendorSpecInfoReg2
[u4Ind
+1]);
542 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<0),(1<<0));
547 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<5));
548 for(u4Ind
=0;u4Ind
< (sizeof(pdAudioInfoReg2
)/4) ;u4Ind
+=2)
549 vWriteByteHdmiGRL(pdAudioInfoReg2
[u4Ind
], pdAudioInfoReg2
[u4Ind
+1]);
550 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<5),(1<<5));
557 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<1));
558 for(u4Ind
=0;u4Ind
< (sizeof(pdACPInfoReg2
)/4) ;u4Ind
+=2)
559 vWriteByteHdmiGRL(pdACPInfoReg2
[u4Ind
], pdACPInfoReg2
[u4Ind
+1]);
561 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
562 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
563 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<1),(1<<1));
568 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<2));
569 for(u4Ind
=0;u4Ind
< (sizeof(pdISRC1InfoReg2
)/4) ;u4Ind
+=2)
570 vWriteByteHdmiGRL(pdISRC1InfoReg2
[u4Ind
], pdISRC1InfoReg2
[u4Ind
+1]);
572 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
573 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
575 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<2),(1<<2));
580 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<3));
581 for(u4Ind
=0;u4Ind
< (sizeof(pdISRC2InfoReg2
)/4) ;u4Ind
+=2)
582 vWriteByteHdmiGRL(pdISRC2InfoReg2
[u4Ind
], pdISRC2InfoReg2
[u4Ind
+1]);
584 for(u4Ind
=0;u4Ind
< 23 ;u4Ind
++)
585 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
587 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<3),(1<<3));
593 vWriteHdmiGRLMsk(GRL_CTRL
,0,(1<<2));
594 for(u4Ind
=0;u4Ind
< (sizeof(pdGenericInfoReg2
)/4) ;u4Ind
+=2)
595 vWriteByteHdmiGRL(pdGenericInfoReg2
[u4Ind
], pdGenericInfoReg2
[u4Ind
+1]);
597 vWriteHdmiGRLMsk(GRL_CTRL
,(1<<2),(1<<2));
602 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,0,(1<<4));
603 for(u4Ind
=0;u4Ind
< (sizeof(pdGamutInfoReg2
)/4) ;u4Ind
+=2)
604 vWriteByteHdmiGRL(pdGamutInfoReg2
[u4Ind
], pdGamutInfoReg2
[u4Ind
+1]);
606 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1)
607 vWriteByteHdmiGRL(GRL_IFM_PORT
, 0);
609 vWriteHdmiGRLMsk(GRL_ACP_ISRC_CTRL
,(1<<4),(1<<4));
611 vSendAVIInfoFrame(HDMI_VIDEO_720x480p_60Hz
, HDMI_XV_YCC
);
617 bData
=bReadByteHdmiGRL(GRL_CTRL
);
618 bData
&= ~(0x1 << 7) ;
619 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
621 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
623 bData
|= (0x1 << 7) ;
625 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
629 bData
=bReadByteHdmiGRL(GRL_CFG4
);
630 bData
|= (0x1 << 5);//disable original mute
631 bData
&= ~(0x1 << 6) ; //disable
632 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
634 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
636 bData
&= ~(0x1 << 5);//disable original mute
637 bData
|= (0x1 << 6) ; //disable
638 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
643 bData
=bReadByteHdmiGRL(GRL_CFG4
);
644 bData
&=~(0x1 << 5);//enable original mute
645 bData
&= ~(0x1 << 6); //disable
646 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
648 bData
=bReadByteHdmiGRL(GRL_CTRL
);
649 bData
&= ~(0x1 << 7) ;
650 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
652 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
654 bData
|= (0x1 << 7) ;
656 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
658 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
660 bData
&= ~(0x1 << 7) ;
661 vWriteByteHdmiGRL(GRL_CTRL
, bData
);
664 bData
=bReadByteHdmiGRL(GRL_CFG4
);
666 bData
|= (0x1 << 6); //disable
667 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
668 for(u4Ind
=0;u4Ind
< 27 ;u4Ind
+=1);
669 bData
&= ~(0x1 << 6);
670 vWriteByteHdmiGRL(GRL_CFG4
, bData
);
674 //vCMDHwNCTSOnOff(FALSE);// change to software NCTS;
675 // vCMDHDMI_NCTS(0x03, 0x12);