1/* 2 * rcar_du_vsp.h -- R-Car Display Unit VSP-Based Compositor 3 * 4 * Copyright (C) 2015 Renesas Electronics Corporation 5 * 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 */ 13 14#ifndef __RCAR_DU_VSP_H__ 15#define __RCAR_DU_VSP_H__ 16 17#include <drm/drmP.h> 18#include <drm/drm_crtc.h> 19 20struct rcar_du_format_info; 21struct rcar_du_vsp; 22 23struct rcar_du_vsp_plane { 24 struct drm_plane plane; 25 struct rcar_du_vsp *vsp; 26 unsigned int index; 27}; 28 29struct rcar_du_vsp { 30 unsigned int index; 31 struct device *vsp; 32 struct rcar_du_device *dev; 33 struct rcar_du_vsp_plane *planes; 34 unsigned int num_planes; 35}; 36 37static inline struct rcar_du_vsp_plane *to_rcar_vsp_plane(struct drm_plane *p) 38{ 39 return container_of(p, struct rcar_du_vsp_plane, plane); 40} 41 42/** 43 * struct rcar_du_vsp_plane_state - Driver-specific plane state 44 * @state: base DRM plane state 45 * @format: information about the pixel format used by the plane 46 * @sg_tables: scatter-gather tables for the frame buffer memory 47 * @alpha: value of the plane alpha property 48 * @zpos: value of the plane zpos property 49 */ 50struct rcar_du_vsp_plane_state { 51 struct drm_plane_state state; 52 53 const struct rcar_du_format_info *format; 54 struct sg_table sg_tables[3]; 55 56 unsigned int alpha; 57 unsigned int zpos; 58}; 59 60static inline struct rcar_du_vsp_plane_state * 61to_rcar_vsp_plane_state(struct drm_plane_state *state) 62{ 63 return container_of(state, struct rcar_du_vsp_plane_state, state); 64} 65 66#ifdef CONFIG_DRM_RCAR_VSP 67int rcar_du_vsp_init(struct rcar_du_vsp *vsp); 68void rcar_du_vsp_enable(struct rcar_du_crtc *crtc); 69void rcar_du_vsp_disable(struct rcar_du_crtc *crtc); 70void rcar_du_vsp_atomic_begin(struct rcar_du_crtc *crtc); 71void rcar_du_vsp_atomic_flush(struct rcar_du_crtc *crtc); 72#else 73static inline int rcar_du_vsp_init(struct rcar_du_vsp *vsp) { return -ENXIO; }; 74static inline void rcar_du_vsp_enable(struct rcar_du_crtc *crtc) { }; 75static inline void rcar_du_vsp_disable(struct rcar_du_crtc *crtc) { }; 76static inline void rcar_du_vsp_atomic_begin(struct rcar_du_crtc *crtc) { }; 77static inline void rcar_du_vsp_atomic_flush(struct rcar_du_crtc *crtc) { }; 78#endif 79 80#endif /* __RCAR_DU_VSP_H__ */ 81