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

Commit 248dbc23 authored by Dave Airlie's avatar Dave Airlie
Browse files

drm: move the fb bpp/depth helper into the core.



This is used by nearly everyone including vmwgfx which doesn't generally
use the fb helper.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 435ddd92
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -3136,3 +3136,44 @@ int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,

	return dev->driver->dumb_destroy(file_priv, dev, args->handle);
}

/*
 * Just need to support RGB formats here for compat with code that doesn't
 * use pixel formats directly yet.
 */
void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
			  int *bpp)
{
	switch (format) {
	case DRM_FOURCC_RGB332:
		*depth = 8;
		*bpp = 8;
		break;
	case DRM_FOURCC_RGB555:
		*depth = 15;
		*bpp = 16;
		break;
	case DRM_FOURCC_RGB565:
		*depth = 16;
		*bpp = 16;
		break;
	case DRM_FOURCC_RGB24:
		*depth = 24;
		*bpp = 32;
		break;
	case DRM_INTEL_RGB30:
		*depth = 30;
		*bpp = 32;
		break;
	case DRM_FOURCC_RGB32:
		*depth = 32;
		*bpp = 32;
		break;
	default:
		DRM_DEBUG_KMS("unsupported pixel format\n");
		*depth = 0;
		*bpp = 0;
		break;
	}
}
EXPORT_SYMBOL(drm_fb_get_bpp_depth);
+1 −42
Original line number Diff line number Diff line
@@ -811,54 +811,13 @@ void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
}
EXPORT_SYMBOL(drm_helper_connector_dpms);

/*
 * Just need to support RGB formats here for compat with code that doesn't
 * use pixel formats directly yet.
 */
void drm_helper_get_fb_bpp_depth(uint32_t format, unsigned int *depth,
				 int *bpp)
{
	switch (format) {
	case DRM_FOURCC_RGB332:
		*depth = 8;
		*bpp = 8;
		break;
	case DRM_FOURCC_RGB555:
		*depth = 15;
		*bpp = 16;
		break;
	case DRM_FOURCC_RGB565:
		*depth = 16;
		*bpp = 16;
		break;
	case DRM_FOURCC_RGB24:
		*depth = 24;
		*bpp = 32;
		break;
	case DRM_INTEL_RGB30:
		*depth = 30;
		*bpp = 32;
		break;
	case DRM_FOURCC_RGB32:
		*depth = 32;
		*bpp = 32;
		break;
	default:
		DRM_DEBUG_KMS("unsupported pixel format\n");
		*depth = 0;
		*bpp = 0;
		break;
	}
}
EXPORT_SYMBOL(drm_helper_get_fb_bpp_depth);

int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
				   struct drm_mode_fb_cmd2 *mode_cmd)
{
	fb->width = mode_cmd->width;
	fb->height = mode_cmd->height;
	fb->pitch = mode_cmd->pitches[0];
	drm_helper_get_fb_bpp_depth(mode_cmd->pixel_format, &fb->depth,
	drm_fb_get_bpp_depth(mode_cmd->pixel_format, &fb->depth,
				    &fb->bits_per_pixel);
	fb->pixel_format = mode_cmd->pixel_format;

+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ static int psb_framebuffer_init(struct drm_device *dev,
	u32 bpp, depth;
	int ret;

	drm_helper_get_fb_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);
	drm_fb_get_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);

	if (mode_cmd->pitches[0] & 63)
		return -EINVAL;
+1 −1
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev,
	int height = mode_cmd->height;
	u32 bpp, depth;

	drm_helper_get_fb_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);
	drm_fb_get_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);

	/* need to align pitch with crtc limits */
	mode_cmd->pitches[0] = radeon_align_pitch(rdev, mode_cmd->width, bpp,
+1 −1
Original line number Diff line number Diff line
@@ -1006,7 +1006,7 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev,
	mode_cmd.height = mode_cmd2->height;
	mode_cmd.pitch = mode_cmd2->pitches[0];
	mode_cmd.handle = mode_cmd2->handles[0];
	drm_helper_get_fb_bpp_depth(mode_cmd2->pixel_format, &mode_cmd.depth,
	drm_fb_get_bpp_depth(mode_cmd2->pixel_format, &mode_cmd.depth,
				    &mode_cmd.bpp);

	/**
Loading