__s32 Disp_TVEC_Init(__u32 screen_id) { __s32 ret = 0, value = 0; tve_clk_init(screen_id); tve_clk_on(screen_id); TVE_init(screen_id); tve_clk_off(screen_id); gdisp.screen[screen_id].dac_source[0] = DISP_TV_DAC_SRC_Y; gdisp.screen[screen_id].dac_source[1] = DISP_TV_DAC_SRC_PB; gdisp.screen[screen_id].dac_source[2] = DISP_TV_DAC_SRC_PR; gdisp.screen[screen_id].dac_source[3] = DISP_TV_DAC_SRC_COMPOSITE; ret = OSAL_Script_FetchParser_Data("tv_out_dac_para", "dac_used", &value, 1); if(ret == 0) { if(value != 0) { __s32 i = 0; char sub_key[20]; for(i=0; i<4; i++) { sprintf(sub_key, "dac%d_src", i); ret = OSAL_Script_FetchParser_Data("tv_out_dac_para", sub_key, &value, 1); if(ret == 0) { gdisp.screen[screen_id].dac_source[i] = value; } } } } gdisp.screen[screen_id].tv_mode = DISP_TV_MOD_720P_50HZ; return DIS_SUCCESS; }
__s32 bsp_disp_tv_close(__u32 screen_id) { if(gdisp.screen[screen_id].status & TV_ON) { Image_close(screen_id); tcon1_close(screen_id); Disp_TVEC_Close(screen_id); tve_clk_off(screen_id); image_clk_off(screen_id, 1); lcdc_clk_off(screen_id); #if (defined CONFIG_ARCH_SUN5I) __u32 scaler_index = 0; //disp_de_flicker_enable(screen_id, 2); //must close immediately, because vbi may not come DE_BE_Set_Outitl_enable(screen_id, FALSE); for(scaler_index=0; scaler_index<2; scaler_index++) { if((gdisp.scaler[scaler_index].status & SCALER_USED) && (gdisp.scaler[scaler_index].screen_index == screen_id)) { Scaler_Set_Outitl(scaler_index, FALSE); } } #endif #ifdef __LINUX_OSAL__ { disp_gpio_set_t gpio_info[1]; __hdle gpio_pa_shutdown; __s32 ret; memset(gpio_info, 0, sizeof(disp_gpio_set_t)); ret = OSAL_Script_FetchParser_Data("audio_para","audio_pa_ctrl", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int)); if(ret < 0) { DE_WRN("fetch script data audio_para.audio_pa_ctrl fail\n"); } else { gpio_pa_shutdown = OSAL_GPIO_Request(gpio_info, 1); if(!gpio_pa_shutdown) { DE_WRN("audio codec_wakeup request gpio fail!\n"); } else { OSAL_GPIO_DevWRITE_ONEPIN_DATA(gpio_pa_shutdown, 1, "audio_pa_ctrl"); } } } #endif gdisp.screen[screen_id].b_out_interlace = 0; gdisp.screen[screen_id].status &= TV_OFF; gdisp.screen[screen_id].lcdc_status &= LCDC_TCON1_USED_MASK; gdisp.screen[screen_id].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[screen_id].pll_use_status &= ((gdisp.screen[screen_id].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK); Disp_set_out_interlace(screen_id); } return DIS_SUCCESS; }
__s32 Disp_TVEC_Init(__u32 sel) { __s32 ret = 0, value = 0; tve_clk_init(sel); tve_clk_on(sel); TVE_init(sel); tve_clk_off(sel); gdisp.screen[sel].dac_source[0] = DISP_TV_DAC_SRC_Y; gdisp.screen[sel].dac_source[1] = DISP_TV_DAC_SRC_PB; gdisp.screen[sel].dac_source[2] = DISP_TV_DAC_SRC_PR; gdisp.screen[sel].dac_source[3] = DISP_TV_DAC_SRC_COMPOSITE; ret = OSAL_Script_FetchParser_Data("tv_out_dac_para", "dac_used", &value, 1); if(ret < 0) { DE_INF("fetch script data tv_out_dac_para.dac_used fail\n"); } else { DE_INF("tv_out_dac_para.dac_used=%d\n",value); if(value != 0) { __s32 i = 0; char sub_key[20]; for(i=0; i<4; i++) { sprintf(sub_key, "dac%d_src", i); ret = OSAL_Script_FetchParser_Data("tv_out_dac_para", sub_key, &value, 1); if(ret < 0) { DE_INF("fetch script data tv_out_dac_para.%s fail\n", sub_key); } else { gdisp.screen[sel].dac_source[i] = value; DE_INF("tv_out_dac_para.%s = %d\n", sub_key, value); } } } } gdisp.screen[sel].tv_mode = DISP_TV_MOD_720P_50HZ; return DIS_SUCCESS; }
__s32 BSP_disp_tv_close(__u32 sel) { if(gdisp.screen[sel].status & TV_ON) { Image_close(sel); TCON1_close(sel); Disp_TVEC_Close(sel); tve_clk_off(sel); image_clk_off(sel); lcdc_clk_off(sel); #ifdef __LINUX_OSAL__ { user_gpio_set_t gpio_info[1]; __hdle gpio_pa_shutdown; __s32 ret; memset(gpio_info, 0, sizeof(user_gpio_set_t)); ret = OSAL_Script_FetchParser_Data("audio_para","audio_pa_ctrl", (int *)gpio_info, sizeof(user_gpio_set_t)/sizeof(int)); if(ret < 0) { DE_WRN("fetch script data audio_para.audio_pa_ctrl fail\n"); } else { gpio_pa_shutdown = OSAL_GPIO_Request(gpio_info, 1); if(!gpio_pa_shutdown) { DE_WRN("audio codec_wakeup request gpio fail!\n"); } else { OSAL_GPIO_DevWRITE_ONEPIN_DATA(gpio_pa_shutdown, 1, "audio_pa_ctrl"); } } } #endif gdisp.screen[sel].b_out_interlace = 0; gdisp.screen[sel].status &= TV_OFF; gdisp.screen[sel].lcdc_status &= LCDC_TCON1_USED_MASK; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[sel].pll_use_status &= ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK); Disp_set_out_interlace(sel); } return DIS_SUCCESS; }
__s32 BSP_disp_tv_get_interface(__u32 sel) { __u8 dac[4]; __s32 i = 0; __u32 ret = DISP_TV_NONE; if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_on(); } for(i=0; i<4; i++) { dac[i] = TVE_get_dac_status(i); } if(dac[0]>1 || dac[1]>1 || dac[2]>1 || dac[3]>1) { DE_WRN("shor to ground\n"); } else { for(i=0; i<4; i++) { if(gdisp.screen[sel].dac_source[i] == DISP_TV_DAC_SRC_COMPOSITE && dac[i] == 1) { ret |= DISP_TV_CVBS; } else if(gdisp.screen[sel].dac_source[i] == DISP_TV_DAC_SRC_Y && dac[i] == 1) { ret |= DISP_TV_YPBPR; } else if(gdisp.screen[sel].dac_source[i] == DISP_TV_DAC_SRC_LUMA && dac[i] == 1) { ret |= DISP_TV_SVIDEO; } } } if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_off(); } return ret; }
__s32 BSP_disp_tv_get_dac_status(__u32 sel, __u32 index) { __u32 ret; if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_on(); } ret = TVE_get_dac_status(index); if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_off(); } return ret; }
__s32 BSP_disp_tv_close(__u32 sel) { if(gdisp.screen[sel].status & TV_ON) { TCON1_close(sel); Disp_TVEC_Close(); tve_clk_off(); image_clk_off(sel); lcdc_clk_off(sel); gdisp.screen[sel].status &= TV_OFF; gdisp.screen[sel].lcdc_status &= LCDC_TCON1_USED_MASK; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[sel].pll_use_status &= ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK); } return DIS_SUCCESS; }
__s32 bsp_disp_vga_close(__u32 screen_id) { if(gdisp.screen[screen_id].status & VGA_ON) { Image_close(screen_id); tcon1_close(screen_id); Disp_TVEC_Close(screen_id); tve_clk_off(screen_id); image_clk_off(screen_id, 1); lcdc_clk_off(screen_id); gdisp.screen[screen_id].b_out_interlace = 0; gdisp.screen[screen_id].status &= VGA_OFF; gdisp.screen[screen_id].lcdc_status &= LCDC_TCON1_USED_MASK; gdisp.screen[screen_id].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[screen_id].pll_use_status &= ((gdisp.screen[screen_id].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK); } return DIS_SUCCESS; }
__s32 BSP_disp_tv_set_dac_source(__u32 sel, __u32 index, __disp_tv_dac_source source) { __u32 ret; if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_on(); } ret = TVE_dac_set_source(index, source); if(!(gdisp.screen[sel].status & TV_ON)) { tve_clk_off(); } gdisp.screen[sel].dac_source[index] = source; return ret; }
__s32 Disp_TVEC_Init(void) { tve_clk_init(); disp_clk_cfg(0,DISP_OUTPUT_TYPE_TV,DISP_TV_MOD_720P_50HZ); tve_clk_on(); TVE_init(); tve_clk_off(); gdisp.screen[0].dac_source[0] = DISP_TV_DAC_SRC_COMPOSITE; gdisp.screen[0].dac_source[1] = DISP_TV_DAC_SRC_Y; gdisp.screen[0].dac_source[2] = DISP_TV_DAC_SRC_PB; gdisp.screen[0].dac_source[3] = DISP_TV_DAC_SRC_PR; gdisp.screen[1].dac_source[0] = DISP_TV_DAC_SRC_COMPOSITE; gdisp.screen[1].dac_source[1] = DISP_TV_DAC_SRC_Y; gdisp.screen[1].dac_source[2] = DISP_TV_DAC_SRC_PB; gdisp.screen[1].dac_source[3] = DISP_TV_DAC_SRC_PR; gdisp.screen[0].tv_mode = DISP_TV_MOD_720P_50HZ; gdisp.screen[1].tv_mode = DISP_TV_MOD_720P_50HZ; return DIS_SUCCESS; }
__s32 BSP_disp_vga_close(__u32 sel) { if (gdisp.screen[sel].status & VGA_ON) { Image_close(sel); TCON1_close(sel); Disp_TVEC_Close(sel); tve_clk_off(sel); image_clk_off(sel); lcdc_clk_off(sel); Disp_lcdc_pin_cfg(sel, DISP_OUTPUT_TYPE_VGA, 0); gdisp.screen[sel].b_out_interlace = 0; gdisp.screen[sel].status &= ~VGA_ON; gdisp.screen[sel].lcdc_status &= ~LCDC_TCON1_USED; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[sel].pll_use_status &= ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED) ? ~VIDEO_PLL0_USED : ~VIDEO_PLL1_USED); } return DIS_SUCCESS; }
__s32 BSP_disp_tv_close(__u32 sel) { if (gdisp.screen[sel].status & TV_ON) { Image_close(sel); TCON1_close(sel); Disp_TVEC_Close(sel); tve_clk_off(sel); image_clk_off(sel); lcdc_clk_off(sel); if (sunxi_is_sun5i()) { int scaler_index; Disp_de_flicker_enable(sel, 2); /* must close immediately, because vbi may not come */ DE_BE_Set_Outitl_enable(sel, FALSE); for (scaler_index = 0; scaler_index < 2; scaler_index++) if ((gdisp.scaler[scaler_index].status & SCALER_USED) && (gdisp.scaler[scaler_index].screen_index == sel)) Scaler_Set_Outitl(scaler_index, FALSE); } { user_gpio_set_t gpio_info[1]; __hdle gpio_pa_shutdown; __s32 ret; memset(gpio_info, 0, sizeof(user_gpio_set_t)); ret = script_parser_fetch("audio_para", "audio_pa_ctrl", (int *)gpio_info, sizeof(user_gpio_set_t) / sizeof(int)); if (ret < 0) { DE_WRN("fetch script data " "audio_para.audio_pa_ctrl fail\n"); } else { gpio_pa_shutdown = OSAL_GPIO_Request(gpio_info, 1); if (!gpio_pa_shutdown) { DE_WRN("audio codec_wakeup request " "gpio fail!\n"); } else { OSAL_GPIO_DevWRITE_ONEPIN_DATA (gpio_pa_shutdown, 1, "audio_pa_ctrl"); } } } gdisp.screen[sel].b_out_interlace = 0; gdisp.screen[sel].status &= ~TV_ON; gdisp.screen[sel].lcdc_status &= ~LCDC_TCON1_USED; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE; gdisp.screen[sel].pll_use_status &= ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED) ? ~VIDEO_PLL0_USED : ~VIDEO_PLL1_USED); Disp_set_out_interlace(sel); } return DIS_SUCCESS; }