From 5c2406f1eb6e9b3a0a590ef9f56c737a5c7d9701 Mon Sep 17 00:00:00 2001 From: "Johannes H. Jensen" Date: Sun, 5 Nov 2017 15:46:53 +0100 Subject: [PATCH] staging: fbtft: fb_ssd1331: fix mirrored display When the row scan order is reversed (the default) we also need to reverse the column scan order. This was not done previously, resulting in a mirrored display. Also add support for 180 degree display rotation, in which case simply disable reversed row and column scan order. Tested on an Adafruit 0.96" mini Color OLED display. Signed-off-by: Johannes H. Jensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/fbtft/fb_ssd1331.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/staging/fbtft/fb_ssd1331.c b/drivers/staging/fbtft/fb_ssd1331.c index 9aa9864fcf308..e4a759b54ba03 100644 --- a/drivers/staging/fbtft/fb_ssd1331.c +++ b/drivers/staging/fbtft/fb_ssd1331.c @@ -26,7 +26,13 @@ static int init_display(struct fbtft_par *par) par->fbtftops.reset(par); write_reg(par, 0xae); /* Display Off */ - write_reg(par, 0xa0, 0x70 | (par->bgr << 2)); /* Set Colour Depth */ + + /* Set Column Address Mapping, COM Scan Direction and Colour Depth */ + if (par->info->var.rotate == 180) + write_reg(par, 0xa0, 0x60 | (par->bgr << 2)); + else + write_reg(par, 0xa0, 0x72 | (par->bgr << 2)); + write_reg(par, 0x72); /* RGB colour */ write_reg(par, 0xa1, 0x00); /* Set Display Start Line */ write_reg(par, 0xa2, 0x00); /* Set Display Offset */ -- 2.39.5