mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
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: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
435ddd926e
commit
248dbc2350
8 changed files with 49 additions and 48 deletions
|
@ -3136,3 +3136,44 @@ int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
|
||||||
|
|
||||||
return dev->driver->dumb_destroy(file_priv, dev, args->handle);
|
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);
|
||||||
|
|
|
@ -811,54 +811,13 @@ void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_helper_connector_dpms);
|
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,
|
int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
|
||||||
struct drm_mode_fb_cmd2 *mode_cmd)
|
struct drm_mode_fb_cmd2 *mode_cmd)
|
||||||
{
|
{
|
||||||
fb->width = mode_cmd->width;
|
fb->width = mode_cmd->width;
|
||||||
fb->height = mode_cmd->height;
|
fb->height = mode_cmd->height;
|
||||||
fb->pitch = mode_cmd->pitches[0];
|
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->bits_per_pixel);
|
||||||
fb->pixel_format = mode_cmd->pixel_format;
|
fb->pixel_format = mode_cmd->pixel_format;
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,7 @@ static int psb_framebuffer_init(struct drm_device *dev,
|
||||||
u32 bpp, depth;
|
u32 bpp, depth;
|
||||||
int ret;
|
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)
|
if (mode_cmd->pitches[0] & 63)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -116,7 +116,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev,
|
||||||
int height = mode_cmd->height;
|
int height = mode_cmd->height;
|
||||||
u32 bpp, depth;
|
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 */
|
/* need to align pitch with crtc limits */
|
||||||
mode_cmd->pitches[0] = radeon_align_pitch(rdev, mode_cmd->width, bpp,
|
mode_cmd->pitches[0] = radeon_align_pitch(rdev, mode_cmd->width, bpp,
|
||||||
|
|
|
@ -1006,7 +1006,7 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev,
|
||||||
mode_cmd.height = mode_cmd2->height;
|
mode_cmd.height = mode_cmd2->height;
|
||||||
mode_cmd.pitch = mode_cmd2->pitches[0];
|
mode_cmd.pitch = mode_cmd2->pitches[0];
|
||||||
mode_cmd.handle = mode_cmd2->handles[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);
|
&mode_cmd.bpp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -280,7 +280,7 @@ static int psb_framebuffer_init(struct drm_device *dev,
|
||||||
u32 bpp, depth;
|
u32 bpp, depth;
|
||||||
int ret;
|
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)
|
if (mode_cmd->pitches[0] & 63)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -902,4 +902,7 @@ extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
|
||||||
void *data, struct drm_file *file_priv);
|
void *data, struct drm_file *file_priv);
|
||||||
extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
|
extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
|
||||||
void *data, struct drm_file *file_priv);
|
void *data, struct drm_file *file_priv);
|
||||||
|
|
||||||
|
extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
|
||||||
|
int *bpp);
|
||||||
#endif /* __DRM_CRTC_H__ */
|
#endif /* __DRM_CRTC_H__ */
|
||||||
|
|
|
@ -116,8 +116,6 @@ extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder);
|
||||||
|
|
||||||
extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
|
extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
|
||||||
|
|
||||||
extern void drm_helper_get_fb_bpp_depth(uint32_t format, unsigned int *depth,
|
|
||||||
int *bpp);
|
|
||||||
extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
|
extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
|
||||||
struct drm_mode_fb_cmd2 *mode_cmd);
|
struct drm_mode_fb_cmd2 *mode_cmd);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue