83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ */
 | 
						|
/*
 | 
						|
 * RZ/G2L Display Unit VSP-Based Compositor
 | 
						|
 *
 | 
						|
 * Copyright (C) 2023 Renesas Electronics Corporation
 | 
						|
 *
 | 
						|
 * Based on rcar_du_vsp.h
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __RZG2L_DU_VSP_H__
 | 
						|
#define __RZG2L_DU_VSP_H__
 | 
						|
 | 
						|
#include <drm/drm_plane.h>
 | 
						|
#include <linux/container_of.h>
 | 
						|
#include <linux/scatterlist.h>
 | 
						|
 | 
						|
struct device;
 | 
						|
struct drm_framebuffer;
 | 
						|
struct rzg2l_du_device;
 | 
						|
struct rzg2l_du_format_info;
 | 
						|
struct rzg2l_du_vsp;
 | 
						|
 | 
						|
struct rzg2l_du_vsp_plane {
 | 
						|
	struct drm_plane plane;
 | 
						|
	struct rzg2l_du_vsp *vsp;
 | 
						|
	unsigned int index;
 | 
						|
};
 | 
						|
 | 
						|
struct rzg2l_du_vsp {
 | 
						|
	unsigned int index;
 | 
						|
	struct device *vsp;
 | 
						|
	struct rzg2l_du_device *dev;
 | 
						|
};
 | 
						|
 | 
						|
static inline struct rzg2l_du_vsp_plane *to_rzg2l_vsp_plane(struct drm_plane *p)
 | 
						|
{
 | 
						|
	return container_of(p, struct rzg2l_du_vsp_plane, plane);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * struct rzg2l_du_vsp_plane_state - Driver-specific plane state
 | 
						|
 * @state: base DRM plane state
 | 
						|
 * @format: information about the pixel format used by the plane
 | 
						|
 */
 | 
						|
struct rzg2l_du_vsp_plane_state {
 | 
						|
	struct drm_plane_state state;
 | 
						|
 | 
						|
	const struct rzg2l_du_format_info *format;
 | 
						|
};
 | 
						|
 | 
						|
static inline struct rzg2l_du_vsp_plane_state *
 | 
						|
to_rzg2l_vsp_plane_state(struct drm_plane_state *state)
 | 
						|
{
 | 
						|
	return container_of(state, struct rzg2l_du_vsp_plane_state, state);
 | 
						|
}
 | 
						|
 | 
						|
#if IS_ENABLED(CONFIG_VIDEO_RENESAS_VSP1)
 | 
						|
int rzg2l_du_vsp_init(struct rzg2l_du_vsp *vsp, struct device_node *np,
 | 
						|
		      unsigned int crtcs);
 | 
						|
void rzg2l_du_vsp_enable(struct rzg2l_du_crtc *crtc);
 | 
						|
void rzg2l_du_vsp_disable(struct rzg2l_du_crtc *crtc);
 | 
						|
void rzg2l_du_vsp_atomic_flush(struct rzg2l_du_crtc *crtc);
 | 
						|
struct drm_plane *rzg2l_du_vsp_get_drm_plane(struct rzg2l_du_crtc *crtc,
 | 
						|
					     unsigned int pipe_index);
 | 
						|
#else
 | 
						|
static inline int rzg2l_du_vsp_init(struct rzg2l_du_vsp *vsp, struct device_node *np,
 | 
						|
				    unsigned int crtcs)
 | 
						|
{
 | 
						|
	return -ENXIO;
 | 
						|
}
 | 
						|
 | 
						|
static inline void rzg2l_du_vsp_enable(struct rzg2l_du_crtc *crtc) { };
 | 
						|
static inline void rzg2l_du_vsp_disable(struct rzg2l_du_crtc *crtc) { };
 | 
						|
static inline void rzg2l_du_vsp_atomic_flush(struct rzg2l_du_crtc *crtc) { };
 | 
						|
static inline struct drm_plane *rzg2l_du_vsp_get_drm_plane(struct rzg2l_du_crtc *crtc,
 | 
						|
							   unsigned int pipe_index)
 | 
						|
{
 | 
						|
	return ERR_PTR(-ENXIO);
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __RZG2L_DU_VSP_H__ */
 |