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) {