linux/drivers/media/video/davinci/vpif_display.h
<<
>>
Prefs
   1/*
   2 * DM646x 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 <linux/videodev2.h>
  21#include <linux/version.h>
  22#include <media/v4l2-common.h>
  23#include <media/v4l2-device.h>
  24#include <media/videobuf-core.h>
  25#include <media/videobuf-dma-contig.h>
  26
  27#include "vpif.h"
  28
  29/* Macros */
  30#define VPIF_MAJOR_RELEASE      (0)
  31#define VPIF_MINOR_RELEASE      (0)
  32#define VPIF_BUILD              (1)
  33
  34#define VPIF_DISPLAY_VERSION_CODE \
  35        ((VPIF_MAJOR_RELEASE << 16) | (VPIF_MINOR_RELEASE << 8) | VPIF_BUILD)
  36
  37#define VPIF_VALID_FIELD(field) \
  38        (((V4L2_FIELD_ANY == field) || (V4L2_FIELD_NONE == field)) || \
  39        (((V4L2_FIELD_INTERLACED == field) || (V4L2_FIELD_SEQ_TB == field)) || \
  40        (V4L2_FIELD_SEQ_BT == field)))
  41
  42#define VPIF_DISPLAY_MAX_DEVICES        (2)
  43#define VPIF_SLICED_BUF_SIZE            (256)
  44#define VPIF_SLICED_MAX_SERVICES        (3)
  45#define VPIF_VIDEO_INDEX                (0)
  46#define VPIF_VBI_INDEX                  (1)
  47#define VPIF_HBI_INDEX                  (2)
  48
  49/* Setting it to 1 as HBI/VBI support yet to be added , else 3*/
  50#define VPIF_NUMOBJECTS (1)
  51
  52/* Macros */
  53#define ISALIGNED(a)    (0 == ((a) & 7))
  54
  55/* enumerated data types */
  56/* Enumerated data type to give id to each device per channel */
  57enum vpif_channel_id {
  58        VPIF_CHANNEL2_VIDEO = 0,        /* Channel2 Video */
  59        VPIF_CHANNEL3_VIDEO,            /* Channel3 Video */
  60};
  61
  62/* structures */
  63
  64struct video_obj {
  65        enum v4l2_field buf_field;
  66        u32 latest_only;                /* indicate whether to return
  67                                         * most recent displayed frame only */
  68        v4l2_std_id stdid;              /* Currently selected or default
  69                                         * standard */
  70        u32 output_id;                  /* Current output id */
  71};
  72
  73struct vbi_obj {
  74        int num_services;
  75        struct vpif_vbi_params vbiparams;       /* vpif parameters for the raw
  76                                                 * vbi data */
  77};
  78
  79struct common_obj {
  80        /* Buffer specific parameters */
  81        u8 *fbuffers[VIDEO_MAX_FRAME];          /* List of buffer pointers for
  82                                                 * storing frames */
  83        u32 numbuffers;                         /* number of buffers */
  84        struct videobuf_buffer *cur_frm;        /* Pointer pointing to current
  85                                                 * videobuf_buffer */
  86        struct videobuf_buffer *next_frm;       /* Pointer pointing to next
  87                                                 * videobuf_buffer */
  88        enum v4l2_memory memory;                /* This field keeps track of
  89                                                 * type of buffer exchange
  90                                                 * method user has selected */
  91        struct v4l2_format fmt;                 /* Used to store the format */
  92        struct videobuf_queue buffer_queue;     /* Buffer queue used in
  93                                                 * video-buf */
  94        struct list_head dma_queue;             /* Queue of filled frames */
  95        spinlock_t irqlock;                     /* Used in video-buf */
  96
  97        /* channel specific parameters */
  98        struct mutex lock;                      /* lock used to access this
  99                                                 * structure */
 100        u32 io_usrs;                            /* number of users performing
 101                                                 * IO */
 102        u8 started;                             /* Indicates whether streaming
 103                                                 * started */
 104        u32 ytop_off;                           /* offset of Y top from the
 105                                                 * starting of the buffer */
 106        u32 ybtm_off;                           /* offset of Y bottom from the
 107                                                 * starting of the buffer */
 108        u32 ctop_off;                           /* offset of C top from the
 109                                                 * starting of the buffer */
 110        u32 cbtm_off;                           /* offset of C bottom from the
 111                                                 * starting of the buffer */
 112        /* Function pointer to set the addresses */
 113        void (*set_addr) (unsigned long, unsigned long,
 114                                unsigned long, unsigned long);
 115        u32 height;
 116        u32 width;
 117};
 118
 119struct channel_obj {
 120        /* V4l2 specific parameters */
 121        struct video_device *video_dev; /* Identifies video device for
 122                                         * this channel */
 123        struct v4l2_prio_state prio;    /* Used to keep track of state of
 124                                         * the priority */
 125        atomic_t usrs;                  /* number of open instances of
 126                                         * the channel */
 127        u32 field_id;                   /* Indicates id of the field
 128                                         * which is being displayed */
 129        u8 initialized;                 /* flag to indicate whether
 130                                         * encoder is initialized */
 131
 132        enum vpif_channel_id channel_id;/* Identifies channel */
 133        struct vpif_params vpifparams;
 134        struct common_obj common[VPIF_NUMOBJECTS];
 135        struct video_obj video;
 136        struct vbi_obj vbi;
 137};
 138
 139/* File handle structure */
 140struct vpif_fh {
 141        struct channel_obj *channel;    /* pointer to channel object for
 142                                         * opened device */
 143        u8 io_allowed[VPIF_NUMOBJECTS]; /* Indicates whether this file handle
 144                                         * is doing IO */
 145        enum v4l2_priority prio;        /* Used to keep track priority of
 146                                         * this instance */
 147        u8 initialized;                 /* Used to keep track of whether this
 148                                         * file handle has initialized
 149                                         * channel or not */
 150};
 151
 152/* vpif device structure */
 153struct vpif_device {
 154        struct v4l2_device v4l2_dev;
 155        struct channel_obj *dev[VPIF_DISPLAY_NUM_CHANNELS];
 156        struct v4l2_subdev **sd;
 157
 158};
 159
 160struct vpif_config_params {
 161        u32 min_bufsize[VPIF_DISPLAY_NUM_CHANNELS];
 162        u32 channel_bufsize[VPIF_DISPLAY_NUM_CHANNELS];
 163        u8 numbuffers[VPIF_DISPLAY_NUM_CHANNELS];
 164        u8 min_numbuffers;
 165};
 166
 167/* Struct which keeps track of the line numbers for the sliced vbi service */
 168struct vpif_service_line {
 169        u16 service_id;
 170        u16 service_line[2];
 171        u16 enc_service_id;
 172        u8 bytestowrite;
 173};
 174
 175#endif                          /* DAVINCIHD_DISPLAY_H */
 176
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.