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");
63 #define em28xx_isocdbg(fmt, arg...) do {\
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
,
76 int pipe
= usb_rcvctrlpipe(dev
->udev
, 0);
78 if (dev
->state
& DEV_DISCONNECTED
)
81 if (len
> URB_MAX_CTRL_SIZE
)
85 printk(KERN_DEBUG
"(pipe 0x%08x): "
86 "IN: %02x %02x %02x %02x %02x %02x %02x %02x ",
88 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
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
);
100 printk(" failed!\n");
101 mutex_unlock(&dev
->ctrl_urb_lock
);
106 memcpy(buf
, dev
->urb_buf
, len
);
108 mutex_unlock(&dev
->ctrl_urb_lock
);
114 for (byte
= 0; byte
< len
; byte
++)
115 printk(" %02x", (unsigned char)buf
[byte
]);
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
)
131 ret
= em28xx_read_reg_req_len(dev
, req
, reg
, &val
, 1);
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
,
151 int pipe
= usb_sndctrlpipe(dev
->udev
, 0);
153 if (dev
->state
& DEV_DISCONNECTED
)
156 if ((len
< 1) || (len
> URB_MAX_CTRL_SIZE
))
162 printk(KERN_DEBUG
"(pipe 0x%08x): "
163 "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
165 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
167 reg
& 0xff, reg
>> 8,
168 len
& 0xff, len
>> 8);
170 for (byte
= 0; byte
< len
; byte
++)
171 printk(" %02x", (unsigned char)buf
[byte
]);
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
);
188 int em28xx_write_regs(struct em28xx
*dev
, u16 reg
, char *buf
, int len
)
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.
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];
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
220 int em28xx_write_reg_bits(struct em28xx
*dev
, u16 reg
, u8 val
,
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
;
232 oldval
= em28xx_read_reg(dev
, reg
);
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
)
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
);
260 em28xx_warn("AC97 command still being executed: not handled properly!\n");
266 * write a 16 bit value to the specified AC97 address (LSB first!)
268 int em28xx_read_ac97(struct em28xx
*dev
, u8 reg
)
271 u8 addr
= (reg
& 0x7f) | 0x80;
274 ret
= em28xx_is_ac97_ready(dev
);
278 ret
= em28xx_write_regs(dev
, EM28XX_R42_AC97ADDR
, &addr
, 1);
282 ret
= dev
->em28xx_read_reg_req_len(dev
, 0, EM28XX_R40_AC97LSB
,
283 (u8
*)&val
, sizeof(val
));
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
)
297 u8 addr
= reg
& 0x7f;
300 value
= cpu_to_le16(val
);
302 ret
= em28xx_is_ac97_ready(dev
);
306 ret
= em28xx_write_regs(dev
, EM28XX_R40_AC97LSB
, (u8
*) &value
, 2);
310 ret
= em28xx_write_regs(dev
, EM28XX_R42_AC97ADDR
, &addr
, 1);
317 struct em28xx_vol_table
{
318 enum em28xx_amux mux
;
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
)
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);
348 ret
= em28xx_write_ac97(dev
, inputs
[i
].reg
, 0x8000);
351 em28xx_warn("couldn't setup AC97 register %d\n",
357 static int em28xx_set_audio_source(struct em28xx
*dev
)
362 if (dev
->board
.is_em2800
) {
363 if (dev
->ctl_ainput
== EM28XX_AMUX_VIDEO
)
364 input
= EM2800_AUDIO_SRC_TUNER
;
366 input
= EM2800_AUDIO_SRC_LINE
;
368 ret
= em28xx_write_regs(dev
, EM2800_R08_AUDIOSRC
, &input
, 1);
373 if (dev
->board
.has_msp34xx
)
374 input
= EM28XX_AUDIO_SRC_TUNER
;
376 switch (dev
->ctl_ainput
) {
377 case EM28XX_AMUX_VIDEO
:
378 input
= EM28XX_AUDIO_SRC_TUNER
;
381 input
= EM28XX_AUDIO_SRC_LINE
;
386 if (dev
->board
.mute_gpio
&& dev
->mute
)
387 em28xx_gpio_set(dev
, dev
->board
.mute_gpio
);
389 em28xx_gpio_set(dev
, INPUT(dev
->ctl_input
)->gpio
);
391 ret
= em28xx_write_reg_bits(dev
, EM28XX_R0E_AUDIOSRC
, input
, 0xc0);
396 switch (dev
->audio_mode
.ac97
) {
400 ret
= set_ac97_input(dev
);
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
)
419 if (!dev
->audio_mode
.has_audio
)
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);
430 em28xx_warn("couldn't setup AC97 register %d\n",
435 xclk
= dev
->board
.xclk
& 0x7f;
437 xclk
|= EM28XX_XCLK_AUDIO_UNMUTE
;
439 ret
= em28xx_write_reg(dev
, EM28XX_R0F_XCLK
, xclk
);
444 /* Selects the proper audio input */
445 ret
= em28xx_set_audio_source(dev
);
448 if (dev
->audio_mode
.ac97
!= EM28XX_NO_AC97
) {
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 */
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
,
468 em28xx_warn("couldn't setup AC97 register %d\n",
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
479 em28xx_write_ac97(dev
, AC97_RECORD_SELECT
, sel
);
485 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set
);
487 int em28xx_audio_setup(struct em28xx
*dev
)
489 int vid1
, vid2
, feat
, cfg
;
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;
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
);
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;
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
;
534 dev
->audio_mode
.ac97
= EM28XX_AC97_OTHER
;
536 vid1
= em28xx_read_ac97(dev
, AC97_VENDOR_ID1
);
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;
550 vid2
= em28xx_read_ac97(dev
, AC97_VENDOR_ID2
);
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
);
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
;
573 /* Reports detected AC97 processor */
574 switch (dev
->audio_mode
.ac97
) {
576 em28xx_info("No AC97 audio processor\n");
578 case EM28XX_AC97_EM202
:
579 em28xx_info("Empia 202 AC97 audio processor detected\n");
581 case EM28XX_AC97_SIGMATEL
:
582 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
583 dev
->audio_mode
.ac97_vendor_id
& 0xff);
585 case EM28XX_AC97_OTHER
:
586 em28xx_warn("Unknown AC97 audio processor detected!\n");
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
)
618 if (dev
->chip_id
== CHIP_ID_EM2874
|| dev
->chip_id
== CHIP_ID_EM28174
) {
619 /* The Transport Stream Enable Register moved in em2874 */
621 rc
= em28xx_write_reg_bits(dev
, EM2874_R5F_TS_ENABLE
,
623 EM2874_TS1_CAPTURE_ENABLE
);
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
);
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);
643 /* disable video capture */
644 rc
= em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x27);
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);
657 rc
= em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x37);
664 int em28xx_vbi_supported(struct em28xx
*dev
)
666 /* Modprobe option to manually disable */
667 if (disable_vbi
== 1)
670 if (dev
->chip_id
== CHIP_ID_EM2860
||
671 dev
->chip_id
== CHIP_ID_EM2883
)
674 /* Version of em28xx that does not support VBI */
678 int em28xx_set_outfmt(struct em28xx
*dev
)
683 ret
= em28xx_write_reg_bits(dev
, EM28XX_R27_OUTFMT
,
684 dev
->format
->reg
| 0x20, 0xff);
688 ret
= em28xx_write_reg(dev
, EM28XX_R10_VINMODE
, dev
->vinmode
);
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
) {
700 em28xx_write_reg(dev
, EM28XX_R35_VBI_START_V
, 0x09);
701 } else if (dev
->norm
& V4L2_STD_625_50
) {
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
,
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
)
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
)
743 /* the em2800 scaler only supports scaling down to 50% */
745 if (dev
->board
.is_em2800
) {
746 mode
= (v
? 0x20 : 0x00) | (h
? 0x10 : 0x00);
752 em28xx_write_regs(dev
, EM28XX_R30_HSCALELOW
, (char *)buf
, 2);
756 em28xx_write_regs(dev
, EM28XX_R32_VSCALELOW
, (char *)buf
, 2);
757 /* it seems that both H and V scalers must be active
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
)
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;
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
793 if (em28xx_vbi_supported(dev
) == 1)
794 em28xx_capture_area_set(dev
, 0, 2, width
>> 2, height
>> 2);
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
;
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
);
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)
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
) {
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
])
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
);
846 em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
854 int em28xx_gpio_set(struct em28xx
*dev
, struct em28xx_reg_seq
*gpio
)
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);
866 em28xx_write_reg(dev
, EM28XX_R12_VINENABLE
, 0x37);
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
,
888 int em28xx_set_mode(struct em28xx
*dev
, enum em28xx_mode set_mode
)
890 if (dev
->mode
== set_mode
)
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
);
906 return em28xx_gpio_set(dev
, INPUT(dev
->ctl_input
)->gpio
);
908 EXPORT_SYMBOL_GPL(em28xx_set_mode
);
910 /* ------------------------------------------------------------------
912 ------------------------------------------------------------------*/
915 * IRQ callback, called by URB callback
917 static void em28xx_irq_callback(struct urb
*urb
)
919 struct em28xx
*dev
= urb
->context
;
922 switch (urb
->status
) {
923 case 0: /* success */
924 case -ETIMEDOUT
: /* NAK */
926 case -ECONNRESET
: /* kill */
931 em28xx_isocdbg("urb completition error %d.\n", urb
->status
);
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;
947 urb
->status
= usb_submit_urb(urb
, GFP_ATOMIC
);
949 em28xx_isocdbg("urb resubmit failed (error=%i)\n",
955 * Stop and Deallocate URBs
957 void em28xx_uninit_isoc(struct em28xx
*dev
)
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
];
968 if (!irqs_disabled())
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
],
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
;
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");
1025 dev
->isoc_ctl
.transfer_buffer
= kzalloc(sizeof(void *)*num_bufs
,
1027 if (!dev
->isoc_ctl
.transfer_buffer
) {
1028 em28xx_errdev("cannot allocate memory for usb transfer\n");
1029 kfree(dev
->isoc_ctl
.urb
);
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
);
1043 em28xx_err("cannot alloc isoc_ctl.urb %i\n", i
);
1044 em28xx_uninit_isoc(dev
);
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"
1055 in_interrupt() ? " while in int" : "");
1056 em28xx_uninit_isoc(dev
);
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
;
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
);
1093 em28xx_err("submit of urb %i failed (error=%i)\n", i
,
1095 em28xx_uninit_isoc(dev
);
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... */
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. */
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
:
1126 case EM28XX_CHIPCFG2_TS_PACKETSIZE_376
:
1129 case EM28XX_CHIPCFG2_TS_PACKETSIZE_564
:
1132 case EM28XX_CHIPCFG2_TS_PACKETSIZE_752
:
1138 em28xx_coredbg("dvb max packet size=%d\n", packet_size
);
1141 EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize
);
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
) {
1196 printk(KERN_INFO
"Em28xx: Initialized (%s) extension\n", ops
->name
);
1197 mutex_unlock(&em28xx_devlist_mutex
);
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
) {
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
) {
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
) {
1241 mutex_unlock(&em28xx_devlist_mutex
);