Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/include/media/davinci/vpfe_capture.h
10818 views
1
/*
2
* Copyright (C) 2008-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 _VPFE_CAPTURE_H
20
#define _VPFE_CAPTURE_H
21
22
#ifdef __KERNEL__
23
24
/* Header files */
25
#include <media/v4l2-dev.h>
26
#include <linux/videodev2.h>
27
#include <linux/clk.h>
28
#include <linux/i2c.h>
29
#include <media/v4l2-ioctl.h>
30
#include <media/v4l2-device.h>
31
#include <media/videobuf-dma-contig.h>
32
#include <media/davinci/vpfe_types.h>
33
34
#define VPFE_CAPTURE_NUM_DECODERS 5
35
36
/* Macros */
37
#define VPFE_MAJOR_RELEASE 0
38
#define VPFE_MINOR_RELEASE 0
39
#define VPFE_BUILD 1
40
#define VPFE_CAPTURE_VERSION_CODE ((VPFE_MAJOR_RELEASE << 16) | \
41
(VPFE_MINOR_RELEASE << 8) | \
42
VPFE_BUILD)
43
44
#define CAPTURE_DRV_NAME "vpfe-capture"
45
46
struct vpfe_pixel_format {
47
struct v4l2_fmtdesc fmtdesc;
48
/* bytes per pixel */
49
int bpp;
50
};
51
52
struct vpfe_std_info {
53
int active_pixels;
54
int active_lines;
55
/* current frame format */
56
int frame_format;
57
};
58
59
struct vpfe_route {
60
u32 input;
61
u32 output;
62
};
63
64
struct vpfe_subdev_info {
65
/* Sub device name */
66
char name[32];
67
/* Sub device group id */
68
int grp_id;
69
/* Number of inputs supported */
70
int num_inputs;
71
/* inputs available at the sub device */
72
struct v4l2_input *inputs;
73
/* Sub dev routing information for each input */
74
struct vpfe_route *routes;
75
/* check if sub dev supports routing */
76
int can_route;
77
/* ccdc bus/interface configuration */
78
struct vpfe_hw_if_param ccdc_if_params;
79
/* i2c subdevice board info */
80
struct i2c_board_info board_info;
81
};
82
83
struct vpfe_config {
84
/* Number of sub devices connected to vpfe */
85
int num_subdevs;
86
/* i2c bus adapter no */
87
int i2c_adapter_id;
88
/* information about each subdev */
89
struct vpfe_subdev_info *sub_devs;
90
/* evm card info */
91
char *card_name;
92
/* ccdc name */
93
char *ccdc;
94
/* vpfe clock */
95
struct clk *vpssclk;
96
struct clk *slaveclk;
97
/* Function for Clearing the interrupt */
98
void (*clr_intr)(int vdint);
99
};
100
101
struct vpfe_device {
102
/* V4l2 specific parameters */
103
/* Identifies video device for this channel */
104
struct video_device *video_dev;
105
/* sub devices */
106
struct v4l2_subdev **sd;
107
/* vpfe cfg */
108
struct vpfe_config *cfg;
109
/* V4l2 device */
110
struct v4l2_device v4l2_dev;
111
/* parent device */
112
struct device *pdev;
113
/* Used to keep track of state of the priority */
114
struct v4l2_prio_state prio;
115
/* number of open instances of the channel */
116
u32 usrs;
117
/* Indicates id of the field which is being displayed */
118
u32 field_id;
119
/* flag to indicate whether decoder is initialized */
120
u8 initialized;
121
/* current interface type */
122
struct vpfe_hw_if_param vpfe_if_params;
123
/* ptr to currently selected sub device */
124
struct vpfe_subdev_info *current_subdev;
125
/* current input at the sub device */
126
int current_input;
127
/* Keeps track of the information about the standard */
128
struct vpfe_std_info std_info;
129
/* std index into std table */
130
int std_index;
131
/* CCDC IRQs used when CCDC/ISIF output to SDRAM */
132
unsigned int ccdc_irq0;
133
unsigned int ccdc_irq1;
134
/* number of buffers in fbuffers */
135
u32 numbuffers;
136
/* List of buffer pointers for storing frames */
137
u8 *fbuffers[VIDEO_MAX_FRAME];
138
/* Pointer pointing to current v4l2_buffer */
139
struct videobuf_buffer *cur_frm;
140
/* Pointer pointing to next v4l2_buffer */
141
struct videobuf_buffer *next_frm;
142
/*
143
* This field keeps track of type of buffer exchange mechanism
144
* user has selected
145
*/
146
enum v4l2_memory memory;
147
/* Used to store pixel format */
148
struct v4l2_format fmt;
149
/*
150
* used when IMP is chained to store the crop window which
151
* is different from the image window
152
*/
153
struct v4l2_rect crop;
154
/* Buffer queue used in video-buf */
155
struct videobuf_queue buffer_queue;
156
/* Queue of filled frames */
157
struct list_head dma_queue;
158
/* Used in video-buf */
159
spinlock_t irqlock;
160
/* IRQ lock for DMA queue */
161
spinlock_t dma_queue_lock;
162
/* lock used to access this structure */
163
struct mutex lock;
164
/* number of users performing IO */
165
u32 io_usrs;
166
/* Indicates whether streaming started */
167
u8 started;
168
/*
169
* offset where second field starts from the starting of the
170
* buffer for field separated YCbCr formats
171
*/
172
u32 field_off;
173
};
174
175
/* File handle structure */
176
struct vpfe_fh {
177
struct vpfe_device *vpfe_dev;
178
/* Indicates whether this file handle is doing IO */
179
u8 io_allowed;
180
/* Used to keep track priority of this instance */
181
enum v4l2_priority prio;
182
};
183
184
struct vpfe_config_params {
185
u8 min_numbuffers;
186
u8 numbuffers;
187
u32 min_bufsize;
188
u32 device_bufsize;
189
};
190
191
#endif /* End of __KERNEL__ */
192
/**
193
* VPFE_CMD_S_CCDC_RAW_PARAMS - EXPERIMENTAL IOCTL to set raw capture params
194
* This can be used to configure modules such as defect pixel correction,
195
* color space conversion, culling etc. This is an experimental ioctl that
196
* will change in future kernels. So use this ioctl with care !
197
* TODO: This is to be split into multiple ioctls and also explore the
198
* possibility of extending the v4l2 api to include this
199
**/
200
#define VPFE_CMD_S_CCDC_RAW_PARAMS _IOW('V', BASE_VIDIOC_PRIVATE + 1, \
201
void *)
202
#endif /* _DAVINCI_VPFE_H */
203
204