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