2018-08-06 06:16:40 +03:00
/* SPDX-License-Identifier: GPL-2.0+ */
2015-08-03 00:37:01 +03:00
/*
* vsp1 . h - - R - Car VSP1 API
*
* Copyright ( C ) 2015 Renesas Electronics Corporation
*
* Contact : Laurent Pinchart ( laurent . pinchart @ ideasonboard . com )
*/
# ifndef __MEDIA_VSP1_H__
# define __MEDIA_VSP1_H__
2017-05-17 02:20:06 +03:00
# include <linux/scatterlist.h>
2015-08-03 00:37:01 +03:00
# include <linux/types.h>
2016-04-24 01:08:59 +03:00
# include <linux/videodev2.h>
2015-08-03 00:37:01 +03:00
struct device ;
int vsp1_du_init ( struct device * dev ) ;
2019-02-21 04:38:06 +03:00
# define VSP1_DU_STATUS_COMPLETE BIT(0)
2019-02-21 04:46:42 +03:00
# define VSP1_DU_STATUS_WRITEBACK BIT(1)
2019-02-21 04:38:06 +03:00
2017-03-03 12:31:48 +03:00
/**
* struct vsp1_du_lif_config - VSP LIF configuration
* @ width : output frame width
* @ height : output frame height
2018-08-03 14:37:29 +03:00
* @ interlaced : true for interlaced pipelines
2017-03-04 05:01:17 +03:00
* @ callback : frame completion callback function ( optional ) . When a callback
* is provided , the VSP driver guarantees that it will be called once
* and only once for each vsp1_du_atomic_flush ( ) call .
* @ callback_data : data to be passed to the frame completion callback
2017-03-03 12:31:48 +03:00
*/
struct vsp1_du_lif_config {
unsigned int width ;
unsigned int height ;
2018-08-03 14:37:29 +03:00
bool interlaced ;
2017-03-04 05:01:17 +03:00
2019-02-21 04:38:06 +03:00
void ( * callback ) ( void * data , unsigned int status , u32 crc ) ;
2017-03-04 05:01:17 +03:00
void * callback_data ;
2017-03-03 12:31:48 +03:00
} ;
2017-05-25 22:14:24 +03:00
int vsp1_du_setup_lif ( struct device * dev , unsigned int pipe_index ,
const struct vsp1_du_lif_config * cfg ) ;
2015-08-03 00:37:01 +03:00
2017-11-30 19:32:18 +03:00
/**
* struct vsp1_du_atomic_config - VSP atomic configuration parameters
* @ pixelformat : plane pixel format ( V4L2 4 CC )
2017-10-26 09:27:51 +03:00
* @ pitch : line pitch in bytes for the first plane
2017-11-30 19:32:18 +03:00
* @ mem : DMA memory address for each plane of the frame buffer
* @ src : source rectangle in the frame buffer ( integer coordinates )
* @ dst : destination rectangle on the display ( integer coordinates )
* @ alpha : alpha value ( 0 : fully transparent , 255 : fully opaque )
* @ zpos : Z position of the plane ( from 0 to number of planes minus 1 )
*/
2016-04-24 01:08:59 +03:00
struct vsp1_du_atomic_config {
u32 pixelformat ;
unsigned int pitch ;
2016-08-18 16:16:17 +03:00
dma_addr_t mem [ 3 ] ;
2016-04-24 01:08:59 +03:00
struct v4l2_rect src ;
struct v4l2_rect dst ;
unsigned int alpha ;
unsigned int zpos ;
} ;
2017-12-01 14:47:19 +03:00
/**
* enum vsp1_du_crc_source - Source used for CRC calculation
* @ VSP1_DU_CRC_NONE : CRC calculation disabled
* @ VSP1_DU_CRC_PLANE : Perform CRC calculation on an input plane
* @ VSP1_DU_CRC_OUTPUT : Perform CRC calculation on the composed output
*/
enum vsp1_du_crc_source {
VSP1_DU_CRC_NONE ,
VSP1_DU_CRC_PLANE ,
VSP1_DU_CRC_OUTPUT ,
} ;
/**
* struct vsp1_du_crc_config - VSP CRC computation configuration parameters
* @ source : source for CRC calculation
* @ index : index of the CRC source plane ( when source is set to plane )
*/
struct vsp1_du_crc_config {
enum vsp1_du_crc_source source ;
unsigned int index ;
} ;
2019-02-21 04:46:42 +03:00
/**
* struct vsp1_du_writeback_config - VSP writeback configuration parameters
* @ pixelformat : plane pixel format ( V4L2 4 CC )
* @ pitch : line pitch in bytes for the first plane
* @ mem : DMA memory address for each plane of the frame buffer
*/
struct vsp1_du_writeback_config {
u32 pixelformat ;
unsigned int pitch ;
dma_addr_t mem [ 3 ] ;
} ;
2017-12-01 14:47:19 +03:00
/**
* struct vsp1_du_atomic_pipe_config - VSP atomic pipe configuration parameters
* @ crc : CRC computation configuration
2019-02-21 04:46:42 +03:00
* @ writeback : writeback configuration
2017-12-01 14:47:19 +03:00
*/
struct vsp1_du_atomic_pipe_config {
struct vsp1_du_crc_config crc ;
2019-02-21 04:46:42 +03:00
struct vsp1_du_writeback_config writeback ;
2017-12-01 14:47:19 +03:00
} ;
2017-05-25 22:14:24 +03:00
void vsp1_du_atomic_begin ( struct device * dev , unsigned int pipe_index ) ;
int vsp1_du_atomic_update ( struct device * dev , unsigned int pipe_index ,
unsigned int rpf ,
2016-04-24 02:11:59 +03:00
const struct vsp1_du_atomic_config * cfg ) ;
2017-12-01 14:47:19 +03:00
void vsp1_du_atomic_flush ( struct device * dev , unsigned int pipe_index ,
const struct vsp1_du_atomic_pipe_config * cfg ) ;
2017-05-17 02:20:06 +03:00
int vsp1_du_map_sg ( struct device * dev , struct sg_table * sgt ) ;
void vsp1_du_unmap_sg ( struct device * dev , struct sg_table * sgt ) ;
2015-08-03 00:37:01 +03:00
# endif /* __MEDIA_VSP1_H__ */