xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_crtc.h (revision 60e6e79d7a046ddb710e589fd559751760c3b206)
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;
1545ec9215SDamon Ding 	bool sharp_en;
1663cb669fSSandy Huang 	u8 bg_ovl_dly;
175fc2b656SDamon Ding 	u8 primary_plane_id;
18b4fa21deSDamon Ding 	u8 cursor_plane_id;
19a552a69cSDamon Ding 	u8 dclk_div;
206eff7620SSandy Huang 	int output_type;
216eff7620SSandy Huang 	u32 plane_mask;
2263cb669fSSandy Huang };
2363cb669fSSandy Huang 
24186f8572SMark Yao struct rockchip_crtc {
25186f8572SMark Yao 	const struct rockchip_crtc_funcs *funcs;
26186f8572SMark Yao 	const void *data;
272d7c136fSSandy Huang 	struct drm_display_mode active_mode;
2863cb669fSSandy Huang 	struct rockchip_vp vps[4];
292d7c136fSSandy Huang 	bool hdmi_hpd : 1;
302d7c136fSSandy Huang 	bool active : 1;
316eff7620SSandy Huang 	bool assign_plane : 1;
32820a5c17SDamon Ding 	bool splice_mode : 1;
33820a5c17SDamon Ding 	u8 splice_crtc_id;
34186f8572SMark Yao };
35186f8572SMark Yao 
36186f8572SMark Yao struct rockchip_crtc_funcs {
37*60e6e79dSSandy Huang 	int (*reset) (struct udevice *dev, u32 axi, u32 vp_mask, u32 plane_mask);
38cf53642aSSandy Huang 	int (*preinit)(struct display_state *state);
39186f8572SMark Yao 	int (*init)(struct display_state *state);
40186f8572SMark Yao 	void (*deinit)(struct display_state *state);
41186f8572SMark Yao 	int (*set_plane)(struct display_state *state);
42186f8572SMark Yao 	int (*prepare)(struct display_state *state);
43186f8572SMark Yao 	int (*enable)(struct display_state *state);
44efa01fe4SZhang Yubing 	int (*post_enable)(struct display_state *state);
45186f8572SMark Yao 	int (*disable)(struct display_state *state);
46186f8572SMark Yao 	void (*unprepare)(struct display_state *state);
47186f8572SMark Yao 	int (*fixup_dts)(struct display_state *state, void *blob);
4867b9012cSSandy Huang 	int (*send_mcu_cmd)(struct display_state *state, u32 type, u32 value);
49820a5c17SDamon Ding 	int (*check)(struct display_state *state);
5022007755SDamon Ding 	int (*mode_valid)(struct display_state *state);
51b02eb70bSDamon Ding 	int (*mode_fixup)(struct display_state *state);
524c765862SDamon Ding 	int (*plane_check)(struct display_state *state);
5372388c26SDamon Ding 	int (*regs_dump)(struct display_state *state);
5472388c26SDamon Ding 	int (*active_regs_dump)(struct display_state *state);
558e7ef808SDamon Ding 	int (*apply_soft_te)(struct display_state *state);
56186f8572SMark Yao };
57186f8572SMark Yao 
58186f8572SMark Yao struct vop_data;
59d0408543SAndy Yan struct vop2_data;
60186f8572SMark Yao extern const struct rockchip_crtc_funcs rockchip_vop_funcs;
61d0408543SAndy Yan extern const struct rockchip_crtc_funcs rockchip_vop2_funcs;
62186f8572SMark Yao extern const struct vop_data rk3036_vop;
637130fbf6SSandy Huang extern const struct vop_data px30_vop_lit;
647130fbf6SSandy Huang extern const struct vop_data px30_vop_big;
655c651246SSandy Huang extern const struct vop_data rk3308_vop;
66ad3aa75aSSandy Huang extern const struct vop_data rk1808_vop;
6706bb018fSSandy Huang extern const struct vop_data rk3288_vop_big;
6806bb018fSSandy Huang extern const struct vop_data rk3288_vop_lit;
69186f8572SMark Yao extern const struct vop_data rk3368_vop;
70186f8572SMark Yao extern const struct vop_data rk3366_vop;
71186f8572SMark Yao extern const struct vop_data rk3399_vop_big;
72186f8572SMark Yao extern const struct vop_data rk3399_vop_lit;
73186f8572SMark Yao extern const struct vop_data rk322x_vop;
74186f8572SMark Yao extern const struct vop_data rk3328_vop;
75400ef44dSChaoyi Chen extern const struct vop_data rk3506_vop;
7654f7137bSDamon Ding extern const struct vop_data rv1106_vop;
77fe49d276SSandy Huang extern const struct vop_data rv1108_vop;
78a144d23dSAndy Yan extern const struct vop_data rv1126_vop;
7910a896e2SChaoyi Chen extern const struct vop_data rv1126b_vop;
805fa6e665SDamon Ding extern const struct vop2_data rk3528_vop;
81452afb13SDamon Ding extern const struct vop2_data rk3562_vop;
82d0408543SAndy Yan extern const struct vop2_data rk3568_vop;
83a552a69cSDamon Ding extern const struct vop2_data rk3576_vop;
8472f233a9SDamon Ding extern const struct vop2_data rk3576_vop_lit;
85ecc31b6eSAndy Yan extern const struct vop2_data rk3588_vop;
86186f8572SMark Yao #endif
87