1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/ 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #ifndef VPBE_DISPLAY_H 6*4882a593Smuzhiyun #define VPBE_DISPLAY_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* Header files */ 9*4882a593Smuzhiyun #include <linux/videodev2.h> 10*4882a593Smuzhiyun #include <media/v4l2-common.h> 11*4882a593Smuzhiyun #include <media/v4l2-fh.h> 12*4882a593Smuzhiyun #include <media/videobuf2-v4l2.h> 13*4882a593Smuzhiyun #include <media/videobuf2-dma-contig.h> 14*4882a593Smuzhiyun #include <media/davinci/vpbe_types.h> 15*4882a593Smuzhiyun #include <media/davinci/vpbe_osd.h> 16*4882a593Smuzhiyun #include <media/davinci/vpbe.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define VPBE_DISPLAY_MAX_DEVICES 2 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun enum vpbe_display_device_id { 21*4882a593Smuzhiyun VPBE_DISPLAY_DEVICE_0, 22*4882a593Smuzhiyun VPBE_DISPLAY_DEVICE_1 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define VPBE_DISPLAY_DRV_NAME "vpbe-display" 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define VPBE_DISPLAY_MAJOR_RELEASE 1 28*4882a593Smuzhiyun #define VPBE_DISPLAY_MINOR_RELEASE 0 29*4882a593Smuzhiyun #define VPBE_DISPLAY_BUILD 1 30*4882a593Smuzhiyun #define VPBE_DISPLAY_VERSION_CODE ((VPBE_DISPLAY_MAJOR_RELEASE << 16) | \ 31*4882a593Smuzhiyun (VPBE_DISPLAY_MINOR_RELEASE << 8) | \ 32*4882a593Smuzhiyun VPBE_DISPLAY_BUILD) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define VPBE_DISPLAY_VALID_FIELD(field) ((V4L2_FIELD_NONE == field) || \ 35*4882a593Smuzhiyun (V4L2_FIELD_ANY == field) || (V4L2_FIELD_INTERLACED == field)) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Exp ratio numerator and denominator constants */ 38*4882a593Smuzhiyun #define VPBE_DISPLAY_H_EXP_RATIO_N 9 39*4882a593Smuzhiyun #define VPBE_DISPLAY_H_EXP_RATIO_D 8 40*4882a593Smuzhiyun #define VPBE_DISPLAY_V_EXP_RATIO_N 6 41*4882a593Smuzhiyun #define VPBE_DISPLAY_V_EXP_RATIO_D 5 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* Zoom multiplication factor */ 44*4882a593Smuzhiyun #define VPBE_DISPLAY_ZOOM_4X 4 45*4882a593Smuzhiyun #define VPBE_DISPLAY_ZOOM_2X 2 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* Structures */ 48*4882a593Smuzhiyun struct display_layer_info { 49*4882a593Smuzhiyun int enable; 50*4882a593Smuzhiyun /* Layer ID used by Display Manager */ 51*4882a593Smuzhiyun enum osd_layer id; 52*4882a593Smuzhiyun struct osd_layer_config config; 53*4882a593Smuzhiyun enum osd_zoom_factor h_zoom; 54*4882a593Smuzhiyun enum osd_zoom_factor v_zoom; 55*4882a593Smuzhiyun enum osd_h_exp_ratio h_exp; 56*4882a593Smuzhiyun enum osd_v_exp_ratio v_exp; 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun struct vpbe_disp_buffer { 60*4882a593Smuzhiyun struct vb2_v4l2_buffer vb; 61*4882a593Smuzhiyun struct list_head list; 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun /* vpbe display object structure */ 65*4882a593Smuzhiyun struct vpbe_layer { 66*4882a593Smuzhiyun /* Pointer to the vpbe_display */ 67*4882a593Smuzhiyun struct vpbe_display *disp_dev; 68*4882a593Smuzhiyun /* Pointer pointing to current v4l2_buffer */ 69*4882a593Smuzhiyun struct vpbe_disp_buffer *cur_frm; 70*4882a593Smuzhiyun /* Pointer pointing to next v4l2_buffer */ 71*4882a593Smuzhiyun struct vpbe_disp_buffer *next_frm; 72*4882a593Smuzhiyun /* videobuf specific parameters 73*4882a593Smuzhiyun * Buffer queue used in video-buf 74*4882a593Smuzhiyun */ 75*4882a593Smuzhiyun struct vb2_queue buffer_queue; 76*4882a593Smuzhiyun /* Queue of filled frames */ 77*4882a593Smuzhiyun struct list_head dma_queue; 78*4882a593Smuzhiyun /* Used in video-buf */ 79*4882a593Smuzhiyun spinlock_t irqlock; 80*4882a593Smuzhiyun /* V4l2 specific parameters */ 81*4882a593Smuzhiyun /* Identifies video device for this layer */ 82*4882a593Smuzhiyun struct video_device video_dev; 83*4882a593Smuzhiyun /* Used to store pixel format */ 84*4882a593Smuzhiyun struct v4l2_pix_format pix_fmt; 85*4882a593Smuzhiyun enum v4l2_field buf_field; 86*4882a593Smuzhiyun /* Video layer configuration params */ 87*4882a593Smuzhiyun struct display_layer_info layer_info; 88*4882a593Smuzhiyun /* vpbe specific parameters 89*4882a593Smuzhiyun * enable window for display 90*4882a593Smuzhiyun */ 91*4882a593Smuzhiyun unsigned char window_enable; 92*4882a593Smuzhiyun /* number of open instances of the layer */ 93*4882a593Smuzhiyun unsigned int usrs; 94*4882a593Smuzhiyun /* Indicates id of the field which is being displayed */ 95*4882a593Smuzhiyun unsigned int field_id; 96*4882a593Smuzhiyun /* Identifies device object */ 97*4882a593Smuzhiyun enum vpbe_display_device_id device_id; 98*4882a593Smuzhiyun /* facilitation of ioctl ops lock by v4l2*/ 99*4882a593Smuzhiyun struct mutex opslock; 100*4882a593Smuzhiyun u8 layer_first_int; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun /* vpbe device structure */ 104*4882a593Smuzhiyun struct vpbe_display { 105*4882a593Smuzhiyun /* layer specific parameters */ 106*4882a593Smuzhiyun /* lock for isr updates to buf layers*/ 107*4882a593Smuzhiyun spinlock_t dma_queue_lock; 108*4882a593Smuzhiyun /* C-Plane offset from start of y-plane */ 109*4882a593Smuzhiyun unsigned int cbcr_ofst; 110*4882a593Smuzhiyun struct vpbe_layer *dev[VPBE_DISPLAY_MAX_DEVICES]; 111*4882a593Smuzhiyun struct vpbe_device *vpbe_dev; 112*4882a593Smuzhiyun struct osd_state *osd_device; 113*4882a593Smuzhiyun }; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun struct buf_config_params { 116*4882a593Smuzhiyun unsigned char min_numbuffers; 117*4882a593Smuzhiyun unsigned char numbuffers[VPBE_DISPLAY_MAX_DEVICES]; 118*4882a593Smuzhiyun unsigned int min_bufsize[VPBE_DISPLAY_MAX_DEVICES]; 119*4882a593Smuzhiyun unsigned int layer_bufsize[VPBE_DISPLAY_MAX_DEVICES]; 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #endif /* VPBE_DISPLAY_H */ 123