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