|
@@ -113,12 +113,10 @@
|
|
|
#define DTD_HANGOVER 600 /* 600 samples, or 75ms */
|
|
|
#define DC_LOG2BETA 3 /* log2() of DC filter Beta */
|
|
|
|
|
|
-
|
|
|
/* adapting coeffs using the traditional stochastic descent (N)LMS algorithm */
|
|
|
|
|
|
#ifdef __bfin__
|
|
|
-static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
|
|
|
- int shift)
|
|
|
+static inline void lms_adapt_bg(struct oslec_state *ec, int clean, int shift)
|
|
|
{
|
|
|
int i, j;
|
|
|
int offset1;
|
|
@@ -189,8 +187,7 @@ static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
|
|
|
*/
|
|
|
|
|
|
#else
|
|
|
-static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
|
|
|
- int shift)
|
|
|
+static inline void lms_adapt_bg(struct oslec_state *ec, int clean, int shift)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -225,7 +222,7 @@ static inline int top_bit(unsigned int bits)
|
|
|
if (bits == 0)
|
|
|
return -1;
|
|
|
else
|
|
|
- return (int)fls((int32_t)bits)-1;
|
|
|
+ return (int)fls((int32_t) bits) - 1;
|
|
|
}
|
|
|
|
|
|
struct oslec_state *oslec_create(int len, int adaption_mode)
|
|
@@ -279,6 +276,7 @@ error_oom:
|
|
|
kfree(ec);
|
|
|
return NULL;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_create);
|
|
|
|
|
|
void oslec_free(struct oslec_state *ec)
|
|
@@ -292,12 +290,14 @@ void oslec_free(struct oslec_state *ec)
|
|
|
kfree(ec->snapshot);
|
|
|
kfree(ec);
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_free);
|
|
|
|
|
|
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode)
|
|
|
{
|
|
|
ec->adaption_mode = adaption_mode;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_adaption_mode);
|
|
|
|
|
|
void oslec_flush(struct oslec_state *ec)
|
|
@@ -324,12 +324,14 @@ void oslec_flush(struct oslec_state *ec)
|
|
|
ec->curr_pos = ec->taps - 1;
|
|
|
ec->Pstates = 0;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_flush);
|
|
|
|
|
|
void oslec_snapshot(struct oslec_state *ec)
|
|
|
{
|
|
|
memcpy(ec->snapshot, ec->fir_taps16[0], ec->taps * sizeof(int16_t));
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_snapshot);
|
|
|
|
|
|
/* Dual Path Echo Canceller */
|
|
@@ -404,11 +406,11 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
|
|
/* efficient "out with the old and in with the new" algorithm so
|
|
|
we don't have to recalculate over the whole block of
|
|
|
samples. */
|
|
|
- new = (int)tx * (int)tx;
|
|
|
+ new = (int)tx *(int)tx;
|
|
|
old = (int)ec->fir_state.history[ec->fir_state.curr_pos] *
|
|
|
(int)ec->fir_state.history[ec->fir_state.curr_pos];
|
|
|
ec->Pstates +=
|
|
|
- ((new - old) + (1 << (ec->log2taps-1))) >> ec->log2taps;
|
|
|
+ ((new - old) + (1 << (ec->log2taps - 1))) >> ec->log2taps;
|
|
|
if (ec->Pstates < 0)
|
|
|
ec->Pstates = 0;
|
|
|
}
|
|
@@ -466,7 +468,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
|
|
|
|
|
factor = (2^30) * (2^-2) * clean_bg_rx/P
|
|
|
|
|
|
- (30 - 2 - log2(P))
|
|
|
+ (30 - 2 - log2(P))
|
|
|
factor = clean_bg_rx 2 ----- (3)
|
|
|
|
|
|
To avoid a divide we approximate log2(P) as top_bit(P),
|
|
@@ -514,7 +516,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
|
|
*/
|
|
|
ec->adapt = 1;
|
|
|
memcpy(ec->fir_taps16[0], ec->fir_taps16[1],
|
|
|
- ec->taps * sizeof(int16_t));
|
|
|
+ ec->taps * sizeof(int16_t));
|
|
|
} else
|
|
|
ec->cond_met++;
|
|
|
} else
|
|
@@ -601,6 +603,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
|
|
|
|
|
return (int16_t) ec->clean_nlp << 1;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_update);
|
|
|
|
|
|
/* This function is separated from the echo canceller is it is usually called
|
|
@@ -625,7 +628,7 @@ EXPORT_SYMBOL_GPL(oslec_update);
|
|
|
giving very clean DC removal.
|
|
|
*/
|
|
|
|
|
|
-int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx)
|
|
|
+int16_t oslec_hpf_tx(struct oslec_state * ec, int16_t tx)
|
|
|
{
|
|
|
int tmp, tmp1;
|
|
|
|
|
@@ -654,6 +657,7 @@ int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx)
|
|
|
|
|
|
return tx;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL_GPL(oslec_hpf_tx);
|
|
|
|
|
|
MODULE_LICENSE("GPL");
|