xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_crtc.h (revision b02eb70b4e907c4f7c2425affad55e521156cdd4)
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_CRTC_H_
8186f8572SMark Yao #define _ROCKCHIP_CRTC_H_
9186f8572SMark Yao 
1063cb669fSSandy Huang #define VOP2_MAX_VP				4
1163cb669fSSandy Huang 
1263cb669fSSandy Huang struct rockchip_vp {
1363cb669fSSandy Huang 	bool enable;
14c2b1fe35SDamon Ding 	bool xmirror_en;
1563cb669fSSandy Huang 	u8 bg_ovl_dly;
165fc2b656SDamon Ding 	u8 primary_plane_id;
176eff7620SSandy Huang 	int output_type;
186eff7620SSandy Huang 	u32 plane_mask;
19ee008497SSandy Huang 	int cursor_plane;
2063cb669fSSandy Huang };
2163cb669fSSandy Huang 
22186f8572SMark Yao struct rockchip_crtc {
23186f8572SMark Yao 	const struct rockchip_crtc_funcs *funcs;
24186f8572SMark Yao 	const void *data;
252d7c136fSSandy Huang 	struct drm_display_mode active_mode;
2663cb669fSSandy Huang 	struct rockchip_vp vps[4];
272d7c136fSSandy Huang 	bool hdmi_hpd : 1;
282d7c136fSSandy Huang 	bool active : 1;
296eff7620SSandy Huang 	bool assign_plane : 1;
30820a5c17SDamon Ding 	bool splice_mode : 1;
31820a5c17SDamon Ding 	u8 splice_crtc_id;
32186f8572SMark Yao };
33186f8572SMark Yao 
34186f8572SMark Yao struct rockchip_crtc_funcs {
35cf53642aSSandy Huang 	int (*preinit)(struct display_state *state);
36186f8572SMark Yao 	int (*init)(struct display_state *state);
37186f8572SMark Yao 	void (*deinit)(struct display_state *state);
38186f8572SMark Yao 	int (*set_plane)(struct display_state *state);
39186f8572SMark Yao 	int (*prepare)(struct display_state *state);
40186f8572SMark Yao 	int (*enable)(struct display_state *state);
41186f8572SMark Yao 	int (*disable)(struct display_state *state);
42186f8572SMark Yao 	void (*unprepare)(struct display_state *state);
43186f8572SMark Yao 	int (*fixup_dts)(struct display_state *state, void *blob);
4467b9012cSSandy Huang 	int (*send_mcu_cmd)(struct display_state *state, u32 type, u32 value);
45820a5c17SDamon Ding 	int (*check)(struct display_state *state);
4622007755SDamon Ding 	int (*mode_valid)(struct display_state *state);
47*b02eb70bSDamon Ding 	int (*mode_fixup)(struct display_state *state);
484c765862SDamon Ding 	int (*plane_check)(struct display_state *state);
4972388c26SDamon Ding 	int (*regs_dump)(struct display_state *state);
5072388c26SDamon Ding 	int (*active_regs_dump)(struct display_state *state);
518e7ef808SDamon Ding 	int (*apply_soft_te)(struct display_state *state);
52186f8572SMark Yao };
53186f8572SMark Yao 
54186f8572SMark Yao struct vop_data;
55d0408543SAndy Yan struct vop2_data;
56186f8572SMark Yao extern const struct rockchip_crtc_funcs rockchip_vop_funcs;
57d0408543SAndy Yan extern const struct rockchip_crtc_funcs rockchip_vop2_funcs;
58186f8572SMark Yao extern const struct vop_data rk3036_vop;
597130fbf6SSandy Huang extern const struct vop_data px30_vop_lit;
607130fbf6SSandy Huang extern const struct vop_data px30_vop_big;
615c651246SSandy Huang extern const struct vop_data rk3308_vop;
62ad3aa75aSSandy Huang extern const struct vop_data rk1808_vop;
6306bb018fSSandy Huang extern const struct vop_data rk3288_vop_big;
6406bb018fSSandy Huang extern const struct vop_data rk3288_vop_lit;
65186f8572SMark Yao extern const struct vop_data rk3368_vop;
66186f8572SMark Yao extern const struct vop_data rk3366_vop;
67186f8572SMark Yao extern const struct vop_data rk3399_vop_big;
68186f8572SMark Yao extern const struct vop_data rk3399_vop_lit;
69186f8572SMark Yao extern const struct vop_data rk322x_vop;
70186f8572SMark Yao extern const struct vop_data rk3328_vop;
7154f7137bSDamon Ding extern const struct vop_data rv1106_vop;
72fe49d276SSandy Huang extern const struct vop_data rv1108_vop;
73a144d23dSAndy Yan extern const struct vop_data rv1126_vop;
745fa6e665SDamon Ding extern const struct vop2_data rk3528_vop;
75452afb13SDamon Ding extern const struct vop2_data rk3562_vop;
76d0408543SAndy Yan extern const struct vop2_data rk3568_vop;
77ecc31b6eSAndy Yan extern const struct vop2_data rk3588_vop;
78186f8572SMark Yao #endif
79