linux/drivers/media/platform/davinci/vpif_display.h
<<
>>
Prefs
   1/*
   2 * VPIF display header file
   3 *
   4 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License as
   8 * published by the Free Software Foundation version 2.
   9 *
  10 * This program is distributed .as is. WITHOUT ANY WARRANTY of any
  11 * kind, whether express or implied; without even the implied warranty
  12 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 */
  15
  16#ifndef DAVINCIHD_DISPLAY_H
  17#define DAVINCIHD_DISPLAY_H
  18
  19/* Header files */
  20#include <media/videobuf2-dma-contig.h>
  21#include <media/v4l2-device.h>
  22
  23#include "vpif.h"
  24
  25/* Macros */
  26#define VPIF_DISPLAY_VERSION    "0.0.2"
  27
  28#define VPIF_VALID_FIELD(field) \
  29        (((V4L2_FIELD_ANY == field) || (V4L2_FIELD_NONE == field)) || \
  30        (((V4L2_FIELD_INTERLACED == field) || (V4L2_FIELD_SEQ_TB == field)) || \
  31        (V4L2_FIELD_SEQ_BT == field)))
  32
  33#define VPIF_DISPLAY_MAX_DEVICES        (2)
  34#define VPIF_SLICED_BUF_SIZE            (256)
  35#define VPIF_SLICED_MAX_SERVICES        (3)
  36#define VPIF_VIDEO_INDEX                (0)
  37#define VPIF_VBI_INDEX                  (1)
  38#define VPIF_HBI_INDEX                  (2)
  39
  40/* Setting it to 1 as HBI/VBI support yet to be added , else 3*/
  41#define VPIF_NUMOBJECTS (1)
  42
  43/* Macros */
  44#define ISALIGNED(a)    (0 == ((a) & 7))
  45
  46/* enumerated data types */
  47/* Enumerated data type to give id to each device per channel */
  48enum vpif_channel_id {
  49        VPIF_CHANNEL2_VIDEO = 0,        /* Channel2 Video */
  50        VPIF_CHANNEL3_VIDEO,            /* Channel3 Video */
  51};
  52
  53/* structures */
  54
  55struct video_obj {
  56        enum v4l2_field buf_field;
  57        u32 latest_only;                /* indicate whether to return
  58                                         * most recent displayed frame only */
  59        v4l2_std_id stdid;              /* Currently selected or default
  60                                         * standard */
  61        struct v4l2_dv_timings dv_timings;
  62};
  63
  64struct vpif_disp_buffer {
  65        struct vb2_buffer vb;
  66        struct list_head list;
  67};
  68
  69struct common_obj {
  70        /* Buffer specific parameters */
  71        u8 *fbuffers[VIDEO_MAX_FRAME];          /* List of buffer pointers for
  72                                                 * storing frames */
  73        u32 numbuffers;                         /* number of buffers */
  74        struct vpif_disp_buffer *cur_frm;       /* Pointer pointing to current
  75                                                 * vb2_buffer */
  76        struct vpif_disp_buffer *next_frm;      /* Pointer pointing to next
  77                                                 * vb2_buffer */
  78        enum v4l2_memory memory;                /* This field keeps track of
  79                                                 * type of buffer exchange
  80                                                 * method user has selected */
  81        struct v4l2_format fmt;                 /* Used to store the format */
  82        struct vb2_queue buffer_queue;          /* Buffer queue used in
  83                                                 * video-buf */
  84        /* allocator-specific contexts for each plane */
  85        struct vb2_alloc_ctx *alloc_ctx;
  86
  87        struct list_head dma_queue;             /* Queue of filled frames */
  88        spinlock_t irqlock;                     /* Used in video-buf */
  89
  90        /* channel specific parameters */
  91        struct mutex lock;                      /* lock used to access this
  92                                                 * structure */
  93        u32 io_usrs;                            /* number of users performing
  94                                                 * IO */
  95        u8 started;                             /* Indicates whether streaming
  96                                                 * started */
  97        u32 ytop_off;                           /* offset of Y top from the
  98                                                 * starting of the buffer */
  99        u32 ybtm_off;                           /* offset of Y bottom from the
 100                                                 * starting of the buffer */
 101        u32 ctop_off;                           /* offset of C top from the
 102                                                 * starting of the buffer */
 103        u32 cbtm_off;                           /* offset of C bottom from the
 104                                                 * starting of the buffer */
 105        /* Function pointer to set the addresses */
 106        void (*set_addr) (unsigned long, unsigned long,
 107                                unsigned long, unsigned long);
 108        u32 height;
 109        u32 width;
 110};
 111
 112struct channel_obj {
 113        /* V4l2 specific parameters */
 114        struct video_device *video_dev; /* Identifies video device for
 115                                         * this channel */
 116        struct v4l2_prio_state prio;    /* Used to keep track of state of
 117                                         * the priority */
 118        atomic_t usrs;                  /* number of open instances of
 119                                         * the channel */
 120        u32 field_id;                   /* Indicates id of the field
 121                                         * which is being displayed */
 122        u8 initialized;                 /* flag to indicate whether
 123                                         * encoder is initialized */
 124        u32 output_idx;                 /* Current output index */
 125        struct v4l2_subdev *sd;         /* Current output subdev(may be NULL) */
 126
 127        enum vpif_channel_id channel_id;/* Identifies channel */
 128        struct vpif_params vpifparams;
 129        struct common_obj common[VPIF_NUMOBJECTS];
 130        struct video_obj video;
 131};
 132
 133/* File handle structure */
 134struct vpif_fh {
 135        struct channel_obj *channel;    /* pointer to channel object for
 136                                         * opened device */
 137        u8 io_allowed[VPIF_NUMOBJECTS]; /* Indicates whether this file handle
 138                                         * is doing IO */
 139        enum v4l2_priority prio;        /* Used to keep track priority of
 140                                         * this instance */
 141        u8 initialized;                 /* Used to keep track of whether this
 142                                         * file handle has initialized
 143                                         * channel or not */
 144};
 145
 146/* vpif device structure */
 147struct vpif_device {
 148        struct v4l2_device v4l2_dev;
 149        struct channel_obj *dev[VPIF_DISPLAY_NUM_CHANNELS];
 150        struct v4l2_subdev **sd;
 151        struct v4l2_async_notifier notifier;
 152        struct vpif_display_config *config;
 153};
 154
 155struct vpif_config_params {
 156        u32 min_bufsize[VPIF_DISPLAY_NUM_CHANNELS];
 157        u32 channel_bufsize[VPIF_DISPLAY_NUM_CHANNELS];
 158        u8 numbuffers[VPIF_DISPLAY_NUM_CHANNELS];
 159        u32 video_limit[VPIF_DISPLAY_NUM_CHANNELS];
 160        u8 min_numbuffers;
 161};
 162
 163#endif                          /* DAVINCIHD_DISPLAY_H */
 164