aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cordic.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cordic.c')
-rw-r--r--lib/cordic.c23
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
28static const s32 arctan_table[] = { 19static 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