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: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: stable@vger.kernel.org # for 3.4 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
471368557a
commit
72c04af9a2
|
@ -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, LDMLSR, ch->pitch);
|
||||
lcdc_write_chan(ch, LDMLSR, ch->line_size);
|
||||
lcdc_write_chan(ch, LDSA1R, ch->base_addr_y);
|
||||
if (ch->format->yuv)
|
||||
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)
|
|||
|
||||
ch->base_addr_y = ch->dma_handle;
|
||||
ch->base_addr_c = ch->base_addr_y + ch->xres * ch->yres_virtual;
|
||||
ch->line_size = ch->pitch;
|
||||
|
||||
/* Enable MERAM if possible. */
|
||||
if (mdev == NULL || mdev->ops == NULL ||
|
||||
|
@ -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,
|
||||
ch->pitch, ch->yres, pixelformat,
|
||||
&ch->pitch);
|
||||
&ch->line_size);
|
||||
if (!IS_ERR(meram)) {
|
||||
mdev->ops->meram_update(mdev, meram,
|
||||
ch->base_addr_y, ch->base_addr_c,
|
||||
|
|
|
@ -84,6 +84,7 @@ struct sh_mobile_lcdc_chan {
|
|||
|
||||
unsigned long base_addr_y;
|
||||
unsigned long base_addr_c;
|
||||
unsigned int line_size;
|
||||
|
||||
int (*notify)(struct sh_mobile_lcdc_chan *ch,
|
||||
enum sh_mobile_lcdc_entity_event event,
|
||||
|
|
Loading…
Reference in New Issue