#include <linux/module.h>
 #include <linux/string.h>
 #include <linux/videodev2.h>
+#include <linux/gcd.h>
 
 #include "mt2063.h"
 
        return f_Center + (bestDiff * f_Step);
 }
 
-/**
- * gcd() - Uses Euclid's algorithm
- *
- * @u, @v:     Unsigned values whose GCD is desired.
- *
- * Returns THE greatest common divisor of u and v, if either value is 0,
- * the other value is returned as the result.
- */
-static u32 MT2063_gcd(u32 u, u32 v)
-{
-       u32 r;
-
-       while (v != 0) {
-               r = u % v;
-               u = v;
-               v = r;
-       }
-
-       return u;
-}
-
 /**
  * IsSpurInBand() - Checks to see if a spur will be present within the IF's
  *                  bandwidth. (fIFOut +/- fIFBW, -fIFOut +/- fIFBW)
         ** of f_LO1, f_LO2 and the edge value.  Use the larger of this
         ** gcd-based scale factor or f_Scale.
         */
-       lo_gcd = MT2063_gcd(f_LO1, f_LO2);
-       gd_Scale = max((u32) MT2063_gcd(lo_gcd, d), f_Scale);
+       lo_gcd = gcd(f_LO1, f_LO2);
+       gd_Scale = max((u32) gcd(lo_gcd, d), f_Scale);
        hgds = gd_Scale / 2;
-       gc_Scale = max((u32) MT2063_gcd(lo_gcd, c), f_Scale);
+       gc_Scale = max((u32) gcd(lo_gcd, c), f_Scale);
        hgcs = gc_Scale / 2;
-       gf_Scale = max((u32) MT2063_gcd(lo_gcd, f), f_Scale);
+       gf_Scale = max((u32) gcd(lo_gcd, f), f_Scale);
        hgfs = gf_Scale / 2;
 
        n0 = DIV_ROUND_UP(f_LO2 - d, f_LO1 - f_LO2);