diff options
Diffstat (limited to 'include/media/saa7146_vv.h')
-rw-r--r-- | include/media/saa7146_vv.h | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h new file mode 100644 index 000000000000..f3aa24f8131c --- /dev/null +++ b/include/media/saa7146_vv.h | |||
@@ -0,0 +1,270 @@ | |||
1 | #ifndef __SAA7146_VV__ | ||
2 | #define __SAA7146_VV__ | ||
3 | |||
4 | #include <linux/videodev2.h> | ||
5 | |||
6 | #include <media/saa7146.h> | ||
7 | #include <media/video-buf.h> | ||
8 | |||
9 | #define MAX_SAA7146_CAPTURE_BUFFERS 32 /* arbitrary */ | ||
10 | #define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */ | ||
11 | |||
12 | #define WRITE_RPS0(x) do { \ | ||
13 | dev->d_rps0.cpu_addr[ count++ ] = cpu_to_le32(x); \ | ||
14 | } while (0); | ||
15 | |||
16 | #define WRITE_RPS1(x) do { \ | ||
17 | dev->d_rps1.cpu_addr[ count++ ] = cpu_to_le32(x); \ | ||
18 | } while (0); | ||
19 | |||
20 | struct saa7146_video_dma { | ||
21 | u32 base_odd; | ||
22 | u32 base_even; | ||
23 | u32 prot_addr; | ||
24 | u32 pitch; | ||
25 | u32 base_page; | ||
26 | u32 num_line_byte; | ||
27 | }; | ||
28 | |||
29 | #define FORMAT_BYTE_SWAP 0x1 | ||
30 | #define FORMAT_IS_PLANAR 0x2 | ||
31 | |||
32 | struct saa7146_format { | ||
33 | char *name; | ||
34 | u32 pixelformat; | ||
35 | u32 trans; | ||
36 | u8 depth; | ||
37 | u8 flags; | ||
38 | u8 swap; | ||
39 | }; | ||
40 | |||
41 | struct saa7146_standard | ||
42 | { | ||
43 | char *name; | ||
44 | v4l2_std_id id; | ||
45 | |||
46 | int v_offset; /* number of lines of vertical offset before processing */ | ||
47 | int v_field; /* number of lines in a field for HPS to process */ | ||
48 | |||
49 | int h_offset; /* horizontal offset of processing window */ | ||
50 | int h_pixels; /* number of horizontal pixels to process */ | ||
51 | |||
52 | int v_max_out; | ||
53 | int h_max_out; | ||
54 | }; | ||
55 | |||
56 | /* buffer for one video/vbi frame */ | ||
57 | struct saa7146_buf { | ||
58 | /* common v4l buffer stuff -- must be first */ | ||
59 | struct videobuf_buffer vb; | ||
60 | |||
61 | /* saa7146 specific */ | ||
62 | struct v4l2_pix_format *fmt; | ||
63 | int (*activate)(struct saa7146_dev *dev, | ||
64 | struct saa7146_buf *buf, | ||
65 | struct saa7146_buf *next); | ||
66 | |||
67 | /* page tables */ | ||
68 | struct saa7146_pgtable pt[3]; | ||
69 | }; | ||
70 | |||
71 | struct saa7146_dmaqueue { | ||
72 | struct saa7146_dev *dev; | ||
73 | struct saa7146_buf *curr; | ||
74 | struct list_head queue; | ||
75 | struct timer_list timeout; | ||
76 | }; | ||
77 | |||
78 | struct saa7146_overlay { | ||
79 | struct saa7146_fh *fh; | ||
80 | struct v4l2_window win; | ||
81 | struct v4l2_clip clips[16]; | ||
82 | int nclips; | ||
83 | }; | ||
84 | |||
85 | /* per open data */ | ||
86 | struct saa7146_fh { | ||
87 | struct saa7146_dev *dev; | ||
88 | /* if this is a vbi or capture open */ | ||
89 | enum v4l2_buf_type type; | ||
90 | |||
91 | /* video overlay */ | ||
92 | struct saa7146_overlay ov; | ||
93 | |||
94 | /* video capture */ | ||
95 | struct videobuf_queue video_q; | ||
96 | struct v4l2_pix_format video_fmt; | ||
97 | |||
98 | /* vbi capture */ | ||
99 | struct videobuf_queue vbi_q; | ||
100 | struct v4l2_vbi_format vbi_fmt; | ||
101 | struct timer_list vbi_read_timeout; | ||
102 | |||
103 | unsigned int resources; /* resource management for device open */ | ||
104 | }; | ||
105 | |||
106 | #define STATUS_OVERLAY 0x01 | ||
107 | #define STATUS_CAPTURE 0x02 | ||
108 | |||
109 | struct saa7146_vv | ||
110 | { | ||
111 | int vbi_minor; | ||
112 | |||
113 | /* vbi capture */ | ||
114 | struct saa7146_dmaqueue vbi_q; | ||
115 | /* vbi workaround interrupt queue */ | ||
116 | wait_queue_head_t vbi_wq; | ||
117 | int vbi_fieldcount; | ||
118 | struct saa7146_fh *vbi_streaming; | ||
119 | |||
120 | int video_minor; | ||
121 | |||
122 | int video_status; | ||
123 | struct saa7146_fh *video_fh; | ||
124 | |||
125 | /* video overlay */ | ||
126 | struct v4l2_framebuffer ov_fb; | ||
127 | struct saa7146_format *ov_fmt; | ||
128 | struct saa7146_overlay *ov_data; | ||
129 | struct saa7146_fh *ov_suspend; | ||
130 | |||
131 | /* video capture */ | ||
132 | struct saa7146_dmaqueue video_q; | ||
133 | enum v4l2_field last_field; | ||
134 | |||
135 | /* common: fixme? shouldn't this be in saa7146_fh? | ||
136 | (this leads to a more complicated question: shall the driver | ||
137 | store the different settings (for example S_INPUT) for every open | ||
138 | and restore it appropriately, or should all settings be common for | ||
139 | all opens? currently, we do the latter, like all other | ||
140 | drivers do... */ | ||
141 | struct saa7146_standard *standard; | ||
142 | |||
143 | int vflip; | ||
144 | int hflip; | ||
145 | int current_hps_source; | ||
146 | int current_hps_sync; | ||
147 | |||
148 | struct saa7146_dma d_clipping; /* pointer to clipping memory */ | ||
149 | |||
150 | unsigned int resources; /* resource management for device */ | ||
151 | }; | ||
152 | |||
153 | #define SAA7146_EXCLUSIVE 0x1 | ||
154 | #define SAA7146_BEFORE 0x2 | ||
155 | #define SAA7146_AFTER 0x4 | ||
156 | |||
157 | struct saa7146_extension_ioctls | ||
158 | { | ||
159 | unsigned int cmd; | ||
160 | int flags; | ||
161 | }; | ||
162 | |||
163 | /* flags */ | ||
164 | #define SAA7146_USE_PORT_B_FOR_VBI 0x2 /* use input port b for vbi hardware bug workaround */ | ||
165 | |||
166 | struct saa7146_ext_vv | ||
167 | { | ||
168 | /* informations about the video capabilities of the device */ | ||
169 | int inputs; | ||
170 | int audios; | ||
171 | u32 capabilities; | ||
172 | int flags; | ||
173 | |||
174 | /* additionally supported transmission standards */ | ||
175 | struct saa7146_standard *stds; | ||
176 | int num_stds; | ||
177 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); | ||
178 | |||
179 | struct saa7146_extension_ioctls *ioctls; | ||
180 | int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg); | ||
181 | }; | ||
182 | |||
183 | struct saa7146_use_ops { | ||
184 | void (*init)(struct saa7146_dev *, struct saa7146_vv *); | ||
185 | int(*open)(struct saa7146_dev *, struct file *); | ||
186 | void (*release)(struct saa7146_dev *, struct file *); | ||
187 | void (*irq_done)(struct saa7146_dev *, unsigned long status); | ||
188 | ssize_t (*read)(struct file *, char __user *, size_t, loff_t *); | ||
189 | }; | ||
190 | |||
191 | /* from saa7146_fops.c */ | ||
192 | int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, char *name, int type); | ||
193 | int saa7146_unregister_device(struct video_device **vid, struct saa7146_dev* dev); | ||
194 | void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state); | ||
195 | void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); | ||
196 | int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); | ||
197 | void saa7146_buffer_timeout(unsigned long data); | ||
198 | void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf); | ||
199 | |||
200 | int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv); | ||
201 | int saa7146_vv_release(struct saa7146_dev* dev); | ||
202 | |||
203 | /* from saa7146_hlp.c */ | ||
204 | int saa7146_enable_overlay(struct saa7146_fh *fh); | ||
205 | void saa7146_disable_overlay(struct saa7146_fh *fh); | ||
206 | |||
207 | void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next); | ||
208 | void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) ; | ||
209 | void saa7146_set_hps_source_and_sync(struct saa7146_dev *saa, int source, int sync); | ||
210 | void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); | ||
211 | |||
212 | /* from saa7146_video.c */ | ||
213 | extern struct saa7146_use_ops saa7146_video_uops; | ||
214 | int saa7146_start_preview(struct saa7146_fh *fh); | ||
215 | int saa7146_stop_preview(struct saa7146_fh *fh); | ||
216 | |||
217 | /* from saa7146_vbi.c */ | ||
218 | extern struct saa7146_use_ops saa7146_vbi_uops; | ||
219 | |||
220 | /* resource management functions */ | ||
221 | int saa7146_res_get(struct saa7146_fh *fh, unsigned int bit); | ||
222 | void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits); | ||
223 | |||
224 | #define RESOURCE_DMA1_HPS 0x1 | ||
225 | #define RESOURCE_DMA2_CLP 0x2 | ||
226 | #define RESOURCE_DMA3_BRS 0x4 | ||
227 | |||
228 | /* saa7146 source inputs */ | ||
229 | #define SAA7146_HPS_SOURCE_PORT_A 0x00 | ||
230 | #define SAA7146_HPS_SOURCE_PORT_B 0x01 | ||
231 | #define SAA7146_HPS_SOURCE_YPB_CPA 0x02 | ||
232 | #define SAA7146_HPS_SOURCE_YPA_CPB 0x03 | ||
233 | |||
234 | /* sync inputs */ | ||
235 | #define SAA7146_HPS_SYNC_PORT_A 0x00 | ||
236 | #define SAA7146_HPS_SYNC_PORT_B 0x01 | ||
237 | |||
238 | /* some memory sizes */ | ||
239 | #define SAA7146_CLIPPING_MEM (14*PAGE_SIZE) | ||
240 | |||
241 | /* some defines for the various clipping-modes */ | ||
242 | #define SAA7146_CLIPPING_RECT 0x4 | ||
243 | #define SAA7146_CLIPPING_RECT_INVERTED 0x5 | ||
244 | #define SAA7146_CLIPPING_MASK 0x6 | ||
245 | #define SAA7146_CLIPPING_MASK_INVERTED 0x7 | ||
246 | |||
247 | /* output formats: each entry holds four informations */ | ||
248 | #define RGB08_COMPOSED 0x0217 /* composed is used in the sense of "not-planar" */ | ||
249 | /* this means: planar?=0, yuv2rgb-conversation-mode=2, dither=yes(=1), format-mode = 7 */ | ||
250 | #define RGB15_COMPOSED 0x0213 | ||
251 | #define RGB16_COMPOSED 0x0210 | ||
252 | #define RGB24_COMPOSED 0x0201 | ||
253 | #define RGB32_COMPOSED 0x0202 | ||
254 | |||
255 | #define Y8 0x0006 | ||
256 | #define YUV411_COMPOSED 0x0003 | ||
257 | #define YUV422_COMPOSED 0x0000 | ||
258 | /* this means: planar?=1, yuv2rgb-conversion-mode=0, dither=no(=0), format-mode = b */ | ||
259 | #define YUV411_DECOMPOSED 0x100b | ||
260 | #define YUV422_DECOMPOSED 0x1009 | ||
261 | #define YUV420_DECOMPOSED 0x100a | ||
262 | |||
263 | #define IS_PLANAR(x) (x & 0xf000) | ||
264 | |||
265 | /* misc defines */ | ||
266 | #define SAA7146_NO_SWAP (0x0) | ||
267 | #define SAA7146_TWO_BYTE_SWAP (0x1) | ||
268 | #define SAA7146_FOUR_BYTE_SWAP (0x2) | ||
269 | |||
270 | #endif | ||