DVB: lgdt3305: fix 64bit division in function lgdt3305_set_if
authorMichael Krufky <mkrufky@kernellabs.com>
Thu, 25 Jun 2009 16:58:00 +0000 (12:58 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 2 Jul 2009 23:49:48 +0000 (16:49 -0700)
(cherry picked from commit 511da457340d3b30336f7a6731bad9bbe3ffaf08)

Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/media/dvb/frontends/lgdt3305.c

index d92d0557a80b719cdcf3e99bc876df6d56bad2eb..fde8c59700fbee05d63b6b6433adedd7ec9499a9 100644 (file)
@@ -19,6 +19,7 @@
  *
  */
 
+#include <asm/div64.h>
 #include <linux/dvb/frontend.h>
 #include "dvb_math.h"
 #include "lgdt3305.h"
@@ -496,27 +497,15 @@ static int lgdt3305_set_if(struct lgdt3305_state *state,
 
        nco = if_freq_khz / 10;
 
-#define LGDT3305_64BIT_DIVISION_ENABLED 0
-       /* FIXME: 64bit division disabled to avoid linking error:
-        * WARNING: "__udivdi3" [lgdt3305.ko] undefined!
-        */
        switch (param->u.vsb.modulation) {
        case VSB_8:
-#if LGDT3305_64BIT_DIVISION_ENABLED
                nco <<= 24;
-               nco /= 625;
-#else
-               nco *= ((1 << 24) / 625);
-#endif
+               do_div(nco, 625);
                break;
        case QAM_64:
        case QAM_256:
-#if LGDT3305_64BIT_DIVISION_ENABLED
                nco <<= 28;
-               nco /= 625;
-#else
-               nco *= ((1 << 28) / 625);
-#endif
+               do_div(nco, 625);
                break;
        default:
                return -EINVAL;