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