Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / media / davinci / vpbe_display.h
diff --git a/kernel/include/media/davinci/vpbe_display.h b/kernel/include/media/davinci/vpbe_display.h
new file mode 100644 (file)
index 0000000..fa0247a
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * 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>
+#include <media/v4l2-fh.h>
+#include <media/videobuf2-dma-contig.h>
+#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;
+};
+
+struct vpbe_disp_buffer {
+       struct vb2_buffer vb;
+       struct list_head list;
+};
+
+/* vpbe display object structure */
+struct vpbe_layer {
+       /* Pointer to the vpbe_display */
+       struct vpbe_display *disp_dev;
+       /* Pointer pointing to current v4l2_buffer */
+       struct vpbe_disp_buffer *cur_frm;
+       /* Pointer pointing to next v4l2_buffer */
+       struct vpbe_disp_buffer *next_frm;
+       /* videobuf specific parameters
+        * Buffer queue used in video-buf
+        */
+       struct vb2_queue buffer_queue;
+       /* allocator-specific contexts for each plane */
+       struct vb2_alloc_ctx *alloc_ctx;
+       /* 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 */