These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / pci / ivtv / ivtv-ioctl.c
1 /*
2     ioctl system call
3     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
4     Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
5
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include "ivtv-driver.h"
22 #include "ivtv-version.h"
23 #include "ivtv-mailbox.h"
24 #include "ivtv-i2c.h"
25 #include "ivtv-queue.h"
26 #include "ivtv-fileops.h"
27 #include "ivtv-vbi.h"
28 #include "ivtv-routing.h"
29 #include "ivtv-streams.h"
30 #include "ivtv-yuv.h"
31 #include "ivtv-ioctl.h"
32 #include "ivtv-gpio.h"
33 #include "ivtv-controls.h"
34 #include "ivtv-cards.h"
35 #include <media/saa7127.h>
36 #include <media/tveeprom.h>
37 #include <media/v4l2-event.h>
38 #include <linux/dvb/audio.h>
39
40 u16 ivtv_service2vbi(int type)
41 {
42         switch (type) {
43                 case V4L2_SLICED_TELETEXT_B:
44                         return IVTV_SLICED_TYPE_TELETEXT_B;
45                 case V4L2_SLICED_CAPTION_525:
46                         return IVTV_SLICED_TYPE_CAPTION_525;
47                 case V4L2_SLICED_WSS_625:
48                         return IVTV_SLICED_TYPE_WSS_625;
49                 case V4L2_SLICED_VPS:
50                         return IVTV_SLICED_TYPE_VPS;
51                 default:
52                         return 0;
53         }
54 }
55
56 static int valid_service_line(int field, int line, int is_pal)
57 {
58         return (is_pal && line >= 6 && (line != 23 || field == 0)) ||
59                (!is_pal && line >= 10 && line < 22);
60 }
61
62 static u16 select_service_from_set(int field, int line, u16 set, int is_pal)
63 {
64         u16 valid_set = (is_pal ? V4L2_SLICED_VBI_625 : V4L2_SLICED_VBI_525);
65         int i;
66
67         set = set & valid_set;
68         if (set == 0 || !valid_service_line(field, line, is_pal)) {
69                 return 0;
70         }
71         if (!is_pal) {
72                 if (line == 21 && (set & V4L2_SLICED_CAPTION_525))
73                         return V4L2_SLICED_CAPTION_525;
74         }
75         else {
76                 if (line == 16 && field == 0 && (set & V4L2_SLICED_VPS))
77                         return V4L2_SLICED_VPS;
78                 if (line == 23 && field == 0 && (set & V4L2_SLICED_WSS_625))
79                         return V4L2_SLICED_WSS_625;
80                 if (line == 23)
81                         return 0;
82         }
83         for (i = 0; i < 32; i++) {
84                 if ((1 << i) & set)
85                         return 1 << i;
86         }
87         return 0;
88 }
89
90 void ivtv_expand_service_set(struct v4l2_sliced_vbi_format *fmt, int is_pal)
91 {
92         u16 set = fmt->service_set;
93         int f, l;
94
95         fmt->service_set = 0;
96         for (f = 0; f < 2; f++) {
97                 for (l = 0; l < 24; l++) {
98                         fmt->service_lines[f][l] = select_service_from_set(f, l, set, is_pal);
99                 }
100         }
101 }
102
103 static void check_service_set(struct v4l2_sliced_vbi_format *fmt, int is_pal)
104 {
105         int f, l;
106
107         for (f = 0; f < 2; f++) {
108                 for (l = 0; l < 24; l++) {
109                         fmt->service_lines[f][l] = select_service_from_set(f, l, fmt->service_lines[f][l], is_pal);
110                 }
111         }
112 }
113
114 u16 ivtv_get_service_set(struct v4l2_sliced_vbi_format *fmt)
115 {
116         int f, l;
117         u16 set = 0;
118
119         for (f = 0; f < 2; f++) {
120                 for (l = 0; l < 24; l++) {
121                         set |= fmt->service_lines[f][l];
122                 }
123         }
124         return set;
125 }
126
127 void ivtv_set_osd_alpha(struct ivtv *itv)
128 {
129         ivtv_vapi(itv, CX2341X_OSD_SET_GLOBAL_ALPHA, 3,
130                 itv->osd_global_alpha_state, itv->osd_global_alpha, !itv->osd_local_alpha_state);
131         ivtv_vapi(itv, CX2341X_OSD_SET_CHROMA_KEY, 2, itv->osd_chroma_key_state, itv->osd_chroma_key);
132 }
133
134 int ivtv_set_speed(struct ivtv *itv, int speed)
135 {
136         u32 data[CX2341X_MBOX_MAX_DATA];
137         int single_step = (speed == 1 || speed == -1);
138         DEFINE_WAIT(wait);
139
140         if (speed == 0) speed = 1000;
141
142         /* No change? */
143         if (speed == itv->speed && !single_step)
144                 return 0;
145
146         if (single_step && (speed < 0) == (itv->speed < 0)) {
147                 /* Single step video and no need to change direction */
148                 ivtv_vapi(itv, CX2341X_DEC_STEP_VIDEO, 1, 0);
149                 itv->speed = speed;
150                 return 0;
151         }
152         if (single_step)
153                 /* Need to change direction */
154                 speed = speed < 0 ? -1000 : 1000;
155
156         data[0] = (speed > 1000 || speed < -1000) ? 0x80000000 : 0;
157         data[0] |= (speed > 1000 || speed < -1500) ? 0x40000000 : 0;
158         data[1] = (speed < 0);
159         data[2] = speed < 0 ? 3 : 7;
160         data[3] = v4l2_ctrl_g_ctrl(itv->cxhdl.video_b_frames);
161         data[4] = (speed == 1500 || speed == 500) ? itv->speed_mute_audio : 0;
162         data[5] = 0;
163         data[6] = 0;
164
165         if (speed == 1500 || speed == -1500) data[0] |= 1;
166         else if (speed == 2000 || speed == -2000) data[0] |= 2;
167         else if (speed > -1000 && speed < 0) data[0] |= (-1000 / speed);
168         else if (speed < 1000 && speed > 0) data[0] |= (1000 / speed);
169
170         /* If not decoding, just change speed setting */
171         if (atomic_read(&itv->decoding) > 0) {
172                 int got_sig = 0;
173
174                 /* Stop all DMA and decoding activity */
175                 ivtv_vapi(itv, CX2341X_DEC_PAUSE_PLAYBACK, 1, 0);
176
177                 /* Wait for any DMA to finish */
178                 mutex_unlock(&itv->serialize_lock);
179                 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
180                 while (test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
181                         got_sig = signal_pending(current);
182                         if (got_sig)
183                                 break;
184                         got_sig = 0;
185                         schedule();
186                 }
187                 finish_wait(&itv->dma_waitq, &wait);
188                 mutex_lock(&itv->serialize_lock);
189                 if (got_sig)
190                         return -EINTR;
191
192                 /* Change Speed safely */
193                 ivtv_api(itv, CX2341X_DEC_SET_PLAYBACK_SPEED, 7, data);
194                 IVTV_DEBUG_INFO("Setting Speed to 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
195                                 data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
196         }
197         if (single_step) {
198                 speed = (speed < 0) ? -1 : 1;
199                 ivtv_vapi(itv, CX2341X_DEC_STEP_VIDEO, 1, 0);
200         }
201         itv->speed = speed;
202         return 0;
203 }
204
205 static int ivtv_validate_speed(int cur_speed, int new_speed)
206 {
207         int fact = new_speed < 0 ? -1 : 1;
208         int s;
209
210         if (cur_speed == 0)
211                 cur_speed = 1000;
212         if (new_speed < 0)
213                 new_speed = -new_speed;
214         if (cur_speed < 0)
215                 cur_speed = -cur_speed;
216
217         if (cur_speed <= new_speed) {
218                 if (new_speed > 1500)
219                         return fact * 2000;
220                 if (new_speed > 1000)
221                         return fact * 1500;
222         }
223         else {
224                 if (new_speed >= 2000)
225                         return fact * 2000;
226                 if (new_speed >= 1500)
227                         return fact * 1500;
228                 if (new_speed >= 1000)
229                         return fact * 1000;
230         }
231         if (new_speed == 0)
232                 return 1000;
233         if (new_speed == 1 || new_speed == 1000)
234                 return fact * new_speed;
235
236         s = new_speed;
237         new_speed = 1000 / new_speed;
238         if (1000 / cur_speed == new_speed)
239                 new_speed += (cur_speed < s) ? -1 : 1;
240         if (new_speed > 60) return 1000 / (fact * 60);
241         return 1000 / (fact * new_speed);
242 }
243
244 static int ivtv_video_command(struct ivtv *itv, struct ivtv_open_id *id,
245                 struct v4l2_decoder_cmd *dc, int try)
246 {
247         struct ivtv_stream *s = &itv->streams[IVTV_DEC_STREAM_TYPE_MPG];
248
249         if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
250                 return -EINVAL;
251
252         switch (dc->cmd) {
253         case V4L2_DEC_CMD_START: {
254                 dc->flags &= V4L2_DEC_CMD_START_MUTE_AUDIO;
255                 dc->start.speed = ivtv_validate_speed(itv->speed, dc->start.speed);
256                 if (dc->start.speed < 0)
257                         dc->start.format = V4L2_DEC_START_FMT_GOP;
258                 else
259                         dc->start.format = V4L2_DEC_START_FMT_NONE;
260                 if (dc->start.speed != 500 && dc->start.speed != 1500)
261                         dc->flags = dc->start.speed == 1000 ? 0 :
262                                         V4L2_DEC_CMD_START_MUTE_AUDIO;
263                 if (try) break;
264
265                 itv->speed_mute_audio = dc->flags & V4L2_DEC_CMD_START_MUTE_AUDIO;
266                 if (ivtv_set_output_mode(itv, OUT_MPG) != OUT_MPG)
267                         return -EBUSY;
268                 if (test_and_clear_bit(IVTV_F_I_DEC_PAUSED, &itv->i_flags)) {
269                         /* forces ivtv_set_speed to be called */
270                         itv->speed = 0;
271                 }
272                 return ivtv_start_decoding(id, dc->start.speed);
273         }
274
275         case V4L2_DEC_CMD_STOP:
276                 dc->flags &= V4L2_DEC_CMD_STOP_IMMEDIATELY | V4L2_DEC_CMD_STOP_TO_BLACK;
277                 if (dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY)
278                         dc->stop.pts = 0;
279                 if (try) break;
280                 if (atomic_read(&itv->decoding) == 0)
281                         return 0;
282                 if (itv->output_mode != OUT_MPG)
283                         return -EBUSY;
284
285                 itv->output_mode = OUT_NONE;
286                 return ivtv_stop_v4l2_decode_stream(s, dc->flags, dc->stop.pts);
287
288         case V4L2_DEC_CMD_PAUSE:
289                 dc->flags &= V4L2_DEC_CMD_PAUSE_TO_BLACK;
290                 if (try) break;
291                 if (!atomic_read(&itv->decoding))
292                         return -EPERM;
293                 if (itv->output_mode != OUT_MPG)
294                         return -EBUSY;
295                 if (atomic_read(&itv->decoding) > 0) {
296                         ivtv_vapi(itv, CX2341X_DEC_PAUSE_PLAYBACK, 1,
297                                 (dc->flags & V4L2_DEC_CMD_PAUSE_TO_BLACK) ? 1 : 0);
298                         set_bit(IVTV_F_I_DEC_PAUSED, &itv->i_flags);
299                 }
300                 break;
301
302         case V4L2_DEC_CMD_RESUME:
303                 dc->flags = 0;
304                 if (try) break;
305                 if (!atomic_read(&itv->decoding))
306                         return -EPERM;
307                 if (itv->output_mode != OUT_MPG)
308                         return -EBUSY;
309                 if (test_and_clear_bit(IVTV_F_I_DEC_PAUSED, &itv->i_flags)) {
310                         int speed = itv->speed;
311                         itv->speed = 0;
312                         return ivtv_start_decoding(id, speed);
313                 }
314                 break;
315
316         default:
317                 return -EINVAL;
318         }
319         return 0;
320 }
321
322 static int ivtv_g_fmt_sliced_vbi_out(struct file *file, void *fh, struct v4l2_format *fmt)
323 {
324         struct ivtv *itv = fh2id(fh)->itv;
325         struct v4l2_sliced_vbi_format *vbifmt = &fmt->fmt.sliced;
326
327         vbifmt->reserved[0] = 0;
328         vbifmt->reserved[1] = 0;
329         if (!(itv->v4l2_cap & V4L2_CAP_SLICED_VBI_OUTPUT))
330                 return -EINVAL;
331         vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36;
332         memset(vbifmt->service_lines, 0, sizeof(vbifmt->service_lines));
333         if (itv->is_60hz) {
334                 vbifmt->service_lines[0][21] = V4L2_SLICED_CAPTION_525;
335                 vbifmt->service_lines[1][21] = V4L2_SLICED_CAPTION_525;
336         } else {
337                 vbifmt->service_lines[0][23] = V4L2_SLICED_WSS_625;
338                 vbifmt->service_lines[0][16] = V4L2_SLICED_VPS;
339         }
340         vbifmt->service_set = ivtv_get_service_set(vbifmt);
341         return 0;
342 }
343
344 static int ivtv_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *fmt)
345 {
346         struct ivtv_open_id *id = fh2id(fh);
347         struct ivtv *itv = id->itv;
348         struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
349
350         pixfmt->width = itv->cxhdl.width;
351         pixfmt->height = itv->cxhdl.height;
352         pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
353         pixfmt->field = V4L2_FIELD_INTERLACED;
354         if (id->type == IVTV_ENC_STREAM_TYPE_YUV) {
355                 pixfmt->pixelformat = V4L2_PIX_FMT_HM12;
356                 /* YUV size is (Y=(h*720) + UV=(h*(720/2))) */
357                 pixfmt->sizeimage = pixfmt->height * 720 * 3 / 2;
358                 pixfmt->bytesperline = 720;
359         } else {
360                 pixfmt->pixelformat = V4L2_PIX_FMT_MPEG;
361                 pixfmt->sizeimage = 128 * 1024;
362                 pixfmt->bytesperline = 0;
363         }
364         return 0;
365 }
366
367 static int ivtv_g_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
368 {
369         struct ivtv *itv = fh2id(fh)->itv;
370         struct v4l2_vbi_format *vbifmt = &fmt->fmt.vbi;
371
372         vbifmt->sampling_rate = 27000000;
373         vbifmt->offset = 248;
374         vbifmt->samples_per_line = itv->vbi.raw_decoder_line_size - 4;
375         vbifmt->sample_format = V4L2_PIX_FMT_GREY;
376         vbifmt->start[0] = itv->vbi.start[0];
377         vbifmt->start[1] = itv->vbi.start[1];
378         vbifmt->count[0] = vbifmt->count[1] = itv->vbi.count;
379         vbifmt->flags = 0;
380         vbifmt->reserved[0] = 0;
381         vbifmt->reserved[1] = 0;
382         return 0;
383 }
384
385 static int ivtv_g_fmt_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
386 {
387         struct v4l2_sliced_vbi_format *vbifmt = &fmt->fmt.sliced;
388         struct ivtv_open_id *id = fh2id(fh);
389         struct ivtv *itv = id->itv;
390
391         vbifmt->reserved[0] = 0;
392         vbifmt->reserved[1] = 0;
393         vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36;
394
395         if (id->type == IVTV_DEC_STREAM_TYPE_VBI) {
396                 vbifmt->service_set = itv->is_50hz ? V4L2_SLICED_VBI_625 :
397                         V4L2_SLICED_VBI_525;
398                 ivtv_expand_service_set(vbifmt, itv->is_50hz);
399                 vbifmt->service_set = ivtv_get_service_set(vbifmt);
400                 return 0;
401         }
402
403         v4l2_subdev_call(itv->sd_video, vbi, g_sliced_fmt, vbifmt);
404         vbifmt->service_set = ivtv_get_service_set(vbifmt);
405         return 0;
406 }
407
408 static int ivtv_g_fmt_vid_out(struct file *file, void *fh, struct v4l2_format *fmt)
409 {
410         struct ivtv_open_id *id = fh2id(fh);
411         struct ivtv *itv = id->itv;
412         struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
413
414         if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
415                 return -EINVAL;
416         pixfmt->width = itv->main_rect.width;
417         pixfmt->height = itv->main_rect.height;
418         pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
419         pixfmt->field = V4L2_FIELD_INTERLACED;
420         if (id->type == IVTV_DEC_STREAM_TYPE_YUV) {
421                 switch (itv->yuv_info.lace_mode & IVTV_YUV_MODE_MASK) {
422                 case IVTV_YUV_MODE_INTERLACED:
423                         pixfmt->field = (itv->yuv_info.lace_mode & IVTV_YUV_SYNC_MASK) ?
424                                 V4L2_FIELD_INTERLACED_BT : V4L2_FIELD_INTERLACED_TB;
425                         break;
426                 case IVTV_YUV_MODE_PROGRESSIVE:
427                         pixfmt->field = V4L2_FIELD_NONE;
428                         break;
429                 default:
430                         pixfmt->field = V4L2_FIELD_ANY;
431                         break;
432                 }
433                 pixfmt->pixelformat = V4L2_PIX_FMT_HM12;
434                 pixfmt->bytesperline = 720;
435                 pixfmt->width = itv->yuv_info.v4l2_src_w;
436                 pixfmt->height = itv->yuv_info.v4l2_src_h;
437                 /* YUV size is (Y=(h*w) + UV=(h*(w/2))) */
438                 pixfmt->sizeimage =
439                         1080 * ((pixfmt->height + 31) & ~31);
440         } else {
441                 pixfmt->pixelformat = V4L2_PIX_FMT_MPEG;
442                 pixfmt->sizeimage = 128 * 1024;
443                 pixfmt->bytesperline = 0;
444         }
445         return 0;
446 }
447
448 static int ivtv_g_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2_format *fmt)
449 {
450         struct ivtv *itv = fh2id(fh)->itv;
451         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
452         struct v4l2_window *winfmt = &fmt->fmt.win;
453
454         if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
455                 return -EINVAL;
456         if (!itv->osd_video_pbase)
457                 return -EINVAL;
458         winfmt->chromakey = itv->osd_chroma_key;
459         winfmt->global_alpha = itv->osd_global_alpha;
460         winfmt->field = V4L2_FIELD_INTERLACED;
461         winfmt->clips = NULL;
462         winfmt->clipcount = 0;
463         winfmt->bitmap = NULL;
464         winfmt->w.top = winfmt->w.left = 0;
465         winfmt->w.width = itv->osd_rect.width;
466         winfmt->w.height = itv->osd_rect.height;
467         return 0;
468 }
469
470 static int ivtv_try_fmt_sliced_vbi_out(struct file *file, void *fh, struct v4l2_format *fmt)
471 {
472         return ivtv_g_fmt_sliced_vbi_out(file, fh, fmt);
473 }
474
475 static int ivtv_try_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *fmt)
476 {
477         struct ivtv_open_id *id = fh2id(fh);
478         struct ivtv *itv = id->itv;
479         int w = fmt->fmt.pix.width;
480         int h = fmt->fmt.pix.height;
481         int min_h = 2;
482
483         w = min(w, 720);
484         w = max(w, 2);
485         if (id->type == IVTV_ENC_STREAM_TYPE_YUV) {
486                 /* YUV height must be a multiple of 32 */
487                 h &= ~0x1f;
488                 min_h = 32;
489         }
490         h = min(h, itv->is_50hz ? 576 : 480);
491         h = max(h, min_h);
492         ivtv_g_fmt_vid_cap(file, fh, fmt);
493         fmt->fmt.pix.width = w;
494         fmt->fmt.pix.height = h;
495         return 0;
496 }
497
498 static int ivtv_try_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
499 {
500         return ivtv_g_fmt_vbi_cap(file, fh, fmt);
501 }
502
503 static int ivtv_try_fmt_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
504 {
505         struct v4l2_sliced_vbi_format *vbifmt = &fmt->fmt.sliced;
506         struct ivtv_open_id *id = fh2id(fh);
507         struct ivtv *itv = id->itv;
508
509         if (id->type == IVTV_DEC_STREAM_TYPE_VBI)
510                 return ivtv_g_fmt_sliced_vbi_cap(file, fh, fmt);
511
512         /* set sliced VBI capture format */
513         vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36;
514         vbifmt->reserved[0] = 0;
515         vbifmt->reserved[1] = 0;
516
517         if (vbifmt->service_set)
518                 ivtv_expand_service_set(vbifmt, itv->is_50hz);
519         check_service_set(vbifmt, itv->is_50hz);
520         vbifmt->service_set = ivtv_get_service_set(vbifmt);
521         return 0;
522 }
523
524 static int ivtv_try_fmt_vid_out(struct file *file, void *fh, struct v4l2_format *fmt)
525 {
526         struct ivtv_open_id *id = fh2id(fh);
527         s32 w = fmt->fmt.pix.width;
528         s32 h = fmt->fmt.pix.height;
529         int field = fmt->fmt.pix.field;
530         int ret = ivtv_g_fmt_vid_out(file, fh, fmt);
531
532         w = min(w, 720);
533         w = max(w, 2);
534         /* Why can the height be 576 even when the output is NTSC?
535
536            Internally the buffers of the PVR350 are always set to 720x576. The
537            decoded video frame will always be placed in the top left corner of
538            this buffer. For any video which is not 720x576, the buffer will
539            then be cropped to remove the unused right and lower areas, with
540            the remaining image being scaled by the hardware to fit the display
541            area. The video can be scaled both up and down, so a 720x480 video
542            can be displayed full-screen on PAL and a 720x576 video can be
543            displayed without cropping on NTSC.
544
545            Note that the scaling only occurs on the video stream, the osd
546            resolution is locked to the broadcast standard and not scaled.
547
548            Thanks to Ian Armstrong for this explanation. */
549         h = min(h, 576);
550         h = max(h, 2);
551         if (id->type == IVTV_DEC_STREAM_TYPE_YUV)
552                 fmt->fmt.pix.field = field;
553         fmt->fmt.pix.width = w;
554         fmt->fmt.pix.height = h;
555         return ret;
556 }
557
558 static int ivtv_try_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2_format *fmt)
559 {
560         struct ivtv *itv = fh2id(fh)->itv;
561         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
562         u32 chromakey = fmt->fmt.win.chromakey;
563         u8 global_alpha = fmt->fmt.win.global_alpha;
564
565         if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
566                 return -EINVAL;
567         if (!itv->osd_video_pbase)
568                 return -EINVAL;
569         ivtv_g_fmt_vid_out_overlay(file, fh, fmt);
570         fmt->fmt.win.chromakey = chromakey;
571         fmt->fmt.win.global_alpha = global_alpha;
572         return 0;
573 }
574
575 static int ivtv_s_fmt_sliced_vbi_out(struct file *file, void *fh, struct v4l2_format *fmt)
576 {
577         return ivtv_g_fmt_sliced_vbi_out(file, fh, fmt);
578 }
579
580 static int ivtv_s_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *fmt)
581 {
582         struct ivtv_open_id *id = fh2id(fh);
583         struct ivtv *itv = id->itv;
584         struct v4l2_subdev_format format = {
585                 .which = V4L2_SUBDEV_FORMAT_ACTIVE,
586         };
587         int ret = ivtv_try_fmt_vid_cap(file, fh, fmt);
588         int w = fmt->fmt.pix.width;
589         int h = fmt->fmt.pix.height;
590
591         if (ret)
592                 return ret;
593
594         if (itv->cxhdl.width == w && itv->cxhdl.height == h)
595                 return 0;
596
597         if (atomic_read(&itv->capturing) > 0)
598                 return -EBUSY;
599
600         itv->cxhdl.width = w;
601         itv->cxhdl.height = h;
602         if (v4l2_ctrl_g_ctrl(itv->cxhdl.video_encoding) == V4L2_MPEG_VIDEO_ENCODING_MPEG_1)
603                 fmt->fmt.pix.width /= 2;
604         format.format.width = fmt->fmt.pix.width;
605         format.format.height = h;
606         format.format.code = MEDIA_BUS_FMT_FIXED;
607         v4l2_subdev_call(itv->sd_video, pad, set_fmt, NULL, &format);
608         return ivtv_g_fmt_vid_cap(file, fh, fmt);
609 }
610
611 static int ivtv_s_fmt_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
612 {
613         struct ivtv *itv = fh2id(fh)->itv;
614
615         if (!ivtv_raw_vbi(itv) && atomic_read(&itv->capturing) > 0)
616                 return -EBUSY;
617         itv->vbi.sliced_in->service_set = 0;
618         itv->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
619         v4l2_subdev_call(itv->sd_video, vbi, s_raw_fmt, &fmt->fmt.vbi);
620         return ivtv_g_fmt_vbi_cap(file, fh, fmt);
621 }
622
623 static int ivtv_s_fmt_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_format *fmt)
624 {
625         struct v4l2_sliced_vbi_format *vbifmt = &fmt->fmt.sliced;
626         struct ivtv_open_id *id = fh2id(fh);
627         struct ivtv *itv = id->itv;
628         int ret = ivtv_try_fmt_sliced_vbi_cap(file, fh, fmt);
629
630         if (ret || id->type == IVTV_DEC_STREAM_TYPE_VBI)
631                 return ret;
632
633         check_service_set(vbifmt, itv->is_50hz);
634         if (ivtv_raw_vbi(itv) && atomic_read(&itv->capturing) > 0)
635                 return -EBUSY;
636         itv->vbi.in.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
637         v4l2_subdev_call(itv->sd_video, vbi, s_sliced_fmt, vbifmt);
638         memcpy(itv->vbi.sliced_in, vbifmt, sizeof(*itv->vbi.sliced_in));
639         return 0;
640 }
641
642 static int ivtv_s_fmt_vid_out(struct file *file, void *fh, struct v4l2_format *fmt)
643 {
644         struct ivtv_open_id *id = fh2id(fh);
645         struct ivtv *itv = id->itv;
646         struct yuv_playback_info *yi = &itv->yuv_info;
647         int ret = ivtv_try_fmt_vid_out(file, fh, fmt);
648
649         if (ret)
650                 return ret;
651
652         if (id->type != IVTV_DEC_STREAM_TYPE_YUV)
653                 return 0;
654
655         /* Return now if we already have some frame data */
656         if (yi->stream_size)
657                 return -EBUSY;
658
659         yi->v4l2_src_w = fmt->fmt.pix.width;
660         yi->v4l2_src_h = fmt->fmt.pix.height;
661
662         switch (fmt->fmt.pix.field) {
663         case V4L2_FIELD_NONE:
664                 yi->lace_mode = IVTV_YUV_MODE_PROGRESSIVE;
665                 break;
666         case V4L2_FIELD_ANY:
667                 yi->lace_mode = IVTV_YUV_MODE_AUTO;
668                 break;
669         case V4L2_FIELD_INTERLACED_BT:
670                 yi->lace_mode =
671                         IVTV_YUV_MODE_INTERLACED|IVTV_YUV_SYNC_ODD;
672                 break;
673         case V4L2_FIELD_INTERLACED_TB:
674         default:
675                 yi->lace_mode = IVTV_YUV_MODE_INTERLACED;
676                 break;
677         }
678         yi->lace_sync_field = (yi->lace_mode & IVTV_YUV_SYNC_MASK) == IVTV_YUV_SYNC_EVEN ? 0 : 1;
679
680         if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
681                 itv->dma_data_req_size =
682                         1080 * ((yi->v4l2_src_h + 31) & ~31);
683
684         return 0;
685 }
686
687 static int ivtv_s_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2_format *fmt)
688 {
689         struct ivtv *itv = fh2id(fh)->itv;
690         int ret = ivtv_try_fmt_vid_out_overlay(file, fh, fmt);
691
692         if (ret == 0) {
693                 itv->osd_chroma_key = fmt->fmt.win.chromakey;
694                 itv->osd_global_alpha = fmt->fmt.win.global_alpha;
695                 ivtv_set_osd_alpha(itv);
696         }
697         return ret;
698 }
699
700 #ifdef CONFIG_VIDEO_ADV_DEBUG
701 static int ivtv_itvc(struct ivtv *itv, bool get, u64 reg, u64 *val)
702 {
703         volatile u8 __iomem *reg_start;
704
705         if (reg & 0x3)
706                 return -EINVAL;
707         if (reg >= IVTV_REG_OFFSET && reg < IVTV_REG_OFFSET + IVTV_REG_SIZE)
708                 reg_start = itv->reg_mem - IVTV_REG_OFFSET;
709         else if (itv->has_cx23415 && reg >= IVTV_DECODER_OFFSET &&
710                         reg < IVTV_DECODER_OFFSET + IVTV_DECODER_SIZE)
711                 reg_start = itv->dec_mem - IVTV_DECODER_OFFSET;
712         else if (reg < IVTV_ENCODER_SIZE)
713                 reg_start = itv->enc_mem;
714         else
715                 return -EINVAL;
716
717         if (get)
718                 *val = readl(reg + reg_start);
719         else
720                 writel(*val, reg + reg_start);
721         return 0;
722 }
723
724 static int ivtv_g_register(struct file *file, void *fh, struct v4l2_dbg_register *reg)
725 {
726         struct ivtv *itv = fh2id(fh)->itv;
727
728         reg->size = 4;
729         return ivtv_itvc(itv, true, reg->reg, &reg->val);
730 }
731
732 static int ivtv_s_register(struct file *file, void *fh, const struct v4l2_dbg_register *reg)
733 {
734         struct ivtv *itv = fh2id(fh)->itv;
735         u64 val = reg->val;
736
737         return ivtv_itvc(itv, false, reg->reg, &val);
738 }
739 #endif
740
741 static int ivtv_querycap(struct file *file, void *fh, struct v4l2_capability *vcap)
742 {
743         struct ivtv_open_id *id = fh2id(file->private_data);
744         struct ivtv *itv = id->itv;
745         struct ivtv_stream *s = &itv->streams[id->type];
746
747         strlcpy(vcap->driver, IVTV_DRIVER_NAME, sizeof(vcap->driver));
748         strlcpy(vcap->card, itv->card_name, sizeof(vcap->card));
749         snprintf(vcap->bus_info, sizeof(vcap->bus_info), "PCI:%s", pci_name(itv->pdev));
750         vcap->capabilities = itv->v4l2_cap | V4L2_CAP_DEVICE_CAPS;
751         vcap->device_caps = s->caps;
752         if ((s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY) &&
753             !itv->osd_video_pbase) {
754                 vcap->capabilities &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
755                 vcap->device_caps &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
756         }
757         return 0;
758 }
759
760 static int ivtv_enumaudio(struct file *file, void *fh, struct v4l2_audio *vin)
761 {
762         struct ivtv *itv = fh2id(fh)->itv;
763
764         return ivtv_get_audio_input(itv, vin->index, vin);
765 }
766
767 static int ivtv_g_audio(struct file *file, void *fh, struct v4l2_audio *vin)
768 {
769         struct ivtv *itv = fh2id(fh)->itv;
770
771         vin->index = itv->audio_input;
772         return ivtv_get_audio_input(itv, vin->index, vin);
773 }
774
775 static int ivtv_s_audio(struct file *file, void *fh, const struct v4l2_audio *vout)
776 {
777         struct ivtv *itv = fh2id(fh)->itv;
778
779         if (vout->index >= itv->nof_audio_inputs)
780                 return -EINVAL;
781
782         itv->audio_input = vout->index;
783         ivtv_audio_set_io(itv);
784
785         return 0;
786 }
787
788 static int ivtv_enumaudout(struct file *file, void *fh, struct v4l2_audioout *vin)
789 {
790         struct ivtv *itv = fh2id(fh)->itv;
791
792         /* set it to defaults from our table */
793         return ivtv_get_audio_output(itv, vin->index, vin);
794 }
795
796 static int ivtv_g_audout(struct file *file, void *fh, struct v4l2_audioout *vin)
797 {
798         struct ivtv *itv = fh2id(fh)->itv;
799
800         vin->index = 0;
801         return ivtv_get_audio_output(itv, vin->index, vin);
802 }
803
804 static int ivtv_s_audout(struct file *file, void *fh, const struct v4l2_audioout *vout)
805 {
806         struct ivtv *itv = fh2id(fh)->itv;
807
808         if (itv->card->video_outputs == NULL || vout->index != 0)
809                 return -EINVAL;
810         return 0;
811 }
812
813 static int ivtv_enum_input(struct file *file, void *fh, struct v4l2_input *vin)
814 {
815         struct ivtv *itv = fh2id(fh)->itv;
816
817         /* set it to defaults from our table */
818         return ivtv_get_input(itv, vin->index, vin);
819 }
820
821 static int ivtv_enum_output(struct file *file, void *fh, struct v4l2_output *vout)
822 {
823         struct ivtv *itv = fh2id(fh)->itv;
824
825         return ivtv_get_output(itv, vout->index, vout);
826 }
827
828 static int ivtv_cropcap(struct file *file, void *fh, struct v4l2_cropcap *cropcap)
829 {
830         struct ivtv_open_id *id = fh2id(fh);
831         struct ivtv *itv = id->itv;
832
833         if (cropcap->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
834                 cropcap->pixelaspect.numerator = itv->is_50hz ? 59 : 10;
835                 cropcap->pixelaspect.denominator = itv->is_50hz ? 54 : 11;
836         } else if (cropcap->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
837                 cropcap->pixelaspect.numerator = itv->is_out_50hz ? 59 : 10;
838                 cropcap->pixelaspect.denominator = itv->is_out_50hz ? 54 : 11;
839         } else {
840                 return -EINVAL;
841         }
842         return 0;
843 }
844
845 static int ivtv_s_selection(struct file *file, void *fh,
846                             struct v4l2_selection *sel)
847 {
848         struct ivtv_open_id *id = fh2id(fh);
849         struct ivtv *itv = id->itv;
850         struct yuv_playback_info *yi = &itv->yuv_info;
851         struct v4l2_rect r = { 0, 0, 720, 0 };
852         int streamtype = id->type;
853
854         if (sel->type != V4L2_BUF_TYPE_VIDEO_OUTPUT ||
855             !(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
856                 return -EINVAL;
857
858         if (sel->target != V4L2_SEL_TGT_COMPOSE)
859                 return -EINVAL;
860
861
862         if (sel->type != V4L2_BUF_TYPE_VIDEO_OUTPUT ||
863             !(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
864                 return -EINVAL;
865
866         r.height = itv->is_out_50hz ? 576 : 480;
867         if (streamtype == IVTV_DEC_STREAM_TYPE_YUV && yi->track_osd) {
868                 r.width = yi->osd_full_w;
869                 r.height = yi->osd_full_h;
870         }
871         sel->r.width = clamp(sel->r.width, 16U, r.width);
872         sel->r.height = clamp(sel->r.height, 16U, r.height);
873         sel->r.left = clamp_t(unsigned, sel->r.left, 0, r.width - sel->r.width);
874         sel->r.top = clamp_t(unsigned, sel->r.top, 0, r.height - sel->r.height);
875
876         if (streamtype == IVTV_DEC_STREAM_TYPE_YUV) {
877                 yi->main_rect = sel->r;
878                 return 0;
879         }
880         if (!ivtv_vapi(itv, CX2341X_OSD_SET_FRAMEBUFFER_WINDOW, 4,
881                         sel->r.width, sel->r.height, sel->r.left, sel->r.top)) {
882                 itv->main_rect = sel->r;
883                 return 0;
884         }
885         return -EINVAL;
886 }
887
888 static int ivtv_g_selection(struct file *file, void *fh,
889                             struct v4l2_selection *sel)
890 {
891         struct ivtv_open_id *id = fh2id(fh);
892         struct ivtv *itv = id->itv;
893         struct yuv_playback_info *yi = &itv->yuv_info;
894         struct v4l2_rect r = { 0, 0, 720, 0 };
895         int streamtype = id->type;
896
897         if (sel->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
898                 switch (sel->target) {
899                 case V4L2_SEL_TGT_CROP_DEFAULT:
900                 case V4L2_SEL_TGT_CROP_BOUNDS:
901                         sel->r.top = sel->r.left = 0;
902                         sel->r.width = 720;
903                         sel->r.height = itv->is_50hz ? 576 : 480;
904                         return 0;
905                 default:
906                         return -EINVAL;
907                 }
908         }
909
910         if (sel->type != V4L2_BUF_TYPE_VIDEO_OUTPUT ||
911             !(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
912                 return -EINVAL;
913
914         switch (sel->target) {
915         case V4L2_SEL_TGT_COMPOSE:
916                 if (streamtype == IVTV_DEC_STREAM_TYPE_YUV)
917                         sel->r = yi->main_rect;
918                 else
919                         sel->r = itv->main_rect;
920                 return 0;
921         case V4L2_SEL_TGT_COMPOSE_DEFAULT:
922         case V4L2_SEL_TGT_COMPOSE_BOUNDS:
923                 r.height = itv->is_out_50hz ? 576 : 480;
924                 if (streamtype == IVTV_DEC_STREAM_TYPE_YUV && yi->track_osd) {
925                         r.width = yi->osd_full_w;
926                         r.height = yi->osd_full_h;
927                 }
928                 sel->r = r;
929                 return 0;
930         }
931         return -EINVAL;
932 }
933
934 static int ivtv_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdesc *fmt)
935 {
936         static const struct v4l2_fmtdesc hm12 = {
937                 0, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0,
938                 "HM12 (YUV 4:2:0)", V4L2_PIX_FMT_HM12,
939                 { 0, 0, 0, 0 }
940         };
941         static const struct v4l2_fmtdesc mpeg = {
942                 0, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FMT_FLAG_COMPRESSED,
943                 "MPEG", V4L2_PIX_FMT_MPEG,
944                 { 0, 0, 0, 0 }
945         };
946         struct ivtv *itv = fh2id(fh)->itv;
947         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
948
949         if (fmt->index)
950                 return -EINVAL;
951         if (s->type == IVTV_ENC_STREAM_TYPE_MPG)
952                 *fmt = mpeg;
953         else if (s->type == IVTV_ENC_STREAM_TYPE_YUV)
954                 *fmt = hm12;
955         else
956                 return -EINVAL;
957         return 0;
958 }
959
960 static int ivtv_enum_fmt_vid_out(struct file *file, void *fh, struct v4l2_fmtdesc *fmt)
961 {
962         static const struct v4l2_fmtdesc hm12 = {
963                 0, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0,
964                 "HM12 (YUV 4:2:0)", V4L2_PIX_FMT_HM12,
965                 { 0, 0, 0, 0 }
966         };
967         static const struct v4l2_fmtdesc mpeg = {
968                 0, V4L2_BUF_TYPE_VIDEO_OUTPUT, V4L2_FMT_FLAG_COMPRESSED,
969                 "MPEG", V4L2_PIX_FMT_MPEG,
970                 { 0, 0, 0, 0 }
971         };
972         struct ivtv *itv = fh2id(fh)->itv;
973         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
974
975         if (fmt->index)
976                 return -EINVAL;
977         if (s->type == IVTV_DEC_STREAM_TYPE_MPG)
978                 *fmt = mpeg;
979         else if (s->type == IVTV_DEC_STREAM_TYPE_YUV)
980                 *fmt = hm12;
981         else
982                 return -EINVAL;
983         return 0;
984 }
985
986 static int ivtv_g_input(struct file *file, void *fh, unsigned int *i)
987 {
988         struct ivtv *itv = fh2id(fh)->itv;
989
990         *i = itv->active_input;
991
992         return 0;
993 }
994
995 int ivtv_s_input(struct file *file, void *fh, unsigned int inp)
996 {
997         struct ivtv *itv = fh2id(fh)->itv;
998         v4l2_std_id std;
999         int i;
1000
1001         if (inp >= itv->nof_inputs)
1002                 return -EINVAL;
1003
1004         if (inp == itv->active_input) {
1005                 IVTV_DEBUG_INFO("Input unchanged\n");
1006                 return 0;
1007         }
1008
1009         if (atomic_read(&itv->capturing) > 0) {
1010                 return -EBUSY;
1011         }
1012
1013         IVTV_DEBUG_INFO("Changing input from %d to %d\n",
1014                         itv->active_input, inp);
1015
1016         itv->active_input = inp;
1017         /* Set the audio input to whatever is appropriate for the
1018            input type. */
1019         itv->audio_input = itv->card->video_inputs[inp].audio_index;
1020
1021         if (itv->card->video_inputs[inp].video_type == IVTV_CARD_INPUT_VID_TUNER)
1022                 std = itv->tuner_std;
1023         else
1024                 std = V4L2_STD_ALL;
1025         for (i = 0; i <= IVTV_ENC_STREAM_TYPE_VBI; i++)
1026                 itv->streams[i].vdev.tvnorms = std;
1027
1028         /* prevent others from messing with the streams until
1029            we're finished changing inputs. */
1030         ivtv_mute(itv);
1031         ivtv_video_set_io(itv);
1032         ivtv_audio_set_io(itv);
1033         ivtv_unmute(itv);
1034
1035         return 0;
1036 }
1037
1038 static int ivtv_g_output(struct file *file, void *fh, unsigned int *i)
1039 {
1040         struct ivtv *itv = fh2id(fh)->itv;
1041
1042         if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1043                 return -EINVAL;
1044
1045         *i = itv->active_output;
1046
1047         return 0;
1048 }
1049
1050 static int ivtv_s_output(struct file *file, void *fh, unsigned int outp)
1051 {
1052         struct ivtv *itv = fh2id(fh)->itv;
1053
1054         if (outp >= itv->card->nof_outputs)
1055                 return -EINVAL;
1056
1057         if (outp == itv->active_output) {
1058                 IVTV_DEBUG_INFO("Output unchanged\n");
1059                 return 0;
1060         }
1061         IVTV_DEBUG_INFO("Changing output from %d to %d\n",
1062                    itv->active_output, outp);
1063
1064         itv->active_output = outp;
1065         ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing,
1066                         SAA7127_INPUT_TYPE_NORMAL,
1067                         itv->card->video_outputs[outp].video_output, 0);
1068
1069         return 0;
1070 }
1071
1072 static int ivtv_g_frequency(struct file *file, void *fh, struct v4l2_frequency *vf)
1073 {
1074         struct ivtv *itv = fh2id(fh)->itv;
1075         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
1076
1077         if (s->vdev.vfl_dir)
1078                 return -ENOTTY;
1079         if (vf->tuner != 0)
1080                 return -EINVAL;
1081
1082         ivtv_call_all(itv, tuner, g_frequency, vf);
1083         return 0;
1084 }
1085
1086 int ivtv_s_frequency(struct file *file, void *fh, const struct v4l2_frequency *vf)
1087 {
1088         struct ivtv *itv = fh2id(fh)->itv;
1089         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
1090
1091         if (s->vdev.vfl_dir)
1092                 return -ENOTTY;
1093         if (vf->tuner != 0)
1094                 return -EINVAL;
1095
1096         ivtv_mute(itv);
1097         IVTV_DEBUG_INFO("v4l2 ioctl: set frequency %d\n", vf->frequency);
1098         ivtv_call_all(itv, tuner, s_frequency, vf);
1099         ivtv_unmute(itv);
1100         return 0;
1101 }
1102
1103 static int ivtv_g_std(struct file *file, void *fh, v4l2_std_id *std)
1104 {
1105         struct ivtv *itv = fh2id(fh)->itv;
1106
1107         *std = itv->std;
1108         return 0;
1109 }
1110
1111 void ivtv_s_std_enc(struct ivtv *itv, v4l2_std_id std)
1112 {
1113         itv->std = std;
1114         itv->is_60hz = (std & V4L2_STD_525_60) ? 1 : 0;
1115         itv->is_50hz = !itv->is_60hz;
1116         cx2341x_handler_set_50hz(&itv->cxhdl, itv->is_50hz);
1117         itv->cxhdl.width = 720;
1118         itv->cxhdl.height = itv->is_50hz ? 576 : 480;
1119         itv->vbi.count = itv->is_50hz ? 18 : 12;
1120         itv->vbi.start[0] = itv->is_50hz ? 6 : 10;
1121         itv->vbi.start[1] = itv->is_50hz ? 318 : 273;
1122
1123         if (itv->hw_flags & IVTV_HW_CX25840)
1124                 itv->vbi.sliced_decoder_line_size = itv->is_60hz ? 272 : 284;
1125
1126         /* Tuner */
1127         ivtv_call_all(itv, video, s_std, itv->std);
1128 }
1129
1130 void ivtv_s_std_dec(struct ivtv *itv, v4l2_std_id std)
1131 {
1132         struct yuv_playback_info *yi = &itv->yuv_info;
1133         DEFINE_WAIT(wait);
1134         int f;
1135
1136         /* set display standard */
1137         itv->std_out = std;
1138         itv->is_out_60hz = (std & V4L2_STD_525_60) ? 1 : 0;
1139         itv->is_out_50hz = !itv->is_out_60hz;
1140         ivtv_call_all(itv, video, s_std_output, itv->std_out);
1141
1142         /*
1143          * The next firmware call is time sensitive. Time it to
1144          * avoid risk of a hard lock, by trying to ensure the call
1145          * happens within the first 100 lines of the top field.
1146          * Make 4 attempts to sync to the decoder before giving up.
1147          */
1148         mutex_unlock(&itv->serialize_lock);
1149         for (f = 0; f < 4; f++) {
1150                 prepare_to_wait(&itv->vsync_waitq, &wait,
1151                                 TASK_UNINTERRUPTIBLE);
1152                 if ((read_reg(IVTV_REG_DEC_LINE_FIELD) >> 16) < 100)
1153                         break;
1154                 schedule_timeout(msecs_to_jiffies(25));
1155         }
1156         finish_wait(&itv->vsync_waitq, &wait);
1157         mutex_lock(&itv->serialize_lock);
1158
1159         if (f == 4)
1160                 IVTV_WARN("Mode change failed to sync to decoder\n");
1161
1162         ivtv_vapi(itv, CX2341X_DEC_SET_STANDARD, 1, itv->is_out_50hz);
1163         itv->main_rect.left = 0;
1164         itv->main_rect.top = 0;
1165         itv->main_rect.width = 720;
1166         itv->main_rect.height = itv->is_out_50hz ? 576 : 480;
1167         ivtv_vapi(itv, CX2341X_OSD_SET_FRAMEBUFFER_WINDOW, 4,
1168                 720, itv->main_rect.height, 0, 0);
1169         yi->main_rect = itv->main_rect;
1170         if (!itv->osd_info) {
1171                 yi->osd_full_w = 720;
1172                 yi->osd_full_h = itv->is_out_50hz ? 576 : 480;
1173         }
1174 }
1175
1176 static int ivtv_s_std(struct file *file, void *fh, v4l2_std_id std)
1177 {
1178         struct ivtv *itv = fh2id(fh)->itv;
1179
1180         if ((std & V4L2_STD_ALL) == 0)
1181                 return -EINVAL;
1182
1183         if (std == itv->std)
1184                 return 0;
1185
1186         if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags) ||
1187             atomic_read(&itv->capturing) > 0 ||
1188             atomic_read(&itv->decoding) > 0) {
1189                 /* Switching standard would mess with already running
1190                    streams, prevent that by returning EBUSY. */
1191                 return -EBUSY;
1192         }
1193
1194         IVTV_DEBUG_INFO("Switching standard to %llx.\n",
1195                 (unsigned long long)itv->std);
1196
1197         ivtv_s_std_enc(itv, std);
1198         if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
1199                 ivtv_s_std_dec(itv, std);
1200
1201         return 0;
1202 }
1203
1204 static int ivtv_s_tuner(struct file *file, void *fh, const struct v4l2_tuner *vt)
1205 {
1206         struct ivtv_open_id *id = fh2id(fh);
1207         struct ivtv *itv = id->itv;
1208
1209         if (vt->index != 0)
1210                 return -EINVAL;
1211
1212         ivtv_call_all(itv, tuner, s_tuner, vt);
1213
1214         return 0;
1215 }
1216
1217 static int ivtv_g_tuner(struct file *file, void *fh, struct v4l2_tuner *vt)
1218 {
1219         struct ivtv *itv = fh2id(fh)->itv;
1220
1221         if (vt->index != 0)
1222                 return -EINVAL;
1223
1224         ivtv_call_all(itv, tuner, g_tuner, vt);
1225
1226         if (vt->type == V4L2_TUNER_RADIO)
1227                 strlcpy(vt->name, "ivtv Radio Tuner", sizeof(vt->name));
1228         else
1229                 strlcpy(vt->name, "ivtv TV Tuner", sizeof(vt->name));
1230         return 0;
1231 }
1232
1233 static int ivtv_g_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_sliced_vbi_cap *cap)
1234 {
1235         struct ivtv *itv = fh2id(fh)->itv;
1236         int set = itv->is_50hz ? V4L2_SLICED_VBI_625 : V4L2_SLICED_VBI_525;
1237         int f, l;
1238
1239         if (cap->type == V4L2_BUF_TYPE_SLICED_VBI_CAPTURE) {
1240                 for (f = 0; f < 2; f++) {
1241                         for (l = 0; l < 24; l++) {
1242                                 if (valid_service_line(f, l, itv->is_50hz))
1243                                         cap->service_lines[f][l] = set;
1244                         }
1245                 }
1246         } else if (cap->type == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT) {
1247                 if (!(itv->v4l2_cap & V4L2_CAP_SLICED_VBI_OUTPUT))
1248                         return -EINVAL;
1249                 if (itv->is_60hz) {
1250                         cap->service_lines[0][21] = V4L2_SLICED_CAPTION_525;
1251                         cap->service_lines[1][21] = V4L2_SLICED_CAPTION_525;
1252                 } else {
1253                         cap->service_lines[0][23] = V4L2_SLICED_WSS_625;
1254                         cap->service_lines[0][16] = V4L2_SLICED_VPS;
1255                 }
1256         } else {
1257                 return -EINVAL;
1258         }
1259
1260         set = 0;
1261         for (f = 0; f < 2; f++)
1262                 for (l = 0; l < 24; l++)
1263                         set |= cap->service_lines[f][l];
1264         cap->service_set = set;
1265         return 0;
1266 }
1267
1268 static int ivtv_g_enc_index(struct file *file, void *fh, struct v4l2_enc_idx *idx)
1269 {
1270         struct ivtv *itv = fh2id(fh)->itv;
1271         struct v4l2_enc_idx_entry *e = idx->entry;
1272         int entries;
1273         int i;
1274
1275         entries = (itv->pgm_info_write_idx + IVTV_MAX_PGM_INDEX - itv->pgm_info_read_idx) %
1276                                 IVTV_MAX_PGM_INDEX;
1277         if (entries > V4L2_ENC_IDX_ENTRIES)
1278                 entries = V4L2_ENC_IDX_ENTRIES;
1279         idx->entries = 0;
1280         idx->entries_cap = IVTV_MAX_PGM_INDEX;
1281         if (!atomic_read(&itv->capturing))
1282                 return 0;
1283         for (i = 0; i < entries; i++) {
1284                 *e = itv->pgm_info[(itv->pgm_info_read_idx + i) % IVTV_MAX_PGM_INDEX];
1285                 if ((e->flags & V4L2_ENC_IDX_FRAME_MASK) <= V4L2_ENC_IDX_FRAME_B) {
1286                         idx->entries++;
1287                         e++;
1288                 }
1289         }
1290         itv->pgm_info_read_idx = (itv->pgm_info_read_idx + idx->entries) % IVTV_MAX_PGM_INDEX;
1291         return 0;
1292 }
1293
1294 static int ivtv_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *enc)
1295 {
1296         struct ivtv_open_id *id = fh2id(fh);
1297         struct ivtv *itv = id->itv;
1298
1299
1300         switch (enc->cmd) {
1301         case V4L2_ENC_CMD_START:
1302                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_START\n");
1303                 enc->flags = 0;
1304                 return ivtv_start_capture(id);
1305
1306         case V4L2_ENC_CMD_STOP:
1307                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_STOP\n");
1308                 enc->flags &= V4L2_ENC_CMD_STOP_AT_GOP_END;
1309                 ivtv_stop_capture(id, enc->flags & V4L2_ENC_CMD_STOP_AT_GOP_END);
1310                 return 0;
1311
1312         case V4L2_ENC_CMD_PAUSE:
1313                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_PAUSE\n");
1314                 enc->flags = 0;
1315
1316                 if (!atomic_read(&itv->capturing))
1317                         return -EPERM;
1318                 if (test_and_set_bit(IVTV_F_I_ENC_PAUSED, &itv->i_flags))
1319                         return 0;
1320
1321                 ivtv_mute(itv);
1322                 ivtv_vapi(itv, CX2341X_ENC_PAUSE_ENCODER, 1, 0);
1323                 break;
1324
1325         case V4L2_ENC_CMD_RESUME:
1326                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_RESUME\n");
1327                 enc->flags = 0;
1328
1329                 if (!atomic_read(&itv->capturing))
1330                         return -EPERM;
1331
1332                 if (!test_and_clear_bit(IVTV_F_I_ENC_PAUSED, &itv->i_flags))
1333                         return 0;
1334
1335                 ivtv_vapi(itv, CX2341X_ENC_PAUSE_ENCODER, 1, 1);
1336                 ivtv_unmute(itv);
1337                 break;
1338         default:
1339                 IVTV_DEBUG_IOCTL("Unknown cmd %d\n", enc->cmd);
1340                 return -EINVAL;
1341         }
1342
1343         return 0;
1344 }
1345
1346 static int ivtv_try_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *enc)
1347 {
1348         struct ivtv *itv = fh2id(fh)->itv;
1349
1350         switch (enc->cmd) {
1351         case V4L2_ENC_CMD_START:
1352                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_START\n");
1353                 enc->flags = 0;
1354                 return 0;
1355
1356         case V4L2_ENC_CMD_STOP:
1357                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_STOP\n");
1358                 enc->flags &= V4L2_ENC_CMD_STOP_AT_GOP_END;
1359                 return 0;
1360
1361         case V4L2_ENC_CMD_PAUSE:
1362                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_PAUSE\n");
1363                 enc->flags = 0;
1364                 return 0;
1365
1366         case V4L2_ENC_CMD_RESUME:
1367                 IVTV_DEBUG_IOCTL("V4L2_ENC_CMD_RESUME\n");
1368                 enc->flags = 0;
1369                 return 0;
1370         default:
1371                 IVTV_DEBUG_IOCTL("Unknown cmd %d\n", enc->cmd);
1372                 return -EINVAL;
1373         }
1374 }
1375
1376 static int ivtv_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *fb)
1377 {
1378         struct ivtv *itv = fh2id(fh)->itv;
1379         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
1380         u32 data[CX2341X_MBOX_MAX_DATA];
1381         struct yuv_playback_info *yi = &itv->yuv_info;
1382
1383         int pixfmt;
1384         static u32 pixel_format[16] = {
1385                 V4L2_PIX_FMT_PAL8, /* Uses a 256-entry RGB colormap */
1386                 V4L2_PIX_FMT_RGB565,
1387                 V4L2_PIX_FMT_RGB555,
1388                 V4L2_PIX_FMT_RGB444,
1389                 V4L2_PIX_FMT_RGB32,
1390                 0,
1391                 0,
1392                 0,
1393                 V4L2_PIX_FMT_PAL8, /* Uses a 256-entry YUV colormap */
1394                 V4L2_PIX_FMT_YUV565,
1395                 V4L2_PIX_FMT_YUV555,
1396                 V4L2_PIX_FMT_YUV444,
1397                 V4L2_PIX_FMT_YUV32,
1398                 0,
1399                 0,
1400                 0,
1401         };
1402
1403         if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
1404                 return -ENOTTY;
1405         if (!itv->osd_video_pbase)
1406                 return -ENOTTY;
1407
1408         fb->capability = V4L2_FBUF_CAP_EXTERNOVERLAY | V4L2_FBUF_CAP_CHROMAKEY |
1409                 V4L2_FBUF_CAP_GLOBAL_ALPHA;
1410
1411         ivtv_vapi_result(itv, data, CX2341X_OSD_GET_STATE, 0);
1412         data[0] |= (read_reg(0x2a00) >> 7) & 0x40;
1413         pixfmt = (data[0] >> 3) & 0xf;
1414
1415         fb->fmt.pixelformat = pixel_format[pixfmt];
1416         fb->fmt.width = itv->osd_rect.width;
1417         fb->fmt.height = itv->osd_rect.height;
1418         fb->fmt.field = V4L2_FIELD_INTERLACED;
1419         fb->fmt.bytesperline = fb->fmt.width;
1420         fb->fmt.colorspace = V4L2_COLORSPACE_SMPTE170M;
1421         fb->fmt.field = V4L2_FIELD_INTERLACED;
1422         if (fb->fmt.pixelformat != V4L2_PIX_FMT_PAL8)
1423                 fb->fmt.bytesperline *= 2;
1424         if (fb->fmt.pixelformat == V4L2_PIX_FMT_RGB32 ||
1425             fb->fmt.pixelformat == V4L2_PIX_FMT_YUV32)
1426                 fb->fmt.bytesperline *= 2;
1427         fb->fmt.sizeimage = fb->fmt.bytesperline * fb->fmt.height;
1428         fb->base = (void *)itv->osd_video_pbase;
1429         fb->flags = 0;
1430
1431         if (itv->osd_chroma_key_state)
1432                 fb->flags |= V4L2_FBUF_FLAG_CHROMAKEY;
1433
1434         if (itv->osd_global_alpha_state)
1435                 fb->flags |= V4L2_FBUF_FLAG_GLOBAL_ALPHA;
1436
1437         if (yi->track_osd)
1438                 fb->flags |= V4L2_FBUF_FLAG_OVERLAY;
1439
1440         pixfmt &= 7;
1441
1442         /* no local alpha for RGB565 or unknown formats */
1443         if (pixfmt == 1 || pixfmt > 4)
1444                 return 0;
1445
1446         /* 16-bit formats have inverted local alpha */
1447         if (pixfmt == 2 || pixfmt == 3)
1448                 fb->capability |= V4L2_FBUF_CAP_LOCAL_INV_ALPHA;
1449         else
1450                 fb->capability |= V4L2_FBUF_CAP_LOCAL_ALPHA;
1451
1452         if (itv->osd_local_alpha_state) {
1453                 /* 16-bit formats have inverted local alpha */
1454                 if (pixfmt == 2 || pixfmt == 3)
1455                         fb->flags |= V4L2_FBUF_FLAG_LOCAL_INV_ALPHA;
1456                 else
1457                         fb->flags |= V4L2_FBUF_FLAG_LOCAL_ALPHA;
1458         }
1459
1460         return 0;
1461 }
1462
1463 static int ivtv_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffer *fb)
1464 {
1465         struct ivtv_open_id *id = fh2id(fh);
1466         struct ivtv *itv = id->itv;
1467         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
1468         struct yuv_playback_info *yi = &itv->yuv_info;
1469
1470         if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
1471                 return -ENOTTY;
1472         if (!itv->osd_video_pbase)
1473                 return -ENOTTY;
1474
1475         itv->osd_global_alpha_state = (fb->flags & V4L2_FBUF_FLAG_GLOBAL_ALPHA) != 0;
1476         itv->osd_local_alpha_state =
1477                 (fb->flags & (V4L2_FBUF_FLAG_LOCAL_ALPHA|V4L2_FBUF_FLAG_LOCAL_INV_ALPHA)) != 0;
1478         itv->osd_chroma_key_state = (fb->flags & V4L2_FBUF_FLAG_CHROMAKEY) != 0;
1479         ivtv_set_osd_alpha(itv);
1480         yi->track_osd = (fb->flags & V4L2_FBUF_FLAG_OVERLAY) != 0;
1481         return 0;
1482 }
1483
1484 static int ivtv_overlay(struct file *file, void *fh, unsigned int on)
1485 {
1486         struct ivtv_open_id *id = fh2id(fh);
1487         struct ivtv *itv = id->itv;
1488         struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
1489
1490         if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
1491                 return -ENOTTY;
1492         if (!itv->osd_video_pbase)
1493                 return -ENOTTY;
1494
1495         ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, on != 0);
1496
1497         return 0;
1498 }
1499
1500 static int ivtv_subscribe_event(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)
1501 {
1502         switch (sub->type) {
1503         case V4L2_EVENT_VSYNC:
1504         case V4L2_EVENT_EOS:
1505                 return v4l2_event_subscribe(fh, sub, 0, NULL);
1506         case V4L2_EVENT_CTRL:
1507                 return v4l2_event_subscribe(fh, sub, 0, &v4l2_ctrl_sub_ev_ops);
1508         default:
1509                 return -EINVAL;
1510         }
1511 }
1512
1513 static int ivtv_log_status(struct file *file, void *fh)
1514 {
1515         struct ivtv *itv = fh2id(fh)->itv;
1516         u32 data[CX2341X_MBOX_MAX_DATA];
1517
1518         int has_output = itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT;
1519         struct v4l2_input vidin;
1520         struct v4l2_audio audin;
1521         int i;
1522
1523         IVTV_INFO("Version: %s Card: %s\n", IVTV_VERSION, itv->card_name);
1524         if (itv->hw_flags & IVTV_HW_TVEEPROM) {
1525                 struct tveeprom tv;
1526
1527                 ivtv_read_eeprom(itv, &tv);
1528         }
1529         ivtv_call_all(itv, core, log_status);
1530         ivtv_get_input(itv, itv->active_input, &vidin);
1531         ivtv_get_audio_input(itv, itv->audio_input, &audin);
1532         IVTV_INFO("Video Input:  %s\n", vidin.name);
1533         IVTV_INFO("Audio Input:  %s%s\n", audin.name,
1534                 itv->dualwatch_stereo_mode == V4L2_MPEG_AUDIO_MODE_DUAL ?
1535                         " (Bilingual)" : "");
1536         if (has_output) {
1537                 struct v4l2_output vidout;
1538                 struct v4l2_audioout audout;
1539                 int mode = itv->output_mode;
1540                 static const char * const output_modes[5] = {
1541                         "None",
1542                         "MPEG Streaming",
1543                         "YUV Streaming",
1544                         "YUV Frames",
1545                         "Passthrough",
1546                 };
1547                 static const char * const alpha_mode[4] = {
1548                         "None",
1549                         "Global",
1550                         "Local",
1551                         "Global and Local"
1552                 };
1553                 static const char * const pixel_format[16] = {
1554                         "ARGB Indexed",
1555                         "RGB 5:6:5",
1556                         "ARGB 1:5:5:5",
1557                         "ARGB 1:4:4:4",
1558                         "ARGB 8:8:8:8",
1559                         "5",
1560                         "6",
1561                         "7",
1562                         "AYUV Indexed",
1563                         "YUV 5:6:5",
1564                         "AYUV 1:5:5:5",
1565                         "AYUV 1:4:4:4",
1566                         "AYUV 8:8:8:8",
1567                         "13",
1568                         "14",
1569                         "15",
1570                 };
1571
1572                 ivtv_get_output(itv, itv->active_output, &vidout);
1573                 ivtv_get_audio_output(itv, 0, &audout);
1574                 IVTV_INFO("Video Output: %s\n", vidout.name);
1575                 if (mode < 0 || mode > OUT_PASSTHROUGH)
1576                         mode = OUT_NONE;
1577                 IVTV_INFO("Output Mode:  %s\n", output_modes[mode]);
1578                 ivtv_vapi_result(itv, data, CX2341X_OSD_GET_STATE, 0);
1579                 data[0] |= (read_reg(0x2a00) >> 7) & 0x40;
1580                 IVTV_INFO("Overlay:      %s, Alpha: %s, Pixel Format: %s\n",
1581                         data[0] & 1 ? "On" : "Off",
1582                         alpha_mode[(data[0] >> 1) & 0x3],
1583                         pixel_format[(data[0] >> 3) & 0xf]);
1584         }
1585         IVTV_INFO("Tuner:  %s\n",
1586                 test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags) ? "Radio" : "TV");
1587         v4l2_ctrl_handler_log_status(&itv->cxhdl.hdl, itv->v4l2_dev.name);
1588         IVTV_INFO("Status flags:    0x%08lx\n", itv->i_flags);
1589         for (i = 0; i < IVTV_MAX_STREAMS; i++) {
1590                 struct ivtv_stream *s = &itv->streams[i];
1591
1592                 if (s->vdev.v4l2_dev == NULL || s->buffers == 0)
1593                         continue;
1594                 IVTV_INFO("Stream %s: status 0x%04lx, %d%% of %d KiB (%d buffers) in use\n", s->name, s->s_flags,
1595                                 (s->buffers - s->q_free.buffers) * 100 / s->buffers,
1596                                 (s->buffers * s->buf_size) / 1024, s->buffers);
1597         }
1598
1599         IVTV_INFO("Read MPG/VBI: %lld/%lld bytes\n",
1600                         (long long)itv->mpg_data_received,
1601                         (long long)itv->vbi_data_inserted);
1602         return 0;
1603 }
1604
1605 static int ivtv_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *dec)
1606 {
1607         struct ivtv_open_id *id = fh2id(file->private_data);
1608         struct ivtv *itv = id->itv;
1609
1610         IVTV_DEBUG_IOCTL("VIDIOC_DECODER_CMD %d\n", dec->cmd);
1611         return ivtv_video_command(itv, id, dec, false);
1612 }
1613
1614 static int ivtv_try_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *dec)
1615 {
1616         struct ivtv_open_id *id = fh2id(file->private_data);
1617         struct ivtv *itv = id->itv;
1618
1619         IVTV_DEBUG_IOCTL("VIDIOC_TRY_DECODER_CMD %d\n", dec->cmd);
1620         return ivtv_video_command(itv, id, dec, true);
1621 }
1622
1623 static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg)
1624 {
1625         struct ivtv_open_id *id = fh2id(filp->private_data);
1626         struct ivtv *itv = id->itv;
1627         int nonblocking = filp->f_flags & O_NONBLOCK;
1628         struct ivtv_stream *s = &itv->streams[id->type];
1629         unsigned long iarg = (unsigned long)arg;
1630
1631         switch (cmd) {
1632         case IVTV_IOC_DMA_FRAME: {
1633                 struct ivtv_dma_frame *args = arg;
1634
1635                 IVTV_DEBUG_IOCTL("IVTV_IOC_DMA_FRAME\n");
1636                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1637                         return -EINVAL;
1638                 if (args->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
1639                         return -EINVAL;
1640                 if (itv->output_mode == OUT_UDMA_YUV && args->y_source == NULL)
1641                         return 0;
1642                 if (ivtv_start_decoding(id, id->type)) {
1643                         return -EBUSY;
1644                 }
1645                 if (ivtv_set_output_mode(itv, OUT_UDMA_YUV) != OUT_UDMA_YUV) {
1646                         ivtv_release_stream(s);
1647                         return -EBUSY;
1648                 }
1649                 /* Mark that this file handle started the UDMA_YUV mode */
1650                 id->yuv_frames = 1;
1651                 if (args->y_source == NULL)
1652                         return 0;
1653                 return ivtv_yuv_prep_frame(itv, args);
1654         }
1655
1656         case IVTV_IOC_PASSTHROUGH_MODE:
1657                 IVTV_DEBUG_IOCTL("IVTV_IOC_PASSTHROUGH_MODE\n");
1658                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1659                         return -EINVAL;
1660                 return ivtv_passthrough_mode(itv, *(int *)arg != 0);
1661
1662         case VIDEO_GET_PTS: {
1663                 s64 *pts = arg;
1664                 s64 frame;
1665
1666                 IVTV_DEBUG_IOCTL("VIDEO_GET_PTS\n");
1667                 if (s->type < IVTV_DEC_STREAM_TYPE_MPG) {
1668                         *pts = s->dma_pts;
1669                         break;
1670                 }
1671                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1672                         return -EINVAL;
1673                 return ivtv_g_pts_frame(itv, pts, &frame);
1674         }
1675
1676         case VIDEO_GET_FRAME_COUNT: {
1677                 s64 *frame = arg;
1678                 s64 pts;
1679
1680                 IVTV_DEBUG_IOCTL("VIDEO_GET_FRAME_COUNT\n");
1681                 if (s->type < IVTV_DEC_STREAM_TYPE_MPG) {
1682                         *frame = 0;
1683                         break;
1684                 }
1685                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1686                         return -EINVAL;
1687                 return ivtv_g_pts_frame(itv, &pts, frame);
1688         }
1689
1690         case VIDEO_PLAY: {
1691                 struct v4l2_decoder_cmd dc;
1692
1693                 IVTV_DEBUG_IOCTL("VIDEO_PLAY\n");
1694                 memset(&dc, 0, sizeof(dc));
1695                 dc.cmd = V4L2_DEC_CMD_START;
1696                 return ivtv_video_command(itv, id, &dc, 0);
1697         }
1698
1699         case VIDEO_STOP: {
1700                 struct v4l2_decoder_cmd dc;
1701
1702                 IVTV_DEBUG_IOCTL("VIDEO_STOP\n");
1703                 memset(&dc, 0, sizeof(dc));
1704                 dc.cmd = V4L2_DEC_CMD_STOP;
1705                 dc.flags = V4L2_DEC_CMD_STOP_TO_BLACK | V4L2_DEC_CMD_STOP_IMMEDIATELY;
1706                 return ivtv_video_command(itv, id, &dc, 0);
1707         }
1708
1709         case VIDEO_FREEZE: {
1710                 struct v4l2_decoder_cmd dc;
1711
1712                 IVTV_DEBUG_IOCTL("VIDEO_FREEZE\n");
1713                 memset(&dc, 0, sizeof(dc));
1714                 dc.cmd = V4L2_DEC_CMD_PAUSE;
1715                 return ivtv_video_command(itv, id, &dc, 0);
1716         }
1717
1718         case VIDEO_CONTINUE: {
1719                 struct v4l2_decoder_cmd dc;
1720
1721                 IVTV_DEBUG_IOCTL("VIDEO_CONTINUE\n");
1722                 memset(&dc, 0, sizeof(dc));
1723                 dc.cmd = V4L2_DEC_CMD_RESUME;
1724                 return ivtv_video_command(itv, id, &dc, 0);
1725         }
1726
1727         case VIDEO_COMMAND:
1728         case VIDEO_TRY_COMMAND: {
1729                 /* Note: struct v4l2_decoder_cmd has the same layout as
1730                    struct video_command */
1731                 struct v4l2_decoder_cmd *dc = arg;
1732                 int try = (cmd == VIDEO_TRY_COMMAND);
1733
1734                 if (try)
1735                         IVTV_DEBUG_IOCTL("VIDEO_TRY_COMMAND %d\n", dc->cmd);
1736                 else
1737                         IVTV_DEBUG_IOCTL("VIDEO_COMMAND %d\n", dc->cmd);
1738                 return ivtv_video_command(itv, id, dc, try);
1739         }
1740
1741         case VIDEO_GET_EVENT: {
1742                 struct video_event *ev = arg;
1743                 DEFINE_WAIT(wait);
1744
1745                 IVTV_DEBUG_IOCTL("VIDEO_GET_EVENT\n");
1746                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1747                         return -EINVAL;
1748                 memset(ev, 0, sizeof(*ev));
1749                 set_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags);
1750
1751                 while (1) {
1752                         if (test_and_clear_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags))
1753                                 ev->type = VIDEO_EVENT_DECODER_STOPPED;
1754                         else if (test_and_clear_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags)) {
1755                                 ev->type = VIDEO_EVENT_VSYNC;
1756                                 ev->u.vsync_field = test_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags) ?
1757                                         VIDEO_VSYNC_FIELD_ODD : VIDEO_VSYNC_FIELD_EVEN;
1758                                 if (itv->output_mode == OUT_UDMA_YUV &&
1759                                         (itv->yuv_info.lace_mode & IVTV_YUV_MODE_MASK) ==
1760                                                                 IVTV_YUV_MODE_PROGRESSIVE) {
1761                                         ev->u.vsync_field = VIDEO_VSYNC_FIELD_PROGRESSIVE;
1762                                 }
1763                         }
1764                         if (ev->type)
1765                                 return 0;
1766                         if (nonblocking)
1767                                 return -EAGAIN;
1768                         /* Wait for event. Note that serialize_lock is locked,
1769                            so to allow other processes to access the driver while
1770                            we are waiting unlock first and later lock again. */
1771                         mutex_unlock(&itv->serialize_lock);
1772                         prepare_to_wait(&itv->event_waitq, &wait, TASK_INTERRUPTIBLE);
1773                         if (!test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags) &&
1774                             !test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags))
1775                                 schedule();
1776                         finish_wait(&itv->event_waitq, &wait);
1777                         mutex_lock(&itv->serialize_lock);
1778                         if (signal_pending(current)) {
1779                                 /* return if a signal was received */
1780                                 IVTV_DEBUG_INFO("User stopped wait for event\n");
1781                                 return -EINTR;
1782                         }
1783                 }
1784                 break;
1785         }
1786
1787         case VIDEO_SELECT_SOURCE:
1788                 IVTV_DEBUG_IOCTL("VIDEO_SELECT_SOURCE\n");
1789                 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
1790                         return -EINVAL;
1791                 return ivtv_passthrough_mode(itv, iarg == VIDEO_SOURCE_DEMUX);
1792
1793         case AUDIO_SET_MUTE:
1794                 IVTV_DEBUG_IOCTL("AUDIO_SET_MUTE\n");
1795                 itv->speed_mute_audio = iarg;
1796                 return 0;
1797
1798         case AUDIO_CHANNEL_SELECT:
1799                 IVTV_DEBUG_IOCTL("AUDIO_CHANNEL_SELECT\n");
1800                 if (iarg > AUDIO_STEREO_SWAPPED)
1801                         return -EINVAL;
1802                 return v4l2_ctrl_s_ctrl(itv->ctrl_audio_playback, iarg + 1);
1803
1804         case AUDIO_BILINGUAL_CHANNEL_SELECT:
1805                 IVTV_DEBUG_IOCTL("AUDIO_BILINGUAL_CHANNEL_SELECT\n");
1806                 if (iarg > AUDIO_STEREO_SWAPPED)
1807                         return -EINVAL;
1808                 return v4l2_ctrl_s_ctrl(itv->ctrl_audio_multilingual_playback, iarg + 1);
1809
1810         default:
1811                 return -EINVAL;
1812         }
1813         return 0;
1814 }
1815
1816 static long ivtv_default(struct file *file, void *fh, bool valid_prio,
1817                          unsigned int cmd, void *arg)
1818 {
1819         struct ivtv *itv = fh2id(fh)->itv;
1820
1821         if (!valid_prio) {
1822                 switch (cmd) {
1823                 case IVTV_IOC_PASSTHROUGH_MODE:
1824                 case VIDEO_PLAY:
1825                 case VIDEO_STOP:
1826                 case VIDEO_FREEZE:
1827                 case VIDEO_CONTINUE:
1828                 case VIDEO_COMMAND:
1829                 case VIDEO_SELECT_SOURCE:
1830                 case AUDIO_SET_MUTE:
1831                 case AUDIO_CHANNEL_SELECT:
1832                 case AUDIO_BILINGUAL_CHANNEL_SELECT:
1833                         return -EBUSY;
1834                 }
1835         }
1836
1837         switch (cmd) {
1838         case VIDIOC_INT_RESET: {
1839                 u32 val = *(u32 *)arg;
1840
1841                 if ((val == 0 && itv->options.newi2c) || (val & 0x01))
1842                         ivtv_reset_ir_gpio(itv);
1843                 if (val & 0x02)
1844                         v4l2_subdev_call(itv->sd_video, core, reset, 0);
1845                 break;
1846         }
1847
1848         case IVTV_IOC_DMA_FRAME:
1849         case IVTV_IOC_PASSTHROUGH_MODE:
1850         case VIDEO_GET_PTS:
1851         case VIDEO_GET_FRAME_COUNT:
1852         case VIDEO_GET_EVENT:
1853         case VIDEO_PLAY:
1854         case VIDEO_STOP:
1855         case VIDEO_FREEZE:
1856         case VIDEO_CONTINUE:
1857         case VIDEO_COMMAND:
1858         case VIDEO_TRY_COMMAND:
1859         case VIDEO_SELECT_SOURCE:
1860         case AUDIO_SET_MUTE:
1861         case AUDIO_CHANNEL_SELECT:
1862         case AUDIO_BILINGUAL_CHANNEL_SELECT:
1863                 return ivtv_decoder_ioctls(file, cmd, (void *)arg);
1864
1865         default:
1866                 return -ENOTTY;
1867         }
1868         return 0;
1869 }
1870
1871 static const struct v4l2_ioctl_ops ivtv_ioctl_ops = {
1872         .vidioc_querycap                    = ivtv_querycap,
1873         .vidioc_s_audio                     = ivtv_s_audio,
1874         .vidioc_g_audio                     = ivtv_g_audio,
1875         .vidioc_enumaudio                   = ivtv_enumaudio,
1876         .vidioc_s_audout                    = ivtv_s_audout,
1877         .vidioc_g_audout                    = ivtv_g_audout,
1878         .vidioc_enum_input                  = ivtv_enum_input,
1879         .vidioc_enum_output                 = ivtv_enum_output,
1880         .vidioc_enumaudout                  = ivtv_enumaudout,
1881         .vidioc_cropcap                     = ivtv_cropcap,
1882         .vidioc_s_selection                 = ivtv_s_selection,
1883         .vidioc_g_selection                 = ivtv_g_selection,
1884         .vidioc_g_input                     = ivtv_g_input,
1885         .vidioc_s_input                     = ivtv_s_input,
1886         .vidioc_g_output                    = ivtv_g_output,
1887         .vidioc_s_output                    = ivtv_s_output,
1888         .vidioc_g_frequency                 = ivtv_g_frequency,
1889         .vidioc_s_frequency                 = ivtv_s_frequency,
1890         .vidioc_s_tuner                     = ivtv_s_tuner,
1891         .vidioc_g_tuner                     = ivtv_g_tuner,
1892         .vidioc_g_enc_index                 = ivtv_g_enc_index,
1893         .vidioc_g_fbuf                      = ivtv_g_fbuf,
1894         .vidioc_s_fbuf                      = ivtv_s_fbuf,
1895         .vidioc_g_std                       = ivtv_g_std,
1896         .vidioc_s_std                       = ivtv_s_std,
1897         .vidioc_overlay                     = ivtv_overlay,
1898         .vidioc_log_status                  = ivtv_log_status,
1899         .vidioc_enum_fmt_vid_cap            = ivtv_enum_fmt_vid_cap,
1900         .vidioc_encoder_cmd                 = ivtv_encoder_cmd,
1901         .vidioc_try_encoder_cmd             = ivtv_try_encoder_cmd,
1902         .vidioc_decoder_cmd                 = ivtv_decoder_cmd,
1903         .vidioc_try_decoder_cmd             = ivtv_try_decoder_cmd,
1904         .vidioc_enum_fmt_vid_out            = ivtv_enum_fmt_vid_out,
1905         .vidioc_g_fmt_vid_cap               = ivtv_g_fmt_vid_cap,
1906         .vidioc_g_fmt_vbi_cap               = ivtv_g_fmt_vbi_cap,
1907         .vidioc_g_fmt_sliced_vbi_cap        = ivtv_g_fmt_sliced_vbi_cap,
1908         .vidioc_g_fmt_vid_out               = ivtv_g_fmt_vid_out,
1909         .vidioc_g_fmt_vid_out_overlay       = ivtv_g_fmt_vid_out_overlay,
1910         .vidioc_g_fmt_sliced_vbi_out        = ivtv_g_fmt_sliced_vbi_out,
1911         .vidioc_s_fmt_vid_cap               = ivtv_s_fmt_vid_cap,
1912         .vidioc_s_fmt_vbi_cap               = ivtv_s_fmt_vbi_cap,
1913         .vidioc_s_fmt_sliced_vbi_cap        = ivtv_s_fmt_sliced_vbi_cap,
1914         .vidioc_s_fmt_vid_out               = ivtv_s_fmt_vid_out,
1915         .vidioc_s_fmt_vid_out_overlay       = ivtv_s_fmt_vid_out_overlay,
1916         .vidioc_s_fmt_sliced_vbi_out        = ivtv_s_fmt_sliced_vbi_out,
1917         .vidioc_try_fmt_vid_cap             = ivtv_try_fmt_vid_cap,
1918         .vidioc_try_fmt_vbi_cap             = ivtv_try_fmt_vbi_cap,
1919         .vidioc_try_fmt_sliced_vbi_cap      = ivtv_try_fmt_sliced_vbi_cap,
1920         .vidioc_try_fmt_vid_out             = ivtv_try_fmt_vid_out,
1921         .vidioc_try_fmt_vid_out_overlay     = ivtv_try_fmt_vid_out_overlay,
1922         .vidioc_try_fmt_sliced_vbi_out      = ivtv_try_fmt_sliced_vbi_out,
1923         .vidioc_g_sliced_vbi_cap            = ivtv_g_sliced_vbi_cap,
1924 #ifdef CONFIG_VIDEO_ADV_DEBUG
1925         .vidioc_g_register                  = ivtv_g_register,
1926         .vidioc_s_register                  = ivtv_s_register,
1927 #endif
1928         .vidioc_default                     = ivtv_default,
1929         .vidioc_subscribe_event             = ivtv_subscribe_event,
1930         .vidioc_unsubscribe_event           = v4l2_event_unsubscribe,
1931 };
1932
1933 void ivtv_set_funcs(struct video_device *vdev)
1934 {
1935         vdev->ioctl_ops = &ivtv_ioctl_ops;
1936 }