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>
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 {\
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 {\
51 printk(KERN_INFO "%s %s :"fmt, \
52 dev->name, __func__ , ##arg); } while (0)
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 #define em28xx_isocdbg(fmt, arg...) do {\
64 printk(KERN_INFO "%s %s :"fmt, \
65 dev->name, __func__ , ##arg); } while (0)
68 * em28xx_read_reg_req()
69 * reads data from the usb device specifying bRequest
71 int em28xx_read_reg_req_len(struct em28xx
*dev
, u8 req
, u16 reg
,
75 int pipe
= usb_rcvctrlpipe(dev
->udev
, 0);
77 if (dev
->state
& DEV_DISCONNECTED
)
80 if (len
> URB_MAX_CTRL_SIZE
)
84 printk(KERN_DEBUG
"(pipe 0x%08x): "
85 "IN: %02x %02x %02x %02x %02x %02x %02x %02x ",
87 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
90 len
& 0xff, len
>> 8);
93 mutex_lock(&dev
->ctrl_urb_lock
);
94 ret
= usb_control_msg(dev
->udev
, pipe
, req
,
95 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
96 0x0000, reg
, dev
->urb_buf
, len
, HZ
);
100 mutex_unlock(&dev
->ctrl_urb_lock
);
105 memcpy(buf
, dev
->urb_buf
, len
);
107 mutex_unlock(&dev
->ctrl_urb_lock
);
113 for (byte
= 0; byte
< len
; byte
++)
114 printk(" %02x", (unsigned char)buf
[byte
]);
122 * em28xx_read_reg_req()
123 * reads data from the usb device specifying bRequest
125 int em28xx_read_reg_req(struct em28xx
*dev
, u8 req
, u16 reg
)
130 ret
= em28xx_read_reg_req_len(dev
, req
, reg
, &val
, 1);
137 int em28xx_read_reg(struct em28xx
*dev
, u16 reg
)
139 return em28xx_read_reg_req(dev
, USB_REQ_GET_STATUS
, reg
);
143 * em28xx_write_regs_req()
144 * sends data to the usb device, specifying bRequest
146 int em28xx_write_regs_req(struct em28xx
*dev
, u8 req
, u16 reg
, char *buf
,
150 int pipe
= usb_sndctrlpipe(dev
->udev
, 0);
152 if (dev
->state
& DEV_DISCONNECTED
)
155 if ((len
< 1) || (len
> URB_MAX_CTRL_SIZE
))
161 printk(KERN_DEBUG
"(pipe 0x%08x): "
162 "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
164 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
166 reg
& 0xff, reg
>> 8,
167 len
& 0xff, len
>> 8);
169 for (byte
= 0; byte
< len
; byte
++)
170 printk(" %02x", (unsigned char)buf
[byte
]);
174 mutex_lock(&dev
->ctrl_urb_lock
);
175 memcpy(dev
->urb_buf
, buf
, len
);
176 ret
= usb_control_msg(dev
->udev
, pipe
, req
,
177 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
178 0x0000, reg
, dev
->urb_buf
, len
, HZ
);
179 mutex_unlock(&dev
->ctrl_urb_lock
);
181 if (dev
->wait_after_write
)
182 msleep(dev
->wait_after_write
);
187 int em28xx_write_regs(struct em28xx
*dev
, u16 reg
, char *buf
, int len
)
191 rc
= em28xx_write_regs_req(dev
, USB_REQ_GET_STATUS
, reg
, buf
, len
);
193 /* Stores GPO/GPIO values at the cache, if changed
194 Only write values should be stored, since input on a GPIO
195 register will return the input bits.
196 Not sure what happens on reading GPO register.
199 if (reg
== dev
->reg_gpo_num
)
200 dev
->reg_gpo
= buf
[0];
201 else if (reg
== dev
->reg_gpio_num
)
202 dev
->reg_gpio
= buf
[0];
208 /* Write a single register */
209 int em28xx_write_reg(struct em28xx
*dev
, u16 reg
, u8 val
)
211 return em28xx_write_regs(dev
, reg
, &val
, 1);
215 * em28xx_write_reg_bits()
216 * sets only some bits (specified by bitmask) of a register, by first reading
219 int em28xx_write_reg_bits(struct em28xx
*dev
, u16 reg
, u8 val
,
225 /* Uses cache for gpo/gpio registers */
226 if (reg
== dev
->reg_gpo_num
)
227 oldval
= dev
->reg_gpo
;
228 else if (reg
== dev
->reg_gpio_num
)
229 oldval
= dev
->reg_gpio
;
231 oldval
= em28xx_read_reg(dev
, reg
);
236 newval
= (((u8
) oldval
) & ~bitmask
) | (val
& bitmask
);
238 return em28xx_write_regs(dev
, reg
, &newval
, 1);
242 * em28xx_is_ac97_ready()
243 * Checks if ac97 is ready
245 static int em28xx_is_ac97_ready(struct em28xx
*dev
)
249 /* Wait up to 50 ms for AC97 command to complete */
250 for (i
= 0; i
< 10; i
++, msleep(5)) {
251 ret
= em28xx_read_reg(dev
, EM28XX_R43_AC97BUSY
);
259 em28xx_warn("AC97 command still being executed: not handled properly!\n");
265 * write a 16 bit value to the specified AC97 address (LSB first!)
267 int em28xx_read_ac97(struct em28xx
*dev
, u8 reg
)
270 u8 addr
= (reg
& 0x7f) | 0x80;
273 ret
= em28xx_is_ac97_ready(dev
);
277 ret
= em28xx_write_regs(dev
, EM28XX_R42_AC97ADDR
, &addr
, 1);
281 ret
= dev
->em28xx_read_reg_req_len(dev
, 0, EM28XX_R40_AC97LSB
,
282 (u8
*)&val
, sizeof(val
));
286 return le16_to_cpu(val
);
290 * em28xx_write_ac97()
291 * write a 16 bit value to the specified AC97 address (LSB first!)
293 int em28xx_write_ac97(struct em28xx
*dev
, u8 reg
, u16 val
)
296 u8 addr
= reg
& 0x7f;
299 value
= cpu_to_le16(val
);
301 ret
= em28xx_is_ac97_ready(dev
);
305 ret
= em28xx_write_regs(dev
, EM28XX_R40_AC97LSB
, (u8
*) &value
, 2);
309 ret
= em28xx_write_regs(dev
, EM28XX_R42_AC97ADDR
, &addr
, 1);
316 struct em28xx_vol_table
{
317 enum em28xx_amux mux
;
321 static struct em28xx_vol_table inputs
[] = {
322 { EM28XX_AMUX_VIDEO
, AC97_VIDEO_VOL
},
323 { EM28XX_AMUX_LINE_IN
, AC97_LINEIN_VOL
},
324 { EM28XX_AMUX_PHONE
, AC97_PHONE_VOL
},
325 { EM28XX_AMUX_MIC
, AC97_MIC_VOL
},
326 { EM28XX_AMUX_CD
, AC97_CD_VOL
},
327 { EM28XX_AMUX_AUX
, AC97_AUX_VOL
},
328 { EM28XX_AMUX_PCM_OUT
, AC97_PCM_OUT_VOL
},
331 static int set_ac97_input(struct em28xx
*dev
)
334 enum em28xx_amux amux
= dev
->ctl_ainput
;
336 /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
337 em28xx should point to LINE IN, while AC97 should use VIDEO
339 if (amux
== EM28XX_AMUX_VIDEO2
)
340 amux
= EM28XX_AMUX_VIDEO
;
342 /* Mute all entres but the one that were selected */
343 for (i
= 0; i
< ARRAY_SIZE(inputs
); i
++) {
344 if (amux
== inputs
[i
].mux
)
345 ret
= em28xx_write_ac97(dev
, inputs
[i
].reg
, 0x0808);
347 ret
= em28xx_write_ac97(dev
, inputs
[i
].reg
, 0x8000);
350 em28xx_warn("couldn't setup AC97 register %d\n",
356 static int em28xx_set_audio_source(struct em28xx
*dev
)
361 if (dev
->board
.is_em2800
) {
362 if (dev
->ctl_ainput
== EM28XX_AMUX_VIDEO
)
363 input
= EM2800_AUDIO_SRC_TUNER
;
365 input
= EM2800_AUDIO_SRC_LINE
;
367 ret
= em28xx_write_regs(dev
, EM2800_R08_AUDIOSRC
, &input
, 1);
372 if (dev
->board
.has_msp34xx
)
373 input
= EM28XX_AUDIO_SRC_TUNER
;
375 switch (dev
->ctl_ainput
) {
376 case EM28XX_AMUX_VIDEO
:
377 input
= EM28XX_AUDIO_SRC_TUNER
;
380 input
= EM28XX_AUDIO_SRC_LINE
;
385 if (dev
->board
.mute_gpio
&& dev
->mute
)
386 em28xx_gpio_set(dev
, dev
->board
.mute_gpio
);
388 em28xx_gpio_set(dev
, INPUT(dev
->ctl_input
)->gpio
);
390 ret
= em28xx_write_reg_bits(dev
, EM28XX_R0E_AUDIOSRC
, input
, 0xc0);
395 switch (dev
->audio_mode
.ac97
) {
399 ret
= set_ac97_input(dev
);
405 static const struct em28xx_vol_table outputs
[] = {
406 { EM28XX_AOUT_MASTER
, AC97_MASTER_VOL
},
407 { EM28XX_AOUT_LINE
, AC97_LINE_LEVEL_VOL
},
408 { EM28XX_AOUT_MONO
, AC97_MASTER_MONO_VOL
},
409 { EM28XX_AOUT_LFE
, AC97_LFE_MASTER_VOL
},
410 { EM28XX_AOUT_SURR
, AC97_SURR_MASTER_VOL
},
413 int em28xx_audio_analog_set(struct em28xx
*dev
)
418 if (!dev
->audio_mode
.has_audio
)
421 /* It is assumed that all devices use master volume for output.
422 It would be possible to use also line output.
424 if (dev
->audio_mode
.ac97
!= EM28XX_NO_AC97
) {
425 /* Mute all outputs */
426 for (i
= 0; i
< ARRAY_SIZE(outputs
); i
++) {
427 ret
= em28xx_write_ac97(dev
, outputs
[i
].reg
, 0x8000);
429 em28xx_warn("couldn't setup AC97 register %d\n",
434 xclk
= dev
->board
.xclk
& 0x7f;
436 xclk
|= EM28XX_XCLK_AUDIO_UNMUTE
;
438 ret
= em28xx_write_reg(dev
, EM28XX_R0F_XCLK
, xclk
);
443 /* Selects the proper audio input */
444 ret
= em28xx_set_audio_source(dev
);
447 if (dev
->audio_mode
.ac97
!= EM28XX_NO_AC97
) {
450 em28xx_write_ac97(dev
, AC97_POWER_DOWN_CTRL
, 0x4200);
451 em28xx_write_ac97(dev
, AC97_EXT_AUD_CTRL
, 0x0031);
452 em28xx_write_ac97(dev
, AC97_PCM_IN_SRATE
, 0xbb80);
454 /* LSB: left channel - both channels with the same level */
455 vol
= (0x1f - dev
->volume
) | ((0x1f - dev
->volume
) << 8);
457 /* Mute device, if needed */
462 for (i
= 0; i
< ARRAY_SIZE(outputs
); i
++) {
463 if (dev
->ctl_aoutput
& outputs
[i
].mux
)
464 ret
= em28xx_write_ac97(dev
, outputs
[i
].reg
,
467 em28xx_warn("couldn't setup AC97 register %d\n",
471 if (dev
->ctl_aoutput
& EM28XX_AOUT_PCM_IN
) {
472 int sel
= ac97_return_record_select(dev
->ctl_aoutput
);
474 /* Use the same input for both left and right
478 em28xx_write_ac97(dev
, AC97_RECORD_SELECT
, sel
);
484 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set
);
486 int em28xx_audio_setup(struct em28xx
*dev
)
488 int vid1
, vid2
, feat
, cfg
;
491 if (dev
->chip_id
== CHIP_ID_EM2870
|| dev
->chip_id
== CHIP_ID_EM2874
) {
492 /* Digital only device - don't load any alsa module */
493 dev
->audio_mode
.has_audio
= 0;
494 dev
->has_audio_class
= 0;
495 dev
->has_alsa_audio
= 0;
499 /* If device doesn't support Usb Audio Class, use vendor class */
500 if (!dev
->has_audio_class
)
501 dev
->has_alsa_audio
= 1;
503 dev
->audio_mode
.has_audio
= 1;
505 /* See how this device is configured */
506 cfg
= em28xx_read_reg(dev
, EM28XX_R00_CHIPCFG
);
507 em28xx_info("Config register raw data: 0x%02x\n", cfg
);
509 /* Register read error? */
510 cfg
= EM28XX_CHIPCFG_AC97
; /* Be conservative */
511 } else if ((cfg
& EM28XX_CHIPCFG_AUDIOMASK
) == 0x00) {
512 /* The device doesn't have vendor audio at all */
513 dev
->has_alsa_audio
= 0;
514 dev
->audio_mode
.has_audio
= 0;
516 } else if ((cfg
& EM28XX_CHIPCFG_AUDIOMASK
) ==
517 EM28XX_CHIPCFG_I2S_3_SAMPRATES
) {
518 em28xx_info("I2S Audio (3 sample rates)\n");
519 dev
->audio_mode
.i2s_3rates
= 1;
520 } else if ((cfg
& EM28XX_CHIPCFG_AUDIOMASK
) ==
521 EM28XX_CHIPCFG_I2S_5_SAMPRATES
) {
522 em28xx_info("I2S Audio (5 sample rates)\n");
523 dev
->audio_mode
.i2s_5rates
= 1;
526 if ((cfg
& EM28XX_CHIPCFG_AUDIOMASK
) != EM28XX_CHIPCFG_AC97
) {
527 /* Skip the code that does AC97 vendor detection */
528 dev
->audio_mode
.ac97
= EM28XX_NO_AC97
;
532 dev
->audio_mode
.ac97
= EM28XX_AC97_OTHER
;
534 vid1
= em28xx_read_ac97(dev
, AC97_VENDOR_ID1
);
537 * Device likely doesn't support AC97
538 * Note: (some) em2800 devices without eeprom reports 0x91 on
539 * CHIPCFG register, even not having an AC97 chip
541 em28xx_warn("AC97 chip type couldn't be determined\n");
542 dev
->audio_mode
.ac97
= EM28XX_NO_AC97
;
543 dev
->has_alsa_audio
= 0;
544 dev
->audio_mode
.has_audio
= 0;
548 vid2
= em28xx_read_ac97(dev
, AC97_VENDOR_ID2
);
552 vid
= vid1
<< 16 | vid2
;
554 dev
->audio_mode
.ac97_vendor_id
= vid
;
555 em28xx_warn("AC97 vendor ID = 0x%08x\n", vid
);
557 feat
= em28xx_read_ac97(dev
, AC97_RESET
);
561 dev
->audio_mode
.ac97_feat
= feat
;
562 em28xx_warn("AC97 features = 0x%04x\n", feat
);
564 /* Try to identify what audio processor we have */
565 if ((vid
== 0xffffffff) && (feat
== 0x6a90))
566 dev
->audio_mode
.ac97
= EM28XX_AC97_EM202
;
567 else if ((vid
>> 8) == 0x838476)
568 dev
->audio_mode
.ac97
= EM28XX_AC97_SIGMATEL
;
571 /* Reports detected AC97 processor */
572 switch (dev
->audio_mode
.ac97
) {
574 em28xx_info("No AC97 audio processor\n");
576 case EM28XX_AC97_EM202
:
577 em28xx_info("Empia 202 AC97 audio processor detected\n");
579 case EM28XX_AC97_SIGMATEL
:
580 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
581 dev
->audio_mode
.ac97_vendor_id
& 0xff);
583 case EM28XX_AC97_OTHER
:
584 em28xx_warn("Unknown AC97 audio processor detected!\n");
590 return em28xx_audio_analog_set(dev
);
592 EXPORT_SYMBOL_GPL(em28xx_audio_setup
);
594 int em28xx_colorlevels_set_default(struct em28xx
*dev
)
596 em28xx_write_reg(dev
, EM28XX_R20_YGAIN
, 0x10); /* contrast */
597 em28xx_write_reg(dev
, EM28XX_R21_YOFFSET
, 0x00); /* brightness */
598 em28xx_write_reg(dev
, EM28XX_R22_UVGAIN
, 0x10); /* saturation */
599 em28xx_write_reg(dev
, EM28XX_R23_UOFFSET
, 0x00);
600 em28xx_write_reg(dev
, EM28XX_R24_VOFFSET
, 0x00);
601 em28xx_write_reg(dev
, EM28XX_R25_SHARPNESS
, 0x00);
603 em28xx_write_reg(dev
, EM28XX_R14_GAMMA
, 0x20);
604 em28xx_write_reg(dev
, EM28XX_R15_RGAIN
, 0x20);
605 em28xx_write_reg(dev
, EM28XX_R16_GGAIN
, 0x20);
606 em28xx_write_reg(dev
, EM28XX_R17_BGAIN
, 0x20);
607 em28xx_write_reg(dev
, EM28XX_R18_ROFFSET
, 0x00);
608 em28xx_write_reg(dev
, EM28XX_R19_GOFFSET
, 0x00);
609 return em28xx_write_reg(dev
, EM28XX_R1A_BOFFSET
, 0x00);
612 int em28xx_capture_start(struct em28xx
*dev
, int start
)
616 if (dev
->chip_id
== CHIP_ID_EM2874
) {
617 /* The Transport Stream Enable Register moved in em2874 */
619 rc
= em28xx_write_reg_bits(dev
, EM2874_R5F_TS_ENABLE
,
621 EM2874_TS1_CAPTURE_ENABLE
);
625 /* Enable Transport Stream */
626 rc
= em28xx_write_reg_bits(dev
, EM2874_R5F_TS_ENABLE
,
627 EM2874_TS1_CAPTURE_ENABLE
,
628 EM2874_TS1_CAPTURE_ENABLE
);
633 /* video registers are sampled by VREF */
634 rc
= em28xx_write_reg_bits(dev
, EM28XX_R0C_USBSUSP
,
635 start
? 0x10 : 0x00, 0x10);
640 /* disable video capture */
641 rc
= em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x27);
645 if (dev
->board
.is_webcam
)
646 rc
= em28xx_write_reg(dev
, 0x13, 0x0c);
648 /* enable video capture */
649 rc
= em28xx_write_reg(dev
, 0x48, 0x00);
651 if (dev
->mode
== EM28XX_ANALOG_MODE
)
652 rc
= em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x67);
654 rc
= em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x37);
661 int em28xx_vbi_supported(struct em28xx
*dev
)
663 /* Modprobe option to manually disable */
664 if (disable_vbi
== 1)
667 if (dev
->chip_id
== CHIP_ID_EM2860
||
668 dev
->chip_id
== CHIP_ID_EM2883
)
671 /* Version of em28xx that does not support VBI */
675 int em28xx_set_outfmt(struct em28xx
*dev
)
680 ret
= em28xx_write_reg_bits(dev
, EM28XX_R27_OUTFMT
,
681 dev
->format
->reg
| 0x20, 0xff);
685 ret
= em28xx_write_reg(dev
, EM28XX_R10_VINMODE
, dev
->vinmode
);
689 vinctrl
= dev
->vinctl
;
690 if (em28xx_vbi_supported(dev
) == 1) {
691 vinctrl
|= EM28XX_VINCTRL_VBI_RAW
;
692 em28xx_write_reg(dev
, EM28XX_R34_VBI_START_H
, 0x00);
693 em28xx_write_reg(dev
, EM28XX_R36_VBI_WIDTH
, dev
->vbi_width
/4);
694 em28xx_write_reg(dev
, EM28XX_R37_VBI_HEIGHT
, dev
->vbi_height
);
695 if (dev
->norm
& V4L2_STD_525_60
) {
697 em28xx_write_reg(dev
, EM28XX_R35_VBI_START_V
, 0x09);
698 } else if (dev
->norm
& V4L2_STD_625_50
) {
700 em28xx_write_reg(dev
, EM28XX_R35_VBI_START_V
, 0x07);
704 return em28xx_write_reg(dev
, EM28XX_R11_VINCTRL
, vinctrl
);
707 static int em28xx_accumulator_set(struct em28xx
*dev
, u8 xmin
, u8 xmax
,
710 em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
711 xmin
, ymin
, xmax
, ymax
);
713 em28xx_write_regs(dev
, EM28XX_R28_XMIN
, &xmin
, 1);
714 em28xx_write_regs(dev
, EM28XX_R29_XMAX
, &xmax
, 1);
715 em28xx_write_regs(dev
, EM28XX_R2A_YMIN
, &ymin
, 1);
716 return em28xx_write_regs(dev
, EM28XX_R2B_YMAX
, &ymax
, 1);
719 static int em28xx_capture_area_set(struct em28xx
*dev
, u8 hstart
, u8 vstart
,
720 u16 width
, u16 height
)
724 u8 overflow
= (height
>> 7 & 0x02) | (width
>> 8 & 0x01);
726 em28xx_coredbg("em28xx Area Set: (%d,%d)\n",
727 (width
| (overflow
& 2) << 7),
728 (height
| (overflow
& 1) << 8));
730 em28xx_write_regs(dev
, EM28XX_R1C_HSTART
, &hstart
, 1);
731 em28xx_write_regs(dev
, EM28XX_R1D_VSTART
, &vstart
, 1);
732 em28xx_write_regs(dev
, EM28XX_R1E_CWIDTH
, &cwidth
, 1);
733 em28xx_write_regs(dev
, EM28XX_R1F_CHEIGHT
, &cheight
, 1);
734 return em28xx_write_regs(dev
, EM28XX_R1B_OFLOW
, &overflow
, 1);
737 static int em28xx_scaler_set(struct em28xx
*dev
, u16 h
, u16 v
)
740 /* the em2800 scaler only supports scaling down to 50% */
742 if (dev
->board
.is_em2800
) {
743 mode
= (v
? 0x20 : 0x00) | (h
? 0x10 : 0x00);
749 em28xx_write_regs(dev
, EM28XX_R30_HSCALELOW
, (char *)buf
, 2);
753 em28xx_write_regs(dev
, EM28XX_R32_VSCALELOW
, (char *)buf
, 2);
754 /* it seems that both H and V scalers must be active
756 mode
= (h
|| v
) ? 0x30 : 0x00;
758 return em28xx_write_reg_bits(dev
, EM28XX_R26_COMPR
, mode
, 0x30);
761 int em28xx_resolution_set(struct em28xx
*dev
)
764 width
= norm_maxw(dev
);
765 height
= norm_maxh(dev
);
767 /* Properly setup VBI */
768 dev
->vbi_width
= 720;
769 if (dev
->norm
& V4L2_STD_525_60
)
770 dev
->vbi_height
= 12;
772 dev
->vbi_height
= 18;
774 if (!dev
->progressive
)
775 height
>>= norm_maxh(dev
);
777 em28xx_set_outfmt(dev
);
780 em28xx_accumulator_set(dev
, 1, (width
- 4) >> 2, 1, (height
- 4) >> 2);
782 /* If we don't set the start position to 2 in VBI mode, we end up
783 with line 20/21 being YUYV encoded instead of being in 8-bit
784 greyscale. The core of the issue is that line 21 (and line 23 for
785 PAL WSS) are inside of active video region, and as a result they
786 get the pixelformatting associated with that area. So by cropping
787 it out, we end up with the same format as the rest of the VBI
789 if (em28xx_vbi_supported(dev
) == 1)
790 em28xx_capture_area_set(dev
, 0, 2, width
>> 2, height
>> 2);
792 em28xx_capture_area_set(dev
, 0, 0, width
>> 2, height
>> 2);
794 return em28xx_scaler_set(dev
, dev
->hscale
, dev
->vscale
);
797 int em28xx_set_alternate(struct em28xx
*dev
)
799 int errCode
, prev_alt
= dev
->alt
;
801 unsigned int min_pkt_size
= dev
->width
* 2 + 4;
804 * alt = 0 is used only for control messages, so, only values
805 * greater than 0 can be used for streaming.
807 if (alt
&& alt
< dev
->num_alt
) {
808 em28xx_coredbg("alternate forced to %d\n", dev
->alt
);
813 /* When image size is bigger than a certain value,
814 the frame size should be increased, otherwise, only
815 green screen will be received.
817 if (dev
->width
* 2 * dev
->height
> 720 * 240 * 2)
820 for (i
= 0; i
< dev
->num_alt
; i
++) {
821 /* stop when the selected alt setting offers enough bandwidth */
822 if (dev
->alt_max_pkt_size
[i
] >= min_pkt_size
) {
825 /* otherwise make sure that we end up with the maximum bandwidth
826 because the min_pkt_size equation might be wrong...
828 } else if (dev
->alt_max_pkt_size
[i
] >
829 dev
->alt_max_pkt_size
[dev
->alt
])
834 if (dev
->alt
!= prev_alt
) {
835 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
836 min_pkt_size
, dev
->alt
);
837 dev
->max_pkt_size
= dev
->alt_max_pkt_size
[dev
->alt
];
838 em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
839 dev
->alt
, dev
->max_pkt_size
);
840 errCode
= usb_set_interface(dev
->udev
, 0, dev
->alt
);
842 em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
850 int em28xx_gpio_set(struct em28xx
*dev
, struct em28xx_reg_seq
*gpio
)
857 if (dev
->mode
!= EM28XX_SUSPEND
) {
858 em28xx_write_reg(dev
, 0x48, 0x00);
859 if (dev
->mode
== EM28XX_ANALOG_MODE
)
860 em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x67);
862 em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x37);
866 /* Send GPIO reset sequences specified at board entry */
867 while (gpio
->sleep
>= 0) {
868 if (gpio
->reg
>= 0) {
869 rc
= em28xx_write_reg_bits(dev
,
884 int em28xx_set_mode(struct em28xx
*dev
, enum em28xx_mode set_mode
)
886 if (dev
->mode
== set_mode
)
889 if (set_mode
== EM28XX_SUSPEND
) {
890 dev
->mode
= set_mode
;
893 return em28xx_gpio_set(dev
, dev
->board
.suspend_gpio
);
896 dev
->mode
= set_mode
;
898 if (dev
->mode
== EM28XX_DIGITAL_MODE
)
899 return em28xx_gpio_set(dev
, dev
->board
.dvb_gpio
);
901 return em28xx_gpio_set(dev
, INPUT(dev
->ctl_input
)->gpio
);
903 EXPORT_SYMBOL_GPL(em28xx_set_mode
);
905 /* ------------------------------------------------------------------
907 ------------------------------------------------------------------*/
910 * IRQ callback, called by URB callback
912 static void em28xx_irq_callback(struct urb
*urb
)
914 struct em28xx
*dev
= urb
->context
;
917 switch (urb
->status
) {
918 case 0: /* success */
919 case -ETIMEDOUT
: /* NAK */
921 case -ECONNRESET
: /* kill */
926 em28xx_isocdbg("urb completition error %d.\n", urb
->status
);
930 /* Copy data from URB */
931 spin_lock(&dev
->slock
);
932 rc
= dev
->isoc_ctl
.isoc_copy(dev
, urb
);
933 spin_unlock(&dev
->slock
);
935 /* Reset urb buffers */
936 for (i
= 0; i
< urb
->number_of_packets
; i
++) {
937 urb
->iso_frame_desc
[i
].status
= 0;
938 urb
->iso_frame_desc
[i
].actual_length
= 0;
942 urb
->status
= usb_submit_urb(urb
, GFP_ATOMIC
);
944 em28xx_isocdbg("urb resubmit failed (error=%i)\n",
950 * Stop and Deallocate URBs
952 void em28xx_uninit_isoc(struct em28xx
*dev
)
957 em28xx_isocdbg("em28xx: called em28xx_uninit_isoc\n");
959 dev
->isoc_ctl
.nfields
= -1;
960 for (i
= 0; i
< dev
->isoc_ctl
.num_bufs
; i
++) {
961 urb
= dev
->isoc_ctl
.urb
[i
];
963 if (!irqs_disabled())
968 if (dev
->isoc_ctl
.transfer_buffer
[i
]) {
969 usb_free_coherent(dev
->udev
,
970 urb
->transfer_buffer_length
,
971 dev
->isoc_ctl
.transfer_buffer
[i
],
975 dev
->isoc_ctl
.urb
[i
] = NULL
;
977 dev
->isoc_ctl
.transfer_buffer
[i
] = NULL
;
980 kfree(dev
->isoc_ctl
.urb
);
981 kfree(dev
->isoc_ctl
.transfer_buffer
);
983 dev
->isoc_ctl
.urb
= NULL
;
984 dev
->isoc_ctl
.transfer_buffer
= NULL
;
985 dev
->isoc_ctl
.num_bufs
= 0;
987 em28xx_capture_start(dev
, 0);
989 EXPORT_SYMBOL_GPL(em28xx_uninit_isoc
);
992 * Allocate URBs and start IRQ
994 int em28xx_init_isoc(struct em28xx
*dev
, int max_packets
,
995 int num_bufs
, int max_pkt_size
,
996 int (*isoc_copy
) (struct em28xx
*dev
, struct urb
*urb
))
998 struct em28xx_dmaqueue
*dma_q
= &dev
->vidq
;
999 struct em28xx_dmaqueue
*vbi_dma_q
= &dev
->vbiq
;
1006 em28xx_isocdbg("em28xx: called em28xx_prepare_isoc\n");
1008 /* De-allocates all pending stuff */
1009 em28xx_uninit_isoc(dev
);
1011 dev
->isoc_ctl
.isoc_copy
= isoc_copy
;
1012 dev
->isoc_ctl
.num_bufs
= num_bufs
;
1014 dev
->isoc_ctl
.urb
= kzalloc(sizeof(void *)*num_bufs
, GFP_KERNEL
);
1015 if (!dev
->isoc_ctl
.urb
) {
1016 em28xx_errdev("cannot alloc memory for usb buffers\n");
1020 dev
->isoc_ctl
.transfer_buffer
= kzalloc(sizeof(void *)*num_bufs
,
1022 if (!dev
->isoc_ctl
.transfer_buffer
) {
1023 em28xx_errdev("cannot allocate memory for usb transfer\n");
1024 kfree(dev
->isoc_ctl
.urb
);
1028 dev
->isoc_ctl
.max_pkt_size
= max_pkt_size
;
1029 dev
->isoc_ctl
.vid_buf
= NULL
;
1030 dev
->isoc_ctl
.vbi_buf
= NULL
;
1032 sb_size
= max_packets
* dev
->isoc_ctl
.max_pkt_size
;
1034 /* allocate urbs and transfer buffers */
1035 for (i
= 0; i
< dev
->isoc_ctl
.num_bufs
; i
++) {
1036 urb
= usb_alloc_urb(max_packets
, GFP_KERNEL
);
1038 em28xx_err("cannot alloc isoc_ctl.urb %i\n", i
);
1039 em28xx_uninit_isoc(dev
);
1042 dev
->isoc_ctl
.urb
[i
] = urb
;
1044 dev
->isoc_ctl
.transfer_buffer
[i
] = usb_alloc_coherent(dev
->udev
,
1045 sb_size
, GFP_KERNEL
, &urb
->transfer_dma
);
1046 if (!dev
->isoc_ctl
.transfer_buffer
[i
]) {
1047 em28xx_err("unable to allocate %i bytes for transfer"
1050 in_interrupt() ? " while in int" : "");
1051 em28xx_uninit_isoc(dev
);
1054 memset(dev
->isoc_ctl
.transfer_buffer
[i
], 0, sb_size
);
1056 pipe
= usb_rcvisocpipe(dev
->udev
,
1057 dev
->mode
== EM28XX_ANALOG_MODE
? 0x82 : 0x84);
1059 usb_fill_int_urb(urb
, dev
->udev
, pipe
,
1060 dev
->isoc_ctl
.transfer_buffer
[i
], sb_size
,
1061 em28xx_irq_callback
, dev
, 1);
1063 urb
->number_of_packets
= max_packets
;
1064 urb
->transfer_flags
= URB_ISO_ASAP
| URB_NO_TRANSFER_DMA_MAP
;
1067 for (j
= 0; j
< max_packets
; j
++) {
1068 urb
->iso_frame_desc
[j
].offset
= k
;
1069 urb
->iso_frame_desc
[j
].length
=
1070 dev
->isoc_ctl
.max_pkt_size
;
1071 k
+= dev
->isoc_ctl
.max_pkt_size
;
1075 init_waitqueue_head(&dma_q
->wq
);
1076 init_waitqueue_head(&vbi_dma_q
->wq
);
1078 em28xx_capture_start(dev
, 1);
1080 /* submit urbs and enables IRQ */
1081 for (i
= 0; i
< dev
->isoc_ctl
.num_bufs
; i
++) {
1082 rc
= usb_submit_urb(dev
->isoc_ctl
.urb
[i
], GFP_ATOMIC
);
1084 em28xx_err("submit of urb %i failed (error=%i)\n", i
,
1086 em28xx_uninit_isoc(dev
);
1093 EXPORT_SYMBOL_GPL(em28xx_init_isoc
);
1095 /* Determine the packet size for the DVB stream for the given device
1096 (underlying value programmed into the eeprom) */
1097 int em28xx_isoc_dvb_max_packetsize(struct em28xx
*dev
)
1099 unsigned int chip_cfg2
;
1100 unsigned int packet_size
= 564;
1102 if (dev
->chip_id
== CHIP_ID_EM2874
) {
1105 /* TS max packet size stored in bits 1-0 of R01 */
1106 chip_cfg2
= em28xx_read_reg(dev
, EM28XX_R01_CHIPCFG2
);
1107 switch (chip_cfg2
& EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK
) {
1108 case EM28XX_CHIPCFG2_TS_PACKETSIZE_188
:
1111 case EM28XX_CHIPCFG2_TS_PACKETSIZE_376
:
1114 case EM28XX_CHIPCFG2_TS_PACKETSIZE_564
:
1117 case EM28XX_CHIPCFG2_TS_PACKETSIZE_752
:
1123 em28xx_coredbg("dvb max packet size=%d\n", packet_size
);
1126 EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize
);
1130 * configure i2c attached devices
1132 void em28xx_wake_i2c(struct em28xx
*dev
)
1134 v4l2_device_call_all(&dev
->v4l2_dev
, 0, core
, reset
, 0);
1135 v4l2_device_call_all(&dev
->v4l2_dev
, 0, video
, s_routing
,
1136 INPUT(dev
->ctl_input
)->vmux
, 0, 0);
1137 v4l2_device_call_all(&dev
->v4l2_dev
, 0, video
, s_stream
, 0);
1141 * Device control list
1144 static LIST_HEAD(em28xx_devlist
);
1145 static DEFINE_MUTEX(em28xx_devlist_mutex
);
1148 * em28xx_realease_resources()
1149 * unregisters the v4l2,i2c and usb devices
1150 * called when the device gets disconected or at module unload
1152 void em28xx_remove_from_devlist(struct em28xx
*dev
)
1154 mutex_lock(&em28xx_devlist_mutex
);
1155 list_del(&dev
->devlist
);
1156 mutex_unlock(&em28xx_devlist_mutex
);
1159 void em28xx_add_into_devlist(struct em28xx
*dev
)
1161 mutex_lock(&em28xx_devlist_mutex
);
1162 list_add_tail(&dev
->devlist
, &em28xx_devlist
);
1163 mutex_unlock(&em28xx_devlist_mutex
);
1167 * Extension interface
1170 static LIST_HEAD(em28xx_extension_devlist
);
1172 int em28xx_register_extension(struct em28xx_ops
*ops
)
1174 struct em28xx
*dev
= NULL
;
1176 mutex_lock(&em28xx_devlist_mutex
);
1177 list_add_tail(&ops
->next
, &em28xx_extension_devlist
);
1178 list_for_each_entry(dev
, &em28xx_devlist
, devlist
) {
1181 printk(KERN_INFO
"Em28xx: Initialized (%s) extension\n", ops
->name
);
1182 mutex_unlock(&em28xx_devlist_mutex
);
1185 EXPORT_SYMBOL(em28xx_register_extension
);
1187 void em28xx_unregister_extension(struct em28xx_ops
*ops
)
1189 struct em28xx
*dev
= NULL
;
1191 mutex_lock(&em28xx_devlist_mutex
);
1192 list_for_each_entry(dev
, &em28xx_devlist
, devlist
) {
1195 printk(KERN_INFO
"Em28xx: Removed (%s) extension\n", ops
->name
);
1196 list_del(&ops
->next
);
1197 mutex_unlock(&em28xx_devlist_mutex
);
1199 EXPORT_SYMBOL(em28xx_unregister_extension
);
1201 void em28xx_init_extension(struct em28xx
*dev
)
1203 struct em28xx_ops
*ops
= NULL
;
1205 mutex_lock(&em28xx_devlist_mutex
);
1206 if (!list_empty(&em28xx_extension_devlist
)) {
1207 list_for_each_entry(ops
, &em28xx_extension_devlist
, next
) {
1212 mutex_unlock(&em28xx_devlist_mutex
);
1215 void em28xx_close_extension(struct em28xx
*dev
)
1217 struct em28xx_ops
*ops
= NULL
;
1219 mutex_lock(&em28xx_devlist_mutex
);
1220 if (!list_empty(&em28xx_extension_devlist
)) {
1221 list_for_each_entry(ops
, &em28xx_extension_devlist
, next
) {
1226 mutex_unlock(&em28xx_devlist_mutex
);