|
@@ -1677,15 +1677,15 @@ static int mb86a16_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|
|
* the deinterleaver output.
|
|
|
* monitored BER is expressed as a 20 bit output in total
|
|
|
*/
|
|
|
- ber_rst = ber_mon >> 3;
|
|
|
+ ber_rst = (ber_mon >> 3) & 0x03;
|
|
|
*ber = (((ber_msb << 8) | ber_mid) << 8) | ber_lsb;
|
|
|
if (ber_rst == 0)
|
|
|
timer = 12500000;
|
|
|
- if (ber_rst == 1)
|
|
|
+ else if (ber_rst == 1)
|
|
|
timer = 25000000;
|
|
|
- if (ber_rst == 2)
|
|
|
+ else if (ber_rst == 2)
|
|
|
timer = 50000000;
|
|
|
- if (ber_rst == 3)
|
|
|
+ else /* ber_rst == 3 */
|
|
|
timer = 100000000;
|
|
|
|
|
|
*ber /= timer;
|
|
@@ -1697,11 +1697,11 @@ static int mb86a16_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|
|
* QPSK demodulator output.
|
|
|
* monitored BER is expressed as a 24 bit output in total
|
|
|
*/
|
|
|
- ber_tim = ber_mon >> 1;
|
|
|
+ ber_tim = (ber_mon >> 1) & 0x01;
|
|
|
*ber = (((ber_msb << 8) | ber_mid) << 8) | ber_lsb;
|
|
|
if (ber_tim == 0)
|
|
|
timer = 16;
|
|
|
- if (ber_tim == 1)
|
|
|
+ else /* ber_tim == 1 */
|
|
|
timer = 24;
|
|
|
|
|
|
*ber /= 2 ^ timer;
|