// change tv mode and show logo immediatly when hdmi pluged int set_mode_and_show_logo(int hpd_state) { int value; logo_object_t* plogo = get_current_logo_obj(); if((plogo->para.vout_mode & VMODE_MODE_BIT_MASK) > VMODE_4K2K_SMPTE) { return 0; // MID } printk("hdmi detect: %s.\n", (hpd_state==1)?"plug":"unplug"); // osd2 freescale enable, the logo is shown on osd2, reset freescale. value = aml_read_reg32(P_VPP_OSD_SC_CTRL0) & 0xb; if(value == 0x9) { vmode_t cur_mode; if (hpd_state == 0){ cur_mode = cvbsmode_hdmionly; } else{ cur_mode = hdmimode_hdmionly; } if(tvmode != cur_mode) { tvmode = cur_mode; osd_enable_hw(0, plogo->para.output_dev_type); set_current_vmode(cur_mode); vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&cur_mode) ; set_osd_freescaler(plogo->para.output_dev_type, plogo, cur_mode); } } return 1; }
static int osd1_init(logo_object_t *plogo) { #if defined(CONFIG_AM_HDMI_ONLY) int hpd_state = 0; #endif #if defined(CONFIG_AM_HDMI_ONLY) || (MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8) vmode_t cur_mode = plogo->para.vout_mode; #endif if(plogo->para.output_dev_type==output_osd1.idx) { DisableVideoLayer(); if((plogo->platform_res[output_osd1.idx].mem_end - plogo->platform_res[output_osd1.idx].mem_start) ==0) { return OUTPUT_DEV_UNFOUND; } if(plogo->para.loaded) { osd_init_hw(plogo->para.loaded); if(plogo->para.vout_mode > VMODE_4K2K_SMPTE){ plogo->para.vout_mode|=VMODE_LOGO_BIT_MASK; } } #ifdef CONFIG_AM_HDMI_ONLY if(plogo->para.vout_mode > VMODE_4K2K_SMPTE) { set_current_vmode(plogo->para.vout_mode); }else{ extern int read_hpd_gpio(void); hpd_state = read_hpd_gpio(); if (hpd_state == 0){ cur_mode = cvbsmode_hdmionly; } else{ cur_mode = hdmimode_hdmionly; } set_current_vmode(cur_mode); } #else set_current_vmode(plogo->para.vout_mode); #endif #if MESON_CPU_TYPE < MESON_CPU_TYPE_MESON8 osd_init_scan_mode(); #endif output_osd1.vinfo=get_current_vinfo(); plogo->dev=&output_osd1; plogo->dev->window.x=0; plogo->dev->window.y=0; plogo->dev->window.w=plogo->dev->vinfo->width; plogo->dev->window.h=plogo->dev->vinfo->height; plogo->dev->output_dev.osd.mem_start=plogo->platform_res[LOGO_DEV_OSD1].mem_start; plogo->dev->output_dev.osd.mem_end=plogo->platform_res[LOGO_DEV_OSD1].mem_end; plogo->dev->output_dev.osd.color_depth=get_curr_color_depth(P_VIU_OSD2_BLK0_CFG_W0);//setup by uboot #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8 if((cur_mode != (plogo->para.vout_mode & VMODE_MODE_BIT_MASK)) && (cur_mode <= VMODE_4K2K_SMPTE)) { set_osd_freescaler(LOGO_DEV_OSD1, plogo, cur_mode); } #endif return OUTPUT_DEV_FOUND; } return OUTPUT_DEV_UNFOUND; }