Skip to content

Commit

Permalink
[PATCH] v4l: 767: included support for em2800
Browse files Browse the repository at this point in the history
- Included support for em2800.

Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Mauro Carvalho Chehab authored and Linus Torvalds committed Nov 9, 2005
1 parent 2b5200a commit 596d92d
Show file tree
Hide file tree
Showing 6 changed files with 375 additions and 60 deletions.
13 changes: 9 additions & 4 deletions Documentation/video4linux/CARDLIST.em28xx
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
0 -> Terratec Cinergy 250 USB [0ccd:0036]
1 -> Pinnacle PCTV USB 2 [2304:0208]
2 -> Hauppauge WinTV USB 2 [2040:4200]
3 -> MSI VOX USB 2.0 [eb1a:2820]
0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800]
1 -> Unknown EM2820/2840 video grabber (em2820/em2840) [eb1a:2820]
2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036]
3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208]
4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200]
5 -> MSI VOX USB 2.0 (em2820/em2840)
6 -> Terratec Cinergy 200 USB (em2800)
7 -> Leadtek Winfast USB II (em2800)
8 -> Kworld USB2800 (em2800)
125 changes: 113 additions & 12 deletions drivers/media/video/em28xx/em28xx-cards.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
em2820-cards.c - driver for Empia EM2820/2840 USB video capture devices
em2820-cards.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>
Ludovico Cavedon <cavedon@sssup.it>
Expand Down Expand Up @@ -35,14 +35,43 @@

#include "em2820.h"

enum em2820_board_entry {
EM2820_BOARD_TERRATEC_CINERGY_250,
EM2820_BOARD_PINNACLE_USB_2,
EM2820_BOARD_HAUPPAUGE_WINTV_USB_2,
EM2820_BOARD_MSI_VOX_USB_2
};

struct em2820_board em2820_boards[] = {
[EM2800_BOARD_UNKNOWN] = {
.name = "Unknown EM2800 video grabber",
.is_em2800 = 1,
.vchannels = 2,
.norm = VIDEO_MODE_PAL,
.tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1,
.decoder = EM2820_SAA7113,
.input = {{
.type = EM2820_VMUX_COMPOSITE1,
.vmux = 0,
.amux = 1,
},{
.type = EM2820_VMUX_SVIDEO,
.vmux = 9,
.amux = 1,
}},
},
[EM2820_BOARD_UNKNOWN] = {
.name = "Unknown EM2820/2840 video grabber",
.is_em2800 = 0,
.vchannels = 2,
.norm = VIDEO_MODE_PAL,
.tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1,
.decoder = EM2820_SAA7113,
.input = {{
.type = EM2820_VMUX_COMPOSITE1,
.vmux = 0,
.amux = 1,
},{
.type = EM2820_VMUX_SVIDEO,
.vmux = 9,
.amux = 1,
}},
},
[EM2820_BOARD_TERRATEC_CINERGY_250] = {
.name = "Terratec Cinergy 250 USB",
.vchannels = 3,
Expand Down Expand Up @@ -129,17 +158,88 @@ struct em2820_board em2820_boards[] = {
.amux = 1,
}},
},
{ } /* Terminating entry */
[EM2800_BOARD_TERRATEC_CINERGY_200] = {
.name = "Terratec Cinergy 200 USB",
.chip_id = 0x4,
.is_em2800 = 1,
.vchannels = 3,
.norm = VIDEO_MODE_PAL,
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1,
.decoder = EM2820_SAA7113,
.input = {{
.type = EM2820_VMUX_TELEVISION,
.vmux = 2,
.amux = 0,
},{
.type = EM2820_VMUX_COMPOSITE1,
.vmux = 0,
.amux = 1,
},{
.type = EM2820_VMUX_SVIDEO,
.vmux = 9,
.amux = 1,
}},
},
[EM2800_BOARD_LEADTEK_WINFAST_USBII] = {
.name = "Leadtek Winfast USB II",
.chip_id = 0x2,
.is_em2800 = 1,
.vchannels = 3,
.norm = VIDEO_MODE_PAL,
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1,
.decoder = EM2820_SAA7113,
.input = {{
.type = EM2820_VMUX_TELEVISION,
.vmux = 2,
.amux = 0,
},{
.type = EM2820_VMUX_COMPOSITE1,
.vmux = 0,
.amux = 1,
},{
.type = EM2820_VMUX_SVIDEO,
.vmux = 9,
.amux = 1,
}},
},
[EM2800_BOARD_KWORLD_USB2800] = {
.name = "Kworld USB2800",
.chip_id = 0x7,
.is_em2800 = 1,
.vchannels = 3,
.norm = VIDEO_MODE_PAL,
.tuner_type = TUNER_PHILIPS_ATSC,
.tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1,
.decoder = EM2820_SAA7113,
.input = {{
.type = EM2820_VMUX_TELEVISION,
.vmux = 2,
.amux = 0,
},{
.type = EM2820_VMUX_COMPOSITE1,
.vmux = 0,
.amux = 1,
},{
.type = EM2820_VMUX_SVIDEO,
.vmux = 9,
.amux = 1,
}},
},
};
const unsigned int em2820_bcount = ARRAY_SIZE(em2820_boards);

/* table of devices that work with this driver */
struct usb_device_id em2820_id_table [] = {
/* Terratec Cinerhy 200 USB: em2800 nor supported, at the moment */
/* { USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_TERRATEC_CINERGY_200 }, */
{ USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_UNKNOWN },
{ USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_UNKNOWN },
{ USB_DEVICE(0x0ccd, 0x0036), .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 },
{ USB_DEVICE(0x2304, 0x0208), .driver_info = EM2820_BOARD_PINNACLE_USB_2 },
{ USB_DEVICE(0x2040, 0x4200), .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 },
{ USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_MSI_VOX_USB_2 },
{ },
};

Expand All @@ -163,6 +263,7 @@ void em2820_card_setup(struct em2820 *dev)
}

EXPORT_SYMBOL(em2820_boards);
EXPORT_SYMBOL(em2820_bcount);
EXPORT_SYMBOL(em2820_id_table);

MODULE_DEVICE_TABLE (usb, em2820_id_table);
13 changes: 12 additions & 1 deletion drivers/media/video/em28xx/em28xx-core.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
em2820-core.c - driver for Empia EM2820/2840 USB video capture devices
em2820-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>
Ludovico Cavedon <cavedon@sssup.it>
Expand Down Expand Up @@ -562,6 +562,11 @@ static inline void em2820_isoc_video_copy(struct em2820 *dev,
void *fieldstart, *startwrite, *startread;
int linesdone, currlinedone, offset, lencopy,remain;

if(dev->frame_size != (*f)->buf.length){
em2820_err("frame_size %i and buf.length %i are different!!!\n",dev->frame_size,(*f)->buf.length);
return;
}

if ((*f)->fieldbytesused + len > dev->field_size)
len =dev->field_size - (*f)->fieldbytesused;
remain = len;
Expand Down Expand Up @@ -780,6 +785,11 @@ int em2820_set_alternate(struct em2820 *dev)
dev->alt = alt;
if (dev->alt == 0) {
int i;
if(dev->is_em2800){ /* always use the max packet size for em2800 based devices */
for(i=0;i< EM2820_MAX_ALT; i++)
if(dev->alt_max_pkt_size[i]>dev->alt_max_pkt_size[dev->alt])
dev->alt=i;
}else{
unsigned int min_pkt_size = dev->field_size / 137; /* FIXME: empiric magic number */
em2820_coredbg("minimum isoc packet size: %u", min_pkt_size);
dev->alt = 7;
Expand All @@ -788,6 +798,7 @@ int em2820_set_alternate(struct em2820 *dev)
dev->alt = i;
break;
}
}
}

if (dev->alt != prev_alt) {
Expand Down
Loading

0 comments on commit 596d92d

Please sign in to comment.