ot get irq %d - err %d\n", irq, ret);
916 ret = -EBUSY;
917 goto release_regs;
918 }
919
920 info->clk = clk_get(NULL, "lcd");
921 if (!info->clk || IS_ERR(info->clk)) {
922 printk(KERN_ERR "failed to get lcd clock source\n");
923 ret = -ENOENT;
924 goto release_irq;
925 }
926
927 clk_enable(info->clk);
928 dprintk("got and enabled clock\n");
929
930 msleep(1);
931
932 info->clk_rate = clk_get_rate(info->clk);
933
934 /* find maximum required memory size for display */
935 for (i = 0; i < mach_info->num_displays; i++) {
936 unsigned long smem_len = mach_info->displays[i].xres;
937
938 smem_len *= mach_info->displays[i].yres;
939 smem_len *= mach_info->displays[i].bpp;
940 smem_len >>= 3;
941 if (fbinfo->fix.smem_len < smem_len)
942 fbinfo->fix.smem_len = smem_len;
943 }
944
945 /* Initialize video memory */
946 ret = s3c2410fb_map_video_memory(fbinfo);
947 if (ret) {
948 printk(KERN_ERR "Failed to allocate video RAM: %d\n", ret);
949 ret = -ENOMEM;
950 goto release_clock;
951 }
952
953 dprintk("got video memory\n");
954
955 fbinfo->var.xres = display->xres;
956 fbinfo->var.yres = display->yres;
957 fbinfo->var.bits_per_pixel = display->bpp;
958
959 s3c2410fb_init_registers(fbinfo);
960
961 s3c2410fb_check_var(&fbinfo->var, fbinfo);
962
963 ret = s3c2410fb_cpufreq_register(info);
964 if (ret < 0) {
965 dev_err(&pdev->dev, "Failed to register cpufreq\n");
966 goto free_video_memory;
967 }
968
969 ret = register_framebuffer(fbinfo);
970 if (ret < 0) {
971 printk(KERN_ERR "Failed to register framebuffer device: %d\n",
972 ret);
973 goto free_cpufreq;
974 }
975
976 /* create device files */
977 ret = device_create_file(&pdev->dev, &dev_attr_debug);
978 if (ret) {
979 printk(KERN_ERR "failed to add debug attribute\n");
980 }
981
982 printk(KERN_INFO "fb%d: %s frame buffer device\n",
983 fbinfo->node, fbinfo->fix.id);
984
985 return 0;
986
987 free_cpufreq:
988 s3c2410fb_cpufreq_deregister(info);
989 free_video_memory:
990 s3c2410fb_unmap_video_memory(fbinfo);
991 release_clock:
992 clk_disable(info->clk);
993 clk_put(info->clk);
994 release_irq:
995 free_irq(irq, info);
996 release_regs:
997 iounmap(info->io);
998 release_mem:
999 release_resource(info->mem);
1000 kfree(info->mem);
1001 dealloc_fb:
1002 platform_set_drvdata(pdev, NULL);
1003 framebuffer_release(fbinfo);
1004 return ret;
1005 }
1006
1007 static int __init s3c2410