diff --git a/dvb-core/dvb_frontend.c b/dvb-core/dvb_frontend.c index b9179bf..6454678 100644 --- a/dvb-core/dvb_frontend.c +++ b/dvb-core/dvb_frontend.c @@ -955,7 +955,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe) } c->stream_id = NO_STREAM_ID_FILTER; - c->scrambling_code = NO_SCRAMBLING_CODE; + c->pls = NO_SCRAMBLING_CODE; switch (c->delivery_system) { case SYS_DVBS: @@ -1032,7 +1032,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { _DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0), _DTV_CMD(DTV_LNA, 1, 0), _DTV_CMD(DTV_INPUT, 1, 0), - _DTV_CMD(DTV_SCRAMBLING_CODE, 1, 0), + _DTV_CMD(DTV_PLS, 1, 0), /* Get */ _DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1), @@ -1464,8 +1464,8 @@ static int dtv_property_process_get(struct dvb_frontend *fe, tvp->u.buffer.len = 4; break; - case DTV_SCRAMBLING_CODE: - tvp->u.data = c->scrambling_code; + case DTV_PLS: + tvp->u.data = c->pls; break; /* Fill quality measures */ @@ -1907,8 +1907,8 @@ static int dtv_property_process_set(struct dvb_frontend *fe, r = fe->ops.set_input(fe, c->input); break; - case DTV_SCRAMBLING_CODE: - c->scrambling_code = tvp->u.data; + case DTV_PLS: + c->pls = tvp->u.data; break; default: diff --git a/dvb-core/dvb_frontend.h b/dvb-core/dvb_frontend.h index 5eb16c9..a8df38f 100644 --- a/dvb-core/dvb_frontend.h +++ b/dvb-core/dvb_frontend.h @@ -397,7 +397,7 @@ struct dtv_frontend_properties { u32 lna; s32 input; - u32 scrambling_code; + u32 pls; /* statistics data */ struct dtv_fe_stats strength; diff --git a/frontends/mxl5xx.c b/frontends/mxl5xx.c index 11396f2..d1b37a1 100644 --- a/frontends/mxl5xx.c +++ b/frontends/mxl5xx.c @@ -1067,6 +1067,7 @@ static int firmware_download(struct mxl *state, u8 *mbin, u32 mbin_len) status = read_register(state, HYDRA_PRCM_ROOT_CLK_REG, ®Data); if (status) return status; + status = do_firmware_download(state, mbin, mbin_len); if (status) return status; diff --git a/frontends/stv0910.c b/frontends/stv0910.c index c514322..c0ea024 100644 --- a/frontends/stv0910.c +++ b/frontends/stv0910.c @@ -865,7 +865,7 @@ static int init_search_param(struct stv *state) write_reg(state, RSTV0910_P2_UPLCCST0 + state->regoff, 0xe0); write_reg(state, RSTV0910_P2_ISIBITENA + state->regoff, 0x00); - + read_reg(state, RSTV0910_P2_TSSTATEM + state->regoff, &tmp); tmp &= ~0x01; // nosync = 0, in case next signal is standard TS write_reg(state, RSTV0910_P2_TSSTATEM + state->regoff, tmp); @@ -961,7 +961,7 @@ static int Start(struct stv *state, struct dtv_frontend_properties *p) s32 Freq; u8 regDMDCFGMD; u16 symb; - u32 ScramblingCode; + u32 ScramblingCode = 1; if (p->symbol_rate < 100000 || p->symbol_rate > 70000000) return -EINVAL; @@ -975,10 +975,18 @@ static int Start(struct stv *state, struct dtv_frontend_properties *p) init_search_param(state); - if (p->scrambling_code != NO_SCRAMBLING_CODE) - ScramblingCode = p->scrambling_code; - else - ScramblingCode = 1; + if (p->stream_id != NO_STREAM_ID_FILTER) { + /* Backwards compatibility to "crazy" API. + PRBS X root cannot be 0, so this should always work. + */ + if (p->stream_id & 0xffffff00) + ScramblingCode = p->stream_id >> 8; + write_reg(state, RSTV0910_P2_ISIENTRY + state->regoff, p->stream_id & 0xff); + write_reg(state, RSTV0910_P2_ISIBITENA + state->regoff, 0xff); + } + + if (p->pls != NO_SCRAMBLING_CODE) + ScramblingCode = p->pls; if (ScramblingCode != state->CurScramblingCode) { write_reg(state, RSTV0910_P2_PLROOT0 + state->regoff, @@ -990,11 +998,6 @@ static int Start(struct stv *state, struct dtv_frontend_properties *p) state->CurScramblingCode = ScramblingCode; } - if (p->stream_id != NO_STREAM_ID_FILTER) { - write_reg(state, RSTV0910_P2_ISIENTRY + state->regoff, p->stream_id & 0xff); - write_reg(state, RSTV0910_P2_ISIBITENA + state->regoff, 0xff); - } - if (p->symbol_rate <= 1000000) { /*SR <=1Msps*/ state->DemodTimeout = 3000; state->FecTimeout = 2000; @@ -1246,7 +1249,7 @@ static int get_frequency_offset(struct stv *state, s32 *off) if (derot & (1<<23)) derot |= 0xFF000000; *off = - (s32) (((s64) derot * (s64) state->base->mclk) >> 24); - pr_info("foff = %d\n", *off); + //pr_info("foff = %d\n", *off); return 0; } diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index 0384874..3ef96dd 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h @@ -379,9 +379,9 @@ struct dvb_frontend_event { #define DTV_STAT_TOTAL_BLOCK_COUNT 69 #define DTV_INPUT 70 -#define DTV_SCRAMBLING_CODE 71 +#define DTV_PLS 71 -#define DTV_MAX_COMMAND DTV_SCRAMBLING_CODE +#define DTV_MAX_COMMAND DTV_PLS typedef enum fe_pilot { PILOT_ON,