2018-07-26 02:37:32 +00:00
/* SPDX-License-Identifier: GPL-2.0+ */
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 )
*/
# ifndef __RCAR_DU_PLANE_H__
# define __RCAR_DU_PLANE_H__
2018-12-27 11:26:56 +02:00
# include <drm/drm_plane.h>
2013-06-16 21:02:49 +02:00
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
2017-07-11 01:13:20 +03:00
/*
* The RCAR DU has 8 hardware planes , shared between primary and overlay planes .
2015-02-17 18:34:17 +02:00
* 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
* @ colorkey : value of the plane colorkey 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 colorkey ;
} ;
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 ) ;
2017-08-15 18:45:21 +03:00
int __rcar_du_plane_atomic_check ( struct drm_plane * plane ,
struct drm_plane_state * state ,
const struct rcar_du_format_info * * format ) ;
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
2015-09-07 17:14:58 +03:00
void __rcar_du_plane_setup ( struct rcar_du_group * rgrp ,
const struct rcar_du_plane_state * state ) ;
static inline void rcar_du_plane_setup ( struct rcar_du_plane * plane )
{
struct rcar_du_plane_state * state =
to_rcar_plane_state ( plane - > plane . state ) ;
return __rcar_du_plane_setup ( plane - > group , state ) ;
}
2013-06-19 13:54:11 +02:00
# endif /* __RCAR_DU_PLANE_H__ */