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  uint16_t fps_hz;
20  uint32_t pixel_clock_khz;
21  uint32_t hactive;
22  uint32_t hfront_porch;
23  uint32_t hback_porch;
24  uint32_t hsync_len;
26  uint32_t vactive;
27  uint32_t vfront_porch;
28  uint32_t vback_porch;
29  uint32_t vsync_len;
30  uint32_t hsync_pol :1;
31  uint32_t vsync_pol :1;
32  uint32_t de_pol :1;
33  uint32_t pixel_clk_pol :1;
34  uint32_t pixel_data_pol :1;
36 
37 typedef enum hpm_panel_mipi_format {
43 
44 typedef struct hpm_panel_hw_interface {
46  void (*set_reset_pin_level)(uint8_t level);
47  void (*set_backlight)(uint16_t percent);
48  void (*set_video_router)(void);
49  union {
50  struct {
54  } mipi;
55  struct {
56  uint32_t channel_di_index :8;
57  uint32_t channel_index :8;
58  void *lvb_base;
59  } lvds;
60  } video;
62 
63 typedef struct hpm_panel_funcs {
64  void (*reset)(hpm_panel_t *panel);
65  void (*init)(hpm_panel_t *panel, const hpm_panel_timing_t *timing);
66  void (*power_on)(hpm_panel_t *panel);
67  void (*power_off)(hpm_panel_t *panel);
69 
70 typedef enum hpm_panel_if_type {
76 
77 typedef enum hpm_panel_mem_type {
83 
84 typedef enum hpm_panel_state_power {
88 
89 typedef struct hpm_panel_state {
91  uint8_t power_state;
93 
94 struct hpm_panel {
95  const char *name;
98  uint16_t timing_list_num;
102 };
103 
104 #ifdef __cplusplus
105 extern "C" {
106 #endif
107 
114 
122 hpm_panel_t *hpm_panel_find_device(const char *name);
123 
131 const char *hpm_panel_get_name(hpm_panel_t *panel);
132 
141 
151 int hpm_panel_get_timing_list(hpm_panel_t *panel, const hpm_panel_timing_t **timing_list, uint16_t *timing_list_num);
152 
161 const hpm_panel_timing_t *hpm_panel_get_timing_by_fps(hpm_panel_t *panel, uint16_t fps_hz);
162 
171 
179 
185 void hpm_panel_reset(hpm_panel_t *panel);
186 
192 void hpm_panel_init(hpm_panel_t *panel);
193 
200 void hpm_panel_init_by_timing(hpm_panel_t *panel, const hpm_panel_timing_t *timing);
201 
207 void hpm_panel_power_on(hpm_panel_t *panel);
208 
214 void hpm_panel_power_off(hpm_panel_t *panel);
215 
222 void hpm_panel_set_backlight(hpm_panel_t *panel, uint16_t percent);
223 
231 uint8_t hpm_panel_get_backlight(hpm_panel_t *panel);
232 
238 void hpm_panel_delay_ms(uint32_t ms);
239 
245 void hpm_panel_delay_us(uint32_t us);
246 
254 void *hpm_panel_memory_alloc(hpm_panel_mem_type_t type, uint32_t size);
255 
262 void hpm_panel_memory_free(void *addr);
263 
273 
284 int hpm_panel_memory_register(hpm_panel_mem_type_t type, void *addr, uint32_t size);
285 
286 #ifdef __cplusplus
287 }
288 #endif
289 
290 #endif /* _HPM_PANEL_H */
static const hpm_panel_timing_t timing_list[]
Definition: cc10128007.c:119
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:122
void hpm_panel_memory_free(void *addr)
Free panel memory.
Definition: hpm_panel.c:275
hpm_panel_if_type_t hpm_panel_get_if_type(hpm_panel_t *panel)
Get panel interface type.
Definition: hpm_panel.c:93
hpm_panel_state_power
Definition: hpm_panel.h:84
@ HPM_PANEL_STATE_POWER_ON
Definition: hpm_panel.h:86
@ HPM_PANEL_STATE_POWER_OFF
Definition: hpm_panel.h:85
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:104
void hpm_panel_set_backlight(hpm_panel_t *panel, uint16_t percent)
Set backlight value.
Definition: hpm_panel.c:134
struct hpm_panel_state hpm_panel_state_t
void hpm_panel_init_by_timing(hpm_panel_t *panel, const hpm_panel_timing_t *timing)
Initialize the panel by specified timing.
Definition: hpm_panel.c:116
const hpm_panel_timing_t * hpm_panel_get_timing_by_fps(hpm_panel_t *panel, uint16_t fps_hz)
Get panel nearest timing by fps.
Definition: hpm_panel.c:70
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:98
enum hpm_panel_if_type hpm_panel_if_type_t
hpm_panel_mipi_format
Definition: hpm_panel.h:37
@ HPM_PANEL_MIPI_FORMAT_RGB666_PACKED
Definition: hpm_panel.h:40
@ HPM_PANEL_MIPI_FORMAT_RGB565
Definition: hpm_panel.h:41
@ HPM_PANEL_MIPI_FORMAT_RGB888
Definition: hpm_panel.h:38
@ HPM_PANEL_MIPI_FORMAT_RGB666
Definition: hpm_panel.h:39
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:77
@ HPM_PANEL_MEM_TYPE_NONCACHEABLE
Definition: hpm_panel.h:78
@ HPM_PANEL_MEM_TYPE_UNKNOWN
Definition: hpm_panel.h:81
@ HPM_PANEL_MEM_TYPE_MAX
Definition: hpm_panel.h:80
@ HPM_PANEL_MEM_TYPE_CACHEABLE
Definition: hpm_panel.h:79
void hpm_panel_power_off(hpm_panel_t *panel)
Power off the panel.
Definition: hpm_panel.c:128
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:232
void hpm_panel_init(hpm_panel_t *panel)
Initialize the panel.
Definition: hpm_panel.c:110
int hpm_panel_get_timing_list(hpm_panel_t *panel, const hpm_panel_timing_t **timing_list, uint16_t *timing_list_num)
Get panel timing list.
Definition: hpm_panel.c:62
struct hpm_panel_funcs hpm_panel_funcs_t
void hpm_panel_delay_ms(uint32_t ms)
Delay specified milliseconds.
Definition: hpm_panel.c:151
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:156
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:342
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:146
hpm_panel_if_type
Definition: hpm_panel.h:70
@ HPM_PANEL_IF_TYPE_MIPI
Definition: hpm_panel.h:74
@ HPM_PANEL_IF_TYPE_RGB
Definition: hpm_panel.h:71
@ HPM_PANEL_IF_TYPE_LVDS_SINGLE
Definition: hpm_panel.h:72
@ HPM_PANEL_IF_TYPE_LVDS_SPLIT
Definition: hpm_panel.h:73
hpm_panel_mem_type_t hpm_panel_memory_get_type(void *addr)
Get panel memory type.
Definition: hpm_panel.c:324
Definition: hpm_panel.h:63
void(* reset)(hpm_panel_t *panel)
Definition: hpm_panel.h:64
void(* power_on)(hpm_panel_t *panel)
Definition: hpm_panel.h:66
void(* init)(hpm_panel_t *panel, const hpm_panel_timing_t *timing)
Definition: hpm_panel.h:65
void(* power_off)(hpm_panel_t *panel)
Definition: hpm_panel.h:67
Definition: hpm_panel.h:44
void(* set_backlight)(uint16_t percent)
Definition: hpm_panel.h:47
uint32_t lcdc_pixel_clk_khz
Definition: hpm_panel.h:45
void * mipi_host_base
Definition: hpm_panel.h:52
void(* set_reset_pin_level)(uint8_t level)
Definition: hpm_panel.h:46
union hpm_panel_hw_interface::@920 video
hpm_panel_mipi_format format
Definition: hpm_panel.h:51
void(* set_video_router)(void)
Definition: hpm_panel.h:48
uint32_t channel_index
Definition: hpm_panel.h:57
void * mipi_phy_base
Definition: hpm_panel.h:53
struct hpm_panel_hw_interface::@920::@921 mipi
uint32_t channel_di_index
Definition: hpm_panel.h:56
struct hpm_panel_hw_interface::@920::@922 lvds
void * lvb_base
Definition: hpm_panel.h:58
Definition: hpm_panel.h:89
uint8_t power_state
Definition: hpm_panel.h:91
uint8_t backlight_percent
Definition: hpm_panel.h:90
Definition: hpm_panel.h:18
uint32_t hfront_porch
Definition: hpm_panel.h:22
uint32_t pixel_clk_pol
Definition: hpm_panel.h:33
uint32_t hsync_len
Definition: hpm_panel.h:24
uint32_t de_pol
Definition: hpm_panel.h:32
uint32_t vsync_pol
Definition: hpm_panel.h:31
uint32_t vfront_porch
Definition: hpm_panel.h:27
uint32_t pixel_data_pol
Definition: hpm_panel.h:34
uint32_t hback_porch
Definition: hpm_panel.h:23
uint32_t hactive
Definition: hpm_panel.h:21
uint32_t vback_porch
Definition: hpm_panel.h:28
uint16_t fps_hz
Definition: hpm_panel.h:19
uint32_t hsync_pol
Definition: hpm_panel.h:30
uint32_t pixel_clock_khz
Definition: hpm_panel.h:20
uint32_t vsync_len
Definition: hpm_panel.h:29
uint32_t vactive
Definition: hpm_panel.h:26
Definition: hpm_panel.h:94
hpm_panel_funcs_t funcs
Definition: hpm_panel.h:101
hpm_panel_state_t state
Definition: hpm_panel.h:99
hpm_panel_if_type_t if_type
Definition: hpm_panel.h:96
const char * name
Definition: hpm_panel.h:95
uint16_t timing_list_num
Definition: hpm_panel.h:98
hpm_panel_hw_interface_t hw_if
Definition: hpm_panel.h:100
const hpm_panel_timing_t * timing_list
Definition: hpm_panel.h:97