162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __IPUV3_PLANE_H__ 362306a36Sopenharmony_ci#define __IPUV3_PLANE_H__ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <drm/drm_crtc.h> /* drm_plane */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistruct drm_plane; 862306a36Sopenharmony_cistruct drm_device; 962306a36Sopenharmony_cistruct ipu_soc; 1062306a36Sopenharmony_cistruct drm_crtc; 1162306a36Sopenharmony_cistruct drm_framebuffer; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct ipuv3_channel; 1462306a36Sopenharmony_cistruct dmfc_channel; 1562306a36Sopenharmony_cistruct ipu_dp; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct ipu_plane { 1862306a36Sopenharmony_ci struct drm_plane base; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci struct ipu_soc *ipu; 2162306a36Sopenharmony_ci struct ipuv3_channel *ipu_ch; 2262306a36Sopenharmony_ci struct ipuv3_channel *alpha_ch; 2362306a36Sopenharmony_ci struct dmfc_channel *dmfc; 2462306a36Sopenharmony_ci struct ipu_dp *dp; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci int dma; 2762306a36Sopenharmony_ci int dp_flow; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci bool disabling; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistruct ipu_plane *ipu_plane_init(struct drm_device *dev, struct ipu_soc *ipu, 3362306a36Sopenharmony_ci int dma, int dp, unsigned int possible_crtcs, 3462306a36Sopenharmony_ci enum drm_plane_type type); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* Init IDMAC, DMFC, DP */ 3762306a36Sopenharmony_ciint ipu_plane_mode_set(struct ipu_plane *plane, struct drm_crtc *crtc, 3862306a36Sopenharmony_ci struct drm_display_mode *mode, 3962306a36Sopenharmony_ci struct drm_framebuffer *fb, int crtc_x, int crtc_y, 4062306a36Sopenharmony_ci unsigned int crtc_w, unsigned int crtc_h, 4162306a36Sopenharmony_ci uint32_t src_x, uint32_t src_y, uint32_t src_w, 4262306a36Sopenharmony_ci uint32_t src_h, bool interlaced); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciint ipu_plane_irq(struct ipu_plane *plane); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_civoid ipu_plane_disable(struct ipu_plane *ipu_plane, bool disable_dp_channel); 4762306a36Sopenharmony_civoid ipu_plane_disable_deferred(struct drm_plane *plane); 4862306a36Sopenharmony_cibool ipu_plane_atomic_update_pending(struct drm_plane *plane); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#endif 51