2013-06-16 21:01:02 +02:00
/*
* rcar_du_group . c - - R - Car Display Unit Planes and CRTCs Group
*
2014-02-06 18:13:52 +01:00
* Copyright ( C ) 2013 - 2014 Renesas Electronics Corporation
2013-06-16 21:01:02 +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_GROUP_H__
# define __RCAR_DU_GROUP_H__
2015-02-25 18:27:19 +02:00
# include <linux/mutex.h>
2013-06-16 21:01:02 +02:00
# include "rcar_du_plane.h"
struct rcar_du_device ;
/*
* struct rcar_du_group - CRTCs and planes group
* @ dev : the DU device
* @ mmio_offset : registers offset in the device memory map
* @ index : group index
2015-04-28 17:36:33 +03:00
* @ num_crtcs : number of CRTCs in this group ( 1 or 2 )
2013-06-16 21:01:02 +02:00
* @ use_count : number of users of the group ( rcar_du_group_ ( get | put ) )
* @ used_crtcs : number of CRTCs currently in use
2015-04-28 18:01:45 +03:00
* @ lock : protects the dptsr_planes field and the DPTSR register
* @ dptsr_planes : bitmask of planes driven by dot - clock and timing generator 1
2015-05-25 16:32:45 +03:00
* @ num_planes : number of planes in the group
2013-06-16 21:01:02 +02:00
* @ planes : planes handled by the group
2013-08-24 02:17:03 +02:00
* @ need_restart : the group needs to be restarted due to a configuration change
2013-06-16 21:01:02 +02:00
*/
struct rcar_du_group {
struct rcar_du_device * dev ;
unsigned int mmio_offset ;
unsigned int index ;
2015-04-28 17:36:33 +03:00
unsigned int num_crtcs ;
2013-06-16 21:01:02 +02:00
unsigned int use_count ;
unsigned int used_crtcs ;
2015-02-25 18:27:19 +02:00
struct mutex lock ;
2015-04-28 18:01:45 +03:00
unsigned int dptsr_planes ;
2015-02-25 18:27:19 +02:00
2015-05-25 16:32:45 +03:00
unsigned int num_planes ;
2015-04-29 00:05:56 +03:00
struct rcar_du_plane planes [ RCAR_DU_NUM_KMS_PLANES ] ;
2013-08-24 02:17:03 +02:00
bool need_restart ;
2013-06-16 21:01:02 +02:00
} ;
2013-06-17 00:29:25 +02:00
u32 rcar_du_group_read ( struct rcar_du_group * rgrp , u32 reg ) ;
void rcar_du_group_write ( struct rcar_du_group * rgrp , u32 reg , u32 data ) ;
2013-06-16 21:01:02 +02:00
int rcar_du_group_get ( struct rcar_du_group * rgrp ) ;
void rcar_du_group_put ( struct rcar_du_group * rgrp ) ;
void rcar_du_group_start_stop ( struct rcar_du_group * rgrp , bool start ) ;
void rcar_du_group_restart ( struct rcar_du_group * rgrp ) ;
2013-06-17 03:20:08 +02:00
int rcar_du_group_set_routing ( struct rcar_du_group * rgrp ) ;
2013-06-16 21:01:02 +02:00
2013-06-21 17:54:50 +02:00
int rcar_du_set_dpad0_vsp1_routing ( struct rcar_du_device * rcdu ) ;
2013-06-16 21:01:02 +02:00
# endif /* __RCAR_DU_GROUP_H__ */