int s3cfb_alloc_framebuffer(struct s3cfb_global *fbdev, int fimd_id) { struct s3c_platform_fb *pdata = to_fb_plat(fbdev->dev); int ret = 0; int i; fbdev->fb = kmalloc(pdata->nr_wins * sizeof(struct fb_info *), GFP_KERNEL); if (!fbdev->fb) { dev_err(fbdev->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc; } for (i = 0; i < pdata->nr_wins; i++) { fbdev->fb[i] = framebuffer_alloc(sizeof(struct s3cfb_window), fbdev->dev); if (!fbdev->fb[i]) { dev_err(fbdev->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc_fb; } ret = s3cfb_init_fbinfo(fbdev, i); if (ret) { dev_err(fbdev->dev, "failed to allocate memory for fb%d\n", i); ret = -ENOMEM; goto err_alloc_fb; } if (i == pdata->default_win) if (s3cfb_map_default_video_memory(fbdev, fbdev->fb[i], fimd_id)) { dev_err(fbdev->dev, "failed to map video memory " "for default window (%d)\n", i); ret = -ENOMEM; goto err_alloc_fb; } sec_getlog_supply_fbinfo((void *)fbdev->fb[i]->fix.smem_start, fbdev->fb[i]->var.xres, fbdev->fb[i]->var.yres, fbdev->fb[i]->var.bits_per_pixel, 2); } return 0; err_alloc_fb: for (i = 0; i < pdata->nr_wins; i++) { if (fbdev->fb[i]) framebuffer_release(fbdev->fb[i]); } kfree(fbdev->fb); err_alloc: return ret; }
static int s3cfb_alloc_framebuffer(void) { struct s3c_platform_fb *pdata = to_fb_plat(fbdev->dev); int ret, i; /* alloc for framebuffers */ fbdev->fb = kmalloc(pdata->nr_wins * sizeof(struct fb_info *), GFP_KERNEL); if (!fbdev->fb) { dev_err(fbdev->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc; } /* alloc for each framebuffer */ for (i = 0; i < pdata->nr_wins; i++) { fbdev->fb[i] = framebuffer_alloc(sizeof(struct s3cfb_window), fbdev->dev); if (!fbdev->fb[i]) { dev_err(fbdev->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc_fb; } ret = s3cfb_init_fbinfo(i); if (ret) { dev_err(fbdev->dev, "failed to allocate memory for fb%d\n", i); ret = -ENOMEM; goto err_alloc_fb; } if (i == pdata->default_win) { if (s3cfb_map_default_video_memory(fbdev->fb[i])) { dev_err(fbdev->dev, "failed to map video memory " "for default window (%d)\n", i); ret = -ENOMEM; goto err_alloc_fb; } } } return 0; err_alloc_fb: for (i = 0; i < pdata->nr_wins; i++) { if (fbdev->fb[i]) framebuffer_release(fbdev->fb[i]); } kfree(fbdev->fb); err_alloc: return ret; }
static int s3cfb_alloc_framebuffer(struct s3cfb_global *ctrl) { struct s3c_platform_fb *pdata = to_fb_plat(ctrl->dev); int ret, i; ctrl->fb = kmalloc(pdata->nr_wins * sizeof(*(ctrl->fb)), GFP_KERNEL); if (!ctrl->fb) { dev_err(ctrl->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc; } for (i = 0; i < pdata->nr_wins; i++) { ctrl->fb[i] = framebuffer_alloc(sizeof(*ctrl->fb), ctrl->dev); if (!ctrl->fb[i]) { dev_err(ctrl->dev, "not enough memory\n"); ret = -ENOMEM; goto err_alloc_fb; } s3cfb_init_fbinfo(ctrl, i); if (i == pdata->default_win) { if (s3cfb_map_video_memory(ctrl->fb[i])) { dev_err(ctrl->dev, "failed to map video memory " "for default window (%d)\n", i); ret = -ENOMEM; goto err_map_video_mem; } } } return 0; err_alloc_fb: while (--i >= 0) { if (i == pdata->default_win) s3cfb_unmap_default_video_memory(ctrl->fb[i]); err_map_video_mem: framebuffer_release(ctrl->fb[i]); } kfree(ctrl->fb); err_alloc: return ret; }