__s32 DRV_DISP_Init(void) { __disp_bsp_init_para para; init_waitqueue_head(&g_fbi.wait[0]); init_waitqueue_head(&g_fbi.wait[1]); g_fbi.wait_count[0] = 0; g_fbi.wait_count[1] = 0; memset(¶, 0, sizeof(__disp_bsp_init_para)); para.base_image0 = (__u32) g_fbi.base_image0; para.base_image1 = (__u32) g_fbi.base_image1; para.base_scaler0 = (__u32) g_fbi.base_scaler0; para.base_scaler1 = (__u32) g_fbi.base_scaler1; para.base_lcdc0 = (__u32) g_fbi.base_lcdc0; para.base_lcdc1 = (__u32) g_fbi.base_lcdc1; para.base_tvec0 = (__u32) g_fbi.base_tvec0; para.base_tvec1 = (__u32) g_fbi.base_tvec1; #ifdef CONFIG_ARCH_SUN5I para.base_iep = (__u32) g_fbi.base_iep; #endif para.base_ccmu = (__u32) g_fbi.base_ccmu; para.base_sdram = (__u32) g_fbi.base_sdram; para.base_pioc = (__u32) g_fbi.base_pioc; para.base_pwm = (__u32) g_fbi.base_pwm; para.disp_int_process = DRV_disp_int_process; memset(&g_disp_drv, 0, sizeof(__disp_drv_t)); BSP_disp_init(¶); BSP_disp_open(); return 0; }
__s32 DRV_DISP_Init(void) { __disp_bsp_init_para para; init_waitqueue_head(&g_fbi.wait[0]); init_waitqueue_head(&g_fbi.wait[1]); g_fbi.wait_count[0] = 0; g_fbi.wait_count[1] = 0; memset(¶, 0, sizeof(__disp_bsp_init_para)); para.base_image0 = (__u32)g_fbi.base_image0; para.base_image1 = (__u32)g_fbi.base_image1; para.base_scaler0 = (__u32)g_fbi.base_scaler0; para.base_scaler1 = (__u32)g_fbi.base_scaler1; para.base_lcdc0 = (__u32)g_fbi.base_lcdc0; para.base_lcdc1 = (__u32)g_fbi.base_lcdc1; para.base_tvec0 = (__u32)g_fbi.base_tvec0; para.base_tvec1 = (__u32)g_fbi.base_tvec1; para.base_ccmu = (__u32)g_fbi.base_ccmu; para.base_sdram = (__u32)g_fbi.base_sdram; para.base_pioc = (__u32)g_fbi.base_pioc; para.base_pwm = (__u32)g_fbi.base_pwm; para.disp_int_process = DRV_disp_int_process; memset(&g_disp_drv, 0, sizeof(__disp_drv_t)); sys_put_wvalue(0xf1c20118, 1<<19); BSP_disp_init(¶); BSP_disp_open(); return 0; }
__s32 DRV_DISP_Init(void) { __disp_bsp_init_para para; __u32 i = 0; para.base_image0 = (__u32)g_fbi.io[DISP_IO_IMAGE0]; para.base_image1 = (__u32)g_fbi.io[DISP_IO_IMAGE1]; para.base_scaler0 = (__u32)g_fbi.io[DISP_IO_SCALER0]; para.base_scaler1 = (__u32)g_fbi.io[DISP_IO_SCALER1]; para.base_lcdc0 = (__u32)g_fbi.io[DISP_IO_LCDC0]; para.base_lcdc1 = (__u32)g_fbi.io[DISP_IO_LCDC1]; para.base_tvec = (__u32)g_fbi.io[DISP_IO_TVEC]; para.base_ccmu = (__u32)g_fbi.base_ccmu; para.base_sdram = (__u32)g_fbi.base_sdram; para.base_pioc = (__u32)g_fbi.base_pio; para.scaler_begin = DRV_scaler_begin; para.scaler_finish = DRV_scaler_finish; para.tve_interrup = DRV_tve_interrup; para.hdmi_set_mode = DRV_hdmi_set_mode; para.Hdmi_open = DRV_Hdmi_open; para.Hdmi_close = DRV_Hdmi_close; para.hdmi_mode_support = DRV_hdmi_mode_support; para.hdmi_get_HPD_status = DRV_hdmi_get_HPD_status; para.disp_int_process = disp_int_process; memset(&g_disp_drv, 0, sizeof(__disp_drv_t)); g_disp_drv.scaler_finished_sem[0] = kmalloc(sizeof(struct semaphore),GFP_KERNEL | __GFP_ZERO); if(!g_disp_drv.scaler_finished_sem[0]) { __wrn("create scaler_finished_sem[0] fail!\n"); return -1; } sema_init(g_disp_drv.scaler_finished_sem[0],0); g_disp_drv.scaler_finished_sem[1] = kmalloc(sizeof(struct semaphore),GFP_KERNEL | __GFP_ZERO); if(!g_disp_drv.scaler_finished_sem[1]) { __wrn("create scaler_finished_sem[1] fail!\n"); return -1; } sema_init(g_disp_drv.scaler_finished_sem[1],0); for(i = 0; i<MAX_EVENT_SEM; i++) { g_disp_drv.event_sem[0][i] = NULL; g_disp_drv.event_sem[1][i] = NULL; } BSP_disp_init(¶); BSP_disp_open(); Fb_Init(); return 0; }
/* **************************************************************************************************** * * DRV_DE_INIT * * Description: 初始化函数,通常把只会执行一次的操作放在这里 * 当驱动第一次安装的时候会调用这个函数 * 此函数没有参数,需要参数的时候需要从配置脚本去获取 * Parameters: * * Return value: * 0 * -1 **************************************************************************************************** */ __s32 DRV_DE_INIT(void) { __disp_bsp_init_para para; para.base_image0 = 0x01e60000; para.base_image1 = 0x01e40000; para.base_scaler0 = 0x01e00000; para.base_scaler1 = 0x01e20000; para.base_lcdc0 = 0x01c0c000; para.base_lcdc1 = 0x01c17000; para.base_tvec0 = 0x01c0a000; para.base_tvec1 = 0x01c1b000; para.base_ccmu = 0x01c20000; para.base_sdram = 0x01c01000; para.base_pioc = 0x01c20800; para.base_pwm = 0x01c20c00; para.disp_int_process = disp_int_process; BSP_disp_init(¶); BSP_disp_open(); return 0; }
__s32 DRV_DISP_MInit(void) { __disp_bsp_init_para para; __hdle hReg; __u32 i = 0; user_gpio_set_t gpio_set[1]; __s32 ret; para.base_image0 = 0xf1e60000; para.base_scaler0 = 0xf1e00000; para.base_lcdc0 = 0xf1c0c000; para.base_tvec = 0xf1c0a000; para.base_ccmu = 0xf1c20000; para.base_sdram = 0xf1c01000; para.base_pioc = 0xf1c20800; para.base_timer = 0xf1c21000; /* PWM module register base */ para.power_on = DRV_lcd_power_on; para.power_off = DRV_lcd_power_off; para.scaler_begin = DRV_scaler_begin; para.scaler_finish = DRV_scaler_finish; para.tve_interrup = DRV_tve_interrup; para.hdmi_set_mode = DRV_hdmi_set_mode; para.Hdmi_open = DRV_Hdmi_open; para.Hdmi_close = DRV_Hdmi_close; para.hdmi_mode_support = DRV_hdmi_mode_support; para.hdmi_get_HPD_status = DRV_hdmi_get_HPD_status; para.disp_int_process = disp_int_process; eLIBs_memset(&g_disp_drv, 0, sizeof(__disp_drv_t)); g_disp_drv.scaler_finished_sem[0] = esKRNL_SemCreate(0); if(!g_disp_drv.scaler_finished_sem[0]) { __wrn("create scaler_finished_sem[0] fail!\n"); return EPDK_FAIL; } g_disp_drv.scaler_finished_sem[1] = esKRNL_SemCreate(0); if(!g_disp_drv.scaler_finished_sem[1]) { __wrn("create scaler_finished_sem[1] fail!\n"); return EPDK_FAIL; } for(i = 0; i<MAX_EVENT_SEM; i++) { g_disp_drv.event_sem[0][i] = NULL; g_disp_drv.event_sem[1][i] = NULL; } BSP_disp_init(¶); BSP_disp_open(); g_disp_drv.reg_operate_vaild = 1; hReg = esDEV_DevReg("DISP", "DISPLAY", &dispdev_ops, 0); if(!hReg) { __inf("esDEV_DevReg() fail!\n"); return EPDK_FAIL; } #if DRV_VCOM_TIMER //Soft Vcom Control; ret = esCFG_GetKeyValue("softvcom_para", "soft_vcom_en", &vcom_en, 1); if (!ret) { eLIBs_printf(" -- %s, %d, vcom_en = %d -- \n", __FILE__, __LINE__, vcom_en); if(vcom_en) { ret = esCFG_GetKeyValue("softvcom_para", "vcom_io", (int *)gpio_set, sizeof(user_gpio_set_t)/4); if (!ret) { vcom_io = esPINS_PinGrpReq(gpio_set, 1); if (!vcom_io) { __wrn("request output_col pin failed\n"); return EPDK_FAIL; } } else { __wrn("fetch para from script failed\n"); return EPDK_FAIL; } } } else { __wrn("fetch para from script failed\n"); return EPDK_FAIL; } ret = esPINS_SetPinPull(vcom_io, PIN_PULL_DOWN, NULL); if (ret) { __wrn("pull output_col failed\n"); return EPDK_FAIL; } //申请定时器 vcom_timer_init(); //让定时器开始跑 vcom_timer_start(); #endif return EPDK_OK; }