bttv-0.9.3, v4l2 sound, i2c experiment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Hi,

vidiocstuner-patch fixes broken v4l2 tv sound selection.
At least msp3400 dislikes any empty video_audio fields.

audiohook-patch is work-in-progress. It is what I currently run, running
with ~1 MHz i2c clock and i2c-algo-biths from CVS. It also moves
btv->audio_hooks within btv_call_i2c_clients, renamed btv_call_clients
now. Sometimes sound does not unmute after tune.. Let me know what you
think, I'll clean it up once new i2c is stabilized.

BTW: i2c CVS has gone out-of-sync with 2.5.x changes, hopefully we get
this fixed within a week.

-- 
  Kyösti Mälkki
  kmalkki@xxxxxxxxx
Only in orig/bttv-0.9.3/: .bp.2.5.30_bttv-0.9.x
Only in orig/bttv-0.9.3/: .bp.20_videobuf
diff -ur orig/bttv-0.9.3/bttv-cards.c bttv-0.9.3/bttv-cards.c
--- orig/bttv-0.9.3/bttv-cards.c	Tue Dec 10 22:45:40 2002
+++ bttv-0.9.3/bttv-cards.c	Sat Dec 28 21:05:48 2002
@@ -1809,7 +1809,7 @@
 		btv->tuner_type = 33;
 		if (autoload)
 			request_module("tda9887");
-		bttv_call_i2c_clients(btv,AUDC_CONFIG_PINNACLE,&id);
+		bttv_call_clients(btv,AUDC_CONFIG_PINNACLE,&id);
 	}
 }
 
@@ -2022,7 +2022,7 @@
 	if (-1 != tuner[btv->nr])
 		btv->tuner_type = tuner[btv->nr];
 	if (btv->tuner_type != -1)
-		bttv_call_i2c_clients(btv,TUNER_SET_TYPE,&btv->tuner_type);
+		bttv_call_clients(btv,TUNER_SET_TYPE,&btv->tuner_type);
 	printk("bttv%d: using tuner=%d\n",btv->nr,btv->tuner_type);
 
 	if (bttv_tvcards[btv->type].has_radio)
@@ -2497,7 +2497,7 @@
 	}
 
 	request_module("bt832");
-	bttv_call_i2c_clients(btv, BT832_HEXDUMP, NULL);
+	bttv_call_clients(btv, BT832_HEXDUMP, NULL);
 
 	printk("bttv%d: Reset Bt832 [line=0x%x]\n",btv->nr,resetbit);
 	btwrite(0, BT848_GPIO_DATA);
@@ -2514,7 +2514,7 @@
 
 	// 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);
+	bttv_call_clients(btv, BT832_REATTACH, NULL);
 }
 
 /* ----------------------------------------------------------------------- */
Binary files orig/bttv-0.9.3/bttv-cards.o and bttv-0.9.3/bttv-cards.o differ
diff -ur orig/bttv-0.9.3/bttv-driver.c bttv-0.9.3/bttv-driver.c
--- orig/bttv-0.9.3/bttv-driver.c	Tue Dec 10 23:01:13 2002
+++ bttv-0.9.3/bttv-driver.c	Fri Jan 10 23:25:13 2003
@@ -43,7 +43,7 @@
 struct bttv bttvs[BTTV_MAX];
 
 unsigned int bttv_debug = 0;
-unsigned int bttv_verbose = 1;
+unsigned int bttv_verbose = 0;
 unsigned int bttv_gpio = 0;
 
 /* config variables */
@@ -827,44 +827,45 @@
 	"audio: intern", "audio: off"
 };
 
-static int
+int
 audio_mux(struct bttv *btv, int mode)
 {
-	int val,mux,i2c_mux,signal;
+	int val,mux;
 	
+	btv->audio &= AUDIO_MUTE;
+	btv->audio |= mode;
+
+	mux = (btv->audio & AUDIO_MUTE) ? AUDIO_OFF : btv->audio;
+
 	btaor(bttv_tvcards[btv->type].gpiomask,
 	      ~bttv_tvcards[btv->type].gpiomask,BT848_GPIO_OUT_EN);
+	val = bttv_tvcards[btv->type].audiomux[mux];
+	btaor(val,~bttv_tvcards[btv->type].gpiomask, BT848_GPIO_DATA);
+	if (bttv_gpio)
+		bttv_gpio_tracking(btv,audio_modes[mux]);
+
+	vprintk("bttv%d: amux: mode=%d audio=%d mux=%d\n",
+	       btv->nr, mode, btv->audio, mux );
+
+	bttv_call_clients(btv,AUDC_SET_INPUT,&mux);
+	return 0;
+}
+
+int
+audio_mute(struct bttv *btv, int mute)
+{
+	int signal;	
+
 	signal = btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC;
 
-	switch (mode) {
-	case AUDIO_MUTE:
+	if ((mute) || (btv->opt_automute && !signal && !btv->radio_user)) {
 		btv->audio |= AUDIO_MUTE;
-		break;
-	case AUDIO_UNMUTE:
+	}
+	else {
 		btv->audio &= ~AUDIO_MUTE;
-		break;
-	case AUDIO_TUNER:
-	case AUDIO_RADIO:
-	case AUDIO_EXTERN:
-	case AUDIO_INTERN:
-		btv->audio &= AUDIO_MUTE;
-		btv->audio |= mode;
-	}
-	i2c_mux = mux = (btv->audio & AUDIO_MUTE) ? AUDIO_OFF : btv->audio;
-	if (btv->opt_automute && !signal && !btv->radio_user)
-		mux = AUDIO_OFF;
-#if 0
-	printk("bttv%d: amux: mode=%d audio=%d signal=%s mux=%d/%d irq=%s\n",
-	       btv->nr, mode, btv->audio, signal ? "yes" : "no",
-	       mux, i2c_mux, in_interrupt() ? "yes" : "no");
-#endif
+	}
+	audio_mux(btv, btv->audio);
 
-	val = bttv_tvcards[btv->type].audiomux[mux];
-	btaor(val,~bttv_tvcards[btv->type].gpiomask, BT848_GPIO_DATA);
-	if (bttv_gpio)
-		bttv_gpio_tracking(btv,audio_modes[mux]);
-	if (!in_interrupt())
-		bttv_call_i2c_clients(btv,AUDC_SET_INPUT,&(i2c_mux));
 	return 0;
 }
 
@@ -876,9 +877,7 @@
 	memset(&c,0,sizeof(c));
 	c.norm    = btv->tvnorm;
 	c.channel = btv->input;
-	bttv_call_i2c_clients(btv,VIDIOCSCHAN,&c);
-	if (btv->type == BTTV_VOODOOTV_FM)
-		bttv_tda9880_setnorm(btv,c.norm);
+	bttv_call_clients(btv,VIDIOCSCHAN,&c);
 }
 
 static int
@@ -988,9 +987,7 @@
 		return -EINVAL;
 	if (i >= 4 && i <= 8) {
 		memset(&va,0,sizeof(va));
-		bttv_call_i2c_clients(btv, VIDIOCGAUDIO, &va);
-		if (btv->audio_hook)
-			btv->audio_hook(btv,&va,0);
+		bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 	}
 	switch (c->id) {
 	case V4L2_CID_BRIGHTNESS:
@@ -1055,9 +1052,7 @@
 		return -EINVAL;
 	if (i >= 4 && i <= 8) {
 		memset(&va,0,sizeof(va));
-		bttv_call_i2c_clients(btv, VIDIOCGAUDIO, &va);
-		if (btv->audio_hook)
-			btv->audio_hook(btv,&va,0);
+		bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 	}
 	switch (c->id) {
 	case V4L2_CID_BRIGHTNESS:
@@ -1075,10 +1070,8 @@
 	case V4L2_CID_AUDIO_MUTE:
 		if (c->value) {
 			va.flags |= VIDEO_AUDIO_MUTE;
-			audio_mux(btv, AUDIO_MUTE);
 		} else {
 			va.flags &= ~VIDEO_AUDIO_MUTE;
-			audio_mux(btv, AUDIO_UNMUTE);
 		}
 		break;
 
@@ -1126,9 +1119,7 @@
 		return -EINVAL;
 	}
 	if (i >= 4 && i <= 8) {
-		bttv_call_i2c_clients(btv, VIDIOCSAUDIO, &va);
-		if (btv->audio_hook)
-			btv->audio_hook(btv,&va,1);
+		bttv_call_clients(btv, VIDIOCSAUDIO, &va);
 	}
 	return 0;
 }
@@ -1359,9 +1350,7 @@
 		unsigned long *freq = arg;
 		down(&btv->lock);
 		btv->freq=*freq;
-		bttv_call_i2c_clients(btv,VIDIOCSFREQ,freq);
-		if (btv->has_matchbox && btv->radio_user)
-			tea5757_set_freq(btv,*freq);
+		bttv_call_clients(btv,VIDIOCSFREQ,freq);
 		up(&btv->lock);
 		return 0;
 	}
@@ -1378,7 +1367,7 @@
 		v->flags     = VIDEO_TUNER_PAL|VIDEO_TUNER_NTSC|VIDEO_TUNER_SECAM;
 		v->mode      = btv->tvnorm;
 		v->signal    = (btread(BT848_DSTATUS)&BT848_DSTATUS_HLOC) ? 0xFFFF : 0;
-		bttv_call_i2c_clients(btv,cmd,v);
+		bttv_call_clients(btv,cmd,v);
 		return 0;
 	}
 	case VIDIOCSTUNER:
@@ -1392,7 +1381,7 @@
 
 		down(&btv->lock);
 		set_tvnorm(btv,v->mode);
-		bttv_call_i2c_clients(btv,cmd,v);
+		bttv_call_clients(btv,cmd,v);
 		up(&btv->lock);
 		return 0;
 	}
@@ -1453,12 +1442,7 @@
 		v->mode  = VIDEO_SOUND_MONO;
 
 		down(&btv->lock);
-		bttv_call_i2c_clients(btv,cmd,v);
-
-		/* card specific hooks */
-		if (btv->audio_hook)
-			btv->audio_hook(btv,v,0);
-
+		bttv_call_clients(btv,cmd,v);
 		up(&btv->lock);
 		return 0;
 	}
@@ -1471,13 +1455,7 @@
 			return -EINVAL;
 
 		down(&btv->lock);
-		audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE);
-		bttv_call_i2c_clients(btv,cmd,v);
-
-		/* card specific hooks */
-		if (btv->audio_hook)
-			btv->audio_hook(btv,v,1);
-		
+		bttv_call_clients(btv,cmd,v);
 		up(&btv->lock);
 		return 0;
 	}
@@ -1599,9 +1577,7 @@
 			/* Hmmm ... */
 			struct video_audio va;
 			memset(&va, 0, sizeof(struct video_audio));
-			bttv_call_i2c_clients(btv, VIDIOCGAUDIO, &va);
-			if (btv->audio_hook)
-				btv->audio_hook(btv,&va,0);
+			bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 			if(va.mode & VIDEO_SOUND_STEREO)
 				t->rxsubchans |= V4L2_TUNER_SUB_STEREO;
 			if(va.mode & VIDEO_SOUND_LANG1)
@@ -1625,6 +1601,7 @@
 		{
 			struct video_audio va;
 			memset(&va, 0, sizeof(struct video_audio));
+			bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 			if (t->audmode == V4L2_TUNER_MODE_MONO)
 				va.mode = VIDEO_SOUND_MONO;
 			else if (t->audmode == V4L2_TUNER_MODE_STEREO)
@@ -1633,9 +1610,7 @@
 				va.mode = VIDEO_SOUND_LANG1;
 			else if (t->audmode == V4L2_TUNER_MODE_LANG2)
 				va.mode = VIDEO_SOUND_LANG2;
-			bttv_call_i2c_clients(btv, VIDIOCSAUDIO, &va);
-			if (btv->audio_hook)
-				btv->audio_hook(btv,&va,1);
+			bttv_call_clients(btv, VIDIOCSAUDIO, &va);
 		}
 		up(&btv->lock);
 		return 0;
@@ -1660,9 +1635,7 @@
 			return -EINVAL;
 		down(&btv->lock);
 		btv->freq = f->frequency;
-		bttv_call_i2c_clients(btv,VIDIOCSFREQ,&btv->freq);
-		if (btv->has_matchbox && btv->radio_user)
-			tea5757_set_freq(btv,btv->freq);
+		bttv_call_clients(btv,VIDIOCSFREQ,&btv->freq);
 		up(&btv->lock);
 		return 0;
 	}
@@ -2523,9 +2496,7 @@
 		if (i >= 4 && i <= 8) {
 			struct video_audio va;
 			memset(&va,0,sizeof(va));
-			bttv_call_i2c_clients(btv, VIDIOCGAUDIO, &va);
-			if (btv->audio_hook)
-				btv->audio_hook(btv,&va,0);
+			bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 			switch (bttv_ctls[i].id) {
 			case V4L2_CID_AUDIO_VOLUME:
 				if (!(va.flags & VIDEO_AUDIO_VOLUME))
@@ -2835,9 +2806,8 @@
 	file->private_data = btv;
 
 	i2c_vidiocschan(btv);
-	bttv_call_i2c_clients(btv,VIDIOCSFREQ,&v);
-        bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
-	audio_mux(btv,AUDIO_RADIO);
+	bttv_call_clients(btv,VIDIOCSFREQ,&v);
+        bttv_call_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
 
 	up(&btv->lock);
         return 0;
@@ -2882,7 +2852,7 @@
                    russia:         65.0 MHz - 108.0 MHz */
                 v->rangelow=(int)(65*16);
                 v->rangehigh=(int)(108*16);
-                bttv_call_i2c_clients(btv,cmd,v);
+                bttv_call_clients(btv,cmd,v);
                 return 0;
         }
         case VIDIOCSTUNER:
@@ -3206,8 +3176,8 @@
                 if ((astat & BT848_INT_RISCI)  &&  (stat & (1<<28)))
 			bttv_irq_switch_fields(btv);
 
-		if ((astat & BT848_INT_HLOCK)  &&  btv->opt_automute)
-			audio_mux(btv, -1);
+		//if ((astat & BT848_INT_HLOCK)  &&  btv->opt_automute)
+		//	audio_mux(btv, -1);
 
 		if (astat & (BT848_INT_SCERR|BT848_INT_OCERR)) {
 			printk(KERN_INFO "bttv%d: %s%s @ %08x,",btv->nr,
@@ -3437,7 +3407,7 @@
 	bt848_contrast(btv,32768);
 	bt848_hue(btv,32768);
 	bt848_sat(btv,32768);
-	audio_mux(btv,AUDIO_MUTE);
+	audio_mute(btv,1);
 	set_input(btv,0);
 
 	/* everything is fine */
@@ -3475,7 +3445,7 @@
 
         /* unregister i2c_bus */
 	if (0 == btv->i2c_rc)
-		i2c_bit_del_bus(&btv->i2c_adap);
+		i2c_biths_del_bus(&btv->i2c_adap);
 
 	/* unregister video4linux */
         if (btv->video_dev.minor!=-1)
Only in bttv-0.9.3/: bttv-driver.c.orig
Only in bttv-0.9.3/: bttv-driver.c~~
Binary files orig/bttv-0.9.3/bttv-driver.o and bttv-0.9.3/bttv-driver.o differ
diff -ur orig/bttv-0.9.3/bttv-if.c bttv-0.9.3/bttv-if.c
--- orig/bttv-0.9.3/bttv-if.c	Tue Dec 10 22:45:40 2002
+++ bttv-0.9.3/bttv-if.c	Sun Dec 29 15:52:38 2002
@@ -36,10 +36,11 @@
 #include "bttvp.h"
 #include "tuner.h"
 
-static struct i2c_algo_bit_data bttv_i2c_algo_template;
+static struct i2c_algo_biths_data bttv_i2c_algo_template;
 static struct i2c_adapter bttv_i2c_adap_template;
 static struct i2c_client bttv_i2c_client_template;
 
+
 EXPORT_SYMBOL(bttv_get_cardinfo);
 EXPORT_SYMBOL(bttv_get_pcidev);
 EXPORT_SYMBOL(bttv_get_id);
@@ -152,48 +153,6 @@
 /* ----------------------------------------------------------------------- */
 /* I2C functions                                                           */
 
-void bttv_bit_setscl(void *data, int state)
-{
-	struct bttv *btv = (struct bttv*)data;
-
-	if (state)
-		btv->i2c_state |= 0x02;
-	else
-		btv->i2c_state &= ~0x02;
-	btwrite(btv->i2c_state, BT848_I2C);
-	btread(BT848_I2C);
-}
-
-void bttv_bit_setsda(void *data, int state)
-{
-	struct bttv *btv = (struct bttv*)data;
-
-	if (state)
-		btv->i2c_state |= 0x01;
-	else
-		btv->i2c_state &= ~0x01;
-	btwrite(btv->i2c_state, BT848_I2C);
-	btread(BT848_I2C);
-}
-
-static int bttv_bit_getscl(void *data)
-{
-	struct bttv *btv = (struct bttv*)data;
-	int state;
-	
-	state = btread(BT848_I2C) & 0x02 ? 1 : 0;
-	return state;
-}
-
-static int bttv_bit_getsda(void *data)
-{
-	struct bttv *btv = (struct bttv*)data;
-	int state;
-
-	state = btread(BT848_I2C) & 0x01;
-	return state;
-}
-
 static void bttv_inc_use(struct i2c_adapter *adap)
 {
 	MOD_INC_USE_COUNT;
@@ -216,7 +175,7 @@
 		}
 	}
 	if (btv->tuner_type != -1)
-		bttv_call_i2c_clients(btv,TUNER_SET_TYPE,&btv->tuner_type);
+		bttv_call_clients(btv,TUNER_SET_TYPE,&btv->tuner_type);
         if (bttv_verbose)
 		printk("bttv%d: i2c attach [client=%s,%s]\n",btv->nr,
 		       client->name, (i < I2C_CLIENTS_MAX) ?  "ok" : "failed");
@@ -240,7 +199,7 @@
         return 0;
 }
 
-void bttv_call_i2c_clients(struct bttv *btv, unsigned int cmd, void *arg)
+void bttv_call_clients(struct bttv *btv, unsigned int cmd, void *arg)
 {
 	int i;
 	
@@ -252,23 +211,83 @@
 		btv->i2c_clients[i]->driver->command(
 			btv->i2c_clients[i],cmd,arg);
 	}
+
+	switch (cmd) {
+	    case VIDIOCGAUDIO:
+		    if (btv->audio_hook)
+			    btv->audio_hook(btv, arg, 0);
+		    break;
+	    case VIDIOCSAUDIO:
+	    {
+		    struct video_audio *v = arg;
+
+		    audio_mute(btv, (v->flags & VIDEO_AUDIO_MUTE) ? 1 : 0);
+		    if (btv->audio_hook)
+			    btv->audio_hook(btv, arg, 1);
+		    break;
+	    }
+	    case VIDIOCSFREQ:
+		    if (btv->has_matchbox && btv->radio_user) {
+			    unsigned long *freq = arg;
+			    tea5757_set_freq(btv, *freq);
+		    }
+		    break;
+	    case VIDIOCSCHAN:
+		    if (btv->type == BTTV_VOODOOTV_FM) {
+			    struct video_channel *c = arg;
+			    bttv_tda9880_setnorm(btv,c->norm);
+		    }
+		    break;
+	    case AUDC_SET_RADIO:
+		    audio_mux(btv,AUDIO_RADIO);
+		    break;
+	}
 }
 
 void bttv_i2c_call(unsigned int card, unsigned int cmd, void *arg)
 {
 	if (card >= bttv_num)
 		return;
-	bttv_call_i2c_clients(&bttvs[card], cmd, arg);
+	bttv_call_clients(&bttvs[card], cmd, arg);
 }
 
-static struct i2c_algo_bit_data bttv_i2c_algo_template = {
-	.setsda  = bttv_bit_setsda,
-	.setscl  = bttv_bit_setscl,
-	.getsda  = bttv_bit_getsda,
-	.getscl  = bttv_bit_getscl,
-	.udelay  = 16,
-	.mdelay  = 10,
-	.timeout = 200,
+
+static _HS_ATTR_ void bttv_bit_setstate(struct i2c_algo_biths_data *adap)
+{
+	adap->hw_state &= ~(BT848_I2C_SCL | BT848_I2C_SDA);
+	if (adap->ctrl & _HS_SCL)
+		adap->hw_state |= BT848_I2C_SCL;
+
+	if (adap->ctrl & _HS_SDA)
+		adap->hw_state |= BT848_I2C_SDA;
+}
+
+static _HS_ATTR_ void bttv_bit_setscl(void *bt848_i2c, int hw_state)
+{	
+	writel(hw_state, bt848_i2c);
+	readl(bt848_i2c);
+}
+#define bttv_bit_setsda bttv_bit_setscl
+
+static _HS_ATTR_ int bttv_bit_getscl(void *bt848_i2c)
+{
+	return (readl(bt848_i2c) & BT848_I2C_SCL);
+}
+
+static _HS_ATTR_ int bttv_bit_getsda(void *bt848_i2c)
+{
+	return (readl(bt848_i2c) & BT848_I2C_SDA);
+}
+
+#define xloop_kHz(x) (x * 0x10c6 / 4000)
+static struct i2c_algo_biths_data bttv_i2c_algo_template = {
+	setstate:  bttv_bit_setstate,
+	setsda:  bttv_bit_setsda,
+	setscl:  bttv_bit_setscl,
+	getsda:  bttv_bit_getsda,
+	getscl:  bttv_bit_getscl,
+	xloops:  xloop_kHz(1000),
+	timeout: HZ/100,
 };
 
 static struct i2c_adapter bttv_i2c_adap_template = {
@@ -332,7 +351,6 @@
 void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr)
 {
 	int i;
-        
 	if (bttv_I2CWrite(btv, addr, 0, -1, 0)<0) {
 		printk(KERN_WARNING "bttv: readee error\n");
 		return;
@@ -352,21 +370,21 @@
 	memcpy(&btv->i2c_adap, &bttv_i2c_adap_template,
 	       sizeof(struct i2c_adapter));
 	memcpy(&btv->i2c_algo, &bttv_i2c_algo_template,
-	       sizeof(struct i2c_algo_bit_data));
+	       sizeof(struct i2c_algo_biths_data));
 	memcpy(&btv->i2c_client, &bttv_i2c_client_template,
 	       sizeof(struct i2c_client));
 
 	sprintf(btv->i2c_adap.name+strlen(btv->i2c_adap.name),
 		" #%d", btv->nr);
-        btv->i2c_algo.data = btv;
+
+	btv->i2c_algo.hw_data = btv->bt848_mmio + BT848_I2C;
+	btv->i2c_algo.hw_state = btread(BT848_I2C);
+
         btv->i2c_adap.data = btv;
         btv->i2c_adap.algo_data = &btv->i2c_algo;
         btv->i2c_client.adapter = &btv->i2c_adap;
 
-	bttv_bit_setscl(btv,1);
-	bttv_bit_setsda(btv,1);
-
-	btv->i2c_rc = i2c_bit_add_bus(&btv->i2c_adap);
+	btv->i2c_rc = i2c_biths_add_bus(&btv->i2c_adap);
 	return btv->i2c_rc;
 }
 
Binary files orig/bttv-0.9.3/bttv-if.o and bttv-0.9.3/bttv-if.o differ
Binary files orig/bttv-0.9.3/bttv-risc.o and bttv-0.9.3/bttv-risc.o differ
Binary files orig/bttv-0.9.3/bttv-vbi.o and bttv-0.9.3/bttv-vbi.o differ
diff -ur orig/bttv-0.9.3/bttv.h bttv-0.9.3/bttv.h
--- orig/bttv-0.9.3/bttv.h	Tue Dec 10 22:45:40 2002
+++ bttv-0.9.3/bttv.h	Sat Dec 28 18:26:00 2002
@@ -243,9 +243,7 @@
 
 /* i2c */
 #define I2C_CLIENTS_MAX 16
-extern void bttv_bit_setscl(void *data, int state);
-extern void bttv_bit_setsda(void *data, int state);
-extern void bttv_call_i2c_clients(struct bttv *btv, unsigned int cmd, void *arg);
+extern void bttv_call_clients(struct bttv *btv, unsigned int cmd, void *arg);
 extern int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for);
 extern int bttv_I2CWrite(struct bttv *btv, unsigned char addr, unsigned char b1,
 			 unsigned char b2, int both);
Binary files orig/bttv-0.9.3/bttv.o and bttv-0.9.3/bttv.o differ
diff -ur orig/bttv-0.9.3/bttvp.h bttv-0.9.3/bttvp.h
--- orig/bttv-0.9.3/bttvp.h	Tue Dec 10 22:57:21 2002
+++ bttv-0.9.3/bttvp.h	Sat Dec 28 18:26:00 2002
@@ -29,7 +29,7 @@
 #include <linux/types.h>
 #include <linux/wait.h>
 #include <linux/i2c.h>
-#include <linux/i2c-algo-bit.h>
+#include <linux/i2c-algo-biths.h>
 #include <linux/videodev.h>
 #include <linux/pci.h>
 #include <asm/scatterlist.h>
@@ -268,7 +268,7 @@
 	
 	/* i2c layer */
 	struct i2c_adapter         i2c_adap;
-	struct i2c_algo_bit_data   i2c_algo;
+	struct i2c_algo_biths_data i2c_algo;
 	struct i2c_client          i2c_client;
 	int                        i2c_state, i2c_rc;
 	struct i2c_client         *i2c_clients[I2C_CLIENTS_MAX];
Only in orig/bttv-0.9.3/: log
Binary files orig/bttv-0.9.3/video-buf.o and bttv-0.9.3/video-buf.o differ
--- bttv-driver.c.orig	Fri Jan 10 23:24:04 2003
+++ bttv-driver.c	Fri Jan 10 23:25:13 2003
@@ -1601,6 +1601,7 @@
 		{
 			struct video_audio va;
 			memset(&va, 0, sizeof(struct video_audio));
+			bttv_call_clients(btv, VIDIOCGAUDIO, &va);
 			if (t->audmode == V4L2_TUNER_MODE_MONO)
 				va.mode = VIDEO_SOUND_MONO;
 			else if (t->audmode == V4L2_TUNER_MODE_STEREO)

[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux