From d95fba5154ae1de37d0a0e146cdd4af857deb161 Mon Sep 17 00:00:00 2001 From: vincent Date: Sat, 26 Sep 2020 02:16:25 +0200 Subject: [PATCH] added linux patch for fbtft: 0024_TE_irq_no_more_tearing.patch --- .../linux/0024_TE_irq_no_more_tearing.patch | 394 ++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 FunKey/board/funkey/patches/linux/0024_TE_irq_no_more_tearing.patch diff --git a/FunKey/board/funkey/patches/linux/0024_TE_irq_no_more_tearing.patch b/FunKey/board/funkey/patches/linux/0024_TE_irq_no_more_tearing.patch new file mode 100644 index 0000000..10b9977 --- /dev/null +++ b/FunKey/board/funkey/patches/linux/0024_TE_irq_no_more_tearing.patch @@ -0,0 +1,394 @@ +From fc4a5c2f32f088e23d0078d2e1867ed6708b66f3 Mon Sep 17 00:00:00 2001 +From: vincent +Date: Sat, 26 Sep 2020 02:11:52 +0200 +Subject: [PATCH] fbtft with TE working + +--- + arch/arm/boot/dts/sun8i-v3s-funkey.dts | 1 + + drivers/staging/fbtft/fb_st7789v.c | 10 ++- + drivers/staging/fbtft/fbtft-bus.c | 22 ++++-- + drivers/staging/fbtft/fbtft-core.c | 128 ++++++++++++++++++++++++++------- + drivers/staging/fbtft/fbtft.h | 3 + + 5 files changed, 129 insertions(+), 35 deletions(-) + +diff --git a/arch/arm/boot/dts/sun8i-v3s-funkey.dts b/arch/arm/boot/dts/sun8i-v3s-funkey.dts +index 20f9913..24e26b2 100644 +--- a/arch/arm/boot/dts/sun8i-v3s-funkey.dts ++++ b/arch/arm/boot/dts/sun8i-v3s-funkey.dts +@@ -186,6 +186,7 @@ + buswidth = <8>; + reset-gpios = <&pio 1 2 GPIO_ACTIVE_HIGH>; //PB2 + dc-gpios = <&pio 2 0 GPIO_ACTIVE_LOW>; //PC0 (MISO) ++ te-irq = <&pio 1 1 GPIO_ACTIVE_LOW>; //PB1 + debug = <0>; + }; + }; +diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c +index e2c9078..f33f8e3 100755 +--- a/drivers/staging/fbtft/fb_st7789v.c ++++ b/drivers/staging/fbtft/fb_st7789v.c +@@ -52,6 +52,8 @@ + * out as well to avoid duplicate entries. + */ + enum st7789v_command { ++ TEOFF = 0x34, ++ TEON = 0x35, + PORCTRL = 0xB2, + GCTRL = 0xB7, + VCOMS = 0xBB, +@@ -153,10 +155,14 @@ static int init_display(struct fbtft_par *par) + /* Display Inversion of colors */ + write_reg(par, 0x21); + ++ /* Activate TE signal for Vsync only */ ++ write_reg(par, TEON, 0x00); ++ + /* refresh rate */ + //write_reg(par, 0xC6,0x1F); //39Hz + //write_reg(par, 0xC6,0x1A); //44Hz +- //write_reg(par, 0xC6,0x17); //48Hz ++ //write_reg(par, 0xC6,0x18); //46Hz ++ write_reg(par, 0xC6,0x17); //48Hz + //write_reg(par, 0xC6,0x16); //49Hz + //write_reg(par, 0xC6,0x15); //50Hz + //write_reg(par, 0xC6,0x14); //52Hz +@@ -165,7 +171,7 @@ static int init_display(struct fbtft_par *par) + //write_reg(par, 0xC6,0x0F); //60Hz + //write_reg(par, 0xC6,0x09); //60Hz + //write_reg(par, 0xC6,0x03); //99Hz +- write_reg(par, 0xC6,0x02); //105Hz ++ //write_reg(par, 0xC6,0x02); //105Hz -> good one when no TE signal + + write_reg(par, MIPI_DCS_SET_DISPLAY_ON); + +diff --git a/drivers/staging/fbtft/fbtft-bus.c b/drivers/staging/fbtft/fbtft-bus.c +index ce865ed..801cdf4 100644 +--- a/drivers/staging/fbtft/fbtft-bus.c ++++ b/drivers/staging/fbtft/fbtft-bus.c +@@ -124,6 +124,10 @@ void fbtft_write_reg8_bus9(struct fbtft_par *par, int len, ...) + + int fbtft_start_new_screen_transfer_async(struct fbtft_par *par){ + //printk("%s\n", __func__); ++ if(par->pdata->te_irq && !par->ready_for_spi_async){ ++ return -1; ++ } ++ + if(lock){ + return -1; + } +@@ -135,8 +139,8 @@ int fbtft_start_new_screen_transfer_async(struct fbtft_par *par){ + }*/ + + /* Debug fps */ +-#define FPS_DEBUG 1 +-#if FPS_DEBUG ++//#define FPS_DEBUG ++#ifdef FPS_DEBUG + long fps; + ktime_t ts_now = ktime_get(); + +@@ -153,13 +157,13 @@ int fbtft_start_new_screen_transfer_async(struct fbtft_par *par){ + par->nb_fps_values++; + + if(par->nb_fps_values == 200){ +- fbtft_par_dbg(DEBUG_TIME_EACH_UPDATE, par, +- "Display update: fps=%ld\n", par->avg_fps/par->nb_fps_values); ++ /*fbtft_par_dbg(DEBUG_TIME_EACH_UPDATE, par, ++ "Display update: fps=%ld\n", par->avg_fps/par->nb_fps_values);*/ ++ printk("Display update: fps=%ld\n", par->avg_fps/par->nb_fps_values); + par->avg_fps = 0; + par->nb_fps_values = 0; + } + } +- + #endif //FPS_DEBUG + + /* Post process screen for doufle buf cpy, notifs, rotation soft... */ +@@ -350,7 +354,9 @@ static void spi_complete_data_write(void *arg) + /* Start sending cmd init data */ + par->odd_line = !par->odd_line; + lock = false; +- fbtft_start_new_screen_transfer_async(par); ++ if(!par->pdata->te_irq){ ++ fbtft_start_new_screen_transfer_async(par); ++ } + } + else{ + write_line_start += 2; +@@ -362,7 +368,9 @@ static void spi_complete_data_write(void *arg) + } + else{ + lock = false; +- fbtft_start_new_screen_transfer_async(par); ++ if(!par->pdata->te_irq){ ++ fbtft_start_new_screen_transfer_async(par); ++ } + } + } + +diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c +index bcfa8c4..b362bc0 100755 +--- a/drivers/staging/fbtft/fbtft-core.c ++++ b/drivers/staging/fbtft/fbtft-core.c +@@ -37,6 +37,7 @@ + #include