[media] m88rs2000: Correct m88rs2000_set_fec settings
authorMalcolm Priestley <tvboxspy@gmail.com>
Sat, 28 Dec 2013 17:02:44 +0000 (14:02 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 7 Jan 2014 11:40:04 +0000 (09:40 -0200)
Register 0x70 is used to set fec, register 0x76 is used to get fec

Register 0x76 is set to 0x8.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/dvb-frontends/m88rs2000.c

index f9d04db7275ca1542fb4c1be4e94b89707b95c3d..002b109d938361ad25f6e61f61fe2adefcd47c31 100644 (file)
@@ -541,33 +541,38 @@ static int m88rs2000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
 static int m88rs2000_set_fec(struct m88rs2000_state *state,
                fe_code_rate_t fec)
 {
-       u16 fec_set;
+       u8 fec_set, reg;
+       int ret;
+
        switch (fec) {
-       /* This is not confirmed kept for reference */
-/*     case FEC_1_2:
-               fec_set = 0x88;
+       case FEC_1_2:
+               fec_set = 0x8;
                break;
        case FEC_2_3:
-               fec_set = 0x68;
+               fec_set = 0x10;
                break;
        case FEC_3_4:
-               fec_set = 0x48;
+               fec_set = 0x20;
                break;
        case FEC_5_6:
-               fec_set = 0x28;
+               fec_set = 0x40;
                break;
        case FEC_7_8:
-               fec_set = 0x18;
-               break; */
+               fec_set = 0x80;
+               break;
        case FEC_AUTO:
        default:
-               fec_set = 0x08;
+               fec_set = 0x0;
        }
-       m88rs2000_writereg(state, 0x76, fec_set);
 
-       return 0;
-}
+       reg = m88rs2000_readreg(state, 0x70);
+       reg &= 0x7;
+       ret = m88rs2000_writereg(state, 0x70, reg | fec_set);
 
+       ret |= m88rs2000_writereg(state, 0x76, 0x8);
+
+       return ret;
+}
 
 static fe_code_rate_t m88rs2000_get_fec(struct m88rs2000_state *state)
 {
@@ -650,12 +655,8 @@ static int m88rs2000_set_frontend(struct dvb_frontend *fe)
        if (ret < 0)
                return -ENODEV;
 
-       /* Unknown */
-       reg = m88rs2000_readreg(state, 0x70);
-       ret = m88rs2000_writereg(state, 0x70, reg);
-
        /* Set FEC */
-       ret |= m88rs2000_set_fec(state, c->fec_inner);
+       ret = m88rs2000_set_fec(state, c->fec_inner);
        ret |= m88rs2000_writereg(state, 0x85, 0x1);
        ret |= m88rs2000_writereg(state, 0x8a, 0xbf);
        ret |= m88rs2000_writereg(state, 0x8d, 0x1e);