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 Bistatic 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 Bistatic 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 Bistatic 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 Bistatic 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 Bistatic 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