V4L/DVB (6654): mt352: support oversampled IF input
authorChris Pascoe <c.pascoe@itee.uq.edu.au>
Tue, 20 Nov 2007 05:49:41 +0000 (02:49 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:02:36 +0000 (19:02 -0200)
Rework the input frequency calculation so that it produces the right values
when the ADC oversamples the IF input.

This means MT352 devices can now process a near-zero IF (according to the,
specs 4.57MHz is supported with the default crystal).

Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/mt352.c

index 5dd9b731f6f29bdb10eee01122e2959613e4adde..7cd190b6f01573919e7939948b8f922e8f5622b2 100644 (file)
@@ -152,7 +152,13 @@ static void mt352_calc_input_freq(struct mt352_state* state,
        if (state->config.if2)
                if2 = state->config.if2;
 
-       ife = (2*adc_clock - if2);
+       if (adc_clock >= if2 * 2)
+               ife = if2;
+       else {
+               ife = adc_clock - (if2 % adc_clock);
+               if (ife > adc_clock / 2)
+                       ife = adc_clock - ife;
+       }
        value = -16374 * ife / adc_clock;
        dprintk("%s: if2 %d, ife %d, adc_clock %d => %d / 0x%x\n",
                __FUNCTION__, if2, ife, adc_clock, value, value & 0x3fff);