struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev, struct drm_file *file, struct drm_mode_fb_cmd *mode_cmd) { struct drm_gem_object *bo; struct drm_framebuffer *fb; bo = drm_gem_object_lookup(dev, file, mode_cmd->handle); if (!bo) { return ERR_PTR(-ENOENT); } fb = omap_framebuffer_init(dev, mode_cmd, bo); if (!fb) { return ERR_PTR(-ENOMEM); } return fb; }
struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev, struct drm_file *file, struct drm_mode_fb_cmd2 *mode_cmd) { struct drm_gem_object *bos[4]; struct drm_framebuffer *fb; int ret; ret = objects_lookup(dev, file, mode_cmd->pixel_format, bos, mode_cmd->handles); if (ret) return ERR_PTR(ret); fb = omap_framebuffer_init(dev, mode_cmd, bos); if (IS_ERR(fb)) { int i, n = drm_format_num_planes(mode_cmd->pixel_format); for (i = 0; i < n; i++) drm_gem_object_unreference_unlocked(bos[i]); return fb; } return fb; }