0001
0002
0003
0004
0005 #ifndef VPBE_DISPLAY_H
0006 #define VPBE_DISPLAY_H
0007
0008
0009 #include <linux/videodev2.h>
0010 #include <media/v4l2-common.h>
0011 #include <media/v4l2-fh.h>
0012 #include <media/videobuf2-v4l2.h>
0013 #include <media/videobuf2-dma-contig.h>
0014 #include <media/davinci/vpbe_types.h>
0015 #include <media/davinci/vpbe_osd.h>
0016 #include <media/davinci/vpbe.h>
0017
0018 #define VPBE_DISPLAY_MAX_DEVICES 2
0019
0020 enum vpbe_display_device_id {
0021 VPBE_DISPLAY_DEVICE_0,
0022 VPBE_DISPLAY_DEVICE_1
0023 };
0024
0025 #define VPBE_DISPLAY_DRV_NAME "vpbe-display"
0026
0027 #define VPBE_DISPLAY_MAJOR_RELEASE 1
0028 #define VPBE_DISPLAY_MINOR_RELEASE 0
0029 #define VPBE_DISPLAY_BUILD 1
0030 #define VPBE_DISPLAY_VERSION_CODE ((VPBE_DISPLAY_MAJOR_RELEASE << 16) | \
0031 (VPBE_DISPLAY_MINOR_RELEASE << 8) | \
0032 VPBE_DISPLAY_BUILD)
0033
0034 #define VPBE_DISPLAY_VALID_FIELD(field) ((V4L2_FIELD_NONE == field) || \
0035 (V4L2_FIELD_ANY == field) || (V4L2_FIELD_INTERLACED == field))
0036
0037
0038 #define VPBE_DISPLAY_H_EXP_RATIO_N 9
0039 #define VPBE_DISPLAY_H_EXP_RATIO_D 8
0040 #define VPBE_DISPLAY_V_EXP_RATIO_N 6
0041 #define VPBE_DISPLAY_V_EXP_RATIO_D 5
0042
0043
0044 #define VPBE_DISPLAY_ZOOM_4X 4
0045 #define VPBE_DISPLAY_ZOOM_2X 2
0046
0047
0048 struct display_layer_info {
0049 int enable;
0050
0051 enum osd_layer id;
0052 struct osd_layer_config config;
0053 enum osd_zoom_factor h_zoom;
0054 enum osd_zoom_factor v_zoom;
0055 enum osd_h_exp_ratio h_exp;
0056 enum osd_v_exp_ratio v_exp;
0057 };
0058
0059 struct vpbe_disp_buffer {
0060 struct vb2_v4l2_buffer vb;
0061 struct list_head list;
0062 };
0063
0064
0065 struct vpbe_layer {
0066
0067 struct vpbe_display *disp_dev;
0068
0069 struct vpbe_disp_buffer *cur_frm;
0070
0071 struct vpbe_disp_buffer *next_frm;
0072
0073
0074
0075 struct vb2_queue buffer_queue;
0076
0077 struct list_head dma_queue;
0078
0079 spinlock_t irqlock;
0080
0081
0082 struct video_device video_dev;
0083
0084 struct v4l2_pix_format pix_fmt;
0085 enum v4l2_field buf_field;
0086
0087 struct display_layer_info layer_info;
0088
0089
0090
0091 unsigned char window_enable;
0092
0093 unsigned int usrs;
0094
0095 unsigned int field_id;
0096
0097 enum vpbe_display_device_id device_id;
0098
0099 struct mutex opslock;
0100 u8 layer_first_int;
0101 };
0102
0103
0104 struct vpbe_display {
0105
0106
0107 spinlock_t dma_queue_lock;
0108
0109 unsigned int cbcr_ofst;
0110 struct vpbe_layer *dev[VPBE_DISPLAY_MAX_DEVICES];
0111 struct vpbe_device *vpbe_dev;
0112 struct osd_state *osd_device;
0113 };
0114
0115 struct buf_config_params {
0116 unsigned char min_numbuffers;
0117 unsigned char numbuffers[VPBE_DISPLAY_MAX_DEVICES];
0118 unsigned int min_bufsize[VPBE_DISPLAY_MAX_DEVICES];
0119 unsigned int layer_bufsize[VPBE_DISPLAY_MAX_DEVICES];
0120 };
0121
0122 #endif