On Fri, Nov 23, 2018 at 10:24:59AM +0100, Paul Kocialkowski wrote:
> Semi-planar YUV formats use two distinct planes, one for luminance and
> one for chrominance. To add support for them, we need to configure the
> second line stride and buffer address registers to setup the second YUV
> plane.
> 
> New definitions are introduced to configure the input format register
> for the YUV420 and YUV422 semi-planar formats.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkow...@bootlin.com>
> ---
>  drivers/gpu/drm/sun4i/sun4i_frontend.c | 52 +++++++++++++++++++++++---
>  drivers/gpu/drm/sun4i/sun4i_frontend.h |  6 +++
>  drivers/gpu/drm/sun4i/sun4i_layer.c    |  4 ++
>  3 files changed, 57 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/sun4i/sun4i_frontend.c 
> b/drivers/gpu/drm/sun4i/sun4i_frontend.c
> index f443e8e1d8ec..e31438e5cabd 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_frontend.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_frontend.c
> @@ -118,11 +118,23 @@ void sun4i_frontend_update_buffer(struct sun4i_frontend 
> *frontend,
>       regmap_write(frontend->regs, SUN4I_FRONTEND_LINESTRD0_REG,
>                    fb->pitches[0]);
>  
> +     if (fb->format->num_planes > 1)
> +             regmap_write(frontend->regs, SUN4I_FRONTEND_LINESTRD1_REG,
> +                          fb->pitches[1]);
> +
>       /* Set the physical address of the buffer in memory */
>       paddr = drm_fb_cma_get_gem_addr(fb, state, 0);
>       paddr -= PHYS_OFFSET;
> -     DRM_DEBUG_DRIVER("Setting buffer address to %pad\n", &paddr);
> +     DRM_DEBUG_DRIVER("Setting buffer #0 address to %pad\n", &paddr);
>       regmap_write(frontend->regs, SUN4I_FRONTEND_BUF_ADDR0_REG, paddr);
> +
> +     if (fb->format->num_planes > 1) {
> +             paddr = drm_fb_cma_get_gem_addr(fb, state, 1);
> +             paddr -= PHYS_OFFSET;
> +             DRM_DEBUG_DRIVER("Setting buffer #1 address to %pad\n", &paddr);
> +             regmap_write(frontend->regs, SUN4I_FRONTEND_BUF_ADDR1_REG,
> +                          paddr);
> +     }
>  }
>  EXPORT_SYMBOL(sun4i_frontend_update_buffer);
>  
> @@ -130,6 +142,8 @@ static int 
> sun4i_frontend_drm_format_to_input_fmt(uint32_t fmt, u32 *val)
>  {
>       if (!drm_format_is_yuv(fmt))
>               *val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_RGB;
> +     else if (drm_format_is_yuv_sampling_420(fmt))
> +             *val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV420;
>       else if (drm_format_is_yuv_sampling_422(fmt))
>               *val = SUN4I_FRONTEND_INPUT_FMT_DATA_FMT_YUV422;
>       else
> @@ -140,12 +154,20 @@ static int 
> sun4i_frontend_drm_format_to_input_fmt(uint32_t fmt, u32 *val)
>  
>  static int sun4i_frontend_drm_format_to_input_mode(uint32_t fmt, u32 *val)
>  {
> -     if (drm_format_num_planes(fmt) == 1)
> +     int num_planes = drm_format_num_planes(fmt);
> +
> +     switch (num_planes) {
> +     case 1:

You seem to use either the helper or retrieve the structure field
directly to access the number of planes. I'm fine either way, but this
should be consistent.

Maxime

-- 
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Attachment: signature.asc
Description: PGP signature

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to