pedid->ycbcr444 = (buf[3] >> 5) & 0x01;\r
pedid->ycbcr422 = (buf[3] >> 4) & 0x01;\r
native_dtd_num = buf[3] & 0x0F;\r
-// hdmi_edid_debug("[EDID-CEA] ddc_offset %d underscan_support %d baseaudio_support %d yuv_support %d native_dtd_num %d\n", ddc_offset, underscan_support, baseaudio_support, yuv_support, native_dtd_num);\r
+ pedid->base_audio_support = baseaudio_support;\r
+ \r
// Parse data block\r
while(cur_offset < ddc_offset)\r
{\r
int i, pixclock;
if(edid_ok != HDMI_ERROR_SUCESS) {
- dev_err(hdmi->dev, "warning: EDID error, assume sink as HDMI !!!!");
+ dev_err(hdmi->dev, "warning: EDID error, assume sink as HDMI and asume minitor support audio output!!!!");
hdmi->edid.sink_hdmi = 1;
+ //if edid error,asume monitor support audio output.
+ hdmi->edid.base_audio_support = 1;
}
if(edid_ok != HDMI_ERROR_SUCESS) {
void hdmi_sys_remove(void)
{
+ int audio_need;
+
+ audio_need = hdmi->edid.base_audio_support == 1 && hdmi->edid.sink_hdmi == 1;
+
fb_destroy_modelist(&hdmi->edid.modelist);
if(hdmi->edid.audio)
kfree(hdmi->edid.audio);
hdmi->set_vif(hdmi->lcdc->screen1,0);
rk_fb_switch_screen(hdmi->lcdc->screen1, 0, hdmi->lcdc->id);
kobject_uevent_env(&hdmi->dev->kobj, KOBJ_REMOVE, envp);
+
#ifdef CONFIG_SWITCH
- switch_set_state(&(hdmi->switch_hdmi), 0);
+ if(audio_need)
+ switch_set_state(&(hdmi->switch_hdmi), 0);
#endif
#ifdef CONFIG_RK_HDMI_CTL_CODEC
#ifdef CONFIG_MACH_RK_FAC
int hotplug, state_last;
int rc = HDMI_ERROR_SUCESS, trytimes = 0;
struct hdmi_video_para video;
-
+
mutex_lock(&work_mutex);
/* Process hdmi command */
hdmi->state = hdmi_process_command();
{
hdmi->state = SYSTEM_CONFIG;
kobject_uevent_env(&hdmi->dev->kobj, KOBJ_ADD, envp);
+ hdmi_dbg(hdmi->dev,"[%s],base_audio_support =%d,sink_hdmi = %d\n",hdmi->edid.base_audio_support,hdmi->edid.sink_hdmi );
#ifdef CONFIG_SWITCH
- switch_set_state(&(hdmi->switch_hdmi), 1);
+ if(hdmi->edid.base_audio_support == 1 && hdmi->edid.sink_hdmi == 1)
+ switch_set_state(&(hdmi->switch_hdmi), 1);
#endif
#ifdef CONFIG_RK_HDMI_CTL_CODEC
#ifdef CONFIG_MACH_RK_FAC