HPM SDK
HPMicro Software Development Kit
hpm_panel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef _HPM_PANEL_H
9 #define _HPM_PANEL_H
10 
11 #include <stdint.h>
12 #include <string.h>
13 #include <stdbool.h>
14 
15 struct hpm_panel;
16 typedef struct hpm_panel hpm_panel_t;
17 
18 typedef struct hpm_panel_timing {
19  uint32_t pixel_clock_khz;
20  uint32_t hactive;
21  uint32_t hfront_porch;
22  uint32_t hback_porch;
23  uint32_t hsync_len;
25  uint32_t vactive;
26  uint32_t vfront_porch;
27  uint32_t vback_porch;
28  uint32_t vsync_len;
29  uint32_t hsync_pol :1;
30  uint32_t vsync_pol :1;
31  uint32_t de_pol :1;
32  uint32_t pixel_clk_pol :1;
33  uint32_t pixel_data_pol :1;
35 
36 typedef enum hpm_panel_mipi_format {
42 
43 typedef struct hpm_panel_hw_interface {
45  void (*set_reset_pin_level)(uint8_t level);
46  void (*set_backlight)(uint16_t percent);
47  void (*set_video_router)(void);
48  union {
49  struct {
53  } mipi;
54  struct {
55  uint32_t channel_di_index :8;
56  uint32_t channel_index :8;
57  void *lvb_base;
58  } lvds;
59  } video;
61 
62 typedef struct hpm_panel_funcs {
63  void (*reset)(hpm_panel_t *panel);
64  void (*init)(hpm_panel_t *panel);
65  void (*power_on)(hpm_panel_t *panel);
66  void (*power_off)(hpm_panel_t *panel);
68 
69 typedef enum hpm_panel_if_type {
75 
76 typedef enum hpm_panel_mem_type {
82 
83 typedef enum hpm_panel_state_power {
87 
88 typedef struct hpm_panel_state {
90  uint8_t power_state;
92 
93 struct hpm_panel {
94  const char *name;
100 };
101 
102 #ifdef __cplusplus
103 extern "C" {
104 #endif
105 
112 
120 hpm_panel_t *hpm_panel_find_device(const char *name);
121 
129 const char *hpm_panel_get_name(hpm_panel_t *panel);
130 
139 
148 
156 
162 void hpm_panel_reset(hpm_panel_t *panel);
163 
169 void hpm_panel_init(hpm_panel_t *panel);
170 
176 void hpm_panel_power_on(hpm_panel_t *panel);
177 
183 void hpm_panel_power_off(hpm_panel_t *panel);
184 
191 void hpm_panel_set_backlight(hpm_panel_t *panel, uint16_t percent);
192 
200 uint8_t hpm_panel_get_backlight(hpm_panel_t *panel);
201 
207 void hpm_panel_delay_ms(uint32_t ms);
208 
214 void hpm_panel_delay_us(uint32_t us);
215 
223 void *hpm_panel_memory_alloc(hpm_panel_mem_type_t type, uint32_t size);
224 
231 void hpm_panel_memory_free(void *addr);
232 
242 
253 int hpm_panel_memory_register(hpm_panel_mem_type_t type, void *addr, uint32_t size);
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #endif /* _HPM_PANEL_H */
static void size
Definition: hpm_math.h:6938
hpm_panel_t * hpm_panel_find_device(const char *name)
Find panel for name.
Definition: hpm_panel.c:41
void hpm_panel_power_on(hpm_panel_t *panel)
Power on the panel.
Definition: hpm_panel.c:85
void hpm_panel_memory_free(void *addr)
Free panel memory.
Definition: hpm_panel.c:238
hpm_panel_if_type_t hpm_panel_get_if_type(hpm_panel_t *panel)
Get panel interface type.
Definition: hpm_panel.c:62
hpm_panel_state_power
Definition: hpm_panel.h:83
@ HPM_PANEL_STATE_POWER_ON
Definition: hpm_panel.h:85
@ HPM_PANEL_STATE_POWER_OFF
Definition: hpm_panel.h:84
enum hpm_panel_state_power hpm_panel_power_state_t
void hpm_panel_reset(hpm_panel_t *panel)
Reset the panel.
Definition: hpm_panel.c:73
void hpm_panel_set_backlight(hpm_panel_t *panel, uint16_t percent)
Set backlight value.
Definition: hpm_panel.c:97
struct hpm_panel_state hpm_panel_state_t
void hpm_panel_register_interface(hpm_panel_t *panel, hpm_panel_hw_interface_t *hw_if)
Register platform level hardware interface.
Definition: hpm_panel.c:67
enum hpm_panel_if_type hpm_panel_if_type_t
hpm_panel_mipi_format
Definition: hpm_panel.h:36
@ HPM_PANEL_MIPI_FORMAT_RGB666_PACKED
Definition: hpm_panel.h:39
@ HPM_PANEL_MIPI_FORMAT_RGB565
Definition: hpm_panel.h:40
@ HPM_PANEL_MIPI_FORMAT_RGB888
Definition: hpm_panel.h:37
@ HPM_PANEL_MIPI_FORMAT_RGB666
Definition: hpm_panel.h:38
hpm_panel_t * hpm_panel_find_device_default(void)
Find default panel.
Definition: hpm_panel.c:34
struct hpm_panel_timing hpm_panel_timing_t
hpm_panel_mem_type
Definition: hpm_panel.h:76
@ HPM_PANEL_MEM_TYPE_NONCACHEABLE
Definition: hpm_panel.h:77
@ HPM_PANEL_MEM_TYPE_UNKNOWN
Definition: hpm_panel.h:80
@ HPM_PANEL_MEM_TYPE_MAX
Definition: hpm_panel.h:79
@ HPM_PANEL_MEM_TYPE_CACHEABLE
Definition: hpm_panel.h:78
void hpm_panel_power_off(hpm_panel_t *panel)
Power off the panel.
Definition: hpm_panel.c:91
void * hpm_panel_memory_alloc(hpm_panel_mem_type_t type, uint32_t size)
Allocate panel memory of a specified type.
Definition: hpm_panel.c:195
void hpm_panel_init(hpm_panel_t *panel)
Initialize the panel.
Definition: hpm_panel.c:79
struct hpm_panel_funcs hpm_panel_funcs_t
void hpm_panel_delay_ms(uint32_t ms)
Delay specified milliseconds.
Definition: hpm_panel.c:114
enum hpm_panel_mem_type hpm_panel_mem_type_t
const char * hpm_panel_get_name(hpm_panel_t *panel)
Get panel name.
Definition: hpm_panel.c:52
const hpm_panel_timing_t * hpm_panel_get_timing(hpm_panel_t *panel)
Get panel timing.
Definition: hpm_panel.c:57
void hpm_panel_delay_us(uint32_t us)
Delay specified microseconds.
Definition: hpm_panel.c:119
int hpm_panel_memory_register(hpm_panel_mem_type_t type, void *addr, uint32_t size)
Register panel memory block to panel subsystem.
Definition: hpm_panel.c:305
struct hpm_panel_hw_interface hpm_panel_hw_interface_t
uint8_t hpm_panel_get_backlight(hpm_panel_t *panel)
Get backlight value.
Definition: hpm_panel.c:109
hpm_panel_if_type
Definition: hpm_panel.h:69
@ HPM_PANEL_IF_TYPE_MIPI
Definition: hpm_panel.h:73
@ HPM_PANEL_IF_TYPE_RGB
Definition: hpm_panel.h:70
@ HPM_PANEL_IF_TYPE_LVDS_SINGLE
Definition: hpm_panel.h:71
@ HPM_PANEL_IF_TYPE_LVDS_SPLIT
Definition: hpm_panel.h:72
hpm_panel_mem_type_t hpm_panel_memory_get_type(void *addr)
Get panel memory type.
Definition: hpm_panel.c:287
Definition: hpm_panel.h:62
void(* reset)(hpm_panel_t *panel)
Definition: hpm_panel.h:63
void(* power_on)(hpm_panel_t *panel)
Definition: hpm_panel.h:65
void(* init)(hpm_panel_t *panel)
Definition: hpm_panel.h:64
void(* power_off)(hpm_panel_t *panel)
Definition: hpm_panel.h:66
Definition: hpm_panel.h:43
union hpm_panel_hw_interface::@842 video
void(* set_backlight)(uint16_t percent)
Definition: hpm_panel.h:46
uint32_t lcdc_pixel_clk_khz
Definition: hpm_panel.h:44
void * mipi_host_base
Definition: hpm_panel.h:51
void(* set_reset_pin_level)(uint8_t level)
Definition: hpm_panel.h:45
hpm_panel_mipi_format format
Definition: hpm_panel.h:50
void(* set_video_router)(void)
Definition: hpm_panel.h:47
struct hpm_panel_hw_interface::@842::@843 mipi
uint32_t channel_index
Definition: hpm_panel.h:56
void * mipi_phy_base
Definition: hpm_panel.h:52
uint32_t channel_di_index
Definition: hpm_panel.h:55
void * lvb_base
Definition: hpm_panel.h:57
struct hpm_panel_hw_interface::@842::@844 lvds
Definition: hpm_panel.h:88
uint8_t power_state
Definition: hpm_panel.h:90
uint8_t backlight_percent
Definition: hpm_panel.h:89
Definition: hpm_panel.h:18
uint32_t hfront_porch
Definition: hpm_panel.h:21
uint32_t pixel_clk_pol
Definition: hpm_panel.h:32
uint32_t hsync_len
Definition: hpm_panel.h:23
uint32_t de_pol
Definition: hpm_panel.h:31
uint32_t vsync_pol
Definition: hpm_panel.h:30
uint32_t vfront_porch
Definition: hpm_panel.h:26
uint32_t pixel_data_pol
Definition: hpm_panel.h:33
uint32_t hback_porch
Definition: hpm_panel.h:22
uint32_t hactive
Definition: hpm_panel.h:20
uint32_t vback_porch
Definition: hpm_panel.h:27
uint32_t hsync_pol
Definition: hpm_panel.h:29
uint32_t pixel_clock_khz
Definition: hpm_panel.h:19
uint32_t vsync_len
Definition: hpm_panel.h:28
uint32_t vactive
Definition: hpm_panel.h:25
Definition: hpm_panel.h:93
hpm_panel_funcs_t funcs
Definition: hpm_panel.h:99
hpm_panel_state_t state
Definition: hpm_panel.h:97
hpm_panel_if_type_t if_type
Definition: hpm_panel.h:95
const char * name
Definition: hpm_panel.h:94
hpm_panel_hw_interface_t hw_if
Definition: hpm_panel.h:98
const hpm_panel_timing_t timing
Definition: hpm_panel.h:96