diff --git a/FunKey/board/funkey/patches/linux/0021_fbtft_fixed_softTearing_lowBatIcon.patch b/FunKey/board/funkey/patches/linux/0021_fbtft_fixed_softTearing_lowBatIcon.patch new file mode 100644 index 0000000..0419293 --- /dev/null +++ b/FunKey/board/funkey/patches/linux/0021_fbtft_fixed_softTearing_lowBatIcon.patch @@ -0,0 +1,851 @@ +From 71fc9be7b624c13355d37fa85162ba4f24e5d248 Mon Sep 17 00:00:00 2001 +From: vincent +Date: Thu, 26 Dec 2019 17:29:03 +0100 +Subject: [PATCH] added fbtft boot logo, soft rotate and fixed soft tearing + issue + +--- + arch/arm/boot/dts/sun8i-v3s-funkey.dts | 3 +- + drivers/staging/fbtft/fb_st7789v.c | 5 +- + drivers/staging/fbtft/fb_text.c | 59 ++++++++ + drivers/staging/fbtft/fb_text.h | 2 +- + drivers/staging/fbtft/fbtft-bus.c | 256 ++++++++++++++++++++++++++++----- + drivers/staging/fbtft/fbtft-core.c | 148 +++++++++++++++---- + drivers/staging/fbtft/fbtft-io.c | 5 +- + drivers/staging/fbtft/fbtft-sysfs.c | 31 ++++ + drivers/staging/fbtft/fbtft.h | 16 ++- + 9 files changed, 452 insertions(+), 73 deletions(-) + +diff --git a/arch/arm/boot/dts/sun8i-v3s-funkey.dts b/arch/arm/boot/dts/sun8i-v3s-funkey.dts +index 88f1c0f..d25521c 100644 +--- a/arch/arm/boot/dts/sun8i-v3s-funkey.dts ++++ b/arch/arm/boot/dts/sun8i-v3s-funkey.dts +@@ -179,8 +179,9 @@ + txbuflen = <115202>; + // txbuflen = <0>; + spi_async_mode = "true"; ++ //interlacing = "true"; + rotate = <0>; +- rotate_soft = <0>; ++ rotate_soft = <270>; + fps = <100>; + buswidth = <8>; + reset-gpios = <&pio 4 1 GPIO_ACTIVE_LOW>; //PE1 +diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c +index ba21ab5..e2c9078 100755 +--- a/drivers/staging/fbtft/fb_st7789v.c ++++ b/drivers/staging/fbtft/fb_st7789v.c +@@ -157,12 +157,15 @@ static int init_display(struct fbtft_par *par) + //write_reg(par, 0xC6,0x1F); //39Hz + //write_reg(par, 0xC6,0x1A); //44Hz + //write_reg(par, 0xC6,0x17); //48Hz ++ //write_reg(par, 0xC6,0x16); //49Hz + //write_reg(par, 0xC6,0x15); //50Hz ++ //write_reg(par, 0xC6,0x14); //52Hz + //write_reg(par, 0xC6,0x12); //55Hz + //write_reg(par, 0xC6,0x10); //58Hz + //write_reg(par, 0xC6,0x0F); //60Hz +- write_reg(par, 0xC6,0x09); //60Hz ++ //write_reg(par, 0xC6,0x09); //60Hz + //write_reg(par, 0xC6,0x03); //99Hz ++ write_reg(par, 0xC6,0x02); //105Hz + + write_reg(par, MIPI_DCS_SET_DISPLAY_ON); + +diff --git a/drivers/staging/fbtft/fb_text.c b/drivers/staging/fbtft/fb_text.c +index 9f873b5..650535d 100644 +--- a/drivers/staging/fbtft/fb_text.c ++++ b/drivers/staging/fbtft/fb_text.c +@@ -4,6 +4,38 @@ + #define MIN(a,b) (((a)<(b))?(a):(b)) + #define MAX(a,b) (((a)>(b))?(a):(b)) + ++#define LOW_BATTERY_ICON_TOP_LEFT_X 10 ++#define LOW_BATTERY_ICON_TOP_LEFT_Y 10 ++#define LOW_BATTERY_ICON_WIDTH 35 ++#define LOW_BATTERY_ICON_HEIGHT 20 ++//#define LOW_BATTERY_FORE_COLOR 65535 ++#define LOW_BATTERY_FORE_COLOR 0xF800 ++#define LOW_BATTERY_BACK_COLOR 0 ++ ++ ++// Battery icon from: https://github.com/martinohanlon/grrl-bat-monitor ++static u16 lowBatteryIcon [LOW_BATTERY_ICON_HEIGHT][LOW_BATTERY_ICON_WIDTH] = { ++ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, ++ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; ++ + + + static u8 monaco_font[] = { +@@ -1548,3 +1580,30 @@ void DrawText(u16 *framebuffer, int framebufferWidth, int framebufferStrideBytes + x += 6; + } + } ++ ++void draw_low_battery(u16 *framebuffer, int framebufferWidth, int framebufferHeight) ++{ ++ int x_offset = LOW_BATTERY_ICON_TOP_LEFT_X; ++ int y_offset = LOW_BATTERY_ICON_TOP_LEFT_Y; ++ int x, y; ++ ++ /* Sanity check - width */ ++ if(x_offset >= framebufferWidth ){ ++ x_offset = framebufferWidth-1-LOW_BATTERY_ICON_WIDTH; ++ } ++ ++ /* Sanity check - height */ ++ if(y_offset >= framebufferHeight ){ ++ y_offset = framebufferHeight-1-LOW_BATTERY_ICON_HEIGHT; ++ } ++ ++ /* Printing low battery icon */ ++ for(y = 0; y < MIN(LOW_BATTERY_ICON_HEIGHT, framebufferHeight-y_offset); ++y){ ++ for(x = 0; x < MIN(LOW_BATTERY_ICON_WIDTH, framebufferWidth-x_offset); ++x){ ++ if(lowBatteryIcon[y][x]){ ++ framebuffer[(y+y_offset)*framebufferWidth + (x+x_offset)] = LOW_BATTERY_FORE_COLOR; ++ } ++ //lowBatteryIcon[y][x] = lowBatteryIcon[y][x] ? LOW_BATTERY_FORE_COLOR : LOW_BATTERY_BACK_COLOR; ++ } ++ } ++} +\ No newline at end of file +diff --git a/drivers/staging/fbtft/fb_text.h b/drivers/staging/fbtft/fb_text.h +index 1352bdb..e03df39 100644 +--- a/drivers/staging/fbtft/fb_text.h ++++ b/drivers/staging/fbtft/fb_text.h +@@ -10,7 +10,7 @@ + #define RGB565(r, g, b) (((r&0x1f) << 11) | ((g&0x3f) << 5) | (b&0x1f)) + + void DrawText(u16 *framebuffer, int framebufferWidth, int framebufferStrideBytes, int framebufferHeight, const char *text, int x, int y, u16 color, u16 bgColor); +- ++void draw_low_battery(u16 *framebuffer, int framebufferWidth, int framebufferHeight); + + /*extern unsigned char fontdata8x8[64*16]; + extern unsigned char fontdata6x8[256-32][8];*/ +diff --git a/drivers/staging/fbtft/fbtft-bus.c b/drivers/staging/fbtft/fbtft-bus.c +index 23488ea..ce865ed 100644 +--- a/drivers/staging/fbtft/fbtft-bus.c ++++ b/drivers/staging/fbtft/fbtft-bus.c +@@ -7,6 +7,8 @@ + #include