aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/echo/echo.c10
-rw-r--r--drivers/staging/echo/echo.h15
-rw-r--r--drivers/staging/echo/fir.h35
-rw-r--r--drivers/staging/echo/oslec.h70
4 files changed, 67 insertions, 63 deletions
diff --git a/drivers/staging/echo/echo.c b/drivers/staging/echo/echo.c
index 548365cd0a4..4cc4f2eb7eb 100644
--- a/drivers/staging/echo/echo.c
+++ b/drivers/staging/echo/echo.c
@@ -220,12 +220,12 @@ static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
}
#endif
-static __inline__ int top_bit(unsigned int bits)
+static inline int top_bit(unsigned int bits)
{
if (bits == 0)
- return -1;
- else
- return (int)fls((int32_t)bits)-1;
+ return -1;
+ else
+ return (int)fls((int32_t)bits)-1;
}
struct oslec_state *oslec_create(int len, int adaption_mode)
@@ -466,7 +466,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),
diff --git a/drivers/staging/echo/echo.h b/drivers/staging/echo/echo.h
index c835e5c5314..754e66d30c1 100644
--- a/drivers/staging/echo/echo.h
+++ b/drivers/staging/echo/echo.h
@@ -28,13 +28,17 @@
#ifndef __ECHO_H
#define __ECHO_H
-/*! \page echo_can_page Line echo cancellation for voice
+/*
+Line echo cancellation for voice
+
+What does it do?
-\section echo_can_page_sec_1 What does it do?
This module aims to provide G.168-2002 compliant echo cancellation, to remove
electrical echoes (e.g. from 2-4 wire hybrids) from voice calls.
-\section echo_can_page_sec_2 How does it work?
+
+How does it work?
+
The heart of the echo cancellor is FIR filter. This is adapted to match the
echo impulse response of the telephone line. It must be long enough to
adequately cover the duration of that impulse response. The signal transmitted
@@ -108,7 +112,8 @@ major mis-convergence in the adaption process. An assessment algorithm is
needed which produces a fairly accurate result from a very short burst of far
end energy.
-\section echo_can_page_sec_3 How do I use it?
+How do I use it?
+
The echo cancellor processes both the transmit and receive streams sample by
sample. The processing function is not declared inline. Unfortunately,
cancellation requires many operations per sample, so the call overhead is only
@@ -118,7 +123,7 @@ a minor burden.
#include "fir.h"
#include "oslec.h"
-/*!
+/*
G.168 echo canceller descriptor. This defines the working state for a line
echo canceller.
*/
diff --git a/drivers/staging/echo/fir.h b/drivers/staging/echo/fir.h
index 4910b3b9226..7b9fabf1fea 100644
--- a/drivers/staging/echo/fir.h
+++ b/drivers/staging/echo/fir.h
@@ -23,14 +23,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/*! \page fir_page FIR filtering
-\section fir_page_sec_1 What does it do?
-???.
-
-\section fir_page_sec_2 How does it work?
-???.
-*/
-
#if !defined(_FIR_H_)
#define _FIR_H_
@@ -62,10 +54,10 @@
can.
*/
-/*!
- 16 bit integer FIR descriptor. This defines the working state for a single
- instance of an FIR filter using 16 bit integer coefficients.
-*/
+/*
+ * 16 bit integer FIR descriptor. This defines the working state for a single
+ * instance of an FIR filter using 16 bit integer coefficients.
+ */
struct fir16_state_t {
int taps;
int curr_pos;
@@ -73,11 +65,11 @@ struct fir16_state_t {
int16_t *history;
};
-/*!
- 32 bit integer FIR descriptor. This defines the working state for a single
- instance of an FIR filter using 32 bit integer coefficients, and filtering
- 16 bit integer data.
-*/
+/*
+ * 32 bit integer FIR descriptor. This defines the working state for a single
+ * instance of an FIR filter using 32 bit integer coefficients, and filtering
+ * 16 bit integer data.
+ */
struct fir32_state_t {
int taps;
int curr_pos;
@@ -85,10 +77,10 @@ struct fir32_state_t {
int16_t *history;
};
-/*!
- Floating point FIR descriptor. This defines the working state for a single
- instance of an FIR filter using floating point coefficients and data.
-*/
+/*
+ * Floating point FIR descriptor. This defines the working state for a single
+ * instance of an FIR filter using floating point coefficients and data.
+ */
struct fir_float_state_t {
int taps;
int curr_pos;
@@ -222,4 +214,3 @@ static inline int16_t fir32(struct fir32_state_t *fir, int16_t sample)
}
#endif
-/*- End of file ------------------------------------------------------------*/
diff --git a/drivers/staging/echo/oslec.h b/drivers/staging/echo/oslec.h
index bad852328a2..f4175360ce2 100644
--- a/drivers/staging/echo/oslec.h
+++ b/drivers/staging/echo/oslec.h
@@ -27,8 +27,6 @@
#ifndef __OSLEC_H
#define __OSLEC_H
-/* TODO: document interface */
-
/* Mask bits for the adaption mode */
#define ECHO_CAN_USE_ADAPTION 0x01
#define ECHO_CAN_USE_NLP 0x02
@@ -38,49 +36,59 @@
#define ECHO_CAN_USE_RX_HPF 0x20
#define ECHO_CAN_DISABLE 0x40
-/*!
- G.168 echo canceller descriptor. This defines the working state for a line
- echo canceller.
-*/
+/**
+ * oslec_state: G.168 echo canceller descriptor.
+ *
+ * This defines the working state for a line echo canceller.
+ */
struct oslec_state;
-/*! Create a voice echo canceller context.
- \param len The length of the canceller, in samples.
- \return The new canceller context, or NULL if the canceller could not be created.
-*/
+/**
+ * oslec_create - Create a voice echo canceller context.
+ * @len: The length of the canceller, in samples.
+ * @return: The new canceller context, or NULL if the canceller could not be
+ * created.
+ */
struct oslec_state *oslec_create(int len, int adaption_mode);
-/*! Free a voice echo canceller context.
- \param ec The echo canceller context.
-*/
+/**
+ * oslec_free - Free a voice echo canceller context.
+ * @ec: The echo canceller context.
+ */
void oslec_free(struct oslec_state *ec);
-/*! Flush (reinitialise) a voice echo canceller context.
- \param ec The echo canceller context.
-*/
+/**
+ * oslec_flush - Flush (reinitialise) a voice echo canceller context.
+ * @ec: The echo canceller context.
+ */
void oslec_flush(struct oslec_state *ec);
-/*! Set the adaption mode of a voice echo canceller context.
- \param ec The echo canceller context.
- \param adapt The mode.
-*/
+/**
+ * oslec_adaption_mode - set the adaption mode of a voice echo canceller context.
+ * @ec The echo canceller context.
+ * @adaption_mode: The mode.
+ */
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
void oslec_snapshot(struct oslec_state *ec);
-/*! Process a sample through a voice echo canceller.
- \param ec The echo canceller context.
- \param tx The transmitted audio sample.
- \param rx The received audio sample.
- \return The clean (echo cancelled) received sample.
-*/
+/**
+ * oslec_update: Process a sample through a voice echo canceller.
+ * @ec: The echo canceller context.
+ * @tx: The transmitted audio sample.
+ * @rx: The received audio sample.
+ *
+ * The return value is the clean (echo cancelled) received sample.
+ */
int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
-/*! Process to high pass filter the tx signal.
- \param ec The echo canceller context.
- \param tx The transmitted auio sample.
- \return The HP filtered transmit sample, send this to your D/A.
-*/
+/**
+ * oslec_hpf_tx: Process to high pass filter the tx signal.
+ * @ec: The echo canceller context.
+ * @tx: The transmitted auio sample.
+ *
+ * The return value is the HP filtered transmit sample, send this to your D/A.
+ */
int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
#endif /* __OSLEC_H */