Index: v4l-dvb/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c =================================================================== --- v4l-dvb.orig/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c 2006-04-22 07:51:52.000000000 -0700 +++ v4l-dvb/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c 2006-04-22 07:53:31.000000000 -0700 @@ -42,6 +42,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) { @@ -91,8 +102,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]; @@ -104,6 +115,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; @@ -112,6 +124,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; @@ -130,6 +153,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) { @@ -248,8 +279,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, @@ -258,6 +296,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,