summaryrefslogtreecommitdiff
path: root/drivers/dahdi/dahdi-base.c
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2009-06-30 17:27:34 +0000
committerShaun Ruffell <sruffell@digium.com>2009-06-30 17:27:34 +0000
commit57291fd36e2323bb0fb031a4e33183c0c4e0ac8b (patch)
treeb7957261ec5973924aa9b33036ad5f21822da3e2 /drivers/dahdi/dahdi-base.c
parent414587d9e15e4fba53cc670b68752082cc94cff9 (diff)
echocan: Do not go into PRETRAINING mode if not supported by the echocan.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@6803 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/dahdi-base.c')
-rw-r--r--drivers/dahdi/dahdi-base.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
index e88fcec..631b7d9 100644
--- a/drivers/dahdi/dahdi-base.c
+++ b/drivers/dahdi/dahdi-base.c
@@ -5272,14 +5272,18 @@ static int dahdi_chan_ioctl(struct inode *inode, struct file *file, unsigned int
if ((j < 0) || (j >= DAHDI_MAX_PRETRAINING))
return -EINVAL;
j <<= 3;
+ spin_lock_irqsave(&chan->lock, flags);
if (chan->ec_state) {
/* Start pretraining stage */
- spin_lock_irqsave(&chan->lock, flags);
- chan->ec_state->status.mode = ECHO_MODE_PRETRAINING;
- chan->ec_state->status.pretrain_timer = j;
+ if (chan->ec_state->ops->echocan_traintap) {
+ chan->ec_state->status.mode = ECHO_MODE_PRETRAINING;
+ chan->ec_state->status.pretrain_timer = j;
+ }
+ spin_unlock_irqrestore(&chan->lock, flags);
+ } else {
spin_unlock_irqrestore(&chan->lock, flags);
- } else
return -EINVAL;
+ }
break;
case DAHDI_ECHOCANCEL_FAX_MODE:
if (!chan->ec_state) {