Input: wacom - fix touch parsing on newer Bamboos
[linux-btrfs-devel.git] / drivers / media / video / em28xx / em28xx-core.c
blobe33f145d867ae923772768dcc02cb08a5de54eec
1 /*
2 em28xx-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
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>
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.
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.
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.
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>
32 #include "em28xx.h"
34 /* #define ENABLE_DEBUG_ISOC_FRAMES */
36 static unsigned int core_debug;
37 module_param(core_debug, int, 0644);
38 MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
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)
45 static unsigned int reg_debug;
46 module_param(reg_debug, int, 0644);
47 MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
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)
54 static int alt;
55 module_param(alt, int, 0644);
56 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
58 static unsigned int disable_vbi;
59 module_param(disable_vbi, int, 0644);
60 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
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)
69 * em28xx_read_reg_req()
70 * reads data from the usb device specifying bRequest
72 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
73 char *buf, int len)
75 int ret;
76 int pipe = usb_rcvctrlpipe(dev->udev, 0);
78 if (dev->state & DEV_DISCONNECTED)
79 return -ENODEV;
81 if (len > URB_MAX_CTRL_SIZE)
82 return -EINVAL;
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);
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;
105 if (len)
106 memcpy(buf, dev->urb_buf, len);
108 mutex_unlock(&dev->ctrl_urb_lock);
110 if (reg_debug) {
111 int byte;
113 printk("<<<");
114 for (byte = 0; byte < len; byte++)
115 printk(" %02x", (unsigned char)buf[byte]);
116 printk("\n");
119 return ret;
123 * em28xx_read_reg_req()
124 * reads data from the usb device specifying bRequest
126 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
128 int ret;
129 u8 val;
131 ret = em28xx_read_reg_req_len(dev, req, reg, &val, 1);
132 if (ret < 0)
133 return ret;
135 return val;
138 int em28xx_read_reg(struct em28xx *dev, u16 reg)
140 return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
144 * em28xx_write_regs_req()
145 * sends data to the usb device, specifying bRequest
147 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
148 int len)
150 int ret;
151 int pipe = usb_sndctrlpipe(dev->udev, 0);
153 if (dev->state & DEV_DISCONNECTED)
154 return -ENODEV;
156 if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
157 return -EINVAL;
159 if (reg_debug) {
160 int byte;
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);
170 for (byte = 0; byte < len; byte++)
171 printk(" %02x", (unsigned char)buf[byte]);
172 printk("\n");
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);
182 if (dev->wait_after_write)
183 msleep(dev->wait_after_write);
185 return ret;
188 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
190 int rc;
192 rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
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.
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];
206 return rc;
209 /* Write a single register */
210 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val)
212 return em28xx_write_regs(dev, reg, &val, 1);
216 * em28xx_write_reg_bits()
217 * sets only some bits (specified by bitmask) of a register, by first reading
218 * the actual value
220 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
221 u8 bitmask)
223 int oldval;
224 u8 newval;
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);
234 if (oldval < 0)
235 return oldval;
237 newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
239 return em28xx_write_regs(dev, reg, &newval, 1);
243 * em28xx_is_ac97_ready()
244 * Checks if ac97 is ready
246 static int em28xx_is_ac97_ready(struct em28xx *dev)
248 int ret, i;
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;
256 if (!(ret & 0x01))
257 return 0;
260 em28xx_warn("AC97 command still being executed: not handled properly!\n");
261 return -EBUSY;
265 * em28xx_read_ac97()
266 * write a 16 bit value to the specified AC97 address (LSB first!)
268 int em28xx_read_ac97(struct em28xx *dev, u8 reg)
270 int ret;
271 u8 addr = (reg & 0x7f) | 0x80;
272 u16 val;
274 ret = em28xx_is_ac97_ready(dev);
275 if (ret < 0)
276 return ret;
278 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
279 if (ret < 0)
280 return ret;
282 ret = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R40_AC97LSB,
283 (u8 *)&val, sizeof(val));
285 if (ret < 0)
286 return ret;
287 return le16_to_cpu(val);
291 * em28xx_write_ac97()
292 * write a 16 bit value to the specified AC97 address (LSB first!)
294 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val)
296 int ret;
297 u8 addr = reg & 0x7f;
298 __le16 value;
300 value = cpu_to_le16(val);
302 ret = em28xx_is_ac97_ready(dev);
303 if (ret < 0)
304 return ret;
306 ret = em28xx_write_regs(dev, EM28XX_R40_AC97LSB, (u8 *) &value, 2);
307 if (ret < 0)
308 return ret;
310 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
311 if (ret < 0)
312 return ret;
314 return 0;
317 struct em28xx_vol_table {
318 enum em28xx_amux mux;
319 u8 reg;
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 },
332 static int set_ac97_input(struct em28xx *dev)
334 int ret, i;
335 enum em28xx_amux amux = dev->ctl_ainput;
337 /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
338 em28xx should point to LINE IN, while AC97 should use VIDEO
340 if (amux == EM28XX_AMUX_VIDEO2)
341 amux = EM28XX_AMUX_VIDEO;
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);
350 if (ret < 0)
351 em28xx_warn("couldn't setup AC97 register %d\n",
352 inputs[i].reg);
354 return 0;
357 static int em28xx_set_audio_source(struct em28xx *dev)
359 int ret;
360 u8 input;
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;
368 ret = em28xx_write_regs(dev, EM2800_R08_AUDIOSRC, &input, 1);
369 if (ret < 0)
370 return ret;
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;
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);
391 ret = em28xx_write_reg_bits(dev, EM28XX_R0E_AUDIOSRC, input, 0xc0);
392 if (ret < 0)
393 return ret;
394 msleep(5);
396 switch (dev->audio_mode.ac97) {
397 case EM28XX_NO_AC97:
398 break;
399 default:
400 ret = set_ac97_input(dev);
403 return ret;
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 },
414 int em28xx_audio_analog_set(struct em28xx *dev)
416 int ret, i;
417 u8 xclk;
419 if (!dev->audio_mode.has_audio)
420 return 0;
422 /* It is assumed that all devices use master volume for output.
423 It would be possible to use also line output.
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);
435 xclk = dev->board.xclk & 0x7f;
436 if (!dev->mute)
437 xclk |= EM28XX_XCLK_AUDIO_UNMUTE;
439 ret = em28xx_write_reg(dev, EM28XX_R0F_XCLK, xclk);
440 if (ret < 0)
441 return ret;
442 msleep(10);
444 /* Selects the proper audio input */
445 ret = em28xx_set_audio_source(dev);
447 /* Sets volume */
448 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
449 int vol;
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);
455 /* LSB: left channel - both channels with the same level */
456 vol = (0x1f - dev->volume) | ((0x1f - dev->volume) << 8);
458 /* Mute device, if needed */
459 if (dev->mute)
460 vol |= 0x8000;
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);
472 if (dev->ctl_aoutput & EM28XX_AOUT_PCM_IN) {
473 int sel = ac97_return_record_select(dev->ctl_aoutput);
475 /* Use the same input for both left and right
476 channels */
477 sel |= (sel << 8);
479 em28xx_write_ac97(dev, AC97_RECORD_SELECT, sel);
483 return ret;
485 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
487 int em28xx_audio_setup(struct em28xx *dev)
489 int vid1, vid2, feat, cfg;
490 u32 vid;
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;
501 /* If device doesn't support Usb Audio Class, use vendor class */
502 if (!dev->has_audio_class)
503 dev->has_alsa_audio = 1;
505 dev->audio_mode.has_audio = 1;
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;
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;
534 dev->audio_mode.ac97 = EM28XX_AC97_OTHER;
536 vid1 = em28xx_read_ac97(dev, AC97_VENDOR_ID1);
537 if (vid1 < 0) {
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
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;
550 vid2 = em28xx_read_ac97(dev, AC97_VENDOR_ID2);
551 if (vid2 < 0)
552 goto init_audio;
554 vid = vid1 << 16 | vid2;
556 dev->audio_mode.ac97_vendor_id = vid;
557 em28xx_warn("AC97 vendor ID = 0x%08x\n", vid);
559 feat = em28xx_read_ac97(dev, AC97_RESET);
560 if (feat < 0)
561 goto init_audio;
563 dev->audio_mode.ac97_feat = feat;
564 em28xx_warn("AC97 features = 0x%04x\n", feat);
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;
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;
592 return em28xx_audio_analog_set(dev);
594 EXPORT_SYMBOL_GPL(em28xx_audio_setup);
596 int em28xx_colorlevels_set_default(struct em28xx *dev)
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);
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);
614 int em28xx_capture_start(struct em28xx *dev, int start)
616 int rc;
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;
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;
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;
642 if (!start) {
643 /* disable video capture */
644 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x27);
645 return rc;
648 if (dev->board.is_webcam)
649 rc = em28xx_write_reg(dev, 0x13, 0x0c);
651 /* enable video capture */
652 rc = em28xx_write_reg(dev, 0x48, 0x00);
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);
659 msleep(6);
661 return rc;
664 int em28xx_vbi_supported(struct em28xx *dev)
666 /* Modprobe option to manually disable */
667 if (disable_vbi == 1)
668 return 0;
670 if (dev->chip_id == CHIP_ID_EM2860 ||
671 dev->chip_id == CHIP_ID_EM2883)
672 return 1;
674 /* Version of em28xx that does not support VBI */
675 return 0;
678 int em28xx_set_outfmt(struct em28xx *dev)
680 int ret;
681 u8 vinctrl;
683 ret = em28xx_write_reg_bits(dev, EM28XX_R27_OUTFMT,
684 dev->format->reg | 0x20, 0xff);
685 if (ret < 0)
686 return ret;
688 ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
689 if (ret < 0)
690 return ret;
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);
707 return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
710 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
711 u8 ymin, u8 ymax)
713 em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
714 xmin, ymin, xmax, ymax);
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);
722 static int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
723 u16 width, u16 height)
725 u8 cwidth = width;
726 u8 cheight = height;
727 u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01);
729 em28xx_coredbg("em28xx Area Set: (%d,%d)\n",
730 (width | (overflow & 2) << 7),
731 (height | (overflow & 1) << 8));
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);
740 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
742 u8 mode;
743 /* the em2800 scaler only supports scaling down to 50% */
745 if (dev->board.is_em2800) {
746 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
747 } else {
748 u8 buf[2];
750 buf[0] = h;
751 buf[1] = h >> 8;
752 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
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;
761 return em28xx_write_reg_bits(dev, EM28XX_R26_COMPR, mode, 0x30);
764 /* FIXME: this only function read values from dev */
765 int em28xx_resolution_set(struct em28xx *dev)
767 int width, height;
768 width = norm_maxw(dev);
769 height = norm_maxh(dev);
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;
778 if (!dev->progressive)
779 height >>= norm_maxh(dev);
781 em28xx_set_outfmt(dev);
784 em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
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);
798 return em28xx_scaler_set(dev, dev->hscale, dev->vscale);
801 int em28xx_set_alternate(struct em28xx *dev)
803 int errCode, prev_alt = dev->alt;
804 int i;
805 unsigned int min_pkt_size = dev->width * 2 + 4;
808 * alt = 0 is used only for control messages, so, only values
809 * greater than 0 can be used for streaming.
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;
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.
821 if (dev->width * 2 * dev->height > 720 * 240 * 2)
822 min_pkt_size *= 2;
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...
832 } else if (dev->alt_max_pkt_size[i] >
833 dev->alt_max_pkt_size[dev->alt])
834 dev->alt = i;
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;
851 return 0;
854 int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio)
856 int rc = 0;
858 if (!gpio)
859 return rc;
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);
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;
880 if (gpio->sleep > 0)
881 msleep(gpio->sleep);
883 gpio++;
885 return rc;
888 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode)
890 if (dev->mode == set_mode)
891 return 0;
893 if (set_mode == EM28XX_SUSPEND) {
894 dev->mode = set_mode;
896 /* FIXME: add suspend support for ac97 */
898 return em28xx_gpio_set(dev, dev->board.suspend_gpio);
901 dev->mode = set_mode;
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);
908 EXPORT_SYMBOL_GPL(em28xx_set_mode);
910 /* ------------------------------------------------------------------
911 URB control
912 ------------------------------------------------------------------*/
915 * IRQ callback, called by URB callback
917 static void em28xx_irq_callback(struct urb *urb)
919 struct em28xx *dev = urb->context;
920 int rc, i;
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;
935 /* Copy data from URB */
936 spin_lock(&dev->slock);
937 rc = dev->isoc_ctl.isoc_copy(dev, urb);
938 spin_unlock(&dev->slock);
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;
945 urb->status = 0;
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);
955 * Stop and Deallocate URBs
957 void em28xx_uninit_isoc(struct em28xx *dev)
959 struct urb *urb;
960 int i;
962 em28xx_isocdbg("em28xx: called em28xx_uninit_isoc\n");
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);
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);
979 usb_free_urb(urb);
980 dev->isoc_ctl.urb[i] = NULL;
982 dev->isoc_ctl.transfer_buffer[i] = NULL;
985 kfree(dev->isoc_ctl.urb);
986 kfree(dev->isoc_ctl.transfer_buffer);
988 dev->isoc_ctl.urb = NULL;
989 dev->isoc_ctl.transfer_buffer = NULL;
990 dev->isoc_ctl.num_bufs = 0;
992 em28xx_capture_start(dev, 0);
994 EXPORT_SYMBOL_GPL(em28xx_uninit_isoc);
997 * Allocate URBs and start IRQ
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))
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;
1011 em28xx_isocdbg("em28xx: called em28xx_prepare_isoc\n");
1013 /* De-allocates all pending stuff */
1014 em28xx_uninit_isoc(dev);
1016 dev->isoc_ctl.isoc_copy = isoc_copy;
1017 dev->isoc_ctl.num_bufs = num_bufs;
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;
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;
1033 dev->isoc_ctl.max_pkt_size = max_pkt_size;
1034 dev->isoc_ctl.vid_buf = NULL;
1035 dev->isoc_ctl.vbi_buf = NULL;
1037 sb_size = max_packets * dev->isoc_ctl.max_pkt_size;
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;
1047 dev->isoc_ctl.urb[i] = urb;
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;
1059 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size);
1061 /* FIXME: this is a hack - should be
1062 'desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK'
1063 should also be using 'desc.bInterval'
1065 pipe = usb_rcvisocpipe(dev->udev,
1066 dev->mode == EM28XX_ANALOG_MODE ? 0x82 : 0x84);
1068 usb_fill_int_urb(urb, dev->udev, pipe,
1069 dev->isoc_ctl.transfer_buffer[i], sb_size,
1070 em28xx_irq_callback, dev, 1);
1072 urb->number_of_packets = max_packets;
1073 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
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;
1084 init_waitqueue_head(&dma_q->wq);
1085 init_waitqueue_head(&vbi_dma_q->wq);
1087 em28xx_capture_start(dev, 1);
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;
1100 return 0;
1102 EXPORT_SYMBOL_GPL(em28xx_init_isoc);
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)
1108 unsigned int chip_cfg2;
1109 unsigned int packet_size = 564;
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;
1138 em28xx_coredbg("dvb max packet size=%d\n", packet_size);
1139 return packet_size;
1141 EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize);
1144 * em28xx_wake_i2c()
1145 * configure i2c attached devices
1147 void em28xx_wake_i2c(struct em28xx *dev)
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);
1156 * Device control list
1159 static LIST_HEAD(em28xx_devlist);
1160 static DEFINE_MUTEX(em28xx_devlist_mutex);
1163 * em28xx_realease_resources()
1164 * unregisters the v4l2,i2c and usb devices
1165 * called when the device gets disconected or at module unload
1167 void em28xx_remove_from_devlist(struct em28xx *dev)
1169 mutex_lock(&em28xx_devlist_mutex);
1170 list_del(&dev->devlist);
1171 mutex_unlock(&em28xx_devlist_mutex);
1174 void em28xx_add_into_devlist(struct em28xx *dev)
1176 mutex_lock(&em28xx_devlist_mutex);
1177 list_add_tail(&dev->devlist, &em28xx_devlist);
1178 mutex_unlock(&em28xx_devlist_mutex);
1182 * Extension interface
1185 static LIST_HEAD(em28xx_extension_devlist);
1187 int em28xx_register_extension(struct em28xx_ops *ops)
1189 struct em28xx *dev = NULL;
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);
1196 printk(KERN_INFO "Em28xx: Initialized (%s) extension\n", ops->name);
1197 mutex_unlock(&em28xx_devlist_mutex);
1198 return 0;
1200 EXPORT_SYMBOL(em28xx_register_extension);
1202 void em28xx_unregister_extension(struct em28xx_ops *ops)
1204 struct em28xx *dev = NULL;
1206 mutex_lock(&em28xx_devlist_mutex);
1207 list_for_each_entry(dev, &em28xx_devlist, devlist) {
1208 ops->fini(dev);
1210 printk(KERN_INFO "Em28xx: Removed (%s) extension\n", ops->name);
1211 list_del(&ops->next);
1212 mutex_unlock(&em28xx_devlist_mutex);
1214 EXPORT_SYMBOL(em28xx_unregister_extension);
1216 void em28xx_init_extension(struct em28xx *dev)
1218 struct em28xx_ops *ops = NULL;
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);
1227 mutex_unlock(&em28xx_devlist_mutex);
1230 void em28xx_close_extension(struct em28xx *dev)
1232 struct em28xx_ops *ops = NULL;
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);
1241 mutex_unlock(&em28xx_devlist_mutex);