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