summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/armada/armada_plane.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2018-07-30 11:52:34 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2018-07-30 11:52:34 +0100
commit4aafe00e2f6bb43656d690b6241f80bb8c236168 (patch)
tree6d50534e2288804bc1f930e3614419cfc86b6b17 /drivers/gpu/drm/armada/armada_plane.c
parentb4df3ba0d76823cb5e548505de104837d89aa5a9 (diff)
drm/armada: provide pitches from armada_drm_plane_calc_addrs()
Provide the framebuffer pitches from armada_drm_plane_calc_addrs() as well as the base addresses for each plane. Since this is now about more than just addresses, rename to armada_drm_plane_calc(). Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'drivers/gpu/drm/armada/armada_plane.c')
-rw-r--r--drivers/gpu/drm/armada/armada_plane.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/gpu/drm/armada/armada_plane.c b/drivers/gpu/drm/armada/armada_plane.c
index c426c92c79d9..3c9414c56aca 100644
--- a/drivers/gpu/drm/armada/armada_plane.c
+++ b/drivers/gpu/drm/armada/armada_plane.c
@@ -35,7 +35,8 @@ static const uint32_t armada_primary_formats[] = {
DRM_FORMAT_BGR565,
};
-void armada_drm_plane_calc_addrs(struct drm_plane_state *state, u32 addrs[3])
+void armada_drm_plane_calc(struct drm_plane_state *state, u32 addrs[3],
+ u16 pitches[3])
{
struct drm_framebuffer *fb = state->fb;
const struct drm_format_info *format = fb->format;
@@ -53,37 +54,42 @@ void armada_drm_plane_calc_addrs(struct drm_plane_state *state, u32 addrs[3])
addrs[0] = addr + fb->offsets[0] + y * fb->pitches[0] +
x * format->cpp[0];
+ pitches[0] = fb->pitches[0];
y /= format->vsub;
x /= format->hsub;
- for (i = 1; i < num_planes; i++)
+ for (i = 1; i < num_planes; i++) {
addrs[i] = addr + fb->offsets[i] + y * fb->pitches[i] +
x * format->cpp[i];
- for (; i < 3; i++)
+ pitches[i] = fb->pitches[i];
+ }
+ for (; i < 3; i++) {
addrs[i] = 0;
+ pitches[i] = 0;
+ }
}
static unsigned armada_drm_crtc_calc_fb(struct drm_plane_state *state,
struct armada_regs *regs, bool interlaced)
{
- unsigned pitch = state->fb->pitches[0];
+ u16 pitches[3];
u32 addrs[3], addr_odd, addr_even;
unsigned i = 0;
- armada_drm_plane_calc_addrs(state, addrs);
+ armada_drm_plane_calc(state, addrs, pitches);
addr_odd = addr_even = addrs[0];
if (interlaced) {
- addr_even += pitch;
- pitch *= 2;
+ addr_even += pitches[0];
+ pitches[0] *= 2;
}
/* write offset, base, and pitch */
armada_reg_queue_set(regs, i, addr_odd, LCD_CFG_GRA_START_ADDR0);
armada_reg_queue_set(regs, i, addr_even, LCD_CFG_GRA_START_ADDR1);
- armada_reg_queue_mod(regs, i, pitch, 0xffff, LCD_CFG_GRA_PITCH);
+ armada_reg_queue_mod(regs, i, pitches[0], 0xffff, LCD_CFG_GRA_PITCH);
return i;
}