Some screen sizes using st7789v chips are different from 240x320, and offsets need to be set to display all images properly. Signed-off-by: purofle <purofle@xxxxxxxxx> --- drivers/staging/fbtft/fb_st7789v.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c index 861a15414..d47ab4262 100644 --- a/drivers/staging/fbtft/fb_st7789v.c +++ b/drivers/staging/fbtft/fb_st7789v.c @@ -30,6 +30,12 @@ #define HSD20_IPS 1 +#define WIDTH 240 +#define HEIGHT 320 + +#define LEFT_OFFSET 0 +#define TOP_OFFSET 0 + /** * enum st7789v_command - ST7789V display controller commands * @@ -349,6 +355,21 @@ static int set_gamma(struct fbtft_par *par, u32 *curves) return 0; } +static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye) +{ + unsigned int x = xs + TOP_OFFSET, y = xe + TOP_OFFSET; + + write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS, (x >> 8) & 0xFF, xs & 0xFF, + (y >> 8) & 0xFF, xe & 0xFF); + + x = ys + LEFT_OFFSET, y = ye + LEFT_OFFSET; + + write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS, (x >> 8) & 0xFF, ys & 0xFF, + (y >> 8) & 0xFF, ye & 0xFF); + + write_reg(par, MIPI_DCS_WRITE_MEMORY_START); +} + /** * blank() - blank the display * @@ -379,6 +400,7 @@ static struct fbtft_display display = { .set_var = set_var, .set_gamma = set_gamma, .blank = blank, + .set_addr_win = set_addr_win, }, }; -- 2.44.0