summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xbus-pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/xpp/xbus-pcm.c')
-rw-r--r--drivers/dahdi/xpp/xbus-pcm.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/dahdi/xpp/xbus-pcm.c b/drivers/dahdi/xpp/xbus-pcm.c
index 448cf5a..a93de5e 100644
--- a/drivers/dahdi/xpp/xbus-pcm.c
+++ b/drivers/dahdi/xpp/xbus-pcm.c
@@ -935,6 +935,32 @@ out:
spin_unlock_irqrestore(&xpd->lock, flags);
}
+int generic_echocancel_timeslot(xpd_t *xpd, int pos)
+{
+ return xpd->addr.unit * 32 + pos;
+}
+EXPORT_SYMBOL(generic_echocancel_timeslot);
+
+int generic_echocancel_setmask(xpd_t *xpd, xpp_line_t ec_mask)
+{
+ int i;
+
+ BUG_ON(!xpd);
+ XPD_DBG(GENERAL, xpd, "0x%8X\n", ec_mask);
+ if (!ECHOOPS(xpd->xbus)) {
+ XPD_DBG(GENERAL, xpd,
+ "No echo canceller in XBUS: Doing nothing.\n");
+ return -EINVAL;
+ }
+ for (i = 0; i < PHONEDEV(xpd).channels; i++) {
+ int on = BIT(i) & ec_mask;
+ CALL_EC_METHOD(ec_set, xpd->xbus, xpd, i, on);
+ }
+ CALL_EC_METHOD(ec_update, xpd->xbus, xpd->xbus);
+ return 0;
+}
+EXPORT_SYMBOL(generic_echocancel_setmask);
+
static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
{
byte *xframe_end;