xref: /OK3568_Linux_fs/u-boot/drivers/video/drm/rockchip_panel.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #ifndef _ROCKCHIP_PANEL_H_
8 #define _ROCKCHIP_PANEL_H_
9 
10 struct display_state;
11 struct rockchip_panel;
12 struct rockchip_conn;
13 
14 struct rockchip_panel_funcs {
15 	void (*prepare)(struct rockchip_panel *panel);
16 	void (*unprepare)(struct rockchip_panel *panel);
17 	void (*enable)(struct rockchip_panel *panel);
18 	void (*disable)(struct rockchip_panel *panel);
19 	int (*get_mode)(struct rockchip_panel *panel,
20 			struct drm_display_mode *mode);
21 };
22 
23 struct rockchip_panel {
24 	struct udevice *dev;
25 	u32 bus_format;
26 	unsigned int bpc;
27 	const struct rockchip_panel_funcs *funcs;
28 	const void *data;
29 
30 	struct rockchip_connector *conn;
31 	struct display_state *state;
32 };
33 
rockchip_panel_init(struct rockchip_panel * panel,struct rockchip_connector * conn,struct display_state * state)34 static inline void rockchip_panel_init(struct rockchip_panel *panel,
35 				       struct rockchip_connector *conn,
36 				       struct display_state *state)
37 {
38 	if (!panel)
39 		return;
40 
41 	panel->conn = conn;
42 	panel->state = state;
43 
44 	if (panel->bus_format)
45 		state->conn_state.bus_format = panel->bus_format;
46 
47 	if (panel->bpc)
48 		state->conn_state.bpc = panel->bpc;
49 }
50 
rockchip_panel_prepare(struct rockchip_panel * panel)51 static inline void rockchip_panel_prepare(struct rockchip_panel *panel)
52 {
53 	if (!panel)
54 		return;
55 
56 	if (panel->funcs && panel->funcs->prepare)
57 		panel->funcs->prepare(panel);
58 }
59 
rockchip_panel_enable(struct rockchip_panel * panel)60 static inline void rockchip_panel_enable(struct rockchip_panel *panel)
61 {
62 	if (!panel)
63 		return;
64 
65 	if (panel->funcs && panel->funcs->enable)
66 		panel->funcs->enable(panel);
67 }
68 
rockchip_panel_unprepare(struct rockchip_panel * panel)69 static inline void rockchip_panel_unprepare(struct rockchip_panel *panel)
70 {
71 	if (!panel)
72 		return;
73 
74 	if (panel->funcs && panel->funcs->unprepare)
75 		panel->funcs->unprepare(panel);
76 }
77 
rockchip_panel_disable(struct rockchip_panel * panel)78 static inline void rockchip_panel_disable(struct rockchip_panel *panel)
79 {
80 	if (!panel)
81 		return;
82 
83 	if (panel->funcs && panel->funcs->disable)
84 		panel->funcs->disable(panel);
85 }
86 
87 #endif	/* _ROCKCHIP_PANEL_H_ */
88