• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright (c) 2023 HPMicro
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  */
8 #include "hpm_panel.h"
9 #include "hpm_clock_drv.h"
10 
11 extern hpm_panel_t panel_tm070rdh13;
12 extern hpm_panel_t panel_cc10128007;
13 extern hpm_panel_t panel_mc10128007_31b;
14 extern hpm_panel_t panel_tm103xdgp01;
15 
16 static hpm_panel_t *panel_list[] = {
17 #if defined(CONFIG_PANEL_RGB_TM070RDH13) && CONFIG_PANEL_RGB_TM070RDH13
18     &panel_tm070rdh13,
19 #endif
20 
21 #if defined(CONFIG_PANEL_LVDS_CC10128007) && CONFIG_PANEL_LVDS_CC10128007
22     &panel_cc10128007,
23 #endif
24 
25 #if defined(CONFIG_PANEL_MIPI_MC10128007_31B) && CONFIG_PANEL_MIPI_MC10128007_31B
26     &panel_mc10128007_31b,
27 #endif
28 
29 #if defined(CONFIG_PANEL_LVDS_TM103XDGP01) && CONFIG_PANEL_LVDS_TM103XDGP01
30     &panel_tm103xdgp01,
31 #endif
32 };
33 
hpm_panel_find_device_default(void)34 hpm_panel_t *hpm_panel_find_device_default(void)
35 {
36     if (sizeof(panel_list) > 0)
37         return panel_list[0];
38     return NULL;
39 }
40 
hpm_panel_find_device(const char * name)41 hpm_panel_t *hpm_panel_find_device(const char *name)
42 {
43     int n = sizeof(panel_list) / sizeof(panel_list[0]);
44 
45     for (int i = 0; i < n; i++)
46         if (!strcmp(panel_list[i]->name, name))
47             return panel_list[i];
48 
49     return NULL;
50 }
51 
hpm_panel_get_name(hpm_panel_t * panel)52 const char *hpm_panel_get_name(hpm_panel_t *panel)
53 {
54     return panel->name;
55 }
56 
hpm_panel_get_timing(hpm_panel_t * panel)57 const hpm_panel_timing_t *hpm_panel_get_timing(hpm_panel_t *panel)
58 {
59     return &panel->timing;
60 }
61 
hpm_panel_get_if_type(hpm_panel_t * panel)62 hpm_panel_if_type_t hpm_panel_get_if_type(hpm_panel_t *panel)
63 {
64     return panel->if_type;
65 }
66 
hpm_panel_register_interface(hpm_panel_t * panel,hpm_panel_hw_interface_t * hw_if)67 void hpm_panel_register_interface(hpm_panel_t *panel, hpm_panel_hw_interface_t *hw_if)
68 {
69     if (hw_if)
70         memcpy(&panel->hw_if, hw_if, sizeof(*hw_if));
71 }
72 
hpm_panel_reset(hpm_panel_t * panel)73 void hpm_panel_reset(hpm_panel_t *panel)
74 {
75     if (panel->funcs.reset)
76         panel->funcs.reset(panel);
77 }
78 
hpm_panel_init(hpm_panel_t * panel)79 void hpm_panel_init(hpm_panel_t *panel)
80 {
81     if (panel->funcs.init)
82         panel->funcs.init(panel);
83 }
84 
hpm_panel_power_on(hpm_panel_t * panel)85 void hpm_panel_power_on(hpm_panel_t *panel)
86 {
87     if (panel->funcs.power_on)
88         panel->funcs.power_on(panel);
89 }
90 
hpm_panel_power_off(hpm_panel_t * panel)91 void hpm_panel_power_off(hpm_panel_t *panel)
92 {
93     if (panel->funcs.power_off)
94         panel->funcs.power_off(panel);
95 }
96 
hpm_panel_set_backlight(hpm_panel_t * panel,uint16_t percent)97 void hpm_panel_set_backlight(hpm_panel_t *panel, uint16_t percent)
98 {
99     if (percent > 100)
100         percent = 100;
101 
102     if (panel->hw_if.set_backlight &&
103         panel->state.backlight_percent != percent) {
104         panel->hw_if.set_backlight(percent);
105         panel->state.backlight_percent = percent;
106     }
107 }
108 
hpm_panel_get_backlight(hpm_panel_t * panel)109 uint8_t hpm_panel_get_backlight(hpm_panel_t *panel)
110 {
111     return panel->state.backlight_percent;
112 }
113 
hpm_panel_delay_ms(uint32_t ms)114 void hpm_panel_delay_ms(uint32_t ms)
115 {
116     clock_cpu_delay_ms(ms);
117 }
118 
hpm_panel_delay_us(uint32_t us)119 void hpm_panel_delay_us(uint32_t us)
120 {
121     clock_cpu_delay_us(us);
122 }