1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __IPUV3_PLANE_H__ 3*4882a593Smuzhiyun #define __IPUV3_PLANE_H__ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <drm/drm_crtc.h> /* drm_plane */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun struct drm_plane; 8*4882a593Smuzhiyun struct drm_device; 9*4882a593Smuzhiyun struct ipu_soc; 10*4882a593Smuzhiyun struct drm_crtc; 11*4882a593Smuzhiyun struct drm_framebuffer; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun struct ipuv3_channel; 14*4882a593Smuzhiyun struct dmfc_channel; 15*4882a593Smuzhiyun struct ipu_dp; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun struct ipu_plane { 18*4882a593Smuzhiyun struct drm_plane base; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun struct ipu_soc *ipu; 21*4882a593Smuzhiyun struct ipuv3_channel *ipu_ch; 22*4882a593Smuzhiyun struct ipuv3_channel *alpha_ch; 23*4882a593Smuzhiyun struct dmfc_channel *dmfc; 24*4882a593Smuzhiyun struct ipu_dp *dp; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun int dma; 27*4882a593Smuzhiyun int dp_flow; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun bool disabling; 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct ipu_plane *ipu_plane_init(struct drm_device *dev, struct ipu_soc *ipu, 33*4882a593Smuzhiyun int dma, int dp, unsigned int possible_crtcs, 34*4882a593Smuzhiyun enum drm_plane_type type); 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* Init IDMAC, DMFC, DP */ 37*4882a593Smuzhiyun int ipu_plane_mode_set(struct ipu_plane *plane, struct drm_crtc *crtc, 38*4882a593Smuzhiyun struct drm_display_mode *mode, 39*4882a593Smuzhiyun struct drm_framebuffer *fb, int crtc_x, int crtc_y, 40*4882a593Smuzhiyun unsigned int crtc_w, unsigned int crtc_h, 41*4882a593Smuzhiyun uint32_t src_x, uint32_t src_y, uint32_t src_w, 42*4882a593Smuzhiyun uint32_t src_h, bool interlaced); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun int ipu_plane_get_resources(struct ipu_plane *plane); 45*4882a593Smuzhiyun void ipu_plane_put_resources(struct ipu_plane *plane); 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun int ipu_plane_irq(struct ipu_plane *plane); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun void ipu_plane_disable(struct ipu_plane *ipu_plane, bool disable_dp_channel); 50*4882a593Smuzhiyun void ipu_plane_disable_deferred(struct drm_plane *plane); 51*4882a593Smuzhiyun bool ipu_plane_atomic_update_pending(struct drm_plane *plane); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #endif 54