mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 21:24:00 +08:00
drm/crtc: Remove duplicated ioctl code
Make drm_mode_add_fb() call drm_mode_add_fb2() after converting its args to the new internal format, instead of duplicating code. Also picks up a lot more error checking, which the legacy modes should pass after being converted to the new format. Signed-off-by: Chuck Ebbert <cebbert.lkml@gmail.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
209f5527b7
commit
228f2cb32f
@ -2955,11 +2955,9 @@ int drm_mode_addfb(struct drm_device *dev,
|
|||||||
{
|
{
|
||||||
struct drm_mode_fb_cmd *or = data;
|
struct drm_mode_fb_cmd *or = data;
|
||||||
struct drm_mode_fb_cmd2 r = {};
|
struct drm_mode_fb_cmd2 r = {};
|
||||||
struct drm_mode_config *config = &dev->mode_config;
|
int ret;
|
||||||
struct drm_framebuffer *fb;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
/* Use new struct with format internally */
|
/* convert to new format and call new ioctl */
|
||||||
r.fb_id = or->fb_id;
|
r.fb_id = or->fb_id;
|
||||||
r.width = or->width;
|
r.width = or->width;
|
||||||
r.height = or->height;
|
r.height = or->height;
|
||||||
@ -2967,26 +2965,11 @@ int drm_mode_addfb(struct drm_device *dev,
|
|||||||
r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
|
r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
|
||||||
r.handles[0] = or->handle;
|
r.handles[0] = or->handle;
|
||||||
|
|
||||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
ret = drm_mode_addfb2(dev, &r, file_priv);
|
||||||
return -EINVAL;
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
if ((config->min_width > r.width) || (r.width > config->max_width))
|
or->fb_id = r.fb_id;
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if ((config->min_height > r.height) || (r.height > config->max_height))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
fb = dev->mode_config.funcs->fb_create(dev, file_priv, &r);
|
|
||||||
if (IS_ERR(fb)) {
|
|
||||||
DRM_DEBUG_KMS("could not create framebuffer\n");
|
|
||||||
return PTR_ERR(fb);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_lock(&file_priv->fbs_lock);
|
|
||||||
or->fb_id = fb->base.id;
|
|
||||||
list_add(&fb->filp_head, &file_priv->fbs);
|
|
||||||
DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
|
|
||||||
mutex_unlock(&file_priv->fbs_lock);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user