提交 fbe60daa 编写于 作者: M Martin Samuelsson 提交者: Mauro Carvalho Chehab

V4L/DVB (3916): AverMedia 6 Eyes AVS6EYES support

Add support for the AverMedia 6 Eyes MJPEG card.
- Updated drivers/media/video/Kconfig with AVS6EYES
  options.
- Added CONFIG_VIDEO_ZORAN_AVS6EYES to
  drivers/media/video/Makefile.
- Added I2C_DRIVERID_BT866 and I2C_DRIVERID_KS0127 to
  include/linux/i2c-id.h
- Added drivers/media/video/ks0127.c, imported and modified from
  the Marvel project.
- Added drivers/media/video/ks0127.h, imported and modified from
  the Marvel project.
- Added drivers/media/video/bt866.c, ported from a 2.4 version
  by Christer Weinigel.
- Added AVS6EYES to drivers/media/video/zoran_card.c
- Added input_mux to all cards in drivers/media/video/zoran_card.c
- Added input mux module parameter to drivers/media/video/zoran_card.c
- Added AVS6EYES to card_type in drivers/media/video/zoran.h
- Added input_mux to card_info in drivers/media/video/zoran.h
- Upped BUZ_MAX_INPUT in drivers/media/video/zoran.h from 8 to 16,
  as the AVS6EYES has 10.
- Updated Documentation/video4linux/Zoran with information about AVS6EYES.
Signed-off-by: NMartin Samuelsson <sam@home.se>
Signed-off-by: NAdrian Bunk <bunk@stusta.de>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 a87cde0b
...@@ -33,6 +33,21 @@ Inputs/outputs: Composite and S-video ...@@ -33,6 +33,21 @@ Inputs/outputs: Composite and S-video
Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps) Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
Card number: 7 Card number: 7
AverMedia 6 Eyes AVS6EYES:
* Zoran zr36067 PCI controller
* Zoran zr36060 MJPEG codec
* Samsung ks0127 TV decoder
* Conexant bt866 TV encoder
Drivers to use: videodev, i2c-core, i2c-algo-bit,
videocodec, ks0127, bt866, zr36060, zr36067
Inputs/outputs: Six physical inputs. 1-6 are composite,
1-2, 3-4, 5-6 doubles as S-video,
1-3 triples as component.
One composite output.
Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
Card number: 8
Not autodetected, card=8 is necessary.
Linux Media Labs LML33: Linux Media Labs LML33:
* Zoran zr36067 PCI controller * Zoran zr36067 PCI controller
* Zoran zr36060 MJPEG codec * Zoran zr36060 MJPEG codec
...@@ -192,6 +207,10 @@ Micronas vpx3220a TV decoder ...@@ -192,6 +207,10 @@ Micronas vpx3220a TV decoder
was introduced in 1996, is used in the DC30 and DC30+ and was introduced in 1996, is used in the DC30 and DC30+ and
can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC 44, PAL 60, SECAM,NTSC Comb can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC 44, PAL 60, SECAM,NTSC Comb
Samsung ks0127 TV decoder
is used in the AVS6EYES card and
can handle: NTSC-M/N/44, PAL-M/N/B/G/H/I/D/K/L and SECAM
=========================== ===========================
1.2 What the TV encoder can do an what not 1.2 What the TV encoder can do an what not
...@@ -221,6 +240,10 @@ ITT mse3000 TV encoder ...@@ -221,6 +240,10 @@ ITT mse3000 TV encoder
was introduced in 1991, is used in the DC10 old was introduced in 1991, is used in the DC10 old
can generate: PAL , NTSC , SECAM can generate: PAL , NTSC , SECAM
Conexant bt866 TV encoder
is used in AVS6EYES, and
can generate: NTSC/PAL, PAL­M, PAL­N
The adv717x, should be able to produce PAL N. But you find nothing PAL N The adv717x, should be able to produce PAL N. But you find nothing PAL N
specific in the registers. Seem that you have to reuse a other standard specific in the registers. Seem that you have to reuse a other standard
to generate PAL N, maybe it would work if you use the PAL M settings. to generate PAL N, maybe it would work if you use the PAL M settings.
......
...@@ -224,6 +224,12 @@ config VIDEO_ZORAN_LML33R10 ...@@ -224,6 +224,12 @@ config VIDEO_ZORAN_LML33R10
support for the Linux Media Labs LML33R10 MJPEG capture/playback support for the Linux Media Labs LML33R10 MJPEG capture/playback
card. card.
config VIDEO_ZORAN_AVS6EYES
tristate "AverMedia 6 Eyes support (EXPERIMENTAL)"
depends on VIDEO_ZORAN && EXPERIMENTAL && VIDEO_V4L1
help
Support for the AverMedia 6 Eyes video surveillance card.
config VIDEO_ZR36120 config VIDEO_ZR36120
tristate "Zoran ZR36120/36125 Video For Linux" tristate "Zoran ZR36120/36125 Video For Linux"
depends on PCI && I2C && VIDEO_V4L1 && BROKEN depends on PCI && I2C && VIDEO_V4L1 && BROKEN
......
...@@ -33,6 +33,7 @@ obj-$(CONFIG_VIDEO_ZORAN_DC30) += adv7175.o vpx3220.o zr36050.o \ ...@@ -33,6 +33,7 @@ obj-$(CONFIG_VIDEO_ZORAN_DC30) += adv7175.o vpx3220.o zr36050.o \
zr36016.o zr36016.o
obj-$(CONFIG_VIDEO_ZORAN_LML33) += bt819.o bt856.o zr36060.o obj-$(CONFIG_VIDEO_ZORAN_LML33) += bt819.o bt856.o zr36060.o
obj-$(CONFIG_VIDEO_ZORAN_LML33R10) += saa7114.o adv7170.o zr36060.o obj-$(CONFIG_VIDEO_ZORAN_LML33R10) += saa7114.o adv7170.o zr36060.o
obj-$(CONFIG_VIDEO_ZORAN_AVS6EYES) += bt866.o ks0127.o zr36060.o
obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o videocodec.o obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o videocodec.o
obj-$(CONFIG_VIDEO_PMS) += pms.o obj-$(CONFIG_VIDEO_PMS) += pms.o
obj-$(CONFIG_VIDEO_PLANB) += planb.o obj-$(CONFIG_VIDEO_PLANB) += planb.o
......
/*
bt866 - BT866 Digital Video Encoder (Rockwell Part)
Copyright (C) 1999 Mike Bernson <mike@mlb.org>
Copyright (C) 1998 Dave Perks <dperks@ibm.net>
Modifications for LML33/DC10plus unified driver
Copyright (C) 2000 Serguei Miridonov <mirsev@cicese.mx>
This code was modify/ported from the saa7111 driver written
by Dave Perks.
This code was adapted for the bt866 by Christer Weinigel and ported
to 2.6 by Martin Samuelsson.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/pci.h>
#include <linux/signal.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <linux/sched.h>
#include <linux/types.h>
#include <linux/i2c.h>
#include <linux/videodev.h>
#include <asm/uaccess.h>
#include <linux/video_encoder.h>
MODULE_LICENSE("GPL");
#define BT866_DEVNAME "bt866"
#define I2C_BT866 0x88
MODULE_LICENSE("GPL");
#define DEBUG(x) /* Debug driver */
/* ----------------------------------------------------------------------- */
struct bt866 {
struct i2c_client *i2c;
int addr;
unsigned char reg[128];
int norm;
int enable;
int bright;
int contrast;
int hue;
int sat;
};
static int bt866_write(struct bt866 *dev,
unsigned char subaddr, unsigned char data);
static int bt866_do_command(struct bt866 *encoder,
unsigned int cmd, void *arg)
{
switch (cmd) {
case ENCODER_GET_CAPABILITIES:
{
struct video_encoder_capability *cap = arg;
DEBUG(printk
(KERN_INFO "%s: get capabilities\n",
encoder->i2c->name));
cap->flags
= VIDEO_ENCODER_PAL
| VIDEO_ENCODER_NTSC
| VIDEO_ENCODER_CCIR;
cap->inputs = 2;
cap->outputs = 1;
}
break;
case ENCODER_SET_NORM:
{
int *iarg = arg;
DEBUG(printk(KERN_INFO "%s: set norm %d\n",
encoder->i2c->name, *iarg));
switch (*iarg) {
case VIDEO_MODE_NTSC:
break;
case VIDEO_MODE_PAL:
break;
default:
return -EINVAL;
}
encoder->norm = *iarg;
}
break;
case ENCODER_SET_INPUT:
{
int *iarg = arg;
static const __u8 init[] = {
0xc8, 0xcc, /* CRSCALE */
0xca, 0x91, /* CBSCALE */
0xcc, 0x24, /* YC16 | OSDNUM */
0xda, 0x00, /* */
0xdc, 0x24, /* SETMODE | PAL */
0xde, 0x02, /* EACTIVE */
/* overlay colors */
0x70, 0xEB, 0x90, 0x80, 0xB0, 0x80, /* white */
0x72, 0xA2, 0x92, 0x8E, 0xB2, 0x2C, /* yellow */
0x74, 0x83, 0x94, 0x2C, 0xB4, 0x9C, /* cyan */
0x76, 0x70, 0x96, 0x3A, 0xB6, 0x48, /* green */
0x78, 0x54, 0x98, 0xC6, 0xB8, 0xB8, /* magenta */
0x7A, 0x41, 0x9A, 0xD4, 0xBA, 0x64, /* red */
0x7C, 0x23, 0x9C, 0x72, 0xBC, 0xD4, /* blue */
0x7E, 0x10, 0x9E, 0x80, 0xBE, 0x80, /* black */
0x60, 0xEB, 0x80, 0x80, 0xc0, 0x80, /* white */
0x62, 0xA2, 0x82, 0x8E, 0xc2, 0x2C, /* yellow */
0x64, 0x83, 0x84, 0x2C, 0xc4, 0x9C, /* cyan */
0x66, 0x70, 0x86, 0x3A, 0xc6, 0x48, /* green */
0x68, 0x54, 0x88, 0xC6, 0xc8, 0xB8, /* magenta */
0x6A, 0x41, 0x8A, 0xD4, 0xcA, 0x64, /* red */
0x6C, 0x23, 0x8C, 0x72, 0xcC, 0xD4, /* blue */
0x6E, 0x10, 0x8E, 0x80, 0xcE, 0x80, /* black */
};
int i;
u8 val;
for (i = 0; i < ARRAY_SIZE(init) / 2; i += 2)
bt866_write(encoder, init[i], init[i+1]);
val = encoder->reg[0xdc];
if (*iarg == 0)
val |= 0x40; /* CBSWAP */
else
val &= ~0x40; /* !CBSWAP */
bt866_write(encoder, 0xdc, val);
val = encoder->reg[0xcc];
if (*iarg == 2)
val |= 0x01; /* OSDBAR */
else
val &= ~0x01; /* !OSDBAR */
bt866_write(encoder, 0xcc, val);
DEBUG(printk(KERN_INFO "%s: set input %d\n",
encoder->i2c->name, *iarg));
switch (*iarg) {
case 0:
break;
case 1:
break;
default:
return -EINVAL;
}
}
break;
case ENCODER_SET_OUTPUT:
{
int *iarg = arg;
DEBUG(printk(KERN_INFO "%s: set output %d\n",
encoder->i2c->name, *iarg));
/* not much choice of outputs */
if (*iarg != 0)
return -EINVAL;
}
break;
case ENCODER_ENABLE_OUTPUT:
{
int *iarg = arg;
encoder->enable = !!*iarg;
DEBUG(printk
(KERN_INFO "%s: enable output %d\n",
encoder->i2c->name, encoder->enable));
}
break;
case 4711:
{
int *iarg = arg;
__u8 val;
printk("bt866: square = %d\n", *iarg);
val = encoder->reg[0xdc];
if (*iarg)
val |= 1; /* SQUARE */
else
val &= ~1; /* !SQUARE */
bt866_write(encoder, 0xdc, val);
break;
}
default:
return -EINVAL;
}
return 0;
}
static int bt866_write(struct bt866 *encoder,
unsigned char subaddr, unsigned char data)
{
unsigned char buffer[2];
int err;
buffer[0] = subaddr;
buffer[1] = data;
encoder->reg[subaddr] = data;
DEBUG(printk
("%s: write 0x%02X = 0x%02X\n",
encoder->i2c->name, subaddr, data));
for (err = 0; err < 3;) {
if (i2c_master_send(encoder->i2c, buffer, 2) == 2)
break;
err++;
printk(KERN_WARNING "%s: I/O error #%d "
"(write 0x%02x/0x%02x)\n",
encoder->i2c->name, err, encoder->addr, subaddr);
schedule_timeout_interruptible(HZ/10);
}
if (err == 3) {
printk(KERN_WARNING "%s: giving up\n",
encoder->i2c->name);
return -1;
}
return 0;
}
static int bt866_attach(struct i2c_adapter *adapter);
static int bt866_detach(struct i2c_client *client);
static int bt866_command(struct i2c_client *client,
unsigned int cmd, void *arg);
/* Addresses to scan */
static unsigned short normal_i2c[] = {I2C_BT866>>1, I2C_CLIENT_END};
static unsigned short probe[2] = {I2C_CLIENT_END, I2C_CLIENT_END};
static unsigned short ignore[2] = {I2C_CLIENT_END, I2C_CLIENT_END};
static struct i2c_client_address_data addr_data = {
normal_i2c,
probe,
ignore,
};
static struct i2c_driver i2c_driver_bt866 = {
.driver.name = BT866_DEVNAME,
.id = I2C_DRIVERID_BT866,
.attach_adapter = bt866_attach,
.detach_client = bt866_detach,
.command = bt866_command
};
static struct i2c_client bt866_client_tmpl =
{
.name = "(nil)",
.addr = 0,
.adapter = NULL,
.driver = &i2c_driver_bt866,
.usage_count = 0
};
static int bt866_found_proc(struct i2c_adapter *adapter,
int addr, int kind)
{
struct bt866 *encoder;
struct i2c_client *client;
client = kzalloc(sizeof(*client), GFP_KERNEL);
if (client == NULL)
return -ENOMEM;
memcpy(client, &bt866_client_tmpl, sizeof(*client));
encoder = kzalloc(sizeof(*encoder), GFP_KERNEL);
if (encoder == NULL) {
kfree(client);
return -ENOMEM;
}
i2c_set_clientdata(client, encoder);
client->adapter = adapter;
client->addr = addr;
sprintf(client->name, "%s-%02x", BT866_DEVNAME, adapter->id);
encoder->i2c = client;
encoder->addr = addr;
//encoder->encoder_type = ENCODER_TYPE_UNKNOWN;
/* initialize */
i2c_attach_client(client);
return 0;
}
static int bt866_attach(struct i2c_adapter *adapter)
{
if (adapter->id == I2C_HW_B_ZR36067)
return i2c_probe(adapter, &addr_data, bt866_found_proc);
return 0;
}
static int bt866_detach(struct i2c_client *client)
{
struct bt866 *encoder = i2c_get_clientdata(client);
i2c_detach_client(client);
kfree(encoder);
kfree(client);
return 0;
}
static int bt866_command(struct i2c_client *client,
unsigned int cmd, void *arg)
{
struct bt866 *encoder = i2c_get_clientdata(client);
return bt866_do_command(encoder, cmd, arg);
}
static int __devinit bt866_init(void)
{
i2c_add_driver(&i2c_driver_bt866);
return 0;
}
static void __devexit bt866_exit(void)
{
i2c_del_driver(&i2c_driver_bt866);
}
module_init(bt866_init);
module_exit(bt866_exit);
此差异已折叠。
/*
* Video Capture Driver ( Video for Linux 1/2 )
* for the Matrox Marvel G200,G400 and Rainbow Runner-G series
*
* This module is an interface to the KS0127 video decoder chip.
*
* Copyright (C) 1999 Ryan Drake <stiletto@mediaone.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef KS0127_H
#define KS0127_H
#include <linux/videodev.h>
/* input channels */
#define KS_INPUT_COMPOSITE_1 0
#define KS_INPUT_COMPOSITE_2 1
#define KS_INPUT_COMPOSITE_3 2
#define KS_INPUT_COMPOSITE_4 4
#define KS_INPUT_COMPOSITE_5 5
#define KS_INPUT_COMPOSITE_6 6
#define KS_INPUT_SVIDEO_1 8
#define KS_INPUT_SVIDEO_2 9
#define KS_INPUT_SVIDEO_3 10
#define KS_INPUT_YUV656 15
#define KS_INPUT_COUNT 10
/* output channels */
#define KS_OUTPUT_YUV656E 0
#define KS_OUTPUT_EXV 1
/* video standards */
#define KS_STD_NTSC_N 112 /* 50 Hz NTSC */
#define KS_STD_PAL_M 113 /* 60 Hz PAL */
#endif /* KS0127_H */
...@@ -159,7 +159,7 @@ Private IOCTL to set up for displaying MJPEG ...@@ -159,7 +159,7 @@ Private IOCTL to set up for displaying MJPEG
#define BUZ_MAX_FRAME 256 /* Must be a power of 2 */ #define BUZ_MAX_FRAME 256 /* Must be a power of 2 */
#define BUZ_MASK_FRAME 255 /* Must be BUZ_MAX_FRAME-1 */ #define BUZ_MASK_FRAME 255 /* Must be BUZ_MAX_FRAME-1 */
#define BUZ_MAX_INPUT 8 #define BUZ_MAX_INPUT 16
#if VIDEO_MAX_FRAME <= 32 #if VIDEO_MAX_FRAME <= 32
# define V4L_MAX_FRAME 32 # define V4L_MAX_FRAME 32
...@@ -191,6 +191,9 @@ enum card_type { ...@@ -191,6 +191,9 @@ enum card_type {
/* Iomega */ /* Iomega */
BUZ, BUZ,
/* AverMedia */
AVS6EYES,
/* total number of cards */ /* total number of cards */
NUM_CARDS NUM_CARDS
}; };
...@@ -379,6 +382,9 @@ struct card_info { ...@@ -379,6 +382,9 @@ struct card_info {
/* is the /GWS line conected? */ /* is the /GWS line conected? */
u8 gws_not_connected; u8 gws_not_connected;
/* avs6eyes mux setting */
u8 input_mux;
void (*init) (struct zoran * zr); void (*init) (struct zoran * zr);
}; };
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/delay.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -93,6 +95,11 @@ module_param(default_input, int, 0); ...@@ -93,6 +95,11 @@ module_param(default_input, int, 0);
MODULE_PARM_DESC(default_input, MODULE_PARM_DESC(default_input,
"Default input (0=Composite, 1=S-Video, 2=Internal)"); "Default input (0=Composite, 1=S-Video, 2=Internal)");
static int default_mux = 1; /* 6 Eyes input selection */
module_param(default_mux, int, 0);
MODULE_PARM_DESC(default_mux,
"Default 6 Eyes mux setting (Input selection)");
static int default_norm = 0; /* 0=PAL, 1=NTSC 2=SECAM */ static int default_norm = 0; /* 0=PAL, 1=NTSC 2=SECAM */
module_param(default_norm, int, 0); module_param(default_norm, int, 0);
MODULE_PARM_DESC(default_norm, "Default norm (0=PAL, 1=NTSC, 2=SECAM)"); MODULE_PARM_DESC(default_norm, "Default norm (0=PAL, 1=NTSC, 2=SECAM)");
...@@ -301,6 +308,30 @@ lml33_init (struct zoran *zr) ...@@ -301,6 +308,30 @@ lml33_init (struct zoran *zr)
GPIO(zr, 2, 1); // Set Composite input/output GPIO(zr, 2, 1); // Set Composite input/output
} }
static void
avs6eyes_init (struct zoran *zr)
{
// AverMedia 6-Eyes original driver by Christer Weinigel
// Lifted straight from Christer's old driver and
// modified slightly by Martin Samuelsson.
int mux = default_mux; /* 1 = BT866, 7 = VID1 */
GPIO(zr, 4, 1); /* Bt866 SLEEP on */
udelay(2);
GPIO(zr, 0, 1); /* ZR36060 /RESET on */
GPIO(zr, 1, 0); /* ZR36060 /SLEEP on */
GPIO(zr, 2, mux & 1); /* MUX S0 */
GPIO(zr, 3, 0); /* /FRAME on */
GPIO(zr, 4, 0); /* Bt866 SLEEP off */
GPIO(zr, 5, mux & 2); /* MUX S1 */
GPIO(zr, 6, 0); /* ? */
GPIO(zr, 7, mux & 4); /* MUX S2 */
}
static char * static char *
i2cid_to_modulename (u16 i2c_id) i2cid_to_modulename (u16 i2c_id)
{ {
...@@ -391,6 +422,14 @@ static struct tvnorm f60sqpixel_dc10 = { 780, 640, 0, 716, 525, 480, 12 }; ...@@ -391,6 +422,14 @@ static struct tvnorm f60sqpixel_dc10 = { 780, 640, 0, 716, 525, 480, 12 };
static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 }; static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 };
static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 }; static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 };
/* FIXME: The ks0127 seem incapable of swapping U and V, too, which is why I
* copy Maxim's left shift hack for the 6 Eyes.
*
* Christer's driver used the unshifted norms, though...
* /Sam */
static struct tvnorm f50ccir601_avs6eyes = { 864, 720, 74, 804, 625, 576, 18 };
static struct tvnorm f60ccir601_avs6eyes = { 858, 720, 56, 788, 525, 480, 16 };
static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
{ {
.type = DC10_old, .type = DC10_old,
...@@ -419,6 +458,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -419,6 +458,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { -1, 0 }, .gpcs = { -1, 0 },
.vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 }, .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
.gws_not_connected = 0, .gws_not_connected = 0,
.input_mux = 0,
.init = &dc10_init, .init = &dc10_init,
}, { }, {
.type = DC10_new, .type = DC10_new,
...@@ -445,6 +485,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -445,6 +485,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { -1, 1}, .gpcs = { -1, 1},
.vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 }, .vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 },
.gws_not_connected = 0, .gws_not_connected = 0,
.input_mux = 0,
.init = &dc10plus_init, .init = &dc10plus_init,
}, { }, {
.type = DC10plus, .type = DC10plus,
...@@ -474,6 +515,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -474,6 +515,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { -1, 1 }, .gpcs = { -1, 1 },
.vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 }, .vfe_pol = { 1, 1, 1, 1, 0, 0, 0, 0 },
.gws_not_connected = 0, .gws_not_connected = 0,
.input_mux = 0,
.init = &dc10plus_init, .init = &dc10plus_init,
}, { }, {
.type = DC30, .type = DC30,
...@@ -502,6 +544,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -502,6 +544,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { -1, 0 }, .gpcs = { -1, 0 },
.vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 }, .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
.gws_not_connected = 0, .gws_not_connected = 0,
.input_mux = 0,
.init = &dc10_init, .init = &dc10_init,
}, { }, {
.type = DC30plus, .type = DC30plus,
...@@ -532,6 +575,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -532,6 +575,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { -1, 0 }, .gpcs = { -1, 0 },
.vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 }, .vfe_pol = { 0, 0, 0, 0, 0, 0, 0, 0 },
.gws_not_connected = 0, .gws_not_connected = 0,
.input_mux = 0,
.init = &dc10_init, .init = &dc10_init,
}, { }, {
.type = LML33, .type = LML33,
...@@ -558,6 +602,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -558,6 +602,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { 3, 1 }, .gpcs = { 3, 1 },
.vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 }, .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
.gws_not_connected = 1, .gws_not_connected = 1,
.input_mux = 0,
.init = &lml33_init, .init = &lml33_init,
}, { }, {
.type = LML33R10, .type = LML33R10,
...@@ -586,6 +631,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -586,6 +631,7 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { 3, 1 }, .gpcs = { 3, 1 },
.vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 }, .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
.gws_not_connected = 1, .gws_not_connected = 1,
.input_mux = 0,
.init = &lml33_init, .init = &lml33_init,
}, { }, {
.type = BUZ, .type = BUZ,
...@@ -614,8 +660,49 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = { ...@@ -614,8 +660,49 @@ static struct card_info zoran_cards[NUM_CARDS] __devinitdata = {
.gpcs = { 3, 1 }, .gpcs = { 3, 1 },
.vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 }, .vfe_pol = { 1, 1, 0, 0, 0, 1, 0, 0 },
.gws_not_connected = 1, .gws_not_connected = 1,
.input_mux = 0,
.init = &buz_init, .init = &buz_init,
}, {
.type = AVS6EYES,
.name = "6-Eyes",
/* AverMedia chose not to brand the 6-Eyes. Thus it
can't be autodetected, and requires card=x. */
.vendor_id = -1,
.device_id = -1,
.i2c_decoder = I2C_DRIVERID_KS0127,
.i2c_encoder = I2C_DRIVERID_BT866,
.video_codec = CODEC_TYPE_ZR36060,
.inputs = 10,
.input = {
{ 0, "Composite 1" },
{ 1, "Composite 2" },
{ 2, "Composite 3" },
{ 4, "Composite 4" },
{ 5, "Composite 5" },
{ 6, "Composite 6" },
{ 8, "S-Video 1" },
{ 9, "S-Video 2" },
{10, "S-Video 3" },
{15, "YCbCr" }
},
.norms = 2,
.tvn = {
&f50ccir601_avs6eyes,
&f60ccir601_avs6eyes,
NULL
},
.jpeg_int = ZR36057_ISR_GIRQ1,
.vsync_int = ZR36057_ISR_GIRQ0,
.gpio = { 1, 0, 3, -1, -1, -1, -1, -1 },// Validity unknown /Sam
.gpio_pol = { 0, 0, 0, 0, 0, 0, 0, 0 }, // Validity unknown /Sam
.gpcs = { 3, 1 }, // Validity unknown /Sam
.vfe_pol = { 1, 0, 0, 0, 0, 1, 0, 0 }, // Validity unknown /Sam
.gws_not_connected = 1,
.input_mux = 1,
.init = &avs6eyes_init,
} }
}; };
/* /*
......
...@@ -112,6 +112,8 @@ ...@@ -112,6 +112,8 @@
#define I2C_DRIVERID_X1205 82 /* Xicor/Intersil X1205 RTC */ #define I2C_DRIVERID_X1205 82 /* Xicor/Intersil X1205 RTC */
#define I2C_DRIVERID_PCF8563 83 /* Philips PCF8563 RTC */ #define I2C_DRIVERID_PCF8563 83 /* Philips PCF8563 RTC */
#define I2C_DRIVERID_RS5C372 84 /* Ricoh RS5C372 RTC */ #define I2C_DRIVERID_RS5C372 84 /* Ricoh RS5C372 RTC */
#define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */
#define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */
#define I2C_DRIVERID_I2CDEV 900 #define I2C_DRIVERID_I2CDEV 900
#define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册