OSDN Git Service

[media] dib8000: report Interleaving 4 correctly
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Mon, 16 Dec 2013 07:16:59 +0000 (04:16 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Thu, 19 Dec 2013 10:17:44 +0000 (08:17 -0200)
On ISDB-T, the valid values for interleaving are 0, 1, 2 and 4.
While the first 3 are properly reported, the last one is reported
as 3 instead. Fix it.

Tested with a Dektec DTA-2111 RF generator.

Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Acked-by: Patrick Boettcher <pboettcher@kernellabs.com>
drivers/media/dvb-frontends/dib8000.c

index f11c9f8..13fdc3d 100644 (file)
@@ -3429,9 +3429,13 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
                fe->dtv_property_cache.layer[i].segment_count = val & 0x0F;
                dprintk("dib8000_get_frontend : Layer %d segments = %d ", i, fe->dtv_property_cache.layer[i].segment_count);
 
-               val = dib8000_read_word(state, 499 + i);
-               fe->dtv_property_cache.layer[i].interleaving = val & 0x3;
-               dprintk("dib8000_get_frontend : Layer %d time_intlv = %d ", i, fe->dtv_property_cache.layer[i].interleaving);
+               val = dib8000_read_word(state, 499 + i) & 0x3;
+               /* Interleaving can be 0, 1, 2 or 4 */
+               if (val == 3)
+                       val = 4;
+               fe->dtv_property_cache.layer[i].interleaving = val;
+               dprintk("dib8000_get_frontend : Layer %d time_intlv = %d ",
+                       i, fe->dtv_property_cache.layer[i].interleaving);
 
                val = dib8000_read_word(state, 481 + i);
                switch (val & 0x7) {