Example #1
0
int bsp_hdmi_audio(struct audio_para *audio)
{
	unsigned int i;
	unsigned int n;
	unsigned id = get_vid(glb_video.vic);

	hdmi_write(0xA049, (audio->ch_num > 2) ? 0xf1 : 0xf0);

	for(i = 0; i < 64; i += 2)
	{
		if(audio->ca == ca_table[i])
		{
			hdmi_write(0x204B, ~ca_table[i+1]);
			break;
		}
	}
	hdmi_write(0xA04A, 0x00);
	hdmi_write(0xA04B, 0x30);
	hdmi_write(0x6048, 0x00);
	hdmi_write(0x6049, 0x01);
	hdmi_write(0xE048, 0x42);
	hdmi_write(0xE049, 0x86);
	hdmi_write(0x604A, 0x31);
	hdmi_write(0x604B, 0x75);
	hdmi_write(0xE04A, 0x00 | 0x01);
	for(i = 0; i < 10; i += 1)
	{
		if(audio->sample_rate == sf[i].sf)
		{
			hdmi_write(0xE04A, 0x00 | sf[i].cs_sf);
			break;
		}
	}
	hdmi_write(0xE04B, 0x00 |
						(audio->sample_bit == 16) ? 0x02 : ((audio->sample_bit == 24) ? 0xb : 0x0) );


	hdmi_write(0x0251, audio->sample_bit);



	n = 6272;
	//cts = 0;
	for(i = 0; i < 21; i += 3)
	{
		if(audio->sample_rate == n_table[i])
		{
			if(ptbl[id].para[1] == 1)
				n = n_table[i+1];
			else
				n = n_table[i+2];

			//cts = (n / 128) * (glb_video.tmds_clk / 100) / (audio->sample_rate / 100);
			break;
		}
	}

	hdmi_write(0x0A40, n);
	hdmi_write(0x0A41, n >> 8);
	hdmi_write(0x8A40, n >> 16);
	hdmi_write(0x0A43, 0x00);
	hdmi_write(0x8A42, 0x04);
	hdmi_write(0xA049, (audio->ch_num > 2) ? 0x01 : 0x00);
	hdmi_write(0x2043, audio->ch_num * 16);
	hdmi_write(0xA042, 0x00);
	hdmi_write(0xA043, audio->ca);
	hdmi_write(0x6040, 0x00);

	if(audio->type == PCM)
	{
		hdmi_write(0x8251, 0x00);
	}
	else if((audio->type == DTS_HD) || (audio->type == DDP))
	{
		hdmi_write(0x8251, 0x03);
		hdmi_write(0x0251, 0x15);
		hdmi_write(0xA043, 0);
	}
	else
	{
		hdmi_write(0x8251, 0x02);
		hdmi_write(0x0251, 0x15);
		hdmi_write(0xA043, 0);
	}

	hdmi_write(0x0250, 0x00);
	hdmi_write(0x0081, 0x08);
	hdmi_write(0x8080, 0xf7);
	hdmi_udelay(100);
	hdmi_write(0x0250, 0xaf);
	hdmi_udelay(100);
	hdmi_write(0x0081, 0x00);

	return 0;
}
Example #2
0
int bsp_hdmi_video(struct video_para *video)
{
	unsigned int id = get_vid(video->vic);
	glb_video.vic = video->vic;

	switch(glb_video.vic)
	{
		case 2:
		case 4:
		case 6:
		case 17:
		case 19:
		case 21:
			video->csc = BT601;
			break;
		default:
			video->csc = BT709;
			break;
	}
	if(hdmi_phy_set(video)!=0)
		return -1;

	bsp_hdmi_inner_init();

	hdmi_write(0x0840, 0x01);
	hdmi_write(0x4845, 0x00);
	hdmi_write(0x0040, ptbl[id].para[3] |	0x10);
	hdmi_write(0x10001, ( (ptbl[id].para[3] < 96) ? 0x03 : 0x00 ) );
	hdmi_write(0x8040, ptbl[id].para[4]);
	hdmi_write(0x4043, ptbl[id].para[5]);
	hdmi_write(0x8042, ptbl[id].para[6]);
	hdmi_write(0x0042, ptbl[id].para[7]);
	hdmi_write(0x4042, ptbl[id].para[8]);
	hdmi_write(0x4041, ptbl[id].para[9]);
	hdmi_write(0xC041, ptbl[id].para[10]);
	hdmi_write(0x0041, ptbl[id].para[11]);
	hdmi_write(0x8041, ptbl[id].para[12]);
	hdmi_write(0x4040, ptbl[id].para[13]);
	hdmi_write(0xC040, ptbl[id].para[14]);
	hdmi_write(0x0043, ptbl[id].para[15]);
	hdmi_write(0x8043, ptbl[id].para[16]);
	hdmi_write(0x0045, 0x0c);
	hdmi_write(0x8044, 0x20);
	hdmi_write(0x8045, 0x01);
	hdmi_write(0x0046, 0x0b);
	hdmi_write(0x0047, 0x16);
	hdmi_write(0x8046, 0x21);
	hdmi_write(0x3048, ptbl[id].para[2] ? 0x21 : 0x10);
	hdmi_write(0x0401, ptbl[id].para[2] ? 0x41 : 0x40);
	hdmi_write(0x8400, 0x07);
	hdmi_write(0x8401, 0x00);
	hdmi_write(0x0402, 0x47);
	hdmi_write(0x0800, 0x01);
	hdmi_write(0x0801, 0x07);
	hdmi_write(0x8800, 0x00);
	hdmi_write(0x8801, 0x00);
	hdmi_write(0x0802, 0x00);
	hdmi_write(0x0803, 0x00);
	hdmi_write(0x8802, 0x00);
	hdmi_write(0x8803, 0x00);

	if(video->is_hdmi)
	{
		hdmi_write(0xB045, 0x08);
		hdmi_write(0x2045, 0x00);
		hdmi_write(0x2044, 0x0c);
		hdmi_write(0x6041, 0x03);
		hdmi_write(0xA044, ((ptbl[id].para[0]&0x100) == 0x100) ? 0x20 : ( ((ptbl[id].para[0]&0x80) == 0x80) ? 0x40 : 0x00) );
		hdmi_write(0xA045, ((ptbl[id].para[0]&0x100) == 0x100) ? (ptbl[id].para[0]&0x7f) : 0x00);
		hdmi_write(0x2046, 0x00);
		hdmi_write(0x3046, 0x01);
		hdmi_write(0x3047, 0x11);
		hdmi_write(0x4044, 0x00);
		hdmi_write(0x0052, 0x00);
		hdmi_write(0x8051, 0x11);
		hdmi_write(0x10010,0x45);
		hdmi_write(0x10011,0x45);
		hdmi_write(0x10012,0x52);
		hdmi_write(0x10013,0x54);
		hdmi_write(0x0040, hdmi_read(0x0040) | 0x08 );
		hdmi_write(0x10010,0x52);
		hdmi_write(0x10011,0x54);
		hdmi_write(0x10012,0x41);
		hdmi_write(0x10013,0x57);
		hdmi_write(0x4045, video->is_yuv ? 0x02 : 0x00);
		if(ptbl[id].para[17] == 0)
			hdmi_write(0xC044, (video->csc << 6) | 0x18);
		else if(ptbl[id].para[17] == 1)
			hdmi_write(0xC044, (video->csc << 6) | 0x28);
		else
			hdmi_write(0xC044, (video->csc << 6) | 0x08);

		if((ptbl[id].para[0] == 32) ||
				(ptbl[id].para[0] == 160)||
		 		(ptbl[id].para[0] == 257)||
		 		(ptbl[id].para[0] == 258))
		{
			hdmi_write(0xC045, 0x01);
		}
		else
		{
			hdmi_write(0xC045, 0x00);
		}

		hdmi_write(0x4046, ptbl[id].para[0]&0x7f);
	}

	if(video->is_hcts)
	{
		hdmi_write(0x00C0, video->is_hdmi ? 0x91 : 0x90 );
		hdmi_write(0x00C1, 0x05);
		hdmi_write(0x40C1, (ptbl[id].para[3] < 96) ? 0x10 : 0x1a);
		hdmi_write(0x80C2, 0xff);
		hdmi_write(0x40C0, 0xfd);
		hdmi_write(0xC0C0, 0x40);
		hdmi_write(0x00C1, 0x04);
		hdmi_write(0x10010,0x45);
		hdmi_write(0x10011,0x45);
		hdmi_write(0x10012,0x52);
		hdmi_write(0x10013,0x54);
		hdmi_write(0x0040, hdmi_read(0x0040) | 0x80 );
		hdmi_write(0x00C0, video->is_hdmi ? 0x95 : 0x94 );
		hdmi_write(0x10010,0x52);
		hdmi_write(0x10011,0x54);
		hdmi_write(0x10012,0x41);
		hdmi_write(0x10013,0x57);
	}

	hdmi_write(0x0082, 0x00);
	hdmi_write(0x0081, 0x00);

	hdmi_write(0x0840, 0x00);

	if(video->is_hcts)
	{

	}

	return 0;
}
Example #3
0
static int hdmi_phy_set(struct video_para *video)
{
	unsigned int id;
	id = get_vid(video->vic);

	switch(ptbl[id].para[1])
	{
		case 1:
			hdmi_write(0x2241, 0x06);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x15);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x0f);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x10);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x19);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x02);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x0e);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x09);
			hdmi_write(0xA240, 0x80);
			hdmi_write(0xA241, 0x2b);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			break;
		case 2:
			hdmi_write(0x2241, 0x06);
			hdmi_write(0xA240, 0x04);
			hdmi_write(0xA241, 0xa0);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x15);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x0a);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x10);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x19);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x02);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x0e);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x21);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x09);
			hdmi_write(0xA240, 0x80);
			hdmi_write(0xA241, 0x29);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			break;
		case 4:
			hdmi_write(0x2241, 0x06);
			hdmi_write(0xA240, 0x05);
			hdmi_write(0xA241, 0x40);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x15);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x05);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x10);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x19);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x07);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x0e);
			hdmi_write(0xA240, 0x02);
			hdmi_write(0xA241, 0xb5);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x09);
			hdmi_write(0xA240, 0x80);
			hdmi_write(0xA241, 0x09);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			break;
		case 11:
			hdmi_write(0x2241, 0x06);
			hdmi_write(0xA240, 0x01);
			hdmi_write(0xA241, ptbl[id].para[2] ? 0xe3 : 0xe0);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x15);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x00);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x10);
			hdmi_write(0xA240, 0x08);
			hdmi_write(0xA241, 0xda);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x19);
			hdmi_write(0xA240, 0x00);
			hdmi_write(0xA241, 0x07);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x0E);
			hdmi_write(0xA240, 0x03);
			hdmi_write(0xA241, 0x18);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			hdmi_write(0x2241, 0x09);
			hdmi_write(0xA240, 0x80);
			hdmi_write(0xA241, 0x09);
			hdmi_write(0xA242, 0x10);
			hdmi_udelay(2000);
			break;
		default:
			return -1;
	}
	hdmi_write(0x2241, 0x1e);
	hdmi_write(0xA240, 0x00);
	hdmi_write(0xA241, 0x00);
	hdmi_write(0xA242, 0x10);
	hdmi_udelay(2000);
	hdmi_write(0x2241, 0x13);
	hdmi_write(0xA240, 0x00);
	hdmi_write(0xA241, 0x00);
	hdmi_write(0xA242, 0x10);
	hdmi_udelay(2000);
	hdmi_write(0x2241, 0x17);
	hdmi_write(0xA240, 0x00);
	hdmi_write(0xA241, 0x00);
	hdmi_write(0xA242, 0x10);
	hdmi_udelay(2000);
	hdmi_write(0x0240, 0x0e);
	return 0;
}
Example #4
0
static int hdmi_phy_set(struct video_para *video)
{
	unsigned int id;
	unsigned int tmp;

	id = get_vid(video->vic);
	hdmi_writel(0x10020,hdmi_readl(0x10020)&(~0xf000));
	switch(ptbl[id].para[1])
	{
		case 1:
			hdmi_writel(0x1002c,0x39dc5fc0);
			hdmi_writel(0x10030,0x800843c0);
			hdmi_udelay(10000);
			hdmi_writel(0x10034,0x00000001);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|0x02000000);
			hdmi_udelay(100000);
			tmp = hdmi_readl(0x10038);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|0xC0000000);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|((tmp&0x1f800)>>11));
			hdmi_writel(0x10020,0x00FFFF7F);
			hdmi_writel(0x10024,0x80639000);
			hdmi_writel(0x10028,0x0F8246B5);
			break;
		case 2:
			hdmi_writel(0x1002c,0x39dc5040);
			hdmi_writel(0x10030,0x80084381);
			hdmi_udelay(10000);
			hdmi_writel(0x10034,0x00000001);
			hdmi_writel(0x1002c,0x3bdc5040);
			hdmi_udelay(100000);
			tmp = hdmi_readl(0x10038);
			hdmi_writel(0x1002c,0xfbdc5040);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|((tmp&0x1f800)>>11));
			hdmi_writel(0x10020,0x00FFFF7F);
			hdmi_writel(0x10024,0x80639000);
			hdmi_writel(0x10028,0x0F81C485);
			break;
		case 4:
			hdmi_writel(0x1002c,0x39dc5040);
			hdmi_writel(0x10030,0x80084343);
			hdmi_udelay(100000);
			hdmi_writel(0x10034,0x00000001);
			hdmi_writel(0x1002c,0x3bdc5040);
			hdmi_udelay(50000);
			tmp = hdmi_readl(0x10038);
			hdmi_writel(0x1002c,0xfbdc5040);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|((tmp&0x1f800)>>11));
			hdmi_writel(0x10020,0x00FFFF7F);
			hdmi_writel(0x10024,0x80639000);
			hdmi_writel(0x10028,0x0F81C405);
			break;
		case 11:
			hdmi_writel(0x1002c,0x39dc5040);
			hdmi_writel(0x10030,0x8008430a);
			hdmi_udelay(10000);
			hdmi_writel(0x10034,0x00000001);
			hdmi_writel(0x1002c,0x3bdc5040);
			hdmi_udelay(100000);
			tmp = hdmi_readl(0x10038);
			hdmi_writel(0x1002c,0xfbdc5040);
			hdmi_writel(0x1002c,hdmi_readl(0x1002c)|((tmp&0x1f800)>>11));
			hdmi_writel(0x10020,0x00FFFF7F);
			hdmi_writel(0x10024,0x80639000);
			hdmi_writel(0x10028,0x0F81C405);
			break;
		default:
			return -1;
	}
	return 0;
}
int bsp_hdmi_video(struct video_para *video)
{
	unsigned id = get_vid(video->vic);
	glb_video.vic = video->vic;

	bsp_hdmi_init();
	
	hdmi_write(0x0840, 0x01);
	hdmi_write(0x4845, 0x00);
	hdmi_write(0x0040, ptbl[id].para[3] |	0x10);
	hdmi_write(0x10001, ( (ptbl[id].para[3] < 96) ? 0x03 : 0x00 ) );
	hdmi_write(0x8040, ptbl[id].para[4]);
	hdmi_write(0x4043, ptbl[id].para[5]);
	hdmi_write(0x8042, ptbl[id].para[6]);
	hdmi_write(0x0042, ptbl[id].para[7]);
	hdmi_write(0x4042, ptbl[id].para[8]);
	hdmi_write(0x4041, ptbl[id].para[9]);
	hdmi_write(0xC041, ptbl[id].para[10]);
	hdmi_write(0x0041, ptbl[id].para[11]);
	hdmi_write(0x8041, ptbl[id].para[12]);
	hdmi_write(0x4040, ptbl[id].para[13]);
	hdmi_write(0xC040, ptbl[id].para[14]);
	hdmi_write(0x0043, ptbl[id].para[15]);
	hdmi_write(0x8043, ptbl[id].para[16]);
	hdmi_write(0x0045, 0x0c);
	hdmi_write(0x8044, 0x20);
	hdmi_write(0x8045, 0x01);
	hdmi_write(0x0046, 0x0b);
	hdmi_write(0x0047, 0x16);
	hdmi_write(0x8046, 0x21);
	hdmi_write(0x3048, ptbl[id].para[2] ? 0x21 : 0x10);
	hdmi_write(0x0401, ptbl[id].para[2] ? 0x41 : 0x40);
	hdmi_write(0x8400, 0x07);
	hdmi_write(0x8401, 0x00);
	hdmi_write(0x0402, 0x47);
	hdmi_write(0x0800, video->is_yuv ? 0x09 : 0x01);
	hdmi_write(0x0801, 0x07);
	hdmi_write(0x8800, 0x00);
	hdmi_write(0x8801, 0x00);
	hdmi_write(0x0802, 0x00);
	hdmi_write(0x0803, 0x00);
	hdmi_write(0x8802, 0x00);
	hdmi_write(0x8803, 0x00);

	if(video->is_hdmi)
	{
		hdmi_write(0xB045, 0x08);
		hdmi_write(0x2045, 0x00);
		hdmi_write(0x2044, 0x0c);
		hdmi_write(0x6041, 0x03);
		hdmi_write(0xA044, ((ptbl[id].para[0]&0x100) == 0x100) ? 0x20 : ( ((ptbl[id].para[0]&0x80) == 0x80) ? 0x40 : 0x00) );
		hdmi_write(0xA045, ((ptbl[id].para[0]&0x100) == 0x100) ? (ptbl[id].para[0]&0x7f) : 0x00);
		hdmi_write(0x2046, 0x00);
		hdmi_write(0x3046, 0x01);
		hdmi_write(0x3047, 0x11);
		hdmi_write(0x4044, 0x00);
		hdmi_write(0x0052, 0x00);
		hdmi_write(0x8051, 0x11);
		hdmi_write(0x10010,0x45);
		hdmi_write(0x10011,0x45);
		hdmi_write(0x10012,0x52);
		hdmi_write(0x10013,0x54);
		hdmi_write(0x0040, hdmi_read(0x0040) | 0x08 );
		hdmi_write(0x10010,0x52);
		hdmi_write(0x10011,0x54);
		hdmi_write(0x10012,0x41);
		hdmi_write(0x10013,0x57);
		hdmi_write(0x4045, video->is_yuv ? 0x02 : 0x00);
		if(ptbl[id].para[16] == 0)
			hdmi_write(0xC044, (video->csc << 6) | 0x18);
		else if(ptbl[id].para[16] == 1)
			hdmi_write(0xC044, (video->csc << 6) | 0x28);
		else
			hdmi_write(0xC044, (video->csc << 6) | 0x08);

		hdmi_write(0xC045, 0x00);
		hdmi_write(0x4046, ptbl[id].para[0]&0x7f);
	}

	if(video->is_hcts)
	{
		hdmi_write(0x10010,0x45);
		hdmi_write(0x10011,0x45);
		hdmi_write(0x10012,0x52);
		hdmi_write(0x10013,0x54);
		hdmi_write(0x0040, hdmi_read(0x0040) | 0x80 );
		hdmi_write(0x10010,0x52);
		hdmi_write(0x10011,0x54);
		hdmi_write(0x10012,0x41);
		hdmi_write(0x10013,0x57);
	}

	hdmi_write(0x0082, 0x00);
	hdmi_write(0x0081, 0x00);

	if(hdmi_phy_set(video)!=0)
		return -1;

	hdmi_write(0x0840, 0x00);

	if(video->is_hcts)
	{

	}

	return 0;
}