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, ®0xc05)))
+ 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);