Skip to content

Commit

Permalink
Staging: echo cleanup
Browse files Browse the repository at this point in the history
before:
			errors	lines of code	errors/KLOC
drivers/staging/echo/	213		1701	125.2

after:
			errors	lines of code	errors/KLOC
drivers/staging/echo/	8		1685	4.7

Compile tested.

Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Alexander Beregalov authored and Greg Kroah-Hartman committed Apr 3, 2009
1 parent 2961f24 commit dc57a3e
Show file tree
Hide file tree
Showing 5 changed files with 247 additions and 263 deletions.
30 changes: 14 additions & 16 deletions drivers/staging/echo/bit_operations.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: bit_operations.h,v 1.11 2006/11/28 15:37:03 steveu Exp $
*/

/*! \file */
Expand All @@ -34,7 +32,7 @@
/*! \brief Find the bit position of the highest set bit in a word
\param bits The word to be searched
\return The bit number of the highest set bit, or -1 if the word is zero. */
static __inline__ int top_bit(unsigned int bits)
static inline int top_bit(unsigned int bits)
{
int res;

Expand All @@ -50,7 +48,7 @@ static __inline__ int top_bit(unsigned int bits)
/*! \brief Find the bit position of the lowest set bit in a word
\param bits The word to be searched
\return The bit number of the lowest set bit, or -1 if the word is zero. */
static __inline__ int bottom_bit(unsigned int bits)
static inline int bottom_bit(unsigned int bits)
{
int res;

Expand All @@ -63,7 +61,7 @@ static __inline__ int bottom_bit(unsigned int bits)
return res;
}
#else
static __inline__ int top_bit(unsigned int bits)
static inline int top_bit(unsigned int bits)
{
int i;

Expand Down Expand Up @@ -93,7 +91,7 @@ static __inline__ int top_bit(unsigned int bits)
return i;
}

static __inline__ int bottom_bit(unsigned int bits)
static inline int bottom_bit(unsigned int bits)
{
int i;

Expand Down Expand Up @@ -127,7 +125,7 @@ static __inline__ int bottom_bit(unsigned int bits)
/*! \brief Bit reverse a byte.
\param data The byte to be reversed.
\return The bit reversed version of data. */
static __inline__ uint8_t bit_reverse8(uint8_t x)
static inline uint8_t bit_reverse8(uint8_t x)
{
#if defined(__i386__) || defined(__x86_64__)
/* If multiply is fast */
Expand Down Expand Up @@ -172,32 +170,32 @@ uint32_t make_mask32(uint32_t x);
uint16_t make_mask16(uint16_t x);

/*! \brief Find the least significant one in a word, and return a word
with just that bit set.
with just that bit set.
\param x The word to be searched.
\return The word with the single set bit. */
static __inline__ uint32_t least_significant_one32(uint32_t x)
static inline uint32_t least_significant_one32(uint32_t x)
{
return (x & (-(int32_t) x));
return x & (-(int32_t) x);
}

/*! \brief Find the most significant one in a word, and return a word
with just that bit set.
with just that bit set.
\param x The word to be searched.
\return The word with the single set bit. */
static __inline__ uint32_t most_significant_one32(uint32_t x)
static inline uint32_t most_significant_one32(uint32_t x)
{
#if defined(__i386__) || defined(__x86_64__)
return 1 << top_bit(x);
#else
x = make_mask32(x);
return (x ^ (x >> 1));
return x ^ (x >> 1);
#endif
}

/*! \brief Find the parity of a byte.
\param x The byte to be checked.
\return 1 for odd, or 0 for even. */
static __inline__ int parity8(uint8_t x)
static inline int parity8(uint8_t x)
{
x = (x ^ (x >> 4)) & 0x0F;
return (0x6996 >> x) & 1;
Expand All @@ -206,7 +204,7 @@ static __inline__ int parity8(uint8_t x)
/*! \brief Find the parity of a 16 bit word.
\param x The word to be checked.
\return 1 for odd, or 0 for even. */
static __inline__ int parity16(uint16_t x)
static inline int parity16(uint16_t x)
{
x ^= (x >> 8);
x = (x ^ (x >> 4)) & 0x0F;
Expand All @@ -216,7 +214,7 @@ static __inline__ int parity16(uint16_t x)
/*! \brief Find the parity of a 32 bit word.
\param x The word to be checked.
\return 1 for odd, or 0 for even. */
static __inline__ int parity32(uint32_t x)
static inline int parity32(uint32_t x)
{
x ^= (x >> 16);
x ^= (x >> 8);
Expand Down
42 changes: 16 additions & 26 deletions drivers/staging/echo/echo.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: echo.c,v 1.20 2006/12/01 18:00:48 steveu Exp $
*/

/*! \file */
Expand Down Expand Up @@ -113,17 +111,17 @@

#define MIN_TX_POWER_FOR_ADAPTION 64
#define MIN_RX_POWER_FOR_ADAPTION 64
#define DTD_HANGOVER 600 /* 600 samples, or 75ms */
#define DC_LOG2BETA 3 /* log2() of DC filter Beta */
#define DTD_HANGOVER 600 /* 600 samples, or 75ms */
#define DC_LOG2BETA 3 /* log2() of DC filter Beta */

/*-----------------------------------------------------------------------*\
FUNCTIONS
FUNCTIONS
\*-----------------------------------------------------------------------*/

/* adapting coeffs using the traditional stochastic descent (N)LMS algorithm */

#ifdef __bfin__
static void __inline__ lms_adapt_bg(struct oslec_state *ec, int clean,
static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
int shift)
{
int i, j;
Expand All @@ -147,13 +145,13 @@ static void __inline__ lms_adapt_bg(struct oslec_state *ec, int clean,

/* st: and en: help us locate the assembler in echo.s */

//asm("st:");
/* asm("st:"); */
n = ec->taps;
for (i = 0, j = offset2; i < n; i++, j++) {
exp = *phist++ * factor;
ec->fir_taps16[1][i] += (int16_t) ((exp + (1 << 14)) >> 15);
}
//asm("en:");
/* asm("en:"); */

/* Note the asm for the inner loop above generated by Blackfin gcc
4.1.1 is pretty good (note even parallel instructions used):
Expand Down Expand Up @@ -195,7 +193,7 @@ static void __inline__ lms_adapt_bg(struct oslec_state *ec, int clean,
*/

#else
static __inline__ void lms_adapt_bg(struct oslec_state *ec, int clean,
static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
int shift)
{
int i;
Expand Down Expand Up @@ -249,9 +247,8 @@ struct oslec_state *oslec_create(int len, int adaption_mode)
fir16_create(&ec->fir_state, ec->fir_taps16[0], ec->taps);
fir16_create(&ec->fir_state_bg, ec->fir_taps16[1], ec->taps);

for (i = 0; i < 5; i++) {
for (i = 0; i < 5; i++)
ec->xvtx[i] = ec->yvtx[i] = ec->xvrx[i] = ec->yvrx[i] = 0;
}

ec->cng_level = 1000;
oslec_adaption_mode(ec, adaption_mode);
Expand All @@ -271,14 +268,13 @@ struct oslec_state *oslec_create(int len, int adaption_mode)

return ec;

error_oom:
error_oom:
for (i = 0; i < 2; i++)
kfree(ec->fir_taps16[i]);

kfree(ec);
return NULL;
}

EXPORT_SYMBOL_GPL(oslec_create);

void oslec_free(struct oslec_state *ec)
Expand All @@ -292,14 +288,12 @@ 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)
Expand All @@ -326,14 +320,12 @@ 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 ------------------------------------------------*/
Expand Down Expand Up @@ -399,7 +391,7 @@ 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 +=
Expand Down Expand Up @@ -498,15 +490,15 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)

if ((ec->adaption_mode & ECHO_CAN_USE_ADAPTION) &&
(ec->nonupdate_dwell == 0) &&
(8 * ec->Lclean_bg <
7 * ec->Lclean) /* (ec->Lclean_bg < 0.875*ec->Lclean) */ &&
(8 * ec->Lclean_bg <
ec->Ltx) /* (ec->Lclean_bg < 0.125*ec->Ltx) */ ) {
/* (ec->Lclean_bg < 0.875*ec->Lclean) */
(8 * ec->Lclean_bg < 7 * ec->Lclean) &&
/* (ec->Lclean_bg < 0.125*ec->Ltx) */
(8 * ec->Lclean_bg < ec->Ltx)) {
if (ec->cond_met == 6) {
/* BG filter has had better results for 6 consecutive samples */
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
Expand Down Expand Up @@ -580,7 +572,6 @@ 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 seperated from the echo canceller is it is usually called
Expand All @@ -604,7 +595,7 @@ EXPORT_SYMBOL_GPL(oslec_update);
precision, which noise shapes things, 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;

Expand All @@ -629,7 +620,6 @@ int16_t oslec_hpf_tx(struct oslec_state * ec, int16_t tx)

return tx;
}

EXPORT_SYMBOL_GPL(oslec_hpf_tx);

MODULE_LICENSE("GPL");
Expand Down
2 changes: 0 additions & 2 deletions drivers/staging/echo/echo.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: echo.h,v 1.9 2006/10/24 13:45:28 steveu Exp $
*/

#ifndef __ECHO_H
Expand Down
28 changes: 13 additions & 15 deletions drivers/staging/echo/fir.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: fir.h,v 1.8 2006/10/24 13:45:28 steveu Exp $
*/

/*! \page fir_page FIR filtering
Expand Down Expand Up @@ -102,8 +100,8 @@ struct fir_float_state_t {
float *history;
};

static __inline__ const int16_t *fir16_create(struct fir16_state_t *fir,
const int16_t * coeffs, int taps)
static inline const int16_t *fir16_create(struct fir16_state_t *fir,
const int16_t *coeffs, int taps)
{
fir->taps = taps;
fir->curr_pos = taps - 1;
Expand All @@ -116,7 +114,7 @@ static __inline__ const int16_t *fir16_create(struct fir16_state_t *fir,
return fir->history;
}

static __inline__ void fir16_flush(struct fir16_state_t *fir)
static inline void fir16_flush(struct fir16_state_t *fir)
{
#if defined(USE_MMX) || defined(USE_SSE2) || defined(__bfin__)
memset(fir->history, 0, 2 * fir->taps * sizeof(int16_t));
Expand All @@ -125,7 +123,7 @@ static __inline__ void fir16_flush(struct fir16_state_t *fir)
#endif
}

static __inline__ void fir16_free(struct fir16_state_t *fir)
static inline void fir16_free(struct fir16_state_t *fir)
{
kfree(fir->history);
}
Expand All @@ -148,16 +146,16 @@ static inline int32_t dot_asm(short *x, short *y, int len)
"A0 += R0.L*R1.L (IS);\n\t"
"R0 = A0;\n\t"
"%0 = R0;\n\t"
:"=&d"(dot)
:"a"(x), "a"(y), "a"(len)
:"I0", "I1", "A1", "A0", "R0", "R1"
: "=&d"(dot)
: "a"(x), "a"(y), "a"(len)
: "I0", "I1", "A1", "A0", "R0", "R1"
);

return dot;
}
#endif

static __inline__ int16_t fir16(struct fir16_state_t *fir, int16_t sample)
static inline int16_t fir16(struct fir16_state_t *fir, int16_t sample)
{
int32_t y;
#if defined(USE_MMX)
Expand Down Expand Up @@ -250,8 +248,8 @@ static __inline__ int16_t fir16(struct fir16_state_t *fir, int16_t sample)
return (int16_t) (y >> 15);
}

static __inline__ const int16_t *fir32_create(struct fir32_state_t *fir,
const int32_t * coeffs, int taps)
static inline const int16_t *fir32_create(struct fir32_state_t *fir,
const int32_t *coeffs, int taps)
{
fir->taps = taps;
fir->curr_pos = taps - 1;
Expand All @@ -260,17 +258,17 @@ static __inline__ const int16_t *fir32_create(struct fir32_state_t *fir,
return fir->history;
}

static __inline__ void fir32_flush(struct fir32_state_t *fir)
static inline void fir32_flush(struct fir32_state_t *fir)
{
memset(fir->history, 0, fir->taps * sizeof(int16_t));
}

static __inline__ void fir32_free(struct fir32_state_t *fir)
static inline void fir32_free(struct fir32_state_t *fir)
{
kfree(fir->history);
}

static __inline__ int16_t fir32(struct fir32_state_t *fir, int16_t sample)
static inline int16_t fir32(struct fir32_state_t *fir, int16_t sample)
{
int i;
int32_t y;
Expand Down
Loading

0 comments on commit dc57a3e

Please sign in to comment.