int lcd_init(void) { static __lcd_panel_fun_t lcd0_cfg; static __lcd_panel_fun_t lcd1_cfg; memset(&lcd0_cfg, 0, sizeof(__lcd_panel_fun_t)); memset(&lcd1_cfg, 0, sizeof(__lcd_panel_fun_t)); LCD_get_panel_funs_0(&lcd0_cfg); LCD_get_panel_funs_1(&lcd1_cfg); LCD_set_panel_funs(&lcd0_cfg, &lcd1_cfg); DRV_DISP_Init(); Fb_Init(0); return 0; }
static int __init disp_probe(struct platform_device *pdev)//called when platform_driver_register { fb_info_t * info = NULL; struct resource *res; int ret = 0; int size; int i; __msg("disp_probe call\n"); info = &g_fbi; info->dev = &pdev->dev; platform_set_drvdata(pdev,info); for(i=0;i<DISP_IO_NUM;i++) { res = platform_get_resource(pdev, IORESOURCE_MEM, i); if (res == NULL) { __wrn("failed to get memory registers\n"); ret = -ENXIO; if(i==DISP_IO_SCALER0) { goto dealloc_fb; } else if(i==DISP_IO_SCALER1) { goto release_regs0; } else if(i==DISP_IO_IMAGE0) { goto release_regs1; } else if(i==DISP_IO_IMAGE1) { goto release_regs2; } else if(i==DISP_IO_LCDC0) { goto release_regs3; } else if(i==DISP_IO_LCDC1) { goto release_regs4; } else if(i==DISP_IO_TVEC) { goto release_regs5; } } size = (res->end - res->start) + 1; info->mem[i] = request_mem_region(res->start, size, pdev->name); if (info->mem[i] == NULL) { __wrn("failed to get memory region\n"); ret = -ENOENT; if(i==DISP_IO_SCALER0) { goto dealloc_fb; } else if(i==DISP_IO_SCALER1) { goto release_regs0; } else if(i==DISP_IO_IMAGE0) { goto release_regs1; } else if(i==DISP_IO_IMAGE1) { goto release_regs2; } else if(i==DISP_IO_LCDC0) { goto release_regs3; } else if(i==DISP_IO_LCDC1) { goto release_regs4; } else if(i==DISP_IO_TVEC) { goto release_regs5; } } info->io[i] = ioremap(res->start, size); if (info->io[i] == NULL) { __wrn("ioremap() of registers failed\n"); ret = -ENXIO; if(i==DISP_IO_SCALER0) { goto release_mem0; } else if(i==DISP_IO_SCALER1) { goto release_mem1; } else if(i==DISP_IO_IMAGE0) { goto release_mem2; } else if(i==DISP_IO_IMAGE1) { goto release_mem3; } else if(i==DISP_IO_LCDC0) { goto release_mem4; } else if(i==DISP_IO_LCDC1) { goto release_mem5; } else if(i==DISP_IO_TVEC) { goto release_mem6; } } } info->base_ccmu = 0xf1c20000; info->base_sdram = 0xf1c01000; info->base_pio = 0xf1c20800; __msg("SCALER0 base 0x%08x\n", (__u32)info->io[DISP_IO_SCALER0]); __msg("SCALER1 base 0x%08x\n", (__u32)info->io[DISP_IO_SCALER1]); __msg("IMAGE0 base 0x%08x\n", (__u32)info->io[DISP_IO_IMAGE0]); __msg("IMAGE1 base 0x%08x\n", (__u32)info->io[DISP_IO_IMAGE1]); __msg("LCDC0 base 0x%08x\n", (__u32)info->io[DISP_IO_LCDC0]); __msg("LCDC1 base 0x%08x\n", (__u32)info->io[DISP_IO_LCDC1]); __msg("TVEC base 0x%08x\n", (__u32)info->io[DISP_IO_TVEC]); __msg("CCMU base 0x%08x\n", info->base_ccmu); __msg("SDRAM base 0x%08x\n", info->base_sdram); __msg("PIO base 0x%08x\n", info->base_pio); DRV_DISP_Init(); //tmp use begin!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // writel(0x00000709, g_fbi.base_sdram+0x70); // writel(0x00000709, g_fbi.base_sdram+0x84); //tmp use end!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! return 0; release_mem6: release_resource(info->mem[6]); kfree(info->mem[6]); release_regs5: iounmap(info->io[5]); release_mem5: release_resource(info->mem[5]); kfree(info->mem[5]); release_regs4: iounmap(info->io[4]); release_mem4: release_resource(info->mem[4]); kfree(info->mem[4]); release_regs3: iounmap(info->io[3]); release_mem3: release_resource(info->mem[3]); kfree(info->mem[3]); release_regs2: iounmap(info->io[2]); release_mem2: release_resource(info->mem[2]); kfree(info->mem[2]); release_regs1: iounmap(info->io[1]); release_mem1: release_resource(info->mem[1]); kfree(info->mem[1]); release_regs0: iounmap(info->io[0]); release_mem0: release_resource(info->mem[0]); kfree(info->mem[0]); dealloc_fb: platform_set_drvdata(pdev, NULL); kfree(info); return ret; }