diff options
Diffstat (limited to 'lib/cordic.c')
-rw-r--r-- | lib/cordic.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/lib/cordic.c b/lib/cordic.c index 6cf477839ebd..8ef27c12956f 100644 --- a/lib/cordic.c +++ b/lib/cordic.c | |||
@@ -16,15 +16,6 @@ | |||
16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
17 | #include <linux/cordic.h> | 17 | #include <linux/cordic.h> |
18 | 18 | ||
19 | #define CORDIC_ANGLE_GEN 39797 | ||
20 | #define CORDIC_PRECISION_SHIFT 16 | ||
21 | #define CORDIC_NUM_ITER (CORDIC_PRECISION_SHIFT + 2) | ||
22 | |||
23 | #define FIXED(X) ((s32)((X) << CORDIC_PRECISION_SHIFT)) | ||
24 | #define FLOAT(X) (((X) >= 0) \ | ||
25 | ? ((((X) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1) \ | ||
26 | : -((((-(X)) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1)) | ||
27 | |||
28 | static const s32 arctan_table[] = { | 19 | static const s32 arctan_table[] = { |
29 | 2949120, | 20 | 2949120, |
30 | 1740967, | 21 | 1740967, |
@@ -64,16 +55,16 @@ struct cordic_iq cordic_calc_iq(s32 theta) | |||
64 | coord.q = 0; | 55 | coord.q = 0; |
65 | angle = 0; | 56 | angle = 0; |
66 | 57 | ||
67 | theta = FIXED(theta); | 58 | theta = CORDIC_FIXED(theta); |
68 | signtheta = (theta < 0) ? -1 : 1; | 59 | signtheta = (theta < 0) ? -1 : 1; |
69 | theta = ((theta + FIXED(180) * signtheta) % FIXED(360)) - | 60 | theta = ((theta + CORDIC_FIXED(180) * signtheta) % CORDIC_FIXED(360)) - |
70 | FIXED(180) * signtheta; | 61 | CORDIC_FIXED(180) * signtheta; |
71 | 62 | ||
72 | if (FLOAT(theta) > 90) { | 63 | if (CORDIC_FLOAT(theta) > 90) { |
73 | theta -= FIXED(180); | 64 | theta -= CORDIC_FIXED(180); |
74 | signx = -1; | 65 | signx = -1; |
75 | } else if (FLOAT(theta) < -90) { | 66 | } else if (CORDIC_FLOAT(theta) < -90) { |
76 | theta += FIXED(180); | 67 | theta += CORDIC_FIXED(180); |
77 | signx = -1; | 68 | signx = -1; |
78 | } | 69 | } |
79 | 70 | ||