blob: 1ee17824f4846532b531adbfcb47c92fd2dd8cb6 [file] [log] [blame]
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -03001/*
2 * Copyright (C) 2009 Texas Instruments Inc
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19#ifndef VPIF_CAPTURE_H
20#define VPIF_CAPTURE_H
21
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030022/* Header files */
Lad, Prabhakar60aa38d2012-06-28 09:28:05 -030023#include <media/videobuf2-dma-contig.h>
Lad, Prabhakar012eef72013-04-19 05:53:29 -030024#include <media/v4l2-device.h>
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030025
26#include "vpif.h"
27
28/* Macros */
Mauro Carvalho Chehab64dc3c12011-06-25 11:28:37 -030029#define VPIF_CAPTURE_VERSION "0.0.2"
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030030
31#define VPIF_VALID_FIELD(field) (((V4L2_FIELD_ANY == field) || \
32 (V4L2_FIELD_NONE == field)) || \
33 (((V4L2_FIELD_INTERLACED == field) || \
34 (V4L2_FIELD_SEQ_TB == field)) || \
35 (V4L2_FIELD_SEQ_BT == field)))
36
37#define VPIF_CAPTURE_MAX_DEVICES 2
38#define VPIF_VIDEO_INDEX 0
39#define VPIF_NUMBER_OF_OBJECTS 1
40
41/* Enumerated data type to give id to each device per channel */
42enum vpif_channel_id {
43 VPIF_CHANNEL0_VIDEO = 0,
44 VPIF_CHANNEL1_VIDEO,
45};
46
47struct video_obj {
48 enum v4l2_field buf_field;
49 /* Currently selected or default standard */
50 v4l2_std_id stdid;
Hans Verkuil0598c172012-09-18 07:18:47 -030051 struct v4l2_dv_timings dv_timings;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030052};
53
Lad, Prabhakar60aa38d2012-06-28 09:28:05 -030054struct vpif_cap_buffer {
55 struct vb2_buffer vb;
56 struct list_head list;
57};
58
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030059struct common_obj {
60 /* Pointer pointing to current v4l2_buffer */
Lad, Prabhakar60aa38d2012-06-28 09:28:05 -030061 struct vpif_cap_buffer *cur_frm;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030062 /* Pointer pointing to current v4l2_buffer */
Lad, Prabhakar60aa38d2012-06-28 09:28:05 -030063 struct vpif_cap_buffer *next_frm;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030064 /* Used to store pixel format */
65 struct v4l2_format fmt;
66 /* Buffer queue used in video-buf */
Lad, Prabhakar60aa38d2012-06-28 09:28:05 -030067 struct vb2_queue buffer_queue;
68 /* allocator-specific contexts for each plane */
69 struct vb2_alloc_ctx *alloc_ctx;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030070 /* Queue of filled frames */
71 struct list_head dma_queue;
72 /* Used in video-buf */
73 spinlock_t irqlock;
74 /* lock used to access this structure */
75 struct mutex lock;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030076 /* Function pointer to set the addresses */
77 void (*set_addr) (unsigned long, unsigned long, unsigned long,
78 unsigned long);
79 /* offset where Y top starts from the starting of the buffer */
80 u32 ytop_off;
81 /* offset where Y bottom starts from the starting of the buffer */
82 u32 ybtm_off;
83 /* offset where C top starts from the starting of the buffer */
84 u32 ctop_off;
85 /* offset where C bottom starts from the starting of the buffer */
86 u32 cbtm_off;
87 /* Indicates width of the image data */
88 u32 width;
89 /* Indicates height of the image data */
90 u32 height;
91};
92
93struct channel_obj {
94 /* Identifies video device for this channel */
95 struct video_device *video_dev;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -030096 /* Indicates id of the field which is being displayed */
97 u32 field_id;
98 /* flag to indicate whether decoder is initialized */
99 u8 initialized;
100 /* Identifies channel */
101 enum vpif_channel_id channel_id;
Hans Verkuil6f47c6c2012-09-20 09:06:22 -0300102 /* Current input */
103 u32 input_idx;
Hans Verkuil178cce12012-09-20 09:06:30 -0300104 /* subdev corresponding to the current input, may be NULL */
105 struct v4l2_subdev *sd;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -0300106 /* vpif configuration params */
107 struct vpif_params vpifparams;
108 /* common object array */
109 struct common_obj common[VPIF_NUMBER_OF_OBJECTS];
110 /* video object */
111 struct video_obj video;
112};
113
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -0300114struct vpif_device {
115 struct v4l2_device v4l2_dev;
116 struct channel_obj *dev[VPIF_CAPTURE_NUM_CHANNELS];
117 struct v4l2_subdev **sd;
Lad, Prabhakar873229e2013-06-25 11:17:34 -0300118 struct v4l2_async_notifier notifier;
119 struct vpif_capture_config *config;
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -0300120};
121
Mauro Carvalho Chehabea06cc52014-05-24 16:32:44 -0300122struct vpif_config_params {
123 u8 min_numbuffers;
124 u8 numbuffers[VPIF_CAPTURE_NUM_CHANNELS];
125 s8 device_type;
126 u32 min_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
127 u32 channel_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
128 u8 default_device[VPIF_CAPTURE_NUM_CHANNELS];
129 u32 video_limit[VPIF_CAPTURE_NUM_CHANNELS];
130 u8 max_device_type;
131};
132
Muralidharan Karicheri6ffefff2009-09-16 14:31:10 -0300133#endif /* VPIF_CAPTURE_H */