ChanSoo Shin <[email protected]> writes:
> Instead of marking the entire display as dirty, calculate
> start_row and end_row based on off/len and mark only those rows.
> This improves performance for partial framebuffer updates.
>
> Signed-off-by: ChanSoo Shin <[email protected]>
> ---
>  drivers/staging/fbtft/fbtft-core.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/fbtft/fbtft-core.c 
> b/drivers/staging/fbtft/fbtft-core.c
> index 8a5ccc8ae0a1..0fbdfdaaa94d 100644
> --- a/drivers/staging/fbtft/fbtft-core.c
> +++ b/drivers/staging/fbtft/fbtft-core.c
> @@ -415,8 +415,11 @@ static void fbtft_ops_damage_range(struct fb_info *info, 
> off_t off, size_t len)
>  {
>       struct fbtft_par *par = info->par;
>  
> -     /* TODO: only mark changed area update all for now */
> -     par->fbtftops.mkdirty(info, -1, 0);
> +     __u32 width = info->var.xres;
> +     __u32 start_row = off / width;
> +     __u32 end_row = (off + len - 1) / width;
> +
> +     par->fbtftops.mkdirty(info, start_row, end_row);

This doesn't look right: mkdirty() takes start row and number of rows,
not start row and end row. Don't be fooled by how mkdirty() is declared,
look at how it is implemented.

Nam

Reply via email to