Advertising
Paste Description for gp8psk-dvbs2-091506.
Modifyed additional dvb-s2 patches and cleaned up for current v4l-dvb tree.
- gp8psk-dvbs2-091506.
- Friday, September 15th, 2006 at 9:51:09am MDT
- --- v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c.orig 2006-09-15 09:40:29.000000000 -0400
- +++ v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-09-15 10:32:50.000000000 -0400
- @@ -96,6 +96,7 @@
- /* 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;
- @@ -111,6 +112,8 @@
- int tone;
- int voltage;
- + int current_standard_set;
- + fe_type_t current_standard;
- /* swzigzag values */
- unsigned int state;
- unsigned int bending;
- @@ -262,13 +265,23 @@
- 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 */
- @@ -333,14 +346,24 @@
- 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;
- @@ -361,8 +384,13 @@
- /* 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;
- @@ -937,18 +965,21 @@
- /* 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;
- @@ -958,6 +989,103 @@
- 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;
- + }
- + }
- + 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;
- + 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)
- @@ -968,6 +1096,7 @@
- dvb_frontend_add_event(fe, 0);
- fepriv->status = 0;
- err = 0;
- + /* if previously used delete old tuning params */
- break;
- }
- @@ -981,6 +1110,48 @@
- 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;
- @@ -1026,7 +1197,10 @@
- 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)
- dvb_generic_release (inode, file);
- diff -r 436e56df57d3 v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.h
- --- v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.h Thu Apr 13 18:50:22 2006 -0300
- +++ v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.h Sat Apr 22 13:38:01 2006 -0700
- @@ -45,6 +45,7 @@
- int step_size;
- int max_drift;
- struct dvb_frontend_parameters parameters;
- + struct dvb_frontend_parameters_new parameters_new;
- };
- struct dvb_frontend;
- @@ -90,6 +91,7 @@
- struct dvb_frontend_ops {
- struct dvb_frontend_info info;
- + struct dvb_fe_caps_extended extended_info;
- void (*release)(struct dvb_frontend* fe);
- @@ -124,6 +126,10 @@
- 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);
- struct dvb_tuner_ops tuner_ops;
- };
- diff -r 436e56df57d3 v4l-dvb/linux/include/linux/dvb/frontend.h
- --- v4l-dvb/linux/include/linux/dvb/frontend.h Thu Apr 13 18:50:22 2006 -0300
- +++ v4l-dvb/linux/include/linux/dvb/frontend.h Sat Apr 22 13:38:01 2006 -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,11 @@ 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;
- -
- struct dvb_frontend_info {
- char name[128];
- @@ -82,7 +91,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 +134,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 +155,45 @@ typedef enum fe_code_rate {
- FEC_6_7,
- FEC_7_8,
- FEC_8_9,
- - FEC_AUTO
- + FEC_AUTO,
- + 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,
- } 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 +226,34 @@ typedef enum fe_hierarchy {
- HIERARCHY_AUTO
- } fe_hierarchy_t;
- -
- -struct dvb_qpsk_parameters {
- - __u32 symbol_rate; /* symbol rate in Symbols per second */
- +/**
- + * 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 fecs; /* supported fecs */
- + __u32 modulations; /* supported modulations */
- + __u32 standards; /* supported frontend_types */
- +};
- +
- +
- +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 +263,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 +360,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 */
- --- v4l-dvb/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c.orig 2006-09-15 07:27:07.000000000 -0400
- +++ v4l-dvb/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c 2006-09-15 07:29:11.000000000 -0400
- @@ -41,6 +41,17 @@
- return 0;
- }
- +static int gp8psk_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)
- {
- @@ -90,8 +101,8 @@
- return 0;
- }
- -static int gp8psk_fe_set_frontend(struct dvb_frontend* fe,
- - struct dvb_frontend_parameters *fep)
- +static int gp8psk_fe_set_frontend2(struct dvb_frontend* fe,
- + struct dvb_frontend_parameters_new *fep)
- {
- struct gp8psk_fe_state *state = fe->demodulator_priv;
- u8 cmd[10];
- @@ -103,6 +114,7 @@
- cmd[7] = (freq >> 24) & 0xff;
- switch(fe->ops.info.type) {
- + case FE_DVB_S:
- case FE_QPSK:
- cmd[0] = fep->u.qpsk.symbol_rate & 0xff;
- cmd[1] = (fep->u.qpsk.symbol_rate >> 8) & 0xff;
- @@ -111,6 +123,17 @@
- cmd[8] = ADV_MOD_DVB_QPSK;
- cmd[9] = 0x03; /*ADV_MOD_FEC_XXX*/
- 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;
- + if (fep->u.qpsk2.modulation == MOD_8PSK)
- + cmd[8] = ADV_MOD_TURBO_8PSK;
- + else
- + cmd[8] = ADV_MOD_DVB_QPSK;
- + cmd[9] = 0x03; /*ADV_MOD_FEC_XXX*/
- + break;
- default:
- // other modes are unsuported right now
- cmd[0] = 0;
- @@ -129,6 +152,14 @@
- return 0;
- }
- +static int gp8psk_fe_set_frontend(struct dvb_frontend* fe,
- + struct dvb_frontend_parameters *fep)
- +{
- + return gp8psk_fe_set_frontend2(fe,
- + (struct dvb_frontend_parameters_new *) fep);
- +}
- +
- +
- static int gp8psk_fe_get_frontend(struct dvb_frontend* fe,
- struct dvb_frontend_parameters *fep)
- {
- @@ -246,8 +277,15 @@
- .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_QPSK | FE_HAS_EXTENDED_INFO
- + },
- + .extended_info = {
- + .fecs = FEC_1_2 | FEC_2_3 | FEC_3_4 | FEC_5_6 |
- + FEC_7_8 | FEC_AUTO,
- + .modulations = MOD_QPSK | MOD_BPSK | MOD_8PSK,
- + .standards = FE_DVB_S | FE_DVB_S2
- },
- + .set_standard = gp8psk_set_standard,
- .release = gp8psk_fe_release,
- @@ -256,6 +294,10 @@
- .set_frontend = gp8psk_fe_set_frontend,
- .get_frontend = gp8psk_fe_get_frontend,
- +
- + .set_frontend2 = gp8psk_fe_set_frontend2,
- + .get_frontend2 = NULL,
- +
- .get_tune_settings = gp8psk_fe_get_tune_settings,
- .read_status = gp8psk_fe_read_status,
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.