All pastes #1054600 Raw Edit

genpix-v4l-041007_v4l-dvb-change

public diff v1 · immutable
#1054600 ·published 2008-06-23 22:23 UTC
rendered paste body
diff -r 595fe1ec7511 linux/drivers/media/dvb/b2c2/flexcop.c--- a/linux/drivers/media/dvb/b2c2/flexcop.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/b2c2/flexcop.c	Mon Jun 23 15:07:10 2008 -0700@@ -49,8 +49,6 @@ MODULE_PARM_DESC(debug, "set debug level MODULE_PARM_DESC(debug, "set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able))." DEBSTATUS); #undef DEBSTATUS -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- /* global zero for ibi values */ flexcop_ibi_value ibi_zero; @@ -68,10 +66,8 @@ static int flexcop_dvb_stop_feed(struct   static int flexcop_dvb_init(struct flexcop_device *fc) {-	int ret = dvb_register_adapter(&fc->dvb_adapter,-				       "FlexCop Digital TV device", fc->owner,-				       fc->dev, adapter_nr);-	if (ret < 0) {+	int ret;+	if ((ret = dvb_register_adapter(&fc->dvb_adapter,"FlexCop Digital TV device",fc->owner,fc->dev)) < 0) { 		err("error registering DVB adapter"); 		return ret; 	}diff -r 595fe1ec7511 linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c--- a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c	Mon Jun 23 15:07:10 2008 -0700@@ -40,8 +40,6 @@ static int debug;  module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define dprintk( args... ) \ 	do { \@@ -720,10 +718,7 @@ static int __devinit dvb_bt8xx_load_card { 	int result; -	result = dvb_register_adapter(&card->dvb_adapter, card->card_name,-				      THIS_MODULE, &card->bt->dev->dev,-				      adapter_nr);-	if (result < 0) {+	if ((result = dvb_register_adapter(&card->dvb_adapter, card->card_name, THIS_MODULE, &card->bt->dev->dev)) < 0) { 		printk("dvb_bt8xx: dvb_register_adapter failed (errno = %d)\n", result); 		return result; 	}diff -r 595fe1ec7511 linux/drivers/media/dvb/cinergyT2/cinergyT2.c--- a/linux/drivers/media/dvb/cinergyT2/cinergyT2.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/cinergyT2/cinergyT2.c	Mon Jun 23 15:07:10 2008 -0700@@ -60,8 +60,6 @@ static int debug; static int debug; module_param_named(debug, debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15) #define dprintk(level, args...)						\@@ -1008,10 +1006,7 @@ static int cinergyt2_probe (struct usb_i 		return -ENOMEM; 	} -	err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME,-				   THIS_MODULE, &cinergyt2->udev->dev,-				   adapter_nr);-	if (err < 0) {+	if ((err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME, THIS_MODULE, &cinergyt2->udev->dev)) < 0) { 		kfree(cinergyt2); 		return err; 	}diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvb_frontend.c--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	Mon Jun 23 15:07:10 2008 -0700@@ -101,6 +101,7 @@ struct dvb_frontend_private { 	/* thread/frontend values */ 	struct dvb_device *dvbdev; 	struct dvb_frontend_parameters parameters;+	struct dvb_frontend_parameters_new parameters_new; 	struct dvb_fe_events events; 	struct semaphore sem; 	struct list_head list_head;@@ -116,6 +117,8 @@ struct dvb_frontend_private { 	int tone; 	int voltage; +	int current_standard_set;+	fe_type_t current_standard; 	/* swzigzag values */ 	unsigned int state; 	unsigned int bending;@@ -267,13 +270,23 @@ static int dvb_frontend_swzigzag_autotun 	int autoinversion; 	int ready = 0; 	struct dvb_frontend_private *fepriv = fe->frontend_priv;-	int original_inversion = fepriv->parameters.inversion;-	u32 original_frequency = fepriv->parameters.frequency;+        int original_inversion;+        u32 original_frequency;+ +        if (fepriv->current_standard_set) {+                original_inversion = fepriv->parameters_new.inversion;+                original_frequency = fepriv->parameters_new.frequency;+        } else {+                original_inversion = fepriv->parameters.inversion;+                original_frequency = fepriv->parameters.frequency;+        }  	/* are we using autoinversion? */ 	autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&-			 (fepriv->parameters.inversion == INVERSION_AUTO));-+                ((fepriv->current_standard_set &&+                  fepriv->parameters_new.inversion == INVERSION_AUTO) ||+                 (! fepriv->current_standard_set &&+                   fepriv->parameters.inversion == INVERSION_AUTO))); 	/* setup parameters correctly */ 	while(!ready) { 		/* calculate the lnb_drift */@@ -338,14 +351,24 @@ static int dvb_frontend_swzigzag_autotun 		fepriv->auto_step, fepriv->auto_sub_step, fepriv->started_auto_step);  	/* set the frontend itself */-	fepriv->parameters.frequency += fepriv->lnb_drift;-	if (autoinversion)-		fepriv->parameters.inversion = fepriv->inversion;-	if (fe->ops.set_frontend)-		fe->ops.set_frontend(fe, &fepriv->parameters);--	fepriv->parameters.frequency = original_frequency;-	fepriv->parameters.inversion = original_inversion;+        if (fepriv->current_standard_set) {+                fepriv->parameters_new.frequency += fepriv->lnb_drift;+                if (autoinversion)+                        fepriv->parameters_new.inversion = fepriv->inversion;+                if (fe->ops.set_frontend2)+                        fe->ops.set_frontend2(fe, &fepriv->parameters_new);+                fepriv->parameters_new.frequency = original_frequency;+                fepriv->parameters_new.inversion = original_inversion;+        } else {+                fepriv->parameters.frequency += fepriv->lnb_drift;+                if (autoinversion)+                        fepriv->parameters.inversion = fepriv->inversion;+                if (fe->ops.set_frontend)+                        fe->ops.set_frontend(fe, &fepriv->parameters);+ +                fepriv->parameters.frequency = original_frequency;+                fepriv->parameters.inversion = original_inversion;+        }  	fepriv->auto_sub_step++; 	return 0;@@ -353,7 +376,7 @@ static int dvb_frontend_swzigzag_autotun  static void dvb_frontend_swzigzag(struct dvb_frontend *fe) {-	fe_status_t s = 0;+	fe_status_t s; 	struct dvb_frontend_private *fepriv = fe->frontend_priv;  	/* if we've got no parameters, just keep idling */@@ -366,8 +389,13 @@ static void dvb_frontend_swzigzag(struct 	/* in SCAN mode, we just set the frontend when asked and leave it alone */ 	if (fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT) { 		if (fepriv->state & FESTATE_RETUNE) {-			if (fe->ops.set_frontend)-				fe->ops.set_frontend(fe, &fepriv->parameters);+                        if (fepriv->current_standard_set) {+                                if (fe->ops.set_frontend2)+                                        fe->ops.set_frontend2(fe, &fepriv->parameters_new);+                        } else {+                                if (fe->ops.set_frontend)+                                        fe->ops.set_frontend(fe, &fepriv->parameters);+                        } 			fepriv->state = FESTATE_TUNED; 		} 		fepriv->delay = 3*HZ;@@ -987,18 +1015,21 @@ static int dvb_frontend_ioctl(struct ino 			/* default values */ 			switch(fe->ops.info.type) { 			case FE_QPSK:+			case FE_DVB_S: 				fepriv->min_delay = HZ/20; 				fepriv->step_size = fepriv->parameters.u.qpsk.symbol_rate / 16000; 				fepriv->max_drift = fepriv->parameters.u.qpsk.symbol_rate / 2000; 				break;  			case FE_QAM:+			case FE_DVB_C: 				fepriv->min_delay = HZ/20; 				fepriv->step_size = 0; /* no zigzag */ 				fepriv->max_drift = 0; 				break;  			case FE_OFDM:+			case FE_DVB_T: 				fepriv->min_delay = HZ/20; 				fepriv->step_size = fe->ops.info.frequency_stepsize * 2; 				fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;@@ -1007,6 +1038,9 @@ static int dvb_frontend_ioctl(struct ino 				fepriv->min_delay = HZ/20; 				fepriv->step_size = 0; 				fepriv->max_drift = 0;+				break;+			case FE_DVB_S2:+				printk("dvb-core: ERROR FE_DVB_S2 is handled via FE_SET_FRONTEND2.\n"); 				break; 			} 		}@@ -1020,6 +1054,101 @@ static int dvb_frontend_ioctl(struct ino 		err = 0; 		break; 	}+	case FE_SET_FRONTEND2: {+		struct dvb_frontend_tune_settings fetunesettings;+		struct dvb_frontend_parameters_new *castedparg;++		if (!fepriv->current_standard_set) {+			err = -EINVAL;+			break;+		}++		castedparg = (struct dvb_frontend_parameters_new *)parg;+		memcpy (&fepriv->parameters_new, parg,+			 sizeof (struct dvb_frontend_parameters_new));++		memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));++		/* be sure struct union pointer is set - even if it is NULL */+		fetunesettings.parameters_new.u = castedparg->u;++		/* force auto frequency inversion if requested */+		if (dvb_force_auto_inversion) {+			fepriv->parameters_new.inversion = INVERSION_AUTO;+			fetunesettings.parameters_new.inversion = INVERSION_AUTO;+		}+		if (fe->ops.info.type == FE_DVB_T || fe->ops.info.type == FE_OFDM) {+			/* without hierachical coding code_rate_LP is irrelevant,+			* so we tolerate the otherwise invalid FEC_NONE setting */+			if (fepriv->parameters_new.u.ofdm.hierarchy_information == HIERARCHY_NONE &&+						 fepriv->parameters_new.u.ofdm.code_rate_LP == FEC_NONE)+				fepriv->parameters_new.u.ofdm.code_rate_LP = FEC_AUTO;+		}++		/* get frontend-specific tuning settings */+		if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) {+			fepriv->min_delay = (fetunesettings.min_delay_ms * HZ) / 1000;+			fepriv->max_drift = fetunesettings.max_drift;+			fepriv->step_size = fetunesettings.step_size;+		} else {+			/* default values */+			switch(fe->ops.info.type) {+			case FE_DVB_S:+			case FE_QPSK:+				if (fepriv->current_standard != FE_DVB_S) {+					err = -EINVAL;+					break;+				}+				fepriv->min_delay = HZ/20;+				fepriv->step_size = fepriv->parameters_new.u.qpsk.symbol_rate / 16000;+				fepriv->max_drift = fepriv->parameters_new.u.qpsk.symbol_rate / 2000;+				break;+			case FE_DVB_C:+			case FE_QAM:+				if (fepriv->current_standard != FE_DVB_C) {+					err = -EINVAL;+					break;+				}+				fepriv->min_delay = HZ/20;+				fepriv->step_size = 0; /* no zigzag */+				fepriv->max_drift = 0;+				break;+			case FE_DVB_T:+			case FE_OFDM:+				if (fepriv->current_standard != FE_DVB_T) {+					err = -EINVAL;+					break;+				}+				fepriv->min_delay = HZ/20;+				fepriv->step_size = fe->ops.info.frequency_stepsize * 2;+				fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;+				break;+			case FE_ATSC:+				printk("dvb-core: FE_ATSC not handled yet.\n");+				break;+			case FE_DVB_S2:+				if (fepriv->current_standard != FE_DVB_S2) {+					err = -EINVAL;+					break;+				}+				fepriv->min_delay = HZ/20;+				fepriv->step_size = fepriv->parameters_new.u.qpsk2.symbol_rate / 16000;+				fepriv->max_drift = fepriv->parameters_new.u.qpsk2.symbol_rate / 2000;+				break;++			}+		}+		if (dvb_override_tune_delay > 0)+			fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;++		fepriv->state = FESTATE_RETUNE;+		dvb_frontend_wakeup(fe);+		dvb_frontend_add_event(fe, 0);+		fepriv->status = 0;+		err = 0;+		/* if previously used delete old tuning params */+		break;+	}  	case FE_GET_EVENT: 		err = dvb_frontend_get_event (fe, parg, file->f_flags);@@ -1031,6 +1160,48 @@ static int dvb_frontend_ioctl(struct ino 			err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg); 		} 		break;+	case FE_GET_FRONTEND2:+		if (!fepriv->current_standard) {+			err = -EINVAL;+			break;+		}+		if (fe->ops.get_frontend2) {+			memcpy (parg, &fepriv->parameters_new, sizeof (struct dvb_frontend_parameters_new));+			err = fe->ops.get_frontend2(fe, (struct dvb_frontend_parameters_new*) parg);+		}+		break;++	case FE_SET_STANDARD:+		/*+		* current_standard_set and current_standard are reset+		* this prevents user from ignoring return value and+		* if current_standard would be kept as fallback, users may+		* supply corrupted tuning data.+		* if the new standard isn't supported no FE_SET_FRONTEND2+		* is possible. it will return EINVAL+		*/+		fepriv->current_standard_set = 0;+		fepriv->current_standard = 0;+		{+			fe_type_t fetype = (fe_type_t) parg;+			if (fetype != FE_DVB_S && fetype != FE_DVB_C && fetype != FE_DVB_T && fetype != FE_DVB_S2 && fetype != FE_ATSC) {+				err = -EINVAL;+			} else if (fe->ops.set_standard) {+				err = fe->ops.set_standard(fe, fetype);+				if (!err) {+					fepriv->current_standard_set = 1;+					fepriv->current_standard = fetype;+				}+			}+		}+		break;++	case FE_GET_EXTENDED_INFO: {+		struct dvb_fe_caps_extended* info = parg;+		memcpy(info, &fe->ops.extended_info, sizeof(struct dvb_fe_caps_extended));+		err = 0;+		break;+	}  	case FE_SET_FRONTEND_TUNE_MODE: 		fepriv->tune_mode_flags = (unsigned long) parg;@@ -1080,7 +1251,10 @@ static int dvb_frontend_open(struct inod 		fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT; 		fepriv->tone = -1; 		fepriv->voltage = -1;-+                fepriv->current_standard_set = 0;+                fepriv->current_standard = 0;+                if (fe->ops.set_standard)+                        fe->ops.set_standard(fe, 0); 		ret = dvb_frontend_start (fe); 		if (ret) 			goto err2;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvb_frontend.h--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	Mon Jun 23 15:07:10 2008 -0700@@ -48,6 +48,7 @@ struct dvb_frontend_tune_settings { 	int step_size; 	int max_drift; 	struct dvb_frontend_parameters parameters;+	struct dvb_frontend_parameters_new parameters_new; };  struct dvb_frontend;@@ -128,6 +129,7 @@ struct dvb_frontend_ops { struct dvb_frontend_ops {  	struct dvb_frontend_info info;+	struct dvb_fe_caps_extended extended_info;  	void (*release)(struct dvb_frontend* fe); 	void (*release_sec)(struct dvb_frontend* fe);@@ -167,6 +169,10 @@ struct dvb_frontend_ops { 	int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg); 	int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); 	int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);+        int (*set_standard)(struct dvb_frontend* fe, fe_type_t type);+        int (*get_extended_info)(struct dvb_frontend* fe, struct dvb_fe_caps_extended* extendedinfo);+        int (*set_frontend2)(struct dvb_frontend* fe, struct dvb_frontend_parameters_new* params);+        int (*get_frontend2)(struct dvb_frontend* fe, struct dvb_frontend_parameters_new* params); 	int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);  	struct dvb_tuner_ops tuner_ops;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvbdev.c--- a/linux/drivers/media/dvb/dvb-core/dvbdev.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvbdev.c	Mon Jun 23 15:07:10 2008 -0700@@ -52,6 +52,7 @@ static const char * const dnames[] = { 	"net", "osd" }; +#define DVB_MAX_ADAPTERS	8 #define DVB_MAX_IDS		4 #define nums2minor(num,type,id)	((num << 6) | (id << 4) | type) #define MAX_DVB_MINORS		(DVB_MAX_ADAPTERS*64)@@ -276,25 +277,18 @@ void dvb_unregister_device(struct dvb_de } EXPORT_SYMBOL(dvb_unregister_device); -static int dvbdev_check_free_adapter_num(int num)-{-	struct list_head *entry;-	list_for_each(entry, &dvb_adapter_list) {-		struct dvb_adapter *adap;-		adap = list_entry(entry, struct dvb_adapter, list_head);-		if (adap->num == num)-			return 0;-	}-	return 1;-}  static int dvbdev_get_free_adapter_num (void) { 	int num = 0;  	while (num < DVB_MAX_ADAPTERS) {-		if (dvbdev_check_free_adapter_num(num))-			return num;+		struct dvb_adapter *adap;+		list_for_each_entry(adap, &dvb_adapter_list, list_head)+			if (adap->num == num)+				goto skip;+		return num;+skip: 		num++; 	} @@ -302,28 +296,13 @@ static int dvbdev_get_free_adapter_num ( }  -int dvb_register_adapter(struct dvb_adapter *adap, const char *name,-			 struct module *module, struct device *device,-			 short *adapter_nums)+int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device) {-	int i, num;+	int num;  	mutex_lock(&dvbdev_register_lock); -	for (i = 0; i < DVB_MAX_ADAPTERS; ++i) {-		num = adapter_nums[i];-		if (num >= 0  &&  num < DVB_MAX_ADAPTERS) {-		/* use the one the driver asked for */-			if (dvbdev_check_free_adapter_num(num))-				break;-		} else {-			num = dvbdev_get_free_adapter_num();-			break;-		}-		num = -1;-	}--	if (num < 0) {+	if ((num = dvbdev_get_free_adapter_num ()) < 0) { 		mutex_unlock(&dvbdev_register_lock); 		return -ENFILE; 	}diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvbdev.h--- a/linux/drivers/media/dvb/dvb-core/dvbdev.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvbdev.h	Mon Jun 23 15:07:10 2008 -0700@@ -31,10 +31,6 @@  #define DVB_MAJOR 212 -#define DVB_MAX_ADAPTERS 8--#define DVB_UNSET (-1)- #define DVB_DEVICE_VIDEO      0 #define DVB_DEVICE_AUDIO      1 #define DVB_DEVICE_SEC        2@@ -45,11 +41,6 @@ #define DVB_DEVICE_NET        7 #define DVB_DEVICE_OSD        8 -#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \-	static short adapter_nr[] = \-		{[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \-	module_param_array(adapter_nr, short, NULL, 0444); \-	MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")  struct dvb_adapter { 	int num;@@ -87,9 +78,7 @@ struct dvb_device { };  -extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,-				struct module *module, struct device *device,-				short *adapter_nums);+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device); extern int dvb_unregister_adapter (struct dvb_adapter *adap);  extern int dvb_register_device (struct dvb_adapter *adap,diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/Kconfig--- a/linux/drivers/media/dvb/dvb-usb/Kconfig	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/Kconfig	Mon Jun 23 15:07:10 2008 -0700@@ -183,13 +183,11 @@ config DVB_USB_VP702X 	  DVB-S USB2.0 receivers.  config DVB_USB_GP8PSK-	tristate "GENPIX 8PSK->USB module support"+	tristate "GENPIX DVB-s support" 	depends on DVB_USB 	help 	  Say Y here to support the-	    GENPIX 8psk module--	  DVB-S USB2.0 receivers.+	    GENPIX DVB-s USB2.0 receiver.  config DVB_USB_NOVA_T_USB2 	tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/a800.c--- a/linux/drivers/media/dvb/dvb-usb/a800.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/a800.c	Mon Jun 23 15:07:10 2008 -0700@@ -18,9 +18,6 @@ static int debug; static int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (rc=1 (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_rc(args...)   dprintk(debug,0x01,args)  static int a800_power_ctrl(struct dvb_usb_device *d, int onoff)@@ -97,8 +94,7 @@ static int a800_probe(struct usb_interfa static int a800_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &a800_properties,-				   THIS_MODULE, NULL, adapter_nr);+	return dvb_usb_device_init(intf,&a800_properties,THIS_MODULE,NULL); }  /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/af9005.c--- a/linux/drivers/media/dvb/dvb-usb/af9005.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/af9005.c	Mon Jun 23 15:07:10 2008 -0700@@ -38,8 +38,6 @@ int dvb_usb_af9005_dump_eeprom = 0; int dvb_usb_af9005_dump_eeprom = 0; module_param_named(dump_eeprom, dvb_usb_af9005_dump_eeprom, int, 0); MODULE_PARM_DESC(dump_eeprom, "dump contents of the eeprom.");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  /* remote control decoder */ int (*rc_decode) (struct dvb_usb_device * d, u8 * data, int len, u32 * event,@@ -1022,8 +1020,7 @@ static int af9005_usb_probe(struct usb_i static int af9005_usb_probe(struct usb_interface *intf, 			    const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &af9005_properties,-				   THIS_MODULE, NULL, adapter_nr);+	return dvb_usb_device_init(intf, &af9005_properties, THIS_MODULE, NULL); }  static struct usb_device_id af9005_usb_table[] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/cxusb.c--- a/linux/drivers/media/dvb/dvb-usb/cxusb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/cxusb.c	Mon Jun 23 15:07:10 2008 -0700@@ -39,9 +39,6 @@ static int dvb_usb_cxusb_debug; static int dvb_usb_cxusb_debug; module_param_named(debug, dvb_usb_cxusb_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_info(args...)   dprintk(dvb_usb_cxusb_debug,0x01,args) #define deb_i2c(args...)    if (d->udev->descriptor.idVendor == USB_VID_MEDION) \ 				dprintk(dvb_usb_cxusb_debug,0x01,args)@@ -494,14 +491,14 @@ static int dvico_bluebird_xc2028_callbac  	switch (command) { 	case XC2028_TUNER_RESET:-		deb_info("%s: XC2028_TUNER_RESET %d\n", __func__, arg);+		deb_info("%s: XC2028_TUNER_RESET %d\n", __FUNCTION__, arg); 		cxusb_bluebird_gpio_pulse(d, 0x01, 1); 		break; 	case XC2028_RESET_CLK:-		deb_info("%s: XC2028_RESET_CLK %d\n", __func__, arg);+		deb_info("%s: XC2028_RESET_CLK %d\n", __FUNCTION__, arg); 		break; 	default:-		deb_info("%s: unknown command %d, arg %d\n", __func__,+		deb_info("%s: unknown command %d, arg %d\n", __FUNCTION__, 			 command, arg); 		return -EINVAL; 	}@@ -725,24 +722,16 @@ static int cxusb_probe(struct usb_interf static int cxusb_probe(struct usb_interface *intf, 		       const struct usb_device_id *id) {-	if (0 == dvb_usb_device_init(intf, &cxusb_medion_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgh064f_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_dee1601_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgz201_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_dtt7579_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_dualdig4_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &cxusb_bluebird_nano2_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf,-				&cxusb_bluebird_nano2_needsfirmware_properties,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf,&cxusb_medion_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_lgh064f_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_dee1601_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_lgz201_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_dtt7579_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_dualdig4_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_nano2_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&cxusb_bluebird_nano2_needsfirmware_properties,THIS_MODULE,NULL) == 0) { 		return 0;+	}  	return -EINVAL; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dib0700_core.c--- a/linux/drivers/media/dvb/dvb-usb/dib0700_core.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dib0700_core.c	Mon Jun 23 15:07:10 2008 -0700@@ -16,8 +16,6 @@ int dvb_usb_dib0700_ir_proto = 1; int dvb_usb_dib0700_ir_proto = 1; module_param(dvb_usb_dib0700_ir_proto, int, 0644); MODULE_PARM_DESC(dvb_usb_dib0700_ir_proto, "set ir protocol (0=NEC, 1=RC5 (default), 2=RC6).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  /* expecting rx buffer: request data[0] data[1] ... data[2] */ static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen)@@ -291,8 +289,7 @@ static int dib0700_probe(struct usb_inte #endif  	for (i = 0; i < dib0700_device_count; i++)-		if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE,-					&dev, adapter_nr) == 0)+		if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE, &dev) == 0) 		{ 			dib0700_rc_setup(dev); 			return 0;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dibusb-mb.c--- a/linux/drivers/media/dvb/dvb-usb/dibusb-mb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-mb.c	Mon Jun 23 15:07:10 2008 -0700@@ -13,8 +13,6 @@  * see Documentation/dvb/README.dvb-usb for more information  */ #include "dibusb.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  static int dib3000mb_i2c_gate_ctrl(struct dvb_frontend* fe, int enable) {@@ -109,14 +107,10 @@ static int dibusb_probe(struct usb_inter static int dibusb_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	if (0 == dvb_usb_device_init(intf, &dibusb1_1_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &dibusb1_1_an2235_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &dibusb2_0b_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &artec_t1_usb2_properties,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf,&dibusb1_1_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&dibusb1_1_an2235_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&dibusb2_0b_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&artec_t1_usb2_properties,THIS_MODULE,NULL) == 0) 		return 0;  	return -EINVAL;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dibusb-mc.c--- a/linux/drivers/media/dvb/dvb-usb/dibusb-mc.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-mc.c	Mon Jun 23 15:07:10 2008 -0700@@ -14,16 +14,13 @@  */ #include "dibusb.h" -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- /* USB Driver stuff */ static struct dvb_usb_device_properties dibusb_mc_properties;  static int dibusb_mc_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &dibusb_mc_properties, THIS_MODULE,-				   NULL, adapter_nr);+	return dvb_usb_device_init(intf,&dibusb_mc_properties,THIS_MODULE,NULL); }  /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/digitv.c--- a/linux/drivers/media/dvb/dvb-usb/digitv.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/digitv.c	Mon Jun 23 15:07:10 2008 -0700@@ -20,9 +20,6 @@ static int dvb_usb_digitv_debug; static int dvb_usb_digitv_debug; module_param_named(debug,dvb_usb_digitv_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_rc(args...)   dprintk(dvb_usb_digitv_debug,0x01,args)  static int digitv_ctrl_msg(struct dvb_usb_device *d,@@ -259,9 +256,8 @@ static int digitv_probe(struct usb_inter 		const struct usb_device_id *id) { 	struct dvb_usb_device *d;-	int ret = dvb_usb_device_init(intf, &digitv_properties, THIS_MODULE, &d,-				      adapter_nr);-	if (ret == 0) {+	int ret;+	if ((ret = dvb_usb_device_init(intf,&digitv_properties,THIS_MODULE,&d)) == 0) { 		u8 b[4] = { 0 };  		if (d != NULL) { /* do that only when the firmware is loaded */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dtt200u.c--- a/linux/drivers/media/dvb/dvb-usb/dtt200u.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dtt200u.c	Mon Jun 23 15:07:10 2008 -0700@@ -17,8 +17,6 @@ int dvb_usb_dtt200u_debug; int dvb_usb_dtt200u_debug; module_param_named(debug,dvb_usb_dtt200u_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2 (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) {@@ -103,16 +101,11 @@ static int dtt200u_usb_probe(struct usb_ static int dtt200u_usb_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	if (0 == dvb_usb_device_init(intf, &dtt200u_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &wt220u_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &wt220u_fc_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &wt220u_zl0353_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &wt220u_miglia_properties,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf,&dtt200u_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&wt220u_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&wt220u_fc_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&wt220u_zl0353_properties,THIS_MODULE,NULL) == 0 ||+		dvb_usb_device_init(intf,&wt220u_miglia_properties,THIS_MODULE,NULL) == 0) 		return 0;  	return -ENODEV;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h	Mon Jun 23 15:07:10 2008 -0700@@ -40,8 +40,7 @@ extern int dvb_usb_i2c_init(struct dvb_u extern int dvb_usb_i2c_init(struct dvb_usb_device *); extern int dvb_usb_i2c_exit(struct dvb_usb_device *); -extern int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap,-				    short *adapter_nums);+extern int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap);diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c	Mon Jun 23 15:07:10 2008 -0700@@ -77,13 +77,12 @@ static int dvb_usb_stop_feed(struct dvb_ 	return dvb_usb_ctrl_feed(dvbdmxfeed,0); } -int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)+int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap) {-	int ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,-				       adap->dev->owner, &adap->dev->udev->dev,-				       adapter_nums);+	int ret; -	if (ret < 0) {+	if ((ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,+			adap->dev->owner, &adap->dev->udev->dev)) < 0) { 		deb_info("dvb_register_adapter failed: error %d", ret); 		goto err; 	}diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h	Mon Jun 23 15:07:10 2008 -0700@@ -136,6 +136,8 @@ #define USB_PID_HAUPPAUGE_NOVA_TD_STICK			0x9580 #define USB_PID_AVERMEDIA_EXPRESS			0xb568 #define USB_PID_AVERMEDIA_VOLAR				0xa807+#define USB_PID_GENPIX_8PSK_REV_2			0x0202+#define USB_PID_GENPIX_SKYWALKER			0x0203 #define USB_PID_AVERMEDIA_VOLAR_2			0xb808 #define USB_PID_TECHNOTREND_CONNECT_S2400               0x3006 #define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY	0x005a@@ -183,11 +185,8 @@ #define USB_PID_WINFAST_DTV_DONGLE_WARM			0x6026 #define USB_PID_WINFAST_DTV_DONGLE_STK7700P		0x6f00 #define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2		0x6f01-#define USB_PID_GENPIX_8PSK_REV_1_COLD			0x0200-#define USB_PID_GENPIX_8PSK_REV_1_WARM			0x0201-#define USB_PID_GENPIX_8PSK_REV_2			0x0202-#define USB_PID_GENPIX_SKYWALKER_1			0x0203-#define USB_PID_GENPIX_SKYWALKER_CW3K			0x0204+#define USB_PID_GENPIX_8PSK_COLD			0x0200+#define USB_PID_GENPIX_8PSK_WARM			0x0201 #define USB_PID_SIGMATEK_DVB_110			0x6610 #define USB_PID_MSI_DIGI_VOX_MINI_II			0x1513 #define USB_PID_OPERA1_COLD				0x2830diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c	Mon Jun 23 15:07:10 2008 -0700@@ -26,7 +26,7 @@ module_param_named(force_pid_filter_usag module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage, int, 0444); MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a PID filter, if any (default: 0)."); -static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)+static int dvb_usb_adapter_init(struct dvb_usb_device *d) { 	struct dvb_usb_adapter *adap; 	int ret,n;@@ -72,7 +72,7 @@ static int dvb_usb_adapter_init(struct d 		}  		if ((ret = dvb_usb_adapter_stream_init(adap)) ||-			(ret = dvb_usb_adapter_dvb_init(adap, adapter_nrs)) ||+			(ret = dvb_usb_adapter_dvb_init(adap)) || 			(ret = dvb_usb_adapter_frontend_init(adap))) { 			return ret; 		}@@ -122,7 +122,7 @@ static int dvb_usb_exit(struct dvb_usb_d 	return 0; } -static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums)+static int dvb_usb_init(struct dvb_usb_device *d) { 	int ret = 0; @@ -143,7 +143,7 @@ static int dvb_usb_init(struct dvb_usb_d 	dvb_usb_device_power_ctrl(d, 1);  	if ((ret = dvb_usb_i2c_init(d)) ||-		(ret = dvb_usb_adapter_init(d, adapter_nums))) {+		(ret = dvb_usb_adapter_init(d))) { 		dvb_usb_exit(d); 		return ret; 	}@@ -213,10 +213,8 @@ int dvb_usb_device_power_ctrl(struct dvb /*  * USB  */-int dvb_usb_device_init(struct usb_interface *intf,-			struct dvb_usb_device_properties *props,-			struct module *owner, struct dvb_usb_device **du,-			short *adapter_nums)+int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_properties+		*props, struct module *owner,struct dvb_usb_device **du) { 	struct usb_device *udev = interface_to_usbdev(intf); 	struct dvb_usb_device *d = NULL;@@ -256,7 +254,7 @@ int dvb_usb_device_init(struct usb_inter 	if (du != NULL) 		*du = d; -	ret = dvb_usb_init(d, adapter_nums);+	ret = dvb_usb_init(d);  	if (ret == 0) 		info("%s successfully initialized and connected.",desc->name);diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb.h	Mon Jun 23 15:07:10 2008 -0700@@ -186,6 +186,7 @@ struct dvb_usb_adapter_properties {  * @num_device_descs: number of struct dvb_usb_device_description in @devices  * @devices: array of struct dvb_usb_device_description compatibles with these  *  properties.+ * @device_version: called to find out the version number.  */ #define MAX_NO_OF_ADAPTER_PER_DEVICE 2 struct dvb_usb_device_properties {@@ -227,6 +228,7 @@ struct dvb_usb_device_properties {  	int num_device_descs; 	struct dvb_usb_device_description devices[9];+	int (*device_version) (struct dvb_usb_device *, int *); };  /**@@ -387,10 +389,7 @@ struct dvb_usb_device { 	void *priv; }; -extern int dvb_usb_device_init(struct usb_interface *,-			       struct dvb_usb_device_properties *,-			       struct module *, struct dvb_usb_device **,-			       short *adapter_nums);+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **); extern void dvb_usb_device_exit(struct usb_interface *);  /* the generic read/write method for device control */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c--- a/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c	Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- *  - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ *  - GENPIX 8PSK-to-USB2+ *  - GENPIX 8PSK-to-USB2 Rev.2+ *  - GENPIX SkyWalker-1  *- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Genpix Electronics (genpix@genpix-electronics.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com)  *  * This module is based off the vp7045 and vp702x modules+ *  and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006)  *  *	This program is free software; you can redistribute it and/or modify it  *	under the terms of the GNU General Public License as published by the Free@@ -16,7 +16,7 @@  */ #include "gp8psk.h" -struct gp8psk_fe_state {+struct gp_universal_fe_state { 	struct dvb_frontend fe; 	struct dvb_usb_device *d; 	u8 lock;@@ -25,22 +25,37 @@ struct gp8psk_fe_state { 	unsigned long status_check_interval; }; -static int gp8psk_fe_update_status(struct gp8psk_fe_state *st)+static int gp_universal_tuned_to_DCII(struct dvb_frontend* fe)+{+	struct gp_universal_fe_state *st = fe->demodulator_priv;+	u8 status;+	gp_universal_usb_in_op(st->d, GET_GENPIX_CONFIG, 0,0,&status,1);+	return (status & bmDCtuned);+}++static int gp_universal_set_tuner_mode(struct dvb_frontend* fe, int mode)+{+	struct gp_universal_fe_state *state = fe->demodulator_priv;+	return gp_universal_usb_out_op(state->d, SET_GENPIX_CONFIG, mode,0,NULL,0);+}++static int gp_universal_fe_update_status(struct gp_universal_fe_state *st) { 	u8 buf[6]; 	if (time_after(jiffies,st->next_status_check)) {-		gp8psk_usb_in_op(st->d, GET_SIGNAL_LOCK, 0,0,&st->lock,1);-		gp8psk_usb_in_op(st->d, GET_SIGNAL_STRENGTH, 0,0,buf,6);+		gp_universal_usb_in_op(st->d, GET_SIGNAL_LOCK, 0,0,&st->lock,1);+		gp_universal_usb_in_op(st->d, GET_SIGNAL_STRENGTH, 0,0,buf,6); 		st->snr = (buf[1]) << 8 | buf[0]; 		st->next_status_check = jiffies + (st->status_check_interval*HZ)/1000; 	} 	return 0; } -static int gp8psk_fe_read_status(struct dvb_frontend* fe, fe_status_t *status)++static int gp_universal_fe_read_status(struct dvb_frontend* fe, fe_status_t *status) {-	struct gp8psk_fe_state *st = fe->demodulator_priv;-	gp8psk_fe_update_status(st);+	struct gp_universal_fe_state *st = fe->demodulator_priv;+	gp_universal_fe_update_status(st);  	if (st->lock) 		*status = FE_HAS_LOCK | FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_SIGNAL | FE_HAS_CARRIER;@@ -54,8 +69,19 @@ static int gp8psk_fe_read_status(struct  	return 0; } +static int gp_universal_set_standard(struct dvb_frontend* fe, u32 type)+{+	(void) fe;+	if (type == FE_DVB_S2 || type == FE_DVB_S) {+		fe->ops.info.type = type;+		return 0;+	} else {+		fe->ops.info.type = FE_QPSK;+		return 1;+	}+} /* not supported by this Frontend */-static int gp8psk_fe_read_ber(struct dvb_frontend* fe, u32 *ber)+static int gp_universal_fe_read_ber(struct dvb_frontend* fe, u32 *ber) { 	(void) fe; 	*ber = 0;@@ -63,26 +89,26 @@ static int gp8psk_fe_read_ber(struct dvb }  /* not supported by this Frontend */-static int gp8psk_fe_read_unc_blocks(struct dvb_frontend* fe, u32 *unc)+static int gp_universal_fe_read_unc_blocks(struct dvb_frontend* fe, u32 *unc) { 	(void) fe; 	*unc = 0; 	return 0; } -static int gp8psk_fe_read_snr(struct dvb_frontend* fe, u16 *snr)+static int gp_universal_fe_read_snr(struct dvb_frontend* fe, u16 *snr) {-	struct gp8psk_fe_state *st = fe->demodulator_priv;-	gp8psk_fe_update_status(st);+	struct gp_universal_fe_state *st = fe->demodulator_priv;+	gp_universal_fe_update_status(st); 	/* snr is reported in dBu*256 */ 	*snr = st->snr; 	return 0; } -static int gp8psk_fe_read_signal_strength(struct dvb_frontend* fe, u16 *strength)+static int gp_universal_fe_read_signal_strength(struct dvb_frontend* fe, u16 *strength) {-	struct gp8psk_fe_state *st = fe->demodulator_priv;-	gp8psk_fe_update_status(st);+	struct gp_universal_fe_state *st = fe->demodulator_priv;+	gp_universal_fe_update_status(st); 	/* snr is reported in dBu*256 */ 	/* snr / 38.4 ~= 100% strength */ 	/* snr * 17 returns 100% strength as 65535 */@@ -93,16 +119,16 @@ static int gp8psk_fe_read_signal_strengt 	return 0; } -static int gp8psk_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune)+static int gp_universal_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune) {-	tune->min_delay_ms = 200;+	tune->min_delay_ms = 800; 	return 0; } -static int gp8psk_fe_set_frontend(struct dvb_frontend* fe,-				  struct dvb_frontend_parameters *fep)+static int gp_universal_fe_set_frontend2(struct dvb_frontend* fe,+				  struct dvb_frontend_parameters_new *fep) {-	struct gp8psk_fe_state *state = fe->demodulator_priv;+	struct gp_universal_fe_state *state = fe->demodulator_priv; 	u8 cmd[10]; 	u32 freq = fep->frequency * 1000; @@ -112,16 +138,114 @@ static int gp8psk_fe_set_frontend(struct 	cmd[7] = (freq >> 24) & 0xff;  	switch(fe->ops.info.type) {+        case FE_DVB_S: 	case FE_QPSK:+		if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+			if (gp_universal_tuned_to_DCII(fe))+				gp_universal_bcm4500_reload(state->d); 		cmd[0] =  fep->u.qpsk.symbol_rate        & 0xff; 		cmd[1] = (fep->u.qpsk.symbol_rate >>  8) & 0xff; 		cmd[2] = (fep->u.qpsk.symbol_rate >> 16) & 0xff; 		cmd[3] = (fep->u.qpsk.symbol_rate >> 24) & 0xff; 		cmd[8] = ADV_MOD_DVB_QPSK;-		cmd[9] = 0x03; /*ADV_MOD_FEC_XXX*/+		cmd[9] = 5;+		break;+	case FE_DVB_S2:+		cmd[0] =  fep->u.qpsk2.symbol_rate        & 0xff;+		cmd[1] = (fep->u.qpsk2.symbol_rate >>  8) & 0xff;+		cmd[2] = (fep->u.qpsk2.symbol_rate >> 16) & 0xff;+		cmd[3] = (fep->u.qpsk2.symbol_rate >> 24) & 0xff;+		switch (fep->u.qpsk2.modulation) {+		case MOD_QPSK:+			cmd[8] = ADV_MOD_DVB_QPSK;+			if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+				if (gp_universal_tuned_to_DCII(fe))+					gp_universal_bcm4500_reload(state->d);+			switch (fep->u.qpsk.fec_inner) {+			case FEC_1_2:  cmd[9] = 0; break;+			case FEC_2_3:  cmd[9] = 1; break;+			case FEC_3_4:  cmd[9] = 2; break;+			case FEC_5_6:  cmd[9] = 3; break;+			case FEC_7_8:  cmd[9] = 4; break;+			case FEC_AUTO: cmd[9] = 5; break;+			default:       cmd[9] = 5; break;+			}+			break;+		case MOD_QPSK_TURBO:+			cmd[8] = ADV_MOD_TURBO_QPSK;+			switch (fep->u.qpsk2.fec_inner) {+			case FEC_1_4:  cmd[9] = 0; break;+			case FEC_1_2:  cmd[9] = 1; break;+			case FEC_2_3:  cmd[9] = 0; cmd[8] = ADV_MOD_TURBO_16QAM; break;+			case FEC_3_4:  cmd[9] = 2; break;+			default:       cmd[9] = 0; break;+			}+			break; +		case MOD_8PSK_TURBO:+		case MOD_8PSK:  /* MOD_8PSK is for compatibility with DN */+			cmd[8] = ADV_MOD_TURBO_8PSK;+			switch (fep->u.qpsk2.fec_inner) {+			case FEC_2_3:  cmd[9] = 0; break;+			case FEC_3_4:  cmd[9] = 1; break;+			case FEC_3_5:  cmd[9] = 2; break;+			case FEC_5_6:  cmd[9] = 3; break;+			case FEC_8_9:  cmd[9] = 4; break;+			default:       cmd[9] = 0; break;+			}+			break;+		case MOD_16QAM_TURBO:+		case MOD_QAM_16: /* MOD_QAM_16 is for compatibility with DN */+			cmd[8] = ADV_MOD_TURBO_16QAM;+			cmd[9] = 0;+			break;+		case MOD_DCII_C_QPSK:+			cmd[8] = ADV_MOD_DCII_C_QPSK;+			goto fill_fec;+		case MOD_DCII_I_QPSK:+			cmd[8] = ADV_MOD_DCII_I_QPSK;+			goto fill_fec;+		case MOD_DCII_Q_QPSK:+			cmd[8] = ADV_MOD_DCII_Q_QPSK;+			goto fill_fec;+		case MOD_DCII_C_OQPSK:+			cmd[8] = ADV_MOD_DCII_C_OQPSK;+fill_fec:+			switch (fep->u.qpsk2.fec_inner) {+			case FEC_5_11: cmd[9] = 0; break;+			case FEC_1_2:  cmd[9] = 1; break;+			case FEC_3_5:  cmd[9] = 2; break;+			case FEC_2_3:  cmd[9] = 3; break;+			case FEC_3_4:  cmd[9] = 4; break;+			case FEC_4_5:  cmd[9] = 5; break;+			case FEC_5_6:  cmd[9] = 6; break;+			case FEC_7_8:  cmd[9] = 7; break;+			case FEC_AUTO: cmd[9] = 8; break;+			default:       cmd[9] = 8; break;+			}+			break;+		case MOD_DSS_QPSK:+			cmd[8] = ADV_MOD_DSS_QPSK;+			switch (fep->u.qpsk.fec_inner) {+			case FEC_1_2:  cmd[9] = 0; break;+			case FEC_2_3:  cmd[9] = 1; break;+			case FEC_3_4:  cmd[9] = 2; break;+			case FEC_5_6:  cmd[9] = 3; break;+			case FEC_7_8:  cmd[9] = 4; break;+			case FEC_AUTO: cmd[9] = 5; break;+			case FEC_6_7:  cmd[9] = 6; break;+			default:       cmd[9] = 5; break;+			}+			break;+		default: +			info("WRONG modulation selected");+			cmd[8] = ADV_MOD_DVB_QPSK;+			cmd[9] = 5;  /* FEC_AUTO */ +			break;+		} 		break; 	default: 		// other modes are unsuported right now+//		info("you should not be here"); 		cmd[0] = 0; 		cmd[1] = 0; 		cmd[2] = 0;@@ -131,7 +255,9 @@ static int gp8psk_fe_set_frontend(struct 		break; 	} -	gp8psk_usb_out_op(state->d,TUNE_8PSK,0,0,cmd,10);+	if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+		gp_universal_set_tuner_mode(fe,0);+	gp_universal_usb_out_op(state->d, TUNE_GENPIX, 0,0,cmd,10);  	state->lock = 0; 	state->next_status_check = jiffies;@@ -140,106 +266,111 @@ static int gp8psk_fe_set_frontend(struct 	return 0; } -static int gp8psk_fe_get_frontend(struct dvb_frontend* fe,+static int gp_universal_fe_set_frontend(struct dvb_frontend* fe,+				  struct dvb_frontend_parameters *fep)+{+	return gp_universal_fe_set_frontend2(fe,+			(struct dvb_frontend_parameters_new *) fep);+}+++static int gp_universal_fe_get_frontend(struct dvb_frontend* fe, 				  struct dvb_frontend_parameters *fep) { 	return 0; }  -static int gp8psk_fe_send_diseqc_msg (struct dvb_frontend* fe,+static int gp_universal_fe_send_diseqc_msg (struct dvb_frontend* fe, 				    struct dvb_diseqc_master_cmd *m) {-	struct gp8psk_fe_state *st = fe->demodulator_priv;+	struct gp_universal_fe_state *st = fe->demodulator_priv; -	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); -	if (gp8psk_usb_out_op(st->d,SEND_DISEQC_COMMAND, m->msg[0], 0,+	if (gp_universal_usb_out_op(st->d,SEND_DISEQC_COMMAND, m->msg[0], 0, 			m->msg, m->msg_len)) { 		return -EINVAL; 	} 	return 0; } -static int gp8psk_fe_send_diseqc_burst (struct dvb_frontend* fe,+static int gp_universal_fe_send_diseqc_burst (struct dvb_frontend* fe, 				    fe_sec_mini_cmd_t burst) {-	struct gp8psk_fe_state *st = fe->demodulator_priv;+	struct gp_universal_fe_state *st = fe->demodulator_priv; 	u8 cmd; -	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); -	/* These commands are certainly wrong */ 	cmd = (burst == SEC_MINI_A) ? 0x00 : 0x01;--	if (gp8psk_usb_out_op(st->d,SEND_DISEQC_COMMAND, cmd, 0,-			&cmd, 0)) {+	if (gp_universal_usb_out_op(st->d,SEND_DISEQC_COMMAND, cmd, 0,+			NULL, 0)) { 		return -EINVAL; 	} 	return 0; } -static int gp8psk_fe_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone)+static int gp_universal_fe_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone) {-	struct gp8psk_fe_state* state = fe->demodulator_priv;+	struct gp_universal_fe_state* state = fe->demodulator_priv; -	if (gp8psk_usb_out_op(state->d,SET_22KHZ_TONE,+	if (gp_universal_usb_out_op(state->d,SET_22KHZ_TONE, 		 (tone == SEC_TONE_ON), 0, NULL, 0)) { 		return -EINVAL; 	} 	return 0; } -static int gp8psk_fe_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage)+static int gp_universal_fe_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage) {-	struct gp8psk_fe_state* state = fe->demodulator_priv;+	struct gp_universal_fe_state* state = fe->demodulator_priv; -	if (gp8psk_usb_out_op(state->d,SET_LNB_VOLTAGE,+	if (gp_universal_usb_out_op(state->d,SET_LNB_VOLTAGE, 			 voltage == SEC_VOLTAGE_18, 0, NULL, 0)) { 		return -EINVAL; 	} 	return 0; } -static int gp8psk_fe_enable_high_lnb_voltage(struct dvb_frontend* fe, long onoff)+static int gp_universal_fe_enable_high_lnb_voltage(struct dvb_frontend* fe, long onoff) {-	struct gp8psk_fe_state* state = fe->demodulator_priv;-	return gp8psk_usb_out_op(state->d, USE_EXTRA_VOLT, onoff, 0,NULL,0);+	struct gp_universal_fe_state* state = fe->demodulator_priv;+	return gp_universal_usb_out_op(state->d, USE_EXTRA_VOLT, onoff, 0,NULL,0); } -static int gp8psk_fe_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long sw_cmd)+static int gp_universal_fe_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long sw_cmd) {-	struct gp8psk_fe_state* state = fe->demodulator_priv;+	struct gp_universal_fe_state* state = fe->demodulator_priv; 	u8 cmd = sw_cmd & 0x7f; -	if (gp8psk_usb_out_op(state->d,SET_DN_SWITCH, cmd, 0,+	if (gp_universal_usb_out_op(state->d,SET_DN_SWITCH, cmd, 0, 			NULL, 0)) { 		return -EINVAL; 	}-	if (gp8psk_usb_out_op(state->d,SET_LNB_VOLTAGE, !!(sw_cmd & 0x80),+	if (gp_universal_usb_out_op(state->d,SET_LNB_VOLTAGE, !!(sw_cmd & 0x80), 			0, NULL, 0)) { 		return -EINVAL; 	}- 	return 0; } -static void gp8psk_fe_release(struct dvb_frontend* fe)+static void gp_universal_fe_release(struct dvb_frontend* fe) {-	struct gp8psk_fe_state *state = fe->demodulator_priv;+	struct gp_universal_fe_state *state = fe->demodulator_priv; 	kfree(state); } -static struct dvb_frontend_ops gp8psk_fe_ops;+static struct dvb_frontend_ops gp_universal_fe_ops; -struct dvb_frontend * gp8psk_fe_attach(struct dvb_usb_device *d)+struct dvb_frontend * gp_universal_fe_attach(struct dvb_usb_device *d) {-	struct gp8psk_fe_state *s = kzalloc(sizeof(struct gp8psk_fe_state), GFP_KERNEL);+	struct gp_universal_fe_state *s = kzalloc(sizeof(struct gp_universal_fe_state), GFP_KERNEL); 	if (s == NULL) 		goto error;  	s->d = d;-	memcpy(&s->fe.ops, &gp8psk_fe_ops, sizeof(struct dvb_frontend_ops));+	memcpy(&s->fe.ops, &gp_universal_fe_ops, sizeof(struct dvb_frontend_ops)); 	s->fe.demodulator_priv = s;  	goto success;@@ -250,41 +381,55 @@ success: }  -static struct dvb_frontend_ops gp8psk_fe_ops = {+static struct dvb_frontend_ops gp_universal_fe_ops = { 	.info = {-		.name			= "Genpix 8psk-to-USB2 DVB-S",-		.type			= FE_QPSK,-		.frequency_min		= 800000,-		.frequency_max		= 2250000,+		.name			= "Genpix DVB-s",+		.type			= FE_DVB_S2,+		.frequency_min		= 760000,+		.frequency_max		= 2270000, 		.frequency_stepsize	= 100, 		.symbol_rate_min        = 1000000, 		.symbol_rate_max        = 45000000, 		.symbol_rate_tolerance  = 500,  /* ppm */ 		.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_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_QAM_16 is for compatibility +			// (Myth incorrectly detects Turbo-QPSK as plain QAM-16)+			FE_CAN_QPSK | FE_CAN_QAM_16 | FE_HAS_EXTENDED_INFO 	},+	.extended_info = {+		.caps       = FE_CAN_FEC_1_4 | FE_CAN_FEC_5_11 | FE_CAN_FEC_3_5 |+				// FE_CAN_8PSK is for compatibility+				//(Myth incorrectly detectS Turbo-8PSK as plain 8PSK)+			      FE_CAN_8PSK |+			      FE_CAN_TURBO_FEC | FE_CAN_DCII | FE_CAN_DSS_QPSK,+		.standards  = FE_DVB_S | FE_DVB_S2+	},+	.set_standard = gp_universal_set_standard, -	.release = gp8psk_fe_release,+	.release = gp_universal_fe_release,  	.init = NULL, 	.sleep = NULL, -	.set_frontend = gp8psk_fe_set_frontend,-	.get_frontend = gp8psk_fe_get_frontend,-	.get_tune_settings = gp8psk_fe_get_tune_settings,+	.set_frontend = gp_universal_fe_set_frontend,+	.get_frontend = gp_universal_fe_get_frontend, -	.read_status = gp8psk_fe_read_status,-	.read_ber = gp8psk_fe_read_ber,-	.read_signal_strength = gp8psk_fe_read_signal_strength,-	.read_snr = gp8psk_fe_read_snr,-	.read_ucblocks = gp8psk_fe_read_unc_blocks,+	.set_frontend2 = gp_universal_fe_set_frontend2,+	.get_frontend2 = NULL, -	.diseqc_send_master_cmd = gp8psk_fe_send_diseqc_msg,-	.diseqc_send_burst = gp8psk_fe_send_diseqc_burst,-	.set_tone = gp8psk_fe_set_tone,-	.set_voltage = gp8psk_fe_set_voltage,-	.dishnetwork_send_legacy_command = gp8psk_fe_send_legacy_dish_cmd,-	.enable_high_lnb_voltage = gp8psk_fe_enable_high_lnb_voltage+	.get_tune_settings = gp_universal_fe_get_tune_settings,++	.read_status = gp_universal_fe_read_status,+	.read_ber = NULL,+	.read_signal_strength = gp_universal_fe_read_signal_strength,+	.read_snr = gp_universal_fe_read_snr,+	.read_ucblocks = NULL,+	.diseqc_send_master_cmd = gp_universal_fe_send_diseqc_msg,+	.diseqc_send_burst = gp_universal_fe_send_diseqc_burst,+	.set_tone = gp_universal_fe_set_tone,+	.set_voltage = gp_universal_fe_set_voltage,+	.dishnetwork_send_legacy_command = gp_universal_fe_send_legacy_dish_cmd,+	.enable_high_lnb_voltage = gp_universal_fe_enable_high_lnb_voltage };diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk.c--- a/linux/drivers/media/dvb/dvb-usb/gp8psk.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk.c	Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- *  - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ *  - GENPIX 8PSK-to-USB2+ *  - GENPIX 8PSK-to-USB2 Rev.2+ *  - GENPIX SkyWalker-1  *- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Genpix Electronics (genpix@genpix-electronics.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com)  *  * This module is based off the vp7045 and vp702x modules+ *  and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006)  *  *	This program is free software; you can redistribute it and/or modify it  *	under the terms of the GNU General Public License as published by the Free@@ -17,14 +17,13 @@ #include "gp8psk.h"  /* debug */-static char bcm4500_firmware[] = "dvb-usb-gp8psk-02.fw";-int dvb_usb_gp8psk_debug;-module_param_named(debug,dvb_usb_gp8psk_debug, int, 0644);+static char bcm4500_firmware[] = "dvb-gp8psk-02.fw";+int dvb_usb_gp_universal_debug;+int gp_product_id;+module_param_named(debug,dvb_usb_gp_universal_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);--int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen)+int gp_universal_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) { 	int ret = 0,try = 0; @@ -43,7 +42,7 @@ int gp8psk_usb_in_op(struct dvb_usb_devi 	}  	if (ret < 0 || ret != blen) {-		warn("usb in %d operation failed.", req);+		warn("usb in operation failed."); 		ret = -EIO; 	} else 		ret = 0;@@ -56,7 +55,7 @@ int gp8psk_usb_in_op(struct dvb_usb_devi 	return ret; } -int gp8psk_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value,+int gp_universal_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, 			     u16 index, u8 *b, int blen) { 	int ret;@@ -82,7 +81,7 @@ int gp8psk_usb_out_op(struct dvb_usb_dev 	return ret; } -static int gp8psk_load_bcm4500fw(struct dvb_usb_device *d)+static int gp_universal_load_bcm4500fw(struct dvb_usb_device *d) { 	int ret; 	const struct firmware *fw = NULL;@@ -96,11 +95,10 @@ static int gp8psk_load_bcm4500fw(struct  	}  	ret = -EINVAL;+	if (gp_universal_usb_out_op(d, LOAD_BCM4500,1,0,NULL, 0))+	goto out_rel_fw; -	if (gp8psk_usb_out_op(d, LOAD_BCM4500,1,0,NULL, 0))-		goto out_rel_fw;--	info("downloading bcm4500 firmware from file '%s'",bcm4500_firmware);+	info("downloaidng bcm4500 firmware from file '%s'",bcm4500_firmware);  	ptr = fw->data; 	buf = kmalloc(64, GFP_KERNEL | GFP_DMA);@@ -129,115 +127,112 @@ out_rel_fw: 	return ret; } -static int gp8psk_power_ctrl(struct dvb_usb_device *d, int onoff)+static int gp_universal_power_ctrl(struct dvb_usb_device *d, int onoff) { 	u8 status, buf;-	int gp_product_id = le16_to_cpu(d->udev->descriptor.idProduct);- 	if (onoff) {-		gp8psk_usb_in_op(d, GET_8PSK_CONFIG,0,0,&status,1);-		if (! (status & bm8pskStarted)) {  /* started */-			if(gp_product_id == USB_PID_GENPIX_SKYWALKER_CW3K)-				gp8psk_usb_out_op(d, CW3K_INIT, 1, 0, NULL, 0);-			if (gp8psk_usb_in_op(d, BOOT_8PSK, 1, 0, &buf, 1))-				return -EINVAL;-		}--		if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)-			if (! (status & bm8pskFW_Loaded)) /* BCM4500 firmware loaded */-				if(gp8psk_load_bcm4500fw(d))-					return -EINVAL;--		if (! (status & bmIntersilOn)) /* LNB Power */-			if (gp8psk_usb_in_op(d, START_INTERSIL, 1, 0,-					&buf, 1))+		gp_universal_usb_in_op(d, GET_GENPIX_CONFIG,0,0,&status,1);+		if (! (status & bmTunerEnabled))  /* started */+			if (gp_universal_usb_in_op(d, START_TUNER, 1, 0, &buf, 1)) 				return -EINVAL; -		/* Set DVB mode to 1 */-		if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)-			if (gp8psk_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0))-				return -EINVAL;+		if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+			if (! (status & bmFW_Loaded)) /* BCM4500 firmware loaded */+				if (gp_universal_load_bcm4500fw(d))+					return EINVAL;++		if (! (status & bmLNBPowerOn)) /* LNB Power */+			if (gp_universal_usb_in_op(d, ENABLE_LNB_POWER, 1, 0,+					&buf, 1))+				return EINVAL;++		if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+			if (gp_universal_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0))+				return EINVAL; 		/* Abort possible TS (if previous tune crashed) */-		if (gp8psk_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0))-			return -EINVAL;+		if (gp_universal_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0))+			return EINVAL; 	} else { 		/* Turn off LNB power */-		if (gp8psk_usb_in_op(d, START_INTERSIL, 0, 0, &buf, 1))+		if (gp_universal_usb_in_op(d, ENABLE_LNB_POWER, 0, 0, &buf, 1))+			return EINVAL;+		/* Turn off tuner power */+		if (gp_universal_usb_in_op(d, START_TUNER, 0, 0, &buf, 1)) 			return -EINVAL;-		/* Turn off 8psk power */-		if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1))-			return -EINVAL;-		if(gp_product_id == USB_PID_GENPIX_SKYWALKER_CW3K)-			gp8psk_usb_out_op(d, CW3K_INIT, 0, 0, NULL, 0); 	} 	return 0; } -#if 0-int gp8psk_bcm4500_reload(struct dvb_usb_device *d)+int gp_universal_bcm4500_reload(struct dvb_usb_device *d) { 	u8 buf;-	int gp_product_id = le16_to_cpu(d->udev->descriptor.idProduct); 	/* Turn off 8psk power */-	if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1))+	if (gp_universal_usb_in_op(d, START_TUNER, 0, 0, &buf, 1)) 		return -EINVAL; 	/* Turn On 8psk power */-	if (gp8psk_usb_in_op(d, BOOT_8PSK, 1, 0, &buf, 1))+	if (gp_universal_usb_in_op(d, START_TUNER, 1, 0, &buf, 1)) 		return -EINVAL; 	/* load BCM4500 firmware */-	if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)-		if (gp8psk_load_bcm4500fw(d))+	if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+		if (gp_universal_load_bcm4500fw(d)) 			return EINVAL; 	return 0; }-#endif  /*  0  */ -static int gp8psk_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)+static int gp_universal_get_fpga_version(struct dvb_usb_device *d, int *version) {-	return gp8psk_usb_out_op(adap->dev, ARM_TRANSFER, onoff, 0 , NULL, 0);-}--static int gp8psk_frontend_attach(struct dvb_usb_adapter *adap)-{-	adap->fe = gp8psk_fe_attach(adap->dev);+	u8 cmd;+	if (gp_universal_usb_in_op(d, GET_FPGA_VERSION, 0,0,&cmd,1) != 0)+		*version = 0;+	else+		*version = cmd; 	return 0; } -static struct dvb_usb_device_properties gp8psk_properties;+static int gp_universal_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)+{+	return gp_universal_usb_out_op(adap->dev, ARM_TRANSFER, onoff, 0 , NULL, 0);+} -static int gp8psk_usb_probe(struct usb_interface *intf,+static int gp_universal_frontend_attach(struct dvb_usb_adapter *adap)+{+	adap->fe = gp_universal_fe_attach(adap->dev);+	return 0;+}++static struct dvb_usb_device_properties gp_universal_properties;++static int gp_universal_usb_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	int ret;+	int ret;	 	struct usb_device *udev = interface_to_usbdev(intf);-	ret = dvb_usb_device_init(intf, &gp8psk_properties,-				  THIS_MODULE, NULL, adapter_nr);+	ret = dvb_usb_device_init(intf,&gp_universal_properties,THIS_MODULE,NULL); 	if (ret == 0) {-		info("found Genpix USB device pID = %x (hex)",-			le16_to_cpu(udev->descriptor.idProduct));+		gp_product_id = le16_to_cpu(udev->descriptor.idProduct);+		info("found Genpix USB device pID = %x (hex)",gp_product_id); 	} 	return ret; } -static struct usb_device_id gp8psk_usb_table [] = {-	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_1_COLD) },-	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_1_WARM) },+static struct usb_device_id gp_universal_usb_table [] = {+	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_COLD)  },+	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_WARM)  }, 	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_2) },-	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER_1) },-	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER_CW3K) },+	    { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER)  }, 	    { 0 }, };-MODULE_DEVICE_TABLE(usb, gp8psk_usb_table);+MODULE_DEVICE_TABLE(usb, gp_universal_usb_table); -static struct dvb_usb_device_properties gp8psk_properties = {+static struct dvb_usb_device_properties gp_universal_properties = { 	.usb_ctrl = CYPRESS_FX2,-	.firmware = "dvb-usb-gp8psk-01.fw",+	.firmware = "dvb-gp8psk-01.fw",  	.num_adapters = 1, 	.adapter = { 		{-			.streaming_ctrl   = gp8psk_streaming_ctrl,-			.frontend_attach  = gp8psk_frontend_attach,+			.streaming_ctrl   = gp_universal_streaming_ctrl,+			.frontend_attach  = gp_universal_frontend_attach, 			/* parameter for the MPEG2-data transfer */ 			.stream = { 				.type = USB_BULK,@@ -251,48 +246,45 @@ static struct dvb_usb_device_properties  			}, 		} 	},-	.power_ctrl       = gp8psk_power_ctrl,+	.power_ctrl       = gp_universal_power_ctrl,  	.generic_bulk_ctrl_endpoint = 0x01, -	.num_device_descs = 4,+	.num_device_descs = 3, 	.devices = {-		{ .name = "Genpix 8PSK-to-USB2 Rev.1 DVB-S receiver",-		  .cold_ids = { &gp8psk_usb_table[0], NULL },-		  .warm_ids = { &gp8psk_usb_table[1], NULL },+		{ .name = "Genpix 8PSK-to-USB2 DVB-s receiver",+		  .cold_ids = { &gp_universal_usb_table[0], NULL },+		  .warm_ids = { &gp_universal_usb_table[1], NULL }, 		},-		{ .name = "Genpix 8PSK-to-USB2 Rev.2 DVB-S receiver",+		{ .name = "Genpix 8PSK-to-USB2 Rev.2 DVB-s receiver", 		  .cold_ids = { NULL },-		  .warm_ids = { &gp8psk_usb_table[2], NULL },+		  .warm_ids = { &gp_universal_usb_table[2], NULL }, 		},-		{ .name = "Genpix SkyWalker-1 DVB-S receiver",+		{ .name = "Genpix SkyWalker-1 DVB-s receiver", 		  .cold_ids = { NULL },-		  .warm_ids = { &gp8psk_usb_table[3], NULL },-		},-		{ .name = "Genpix SkyWalker-CW3K DVB-S receiver",-		  .cold_ids = { NULL },-		  .warm_ids = { &gp8psk_usb_table[4], NULL },+		  .warm_ids = { &gp_universal_usb_table[3], NULL }, 		}, 		{ NULL },-	}+	},+	.device_version = gp_universal_get_fpga_version, };  /* usb specific object needed to register this driver with the usb subsystem */-static struct usb_driver gp8psk_usb_driver = {+static struct usb_driver gp_universal_usb_driver = { #if LINUX_VERSION_CODE <=  KERNEL_VERSION(2,6,15) 	.owner		= THIS_MODULE, #endif-	.name		= "dvb_usb_gp8psk",-	.probe		= gp8psk_usb_probe,-	.disconnect = dvb_usb_device_exit,-	.id_table	= gp8psk_usb_table,+	.name           = "dvb_usb_gp_universal",+	.probe          = gp_universal_usb_probe,+	.disconnect     = dvb_usb_device_exit,+	.id_table       = gp_universal_usb_table, };  /* module stuff */-static int __init gp8psk_usb_module_init(void)+static int __init gp_universal_usb_module_init(void) { 	int result;-	if ((result = usb_register(&gp8psk_usb_driver))) {+	if ((result = usb_register(&gp_universal_usb_driver))) { 		err("usb_register failed. (%d)",result); 		return result; 	}@@ -300,16 +292,16 @@ static int __init gp8psk_usb_module_init 	return 0; } -static void __exit gp8psk_usb_module_exit(void)+static void __exit gp_universal_usb_module_exit(void) { 	/* deregister this driver from the USB subsystem */-	usb_deregister(&gp8psk_usb_driver);+	usb_deregister(&gp_universal_usb_driver); } -module_init(gp8psk_usb_module_init);-module_exit(gp8psk_usb_module_exit);+module_init(gp_universal_usb_module_init);+module_exit(gp_universal_usb_module_exit); -MODULE_AUTHOR("Alan Nisota <alannisota@gamil.com>");-MODULE_DESCRIPTION("Driver for Genpix 8psk-to-USB2 DVB-S");+MODULE_AUTHOR("Genpix <genpix@genpix-electronics.com>");+MODULE_DESCRIPTION("Universal Driver for Genpix advanced DVB-S receivers"); MODULE_VERSION("1.1"); MODULE_LICENSE("GPL");diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk.h--- a/linux/drivers/media/dvb/dvb-usb/gp8psk.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk.h	Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- *  - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ *  - GENPIX 8PSK-to-USB2+ *  - GENPIX 8PSK-to-USB2 Rev.2+ *  - GENPIX SkyWalker-1  *- * Copyright (C) 2006 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com)  *  * This module is based off the vp7045 and vp702x modules+ *  and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006)  *  *	This program is free software; you can redistribute it and/or modify it  *	under the terms of the GNU General Public License as published by the Free@@ -14,83 +14,64 @@  *  * see Documentation/dvb/README.dvb-usb for more information  */-#ifndef _DVB_USB_GP8PSK_H_-#define _DVB_USB_GP8PSK_H_+#ifndef _DVB_USB_GENPIX_H_+#define _DVB_USB_GENPIX_H_ -#define DVB_USB_LOG_PREFIX "gp8psk"+#define DVB_USB_LOG_PREFIX "gp_universal" #include "dvb-usb.h" -extern int dvb_usb_gp8psk_debug;-#define deb_info(args...) dprintk(dvb_usb_gp8psk_debug,0x01,args)-#define deb_xfer(args...) dprintk(dvb_usb_gp8psk_debug,0x02,args)-#define deb_rc(args...)   dprintk(dvb_usb_gp8psk_debug,0x04,args)-#define deb_fe(args...)   dprintk(dvb_usb_gp8psk_debug,0x08,args)-/* gp8psk commands */+extern int gp_product_id;+extern int dvb_usb_gp_universal_debug;+#define deb_info(args...) dprintk(dvb_usb_gp_universal_debug,0x01,args)+#define deb_xfer(args...) dprintk(dvb_usb_gp_universal_debug,0x02,args)+#define deb_rc(args...)   dprintk(dvb_usb_gp_universal_debug,0x04,args)+#define deb_fe(args...)   dprintk(dvb_usb_gp_universal_debug,0x08,args) -/* Twinhan Vendor requests */-#define TH_COMMAND_IN                     0xC0-#define TH_COMMAND_OUT                    0xC1+/* gp_universal commands */ -/* gp8psk commands */+#define	GET_GENPIX_CONFIG       0x80	// in+#define SET_GENPIX_CONFIG       0x81+#define	ARM_TRANSFER            0x85+#define	TUNE_GENPIX             0x86+#define	GET_SIGNAL_STRENGTH     0x87	// in+#define LOAD_BCM4500            0x88+#define START_TUNER             0x89	// in+#define	ENABLE_LNB_POWER        0x8A	// in+#define SET_LNB_VOLTAGE         0x8B+#define	SET_22KHZ_TONE          0x8C+#define SEND_DISEQC_COMMAND     0x8D+#define SET_DVB_MODE            0x8E+#define SET_DN_SWITCH           0x8F+#define GET_SIGNAL_LOCK         0x90	// in+#define GET_FW_VERSION          0x92	// in+#define GET_SERIAL_NUMBER       0x93	// in+#define USE_EXTRA_VOLT          0x94+#define GET_FPGA_VERSION        0x95	// in -#define GET_8PSK_CONFIG                 0x80    /* in */-#define SET_8PSK_CONFIG                 0x81-#define I2C_WRITE			0x83-#define I2C_READ			0x84-#define ARM_TRANSFER                    0x85-#define TUNE_8PSK                       0x86-#define GET_SIGNAL_STRENGTH             0x87    /* in */-#define LOAD_BCM4500                    0x88-#define BOOT_8PSK                       0x89    /* in */-#define START_INTERSIL                  0x8A    /* in */-#define SET_LNB_VOLTAGE                 0x8B-#define SET_22KHZ_TONE                  0x8C-#define SEND_DISEQC_COMMAND             0x8D-#define SET_DVB_MODE                    0x8E-#define SET_DN_SWITCH                   0x8F-#define GET_SIGNAL_LOCK                 0x90    /* in */-#define GET_SERIAL_NUMBER               0x93    /* in */-#define USE_EXTRA_VOLT                  0x94-#define CW3K_INIT			0x9d--/* PSK_configuration bits */-#define bm8pskStarted                   0x01-#define bm8pskFW_Loaded                 0x02-#define bmIntersilOn                    0x04-#define bmDVBmode                       0x08-#define bm22kHz                         0x10-#define bmSEL18V                        0x20-#define bmDCtuned                       0x40-#define bmArmed                         0x80+/* gp_universal_configuration bits */+#define	bmTunerEnabled          0x01+#define bmFW_Loaded             0x02+#define bmLNBPowerOn            0x04+#define bm22kHz                 0x10+#define bmSEL18V                0x20+#define bmDCtuned               0x40+#define bmArmed                 0x80  /* Satellite modulation modes */-#define ADV_MOD_DVB_QPSK 0     /* DVB-S QPSK */-#define ADV_MOD_TURBO_QPSK 1   /* Turbo QPSK */-#define ADV_MOD_TURBO_8PSK 2   /* Turbo 8PSK (also used for Trellis 8PSK) */-#define ADV_MOD_TURBO_16QAM 3  /* Turbo 16QAM (also used for Trellis 8PSK) */+#define ADV_MOD_DVB_QPSK      0  /* DVB-S QPSK */+#define ADV_MOD_TURBO_QPSK    1  /* Turbo QPSK */+#define ADV_MOD_TURBO_8PSK    2  /* Turbo 8PSK (also used for Trellis 8PSK) */+#define ADV_MOD_TURBO_16QAM   3  /* Turbo 16QAM (also used for Trellis 8PSK) */+#define ADV_MOD_DCII_C_QPSK   4  /* Digicipher II Combo */+#define ADV_MOD_DCII_I_QPSK   5  /* Digicipher II I-stream */+#define ADV_MOD_DCII_Q_QPSK   6  /* Digicipher II Q-stream */+#define ADV_MOD_DCII_C_OQPSK  7  /* Digicipher II offset QPSK */+#define ADV_MOD_DSS_QPSK      8  /* DSS (DIRECTV) QPSK */+#define ADV_MOD_DVB_BPSK      9  /* DVB-S BPSK */ -#define ADV_MOD_DCII_C_QPSK 4  /* Digicipher II Combo */-#define ADV_MOD_DCII_I_QPSK 5  /* Digicipher II I-stream */-#define ADV_MOD_DCII_Q_QPSK 6  /* Digicipher II Q-stream */-#define ADV_MOD_DCII_C_OQPSK 7 /* Digicipher II offset QPSK */-#define ADV_MOD_DSS_QPSK 8     /* DSS (DIRECTV) QPSK */-#define ADV_MOD_DVB_BPSK 9     /* DVB-S BPSK */--#define GET_USB_SPEED                     0x07- #define USB_SPEED_LOW                    0- #define USB_SPEED_FULL                   1- #define USB_SPEED_HIGH                   2--#define RESET_FX2                         0x13--#define FW_VERSION_READ                   0x0B-#define VENDOR_STRING_READ                0x0C-#define PRODUCT_STRING_READ               0x0D-#define FW_BCD_VERSION_READ               0x14--extern struct dvb_frontend * gp8psk_fe_attach(struct dvb_usb_device *d);-extern int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);-extern int gp8psk_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value,-			     u16 index, u8 *b, int blen);+extern struct dvb_frontend * gp_universal_fe_attach(struct dvb_usb_device *d);+extern int gp_universal_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);+extern int gp_universal_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);+extern int gp_universal_bcm4500_reload(struct dvb_usb_device *d);  #endifdiff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/m920x.c--- a/linux/drivers/media/dvb/dvb-usb/m920x.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/m920x.c	Mon Jun 23 15:07:10 2008 -0700@@ -22,8 +22,6 @@ static int dvb_usb_m920x_debug; static int dvb_usb_m920x_debug; module_param_named(debug,dvb_usb_m920x_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  static int m920x_set_filter(struct dvb_usb_device *d, int type, int idx, int pid); @@ -480,7 +478,7 @@ static struct qt1010_config m920x_qt1010 /* Callbacks for DVB USB */ static int m920x_mt352_frontend_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if ((adap->fe = dvb_attach(mt352_attach, 				   &m920x_mt352_config,@@ -492,7 +490,7 @@ static int m920x_mt352_frontend_attach(s  static int m920x_tda10046_08_frontend_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if ((adap->fe = dvb_attach(tda10046_attach, 				   &m920x_tda10046_08_config,@@ -504,7 +502,7 @@ static int m920x_tda10046_08_frontend_at  static int m920x_tda10046_0b_frontend_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if ((adap->fe = dvb_attach(tda10046_attach, 				   &m920x_tda10046_0b_config,@@ -516,7 +514,7 @@ static int m920x_tda10046_0b_frontend_at  static int m920x_qt1010_tuner_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if (dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, &m920x_qt1010_config) == NULL) 		return -ENODEV;@@ -526,7 +524,7 @@ static int m920x_qt1010_tuner_attach(str  static int m920x_tda8275_60_tuner_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, NULL) == NULL) 		return -ENODEV;@@ -536,7 +534,7 @@ static int m920x_tda8275_60_tuner_attach  static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap) {-	deb("%s\n",__func__);+	deb("%s\n",__FUNCTION__);  	if (dvb_attach(tda827x_attach, adap->fe, 0x61, &adap->dev->i2c_adap, NULL) == NULL) 		return -ENODEV;@@ -621,31 +619,27 @@ static int m920x_probe(struct usb_interf 		 * multi-tuner device 		 */ -		ret = dvb_usb_device_init(intf, &megasky_properties,-					  THIS_MODULE, &d, adapter_nr);-		if (ret == 0) {+		if ((ret = dvb_usb_device_init(intf, &megasky_properties,+					       THIS_MODULE, &d)) == 0) { 			rc_init_seq = megasky_rc_init; 			goto found; 		} -		ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties,-					  THIS_MODULE, &d, adapter_nr);-		if (ret == 0) {+		if ((ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties,+					       THIS_MODULE, &d)) == 0) { 			/* No remote control, so no rc_init_seq */ 			goto found; 		}  		/* This configures both tuners on the TV Walker Twin */-		ret = dvb_usb_device_init(intf, &tvwalkertwin_properties,-					  THIS_MODULE, &d, adapter_nr);-		if (ret == 0) {+		if ((ret = dvb_usb_device_init(intf, &tvwalkertwin_properties,+					       THIS_MODULE, &d)) == 0) { 			rc_init_seq = tvwalkertwin_rc_init; 			goto found; 		} -		ret = dvb_usb_device_init(intf, &dposh_properties,-					  THIS_MODULE, &d, adapter_nr);-		if (ret == 0) {+		if ((ret = dvb_usb_device_init(intf, &dposh_properties,+					       THIS_MODULE, &d)) == 0) { 			/* Remote controller not supported yet. */ 			goto found; 		}diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c--- a/linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c	Mon Jun 23 15:07:10 2008 -0700@@ -14,8 +14,6 @@ static int debug; static int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=rc,2=eeprom (|-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define deb_rc(args...) dprintk(debug,0x01,args) #define deb_ee(args...) dprintk(debug,0x02,args)@@ -144,8 +142,7 @@ static int nova_t_probe(struct usb_inter static int nova_t_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &nova_t_properties,-				   THIS_MODULE, NULL, adapter_nr);+	return dvb_usb_device_init(intf,&nova_t_properties,THIS_MODULE,NULL); }  /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/opera1.c--- a/linux/drivers/media/dvb/dvb-usb/opera1.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/opera1.c	Mon Jun 23 15:07:10 2008 -0700@@ -45,9 +45,6 @@ MODULE_PARM_DESC(debug, MODULE_PARM_DESC(debug, 		 "set debugging level (1=info,xfer=2,pll=4,ts=8,err=16,rc=32,fw=64 (or-able))." 		 DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #if 0 struct mutex mymutex; #endif@@ -562,8 +559,7 @@ static int opera1_probe(struct usb_inter 		return -EINVAL; 	} -	if (0 != dvb_usb_device_init(intf, &opera1_properties,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf, &opera1_properties, THIS_MODULE, NULL) != 0) 		return -EINVAL; 	return 0; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/ttusb2.c--- a/linux/drivers/media/dvb/dvb-usb/ttusb2.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/ttusb2.c	Mon Jun 23 15:07:10 2008 -0700@@ -36,8 +36,6 @@ static int dvb_usb_ttusb2_debug; #define deb_info(args...)   dprintk(dvb_usb_ttusb2_debug,0x01,args) module_param_named(debug,dvb_usb_ttusb2_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  struct ttusb2_state { 	u8 id;@@ -190,10 +188,8 @@ static int ttusb2_probe(struct usb_inter static int ttusb2_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	if (0 == dvb_usb_device_init(intf, &ttusb2_properties,-				     THIS_MODULE, NULL, adapter_nr) ||-	    0 == dvb_usb_device_init(intf, &ttusb2_properties_s2400,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf, &ttusb2_properties, THIS_MODULE, NULL) == 0 ||+		dvb_usb_device_init(intf, &ttusb2_properties_s2400, THIS_MODULE, NULL) == 0) 		return 0; 	return -ENODEV; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/umt-010.c--- a/linux/drivers/media/dvb/dvb-usb/umt-010.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/umt-010.c	Mon Jun 23 15:07:10 2008 -0700@@ -12,8 +12,6 @@ #include "dibusb.h"  #include "mt352.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  static int umt_mt352_demod_init(struct dvb_frontend *fe) {@@ -77,8 +75,7 @@ static int umt_probe(struct usb_interfac static int umt_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	if (0 == dvb_usb_device_init(intf, &umt_properties,-				     THIS_MODULE, NULL, adapter_nr))+	if (dvb_usb_device_init(intf,&umt_properties,THIS_MODULE,NULL) == 0) 		return 0; 	return -EINVAL; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp702x-fe.c--- a/linux/drivers/media/dvb/dvb-usb/vp702x-fe.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp702x-fe.c	Mon Jun 23 15:07:10 2008 -0700@@ -67,7 +67,7 @@ static int vp702x_fe_read_status(struct  { 	struct vp702x_fe_state *st = fe->demodulator_priv; 	vp702x_fe_refresh_state(st);-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__);  	if (st->lock == 0) 		*status = FE_HAS_LOCK | FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_SIGNAL | FE_HAS_CARRIER;@@ -121,7 +121,7 @@ static int vp702x_fe_read_snr(struct dvb  static int vp702x_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune) {-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); 	tune->min_delay_ms = 2000; 	return 0; }@@ -183,21 +183,21 @@ static int vp702x_fe_init(struct dvb_fro static int vp702x_fe_init(struct dvb_frontend *fe) { 	struct vp702x_fe_state *st = fe->demodulator_priv;-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); 	vp702x_usb_in_op(st->d, RESET_TUNER, 0, 0, NULL, 0); 	return 0; }  static int vp702x_fe_sleep(struct dvb_frontend *fe) {-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); 	return 0; }  static int vp702x_fe_get_frontend(struct dvb_frontend* fe, 				  struct dvb_frontend_parameters *fep) {-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); 	return 0; } @@ -208,7 +208,7 @@ static int vp702x_fe_send_diseqc_msg (st 	u8 cmd[8],ibuf[10]; 	memset(cmd,0,8); -	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__);  	if (m->msg_len > 4) 		return -EINVAL;@@ -230,7 +230,7 @@ static int vp702x_fe_send_diseqc_msg (st  static int vp702x_fe_send_diseqc_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t burst) {-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__); 	return 0; } @@ -238,7 +238,7 @@ static int vp702x_fe_set_tone(struct dvb { 	struct vp702x_fe_state *st = fe->demodulator_priv; 	u8 ibuf[10];-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__);  	st->tone_mode = tone; @@ -263,7 +263,7 @@ static int vp702x_fe_set_voltage (struct { 	struct vp702x_fe_state *st = fe->demodulator_priv; 	u8 ibuf[10];-	deb_fe("%s\n",__func__);+	deb_fe("%s\n",__FUNCTION__);  	st->voltage = voltage; diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp702x.c--- a/linux/drivers/media/dvb/dvb-usb/vp702x.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp702x.c	Mon Jun 23 15:07:10 2008 -0700@@ -20,8 +20,6 @@ int dvb_usb_vp702x_debug; int dvb_usb_vp702x_debug; module_param_named(debug,dvb_usb_vp702x_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  struct vp702x_state { 	int pid_filter_count;@@ -287,8 +285,7 @@ static int vp702x_usb_probe(struct usb_i static int vp702x_usb_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &vp702x_properties,-				   THIS_MODULE, NULL, adapter_nr);+	return dvb_usb_device_init(intf,&vp702x_properties,THIS_MODULE,NULL); }  static struct usb_device_id vp702x_usb_table [] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp7045.c--- a/linux/drivers/media/dvb/dvb-usb/vp7045.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp7045.c	Mon Jun 23 15:07:10 2008 -0700@@ -18,9 +18,6 @@ static int dvb_usb_vp7045_debug; static int dvb_usb_vp7045_debug; module_param_named(debug,dvb_usb_vp7045_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_info(args...) dprintk(dvb_usb_vp7045_debug,0x01,args) #define deb_xfer(args...) dprintk(dvb_usb_vp7045_debug,0x02,args) #define deb_rc(args...)   dprintk(dvb_usb_vp7045_debug,0x04,args)@@ -230,8 +227,7 @@ static int vp7045_usb_probe(struct usb_i static int vp7045_usb_probe(struct usb_interface *intf, 		const struct usb_device_id *id) {-	return dvb_usb_device_init(intf, &vp7045_properties,-				   THIS_MODULE, NULL, adapter_nr);+	return dvb_usb_device_init(intf,&vp7045_properties,THIS_MODULE,NULL); }  static struct usb_device_id vp7045_usb_table [] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/pluto2/pluto2.c--- a/linux/drivers/media/dvb/pluto2/pluto2.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/pluto2/pluto2.c	Mon Jun 23 15:07:10 2008 -0700@@ -38,8 +38,6 @@ #include "dvb_net.h" #include "dvbdev.h" #include "tda1004x.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define DRIVER_NAME		"pluto2" @@ -668,8 +666,7 @@ static int __devinit pluto2_probe(struct 		goto err_pluto_hw_exit;  	/* dvb */-	ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME,-				   THIS_MODULE, &pdev->dev, adapter_nr);+	ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME, THIS_MODULE, &pdev->dev); 	if (ret < 0) 		goto err_i2c_del_adapter; diff -r 595fe1ec7511 linux/drivers/media/dvb/ttpci/av7110.c--- a/linux/drivers/media/dvb/ttpci/av7110.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttpci/av7110.c	Mon Jun 23 15:07:11 2008 -0700@@ -112,8 +112,6 @@ MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data"); module_param(tv_standard, int, 0444); MODULE_PARM_DESC(tv_standard, "TV standard: 0 PAL (default), 1 NTSC");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  static void restart_feeds(struct av7110 *av7110); @@ -2463,7 +2461,7 @@ static int __devinit av7110_attach(struc 		goto err_kfree_0;  	ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,-				   THIS_MODULE, &dev->pci->dev, adapter_nr);+				   THIS_MODULE, &dev->pci->dev); 	if (ret < 0) 		goto err_put_firmware_1; diff -r 595fe1ec7511 linux/drivers/media/dvb/ttpci/budget-core.c--- a/linux/drivers/media/dvb/ttpci/budget-core.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttpci/budget-core.c	Mon Jun 23 15:07:11 2008 -0700@@ -56,8 +56,6 @@ module_param_named(bufsize, dma_buffer_s module_param_named(bufsize, dma_buffer_size, int, 0444); MODULE_PARM_DESC(debug, "Turn on/off budget debugging (default:off)."); MODULE_PARM_DESC(bufsize, "DMA buffer size in KB, default: 188, min: 188, max: 1410 (Activy: 564)");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  /****************************************************************************  * TT budget / WinTV Nova@@ -473,10 +471,9 @@ int ttpci_budget_init(struct budget *bud 		budget->buffer_width, budget->buffer_height); 	printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); -	ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name,-				   owner, &budget->dev->pci->dev, adapter_nr);-	if (ret < 0)+	if ((ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, owner, &budget->dev->pci->dev)) < 0) { 		return ret;+	}  	/* set dd1 stream a & b */ 	saa7146_write(dev, DD1_STREAM_B, 0x00000000);diff -r 595fe1ec7511 linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c--- a/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c	Mon Jun 23 15:07:11 2008 -0700@@ -59,10 +59,9 @@ */  static int debug;+ module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0) @@ -1682,10 +1681,7 @@ static int ttusb_probe(struct usb_interf  	mutex_unlock(&ttusb->semi2c); -	result = dvb_register_adapter(&ttusb->adapter,-				      "Technotrend/Hauppauge Nova-USB",-				      THIS_MODULE, &udev->dev, adapter_nr);-	if (result < 0) {+	if ((result = dvb_register_adapter(&ttusb->adapter, "Technotrend/Hauppauge Nova-USB", THIS_MODULE, &udev->dev)) < 0) { 		ttusb_free_iso_urbs(ttusb); 		kfree(ttusb); 		return result;diff -r 595fe1ec7511 linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c--- a/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	Mon Jun 23 15:07:11 2008 -0700@@ -54,8 +54,6 @@ MODULE_PARM_DESC(output_pva, "Output PVA MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)"); module_param(enable_rc, int, 0644); MODULE_PARM_DESC(enable_rc, "Turn on/off IR remote control(default: off)");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define dprintk	if (debug) printk @@ -1459,9 +1457,7 @@ static int ttusb_dec_init_dvb(struct ttu 	dprintk("%s\n", __func__);  	if ((result = dvb_register_adapter(&dec->adapter,-					   dec->model_name, THIS_MODULE,-					   &dec->udev->dev,-					   adapter_nr)) < 0) {+					   dec->model_name, THIS_MODULE, &dec->udev->dev)) < 0) { 		printk("%s: dvb_register_adapter failed: error %d\n", 		       __func__, result); diff -r 595fe1ec7511 linux/drivers/media/video/cx23885/cx23885-dvb.c--- a/linux/drivers/media/video/cx23885/cx23885-dvb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/cx23885/cx23885-dvb.c	Mon Jun 23 15:07:11 2008 -0700@@ -55,8 +55,6 @@ static unsigned int alt_tuner; static unsigned int alt_tuner; module_param(alt_tuner, int, 0644); MODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  /* ------------------------------------------------------------------ */ @@ -499,7 +497,7 @@ static int dvb_register(struct cx23885_t  	/* register everything */ 	return videobuf_dvb_register(&port->dvb, THIS_MODULE, port,-				     &dev->pci->dev, adapter_nr);+				     &dev->pci->dev); }  int cx23885_dvb_register(struct cx23885_tsport *port)diff -r 595fe1ec7511 linux/drivers/media/video/cx88/cx88-dvb.c--- a/linux/drivers/media/video/cx88/cx88-dvb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/cx88/cx88-dvb.c	Mon Jun 23 15:07:11 2008 -0700@@ -58,8 +58,6 @@ static unsigned int debug; static unsigned int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug,"enable debug messages [dvb]");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define dprintk(level,fmt, arg...)	if (debug >= level) \ 	printk(KERN_DEBUG "%s/2-dvb: " fmt, core->name, ## arg)@@ -910,8 +908,7 @@ static int dvb_register(struct cx8802_de 	cx88_call_i2c_clients(core, TUNER_SET_STANDBY, NULL);  	/* register everything */-	return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev,-				     &dev->pci->dev, adapter_nr);+	return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev);  frontend_detach: 	if (dev->dvb.frontend) {diff -r 595fe1ec7511 linux/drivers/media/video/saa7134/saa7134-dvb.c--- a/linux/drivers/media/video/saa7134/saa7134-dvb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/saa7134/saa7134-dvb.c	Mon Jun 23 15:07:11 2008 -0700@@ -64,8 +64,6 @@ static int debug; static int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off module debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);  #define dprintk(fmt, arg...)	do { if (debug) \ 	printk(KERN_DEBUG "%s/dvb: " fmt, dev->name , ## arg); } while(0)@@ -1323,8 +1321,7 @@ static int dvb_init(struct saa7134_dev * 	}  	/* register everything else */-	ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev,-				    adapter_nr);+	ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev);  	/* this sequence is necessary to make the tda1004x load its firmware 	 * and to enter analog mode of hybrid boardsdiff -r 595fe1ec7511 linux/drivers/media/video/videobuf-dvb.c--- a/linux/drivers/media/video/videobuf-dvb.c	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/videobuf-dvb.c	Mon Jun 23 15:07:11 2008 -0700@@ -146,16 +146,14 @@ int videobuf_dvb_register(struct videobu int videobuf_dvb_register(struct videobuf_dvb *dvb, 			  struct module *module, 			  void *adapter_priv,-			  struct device *device,-			  short *adapter_nr)+			  struct device *device) { 	int result;  	mutex_init(&dvb->lock);  	/* register adapter */-	result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device,-				      adapter_nr);+	result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device); 	if (result < 0) { 		printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n", 		       dvb->name, result);diff -r 595fe1ec7511 linux/include/linux/dvb/frontend.h--- a/linux/include/linux/dvb/frontend.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/include/linux/dvb/frontend.h	Mon Jun 23 15:07:11 2008 -0700@@ -28,14 +28,23 @@  #include <asm/types.h> -+/**+ * Usage of fe_type_t enumerations:+ * Don't use FE_QPSK, FE_QAM, FE_OFDM any longer in new applications.+ * If the FE_HAS_EXTENDED_INFO is set within the fe_caps,+ * applications should ignore the fe_type_t returned by the FE_GET_INFO ioctl.+ *+ */ typedef enum fe_type {-	FE_QPSK,-	FE_QAM,-	FE_OFDM,-	FE_ATSC+	FE_QPSK = 0,+	FE_QAM = 1,+	FE_OFDM = 2,+	FE_ATSC = 3,+	FE_DVB_S = (1 << 2),+	FE_DVB_C = (1 << 3),+	FE_DVB_T = (1 << 4),+	FE_DVB_S2 = (1 << 5), } fe_type_t;-  typedef enum fe_caps { 	FE_IS_STUPID			= 0,@@ -62,11 +71,22 @@ typedef enum fe_caps { 	FE_CAN_HIERARCHY_AUTO		= 0x100000, 	FE_CAN_8VSB			= 0x200000, 	FE_CAN_16VSB			= 0x400000,+	FE_HAS_EXTENDED_INFO		= 0x10000000, 	FE_NEEDS_BENDING		= 0x20000000, // not supported anymore, don't use (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; +typedef enum fe_caps_extended {+	FE_CAN_FEC_1_4			= 0x1,+	FE_CAN_FEC_5_11			= 0x2,+	FE_CAN_FEC_3_5			= 0x4,+	FE_CAN_FEC_9_10			= 0x8,+	FE_CAN_8PSK			= 0x10,+	FE_CAN_TURBO_FEC		= 0x20,+	FE_CAN_DCII			= 0x40,+	FE_CAN_DSS_QPSK			= 0x80+} fe_caps_extended_t;  struct dvb_frontend_info { 	char       name[128];@@ -82,7 +102,6 @@ struct dvb_frontend_info { 	fe_caps_t  caps; }; - /**  *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for  *  the meaning of this struct...@@ -126,9 +145,9 @@ typedef enum fe_status { 	FE_HAS_SYNC	= 0x08,   /*  found sync bytes  */ 	FE_HAS_LOCK	= 0x10,   /*  everything's working... */ 	FE_TIMEDOUT	= 0x20,   /*  no lock within the last ~2 seconds */-	FE_REINIT	= 0x40    /*  frontend was reinitialized,  */-} fe_status_t;			  /*  application is recommended to reset */-				  /*  DiSEqC, tone and parameters */+	FE_REINIT	= 0x40    /*  legacy cruft, do not use */+} fe_status_t;+  typedef enum fe_spectral_inversion { 	INVERSION_OFF,@@ -147,21 +166,55 @@ typedef enum fe_code_rate { 	FEC_6_7, 	FEC_7_8, 	FEC_8_9,-	FEC_AUTO+	FEC_AUTO,+	FEC_1_4,+	FEC_5_11,+	FEC_3_5,+	FEC_9_10 } fe_code_rate_t;   typedef enum fe_modulation {-	QPSK,-	QAM_16,-	QAM_32,-	QAM_64,-	QAM_128,-	QAM_256,-	QAM_AUTO,-	VSB_8,-	VSB_16+	MOD_QPSK     = 0,+	QPSK         = 0,+	MOD_QAM_16   = 1,+	QAM_16       = 1,+	MOD_QAM_32   = 2,+	QAM_32       = 2,+	MOD_QAM_64   = 3,+	QAM_64       = 3,+	MOD_QAM_128  = 4,+	QAM_128      = 4,+	MOD_QAM_256  = 5,+	QAM_256      = 5,+	MOD_QAM_AUTO = 6,+	QAM_AUTO     = 6,+	MOD_8VSB     = 7,+	VSB_8        = 7,+	MOD_16VSB    = 8,+	VSB_16       = 8,+	MOD_2VSB     = 9,+	MOD_4VSB     = 10,+	MOD_BPSK     = 11,+	MOD_16APSK   = 12,+	MOD_32APSK   = 13,+	MOD_8PSK     = 14,+	MOD_16PSK    = 15,+	MOD_QPSK_TURBO    = 16,+	MOD_8PSK_TURBO    = 17,+	MOD_16QAM_TURBO   = 18,+	MOD_DCII_C_QPSK   = 19,+	MOD_DCII_I_QPSK   = 20,+	MOD_DCII_Q_QPSK   = 21,+	MOD_DCII_C_OQPSK  = 22,+	MOD_DSS_QPSK      = 23, } fe_modulation_t;++typedef enum fe_rolloff_factor {+	ROLLOFF_ALPHA_0_35,+	ROLLOFF_ALPHA_0_25,+	ROLLOFF_ALPHA_0_20+} fe_rolloff_factor_t;  typedef enum fe_transmit_mode { 	TRANSMISSION_MODE_2K,@@ -194,23 +247,33 @@ typedef enum fe_hierarchy { 	HIERARCHY_AUTO } fe_hierarchy_t; +/**+ *  this struct will be filled by the FE_GET_EXTENDED_INFO ioctl.+ *  it is a extension to the normal frontend capabilities and provided+ *  if the dvb_fe_info.caps is having the FE_HAS_EXTENDED_INFO bit set.+ */+struct dvb_fe_caps_extended {+	__u32	caps;		/* supported fecs and modulations */+	__u32	standards;	/* supported frontend_types */+}; -struct dvb_qpsk_parameters {-	__u32		symbol_rate;  /* symbol rate in Symbols per second */++struct dvb_dvbs_parameters {+	__u32		symbol_rate;  /* symbol rate in symbols per second */ 	fe_code_rate_t	fec_inner;    /* forward error correction (see above) */ }; -struct dvb_qam_parameters {-	__u32		symbol_rate; /* symbol rate in Symbols per second */+struct dvb_dvbc_parameters {+	__u32		symbol_rate; /* symbol rate in symbols per second */ 	fe_code_rate_t	fec_inner;   /* forward error correction (see above) */ 	fe_modulation_t	modulation;  /* modulation type (see above) */ }; -struct dvb_vsb_parameters {+struct dvb_atsc_parameters { 	fe_modulation_t	modulation;  /* modulation type (see above) */ }; -struct dvb_ofdm_parameters {+struct dvb_dvbt_parameters { 	fe_bandwidth_t      bandwidth; 	fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */ 	fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */@@ -220,25 +283,75 @@ struct dvb_ofdm_parameters { 	fe_hierarchy_t      hierarchy_information; }; +struct dvb_dvbs2_parameters {+	__u32			symbol_rate;    /* symbol rate in symbols per second */+	fe_code_rate_t		fec_inner;      /* forward error correction (see above) */+	fe_modulation_t		modulation;     /* modulation type (see above) */+	fe_rolloff_factor_t	rolloff_factor; /* rolloff factor needed for dvb-s2 */+}; +/* The following structure is used to allocate enough space in the union+   for future expansion.+*/+struct dvb_private_parameters {+	__u32		priv[64];+};++#define dvb_qpsk_parameters dvb_dvbs_parameters+#define dvb_qam_parameters dvb_dvbc_parameters+#define dvb_ofdm_parameters dvb_dvbt_parameters+#define dvb_vsb_parameters dvb_atsc_parameters++/* just kept for backwards binary compatibility+ * deprecated for usage in actual applications+ */ struct dvb_frontend_parameters { 	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ 			     /* intermediate frequency in kHz for QPSK */ 	fe_spectral_inversion_t inversion; 	union {-		struct dvb_qpsk_parameters qpsk;-		struct dvb_qam_parameters  qam;-		struct dvb_ofdm_parameters ofdm;-		struct dvb_vsb_parameters vsb;+		struct dvb_dvbs_parameters qpsk;+		struct dvb_dvbc_parameters  qam;+		struct dvb_dvbt_parameters ofdm;+		struct dvb_atsc_parameters vsb; 	} u;+};// __attribute((__deprecated__));++typedef union {+		struct dvb_dvbs_parameters qpsk;+		struct dvb_dvbc_parameters qam;+		struct dvb_dvbt_parameters ofdm;+		struct dvb_atsc_parameters vsb;+		struct dvb_dvbs2_parameters qpsk2;+		struct dvb_private_parameters priv;+} frontend_parameters_union;++struct dvb_frontend_parameters_new {+	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */+			     /* intermediate frequency in kHz for QPSK */+	fe_spectral_inversion_t inversion;+	frontend_parameters_union u; }; +/**+ * Important:+ * FE_GET_EVENT and struct dvb_frontend_event+ * are deprecated due to:+ * FE_GET_EVENT is a mis-designed ioctl+ * informations within dvb_frontend_event will+ * always return stale information.+ * Applications should:+ * - open the frontend device with O_NONBLOCK+ * - poll() for events+ * - FE_GET_EVENT all pending events to clear the POLLPRI status,+ *   and throw them away+ * - FE_READ_STATUS etc. to get current information+ */  struct dvb_frontend_event { 	fe_status_t status; 	struct dvb_frontend_parameters parameters;-};-+}; // __attribute((__deprecated__));  /**  * When set, this flag will disable any zigzagging or other "normal" tuning@@ -267,9 +380,36 @@ struct dvb_frontend_event { #define FE_READ_SNR		   _IOR('o', 72, __u16) #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) +#define FE_SET_FRONTEND2	   _IOW('o', 84, struct dvb_frontend_parameters_new)+#define FE_GET_FRONTEND2	   _IOR('o', 85, struct dvb_frontend_parameters_new)++/**+ * next two IOCTLs are deprecated for further use in applications+ */ #define FE_SET_FRONTEND		   _IOW('o', 76, struct dvb_frontend_parameters) #define FE_GET_FRONTEND		   _IOR('o', 77, struct dvb_frontend_parameters)++ #define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */++/**+ * use to set the FE_STANDARD - if a tuner supports more than one type.+ * e.g. DVB-C/T or DVB-S/S2 combi frontends. after FE_SET_STANDARD was set,+ * the drivers has to make sure still to reflect the standards available,+ * but capabilities should be adjusted to the selected standard+ */+#define FE_SET_STANDARD		   _IO('o', 82) /* fe_type_t */++/**+ * used to query the extended frontend capabilities (see above for details)+ */+#define FE_GET_EXTENDED_INFO	   _IOR('o', 83, struct dvb_fe_caps_extended)++/**+ * FE_GET_EVENT is deprecated for applications.+ * you should use FE_READ_STATUS and if needed the FE_GET_FRONTEND_NEW+ * IOCTLs.+ */ #define FE_GET_EVENT		   _IOR('o', 78, struct dvb_frontend_event)  #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */diff -r 595fe1ec7511 linux/include/media/videobuf-dvb.h--- a/linux/include/media/videobuf-dvb.h	Sun Jun 22 14:11:13 2008 +0200+++ b/linux/include/media/videobuf-dvb.h	Mon Jun 23 15:07:11 2008 -0700@@ -35,8 +35,7 @@ int videobuf_dvb_register(struct videobu int videobuf_dvb_register(struct videobuf_dvb *dvb, 			  struct module *module, 			  void *adapter_priv,-			  struct device *device,-			  short *adapter_nr);+			  struct device *device); void videobuf_dvb_unregister(struct videobuf_dvb *dvb);  /*