Replace uses of struct drm_format_info's cpp with appropriate interfaces.
The cpp field contains the characters per pixel. It is deprecated and
should be avoided.

Calculate the line width in bytes with drm_format_info_min_pitch(). This
is the preferred way of getting pixel and line sizes.

Program HIB_CRT_DISP_CTL_FORMAT from the format's 4CC code instead of
calculating the field's value from the cpp.

Signed-off-by: Thomas Zimmermann <[email protected]>
---
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c 
b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 2e6e189bec1a..79c33c778d2c 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -100,8 +100,8 @@ static int hibmc_plane_atomic_check(struct drm_plane *plane,
 static void hibmc_plane_atomic_update(struct drm_plane *plane,
                                      struct drm_atomic_commit *state)
 {
-       struct drm_plane_state *new_state = 
drm_atomic_get_new_plane_state(state,
-                                                                          
plane);
+       struct drm_plane_state *new_state = 
drm_atomic_get_new_plane_state(state, plane);
+       struct drm_framebuffer *fb = new_state->fb;
        u32 reg;
        s64 gpu_addr = 0;
        u32 line_l;
@@ -119,7 +119,7 @@ static void hibmc_plane_atomic_update(struct drm_plane 
*plane,
 
        writel(gpu_addr, priv->mmio + HIBMC_CRT_FB_ADDRESS);
 
-       reg = new_state->fb->width * (new_state->fb->format->cpp[0]);
+       reg = drm_format_info_min_pitch(fb->format, 0, fb->width);
 
        line_l = new_state->fb->pitches[0];
        writel(HIBMC_FIELD(HIBMC_CRT_FB_WIDTH_WIDTH, reg) |
@@ -129,8 +129,14 @@ static void hibmc_plane_atomic_update(struct drm_plane 
*plane,
        /* SET PIXEL FORMAT */
        reg = readl(priv->mmio + HIBMC_CRT_DISP_CTL);
        reg &= ~HIBMC_CRT_DISP_CTL_FORMAT_MASK;
-       reg |= HIBMC_FIELD(HIBMC_CRT_DISP_CTL_FORMAT,
-                          new_state->fb->format->cpp[0] * 8 / 16);
+       switch (fb->format->format) {
+       case DRM_FORMAT_XRGB8888:
+               reg |= HIBMC_FIELD(HIBMC_CRT_DISP_CTL_FORMAT, 2);
+               break;
+       case DRM_FORMAT_RGB565:
+               reg |= HIBMC_FIELD(HIBMC_CRT_DISP_CTL_FORMAT, 1);
+               break;
+       }
        writel(reg, priv->mmio + HIBMC_CRT_DISP_CTL);
 }
 
-- 
2.54.0

Reply via email to