mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
drm/fourcc: Pass the format_info pointer to drm_format_plane_width/height
So far, the drm_format_plane_height/width functions were operating on the format's fourcc and was doing a lookup to retrieve the drm_format_info structure and return the cpp. However, this is inefficient since in most cases, we will have the drm_format_info pointer already available so we shouldn't have to perform a new lookup. Some drm_fourcc functions also already operate on the drm_format_info pointer for that reason, so the API is quite inconsistent there. Let's follow the latter pattern and remove the extra lookup while being a bit more consistent. In order to be extra consistent, also rename that function to drm_format_info_plane_cpp and to a static function in the header to match the current policy. The parameters order have also be changed to match the other functions prototype. Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com> Link: https://patchwork.freedesktop.org/patch/msgid/514af1d489d80b8b1767e3716b663ce5103da6eb.1558002671.git-series.maxime.ripard@bootlin.com
This commit is contained in:
parent
24c478ead0
commit
bf39607c16
3 changed files with 50 additions and 56 deletions
|
@ -332,54 +332,6 @@ drm_get_format_info(struct drm_device *dev,
|
|||
}
|
||||
EXPORT_SYMBOL(drm_get_format_info);
|
||||
|
||||
/**
|
||||
* drm_format_plane_width - width of the plane given the first plane
|
||||
* @width: width of the first plane
|
||||
* @format: pixel format
|
||||
* @plane: plane index
|
||||
*
|
||||
* Returns:
|
||||
* The width of @plane, given that the width of the first plane is @width.
|
||||
*/
|
||||
int drm_format_plane_width(int width, uint32_t format, int plane)
|
||||
{
|
||||
const struct drm_format_info *info;
|
||||
|
||||
info = drm_format_info(format);
|
||||
if (!info || plane >= info->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return width;
|
||||
|
||||
return width / info->hsub;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_format_plane_width);
|
||||
|
||||
/**
|
||||
* drm_format_plane_height - height of the plane given the first plane
|
||||
* @height: height of the first plane
|
||||
* @format: pixel format
|
||||
* @plane: plane index
|
||||
*
|
||||
* Returns:
|
||||
* The height of @plane, given that the height of the first plane is @height.
|
||||
*/
|
||||
int drm_format_plane_height(int height, uint32_t format, int plane)
|
||||
{
|
||||
const struct drm_format_info *info;
|
||||
|
||||
info = drm_format_info(format);
|
||||
if (!info || plane >= info->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return height;
|
||||
|
||||
return height / info->vsub;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_format_plane_height);
|
||||
|
||||
/**
|
||||
* drm_format_info_block_width - width in pixels of block.
|
||||
* @info: pixel format info
|
||||
|
|
|
@ -466,8 +466,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
|
|||
priv->viu.vd1_addr2 = gem->paddr + fb->offsets[2];
|
||||
priv->viu.vd1_stride2 = fb->pitches[2];
|
||||
priv->viu.vd1_height2 =
|
||||
drm_format_plane_height(fb->height,
|
||||
fb->format->format, 2);
|
||||
drm_format_info_plane_height(fb->format,
|
||||
fb->height, 2);
|
||||
DRM_DEBUG("plane 2 addr 0x%x stride %d height %d\n",
|
||||
priv->viu.vd1_addr2,
|
||||
priv->viu.vd1_stride2,
|
||||
|
@ -478,8 +478,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
|
|||
priv->viu.vd1_addr1 = gem->paddr + fb->offsets[1];
|
||||
priv->viu.vd1_stride1 = fb->pitches[1];
|
||||
priv->viu.vd1_height1 =
|
||||
drm_format_plane_height(fb->height,
|
||||
fb->format->format, 1);
|
||||
drm_format_info_plane_height(fb->format,
|
||||
fb->height, 1);
|
||||
DRM_DEBUG("plane 1 addr 0x%x stride %d height %d\n",
|
||||
priv->viu.vd1_addr1,
|
||||
priv->viu.vd1_stride1,
|
||||
|
@ -490,8 +490,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
|
|||
priv->viu.vd1_addr0 = gem->paddr + fb->offsets[0];
|
||||
priv->viu.vd1_stride0 = fb->pitches[0];
|
||||
priv->viu.vd1_height0 =
|
||||
drm_format_plane_height(fb->height,
|
||||
fb->format->format, 0);
|
||||
drm_format_info_plane_height(fb->format,
|
||||
fb->height, 0);
|
||||
DRM_DEBUG("plane 0 addr 0x%x stride %d height %d\n",
|
||||
priv->viu.vd1_addr0,
|
||||
priv->viu.vd1_stride0,
|
||||
|
|
|
@ -277,6 +277,50 @@ int drm_format_info_plane_cpp(const struct drm_format_info *info, int plane)
|
|||
return info->cpp[plane];
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_format_info_plane_width - width of the plane given the first plane
|
||||
* @format: pixel format info
|
||||
* @width: width of the first plane
|
||||
* @plane: plane index
|
||||
*
|
||||
* Returns:
|
||||
* The width of @plane, given that the width of the first plane is @width.
|
||||
*/
|
||||
static inline
|
||||
int drm_format_info_plane_width(const struct drm_format_info *info, int width,
|
||||
int plane)
|
||||
{
|
||||
if (!info || plane >= info->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return width;
|
||||
|
||||
return width / info->hsub;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_format_info_plane_height - height of the plane given the first plane
|
||||
* @format: pixel format info
|
||||
* @height: height of the first plane
|
||||
* @plane: plane index
|
||||
*
|
||||
* Returns:
|
||||
* The height of @plane, given that the height of the first plane is @height.
|
||||
*/
|
||||
static inline
|
||||
int drm_format_info_plane_height(const struct drm_format_info *info, int height,
|
||||
int plane)
|
||||
{
|
||||
if (!info || plane >= info->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return height;
|
||||
|
||||
return height / info->vsub;
|
||||
}
|
||||
|
||||
const struct drm_format_info *__drm_format_info(u32 format);
|
||||
const struct drm_format_info *drm_format_info(u32 format);
|
||||
const struct drm_format_info *
|
||||
|
@ -285,8 +329,6 @@ drm_get_format_info(struct drm_device *dev,
|
|||
uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
|
||||
uint32_t drm_driver_legacy_fb_format(struct drm_device *dev,
|
||||
uint32_t bpp, uint32_t depth);
|
||||
int drm_format_plane_width(int width, uint32_t format, int plane);
|
||||
int drm_format_plane_height(int height, uint32_t format, int plane);
|
||||
unsigned int drm_format_info_block_width(const struct drm_format_info *info,
|
||||
int plane);
|
||||
unsigned int drm_format_info_block_height(const struct drm_format_info *info,
|
||||
|
|
Loading…
Reference in a new issue