2011-06-17 11:01:31 +04:00
/*
* Copyright ( C ) 2010 Texas Instruments Incorporated - http : //www.ti.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 version 2.
*
* This program is distributed WITHOUT ANY WARRANTY of any
* kind , whether express or implied ; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# ifndef VPBE_DISPLAY_H
# define VPBE_DISPLAY_H
/* Header files */
# include <linux/videodev2.h>
# include <media/v4l2-common.h>
2014-03-22 14:57:59 +04:00
# include <media/v4l2-fh.h>
2012-10-22 16:27:13 +04:00
# include <media/videobuf2-dma-contig.h>
2011-06-17 11:01:31 +04:00
# include <media/davinci/vpbe_types.h>
# include <media/davinci/vpbe_osd.h>
# include <media/davinci/vpbe.h>
# define VPBE_DISPLAY_MAX_DEVICES 2
enum vpbe_display_device_id {
VPBE_DISPLAY_DEVICE_0 ,
VPBE_DISPLAY_DEVICE_1
} ;
# define VPBE_DISPLAY_DRV_NAME "vpbe-display"
# define VPBE_DISPLAY_MAJOR_RELEASE 1
# define VPBE_DISPLAY_MINOR_RELEASE 0
# define VPBE_DISPLAY_BUILD 1
# define VPBE_DISPLAY_VERSION_CODE ((VPBE_DISPLAY_MAJOR_RELEASE << 16) | \
( VPBE_DISPLAY_MINOR_RELEASE < < 8 ) | \
VPBE_DISPLAY_BUILD )
# define VPBE_DISPLAY_VALID_FIELD(field) ((V4L2_FIELD_NONE == field) || \
( V4L2_FIELD_ANY = = field ) | | ( V4L2_FIELD_INTERLACED = = field ) )
/* Exp ratio numerator and denominator constants */
# define VPBE_DISPLAY_H_EXP_RATIO_N 9
# define VPBE_DISPLAY_H_EXP_RATIO_D 8
# define VPBE_DISPLAY_V_EXP_RATIO_N 6
# define VPBE_DISPLAY_V_EXP_RATIO_D 5
/* Zoom multiplication factor */
# define VPBE_DISPLAY_ZOOM_4X 4
# define VPBE_DISPLAY_ZOOM_2X 2
/* Structures */
struct display_layer_info {
int enable ;
/* Layer ID used by Display Manager */
enum osd_layer id ;
struct osd_layer_config config ;
enum osd_zoom_factor h_zoom ;
enum osd_zoom_factor v_zoom ;
enum osd_h_exp_ratio h_exp ;
enum osd_v_exp_ratio v_exp ;
} ;
2012-10-22 16:27:13 +04:00
struct vpbe_disp_buffer {
struct vb2_buffer vb ;
struct list_head list ;
} ;
2011-06-17 11:01:31 +04:00
/* vpbe display object structure */
struct vpbe_layer {
/* Pointer to the vpbe_display */
struct vpbe_display * disp_dev ;
/* Pointer pointing to current v4l2_buffer */
2012-10-22 16:27:13 +04:00
struct vpbe_disp_buffer * cur_frm ;
2011-06-17 11:01:31 +04:00
/* Pointer pointing to next v4l2_buffer */
2012-10-22 16:27:13 +04:00
struct vpbe_disp_buffer * next_frm ;
2011-06-17 11:01:31 +04:00
/* videobuf specific parameters
* Buffer queue used in video - buf
*/
2012-10-22 16:27:13 +04:00
struct vb2_queue buffer_queue ;
/* allocator-specific contexts for each plane */
struct vb2_alloc_ctx * alloc_ctx ;
2011-06-17 11:01:31 +04:00
/* Queue of filled frames */
struct list_head dma_queue ;
/* Used in video-buf */
spinlock_t irqlock ;
/* V4l2 specific parameters */
/* Identifies video device for this layer */
struct video_device video_dev ;
/* Used to store pixel format */
struct v4l2_pix_format pix_fmt ;
enum v4l2_field buf_field ;
/* Video layer configuration params */
struct display_layer_info layer_info ;
/* vpbe specific parameters
* enable window for display
*/
unsigned char window_enable ;
/* number of open instances of the layer */
unsigned int usrs ;
/* Indicates id of the field which is being displayed */
unsigned int field_id ;
/* Identifies device object */
enum vpbe_display_device_id device_id ;
/* facilitation of ioctl ops lock by v4l2*/
struct mutex opslock ;
u8 layer_first_int ;
} ;
/* vpbe device structure */
struct vpbe_display {
/* layer specific parameters */
/* lock for isr updates to buf layers*/
spinlock_t dma_queue_lock ;
/* C-Plane offset from start of y-plane */
unsigned int cbcr_ofst ;
struct vpbe_layer * dev [ VPBE_DISPLAY_MAX_DEVICES ] ;
struct vpbe_device * vpbe_dev ;
struct osd_state * osd_device ;
} ;
struct buf_config_params {
unsigned char min_numbuffers ;
unsigned char numbuffers [ VPBE_DISPLAY_MAX_DEVICES ] ;
unsigned int min_bufsize [ VPBE_DISPLAY_MAX_DEVICES ] ;
unsigned int layer_bufsize [ VPBE_DISPLAY_MAX_DEVICES ] ;
} ;
# endif /* VPBE_DISPLAY_H */