Ejemplo n.º 1
0
__s32 hdmi_main_task_loop(void)
{
	static __u32 times = 0;

	HPD = main_Hpd_Check();
	if( 0 == HPD )
	{
		if((hdmi_state > HDMI_State_Wait_Hpd)  || (hdmi_state == HDMI_State_Idle)) {
			__inf("plugout\n");
			hdmi_state = HDMI_State_Idle;
			video_on = 0;
			audio_on = 0;
			Hdmi_hpd_event();
		}

		if((times++) >= 10) {
			times = 0;
			__inf("unplug state !!\n");
		}
  }

	switch(hdmi_state) {

		case HDMI_State_Idle:
			__inf("HDMI_State_Idle\n");
			bsp_hdmi_hrst();
			bsp_hdmi_standby();

			hdmi_state = HDMI_State_Wait_Hpd;
		case HDMI_State_Wait_Hpd:
			__inf("HDMI_State_Wait_Hpd\n");
			//bsp_hdmi_init();
			if(HPD) {
				hdmi_state = HDMI_State_EDID_Parse;
				__inf("plugin\n");
			} else {
				return 0;
			}
			msleep(200);
		case HDMI_State_Rx_Sense:

		case HDMI_State_EDID_Parse:
			__inf("HDMI_State_EDID_Parse\n");
			ParseEDID();
			hdmi_state = HDMI_State_HPD_Done;
			Hdmi_hpd_event();
			if(video_enable)
				set_video_enable(true);

		case HDMI_State_HPD_Done:
			//__inf("HDMI_State_HPD_Done\n");
			if(video_on && hdcp_enable)
				bsp_hdmi_hdl();
			return 0;
		default:
			__wrn(" unkonwn hdmi state, set to idle\n");
			hdmi_state = HDMI_State_Idle;
			return 0;
	}
}
Ejemplo n.º 2
0
__s32 hdmi_core_initial(void)
{
	if(0 != sw_init_flag)
	{
		hdmi_state = HDMI_State_Playback;
	}
	else
	{
		hdmi_state = HDMI_State_Idle;
		video_mode = HDMI720P_50;
	}

	memset(&audio_info,0,sizeof(HDMI_AUDIO_INFO));
	memset(Device_Support_VIC,0,sizeof(Device_Support_VIC));
	sunxi_set_reg_base(0xf0000000);
	api_set_func(hdmi_delay_us);
	if(0 != sw_init_flag)
	{
		ParseEDID();
		Hdmi_hpd_event();
	}
	else
	{
		video_enter_lp();
	}
	audio_info.data_raw = 1; /* default pcm */

	return 0;
}
Ejemplo n.º 3
0
__s32 hdmi_core_initial(bool sw_only)
{
	memset(&audio_info,0,sizeof(HDMI_AUDIO_INFO));
	mutex_init(&hdmi_lock);
	api_set_func(hdmi_delay_us);
	hdmi_para_init();
	if(sw_only) {
		video_enable = 1;
		hdmi_state = HDMI_State_HPD_Done;
		if(bsp_hdmi_get_hpd()) {
			ParseEDID();
			video_on = 1;
			Hdmi_hpd_event();
		}
	} else {
		bsp_hdmi_init();
	}

	return 0;
}
Ejemplo n.º 4
0
__s32 hdmi_main_task_loop(void)
{
	static __u32 times = 0;

	HPD = main_Hpd_Check();
	if( !HPD )
	{
		if((times++) >= 10) {
			times = 0;
			sunxi_hdcp_rst();
			__inf("unplug state\n");
		}
		if(hdmi_state > HDMI_State_Wait_Hpd) {
			__inf("plugout\n");
			hdmi_state = HDMI_State_Wait_Hpd;
			sunxi_hdcp_rst();
			Hdmi_hpd_event();
			video_enter_lp();
		}
  }

	if(hdmi_state > HDMI_State_Video_config)
	{
		if(hdcp_enable)
			sunxi_hdcp_hdl();
	}

	switch(hdmi_state) {
		case HDMI_State_Idle:
			hdmi_state = HDMI_State_Wait_Hpd;

		case HDMI_State_Wait_Hpd:
			if(HPD) {
				hdmi_state = HDMI_State_EDID_Parse;
				__inf("plugin\n");
			} else {
				return 0;
			}

		case HDMI_State_Rx_Sense:

		case HDMI_State_EDID_Parse:
			hdmi_state = HDMI_State_Wait_Video_config;
			ParseEDID();
			Hdmi_hpd_event();

		case HDMI_State_Wait_Video_config:
			if(video_enable) {
				hdmi_state = 	HDMI_State_Video_config;
			} else {
				return 0;
			}
		case HDMI_State_Video_config:
			sunxi_hdcp_rst();
			video_config(video_mode);
			hdmi_state = 	HDMI_State_Audio_config;

		case HDMI_State_Audio_config:
			audio_config();
			hdmi_state = 	HDMI_State_Playback;
		case HDMI_State_Playback:
			return 0;
		default:
			__wrn(" unkonwn hdmi state, set to idle\n");
			hdmi_state = HDMI_State_Idle;
			return 0;
	}
}
Ejemplo n.º 5
0
static void det_worker(struct work_struct *work)
{
	BYTE HPD, HPDChange ;
	char event_string[16];
	char *envp[] = { event_string, NULL };

	CheckHDMITX(&HPD, &HPDChange);
	if (HPDChange) {
		/* cable connection changes */
		if (HPD) {
			ite661x.cable_plugin = 1;
			sprintf(event_string, "EVENT=plugin");

			/* make sure fb is powerdown */
			acquire_console_sem();
			fb_blank(ite661x.fbi, FB_BLANK_POWERDOWN);
			release_console_sem();

			if (ite661x_read_edid(ite661x.fbi) < 0)
				dev_err(&ite661x.client->dev,
					"ite661x: read edid fail\n");
			else {
				ParseEDID(ite661x.edid + 128);
				if (ite661x.fbi->monspecs.modedb_len > 0) {
					int i;
					const struct fb_videomode *mode;
					struct fb_videomode m;

					fb_destroy_modelist(&ite661x.fbi->modelist);

					for (i = 0; i < ite661x.fbi->monspecs.modedb_len; i++) {
						/*FIXME now we do not support interlaced mode */
						if (!(ite661x.fbi->monspecs.modedb[i].vmode & FB_VMODE_INTERLACED))
							fb_add_videomode(&ite661x.fbi->monspecs.modedb[i],
									&ite661x.fbi->modelist);
					}

					fb_var_to_videomode(&m, &ite661x.fbi->var);
					mode = fb_find_nearest_mode(&m,
							&ite661x.fbi->modelist);

					fb_videomode_to_var(&ite661x.fbi->var, mode);

					ite661x.fbi->var.activate |= FB_ACTIVATE_FORCE;
					acquire_console_sem();
					ite661x.fbi->flags |= FBINFO_MISC_USEREVENT;
					fb_set_var(ite661x.fbi, &ite661x.fbi->var);
					ite661x.fbi->flags &= ~FBINFO_MISC_USEREVENT;
					release_console_sem();
				}

				acquire_console_sem();
				fb_blank(ite661x.fbi, FB_BLANK_UNBLANK);
				release_console_sem();
				HDMITX_SetOutput();
			}
		} else {
			ite661x.cable_plugin = 0;
			sprintf(event_string, "EVENT=plugout");
			acquire_console_sem();
			fb_blank(ite661x.fbi, FB_BLANK_POWERDOWN);
			release_console_sem();
			DisableAudioOutput();
			DisableVideoOutput();
		}
		kobject_uevent_env(&ite661x.pdev->dev.kobj, KOBJ_CHANGE, envp);
	}
	enable_irq(ite661x.client->irq);
}
Ejemplo n.º 6
0
__s32 hdmi_main_task_loop(void)
{
	static __u32 times = 0;
	HPD = main_Hpd_Check();
	if( !HPD )
	{
        if((times++) >= 10)
        {
            times = 0;
            __inf("unplug state\n");
        }
		
		if(hdmi_state > HDMI_State_Wait_Hpd)
		{
            __inf("plugout\n");
            hdmi_state = HDMI_State_Wait_Hpd;
            Hdmi_hpd_event();
		}
	}
	switch(hdmi_state)
        {
    	        case HDMI_State_Idle:
    		        hdmi_state = 	HDMI_State_Wait_Hpd;
    		        return 0; 
    		 
    	        case HDMI_State_Wait_Hpd:
    		        if(HPD)
    		        {
    		 	        hdmi_state = 	HDMI_State_EDID_Parse;
    		 	        __inf("plugin\n");
    		        }else
    		        {
    		 	        return 0;
    		        } 
    		 
    	        case HDMI_State_Rx_Sense:
    		 
    	        case HDMI_State_EDID_Parse:
                        HDMI_WUINT32(0x004,0x80000000);
                        HDMI_WUINT32(0x208,(1<<31)+ (1<<30)+ (1<<29)+ (3<<27)+ (0<<26)+ 
                        	       (1<<25)+ (0<<24)+ (0<<23)+ (4<<20)+ (7<<17)+
                        	       (15<<12)+ (7<<8)+ (0x0f<<4)+(8<<0) );	  
                        HDMI_WUINT32(0x200,0xfe800000);   			//txen enable
                        HDMI_WUINT32(0x204,0x00D8C850);   			//ckss = 1

                        HDMI_WUINT32(0x20c, 0 << 21);    		 


                        ParseEDID();
                        HDMI_RUINT32(0x5f0);

    		        hdmi_state = HDMI_State_Wait_Video_config;
                        Hdmi_hpd_event();

    	        case HDMI_State_Wait_Video_config:
    	        if(video_enable)
                {
                        hdmi_state = 	HDMI_State_Video_config;
                }else
                {
                	return 0;
                }
    		 
    	        case HDMI_State_Video_config:
                        video_config(video_mode);
                        hdmi_state = 	HDMI_State_Audio_config;    	
    		 
    	        case HDMI_State_Audio_config:
                        audio_config();
                        hdmi_state = 	HDMI_State_Playback;    
    		 
    	        case HDMI_State_Playback:
    		        return 0;  
    		 
		default:
                        __wrn(" unkonwn hdmi state, set to idle\n");
                        hdmi_state = HDMI_State_Idle;	
                        return 0;	
        }
}