__s32 Disp_lcdc_init(__u32 sel) { lcdc_clk_init(sel); lcdc_clk_on(sel); //??need to be open LCDC_init(sel); lcdc_clk_off(sel); Disp_pwm_cfg(sel); if(sel == 0) { LCD_get_panel_funs_0(&lcd_panel_fun[sel]); OSAL_RegISR(INTC_IRQNO_LCDC0,0,Disp_lcdc_event_proc,(void*)sel,0,0); //OSAL_InterruptEnable(INTC_IRQNO_LCDC0); } else { LCD_get_panel_funs_1(&lcd_panel_fun[sel]); OSAL_RegISR(INTC_IRQNO_LCDC1,0,Disp_lcdc_event_proc,(void*)sel,0,0); //OSAL_InterruptEnable(INTC_IRQNO_LCDC1); } lcd_panel_fun[sel].cfg_panel_info(&gpanel_info[sel]); return DIS_SUCCESS; }
__s32 Disp_lcdc_init(__u32 sel) { irqreturn_t ret; LCD_get_sys_config(sel, &(gdisp.screen[sel].lcd_cfg)); lcdc_clk_init(sel); lvds_clk_init(); lcdc_clk_on(sel); /* ??need to be open */ LCDC_init(sel); lcdc_clk_off(sel); if (sel == 0) ret = request_irq(INTC_IRQNO_LCDC0, Disp_lcdc_event_proc, IRQF_DISABLED, "sunxi lcd0", (void *)sel); else ret = request_irq(INTC_IRQNO_LCDC1, Disp_lcdc_event_proc, IRQF_DISABLED, "sunxi lcd1", (void *)sel); if (gdisp.screen[sel].lcd_cfg.lcd_used) { if (lcd_panel_fun[sel].cfg_panel_info) lcd_panel_fun[sel].cfg_panel_info(&gpanel_info[sel]); else LCD_get_panel_para(sel, &gpanel_info[sel]); gpanel_info[sel].tcon_index = 0; if (!sunxi_is_version_A() && (gpanel_info[sel].lcd_pwm_not_used == 0)) { __pwm_info_t pwm_info; pwm_info.enable = 0; pwm_info.active_state = 1; pwm_info.period_ns = 1000000 / gpanel_info[sel].lcd_pwm_freq; if (gpanel_info[sel].lcd_pwm_pol == 0) pwm_info.duty_ns = (gdisp.screen[sel].lcd_cfg.init_bright * pwm_info.period_ns) / 256; else pwm_info.duty_ns = ((256 - gdisp.screen[sel].lcd_cfg.init_bright) * pwm_info.period_ns) / 256; pwm_set_para(gpanel_info[sel].lcd_pwm_ch, &pwm_info); } LCD_GPIO_init(sel); } return DIS_SUCCESS; }
__s32 Disp_lcdc_init(__u32 sel) { LCD_get_sys_config(sel, &(gdisp.screen[sel].lcd_cfg)); lcdc_clk_init(sel); lvds_clk_init(); lcdc_clk_on(sel); //??need to be open LCDC_init(sel); lcdc_clk_off(sel); if(sel == 0) { OSAL_RegISR(INTC_IRQNO_LCDC0,0,Disp_lcdc_event_proc,(void*)sel,0,0); #ifndef __LINUX_OSAL__ OSAL_InterruptEnable(INTC_IRQNO_LCDC0); LCD_get_panel_funs_0(&lcd_panel_fun[sel]); #endif } else { OSAL_RegISR(INTC_IRQNO_LCDC1,0,Disp_lcdc_event_proc,(void*)sel,0,0); #ifndef __LINUX_OSAL__ OSAL_InterruptEnable(INTC_IRQNO_LCDC1); LCD_get_panel_funs_1(&lcd_panel_fun[sel]); #endif } if(gdisp.screen[sel].lcd_cfg.lcd_used) { if(lcd_panel_fun[sel].cfg_panel_info) { lcd_panel_fun[sel].cfg_panel_info(&gpanel_info[sel]); } else { LCD_get_panel_para(sel, &gpanel_info[sel]); } gpanel_info[sel].tcon_index = 0; if((OSAL_sw_get_ic_ver() != 0xA) && (gpanel_info[sel].lcd_pwm_not_used == 0)) { __pwm_info_t pwm_info; pwm_info.enable = 0; pwm_info.active_state = 1; pwm_info.period_ns = 1000000 / gpanel_info[sel].lcd_pwm_freq; if(gpanel_info[sel].lcd_pwm_pol == 0) { pwm_info.duty_ns = (192 * pwm_info.period_ns) / 256; } else { pwm_info.duty_ns = ((256 - 192) * pwm_info.period_ns) / 256; } pwm_set_para(gpanel_info[sel].lcd_pwm_ch, &pwm_info); } LCD_GPIO_init(sel); } return DIS_SUCCESS; }
__s32 BSP_disp_tv_open(__u32 sel) { if(!(gdisp.screen[sel].status & TV_ON)) { __disp_tv_mode_t tv_mod; tv_mod = gdisp.screen[sel].tv_mode; image_clk_on(sel, 0); image_clk_on(sel, 1); Image_open(sel);//set image normal channel start bit , because every de_clk_off( )will reset this bit DE_BE_EnableINT(sel, DE_IMG_REG_LOAD_FINISH); disp_clk_cfg(sel,DISP_OUTPUT_TYPE_TV, tv_mod); tve_clk_on(sel); lcdc_clk_on(sel, 1, 0); lcdc_clk_on(sel, 1, 1); Disp_lcdc_reg_isr(sel); LCDC_init(sel); gdisp.screen[sel].output_csc_type = DISP_OUT_CSC_TYPE_TV; BSP_disp_set_output_csc(sel, gdisp.screen[sel].output_csc_type); DE_BE_set_display_size(sel, tv_mode_to_width(tv_mod), tv_mode_to_height(tv_mod)); DE_BE_Output_Select(sel, sel); tcon1_set_tv_mode(sel,tv_mod); TVE_set_tv_mode(sel, tv_mod); Disp_TVEC_DacCfg(sel, tv_mod); tcon1_open(sel); Disp_TVEC_Open(sel); Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_TV, tv_mod); #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) { 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, 0, "audio_pa_ctrl"); } } } #endif gdisp.screen[sel].b_out_interlace = Disp_get_screen_scan_mode(tv_mod); gdisp.screen[sel].status |= TV_ON; gdisp.screen[sel].lcdc_status |= LCDC_TCON1_USED; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_TV; Disp_set_out_interlace(sel); #ifdef __LINUX_OSAL__ Display_set_fb_timming(sel); #endif } return DIS_SUCCESS; }
__s32 BSP_disp_hdmi_open(__u32 sel) { if(!(gdisp.screen[sel].status & HDMI_ON)) { __disp_tv_mode_t tv_mod; tv_mod = gdisp.screen[sel].hdmi_mode; BSP_disp_hdmi_get_hdcp_enable(); hdmi_clk_on(); if(gdisp.screen[sel].hdmi_hdcp_en) hdcp_clk_init(tv_mod); lcdc_clk_on(sel, 1, 0); lcdc_clk_on(sel, 1, 1); Disp_lcdc_reg_isr(sel); LCDC_init(sel); image_clk_on(sel, 0); image_clk_on(sel, 1); Image_open(sel);//set image normal channel start bit , because every de_clk_off( )will reset this bit DE_BE_EnableINT(sel, DE_IMG_REG_LOAD_FINISH); disp_clk_cfg(sel,DISP_OUTPUT_TYPE_HDMI, tv_mod); if(gdisp.init_para.hdmi_cts_compatibility == 0) { DE_INF("BSP_disp_hdmi_open: disable dvi mode\n"); BSP_disp_hdmi_dvi_enable(sel, 0); } else if(gdisp.init_para.hdmi_cts_compatibility == 1) { DE_INF("BSP_disp_hdmi_open: enable dvi mode\n"); BSP_disp_hdmi_dvi_enable(sel, 1); } else { BSP_disp_hdmi_dvi_enable(sel, BSP_disp_hdmi_dvi_support(sel)); } if(BSP_dsip_hdmi_get_input_csc(sel) == 0) { __inf("BSP_disp_hdmi_open: hdmi output rgb\n"); gdisp.screen[sel].output_csc_type = DISP_OUT_CSC_TYPE_HDMI_RGB; BSP_disp_set_output_csc(sel, gdisp.screen[sel].output_csc_type); }else { __inf("BSP_disp_hdmi_open: hdmi output yuv\n"); gdisp.screen[sel].output_csc_type = DISP_OUT_CSC_TYPE_HDMI_YUV;//default yuv BSP_disp_set_output_csc(sel, gdisp.screen[sel].output_csc_type); } DE_BE_set_display_size(sel, tv_mode_to_width(tv_mod), tv_mode_to_height(tv_mod)); DE_BE_Output_Select(sel, sel); tcon1_set_hdmi_mode(sel,tv_mod); tcon1_open(sel); if(gdisp.init_para.hdmi_open) { gdisp.init_para.hdmi_open(); } else { DE_WRN("hdmi_open is NULL\n"); return -1; } Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_HDMI, tv_mod); gdisp.screen[sel].b_out_interlace = Disp_get_screen_scan_mode(tv_mod); gdisp.screen[sel].status |= HDMI_ON; gdisp.screen[sel].lcdc_status |= LCDC_TCON1_USED; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_HDMI; Disp_set_out_interlace(sel); #ifdef __LINUX_OSAL__ Display_set_fb_timming(sel); #endif } return DIS_SUCCESS; }