xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_panel.h (revision b752fb5dae0309c18273783c9511c4477fc8caad)
1186f8572SMark Yao /*
2186f8572SMark Yao  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3186f8572SMark Yao  *
4186f8572SMark Yao  * SPDX-License-Identifier:	GPL-2.0+
5186f8572SMark Yao  */
6186f8572SMark Yao 
7186f8572SMark Yao #ifndef _ROCKCHIP_PANEL_H_
8186f8572SMark Yao #define _ROCKCHIP_PANEL_H_
9186f8572SMark Yao 
101a8d717cSWyon Bi struct display_state;
117cacd0a8SWyon Bi struct rockchip_panel;
120594ce39SZhang Yubing struct rockchip_conn;
131a8d717cSWyon Bi 
14186f8572SMark Yao struct rockchip_panel_funcs {
157cacd0a8SWyon Bi 	void (*prepare)(struct rockchip_panel *panel);
167cacd0a8SWyon Bi 	void (*unprepare)(struct rockchip_panel *panel);
177cacd0a8SWyon Bi 	void (*enable)(struct rockchip_panel *panel);
187cacd0a8SWyon Bi 	void (*disable)(struct rockchip_panel *panel);
19*b752fb5dSWyon Bi 	int (*get_mode)(struct rockchip_panel *panel,
20*b752fb5dSWyon Bi 			struct drm_display_mode *mode);
21186f8572SMark Yao };
22186f8572SMark Yao 
23186f8572SMark Yao struct rockchip_panel {
241a8d717cSWyon Bi 	struct udevice *dev;
251a8d717cSWyon Bi 	u32 bus_format;
2600cdbd6cSWyon Bi 	unsigned int bpc;
27186f8572SMark Yao 	const struct rockchip_panel_funcs *funcs;
28186f8572SMark Yao 	const void *data;
297cacd0a8SWyon Bi 
300594ce39SZhang Yubing 	struct rockchip_connector *conn;
317cacd0a8SWyon Bi 	struct display_state *state;
32186f8572SMark Yao };
33186f8572SMark Yao 
rockchip_panel_init(struct rockchip_panel * panel,struct rockchip_connector * conn,struct display_state * state)34e8f890c7SWyon Bi static inline void rockchip_panel_init(struct rockchip_panel *panel,
350594ce39SZhang Yubing 				       struct rockchip_connector *conn,
36e8f890c7SWyon Bi 				       struct display_state *state)
377cacd0a8SWyon Bi {
387cacd0a8SWyon Bi 	if (!panel)
397cacd0a8SWyon Bi 		return;
407cacd0a8SWyon Bi 
410594ce39SZhang Yubing 	panel->conn = conn;
42e8f890c7SWyon Bi 	panel->state = state;
43e8f890c7SWyon Bi 
44e8f890c7SWyon Bi 	if (panel->bus_format)
45e8f890c7SWyon Bi 		state->conn_state.bus_format = panel->bus_format;
46e8f890c7SWyon Bi 
47e8f890c7SWyon Bi 	if (panel->bpc)
48e8f890c7SWyon Bi 		state->conn_state.bpc = panel->bpc;
497cacd0a8SWyon Bi }
507cacd0a8SWyon Bi 
rockchip_panel_prepare(struct rockchip_panel * panel)517cacd0a8SWyon Bi static inline void rockchip_panel_prepare(struct rockchip_panel *panel)
527cacd0a8SWyon Bi {
537cacd0a8SWyon Bi 	if (!panel)
547cacd0a8SWyon Bi 		return;
557cacd0a8SWyon Bi 
567cacd0a8SWyon Bi 	if (panel->funcs && panel->funcs->prepare)
577cacd0a8SWyon Bi 		panel->funcs->prepare(panel);
587cacd0a8SWyon Bi }
597cacd0a8SWyon Bi 
rockchip_panel_enable(struct rockchip_panel * panel)607cacd0a8SWyon Bi static inline void rockchip_panel_enable(struct rockchip_panel *panel)
617cacd0a8SWyon Bi {
627cacd0a8SWyon Bi 	if (!panel)
637cacd0a8SWyon Bi 		return;
647cacd0a8SWyon Bi 
657cacd0a8SWyon Bi 	if (panel->funcs && panel->funcs->enable)
667cacd0a8SWyon Bi 		panel->funcs->enable(panel);
677cacd0a8SWyon Bi }
687cacd0a8SWyon Bi 
rockchip_panel_unprepare(struct rockchip_panel * panel)697cacd0a8SWyon Bi static inline void rockchip_panel_unprepare(struct rockchip_panel *panel)
707cacd0a8SWyon Bi {
717cacd0a8SWyon Bi 	if (!panel)
727cacd0a8SWyon Bi 		return;
737cacd0a8SWyon Bi 
747cacd0a8SWyon Bi 	if (panel->funcs && panel->funcs->unprepare)
757cacd0a8SWyon Bi 		panel->funcs->unprepare(panel);
767cacd0a8SWyon Bi }
777cacd0a8SWyon Bi 
rockchip_panel_disable(struct rockchip_panel * panel)787cacd0a8SWyon Bi static inline void rockchip_panel_disable(struct rockchip_panel *panel)
797cacd0a8SWyon Bi {
807cacd0a8SWyon Bi 	if (!panel)
817cacd0a8SWyon Bi 		return;
827cacd0a8SWyon Bi 
837cacd0a8SWyon Bi 	if (panel->funcs && panel->funcs->disable)
847cacd0a8SWyon Bi 		panel->funcs->disable(panel);
857cacd0a8SWyon Bi }
867cacd0a8SWyon Bi 
87186f8572SMark Yao #endif	/* _ROCKCHIP_PANEL_H_ */
88