2013-06-19 13:54:11 +02:00
/*
* rcar_du_plane . h - - R - Car Display Unit Planes
*
2014-02-06 18:13:52 +01:00
* Copyright ( C ) 2013 - 2014 Renesas Electronics Corporation
2013-06-19 13:54:11 +02:00
*
* Contact : Laurent Pinchart ( laurent . pinchart @ ideasonboard . com )
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*/
# ifndef __RCAR_DU_PLANE_H__
# define __RCAR_DU_PLANE_H__
2013-06-16 21:02:49 +02:00
# include <drm/drmP.h>
# include <drm/drm_crtc.h>
2013-06-19 13:54:11 +02:00
struct rcar_du_format_info ;
2013-06-16 21:01:02 +02:00
struct rcar_du_group ;
2013-06-19 13:54:11 +02:00
2015-02-17 18:34:17 +02:00
/* The RCAR DU has 8 hardware planes, shared between primary and overlay planes.
* As using overlay planes requires at least one of the CRTCs being enabled , no
* more than 7 overlay planes can be available . We thus create 1 primary plane
* per CRTC and 7 overlay planes , for a total of up to 9 KMS planes .
2013-06-19 13:54:11 +02:00
*/
2015-02-17 18:34:17 +02:00
# define RCAR_DU_NUM_KMS_PLANES 9
2013-06-19 13:54:11 +02:00
# define RCAR_DU_NUM_HW_PLANES 8
2013-06-21 17:36:15 +02:00
enum rcar_du_plane_source {
RCAR_DU_PLANE_MEMORY ,
RCAR_DU_PLANE_VSPD0 ,
RCAR_DU_PLANE_VSPD1 ,
} ;
2013-06-19 13:54:11 +02:00
struct rcar_du_plane {
2015-02-17 18:34:17 +02:00
struct drm_plane plane ;
2013-06-16 21:01:02 +02:00
struct rcar_du_group * group ;
2013-06-19 13:54:11 +02:00
} ;
2015-02-25 18:27:19 +02:00
static inline struct rcar_du_plane * to_rcar_plane ( struct drm_plane * plane )
{
return container_of ( plane , struct rcar_du_plane , plane ) ;
}
2015-04-29 00:12:40 +03:00
/**
* struct rcar_du_plane_state - Driver - specific plane state
* @ state : base DRM plane state
* @ format : information about the pixel format used by the plane
* @ hwindex : 0 - based hardware plane index , - 1 means unused
* @ alpha : value of the plane alpha property
* @ colorkey : value of the plane colorkey property
* @ zpos : value of the plane zpos property
*/
2015-02-23 02:36:31 +02:00
struct rcar_du_plane_state {
struct drm_plane_state state ;
2015-02-23 02:59:35 +02:00
const struct rcar_du_format_info * format ;
2015-04-29 00:12:40 +03:00
int hwindex ;
2013-06-21 17:36:15 +02:00
enum rcar_du_plane_source source ;
2015-02-23 02:59:35 +02:00
2015-02-23 02:36:31 +02:00
unsigned int alpha ;
unsigned int colorkey ;
unsigned int zpos ;
} ;
static inline struct rcar_du_plane_state *
2015-04-29 00:48:17 +03:00
to_rcar_plane_state ( struct drm_plane_state * state )
2015-02-23 02:36:31 +02:00
{
return container_of ( state , struct rcar_du_plane_state , state ) ;
}
2015-07-27 15:34:18 +03:00
int rcar_du_atomic_check_planes ( struct drm_device * dev ,
struct drm_atomic_state * state ) ;
2013-06-16 21:01:02 +02:00
int rcar_du_planes_init ( struct rcar_du_group * rgrp ) ;
2013-06-16 19:18:31 +02:00
2013-06-19 13:54:11 +02:00
void rcar_du_plane_setup ( struct rcar_du_plane * plane ) ;
# endif /* __RCAR_DU_PLANE_H__ */