[linux-dvb] Pinnacle 300i, please try this patch

Hartmut Hackmann hartmut.hackmann at t-online.de
Fri Feb 17 22:43:52 CET 2006


Hi,

hermann pitton wrote:
> Hi Rainer,
> 
> Am Freitag, den 17.02.2006, 16:50 +0100 schrieb Rainer Schubert:
> 
>>On Thu, 16 Feb 2006, hermann pitton wrote:
>>
>>
>>>Hi Guys,
>>
>>Hi Hermann,
>>
>>[...]
>>
>>>>Isn't 2.6.14 recent enough ?
>>>
>>>yes, even 2.6.12 should be recent enough.
>>
>>I thought so as I have got a working setup with 2.6.12.5 kernel.
> 
> 
> yeah, but even the recent mercurial with the patch should work with
> 2.6.12 was meant.
> 
> 
>>[...]
>>
>>>It produces only an offset of 26 lines here, caused by the new Elsa
>>>card.
>>
>>It does not (yet) produce anything different from what it did without
>>the patch. :-)
>>
>>
>>>>Looking at the log I produced it seems the patches to tuner.c have been
>>>>rejected.
>>>
>>>Only an offset of two lines caused by the new #ifdef for the XCeive
>>>tuner. This part is needed to set the mt2050 in digital mode again.
>>
>>Hmmmm...
> 
> 
> Yes, that fixes the V4L2_TUNER_DIGITAL_TV mode for the 300i beside the
> problems with the IR chip and that now the first register of the tda9887
> is fully reprogrammed and not only bit 7 of port2. 
> 
> 
>>>>>Please apply the changes manually - at least the one for the pinnacle 300i.
>>>>>It is a major portion of the trick. Also please keep in mind that the tda9887
>>>>>module needs to be loaded manually before tuner. I have a patch for this
>>>>>pending.
>>>>
>>>>Tim sent his patched version which I will try this afternoon. Thanks Tim !
>>>>
>>>>
>>>>>If you have inconsistent module versions, i guess the reason is that the
>>>>>kernel is older than 2.6.12. In this case, the dvb modules will not be
>>>>>updated.
>>>>
>>>>It is version 2.6.14 and the inconsistancy was with versions of symbols in
>>>>ir_kbd-something.
>>>
>>>Try modprobe -r to the related modules. This will also remove the old
>>>ir-common.
>>
>>Right. But I prefer a reboot, to be sure all modules a loaded in the right
>>order.
> 
> 
> Take care and remember the problems with the tda8290 auto detection
> code. It scans on the same address range than the tda9887 uses and with
> this card the chip detection goes wrong ...
> 
> Until Hartmut provides the fix he is thinking about, you have to
> modprobe -r saa7134-dvb/saa7134, tda9887 and tuner. Then modprobe
> tda9887 at first!
> 
> 
>>[...]
>>
>>>Since it seems to produce problems for more people, a regenerated
>>>version of Hartmut's patch against the recent "hg clone
>>>http://linuxtv.org/hg/v4l-dvb" is attached.
>>
>>Thank you Hermann !
>>
>>
>>>It should do if placed into the mercurial v4l-dvb top level directory
>>>and there
>>>"patch --dry-run -p 1 < pinnacle300i-regenerated-20060216.patch".
>>>If so, drop the --dry-run and apply. I would like to see the first
>>>saa7134-dvb hybrid card alive again everywhere :)
>>
>>Same here as the card performs beautifully under Windows and so seems
>>to be quite a solid bit of hardware.
> 
> 
> Yes, might be, but I think it was quite tricky even for Gerd to get the
> card running, some i2c quirks in saa7134-i2c are reminders ...
> 
> Seems it causes more work for Hartmut now and he might even fork out
> with a extra mercurial version for the card for a while to have proper
> testing, stay tuned :)
> 
> Cheers,
> Hermann
> 
I will attach the patch that hopefully fixes the module load order issue.
I haven't updated my workspace for a while, so it might be that it does not
apply out of the box.
The main thing is in the tda8290.c. If probing for the tda8290 fails, the
code now assumes it is a tda9886 and restores its power on defaults.

Best regards
    Hartmut
-------------- next part --------------
diff -uNr v4l-dvb.old/linux/drivers/media/video/saa7134/saa7134-cards.c v4l-dvb/linux/drivers/media/video/saa7134/saa7134-cards.c
--- v4l-dvb.old/linux/drivers/media/video/saa7134/saa7134-cards.c	2006-02-14 00:55:21.000000000 +0100
+++ v4l-dvb/linux/drivers/media/video/saa7134/saa7134-cards.c	2006-02-14 22:22:00.000000000 +0100
@@ -2189,7 +2189,7 @@
 		.radio_type     = UNSET,
 		.tuner_addr	= 0x61,
 		.radio_addr	= ADDR_UNSET,
-		.tda9887_conf   = TDA9887_PRESENT,
+		.tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE,
 		.mpeg           = SAA7134_MPEG_DVB,
 		.inputs = {{
 			.name   = name_tv,
@@ -2213,7 +2213,7 @@
 		.radio_type     = UNSET,
 		.tuner_addr	= 0x61,
 		.radio_addr	= ADDR_UNSET,
-		.tda9887_conf   = TDA9887_PRESENT,
+		.tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE,
 		.mpeg           = SAA7134_MPEG_DVB,
 		.inputs = {{
 			.name   = name_tv,
diff -uNr v4l-dvb.old/linux/drivers/media/video/tda8290.c v4l-dvb/linux/drivers/media/video/tda8290.c
--- v4l-dvb.old/linux/drivers/media/video/tda8290.c	2006-02-14 00:55:21.000000000 +0100
+++ v4l-dvb/linux/drivers/media/video/tda8290.c	2006-02-14 01:00:26.000000000 +0100
@@ -589,9 +589,10 @@
 
 int tda8290_probe(struct i2c_client *c)
 {
-	unsigned char soft_reset[]  = { 0x00, 0x00 };
-	unsigned char easy_mode_b[] = { 0x01, 0x02 };
-	unsigned char easy_mode_g[] = { 0x01, 0x04 };
+	unsigned char soft_reset[]   = { 0x00, 0x00 };
+	unsigned char easy_mode_b[]  = { 0x01, 0x02 };
+	unsigned char easy_mode_g[]  = { 0x01, 0x04 };
+	unsigned char restore_9886[] = { 0x00, 0xd6, 0x30 };
 	unsigned char addr_dto_lsb = 0x07;
 	unsigned char data;
 
@@ -608,6 +609,7 @@
 			return 0;
 		}
 	}
+	i2c_master_send(c, restore_9886, 3);
 	return -1;
 }
 


More information about the linux-dvb mailing list