Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 568c5e45 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm: Share the code to compute color plane dimesions



framebuffer_check() has some hand rolled code to compute the color plane
dimensions based on the subsampled information. Let's share the code
between framebuffer_check() and drm_framebuffer_plane_{width,height}().

Cc: Ben Widawsky <ben@bwidawsk.net>
Cc: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170321181218.10042-2-ville.syrjala@linux.intel.com


Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
parent eea54ed4
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
@@ -126,6 +126,24 @@ int drm_mode_addfb(struct drm_device *dev,
	return 0;
}

static int fb_plane_width(int width,
			  const struct drm_format_info *format, int plane)
{
	if (plane == 0)
		return width;

	return width / format->hsub;
}

static int fb_plane_height(int height,
			   const struct drm_format_info *format, int plane)
{
	if (plane == 0)
		return height;

	return height / format->vsub;
}

static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
{
	const struct drm_format_info *info;
@@ -151,8 +169,8 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
	}

	for (i = 0; i < info->num_planes; i++) {
		unsigned int width = r->width / (i != 0 ? info->hsub : 1);
		unsigned int height = r->height / (i != 0 ? info->vsub : 1);
		unsigned int width = fb_plane_width(r->width, info, i);
		unsigned int height = fb_plane_height(r->height, info, i);
		unsigned int cpp = info->cpp[i];

		if (!r->handles[i]) {
@@ -816,10 +834,7 @@ int drm_framebuffer_plane_width(int width,
	if (plane >= fb->format->num_planes)
		return 0;

	if (plane == 0)
		return width;

	return width / fb->format->hsub;
	return fb_plane_width(width, fb->format, plane);
}
EXPORT_SYMBOL(drm_framebuffer_plane_width);

@@ -838,9 +853,6 @@ int drm_framebuffer_plane_height(int height,
	if (plane >= fb->format->num_planes)
		return 0;

	if (plane == 0)
		return height;

	return height / fb->format->vsub;
	return fb_plane_height(height, fb->format, plane);
}
EXPORT_SYMBOL(drm_framebuffer_plane_height);