fbdev: sh_mobile_lcdc: Store the frame buffer base address when panning
When the frame buffer base address is changed by a panning operation, store it in the channel structure. It will be reused when runtime PM code will use __sh_mobile_lcdc_start(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
9a217e3444
commit
49d79ba2e3
|
@ -915,33 +915,29 @@ static int sh_mobile_fb_pan_display(struct fb_var_screeninfo *var,
|
||||||
base_addr_c += 2 * var->xoffset;
|
base_addr_c += 2 * var->xoffset;
|
||||||
else
|
else
|
||||||
base_addr_c += var->xoffset;
|
base_addr_c += var->xoffset;
|
||||||
} else
|
}
|
||||||
base_addr_c = 0;
|
|
||||||
|
|
||||||
if (!ch->meram_enabled) {
|
if (ch->meram_enabled) {
|
||||||
lcdc_write_chan_mirror(ch, LDSA1R, base_addr_y);
|
|
||||||
if (base_addr_c)
|
|
||||||
lcdc_write_chan_mirror(ch, LDSA2R, base_addr_c);
|
|
||||||
} else {
|
|
||||||
struct sh_mobile_meram_cfg *cfg;
|
struct sh_mobile_meram_cfg *cfg;
|
||||||
struct sh_mobile_meram_info *mdev;
|
struct sh_mobile_meram_info *mdev;
|
||||||
unsigned long icb_addr_y, icb_addr_c;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
cfg = ch->cfg.meram_cfg;
|
cfg = ch->cfg.meram_cfg;
|
||||||
mdev = priv->meram_dev;
|
mdev = priv->meram_dev;
|
||||||
ret = mdev->ops->meram_update(mdev, cfg,
|
ret = mdev->ops->meram_update(mdev, cfg,
|
||||||
base_addr_y, base_addr_c,
|
base_addr_y, base_addr_c,
|
||||||
&icb_addr_y, &icb_addr_c);
|
&base_addr_y, &base_addr_c);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
lcdc_write_chan_mirror(ch, LDSA1R, icb_addr_y);
|
|
||||||
if (icb_addr_c)
|
|
||||||
lcdc_write_chan_mirror(ch, LDSA2R, icb_addr_c);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ch->base_addr_y = base_addr_y;
|
||||||
|
ch->base_addr_c = base_addr_c;
|
||||||
|
|
||||||
|
lcdc_write_chan_mirror(ch, LDSA1R, base_addr_y);
|
||||||
|
if (var->nonstd)
|
||||||
|
lcdc_write_chan_mirror(ch, LDSA2R, base_addr_c);
|
||||||
|
|
||||||
if (lcdc_chan_is_sublcd(ch))
|
if (lcdc_chan_is_sublcd(ch))
|
||||||
lcdc_write(ch->lcdc, _LDRCNTR, ldrcntr ^ LDRCNTR_SRS);
|
lcdc_write(ch->lcdc, _LDRCNTR, ldrcntr ^ LDRCNTR_SRS);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue