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