Hi, this patch adds:
* Support 3Dfx VoodooTV 100 (which is an STB OEM card) [PCI-Subsystem ID 121A:3060] (untested)
* more Cards
* Detect and Hexdump Bt832 for Quartzsight Digital Camera, as found on Pixelview Rev. 4E
(TODO: make it work!)
Gerd, please apply, as further help on quartzsight would be appreciated.
Do you have any sample code for Bt848/Bt878 setup to interface
to a digital quartzsight camera in YUV or YCrCb?
Regards, Gunther
diff -Nur bttv-0.7.98/Cards bttv0798/Cards
--- bttv-0.7.98/Cards Fri Sep 13 11:26:16 2002
+++ bttv0798/Cards Sat Sep 14 18:32:15 2002
@@ -327,12 +327,43 @@
PCB PCI-ID Model-Name Eeprom Tuner Sound Country
--------------------------------------------------------------------
- M1A8-A -- AVer TV-Phone FM1216 --
+ M101.C ISA !
+ M108-B Bt848 -- FR1236 US (2),(3)
+ M1A8-A Bt848 AVer TV-Phone FM1216 --
M168-T 1461:0003 AVerTV Studio 48:17 FM1216 TDA9840T D (1) w/FM w/Remote
M168-U 1461:0004 TVCapture98 40:11 FI1216 -- D w/Remote
M168II-B 1461:0003 Medion MD9592 48:16 FM1216 TDA9873H D w/FM
(1) Daughterboard MB68-A with TDA9820T and TDA9840T
+ (2) Sony NE41S soldered (stereo sound?)
+ (3) Daughterboard M118-A w/ pic 16c54 and 4 MHz quartz
+
+ US site has different drivers for (as of 09/2002):
+ EZ Capture/InterCam PCI (BT-848 chip)
+ EZ Capture/InterCam PCI (BT-878 chip)
+ TV-Phone (BT-848 chip)
+ TV98 (BT-848 chip)
+ TV98 With Remote (BT-848 chip)
+ TV98 (BT-878 chip)
+ TV98 With Remote (BT-878)
+ TV/FM98 (BT-878 chip)
+ AVerTV
+ AverTV Stereo
+ AVerTV Studio
+
+ DE hat diverse Treiber fuer diese Modelle (Stand 09/2002):
+ TVPhone (848) mit Philips tuner FR12X6 (w/ FM radio)
+ TVPhone (848) mit Philips tuner FM12X6 (w/ FM radio)
+ TVCapture (848) w/Philips tuner FI12X6
+ TVCapture (848) non-Philips tuner
+ TVCapture98 (Bt878)
+ TVPhone98 (Bt878)
+ AVerTV und TVCapture98 w/VCR (Bt 878)
+ AVerTVStudio und TVPhone98 w/VCR (Bt878)
+ AVerTV GO Serie (Kein SVideo Input)
+ AVerTV98 (BT-878 chip)
+ AVerTV98 mit Fernbedienung (BT-878 chip)
+ AVerTV/FM98 (BT-878 chip)
Aimslab
-------
@@ -384,7 +415,7 @@
Mediafocus I (zr36120/zr36125, drp3510, Sat. analog + ADR Radio)
Mediafocus II (saa7146, Sat. analog)
SatADR Rev 2.1 (saa7146a, saa7113h, stv0056a, msp3400c, drp3510a, BSKE3-307A)
- SkyStar 1 DVB (AV7110)
+ SkyStar 1 DVB (AV7110) = Technotrend Premium
SkyStar 2 DVB (B2C2) (=Sky2PC)
Siemens
@@ -513,8 +544,10 @@
STB
---
- TV PCI (Temic4032FY5, tda9850??)
- other variants?
+ STB bt878 == Gateway 6000704
+ STB Gateway 6000699 (bt848)
+ STB Gateway 6000402 (bt848)
+ STB TV130 PCI
Videologic
----------
@@ -525,6 +558,16 @@
------------
TT-SAT PCI (PCB "Sat-PCI Rev.:1.3.1"; zr36125, vpx3225d, stc0056a, Tuner:BSKE6-155A
TT-DVB-Sat
+ This card is sold as OEM from:
+ Siemens DVB-s Card
+ Hauppauge WinTV DVB-S
+ Technisat SkyStar 1 DVB
+ Galaxis DVB Sat
+ Now this card is called TT-PCline Premium Family
+ TT-Budget
+ This card is sold as OEM from:
+ Hauppauge WinTV Nova
+ Satelco Standard PCI (DVB-S)
TT-DVB-C PCI
Teles
@@ -564,10 +607,13 @@
Hauppauge
---------
many many WinTV models ...
- WinTV DVBs
- WinTV NOVA
+ WinTV DVBs = Tehcnotrend Premium
+ WinTV NOVA = Technotrend Budget
WinTV NOVA-CI
WinTV-Nexus-s
+ WinTV PVR
+ WinTV PVR 250
+ WinTV PVR 450
Matrix-Vision
-------------
@@ -656,6 +702,10 @@
Satelco
-------
TV-FM =KNC1 saa7134
+ Standard PCI (DVB-S) = Technotrend Budget
+ Standard PCI (DVB-S) w/ CI
+ Satelco Hoghend PCI (DVB-S) = Technotrend Premium
+
Sensoray www.sensoray.com
--------
@@ -690,3 +740,13 @@
www.sknet-web.co.jp
-------------------
SKnet Monster TV (saa7134)
+
+A-Max www.amaxhk.com (Colormax, Amax, Napa)
+-------------------
+ APAC Viewcomp 878
+
+Cybertainment
+-------------
+ CyberMail AV Video Email Kit w/ PCI Capture Card (capture only)
+ CyberMail Xtreme
+ These are Flyvideo
diff -Nur bttv-0.7.98/Changes bttv0798/Changes
--- bttv-0.7.98/Changes Fri Sep 13 11:26:16 2002
+++ bttv0798/Changes Sun Sep 15 21:25:22 2002
@@ -1,3 +1,10 @@
+bttv-0.7.99
+-----------
+ * Support 3Dfx VoodooTV 100 (which is an STB OEM card) [PCI-Subsystem ID 121A:3060]
+ * more Cards
+ * Detect and Hexdump Bt832 for Quartzsight Digital Camera, as found on Pixelview Rev. 4E
+ (TODO: make it work!)
+
bttv-0.7.98
-----------
* Support and autodetect Terratec Active Radio Upgrade (TEA5757,OM5610,Matchbox).
diff -Nur bttv-0.7.98/driver/Make.config bttv0798/driver/Make.config
--- bttv-0.7.98/driver/Make.config Wed Sep 11 12:54:07 2002
+++ bttv0798/driver/Make.config Sat Sep 14 20:22:30 2002
@@ -6,7 +6,7 @@
obj-m := tuner.o tvaudio.o tvmixer.o \
msp3400.o tda7432.o tda9875.o tda9887.o dpl3518.o \
- pci-reserve.o
+ pci-reserve.o bt832.o
# conditional stuff
ifneq ($(VERSION).$(PATCHLEVEL),2.5)
diff -Nur bttv-0.7.98/driver/bt832.c bttv0798/driver/bt832.c
--- bttv-0.7.98/driver/bt832.c Thu Jan 1 01:00:00 1970
+++ bttv0798/driver/bt832.c Sun Sep 15 21:14:33 2002
@@ -0,0 +1,249 @@
+/* Driver for Bt832 CMOS Camera Video Processor
+ i2c-adresses: 0x88 or 0x8a
+
+ The BT832 interfaces to a Quartzsight Digital Camera (352x288, 25 or 30 fps)
+ via a 9 pin connector ( 4-wire SDATA, 2-wire i2c, SCLK, VCC, GND).
+ It outputs an 8-bit 4:2:2 YUV or YCrCb video signal which can be directly
+ connected to bt848/bt878 GPIO pins on this purpose.
+ (see: VLSI Vision Ltd. www.vvl.co.uk for camera datasheets)
+
+ Supported Cards:
+ - Pixelview Rev.4E: 0x8a
+ GPIO 0x400000 toggles Bt832 RESET, and the chip changes to i2c 0x88 !
+
+ (c) Gunther Mayer, 2002
+
+ STATUS:
+ - detect chip and hexdump
+ - reset chip and leave low power mode
+ - detect camera present
+
+ TODO:
+ - make it work (find correct setup for Bt832 and Bt878)
+*/
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/i2c.h>
+#include <linux/types.h>
+#include <linux/videodev.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <linux/slab.h>
+
+#include "id.h"
+#include "audiochip.h"
+#include "bttv.h"
+#include "bt832.h"
+
+
+
+/* Addresses to scan */
+static unsigned short normal_i2c[] = {I2C_CLIENT_END};
+static unsigned short normal_i2c_range[] = {I2C_BT832_ALT1>>1,I2C_BT832_ALT2>>1,I2C_CLIENT_END};
+static unsigned short probe[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
+static unsigned short probe_range[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
+static unsigned short ignore[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
+static unsigned short ignore_range[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
+static unsigned short force[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
+static struct i2c_client_address_data addr_data = {
+ normal_i2c, normal_i2c_range,
+ probe, probe_range,
+ ignore, ignore_range,
+ force
+};
+
+/* ---------------------------------------------------------------------- */
+
+#define dprintk if (debug) printk
+
+static int bt832_detach(struct i2c_client *client);
+
+
+static struct i2c_driver driver;
+static struct i2c_client client_template;
+
+struct bt832 {
+ struct i2c_client client;
+};
+
+int bt832_hexdump(struct i2c_client *i2c_client_s, unsigned char *buf)
+{
+ int i,rc;
+ buf[0]=0x80; // start at register 0 with auto-increment
+ if (1 != (rc = i2c_master_send(i2c_client_s,buf,1)))
+ printk("bt832: i2c i/o error: rc == %d (should be 1)\n",rc);
+
+ for(i=0;i<65;i++)
+ buf[i]=0;
+ if (65 != (rc=i2c_master_recv(i2c_client_s,buf,65)))
+ printk("bt832: i2c i/o error: rc == %d (should be 65)\n",rc);
+
+ // Note: On READ the first byte is the current index
+ // (e.g. 0x80, what we just wrote)
+
+ if(1) {
+ int i;
+ printk("BT832 hexdump:\n");
+ for(i=1;i<65;i++) {
+ if(i!=1) {
+ if(((i-1)%8)==0) printk(" ");
+ if(((i-1)%16)==0) printk("\n");
+ }
+ printk(" %02x",buf[i]);
+ }
+ printk("\n");
+ }
+ return 0;
+}
+
+// Return: 1 (is a bt832), 0 (No bt832 here)
+int bt832_init(struct i2c_client *i2c_client_s)
+{
+ unsigned char *buf;
+ int rc;
+
+ buf=kmalloc(65,GFP_KERNEL);
+ bt832_hexdump(i2c_client_s,buf);
+
+ if(buf[0x40] != 0x31) {
+ printk("bt832: this i2c chip is no bt832 (id=%02x). Detaching.\n",buf[0x40]);
+ kfree(buf);
+ return 0;
+ }
+
+ // Leave low power mode:
+ printk("Bt832: leave low power mode.\n");
+ buf[0]=BT832_CAM_SETUP0; //0x39 57
+ buf[1]=0x08;
+ if (2 != (rc = i2c_master_send(i2c_client_s,buf,2)))
+ printk("bt832: i2c i/o error: rc == %d (should be 2)\n",rc);
+
+ printk("Bt832: Camera Present: %s\n",
+ (buf[1+BT832_CAM_STATUS] & BT832_56_CAMERA_PRESENT) ? "yes":"no");
+
+
+ kfree(buf);
+ return 1;
+}
+
+
+
+static int bt832_attach(struct i2c_adapter *adap, int addr,
+ unsigned short flags, int kind)
+{
+ struct bt832 *t;
+
+ printk("bt832_attach\n");
+
+ client_template.adapter = adap;
+ client_template.addr = addr;
+
+ printk("bt832: chip found @ 0x%x\n", addr<<1);
+
+ if (NULL == (t = kmalloc(sizeof(*t), GFP_KERNEL)))
+ return -ENOMEM;
+ memset(t,0,sizeof(*t));
+ t->client = client_template;
+ t->client.data = t;
+ i2c_attach_client(&t->client);
+
+ MOD_INC_USE_COUNT;
+ if(! bt832_init(&t->client)) {
+ bt832_detach(&t->client);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int bt832_probe(struct i2c_adapter *adap)
+{
+ int rc;
+
+ printk("bt832_probe\n");
+
+ switch (adap->id) {
+ case I2C_ALGO_BIT | I2C_HW_B_BT848:
+ case I2C_ALGO_BIT | I2C_HW_B_RIVA:
+ case I2C_ALGO_SAA7134:
+ printk("bt832: probing %s i2c adapter [id=0x%x]\n",
+ adap->name,adap->id);
+ rc = i2c_probe(adap, &addr_data, bt832_attach);
+ break;
+ default:
+ printk("bt832: ignoring %s i2c adapter [id=0x%x]\n",
+ adap->name,adap->id);
+ rc = 0;
+ /* nothing */
+ }
+ return rc;
+}
+
+static int bt832_detach(struct i2c_client *client)
+{
+ struct bt832 *t = (struct bt832*)client->data;
+
+ printk("bt832: detach.\n");
+ i2c_detach_client(client);
+ kfree(t);
+ MOD_DEC_USE_COUNT;
+ return 0;
+}
+
+static int
+bt832_command(struct i2c_client *client, unsigned int cmd, void *arg)
+{
+ struct bt832 *t = (struct bt832*)client->data;
+
+ printk("bt832: command %x\n",cmd);
+
+ switch (cmd) {
+ case BT832_HEXDUMP: {
+ unsigned char *buf;
+ buf=kmalloc(65,GFP_KERNEL);
+ bt832_hexdump(&t->client,buf);
+ kfree(buf);
+ }
+ break;
+ case BT832_REATTACH:
+ printk("bt832: re-attach\n");
+ i2c_del_driver(&driver);
+ i2c_add_driver(&driver);
+ break;
+ }
+ return 0;
+}
+
+/* ----------------------------------------------------------------------- */
+
+static struct i2c_driver driver = {
+ name: "i2c bt832 driver",
+ id: -1, /* FIXME */
+ flags: I2C_DF_NOTIFY,
+ attach_adapter: bt832_probe,
+ detach_client: bt832_detach,
+ command: bt832_command,
+};
+static struct i2c_client client_template =
+{
+ name: "bt832",
+ flags: I2C_CLIENT_ALLOW_USE,
+ driver: &driver,
+};
+
+
+int bt832_init_module(void)
+{
+ i2c_add_driver(&driver);
+ return 0;
+}
+
+static void bt832_cleanup_module(void)
+{
+ i2c_del_driver(&driver);
+}
+
+module_init(bt832_init_module);
+module_exit(bt832_cleanup_module);
+
diff -Nur bttv-0.7.98/driver/bt832.h bttv0798/driver/bt832.h
--- bttv-0.7.98/driver/bt832.h Thu Jan 1 01:00:00 1970
+++ bttv0798/driver/bt832.h Sun Sep 15 20:49:25 2002
@@ -0,0 +1,114 @@
+/* Bt832 CMOS Camera Video Processor (VP)
+
+ The Bt832 CMOS Camera Video Processor chip connects a Quartsight CMOS
+ color digital camera directly to video capture devices via an 8-bit,
+ 4:2:2 YUV or YCrCb video interface.
+
+ i2c adresses: 0x88 or 0x8a
+ */
+
+/* The 64 registers: */
+
+// Input Processor
+#define BT832_OFFSET 0
+#define BT832_RCOMP 1
+#define BT832_G1COMP 2
+#define BT832_G2COMP 3
+#define BT832_BCOMP 4
+// Exposures:
+#define BT832_FINEH 5
+#define BT832_FINEL 6
+#define BT832_COARSEH 7
+#define BT832_COARSEL 8
+#define BT832_CAMGAIN 9
+// Main Processor:
+#define BT832_M00 10
+#define BT832_M01 11
+#define BT832_M02 12
+#define BT832_M10 13
+#define BT832_M11 14
+#define BT832_M12 15
+#define BT832_M20 16
+#define BT832_M21 17
+#define BT832_M22 18
+#define BT832_APCOR 19
+#define BT832_GAMCOR 20
+// Level Accumulator Inputs
+#define BT832_VPCONTROL2 21
+#define BT832_ZONECODE0 22
+#define BT832_ZONECODE1 23
+#define BT832_ZONECODE2 24
+#define BT832_ZONECODE3 25
+// Level Accumulator Outputs:
+#define BT832_RACC 26
+#define BT832_GACC 27
+#define BT832_BACC 28
+#define BT832_BLACKACC 29
+#define BT832_EXP_AGC 30
+#define BT832_LACC0 31
+#define BT832_LACC1 32
+#define BT832_LACC2 33
+#define BT832_LACC3 34
+#define BT832_LACC4 35
+#define BT832_LACC5 36
+#define BT832_LACC6 37
+#define BT832_LACC7 38
+// System:
+#define BT832_VP_CONTROL0 39
+#define BT832_VP_CONTROL1 40
+#define BT832_THRESH 41
+#define BT832_VP_TESTCONTROL0 42
+#define BT832_VP_DMCODE 43
+#define BT832_ACB_CONFIG 44
+#define BT832_ACB_GNBASE 45
+#define BT832_ACB_MU 46
+#define BT832_CAM_TEST0 47
+#define BT832_AEC_CONFIG 48
+#define BT832_AEC_TL 49
+#define BT832_AEC_TC 50
+#define BT832_AEC_TH 51
+// Status:
+#define BT832_VP_STATUS 52
+#define BT832_VP_LINECOUNT 53
+#define BT832_CAM_DEVICEL 54 // e.g. 0x19
+#define BT832_CAM_DEVICEH 55 // e.g. 0x40 == 0x194 Mask0, 0x194 = 404 decimal (VVL-404 camera)
+#define BT832_CAM_STATUS 56
+ #define BT832_56_CAMERA_PRESENT 0x20
+//Camera Setups:
+#define BT832_CAM_SETUP0 57
+#define BT832_CAM_SETUP1 58
+#define BT832_CAM_SETUP2 59
+#define BT832_CAM_SETUP3 60
+// System:
+#define BT832_DEFCOR 61
+#define BT832_VP_TESTCONTROL1 62
+#define BT832_DEVICE_ID 63
+# define BT832_DEVICE_ID__31 0x31 // Bt832 has ID 0x31
+
+/* STMicroelectronivcs VV5404 camera module
+ i2c: 0x20: sensor address
+ i2c: 0xa0: eeprom for ccd defect map
+ */
+#define VV5404_device_h 0x00 // 0x19
+#define VV5404_device_l 0x01 // 0x40
+#define VV5404_status0 0x02
+#define VV5404_linecountc 0x03 // current line counter
+#define VV5404_linecountl 0x04
+#define VV5404_setup0 0x10
+#define VV5404_setup1 0x11
+#define VV5404_setup2 0x12
+#define VV5404_setup4 0x14
+#define VV5404_setup5 0x15
+#define VV5404_fine_h 0x20 // fine exposure
+#define VV5404_fine_l 0x21
+#define VV5404_coarse_h 0x22 //coarse exposure
+#define VV5404_coarse_l 0x23
+#define VV5404_gain 0x24 // ADC pre-amp gain setting
+#define VV5404_clk_div 0x25
+#define VV5404_cr 0x76 // control register
+#define VV5404_as0 0x77 // ADC setup register
+
+
+// IOCTL
+#define BT832_HEXDUMP _IOR('b',1,int)
+#define BT832_REATTACH _IOR('b',2,int)
diff -Nur bttv-0.7.98/driver/bttv-cards.c bttv0798/driver/bttv-cards.c
--- bttv-0.7.98/driver/bttv-cards.c Fri Sep 13 13:41:17 2002
+++ bttv0798/driver/bttv-cards.c Sun Sep 15 21:21:16 2002
@@ -37,6 +37,7 @@
#include "bttvp.h"
#include "tuner.h"
+#include "bt832.h"
/* fwd decl */
static void boot_msp34xx(struct bttv *btv, int pin);
@@ -147,6 +148,7 @@
{ 0x001c11bd, BTTV_PINNACLE, "Pinnacle PCTV Sat" },
{ 0x3000121a, BTTV_VOODOOTV_FM, "3Dfx VoodooTV FM/ VoodooTV 200" },
+ { 0x3060121a, BTTV_STB2, "3Dfx VoodooTV 100/ STB OEM" },
{ 0x3000144f, BTTV_MAGICTVIEW063, "(Askey Magic/others) TView99 CPH06x" },
{ 0x3002144f, BTTV_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH05x" },
@@ -720,7 +722,7 @@
},{
/* ---- card 0x28 ---------------------------------- */
- name: "STB TV PCI FM, Gateway P/N 6000704 (bt878)",
+ name: "STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100",
video_inputs: 3,
audio_inputs: 1,
tuner: 0,
@@ -866,8 +868,9 @@
GPIO19: U4.A1
GPIO20: U5.A1 (second hef4052bt)
GPIO21: U4.nEN
+ GPIO22: BT832 Reset Line
GPIO23: A5,A0, U5,nEN
- Note: At i2c=0x8a is a Bt832 chip (currently misdected as some tda chip!)
+ Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
*/
},{
name: "Eagle Wireless Capricorn2 (bt878A)",
@@ -1616,10 +1619,16 @@
terratec_active_radio_upgrade(btv);
break;
case BTTV_MAGICTVIEW061:
- if (btv->cardid == 0x4002144f) {
+ if (btv->cardid == 0x3002144f) {
btv->has_radio=1;
printk("bttv%d: radio detected by subsystem id (CPH05x)\n",btv->nr);
}
+ case BTTV_STB2:
+ if (btv->cardid == 0x3060121a) {
+ // Fix up entry for 3DFX VoodooTV 100, which is an OEM STB card variant.
+ btv->has_radio=0;
+ btv->tuner_type=TUNER_TEMIC_NTSC;
+ }
break;
}
@@ -1672,6 +1681,32 @@
if (bttv_tvcards[btv->type].audio_hook)
btv->audio_hook=bttv_tvcards[btv->type].audio_hook;
+ /* detect Bt832 chip for quartzsight digital camera */
+ if((bttv_I2CRead(btv, I2C_BT832_ALT1, "Bt832") >=0) ||
+ (bttv_I2CRead(btv, I2C_BT832_ALT2, "Bt832") >=0)) {
+ int outbits,databits;
+ request_module("bt832");
+
+ bttv_call_i2c_clients(btv, BT832_HEXDUMP, NULL);
+
+ printk("Reset Bt832 (0x400000 for Pixelview 4E)\n");
+ btwrite(0, BT848_GPIO_DATA);
+ outbits = btread(BT848_GPIO_OUT_EN);
+ databits= btread(BT848_GPIO_DATA);
+ btwrite(0x400000, BT848_GPIO_OUT_EN);
+ udelay(5);
+ btwrite(0x400000, BT848_GPIO_DATA);
+ udelay(5);
+ btwrite(0, BT848_GPIO_DATA);
+ udelay(5);
+ btwrite(outbits, BT848_GPIO_OUT_EN);
+ btwrite(databits, BT848_GPIO_DATA);
+
+ // bt832 on pixelview changes from i2c 0x8a to 0x88 after
+ // being reset as above. So we must follow by this:
+ bttv_call_i2c_clients(btv, BT832_REATTACH, NULL);
+ }
+
/* try to detect audio/fader chips */
if (!bttv_tvcards[btv->type].no_msp34xx &&
bttv_I2CRead(btv, I2C_MSP3400, "MSP34xx") >=0) {
diff -Nur bttv-0.7.98/driver/bttv.h bttv0798/driver/bttv.h
--- bttv-0.7.98/driver/bttv.h Fri Sep 13 11:26:16 2002
+++ bttv0798/driver/bttv.h Sun Sep 15 18:15:28 2002
@@ -96,6 +96,8 @@
/* i2c address list */
#define I2C_TSA5522 0xc2
#define I2C_TDA7432 0x8a
+#define I2C_BT832_ALT1 0x88
+#define I2C_BT832_ALT2 0x8a // alternate setting
#define I2C_TDA8425 0x82
#define I2C_TDA9840 0x84
#define I2C_TDA9850 0xb6 /* also used by 9855,9873 */
diff -Nur bttv-0.7.98/tools/detect.c bttv0798/tools/detect.c
--- bttv-0.7.98/tools/detect.c Fri Sep 13 11:26:16 2002
+++ bttv0798/tools/detect.c Sun Sep 15 21:18:32 2002
@@ -25,7 +25,9 @@
{ 0x34, "Hauppauge IR (pic16c54 external)" },
{ 0x80, "msp34xx/tea6300 sound processor" },
{ 0x82, "TDA8425 audio chip" },
- { 0x86, "TDA9885/TDA9886/TDA9887 tv and sound demodulator" }
+ { 0x86, "TDA9885/TDA9886/TDA9887 tv and sound demodulator" },
+ { 0x88, "Bt832" },
+ { 0x8a, "TDA7432 or BT832" },
{ 0xa0, "eeprom (bt878, Hauppauge-848)" },
{ 0xb6, "TDA9850/TDA9873/etc. audio chip" },
{ 0xc0, "tuner" },