summaryrefslogtreecommitdiff
path: root/meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch')
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch b/meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch
new file mode 100644
index 0000000000..5149002ff5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lvgl/dialog-lvgl/0001-wayland-Switch-to-custom-timer-tick.patch
@@ -0,0 +1,72 @@
+From 1d92e1854c19c06c553243d29170bb4d1a9e3863 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 9 May 2023 02:57:30 +0200
+Subject: [PATCH 1/2] wayland: Switch to custom timer tick
+
+The OE LVGL is configured to obtain timer tick from system timer
+instead of using ad-hoc mechanisms to emulate timer tick using
+threads or such. Use system timer to provide the tick.
+
+The tick handling implementation comes from:
+https://github.com/lvgl/lv_port_linux_frame_buffer.git
+as of commit adf2c4490e17a1b9ec1902cc412a24b3b8235c8e
+
+Upstream-Status: Inappropriate [Upstream repo is archived]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ src/drivers/wayland.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/src/drivers/wayland.c b/src/drivers/wayland.c
+index 633dc18..bcebf4d 100644
+--- a/src/drivers/wayland.c
++++ b/src/drivers/wayland.c
+@@ -6,6 +6,7 @@
+ #if defined(USE_WAYLAND) && USE_WAYLAND
+
+ #include <pthread.h>
++#include <sys/time.h>
+ #include <unistd.h>
+
+ #include <lv_drivers/wayland/wayland.h>
+@@ -18,13 +19,22 @@
+ #define WAYLAND_VER_RES 320
+ #endif
+
+-static void * tick_thread(void * data)
++uint32_t custom_tick_get(void)
+ {
+- (void) data;
+- while(true) {
+- usleep(5 * 1000);
+- lv_tick_inc(5);
+- }
++ static uint64_t start_ms = 0;
++ if(start_ms == 0) {
++ struct timeval tv_start;
++ gettimeofday(&tv_start, NULL);
++ start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000;
++ }
++
++ struct timeval tv_now;
++ gettimeofday(&tv_now, NULL);
++ uint64_t now_ms;
++ now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;
++
++ uint32_t time_ms = now_ms - start_ms;
++ return time_ms;
+ }
+
+
+@@ -47,8 +57,6 @@ void hal_init(void)
+
+ lv_group_t * g = lv_group_create();
+ lv_group_set_default(g);
+- static pthread_t hal_thread;
+- pthread_create(&hal_thread, NULL, tick_thread, NULL);
+ }
+
+ #endif
+--
+2.39.2
+