Commit 72c04af9 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Linus Torvalds

fbdev: sh_mobile_lcdc: Don't confuse line size with pitch

When using the MERAM the LCDC line size needs to be programmed with a
MERAM-specific value different than the real frame buffer pitch. Fix it.
Reported-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: stable@vger.kernel.org  # for 3.4
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 47136855
...@@ -758,7 +758,7 @@ static void __sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv) ...@@ -758,7 +758,7 @@ static void __sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv)
} }
lcdc_write_chan(ch, LDDFR, tmp); lcdc_write_chan(ch, LDDFR, tmp);
lcdc_write_chan(ch, LDMLSR, ch->pitch); lcdc_write_chan(ch, LDMLSR, ch->line_size);
lcdc_write_chan(ch, LDSA1R, ch->base_addr_y); lcdc_write_chan(ch, LDSA1R, ch->base_addr_y);
if (ch->format->yuv) if (ch->format->yuv)
lcdc_write_chan(ch, LDSA2R, ch->base_addr_c); lcdc_write_chan(ch, LDSA2R, ch->base_addr_c);
...@@ -847,6 +847,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv) ...@@ -847,6 +847,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv)
ch->base_addr_y = ch->dma_handle; ch->base_addr_y = ch->dma_handle;
ch->base_addr_c = ch->base_addr_y + ch->xres * ch->yres_virtual; ch->base_addr_c = ch->base_addr_y + ch->xres * ch->yres_virtual;
ch->line_size = ch->pitch;
/* Enable MERAM if possible. */ /* Enable MERAM if possible. */
if (mdev == NULL || mdev->ops == NULL || if (mdev == NULL || mdev->ops == NULL ||
...@@ -882,7 +883,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv) ...@@ -882,7 +883,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv)
meram = mdev->ops->meram_register(mdev, ch->cfg->meram_cfg, meram = mdev->ops->meram_register(mdev, ch->cfg->meram_cfg,
ch->pitch, ch->yres, pixelformat, ch->pitch, ch->yres, pixelformat,
&ch->pitch); &ch->line_size);
if (!IS_ERR(meram)) { if (!IS_ERR(meram)) {
mdev->ops->meram_update(mdev, meram, mdev->ops->meram_update(mdev, meram,
ch->base_addr_y, ch->base_addr_c, ch->base_addr_y, ch->base_addr_c,
......
...@@ -84,6 +84,7 @@ struct sh_mobile_lcdc_chan { ...@@ -84,6 +84,7 @@ struct sh_mobile_lcdc_chan {
unsigned long base_addr_y; unsigned long base_addr_y;
unsigned long base_addr_c; unsigned long base_addr_c;
unsigned int line_size;
int (*notify)(struct sh_mobile_lcdc_chan *ch, int (*notify)(struct sh_mobile_lcdc_chan *ch,
enum sh_mobile_lcdc_entity_event event, enum sh_mobile_lcdc_entity_event event,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment