Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: Avermedia 771 on Gentoo
Ben Rometsch wrote:
> Hi There,
>
> I'm new to the list, but, having read through the list and searched
> the gentoo forums, am unable to get my Avermedia 771 card working on
> my gentoo box.
>
> I have a gentoo-dev-sources 2.6.5r1 kernel running.
I'm using gentoo-dev-sources 2.6.7
> Grabbed a CVS snapshot of the linuxtv-dvb dated 2004-06-21
I have 2004-06-18 I guess. This version needs a patch I send to this
list but I don't know if it's in cvs or not. I attached it to this
mail, it should fix tuning problems (at least it does for me).
Dischi
--- mt352.c.orig 2004-06-28 19:01:07.902634015 +0200
+++ mt352.c 2004-06-28 19:03:56.080928108 +0200
@@ -57,7 +57,7 @@ static struct dvb_frontend_info mt352_in
.type = FE_OFDM,
.frequency_min = 174000000, /* NIM of AV771 starts at 50MHz */
.frequency_max = 862000000,
- .frequency_stepsize = 83333,
+ .frequency_stepsize = 166667,
/*
.frequency_tolerance = 0,
.symbol_rate_min = 1000000,
@@ -92,7 +92,7 @@ int mt352_detect_avermedia_771(struct dv
.flags = I2C_M_RD,
.len = 1
}
- };
+ };
int i;
for (i = 0; i < 4; i++)
@@ -121,8 +121,8 @@ int mt352_init (struct dvb_i2c_bus *i2c,
static u8 mt352_agc_cfg [] = { 0x67, 0x19, 0xa0 };
static u8 mt352_acq_ctl [] = { 0x53, 0x50 };
- static u8 mt352_agc_cfg_av771 [] = { 0x67, 0x10, 0x23, 0x00, 0xFF, 0xFF,
- 0x00, 0xFF, 0x00, 0x40, 0x40 };
+ static u8 mt352_agc_cfg_av771 [] = { 0x67, 0x10, 0x23, 0x00, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0x40, 0x40 };
static u8 mt352_av771_extra[] = { 0xB5, 0x7A };
/**
* We only write non-default settings, all default settings are
@@ -171,22 +171,21 @@ int mt352_set_parameters (struct dvb_i2c
switch (op->code_rate_HP) {
case FEC_2_3:
- tps = (1 << 7);
+ tps |= (1 << 7);
break;
case FEC_3_4:
- tps = (2 << 7);
+ tps |= (2 << 7);
break;
case FEC_5_6:
- tps = (3 << 7);
+ tps |= (3 << 7);
break;
case FEC_7_8:
- tps = (4 << 7);
+ tps |= (4 << 7);
break;
- case FEC_1_2:
case FEC_AUTO:
break;
default:
- return -EINVAL;
+ ;
}
switch (op->code_rate_LP) {
@@ -202,17 +201,13 @@ int mt352_set_parameters (struct dvb_i2c
case FEC_7_8:
tps |= (4 << 4);
break;
- case FEC_1_2:
case FEC_AUTO:
break;
default:
- return -EINVAL;
+ ;
}
switch (op->constellation) {
- case QPSK:
- break;
- case QAM_AUTO:
case QAM_16:
tps |= (1 << 13);
break;
@@ -220,24 +215,18 @@ int mt352_set_parameters (struct dvb_i2c
tps |= (2 << 13);
break;
default:
- return -EINVAL;
+ ;
}
switch (op->transmission_mode) {
- case TRANSMISSION_MODE_2K:
- case TRANSMISSION_MODE_AUTO:
- break;
case TRANSMISSION_MODE_8K:
tps |= (1 << 0);
break;
default:
- return -EINVAL;
+ ;
}
switch (op->guard_interval) {
- case GUARD_INTERVAL_1_32:
- case GUARD_INTERVAL_AUTO:
- break;
case GUARD_INTERVAL_1_16:
tps |= (1 << 2);
break;
@@ -248,13 +237,10 @@ int mt352_set_parameters (struct dvb_i2c
tps |= (3 << 2);
break;
default:
- return -EINVAL;
+ ;
}
-
+
switch (op->hierarchy_information) {
- case HIERARCHY_AUTO:
- case HIERARCHY_NONE:
- break;
case HIERARCHY_1:
tps |= (1 << 10);
break;
@@ -265,7 +251,7 @@ int mt352_set_parameters (struct dvb_i2c
tps |= (3 << 10);
break;
default:
- return -EINVAL;
+ ;
}
@@ -274,7 +260,8 @@ int mt352_set_parameters (struct dvb_i2c
buf[1] = msb(tps); /* TPS_GIVEN_(1|0) */
buf[2] = lsb(tps);
- buf[3] = 0x50;
+// buf[3] = 0xf3; /* ACQ_CTL, force parameters, automatic spectral inv */
+ buf[3] = 0x50; /* ACQ_CTL, fully automatic parameter search */
/**
* these settings assume 20.48MHz f_ADC, for other tuners you might
@@ -300,15 +287,16 @@ int mt352_set_parameters (struct dvb_i2c
/* here we assume 1/6MHz == 166.66kHz stepsize */
#define IF_FREQUENCYx6 217 /* 6 * 36.16666666667MHz */
- tmp = (3 * freq) / 500 + IF_FREQUENCYx6;
+ tmp = (6 * freq) / 1000 + IF_FREQUENCYx6;
buf[9] = msb(tmp); /* CHAN_START_(1|0) */
buf[10] = lsb(tmp);
- buf[6] = 0x31; /* INPUT_FREQ_(1|0), 20.48MHz clock, 36.166667MHz IF */
- buf[7] = 0x05; /* see MT352 Design Manual page 32 for details */
-
if (card_type == CARD_AVDVBT771)
{
+ printk(KERN_DEBUG "setting parameters for 771\n");
+ buf[6] = 0xF1;
+ buf[7] = 0x06;
+
if (freq < 150000)
{
buf[11] = 0xB4;
@@ -357,6 +345,8 @@ int mt352_set_parameters (struct dvb_i2c
}
else
{
+ buf[6] = 0x31; /* INPUT_FREQ_(1|0), 20.48MHz clock, 36.166667MHz IF */
+ buf[7] = 0x05; /* see MT352 Design Manual page 32 for details */
printk (KERN_WARNING "buf9,10: %02x %02x\n", buf[9], buf[10]);
@@ -518,10 +508,9 @@ static int mt352_ioctl (struct dvb_front
{
struct dvb_i2c_bus *i2c = fe->i2c;
u32 card_type = (u32) fe->data;
- u8 r,snr;
- fe_status_t *status;
- u16 signal;
- struct dvb_frontend_tune_settings *fe_tune_settings;
+#ifdef FE_GET_TUNE_SETTINGS
+ struct dvb_frontend_tune_settings* fe_tune_settings;
+#endif
switch (cmd) {
case FE_GET_INFO:
@@ -529,42 +518,53 @@ static int mt352_ioctl (struct dvb_front
break;
case FE_READ_STATUS:
- status = arg;
+ {
+ u8 r;
+ fe_status_t *status = arg;
*status = 0;
- r = mt352_read_register (i2c, 0x00);
+
+ r = mt352_read_register (i2c, 0x0);
+ if (r & (1 << 5))
+ *status |= FE_HAS_LOCK;
if (r & (1 << 4))
- *status = FE_HAS_CARRIER;
+ *status |= FE_HAS_CARRIER;
if (r & (1 << 1))
*status |= FE_HAS_VITERBI;
- if (r & (1 << 5))
- *status |= FE_HAS_LOCK;
r = mt352_read_register (i2c, 0x01);
if (r & (1 << 1))
*status |= FE_HAS_SYNC;
-
+
r = mt352_read_register (i2c, 0x03);
if (r & (1 << 6))
*status |= FE_HAS_SIGNAL;
break;
+ }
case FE_READ_BER:
- *((u32 *) arg) = (mt352_read_register (i2c, 0x0D) << 16) |
- (mt352_read_register (i2c, 0x0E) << 8) |
- (mt352_read_register (i2c, 0x0F));
+ {
+ u32 *ber = (u32 *) arg;
+ *ber = (mt352_read_register (i2c, 0xA) << 16) |
+ (mt352_read_register (i2c, 0xB) << 8) |
+ (mt352_read_register (i2c, 0xC));
break;
+ }
case FE_READ_SIGNAL_STRENGTH:
- signal = (mt352_read_register (i2c, 0x12) << 8) |
+ {
+ u16 signal = (mt352_read_register (i2c, 0x12) << 8) |
(mt352_read_register (i2c, 0x13));
*((u16*) arg) = ~signal;
break;
+ }
case FE_READ_SNR:
- snr = mt352_read_register (i2c, 0x09);
- *((u16*) arg) = (snr << 8) | snr;
+ {
+ u8 snr = mt352_read_register (i2c, 0x9);
+ *(u16*) arg = (snr << 8) | snr;
break;
+ }
case FE_READ_UNCORRECTED_BLOCKS:
*(u32*) arg = (mt352_read_register (i2c, 0x10) << 8) |
@@ -587,7 +587,7 @@ static int mt352_ioctl (struct dvb_front
break;
case FE_SLEEP:
- return mt352_sleep(i2c);
+ return mt352_sleep(i2c);
case FE_INIT:
return mt352_init(i2c,card_type);
--
C.O.B.O.L - Completely Obsolete Boring Old Language.
Home |
Main Index |
Thread Index