Merge tag 'v3.0-rc4' of /pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus
[pandora-kernel.git] / drivers / media / video / em28xx / em28xx-core.c
1 /*
2    em28xx-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
3
4    Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
5                       Markus Rechberger <mrechberger@gmail.com>
6                       Mauro Carvalho Chehab <mchehab@infradead.org>
7                       Sascha Sommer <saschasommer@freenet.de>
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  */
23
24 #include <linux/init.h>
25 #include <linux/list.h>
26 #include <linux/module.h>
27 #include <linux/slab.h>
28 #include <linux/usb.h>
29 #include <linux/vmalloc.h>
30 #include <media/v4l2-common.h>
31
32 #include "em28xx.h"
33
34 /* #define ENABLE_DEBUG_ISOC_FRAMES */
35
36 static unsigned int core_debug;
37 module_param(core_debug, int, 0644);
38 MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
39
40 #define em28xx_coredbg(fmt, arg...) do {\
41         if (core_debug) \
42                 printk(KERN_INFO "%s %s :"fmt, \
43                          dev->name, __func__ , ##arg); } while (0)
44
45 static unsigned int reg_debug;
46 module_param(reg_debug, int, 0644);
47 MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
48
49 #define em28xx_regdbg(fmt, arg...) do {\
50         if (reg_debug) \
51                 printk(KERN_INFO "%s %s :"fmt, \
52                          dev->name, __func__ , ##arg); } while (0)
53
54 static int alt;
55 module_param(alt, int, 0644);
56 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
57
58 static unsigned int disable_vbi;
59 module_param(disable_vbi, int, 0644);
60 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
61
62 /* FIXME */
63 #define em28xx_isocdbg(fmt, arg...) do {\
64         if (core_debug) \
65                 printk(KERN_INFO "%s %s :"fmt, \
66                          dev->name, __func__ , ##arg); } while (0)
67
68 /*
69  * em28xx_read_reg_req()
70  * reads data from the usb device specifying bRequest
71  */
72 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
73                                    char *buf, int len)
74 {
75         int ret;
76         int pipe = usb_rcvctrlpipe(dev->udev, 0);
77
78         if (dev->state & DEV_DISCONNECTED)
79                 return -ENODEV;
80
81         if (len > URB_MAX_CTRL_SIZE)
82                 return -EINVAL;
83
84         if (reg_debug) {
85                 printk(KERN_DEBUG "(pipe 0x%08x): "
86                         "IN:  %02x %02x %02x %02x %02x %02x %02x %02x ",
87                         pipe,
88                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
89                         req, 0, 0,
90                         reg & 0xff, reg >> 8,
91                         len & 0xff, len >> 8);
92         }
93
94         mutex_lock(&dev->ctrl_urb_lock);
95         ret = usb_control_msg(dev->udev, pipe, req,
96                               USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
97                               0x0000, reg, dev->urb_buf, len, HZ);
98         if (ret < 0) {
99                 if (reg_debug)
100                         printk(" failed!\n");
101                 mutex_unlock(&dev->ctrl_urb_lock);
102                 return ret;
103         }
104
105         if (len)
106                 memcpy(buf, dev->urb_buf, len);
107
108         mutex_unlock(&dev->ctrl_urb_lock);
109
110         if (reg_debug) {
111                 int byte;
112
113                 printk("<<<");
114                 for (byte = 0; byte < len; byte++)
115                         printk(" %02x", (unsigned char)buf[byte]);
116                 printk("\n");
117         }
118
119         return ret;
120 }
121
122 /*
123  * em28xx_read_reg_req()
124  * reads data from the usb device specifying bRequest
125  */
126 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
127 {
128         int ret;
129         u8 val;
130
131         ret = em28xx_read_reg_req_len(dev, req, reg, &val, 1);
132         if (ret < 0)
133                 return ret;
134
135         return val;
136 }
137
138 int em28xx_read_reg(struct em28xx *dev, u16 reg)
139 {
140         return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
141 }
142
143 /*
144  * em28xx_write_regs_req()
145  * sends data to the usb device, specifying bRequest
146  */
147 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
148                                  int len)
149 {
150         int ret;
151         int pipe = usb_sndctrlpipe(dev->udev, 0);
152
153         if (dev->state & DEV_DISCONNECTED)
154                 return -ENODEV;
155
156         if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
157                 return -EINVAL;
158
159         if (reg_debug) {
160                 int byte;
161
162                 printk(KERN_DEBUG "(pipe 0x%08x): "
163                         "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
164                         pipe,
165                         USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
166                         req, 0, 0,
167                         reg & 0xff, reg >> 8,
168                         len & 0xff, len >> 8);
169
170                 for (byte = 0; byte < len; byte++)
171                         printk(" %02x", (unsigned char)buf[byte]);
172                 printk("\n");
173         }
174
175         mutex_lock(&dev->ctrl_urb_lock);
176         memcpy(dev->urb_buf, buf, len);
177         ret = usb_control_msg(dev->udev, pipe, req,
178                               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
179                               0x0000, reg, dev->urb_buf, len, HZ);
180         mutex_unlock(&dev->ctrl_urb_lock);
181
182         if (dev->wait_after_write)
183                 msleep(dev->wait_after_write);
184
185         return ret;
186 }
187
188 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
189 {
190         int rc;
191
192         rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
193
194         /* Stores GPO/GPIO values at the cache, if changed
195            Only write values should be stored, since input on a GPIO
196            register will return the input bits.
197            Not sure what happens on reading GPO register.
198          */
199         if (rc >= 0) {
200                 if (reg == dev->reg_gpo_num)
201                         dev->reg_gpo = buf[0];
202                 else if (reg == dev->reg_gpio_num)
203                         dev->reg_gpio = buf[0];
204         }
205
206         return rc;
207 }
208
209 /* Write a single register */
210 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val)
211 {
212         return em28xx_write_regs(dev, reg, &val, 1);
213 }
214
215 /*
216  * em28xx_write_reg_bits()
217  * sets only some bits (specified by bitmask) of a register, by first reading
218  * the actual value
219  */
220 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
221                                  u8 bitmask)
222 {
223         int oldval;
224         u8 newval;
225
226         /* Uses cache for gpo/gpio registers */
227         if (reg == dev->reg_gpo_num)
228                 oldval = dev->reg_gpo;
229         else if (reg == dev->reg_gpio_num)
230                 oldval = dev->reg_gpio;
231         else
232                 oldval = em28xx_read_reg(dev, reg);
233
234         if (oldval < 0)
235                 return oldval;
236
237         newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
238
239         return em28xx_write_regs(dev, reg, &newval, 1);
240 }
241
242 /*
243  * em28xx_is_ac97_ready()
244  * Checks if ac97 is ready
245  */
246 static int em28xx_is_ac97_ready(struct em28xx *dev)
247 {
248         int ret, i;
249
250         /* Wait up to 50 ms for AC97 command to complete */
251         for (i = 0; i < 10; i++, msleep(5)) {
252                 ret = em28xx_read_reg(dev, EM28XX_R43_AC97BUSY);
253                 if (ret < 0)
254                         return ret;
255
256                 if (!(ret & 0x01))
257                         return 0;
258         }
259
260         em28xx_warn("AC97 command still being executed: not handled properly!\n");
261         return -EBUSY;
262 }
263
264 /*
265  * em28xx_read_ac97()
266  * write a 16 bit value to the specified AC97 address (LSB first!)
267  */
268 int em28xx_read_ac97(struct em28xx *dev, u8 reg)
269 {
270         int ret;
271         u8 addr = (reg & 0x7f) | 0x80;
272         u16 val;
273
274         ret = em28xx_is_ac97_ready(dev);
275         if (ret < 0)
276                 return ret;
277
278         ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
279         if (ret < 0)
280                 return ret;
281
282         ret = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R40_AC97LSB,
283                                            (u8 *)&val, sizeof(val));
284
285         if (ret < 0)
286                 return ret;
287         return le16_to_cpu(val);
288 }
289
290 /*
291  * em28xx_write_ac97()
292  * write a 16 bit value to the specified AC97 address (LSB first!)
293  */
294 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val)
295 {
296         int ret;
297         u8 addr = reg & 0x7f;
298         __le16 value;
299
300         value = cpu_to_le16(val);
301
302         ret = em28xx_is_ac97_ready(dev);
303         if (ret < 0)
304                 return ret;
305
306         ret = em28xx_write_regs(dev, EM28XX_R40_AC97LSB, (u8 *) &value, 2);
307         if (ret < 0)
308                 return ret;
309
310         ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
311         if (ret < 0)
312                 return ret;
313
314         return 0;
315 }
316
317 struct em28xx_vol_table {
318         enum em28xx_amux mux;
319         u8               reg;
320 };
321
322 static struct em28xx_vol_table inputs[] = {
323         { EM28XX_AMUX_VIDEO,    AC97_VIDEO_VOL   },
324         { EM28XX_AMUX_LINE_IN,  AC97_LINEIN_VOL  },
325         { EM28XX_AMUX_PHONE,    AC97_PHONE_VOL   },
326         { EM28XX_AMUX_MIC,      AC97_MIC_VOL     },
327         { EM28XX_AMUX_CD,       AC97_CD_VOL      },
328         { EM28XX_AMUX_AUX,      AC97_AUX_VOL     },
329         { EM28XX_AMUX_PCM_OUT,  AC97_PCM_OUT_VOL },
330 };
331
332 static int set_ac97_input(struct em28xx *dev)
333 {
334         int ret, i;
335         enum em28xx_amux amux = dev->ctl_ainput;
336
337         /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
338            em28xx should point to LINE IN, while AC97 should use VIDEO
339          */
340         if (amux == EM28XX_AMUX_VIDEO2)
341                 amux = EM28XX_AMUX_VIDEO;
342
343         /* Mute all entres but the one that were selected */
344         for (i = 0; i < ARRAY_SIZE(inputs); i++) {
345                 if (amux == inputs[i].mux)
346                         ret = em28xx_write_ac97(dev, inputs[i].reg, 0x0808);
347                 else
348                         ret = em28xx_write_ac97(dev, inputs[i].reg, 0x8000);
349
350                 if (ret < 0)
351                         em28xx_warn("couldn't setup AC97 register %d\n",
352                                      inputs[i].reg);
353         }
354         return 0;
355 }
356
357 static int em28xx_set_audio_source(struct em28xx *dev)
358 {
359         int ret;
360         u8 input;
361
362         if (dev->board.is_em2800) {
363                 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
364                         input = EM2800_AUDIO_SRC_TUNER;
365                 else
366                         input = EM2800_AUDIO_SRC_LINE;
367
368                 ret = em28xx_write_regs(dev, EM2800_R08_AUDIOSRC, &input, 1);
369                 if (ret < 0)
370                         return ret;
371         }
372
373         if (dev->board.has_msp34xx)
374                 input = EM28XX_AUDIO_SRC_TUNER;
375         else {
376                 switch (dev->ctl_ainput) {
377                 case EM28XX_AMUX_VIDEO:
378                         input = EM28XX_AUDIO_SRC_TUNER;
379                         break;
380                 default:
381                         input = EM28XX_AUDIO_SRC_LINE;
382                         break;
383                 }
384         }
385
386         if (dev->board.mute_gpio && dev->mute)
387                 em28xx_gpio_set(dev, dev->board.mute_gpio);
388         else
389                 em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
390
391         ret = em28xx_write_reg_bits(dev, EM28XX_R0E_AUDIOSRC, input, 0xc0);
392         if (ret < 0)
393                 return ret;
394         msleep(5);
395
396         switch (dev->audio_mode.ac97) {
397         case EM28XX_NO_AC97:
398                 break;
399         default:
400                 ret = set_ac97_input(dev);
401         }
402
403         return ret;
404 }
405
406 static const struct em28xx_vol_table outputs[] = {
407         { EM28XX_AOUT_MASTER, AC97_MASTER_VOL      },
408         { EM28XX_AOUT_LINE,   AC97_LINE_LEVEL_VOL  },
409         { EM28XX_AOUT_MONO,   AC97_MASTER_MONO_VOL },
410         { EM28XX_AOUT_LFE,    AC97_LFE_MASTER_VOL  },
411         { EM28XX_AOUT_SURR,   AC97_SURR_MASTER_VOL },
412 };
413
414 int em28xx_audio_analog_set(struct em28xx *dev)
415 {
416         int ret, i;
417         u8 xclk;
418
419         if (!dev->audio_mode.has_audio)
420                 return 0;
421
422         /* It is assumed that all devices use master volume for output.
423            It would be possible to use also line output.
424          */
425         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
426                 /* Mute all outputs */
427                 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
428                         ret = em28xx_write_ac97(dev, outputs[i].reg, 0x8000);
429                         if (ret < 0)
430                                 em28xx_warn("couldn't setup AC97 register %d\n",
431                                      outputs[i].reg);
432                 }
433         }
434
435         xclk = dev->board.xclk & 0x7f;
436         if (!dev->mute)
437                 xclk |= EM28XX_XCLK_AUDIO_UNMUTE;
438
439         ret = em28xx_write_reg(dev, EM28XX_R0F_XCLK, xclk);
440         if (ret < 0)
441                 return ret;
442         msleep(10);
443
444         /* Selects the proper audio input */
445         ret = em28xx_set_audio_source(dev);
446
447         /* Sets volume */
448         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
449                 int vol;
450
451                 em28xx_write_ac97(dev, AC97_POWER_DOWN_CTRL, 0x4200);
452                 em28xx_write_ac97(dev, AC97_EXT_AUD_CTRL, 0x0031);
453                 em28xx_write_ac97(dev, AC97_PCM_IN_SRATE, 0xbb80);
454
455                 /* LSB: left channel - both channels with the same level */
456                 vol = (0x1f - dev->volume) | ((0x1f - dev->volume) << 8);
457
458                 /* Mute device, if needed */
459                 if (dev->mute)
460                         vol |= 0x8000;
461
462                 /* Sets volume */
463                 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
464                         if (dev->ctl_aoutput & outputs[i].mux)
465                                 ret = em28xx_write_ac97(dev, outputs[i].reg,
466                                                         vol);
467                         if (ret < 0)
468                                 em28xx_warn("couldn't setup AC97 register %d\n",
469                                      outputs[i].reg);
470                 }
471
472                 if (dev->ctl_aoutput & EM28XX_AOUT_PCM_IN) {
473                         int sel = ac97_return_record_select(dev->ctl_aoutput);
474
475                         /* Use the same input for both left and right
476                            channels */
477                         sel |= (sel << 8);
478
479                         em28xx_write_ac97(dev, AC97_RECORD_SELECT, sel);
480                 }
481         }
482
483         return ret;
484 }
485 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
486
487 int em28xx_audio_setup(struct em28xx *dev)
488 {
489         int vid1, vid2, feat, cfg;
490         u32 vid;
491
492         if (dev->chip_id == CHIP_ID_EM2870 || dev->chip_id == CHIP_ID_EM2874
493                 || dev->chip_id == CHIP_ID_EM28174) {
494                 /* Digital only device - don't load any alsa module */
495                 dev->audio_mode.has_audio = 0;
496                 dev->has_audio_class = 0;
497                 dev->has_alsa_audio = 0;
498                 return 0;
499         }
500
501         /* If device doesn't support Usb Audio Class, use vendor class */
502         if (!dev->has_audio_class)
503                 dev->has_alsa_audio = 1;
504
505         dev->audio_mode.has_audio = 1;
506
507         /* See how this device is configured */
508         cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
509         em28xx_info("Config register raw data: 0x%02x\n", cfg);
510         if (cfg < 0) {
511                 /* Register read error?  */
512                 cfg = EM28XX_CHIPCFG_AC97; /* Be conservative */
513         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) == 0x00) {
514                 /* The device doesn't have vendor audio at all */
515                 dev->has_alsa_audio = 0;
516                 dev->audio_mode.has_audio = 0;
517                 return 0;
518         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
519                    EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
520                 em28xx_info("I2S Audio (3 sample rates)\n");
521                 dev->audio_mode.i2s_3rates = 1;
522         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
523                    EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
524                 em28xx_info("I2S Audio (5 sample rates)\n");
525                 dev->audio_mode.i2s_5rates = 1;
526         }
527
528         if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) != EM28XX_CHIPCFG_AC97) {
529                 /* Skip the code that does AC97 vendor detection */
530                 dev->audio_mode.ac97 = EM28XX_NO_AC97;
531                 goto init_audio;
532         }
533
534         dev->audio_mode.ac97 = EM28XX_AC97_OTHER;
535
536         vid1 = em28xx_read_ac97(dev, AC97_VENDOR_ID1);
537         if (vid1 < 0) {
538                 /*
539                  * Device likely doesn't support AC97
540                  * Note: (some) em2800 devices without eeprom reports 0x91 on
541                  *       CHIPCFG register, even not having an AC97 chip
542                  */
543                 em28xx_warn("AC97 chip type couldn't be determined\n");
544                 dev->audio_mode.ac97 = EM28XX_NO_AC97;
545                 dev->has_alsa_audio = 0;
546                 dev->audio_mode.has_audio = 0;
547                 goto init_audio;
548         }
549
550         vid2 = em28xx_read_ac97(dev, AC97_VENDOR_ID2);
551         if (vid2 < 0)
552                 goto init_audio;
553
554         vid = vid1 << 16 | vid2;
555
556         dev->audio_mode.ac97_vendor_id = vid;
557         em28xx_warn("AC97 vendor ID = 0x%08x\n", vid);
558
559         feat = em28xx_read_ac97(dev, AC97_RESET);
560         if (feat < 0)
561                 goto init_audio;
562
563         dev->audio_mode.ac97_feat = feat;
564         em28xx_warn("AC97 features = 0x%04x\n", feat);
565
566         /* Try to identify what audio processor we have */
567         if ((vid == 0xffffffff) && (feat == 0x6a90))
568                 dev->audio_mode.ac97 = EM28XX_AC97_EM202;
569         else if ((vid >> 8) == 0x838476)
570                 dev->audio_mode.ac97 = EM28XX_AC97_SIGMATEL;
571
572 init_audio:
573         /* Reports detected AC97 processor */
574         switch (dev->audio_mode.ac97) {
575         case EM28XX_NO_AC97:
576                 em28xx_info("No AC97 audio processor\n");
577                 break;
578         case EM28XX_AC97_EM202:
579                 em28xx_info("Empia 202 AC97 audio processor detected\n");
580                 break;
581         case EM28XX_AC97_SIGMATEL:
582                 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
583                             dev->audio_mode.ac97_vendor_id & 0xff);
584                 break;
585         case EM28XX_AC97_OTHER:
586                 em28xx_warn("Unknown AC97 audio processor detected!\n");
587                 break;
588         default:
589                 break;
590         }
591
592         return em28xx_audio_analog_set(dev);
593 }
594 EXPORT_SYMBOL_GPL(em28xx_audio_setup);
595
596 int em28xx_colorlevels_set_default(struct em28xx *dev)
597 {
598         em28xx_write_reg(dev, EM28XX_R20_YGAIN, 0x10);  /* contrast */
599         em28xx_write_reg(dev, EM28XX_R21_YOFFSET, 0x00);        /* brightness */
600         em28xx_write_reg(dev, EM28XX_R22_UVGAIN, 0x10); /* saturation */
601         em28xx_write_reg(dev, EM28XX_R23_UOFFSET, 0x00);
602         em28xx_write_reg(dev, EM28XX_R24_VOFFSET, 0x00);
603         em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, 0x00);
604
605         em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
606         em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
607         em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
608         em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
609         em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
610         em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
611         return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
612 }
613
614 int em28xx_capture_start(struct em28xx *dev, int start)
615 {
616         int rc;
617
618         if (dev->chip_id == CHIP_ID_EM2874 || dev->chip_id == CHIP_ID_EM28174) {
619                 /* The Transport Stream Enable Register moved in em2874 */
620                 if (!start) {
621                         rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
622                                                    0x00,
623                                                    EM2874_TS1_CAPTURE_ENABLE);
624                         return rc;
625                 }
626
627                 /* Enable Transport Stream */
628                 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
629                                            EM2874_TS1_CAPTURE_ENABLE,
630                                            EM2874_TS1_CAPTURE_ENABLE);
631                 return rc;
632         }
633
634
635         /* FIXME: which is the best order? */
636         /* video registers are sampled by VREF */
637         rc = em28xx_write_reg_bits(dev, EM28XX_R0C_USBSUSP,
638                                    start ? 0x10 : 0x00, 0x10);
639         if (rc < 0)
640                 return rc;
641
642         if (!start) {
643                 /* disable video capture */
644                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x27);
645                 return rc;
646         }
647
648         if (dev->board.is_webcam)
649                 rc = em28xx_write_reg(dev, 0x13, 0x0c);
650
651         /* enable video capture */
652         rc = em28xx_write_reg(dev, 0x48, 0x00);
653
654         if (dev->mode == EM28XX_ANALOG_MODE)
655                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
656         else
657                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
658
659         msleep(6);
660
661         return rc;
662 }
663
664 int em28xx_vbi_supported(struct em28xx *dev)
665 {
666         /* Modprobe option to manually disable */
667         if (disable_vbi == 1)
668                 return 0;
669
670         if (dev->chip_id == CHIP_ID_EM2860 ||
671             dev->chip_id == CHIP_ID_EM2883)
672                 return 1;
673
674         /* Version of em28xx that does not support VBI */
675         return 0;
676 }
677
678 int em28xx_set_outfmt(struct em28xx *dev)
679 {
680         int ret;
681         u8 vinctrl;
682
683         ret = em28xx_write_reg_bits(dev, EM28XX_R27_OUTFMT,
684                                 dev->format->reg | 0x20, 0xff);
685         if (ret < 0)
686                         return ret;
687
688         ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
689         if (ret < 0)
690                 return ret;
691
692         vinctrl = dev->vinctl;
693         if (em28xx_vbi_supported(dev) == 1) {
694                 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
695                 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
696                 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, dev->vbi_width/4);
697                 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, dev->vbi_height);
698                 if (dev->norm & V4L2_STD_525_60) {
699                         /* NTSC */
700                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
701                 } else if (dev->norm & V4L2_STD_625_50) {
702                         /* PAL */
703                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
704                 }
705         }
706
707         return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
708 }
709
710 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
711                                   u8 ymin, u8 ymax)
712 {
713         em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
714                         xmin, ymin, xmax, ymax);
715
716         em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
717         em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
718         em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
719         return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
720 }
721
722 static int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
723                                    u16 width, u16 height)
724 {
725         u8 cwidth = width;
726         u8 cheight = height;
727         u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01);
728
729         em28xx_coredbg("em28xx Area Set: (%d,%d)\n",
730                         (width | (overflow & 2) << 7),
731                         (height | (overflow & 1) << 8));
732
733         em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
734         em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
735         em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
736         em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
737         return em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
738 }
739
740 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
741 {
742         u8 mode;
743         /* the em2800 scaler only supports scaling down to 50% */
744
745         if (dev->board.is_em2800) {
746                 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
747         } else {
748                 u8 buf[2];
749
750                 buf[0] = h;
751                 buf[1] = h >> 8;
752                 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
753
754                 buf[0] = v;
755                 buf[1] = v >> 8;
756                 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
757                 /* it seems that both H and V scalers must be active
758                    to work correctly */
759                 mode = (h || v) ? 0x30 : 0x00;
760         }
761         return em28xx_write_reg_bits(dev, EM28XX_R26_COMPR, mode, 0x30);
762 }
763
764 /* FIXME: this only function read values from dev */
765 int em28xx_resolution_set(struct em28xx *dev)
766 {
767         int width, height;
768         width = norm_maxw(dev);
769         height = norm_maxh(dev);
770
771         /* Properly setup VBI */
772         dev->vbi_width = 720;
773         if (dev->norm & V4L2_STD_525_60)
774                 dev->vbi_height = 12;
775         else
776                 dev->vbi_height = 18;
777
778         if (!dev->progressive)
779                 height >>= norm_maxh(dev);
780
781         em28xx_set_outfmt(dev);
782
783
784         em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
785
786         /* If we don't set the start position to 2 in VBI mode, we end up
787            with line 20/21 being YUYV encoded instead of being in 8-bit
788            greyscale.  The core of the issue is that line 21 (and line 23 for
789            PAL WSS) are inside of active video region, and as a result they
790            get the pixelformatting associated with that area.  So by cropping
791            it out, we end up with the same format as the rest of the VBI
792            region */
793         if (em28xx_vbi_supported(dev) == 1)
794                 em28xx_capture_area_set(dev, 0, 2, width >> 2, height >> 2);
795         else
796                 em28xx_capture_area_set(dev, 0, 0, width >> 2, height >> 2);
797
798         return em28xx_scaler_set(dev, dev->hscale, dev->vscale);
799 }
800
801 int em28xx_set_alternate(struct em28xx *dev)
802 {
803         int errCode, prev_alt = dev->alt;
804         int i;
805         unsigned int min_pkt_size = dev->width * 2 + 4;
806
807         /*
808          * alt = 0 is used only for control messages, so, only values
809          * greater than 0 can be used for streaming.
810          */
811         if (alt && alt < dev->num_alt) {
812                 em28xx_coredbg("alternate forced to %d\n", dev->alt);
813                 dev->alt = alt;
814                 goto set_alt;
815         }
816
817         /* When image size is bigger than a certain value,
818            the frame size should be increased, otherwise, only
819            green screen will be received.
820          */
821         if (dev->width * 2 * dev->height > 720 * 240 * 2)
822                 min_pkt_size *= 2;
823
824         for (i = 0; i < dev->num_alt; i++) {
825                 /* stop when the selected alt setting offers enough bandwidth */
826                 if (dev->alt_max_pkt_size[i] >= min_pkt_size) {
827                         dev->alt = i;
828                         break;
829                 /* otherwise make sure that we end up with the maximum bandwidth
830                    because the min_pkt_size equation might be wrong...
831                 */
832                 } else if (dev->alt_max_pkt_size[i] >
833                            dev->alt_max_pkt_size[dev->alt])
834                         dev->alt = i;
835         }
836
837 set_alt:
838         if (dev->alt != prev_alt) {
839                 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
840                                 min_pkt_size, dev->alt);
841                 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt];
842                 em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
843                                dev->alt, dev->max_pkt_size);
844                 errCode = usb_set_interface(dev->udev, 0, dev->alt);
845                 if (errCode < 0) {
846                         em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
847                                         dev->alt, errCode);
848                         return errCode;
849                 }
850         }
851         return 0;
852 }
853
854 int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio)
855 {
856         int rc = 0;
857
858         if (!gpio)
859                 return rc;
860
861         if (dev->mode != EM28XX_SUSPEND) {
862                 em28xx_write_reg(dev, 0x48, 0x00);
863                 if (dev->mode == EM28XX_ANALOG_MODE)
864                         em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
865                 else
866                         em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
867                 msleep(6);
868         }
869
870         /* Send GPIO reset sequences specified at board entry */
871         while (gpio->sleep >= 0) {
872                 if (gpio->reg >= 0) {
873                         rc = em28xx_write_reg_bits(dev,
874                                                    gpio->reg,
875                                                    gpio->val,
876                                                    gpio->mask);
877                         if (rc < 0)
878                                 return rc;
879                 }
880                 if (gpio->sleep > 0)
881                         msleep(gpio->sleep);
882
883                 gpio++;
884         }
885         return rc;
886 }
887
888 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode)
889 {
890         if (dev->mode == set_mode)
891                 return 0;
892
893         if (set_mode == EM28XX_SUSPEND) {
894                 dev->mode = set_mode;
895
896                 /* FIXME: add suspend support for ac97 */
897
898                 return em28xx_gpio_set(dev, dev->board.suspend_gpio);
899         }
900
901         dev->mode = set_mode;
902
903         if (dev->mode == EM28XX_DIGITAL_MODE)
904                 return em28xx_gpio_set(dev, dev->board.dvb_gpio);
905         else
906                 return em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
907 }
908 EXPORT_SYMBOL_GPL(em28xx_set_mode);
909
910 /* ------------------------------------------------------------------
911         URB control
912    ------------------------------------------------------------------*/
913
914 /*
915  * IRQ callback, called by URB callback
916  */
917 static void em28xx_irq_callback(struct urb *urb)
918 {
919         struct em28xx *dev = urb->context;
920         int rc, i;
921
922         switch (urb->status) {
923         case 0:             /* success */
924         case -ETIMEDOUT:    /* NAK */
925                 break;
926         case -ECONNRESET:   /* kill */
927         case -ENOENT:
928         case -ESHUTDOWN:
929                 return;
930         default:            /* error */
931                 em28xx_isocdbg("urb completition error %d.\n", urb->status);
932                 break;
933         }
934
935         /* Copy data from URB */
936         spin_lock(&dev->slock);
937         rc = dev->isoc_ctl.isoc_copy(dev, urb);
938         spin_unlock(&dev->slock);
939
940         /* Reset urb buffers */
941         for (i = 0; i < urb->number_of_packets; i++) {
942                 urb->iso_frame_desc[i].status = 0;
943                 urb->iso_frame_desc[i].actual_length = 0;
944         }
945         urb->status = 0;
946
947         urb->status = usb_submit_urb(urb, GFP_ATOMIC);
948         if (urb->status) {
949                 em28xx_isocdbg("urb resubmit failed (error=%i)\n",
950                                urb->status);
951         }
952 }
953
954 /*
955  * Stop and Deallocate URBs
956  */
957 void em28xx_uninit_isoc(struct em28xx *dev)
958 {
959         struct urb *urb;
960         int i;
961
962         em28xx_isocdbg("em28xx: called em28xx_uninit_isoc\n");
963
964         dev->isoc_ctl.nfields = -1;
965         for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
966                 urb = dev->isoc_ctl.urb[i];
967                 if (urb) {
968                         if (!irqs_disabled())
969                                 usb_kill_urb(urb);
970                         else
971                                 usb_unlink_urb(urb);
972
973                         if (dev->isoc_ctl.transfer_buffer[i]) {
974                                 usb_free_coherent(dev->udev,
975                                         urb->transfer_buffer_length,
976                                         dev->isoc_ctl.transfer_buffer[i],
977                                         urb->transfer_dma);
978                         }
979                         usb_free_urb(urb);
980                         dev->isoc_ctl.urb[i] = NULL;
981                 }
982                 dev->isoc_ctl.transfer_buffer[i] = NULL;
983         }
984
985         kfree(dev->isoc_ctl.urb);
986         kfree(dev->isoc_ctl.transfer_buffer);
987
988         dev->isoc_ctl.urb = NULL;
989         dev->isoc_ctl.transfer_buffer = NULL;
990         dev->isoc_ctl.num_bufs = 0;
991
992         em28xx_capture_start(dev, 0);
993 }
994 EXPORT_SYMBOL_GPL(em28xx_uninit_isoc);
995
996 /*
997  * Allocate URBs and start IRQ
998  */
999 int em28xx_init_isoc(struct em28xx *dev, int max_packets,
1000                      int num_bufs, int max_pkt_size,
1001                      int (*isoc_copy) (struct em28xx *dev, struct urb *urb))
1002 {
1003         struct em28xx_dmaqueue *dma_q = &dev->vidq;
1004         struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq;
1005         int i;
1006         int sb_size, pipe;
1007         struct urb *urb;
1008         int j, k;
1009         int rc;
1010
1011         em28xx_isocdbg("em28xx: called em28xx_prepare_isoc\n");
1012
1013         /* De-allocates all pending stuff */
1014         em28xx_uninit_isoc(dev);
1015
1016         dev->isoc_ctl.isoc_copy = isoc_copy;
1017         dev->isoc_ctl.num_bufs = num_bufs;
1018
1019         dev->isoc_ctl.urb = kzalloc(sizeof(void *)*num_bufs,  GFP_KERNEL);
1020         if (!dev->isoc_ctl.urb) {
1021                 em28xx_errdev("cannot alloc memory for usb buffers\n");
1022                 return -ENOMEM;
1023         }
1024
1025         dev->isoc_ctl.transfer_buffer = kzalloc(sizeof(void *)*num_bufs,
1026                                               GFP_KERNEL);
1027         if (!dev->isoc_ctl.transfer_buffer) {
1028                 em28xx_errdev("cannot allocate memory for usb transfer\n");
1029                 kfree(dev->isoc_ctl.urb);
1030                 return -ENOMEM;
1031         }
1032
1033         dev->isoc_ctl.max_pkt_size = max_pkt_size;
1034         dev->isoc_ctl.vid_buf = NULL;
1035         dev->isoc_ctl.vbi_buf = NULL;
1036
1037         sb_size = max_packets * dev->isoc_ctl.max_pkt_size;
1038
1039         /* allocate urbs and transfer buffers */
1040         for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
1041                 urb = usb_alloc_urb(max_packets, GFP_KERNEL);
1042                 if (!urb) {
1043                         em28xx_err("cannot alloc isoc_ctl.urb %i\n", i);
1044                         em28xx_uninit_isoc(dev);
1045                         return -ENOMEM;
1046                 }
1047                 dev->isoc_ctl.urb[i] = urb;
1048
1049                 dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->udev,
1050                         sb_size, GFP_KERNEL, &urb->transfer_dma);
1051                 if (!dev->isoc_ctl.transfer_buffer[i]) {
1052                         em28xx_err("unable to allocate %i bytes for transfer"
1053                                         " buffer %i%s\n",
1054                                         sb_size, i,
1055                                         in_interrupt() ? " while in int" : "");
1056                         em28xx_uninit_isoc(dev);
1057                         return -ENOMEM;
1058                 }
1059                 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size);
1060
1061                 /* FIXME: this is a hack - should be
1062                         'desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK'
1063                         should also be using 'desc.bInterval'
1064                  */
1065                 pipe = usb_rcvisocpipe(dev->udev,
1066                         dev->mode == EM28XX_ANALOG_MODE ? 0x82 : 0x84);
1067
1068                 usb_fill_int_urb(urb, dev->udev, pipe,
1069                                  dev->isoc_ctl.transfer_buffer[i], sb_size,
1070                                  em28xx_irq_callback, dev, 1);
1071
1072                 urb->number_of_packets = max_packets;
1073                 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
1074
1075                 k = 0;
1076                 for (j = 0; j < max_packets; j++) {
1077                         urb->iso_frame_desc[j].offset = k;
1078                         urb->iso_frame_desc[j].length =
1079                                                 dev->isoc_ctl.max_pkt_size;
1080                         k += dev->isoc_ctl.max_pkt_size;
1081                 }
1082         }
1083
1084         init_waitqueue_head(&dma_q->wq);
1085         init_waitqueue_head(&vbi_dma_q->wq);
1086
1087         em28xx_capture_start(dev, 1);
1088
1089         /* submit urbs and enables IRQ */
1090         for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
1091                 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC);
1092                 if (rc) {
1093                         em28xx_err("submit of urb %i failed (error=%i)\n", i,
1094                                    rc);
1095                         em28xx_uninit_isoc(dev);
1096                         return rc;
1097                 }
1098         }
1099
1100         return 0;
1101 }
1102 EXPORT_SYMBOL_GPL(em28xx_init_isoc);
1103
1104 /* Determine the packet size for the DVB stream for the given device
1105    (underlying value programmed into the eeprom) */
1106 int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev)
1107 {
1108         unsigned int chip_cfg2;
1109         unsigned int packet_size = 564;
1110
1111         if (dev->chip_id == CHIP_ID_EM2874) {
1112                 /* FIXME - for now assume 564 like it was before, but the
1113                    em2874 code should be added to return the proper value... */
1114                 packet_size = 564;
1115         } else if (dev->chip_id == CHIP_ID_EM28174) {
1116                 /* FIXME same as em2874. 564 was enough for 22 Mbit DVB-T
1117                    but too much for 44 Mbit DVB-C. */
1118                 packet_size = 752;
1119         } else {
1120                 /* TS max packet size stored in bits 1-0 of R01 */
1121                 chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2);
1122                 switch (chip_cfg2 & EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK) {
1123                 case EM28XX_CHIPCFG2_TS_PACKETSIZE_188:
1124                         packet_size = 188;
1125                         break;
1126                 case EM28XX_CHIPCFG2_TS_PACKETSIZE_376:
1127                         packet_size = 376;
1128                         break;
1129                 case EM28XX_CHIPCFG2_TS_PACKETSIZE_564:
1130                         packet_size = 564;
1131                         break;
1132                 case EM28XX_CHIPCFG2_TS_PACKETSIZE_752:
1133                         packet_size = 752;
1134                         break;
1135                 }
1136         }
1137
1138         em28xx_coredbg("dvb max packet size=%d\n", packet_size);
1139         return packet_size;
1140 }
1141 EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize);
1142
1143 /*
1144  * em28xx_wake_i2c()
1145  * configure i2c attached devices
1146  */
1147 void em28xx_wake_i2c(struct em28xx *dev)
1148 {
1149         v4l2_device_call_all(&dev->v4l2_dev, 0, core,  reset, 0);
1150         v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1151                         INPUT(dev->ctl_input)->vmux, 0, 0);
1152         v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1153 }
1154
1155 /*
1156  * Device control list
1157  */
1158
1159 static LIST_HEAD(em28xx_devlist);
1160 static DEFINE_MUTEX(em28xx_devlist_mutex);
1161
1162 /*
1163  * em28xx_realease_resources()
1164  * unregisters the v4l2,i2c and usb devices
1165  * called when the device gets disconected or at module unload
1166 */
1167 void em28xx_remove_from_devlist(struct em28xx *dev)
1168 {
1169         mutex_lock(&em28xx_devlist_mutex);
1170         list_del(&dev->devlist);
1171         mutex_unlock(&em28xx_devlist_mutex);
1172 };
1173
1174 void em28xx_add_into_devlist(struct em28xx *dev)
1175 {
1176         mutex_lock(&em28xx_devlist_mutex);
1177         list_add_tail(&dev->devlist, &em28xx_devlist);
1178         mutex_unlock(&em28xx_devlist_mutex);
1179 };
1180
1181 /*
1182  * Extension interface
1183  */
1184
1185 static LIST_HEAD(em28xx_extension_devlist);
1186
1187 int em28xx_register_extension(struct em28xx_ops *ops)
1188 {
1189         struct em28xx *dev = NULL;
1190
1191         mutex_lock(&em28xx_devlist_mutex);
1192         list_add_tail(&ops->next, &em28xx_extension_devlist);
1193         list_for_each_entry(dev, &em28xx_devlist, devlist) {
1194                 ops->init(dev);
1195         }
1196         printk(KERN_INFO "Em28xx: Initialized (%s) extension\n", ops->name);
1197         mutex_unlock(&em28xx_devlist_mutex);
1198         return 0;
1199 }
1200 EXPORT_SYMBOL(em28xx_register_extension);
1201
1202 void em28xx_unregister_extension(struct em28xx_ops *ops)
1203 {
1204         struct em28xx *dev = NULL;
1205
1206         mutex_lock(&em28xx_devlist_mutex);
1207         list_for_each_entry(dev, &em28xx_devlist, devlist) {
1208                 ops->fini(dev);
1209         }
1210         printk(KERN_INFO "Em28xx: Removed (%s) extension\n", ops->name);
1211         list_del(&ops->next);
1212         mutex_unlock(&em28xx_devlist_mutex);
1213 }
1214 EXPORT_SYMBOL(em28xx_unregister_extension);
1215
1216 void em28xx_init_extension(struct em28xx *dev)
1217 {
1218         struct em28xx_ops *ops = NULL;
1219
1220         mutex_lock(&em28xx_devlist_mutex);
1221         if (!list_empty(&em28xx_extension_devlist)) {
1222                 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1223                         if (ops->init)
1224                                 ops->init(dev);
1225                 }
1226         }
1227         mutex_unlock(&em28xx_devlist_mutex);
1228 }
1229
1230 void em28xx_close_extension(struct em28xx *dev)
1231 {
1232         struct em28xx_ops *ops = NULL;
1233
1234         mutex_lock(&em28xx_devlist_mutex);
1235         if (!list_empty(&em28xx_extension_devlist)) {
1236                 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1237                         if (ops->fini)
1238                                 ops->fini(dev);
1239                 }
1240         }
1241         mutex_unlock(&em28xx_devlist_mutex);
1242 }