11/*
22 * Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
3+ * Copyright 2025 Abderrahmane JARMOUNI
34 *
45 * SPDX-License-Identifier: Apache-2.0
56 */
67#include "lvgl_common_input.h"
78
89#include <zephyr/device.h>
910#include <zephyr/kernel.h>
10- #include <zephyr/logging/log.h>
1111#include <lvgl_input_device.h>
12+ #include <lvgl_display.h>
13+ #include <zephyr/logging/log.h>
1214#include "lvgl_pointer_input.h"
1315#include "lvgl_button_input.h"
1416#include "lvgl_encoder_input.h"
@@ -42,13 +44,42 @@ static void lvgl_input_read_cb(lv_indev_t *indev, lv_indev_data_t *data)
4244 data -> continue_reading = k_msgq_num_used_get (cfg -> event_msgq ) > 0 ;
4345}
4446
47+ static lv_display_t * lvgl_input_get_display (const struct device * dev )
48+ {
49+ const struct lvgl_common_input_config * cfg = dev -> config ;
50+ const struct device * disp_dev = cfg -> display_dev ;
51+ struct lvgl_disp_data * lv_disp_data ;
52+ lv_display_t * lv_disp = NULL ;
53+
54+ if (disp_dev == NULL ) {
55+ return NULL ;
56+ }
57+
58+ for (int i = 0 ; i < DT_ZEPHYR_DISPLAYS_COUNT ; i ++ ) {
59+ lv_disp = lv_display_get_next (lv_disp );
60+ if (lv_disp == NULL ) {
61+ LOG_ERR ("Could not find LV display objects of all Zephyr displays" );
62+ break ;
63+ }
64+ lv_disp_data = (struct lvgl_disp_data * )lv_display_get_user_data (lv_disp );
65+ if (disp_dev == lv_disp_data -> display_dev ) {
66+ return lv_disp ;
67+ }
68+ }
69+
70+ LOG_ERR ("LV display corresponding to display device %s not found" , disp_dev -> name );
71+ __ASSERT_NO_MSG (false);
72+
73+ return NULL ;
74+ }
75+
4576int lvgl_input_register_driver (lv_indev_type_t indev_type , const struct device * dev )
4677{
47- /* Currently no indev binding has its dedicated data
48- * if that ever changes ensure that `lvgl_common_input_data`
49- * remains the first member
78+ /* Ensure that `lvgl_common_input_data` remains the first member
79+ * of indev dedicated data
5080 */
5181 struct lvgl_common_input_data * common_data = dev -> data ;
82+ lv_display_t * disp ;
5283
5384 if (common_data == NULL ) {
5485 return - EINVAL ;
@@ -64,6 +95,9 @@ int lvgl_input_register_driver(lv_indev_type_t indev_type, const struct device *
6495 lv_indev_set_read_cb (common_data -> indev , lvgl_input_read_cb );
6596 lv_indev_set_user_data (common_data -> indev , (void * )dev );
6697
98+ disp = lvgl_input_get_display (dev );
99+ lv_indev_set_display (common_data -> indev , disp );
100+
67101 return 0 ;
68102}
69103
0 commit comments