mxl5005s: bad checks of state->Mode
PATCH 1/1 mxl5005s: bad checks of state->Mode
Regardless of the state->Mode in both cases the same value was written.
If state->Mode wasn't set, it is always 0.
--- drivers/media/common/tuners/mxl5005s.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
Or were the ones and zeroes in these MXL_ControlWrite in the wrong place?
drivers/media/common/tuners/mxl5005s.c +3 -4
@@ -1815,9 +1815,8 @@ static u16 MXL_BlockInit(struct dvb_frontend *fe)/* Charge Pump Control Dig Ana */ status +=MXL_ControlWrite (fe,RFSYN_CHP_GAIN , state->Mode ?5 :8 ); - status +=MXL_ControlWrite (fe, -RFSYN_EN_CHP_HIGAIN , state->Mode ?1 :1 ); - status +=MXL_ControlWrite (fe,EN_CHP_LIN_B , state->Mode ?0 :0 ); + status +=MXL_ControlWrite (fe,RFSYN_EN_CHP_HIGAIN ,1 ); + status +=MXL_ControlWrite (fe,EN_CHP_LIN_B ,0 );/* AGC TOP Control */ if (state->AGC_Mode ==0 )/* Dual AGC */ {
@@ -2161,7 +2160,7 @@ static u16 MXL_IFSynthInit(struct dvb_frontend *fe) } } -if (state->Mode || (state->Mode ==0 && state->IF_Mode ==0 )) { +if (state->Mode || state->IF_Mode ==0 ) {if (state->IF_LO ==57000000UL ) { status +=MXL_ControlWrite (fe,IF_DIVVAL ,0x10 ); status +=MXL_ControlWrite (fe,IF_VCO_BIAS ,0x08 );
Quoted 28 lines · Roel Kluin
Regardless of the
state->Modein both cases the same value was written.
Ifstate->Modewasn't set, it is always 0.Signed-off-by Roel Kluin <[email protected]>---
drivers/media/common/tuners/mxl5005s.c | 7 +++----1 files changed, 3 insertions(+), 4 deletions(-)Or were the ones and zeroes in these
MXL_ControlWritein the wrong place?drivers/media/common/tuners/mxl5005s.c +2
-3@@ -1815,9 +1815,8 @@ static u16 MXL_BlockInit(struct dvb_frontend *fe) /* Charge Pump Control Dig Ana */ status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, state->Mode ? 5 : 8); - status += MXL_ControlWrite(fe, - RFSYN_EN_CHP_HIGAIN, state->Mode ? 1 : 1); - status += MXL_ControlWrite(fe, EN_CHP_LIN_B, state->Mode ? 0 : 0); + status += MXL_ControlWrite(fe, RFSYN_EN_CHP_HIGAIN, 1); + status += MXL_ControlWrite(fe, EN_CHP_LIN_B, 0); /* AGC TOP Control */ if (state->AGC_Mode == 0) /* Dual AGC */ {
drivers/media/common/tuners/mxl5005s.c static u16 MXL_IFSynthInit(struct dvb_frontend *fe) · line 2166
Quoted 8 lines
drivers/media/common/tuners/mxl5005s.c +1
-1@@ -2161,7 +2160,7 @@ static u16 MXL_IFSynthInit(struct dvb_frontend *fe) } } - if (state->Mode || (state->Mode == 0 && state->IF_Mode == 0)) { + if (state->Mode || state->IF_Mode == 0) { if (state->IF_LO == 57000000UL) { status += MXL_ControlWrite(fe, IF_DIVVAL, 0x10); status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08);
Roel,
Thanks for pointing this out.
This patch should not be applied.
While I agree with Roel's assessment that the logic is incorrect, removing the conditional logic and forcing the register writes to the given value is almost certainly the incorrect fix. I will have to look at the datasheet and see what the logic is actually supposed to be.
Devin
Signature · 2 lines
Devin J. Heitmueller - Kernel Labs http://www.kernellabs.com