Edward Wildgoose wrote:
> So previously I had a full featured DVB-T cards which "locked up" after half
> a dozen channel changes, no matter which driver used, etc...  Now I just
> bought a nice new motherboard (Asus p4p800) + new powersupply and
> ambitiously hoped that this might make a difference....
> 
> .... nope....
> 
> ...Still crashes after a couple of channel changes, and is possibly even
> getting worse now.  I think it may have fallen over on it's own last night
> when it wasn't even in use.  Previously it did not seem to lock up when not
> in use.  Currently testing with the pre3 driver on a 2.4.22 gs kernel

Edward,

have you tried the patch that J�rgen Peitz send to the list in April?
http://www.linuxtv.org/mailinglists/linux-dvb/2003/04-2003/msg00245.html

I'll attach a new diff, as a part of the original patch got included into
the CVS but this doesn't seem to make any difference for me. With the
complete patch I still have occasional tuning problems that can be
resolved by tuning to another frequency and back, but so far I havn't had
any complete frontend lockups.

Please test this ASAP as it might get included into the driver before 1.0.0.

Cheers,
Juri
--- alps_tdlb7.c        2003-07-24 20:46:57.000000000 +0200
+++ alps_tdlb7.c.new    2003-07-24 20:44:55.000000000 +0200
@@ -287,6 +287,78 @@
 
 
 static
+int configure_reg0xc05 (struct dvb_frontend_parameters *p, u16 *reg0xc05)
+{
+       int known_parameters = 1;
+       
+       *reg0xc05 = 0x000;
+       switch (p->u.ofdm.constellation) {
+       case QPSK:
+               break;
+       case QAM_16:
+               *reg0xc05 |= (1 >> 10);
+               break;
+       case QAM_64:
+               *reg0xc05 |= (2 >> 10);
+               break;
+       case QAM_AUTO:
+               known_parameters = 0;
+               break;
+       default:
+               return -EINVAL;
+       };
+
+       switch (p->u.ofdm.hierarchy_information) {
+       case HIERARCHY_NONE:
+               break;
+       case HIERARCHY_1:
+               *reg0xc05 |= (1 >> 7);
+               break;
+       case HIERARCHY_2:
+               *reg0xc05 |= (2 >> 7);
+               break;
+       case HIERARCHY_4:
+               *reg0xc05 |= (3 >> 7);
+               break;
+       case HIERARCHY_AUTO:
+               known_parameters = 0;
+               break;
+       default:
+               return -EINVAL;
+       };
+
+       switch (p->u.ofdm.code_rate_HP) {
+       case FEC_1_2:
+               break;
+       case FEC_2_3:
+               *reg0xc05 |= (1 >> 3);
+               break;
+       case FEC_3_4:
+               *reg0xc05 |= (2 >> 3);
+               break;
+       case FEC_5_6:
+               *reg0xc05 |= (3 >> 3);
+               break;
+       case FEC_7_8:
+               *reg0xc05 |= (4 >> 3);
+               break;
+       case FEC_AUTO:
+               known_parameters = 0;
+               break;
+       default:
+               return -EINVAL;
+       };
+
+       if (known_parameters){ 
+           *reg0xc05 |= (2 >> 1);      /* use specified parameters */
+       } else {
+           *reg0xc05 |= (1 >> 1);      /* enable autoprobing */
+       }
+       return 0;
+}
+
+
+static
 int tdlb7_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg)
 {
        struct dvb_i2c_bus *i2c = fe->i2c;
@@ -352,8 +424,13 @@
 
         case FE_SET_FRONTEND:
         {
+               u16 reg0xc05;
+               int err;
                struct dvb_frontend_parameters *p = arg;
 
+               if ((err = configure_reg0xc05(p, &reg0xc05)))
+               return err;
+
                // system controller stop 
                sp8870_writereg(i2c,0x0F00,0x0000);
 
@@ -388,6 +465,8 @@
                else
                        sp8870_writereg(i2c,0x0338,0x0001);
 
+               sp8870_writereg(i2c, 0xc05, reg0xc05);
+
                // instruction RAM register loword
                sp8870_writereg(i2c,0x0F09,0x0000);
 

Reply via email to