Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] dvb-kernel frontend experimental patch v3



On Tuesday 09 March 2004 18:12, Oliver Endriss wrote:
> On Tuesday 09 March 2004 01:58, Andrew de Quincey wrote:
> > Hi, this new version of the patch has all the previous features as well
> > as:
> >
> > * Removed unnecessary second tune from stv0299.c
> > * Fix non-PHILIPS_SU1278_TSA_TT cards in stv0299.c
> > * Removed the FE_RESET/FE_POLL stuff; no longer needed.
> > * Andreas Share's ves1x93 improvements (which is why FE_RESET/FE_POLL can
> > go)
>
> Tuning does not work anymore with stv0299/BSRU6 (DVB-S rev. 2.1).
> If I use stv0299.c from patch v1, it works again.
> Any idea? Otherwise I'll look into this.

Yep, already had a report of that.. although that report was that tuning on 
that tuner didn't work on ANY of the 1.1.x series. Anyway, this new version 
should behave exactly as 1.0.x did for those tuners.
? build-2.4/dvb-ttpci-info.txt
? build-2.4/redo
? build-2.4/include/linux
? linux/drivers/media/dvb/dvb-core/dvb_ca.adq.c
? linux/drivers/media/dvb/dvb-core/dvb_ca.adq.h
? linux/include/linux/dvb/ca.further.h
Index: linux/drivers/media/dvb/dvb-core/dvb_frontend.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c,v
retrieving revision 1.70
diff -a -u -b -r1.70 dvb_frontend.c
--- linux/drivers/media/dvb/dvb-core/dvb_frontend.c	1 Mar 2004 19:11:18 -0000	1.70
+++ linux/drivers/media/dvb/dvb-core/dvb_frontend.c	9 Mar 2004 18:23:36 -0000
@@ -46,8 +46,8 @@
 #define FESTATE_TUNED 16
 #define FESTATE_ZIGZAG_FAST 32
 #define FESTATE_ZIGZAG_SLOW 64
-#define FESTATE_CLEAN_SETUP 128
-#define FESTATE_SEARCHING (FESTATE_TUNING_FAST | FESTATE_TUNING_SLOW | FESTATE_ZIGZAG_FAST | FESTATE_ZIGZAG_SLOW)
+#define FESTATE_DISEQC 128
+#define FESTATE_WAITFORLOCK (FESTATE_TUNING_FAST | FESTATE_TUNING_SLOW | FESTATE_ZIGZAG_FAST | FESTATE_ZIGZAG_SLOW | FESTATE_DISEQC)
 #define FESTATE_SEARCHING_FAST (FESTATE_TUNING_FAST | FESTATE_ZIGZAG_FAST)
 #define FESTATE_SEARCHING_SLOW (FESTATE_TUNING_SLOW | FESTATE_ZIGZAG_SLOW)
 #define FESTATE_LOSTLOCK (FESTATE_ZIGZAG_FAST | FESTATE_ZIGZAG_SLOW)
@@ -59,8 +59,8 @@
  * FESTATE_TUNED. The frontend has successfully locked on.
  * FESTATE_ZIGZAG_FAST. The lock has been lost, and a fast zigzag has been initiated to try and regain it.
  * FESTATE_ZIGZAG_SLOW. The lock has been lost. Fast zigzag has been failed, so we're trying again, but slower.
- * FESTATE_CLEAN_SETUP. Used for certain dodgy tuners which need special massaging to lock.
- * FESTATE_SEARCHING. When we're searching for a signal using a zigzag scan of any sort.
+ * FESTATE_DISEQC. A DISEQC command has just been issued.
+ * FESTATE_WAITFORLOCK. When we're waiting for a lock.
  * FESTATE_SEARCHING_FAST. When we're searching for a signal using a fast zigzag scan.
  * FESTATE_SEARCHING_SLOW. When we're searching for a signal using a slow zigzag scan.
  * FESTATE_LOSTLOCK. When the lock has been lost, and we're searching it again.
@@ -69,7 +69,10 @@
 
 static int dvb_frontend_debug = 0;
 static int dvb_shutdown_timeout = 5;
-static int dvb_frequency_bending = 1;
+static int dvb_override_frequency_bending = 0;
+static int dvb_force_auto_inversion = 0;
+
+static int do_frequency_bending = 0;
 
 #define dprintk if (dvb_frontend_debug) printk
 
@@ -103,6 +106,8 @@
         int auto_count;
         int started_auto_count;
         int min_delay;
+        int max_drift;
+        int step_size;
 	int exit;
         fe_status_t status;
 };
@@ -357,8 +362,6 @@
  */
 static int dvb_frontend_autotune(struct dvb_frontend_data *fe)
 {
-        int stepsize;
-        int maxdrift;
         int autoinversion;
         int ready = 0;
         int wrapped = 0;
@@ -367,41 +370,14 @@
 
 	dprintk ("%s\n", __FUNCTION__);
 
-        // choose step size for zigzag scan
-	switch(fe->info->type) {
-	case FE_QPSK:
-	        if (fe->parameters.u.qpsk.symbol_rate < 10000000) {
-	                stepsize = fe->parameters.u.qpsk.symbol_rate / 32000;
-	                maxdrift = 5000;
-	        } else {
-		        stepsize = fe->parameters.u.qpsk.symbol_rate / 16000;
-		        maxdrift = fe->parameters.u.qpsk.symbol_rate / 2000;
-		}
-	        break;
-	    
-	case FE_QAM:
-		stepsize = 1;
-	        maxdrift = 0; // don't want any zigzagging under DVB-C frontends
-	        break;
-	    
-	case FE_OFDM:
-	        stepsize = fe->info->frequency_stepsize * 2;
-	        maxdrift = (fe->info->frequency_stepsize * 2) + 1;
-	        break;
-	    
-	default:
-	        printk("Unknown frontend type %i\n", fe->info->type);
-	        return 0;
-	}
-
         // are we using autoinversion?
         autoinversion = ((!(fe->info->caps & FE_CAN_INVERSION_AUTO)) && (fe->parameters.inversion == INVERSION_AUTO));
 
         // setup parameters correctly
         while(!ready) {
 	        // wrap the count if we've reached the maximum drift
-	        fe->lnb_drift = (fe->auto_count / 4) * stepsize;
-	        if (fe->lnb_drift >= maxdrift) {
+	        fe->lnb_drift = (fe->auto_count / 4) * fe->step_size;
+	        if (fe->lnb_drift > fe->max_drift) {
 		        fe->auto_count = 0;
 		        fe->lnb_drift = 0;
 		        wrapped = 1;
@@ -442,8 +418,8 @@
 	        if (!ready) fe->auto_count++;
 	}
    
-        // perform frequency bending if enabled
-        if (dvb_frequency_bending)
+        // perform frequency bending if necessary
+        if ((dvb_override_frequency_bending != 1) && do_frequency_bending)
                 dvb_bend_frequency(fe, 0);
    
         // set the frontend itself
@@ -453,9 +429,6 @@
 	fe->parameters.frequency = original_frequency;
         fe->parameters.inversion = original_inversion;
     
-        // reset frontend IRQ bits to clean error stats
-    	dvb_frontend_internal_ioctl (&fe->frontend, FE_RESET, NULL);
-
         // if we've hit where we started from, indicate a complete iteration has occurred
 	fe->auto_count++;
         if ((fe->auto_count == fe->started_auto_count) || (fe->started_auto_count==0 && wrapped)) return 1;
@@ -483,7 +456,7 @@
 	unsigned long timeout;
 	char name [15];
 	int quality = 0, delay = 3*HZ;
-        int clean_setup_count = 0;
+        int poll_valid = 0;
 	fe_status_t s;
 
 	dprintk ("%s\n", __FUNCTION__);
@@ -521,7 +494,7 @@
 			dvb_frontend_add_event (fe, s);
 
 	        // if we're not tuned, and we have a lock, move to the TUNED state
-		if ((fe->state & FESTATE_SEARCHING) && (s & FE_HAS_LOCK)) {
+		if ((fe->state & FESTATE_WAITFORLOCK) && (s & FE_HAS_LOCK)) {
 		        update_delay(&quality, &delay, fe->min_delay, s & FE_HAS_LOCK);
 		        fe->state = FESTATE_TUNED;
 		    
@@ -547,9 +520,18 @@
 			}
 		}
 
-	        // don't actually do anything if we're in the LOSTLOCK state
-		// and the frontend can recover automatically
-		if ((fe->state & FESTATE_LOSTLOCK) && (fe->info->caps & FE_CAN_RECOVER)) {
+	        // don't actually do anything if we're in the LOSTLOCK state, the frontend is set to
+		// FE_CAN_RECOVER, and the max_drift is 0
+	        if ((fe->state & FESTATE_LOSTLOCK) && 
+		    (fe->info->caps & FE_CAN_RECOVER) && (fe->max_drift == 0)) {
+		        update_delay(&quality, &delay, fe->min_delay, s & FE_HAS_LOCK);
+		        continue;
+		}
+	    
+	        // don't do anything if we're in the DISEQC state, since this might be someone
+		// with a motorized dish controlled by DISEQC. If its actually a re-tune, there will
+		// be a SET_FRONTEND soon enough.
+	        if (fe->state & FESTATE_DISEQC) {
 		        update_delay(&quality, &delay, fe->min_delay, s & FE_HAS_LOCK);
 		        continue;
 		}
@@ -560,26 +542,23 @@
 		        fe->inversion = INVERSION_OFF;
 		        fe->auto_count = 0;
 		        fe->started_auto_count = 0;
-		        clean_setup_count = 0;
+		        poll_valid = 0;
 		}
 	    
 	        // fast zigzag.
 		if ((fe->state & FESTATE_SEARCHING_FAST) || (fe->state & FESTATE_RETUNE)) {
 		        delay = fe->min_delay;
 		   
+		        // peform a tune
+	                poll_valid = 1;
+		        if (dvb_frontend_autotune(fe)) {
 		        // OK, if we've run out of trials at the fast speed. Drop back to
 			// slow for the _next_ attempt
-		        if (dvb_frontend_autotune(fe)) {
 			        fe->state = FESTATE_SEARCHING_SLOW;
 			        fe->started_auto_count = fe->auto_count;
 			        continue;
 			}
 
-		        // enter clean setup state after the first tune if necessary. yeuch
-		        if ((!(fe->info->caps & FE_CAN_CLEAN_SETUP)) && (clean_setup_count == 0)) {
-			        fe->state = FESTATE_CLEAN_SETUP;
-			}
-		    
 		        // if we've just retuned, enter the ZIGZAG_FAST state. This ensures
 			// we cannot return from an FE_SET_FRONTEND before the retune occurs.
 			if (fe->state & FESTATE_RETUNE) {
@@ -589,20 +568,11 @@
 
 	        // slow zigzag
 		if (fe->state & FESTATE_SEARCHING_SLOW) {
+		        // perform tuning
+		        poll_valid = 1;
 		        update_delay(&quality, &delay, fe->min_delay, s & FE_HAS_LOCK);
 		        dvb_frontend_autotune(fe);
 		}
-
-	        // clean setup
-		if (fe->state & FESTATE_CLEAN_SETUP) {
-		        if ((clean_setup_count < 10) && (!(s & FE_HAS_LOCK))) {
-			        dvb_frontend_internal_ioctl(&fe->frontend, FE_RESET, NULL);
-			} else {
-			        // return to tuning state
-			        fe->state = FESTATE_TUNING_FAST;
-			}
-		        clean_setup_count++;
-		}
 	};
 
 	if (dvb_shutdown_timeout)
@@ -713,8 +683,8 @@
 {
 	struct dvb_device *dvbdev = file->private_data;
 	struct dvb_frontend_data *fe = dvbdev->priv;
+        struct dvb_frontend_tune_settings fetunesettings;
 	int err = 0;
-        int delay_ms;
 
 	dprintk ("%s\n", __FUNCTION__);
 
@@ -731,7 +701,7 @@
 		if (fe->status)
 			dvb_call_frontend_notifiers (fe, 0);
 		dvb_frontend_internal_ioctl (&fe->frontend, cmd, parg);
-	        fe->state = FESTATE_IDLE;
+	        fe->state = FESTATE_DISEQC;
 		break;
 
 	case FE_SET_FRONTEND:
@@ -740,20 +710,40 @@
 		memcpy (&fe->parameters, parg,
 			sizeof (struct dvb_frontend_parameters));
 
-	        delay_ms = dvb_frontend_internal_ioctl(&fe->frontend, FE_GETMINDELAY, &fe->parameters);
-	        if (delay_ms >= 0) fe->min_delay = (delay_ms * HZ) / 1000;
-	        else {
+	        memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));
+	        memcpy(&fetunesettings.parameters, parg,
+		       sizeof (struct dvb_frontend_parameters));
+	    	    
+	        // force auto frequency inversion if requested
+	        if (dvb_force_auto_inversion) {
+		        fe->parameters.inversion = INVERSION_AUTO;
+		        fetunesettings.parameters.inversion = INVERSION_AUTO;
+		}
+
+	        // get frontend-specific tuning settings
+	        if (dvb_frontend_internal_ioctl(&fe->frontend, FE_GET_TUNE_SETTINGS, &fetunesettings) == 0) {
+		        fe->min_delay = (fetunesettings.min_delay_ms * HZ) / 1000;
+		        fe->max_drift = fetunesettings.max_drift;
+		        fe->step_size = fetunesettings.step_size;
+		} else {
+		        // default values
 		        switch(fe->info->type) {
 			case FE_QPSK:
 			        fe->min_delay = HZ/20; // default mindelay of 50ms
+			        fe->step_size = fe->parameters.u.qpsk.symbol_rate / 16000;
+			        fe->max_drift = fe->parameters.u.qpsk.symbol_rate / 2000;
 			        break;
 			    
 			case FE_QAM:
 			        fe->min_delay = HZ/20; // default mindelay of 50ms
+			        fe->step_size = 0;
+			        fe->max_drift = 0; // don't want any zigzagging under DVB-C frontends
 			        break;
 			    
 			case FE_OFDM:
-			        fe->min_delay = HZ/10; // default mindelay of 100ms
+			        fe->min_delay = HZ/20; // default mindelay of 50ms
+			        fe->step_size = fe->info->frequency_stepsize * 2;
+			        fe->max_drift = (fe->info->frequency_stepsize * 2) + 1;
 			        break;
 			}
 		}
@@ -1128,6 +1118,9 @@
 	dvb_register_device (i2c->adapter, &fe->dvbdev, &dvbdev_template,
 			     fe, DVB_DEVICE_FRONTEND);
 
+        if ((info->caps & FE_NEEDS_BENDING) || (dvb_override_frequency_bending == 2))
+                do_frequency_bending = 1;
+    
 	up (&frontend_mutex);
 
 	return 0;
@@ -1165,7 +1158,10 @@
 
 MODULE_PARM(dvb_frontend_debug,"i");
 MODULE_PARM(dvb_shutdown_timeout,"i");
-MODULE_PARM(dvb_frequency_bending,"i");
+MODULE_PARM(dvb_override_frequency_bending,"i");
+MODULE_PARM(dvb_force_auto_inversion,"i");
+
 MODULE_PARM_DESC(dvb_frontend_debug, "enable verbose debug messages");
 MODULE_PARM_DESC(dvb_shutdown_timeout, "wait <shutdown_timeout> seconds after close() before suspending hardware");
-MODULE_PARM_DESC(dvb_frequency_bending, "0: disable frequency bending, 1: enable (default)");
+MODULE_PARM_DESC(dvb_override_frequency_bending, "0: normal (default), 1: never use frequency bending, 2: always use frequency bending");
+MODULE_PARM_DESC(dvb_force_auto_inversion, "0: normal (default), 1: INVERSION_AUTO forced always");
Index: linux/drivers/media/dvb/dvb-core/dvb_frontend.h
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.h,v
retrieving revision 1.9
diff -a -u -b -r1.9 dvb_frontend.h
--- linux/drivers/media/dvb/dvb-core/dvb_frontend.h	27 Feb 2004 03:32:53 -0000	1.9
+++ linux/drivers/media/dvb/dvb-core/dvb_frontend.h	9 Mar 2004 18:23:36 -0000
@@ -56,15 +56,25 @@
 	void *data;                /*  can be used by hardware module... */
 };
 
+struct dvb_frontend_tune_settings {
+        int min_delay_ms;
+        int step_size;
+        int max_drift;
+        struct dvb_frontend_parameters parameters;
+};
+
 
 /**
  *   private frontend command ioctl's.
  *   keep them in sync with the public ones defined in linux/dvb/frontend.h
+ * 
+ *   FE_SLEEP. Ioctl used to put frontend into a low power mode.
+ *   FE_INIT. Ioctl used to initialise the frontend.
+ *   FE_GET_TUNE_SETTINGS. Get the frontend-specific tuning loop settings for the supplied set of parameters.
  */
 #define FE_SLEEP              _IO('v', 80)
 #define FE_INIT               _IO('v', 81)
-#define FE_RESET              _IO('v', 82)
-#define FE_GETMINDELAY        _IOW('v', 83, struct dvb_frontend_parameters)
+#define FE_GET_TUNE_SETTINGS  _IOWR('v', 83, struct dvb_frontend_tune_settings)
 
 
 extern int
Index: linux/drivers/media/dvb/frontends/alps_tdlb7.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/alps_tdlb7.c,v
retrieving revision 1.16
diff -a -u -b -r1.16 alps_tdlb7.c
--- linux/drivers/media/dvb/frontends/alps_tdlb7.c	29 Jan 2004 20:42:31 -0000	1.16
+++ linux/drivers/media/dvb/frontends/alps_tdlb7.c	9 Mar 2004 18:23:37 -0000
@@ -636,9 +636,6 @@
         case FE_SET_FRONTEND:
 		return sp8870_set_frontend(i2c, (struct dvb_frontend_parameters*) arg);
 
-	case FE_RESET:
-		return -EOPNOTSUPP;
-
 	case FE_GET_FRONTEND:			 // FIXME: read known values back from Hardware...
 		return -EOPNOTSUPP;
 
@@ -653,6 +650,15 @@
 		}
 		break;
 
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        fesettings->step_size = 0;
+	        fesettings->max_drift = 0;
+	        return 0;
+	}	    
+	    
 	default:
 		return -EOPNOTSUPP;
         };
Index: linux/drivers/media/dvb/frontends/alps_tdmb7.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/alps_tdmb7.c,v
retrieving revision 1.23
diff -a -u -b -r1.23 alps_tdmb7.c
--- linux/drivers/media/dvb/frontends/alps_tdmb7.c	29 Jan 2004 20:42:31 -0000	1.23
+++ linux/drivers/media/dvb/frontends/alps_tdmb7.c	9 Mar 2004 18:23:37 -0000
@@ -50,7 +50,7 @@
 	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 	      FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
 	      FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
-	      FE_CAN_CLEAN_SETUP | FE_CAN_RECOVER
+              FE_CAN_RECOVER
 };
 
 
@@ -390,8 +390,14 @@
         case FE_INIT:
 		return cx22700_init (i2c);
 
-        case FE_RESET:
-                break;
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        fesettings->step_size = 0;
+	        fesettings->max_drift = 0;
+	        return 0;
+	}	    
 
 	default:
 		return -EOPNOTSUPP;
Index: linux/drivers/media/dvb/frontends/at76c651.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/at76c651.c,v
retrieving revision 1.14
diff -a -u -b -r1.14 at76c651.c
--- linux/drivers/media/dvb/frontends/at76c651.c	20 Dec 2003 22:22:19 -0000	1.14
+++ linux/drivers/media/dvb/frontends/at76c651.c	9 Mar 2004 18:23:37 -0000
@@ -71,9 +71,7 @@
 	    FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
 	    FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO |
 	    FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 |
-	    FE_CAN_QAM_256 /* | FE_CAN_QAM_512 | FE_CAN_QAM_1024 */ |
-	    FE_CAN_RECOVER | FE_CAN_CLEAN_SETUP | FE_CAN_MUTE_TS
-
+	    FE_CAN_MUTE_TS | FE_CAN_QAM_256 | FE_CAN_RECOVER
 };
 
 #if ! defined(__powerpc__)
@@ -360,6 +358,7 @@
 	at76c651_set_symbolrate(i2c, p->u.qam.symbol_rate);
 	at76c651_set_inversion(i2c, p->inversion);
 	at76c651_set_auto_config(i2c);
+        at76c651_reset(i2c);
 
 	return 0;
 
@@ -460,8 +459,14 @@
 	case FE_INIT:
 		return at76c651_set_defaults(fe->i2c);
 
-	case FE_RESET:
-		return at76c651_reset(fe->i2c);
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        fesettings->step_size = 0;
+	        fesettings->max_drift = 0;
+	        return 0;
+	}	    
 
 	default:
 		return -ENOIOCTLCMD;
Index: linux/drivers/media/dvb/frontends/cx24110.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/cx24110.c,v
retrieving revision 1.12
diff -a -u -b -r1.12 cx24110.c
--- linux/drivers/media/dvb/frontends/cx24110.c	9 Dec 2003 06:08:29 -0000	1.12
+++ linux/drivers/media/dvb/frontends/cx24110.c	9 Mar 2004 18:23:39 -0000
@@ -59,8 +59,7 @@
 	.caps = FE_CAN_INVERSION_AUTO |
 		FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 		FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-		FE_CAN_QPSK |
-		FE_CAN_CLEAN_SETUP
+		FE_CAN_QPSK
 };
 /* fixme: are these values correct? especially ..._tolerance and caps */
 
@@ -621,11 +620,6 @@
         case FE_INIT:
 		return cx24110_init (i2c);
 
-	case FE_RESET:
-/* no idea what to do for this call */
-/* fixme (medium): fill me in */
-		break;
-
 	case FE_SET_TONE:
 		return cx24110_writereg(i2c,0x76,(cx24110_readreg(i2c,0x76)&~0x10)|((((fe_sec_tone_mode_t) arg)==SEC_TONE_ON)?0x10:0));
 	case FE_SET_VOLTAGE:
Index: linux/drivers/media/dvb/frontends/dst.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/dst.c,v
retrieving revision 1.12
diff -a -u -b -r1.12 dst.c
--- linux/drivers/media/dvb/frontends/dst.c	3 Feb 2004 23:10:10 -0000	1.12
+++ linux/drivers/media/dvb/frontends/dst.c	9 Mar 2004 18:23:39 -0000
@@ -963,7 +963,6 @@
 	{FE_GET_FRONTEND,            "FE_GET_FRONTEND:" },
 	{FE_SLEEP,                   "FE_SLEEP:" },
 	{FE_INIT,                    "FE_INIT:" },
-	{FE_RESET,                   "FE_RESET:" },
 	{FE_SET_TONE,                "FE_SET_TONE:" },
 	{FE_SET_VOLTAGE,             "FE_SET_VOLTAGE:" },
 	};
@@ -1091,9 +1090,6 @@
 		dst_init(dst);
 		break;
 
-	case FE_RESET:
-		break;
-
 	case FE_DISEQC_SEND_MASTER_CMD:
 	{
 		struct dvb_diseqc_master_cmd *cmd = (struct dvb_diseqc_master_cmd *)arg;
Index: linux/drivers/media/dvb/frontends/dvb_dummy_fe.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/dvb_dummy_fe.c,v
retrieving revision 1.5
diff -a -u -b -r1.5 dvb_dummy_fe.c
--- linux/drivers/media/dvb/frontends/dvb_dummy_fe.c	8 Oct 2003 23:12:46 -0000	1.5
+++ linux/drivers/media/dvb/frontends/dvb_dummy_fe.c	9 Mar 2004 18:23:39 -0000
@@ -62,8 +62,7 @@
 #endif
 	.caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 |
 		FE_CAN_QAM_128 | FE_CAN_QAM_256 | 
-		FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO |
-		FE_CAN_CLEAN_SETUP
+		FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO
 };
 
 static struct dvb_frontend_info dvb_t_dummyfe_info = {
@@ -157,9 +156,6 @@
         case FE_INIT:
 		return 0;
 
-	case FE_RESET:
-		return 0;
-
 	case FE_SET_TONE:
 		return -EOPNOTSUPP;
 
Index: linux/drivers/media/dvb/frontends/grundig_29504-401.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/grundig_29504-401.c,v
retrieving revision 1.21
diff -a -u -b -r1.21 grundig_29504-401.c
--- linux/drivers/media/dvb/frontends/grundig_29504-401.c	3 Mar 2004 14:34:58 -0000	1.21
+++ linux/drivers/media/dvb/frontends/grundig_29504-401.c	9 Mar 2004 18:23:39 -0000
@@ -48,7 +48,7 @@
 	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 	      FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
 	      FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
-	      FE_CAN_MUTE_TS /*| FE_CAN_CLEAN_SETUP*/
+              FE_CAN_MUTE_TS
 };
 
 
Index: linux/drivers/media/dvb/frontends/grundig_29504-491.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/grundig_29504-491.c,v
retrieving revision 1.15
diff -a -u -b -r1.15 grundig_29504-491.c
--- linux/drivers/media/dvb/frontends/grundig_29504-491.c	8 Oct 2003 23:12:46 -0000	1.15
+++ linux/drivers/media/dvb/frontends/grundig_29504-491.c	9 Mar 2004 18:23:40 -0000
@@ -52,8 +52,7 @@
 		FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 		FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
 		FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO |
-		FE_CAN_QPSK |
-		FE_CAN_MUTE_TS | FE_CAN_CLEAN_SETUP
+		FE_CAN_QPSK | FE_CAN_MUTE_TS
 };
 
 
@@ -398,11 +397,6 @@
 		tda8083_writereg (i2c, 0x00, 0x04);
 		break;
 
-	case FE_RESET:
-		tda8083_writereg (i2c, 0x00, 0x3c);
-		tda8083_writereg (i2c, 0x00, 0x04);
-		break;
-
 	case FE_DISEQC_SEND_MASTER_CMD:
 		return tda8083_send_diseqc_msg (i2c, arg);
 
Index: linux/drivers/media/dvb/frontends/mt312.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/mt312.c,v
retrieving revision 1.13
diff -a -u -b -r1.13 mt312.c
--- linux/drivers/media/dvb/frontends/mt312.c	20 Dec 2003 22:22:19 -0000	1.13
+++ linux/drivers/media/dvb/frontends/mt312.c	9 Mar 2004 18:23:41 -0000
@@ -66,8 +66,8 @@
 	.caps =
 	    FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 |
 	    FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
-	    FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_RECOVER |
-	    FE_CAN_CLEAN_SETUP | FE_CAN_MUTE_TS
+	    FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_MUTE_TS | 
+            FE_CAN_RECOVER
 };
 
 static int mt312_read(struct dvb_i2c_bus *i2c,
@@ -570,6 +570,8 @@
 	if ((ret = mt312_write(i2c, SYM_RATE_H, buf, sizeof(buf))) < 0)
 		return ret;
 
+        mt312_reset(i2c, 0);
+
 	return 0;
 }
 
@@ -756,8 +758,14 @@
 		else
 			return mt312_init(i2c, (long) fe->data, (u8) 60);
 			
-	case FE_RESET:
-		return mt312_reset(i2c, 0);
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        fesettings->step_size = 0;
+	        fesettings->max_drift = 0;
+	        return 0;
+	}	    
 
 	default:
 		return -ENOIOCTLCMD;
Index: linux/drivers/media/dvb/frontends/mt352.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/mt352.c,v
retrieving revision 1.1
diff -a -u -b -r1.1 mt352.c
--- linux/drivers/media/dvb/frontends/mt352.c	5 Mar 2004 16:43:49 -0000	1.1
+++ linux/drivers/media/dvb/frontends/mt352.c	9 Mar 2004 18:23:41 -0000
@@ -60,7 +60,7 @@
                 FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
 	        FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
 		FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO |
-	        FE_CAN_HIERARCHY_AUTO | FE_CAN_RECOVER | FE_CAN_CLEAN_SETUP | 
+	        FE_CAN_HIERARCHY_AUTO | FE_CAN_RECOVER | 
 		FE_CAN_MUTE_TS
 };
 
Index: linux/drivers/media/dvb/frontends/nxt6000.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/nxt6000.c,v
retrieving revision 1.17
diff -a -u -b -r1.17 nxt6000.c
--- linux/drivers/media/dvb/frontends/nxt6000.c	29 Jan 2004 18:09:51 -0000	1.17
+++ linux/drivers/media/dvb/frontends/nxt6000.c	9 Mar 2004 18:23:41 -0000
@@ -52,7 +52,12 @@
 	.symbol_rate_max = 9360000,	/* FIXME */
 	.symbol_rate_tolerance = 4000,
 	.notifier_delay = 0,
-	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO,
+	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | 
+                FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | 
+                FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | 
+                FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | 
+                FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | 
+                FE_CAN_HIERARCHY_AUTO,
 };
 
 struct nxt6000_config {
@@ -657,9 +662,6 @@
 		nxt6000_setup(fe);
 		break;
 
-	case FE_RESET:
-		break;
-
 	case FE_SET_FRONTEND:
 		{
 			struct nxt6000_config *nxt = FE2NXT(fe);
Index: linux/drivers/media/dvb/frontends/sp887x.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/sp887x.c,v
retrieving revision 1.10
diff -a -u -b -r1.10 sp887x.c
--- linux/drivers/media/dvb/frontends/sp887x.c	2 Mar 2004 10:11:34 -0000	1.10
+++ linux/drivers/media/dvb/frontends/sp887x.c	9 Mar 2004 18:23:42 -0000
@@ -64,7 +64,8 @@
 	.frequency_stepsize = 166666,
 	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 		FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-		FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_RECOVER
+		FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
+                FE_CAN_RECOVER
 };
 
 static int errno;
@@ -632,6 +633,15 @@
 		sp887x_writereg(fe, 0xc18, 0x00d);
 		break;
 
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        fesettings->step_size = 0;
+	        fesettings->max_drift = 0;
+	        return 0;
+	}	    
+
 	default:
 		return -EOPNOTSUPP;
         };
Index: linux/drivers/media/dvb/frontends/stv0299.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/stv0299.c,v
retrieving revision 1.37
diff -a -u -b -r1.37 stv0299.c
--- linux/drivers/media/dvb/frontends/stv0299.c	27 Feb 2004 09:54:49 -0000	1.37
+++ linux/drivers/media/dvb/frontends/stv0299.c	9 Mar 2004 18:23:43 -0000
@@ -96,8 +96,7 @@
 	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
 	      FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
 	      FE_CAN_QPSK |
-	      FE_CAN_FEC_AUTO | 
-	      FE_CAN_CLEAN_SETUP
+	      FE_CAN_FEC_AUTO
 };
 
 
@@ -368,8 +367,13 @@
 
 	if ((freq < 950000) || (freq > 2150000)) return -EINVAL;
 
+        if (ftype == PHILIPS_SU1278_TSA_TT) {
         divisor = 500;
         regcode = 2;
+	} else {
+	        divisor = 125;
+	        regcode = 4;
+	}
    
 	// setup frequency divisor
 	div = (freq + (divisor - 1)) / divisor; // round correctly
@@ -395,7 +399,8 @@
 
 	case ALPS_BSRU6:
 		addr = 0x61;
-		buf[3] |= 0xC0;
+		buf[3] = 0xC4;
+	        if (freq > 1530000) buf[3] = 0xc0;
 	 	break;
 
 	default:
@@ -923,12 +928,12 @@
 
 	case ALPS_BSRU6:
 	default:
-		if (srate <= 1500000) { aclk = 0xb7; bclk = 0x87; }
-		else if (srate <= 3000000) { aclk = 0xb7; bclk = 0x8b; }
-		else if (srate <= 7000000) { aclk = 0xb7; bclk = 0x8f; }
-		else if (srate <= 14000000) { aclk = 0xb7; bclk = 0x93; }
-		else if (srate <= 30000000) { aclk = 0xb6; bclk = 0x93; }
-		else if (srate <= 45000000) { aclk = 0xb4; bclk = 0x91; }
+		if (srate <= 1500000) { aclk = 0xb7; bclk = 0x47; }
+		else if (srate <= 3000000) { aclk = 0xb7; bclk = 0x4b; }
+		else if (srate <= 7000000) { aclk = 0xb7; bclk = 0x4f; }
+		else if (srate <= 14000000) { aclk = 0xb7; bclk = 0x53; }
+		else if (srate <= 30000000) { aclk = 0xb6; bclk = 0x53; }
+		else if (srate <= 45000000) { aclk = 0xb4; bclk = 0x51; }
 		m1 = 0x12;
 
 	        stv0299_writereg (i2c, 0x13, aclk);
@@ -979,21 +984,6 @@
 	return srate;
 }
 
-static int stv0299_check_inversion (struct dvb_i2c_bus *i2c)
-{
-            dprintk ("%s\n", __FUNCTION__);
-    
-            if ((stv0299_readreg (i2c, 0x1b) & 0x98) != 0x98) {
-		                dvb_delay(30);
-		                if ((stv0299_readreg (i2c, 0x1b) & 0x98) != 0x98) {
-				                            u8 val = stv0299_readreg (i2c, 0x0c);
-				                            return stv0299_writereg (i2c, 0x0c, val ^ 0x01);
-				}
-	    }
-    
-            return 0;
-}
-
 static int uni0299_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg)
 {
 	struct dvb_i2c_bus *i2c = fe->i2c;
@@ -1093,14 +1083,13 @@
 		} else if (p->inversion == INVERSION_ON) {
 		        stv0299_writereg(i2c, 0x0c, stv0299_readreg(i2c, 0x0c) | 1);
 		} else {
-		        // temporary hack until the new dvb_frontend.c becomes mainline
-		        stv0299_check_inversion(i2c);
-		    
-//		        printk("stv0299 does not support auto-inversion\n");
-//		        return -EINVAL;
+		        printk("stv0299 does not support auto-inversion\n");
+		        return -EINVAL;
 		}
 
-	        if (state->tuner_type == PHILIPS_SU1278_TSA_TT) {
+	        switch(state->tuner_type) {
+		case PHILIPS_SU1278_TSA_TT: 
+		{
 		        /* check if we should do a finetune */
 	                int frequency_delta = p->frequency - state->tuner_frequency;
 		        int minmax = p->u.qpsk.symbol_rate / 2000;
@@ -1118,10 +1107,7 @@
 			        // now set them as we want
 			        stv0299_writereg (i2c, 0x22, Drot_freq >> 8);
 			        stv0299_writereg (i2c, 0x23, Drot_freq);
-			        break;
-			}
-		}
-
+			} else {
 	        /* A "normal" tune is requested */
 	        stv0299_writereg (i2c, 0x32, 0x80);
 	        stv0299_writereg (i2c, 0x22, 0x00);
@@ -1130,10 +1116,19 @@
 	        stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate, state->tuner_type);
 	        stv0299_set_FEC (i2c, p->u.qpsk.fec_inner);
 	        pll_set_tv_freq (i2c, p->frequency, state->tuner_type, p->u.qpsk.symbol_rate);
-	        dvb_delay(50);
+			}
+		        break;
+		}
+		    
+		default:
+		        stv0299_set_FEC (i2c, p->u.qpsk.fec_inner);
+		        stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate, state->tuner_type);
 	        stv0299_writereg (i2c, 0x22, 0x00);
 	        stv0299_writereg (i2c, 0x23, 0x00);
-	        pll_set_tv_freq (i2c, p->frequency, state->tuner_type, p->u.qpsk.symbol_rate);
+		        stv0299_readreg (i2c, 0x23);
+		        stv0299_writereg (i2c, 0x12, 0xb9);
+		        break;
+		}
  
 	        state->tuner_frequency = p->frequency;
 	        state->fec_inner = p->u.qpsk.fec_inner;
@@ -1172,6 +1167,8 @@
 		break;
 
         case FE_INIT:
+	        switch(state->tuner_type) {
+		case PHILIPS_SU1278_TSA_TT:
 	        state->tuner_frequency = 0;
 	        if (!state->initialised) {
 		        state->initialised = 1;
@@ -1179,6 +1176,11 @@
 		}
 	        break;
 
+		default:
+		        return stv0299_init (i2c, state->tuner_type);
+		}
+	        break;
+
 	case FE_DISEQC_SEND_MASTER_CMD:
 		return stv0299_send_diseqc_msg (i2c, arg);
 
@@ -1191,6 +1193,20 @@
 	case FE_SET_VOLTAGE:
 		return stv0299_set_voltage (i2c, (fe_sec_voltage_t) arg);
 
+	case FE_GET_TUNE_SETTINGS:
+	{
+	        struct dvb_frontend_tune_settings* fesettings = (struct dvb_frontend_tune_settings*) arg;
+	        fesettings->min_delay_ms = 50;
+	        if (fesettings->parameters.u.qpsk.symbol_rate < 10000000) {
+		        fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 32000;
+		        fesettings->max_drift = 5000;
+		} else {
+		        fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 16000;
+		        fesettings->max_drift = fesettings->parameters.u.qpsk.symbol_rate / 2000;
+		}
+	        return 0;
+	}
+	    
 	 default:
 		return -EOPNOTSUPP;
 	};
Index: linux/drivers/media/dvb/frontends/ves1820.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/ves1820.c,v
retrieving revision 1.41
diff -a -u -b -r1.41 ves1820.c
--- linux/drivers/media/dvb/frontends/ves1820.c	1 Mar 2004 22:54:14 -0000	1.41
+++ linux/drivers/media/dvb/frontends/ves1820.c	9 Mar 2004 18:23:43 -0000
@@ -111,8 +111,7 @@
 #endif
 	.caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 |
 		FE_CAN_QAM_128 | FE_CAN_QAM_256 |
-		FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO |
-		FE_CAN_CLEAN_SETUP
+		FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO,
 };
 
 
Index: linux/drivers/media/dvb/frontends/ves1x93.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/ves1x93.c,v
retrieving revision 1.4
diff -a -u -b -r1.4 ves1x93.c
--- linux/drivers/media/dvb/frontends/ves1x93.c	16 Jan 2004 14:34:05 -0000	1.4
+++ linux/drivers/media/dvb/frontends/ves1x93.c	9 Mar 2004 18:23:44 -0000
@@ -30,6 +30,7 @@
 #include <linux/slab.h>
 
 #include "dvb_frontend.h"
+#include "dvb_functions.h"
 
 static int debug = 0;
 #define dprintk	if (debug) printk
@@ -67,10 +68,10 @@
  */
 
 static u8 init_1893_tab [] = {
-	0x01, 0xa4, 0x35, 0x81, 0x2a, 0x0d, 0x55, 0xc4,
+	0x01, 0xa4, 0x35, 0x80, 0x2a, 0x0b, 0x55, 0xc4,
 	0x09, 0x69, 0x00, 0x86, 0x4c, 0x28, 0x7f, 0x00,
 	0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xdc, 0x00,
+	0x80, 0x00, 0x21, 0xb0, 0x14, 0x00, 0xdc, 0x00,
 	0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 	0x00, 0x55, 0x00, 0x00, 0x7f, 0x00
@@ -247,8 +248,16 @@
 {
         ves1x93_writereg (i2c, 0, init_1x93_tab[0] & 0xfe);
         ves1x93_writereg (i2c, 0, init_1x93_tab[0]);
+        dvb_delay(5);
+        return 0;
+}
+
+static int ves1x93_init_aquire (struct dvb_i2c_bus *i2c)
+{
         ves1x93_writereg (i2c, 3, 0x00);
-        return ves1x93_writereg (i2c, 3, init_1x93_tab[3]);
+        ves1x93_writereg (i2c, 3, init_1x93_tab[3]);
+        dvb_delay(5);
+        return 0;
 }
 
 
@@ -308,6 +317,12 @@
 	u32 tmp;
 	u32 XIN, FIN;
 
+	u8 sync = ves1x93_readreg (i2c, 0x0e);
+		if (!(sync & 1)){
+			dprintk("No signal");
+			return -1;
+		}	
+
 	dprintk("%s: srate == %d\n", __FUNCTION__, (unsigned int) srate);
 
 	switch (board_type) {
@@ -403,6 +418,35 @@
 }
 
 
+static int ves1x93_afc (struct dvb_i2c_bus *i2c, u32 freq, u32 srate)
+{
+	int afc;
+
+	u8 sync = ves1x93_readreg (i2c, 0x0e);
+
+	if (!(sync & 8)){
+		dprintk("No sync");
+		return -1;
+	}
+
+        afc = ((int)((ves1x93_readreg (i2c, 0x0a) << 1) & 0xff))/2;
+        afc = (afc * (int)(srate/1000/8))/16;
+    
+	if (afc |= 0){
+	
+		freq -= afc;
+
+		tuner_set_tv_freq (i2c, freq, 0);
+
+        	ves1x93_init_aquire (i2c);
+
+        	afc = ((int)((ves1x93_readreg (i2c, 0x0a) << 1) & 0xff))/2;
+		afc = (afc * (int)(srate/1000/8))/16;
+	}
+       
+        return 0;
+}
+
 static int ves1x93_set_voltage (struct dvb_i2c_bus *i2c, fe_sec_voltage_t voltage)
 {
 	switch (voltage) {
@@ -497,6 +541,7 @@
 		ves1x93_set_inversion (i2c, p->inversion);
 		ves1x93_set_fec (i2c, p->u.qpsk.fec_inner);
 		ves1x93_set_symbolrate (i2c, p->u.qpsk.symbol_rate);
+		ves1x93_afc (i2c, p->frequency, p->u.qpsk.symbol_rate);	    
                 break;
         }
 
@@ -530,9 +575,6 @@
         case FE_INIT:
 		return ves1x93_init (i2c);
 
-	case FE_RESET:
-		return ves1x93_clr_bit (i2c);
-
 	case FE_SET_TONE:
 		return -EOPNOTSUPP;  /* the ves1893 can generate the 22k */
 		                     /* let's implement this when we have */
Index: linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c,v
retrieving revision 1.43
diff -a -u -b -r1.43 ttusb_dec.c
--- linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	29 Feb 2004 12:25:30 -0000	1.43
+++ linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	9 Mar 2004 18:23:45 -0000
@@ -1586,10 +1586,6 @@
 		dprintk("%s: FE_INIT\n", __FUNCTION__);
 		break;
 
-	case FE_RESET:
-		dprintk("%s: FE_RESET\n", __FUNCTION__);
-		break;
-
 	default:
 		dprintk("%s: unknown IOCTL (0x%X)\n", __FUNCTION__, cmd);
 		return -EINVAL;
@@ -1701,10 +1697,6 @@
 		dprintk("%s: FE_INIT\n", __FUNCTION__);
 		break;
 
-	case FE_RESET:
-		dprintk("%s: FE_RESET\n", __FUNCTION__);
-		break;
-
 	case FE_DISEQC_SEND_MASTER_CMD:
 		dprintk("%s: FE_DISEQC_SEND_MASTER_CMD\n", __FUNCTION__);
 		break;
Index: linux/include/linux/dvb/frontend.h
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/include/linux/dvb/frontend.h,v
retrieving revision 1.10
diff -a -u -b -r1.10 frontend.h
--- linux/include/linux/dvb/frontend.h	8 May 2003 13:50:13 -0000	1.10
+++ linux/include/linux/dvb/frontend.h	9 Mar 2004 18:23:45 -0000
@@ -59,9 +59,9 @@
 	FE_CAN_BANDWIDTH_AUTO         = 0x40000,
 	FE_CAN_GUARD_INTERVAL_AUTO    = 0x80000,
 	FE_CAN_HIERARCHY_AUTO         = 0x100000,
-	FE_CAN_RECOVER                = 0x20000000,
-	FE_CAN_CLEAN_SETUP            = 0x40000000,
-	FE_CAN_MUTE_TS                = 0x80000000
+	FE_NEEDS_BENDING              = 0x20000000, // frontend requires frequency bending
+	FE_CAN_RECOVER                = 0x40000000, // frontend can recover from a cable unplug automatically
+	FE_CAN_MUTE_TS                = 0x80000000  // frontend can stop spurious TS data output
 } fe_caps_t;
 
 

Home | Main Index | Thread Index