diff options
author | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-09-04 23:08:24 +0000 |
---|---|---|
committer | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-09-04 23:08:24 +0000 |
commit | 6e2fdc4fdd1f8be1c6d192d5230393489051e40d (patch) | |
tree | 048caacdd32831344b522e0a859a6b05d408721f /xpp | |
parent | 0305962c454019c63b6d69634e8301b9f199627b (diff) |
Workaround spurious rings described in ticket:102 .
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1392 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp')
-rw-r--r-- | xpp/card_fxo.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c index 25d3e95..d3bde57 100644 --- a/xpp/card_fxo.c +++ b/xpp/card_fxo.c @@ -253,7 +253,7 @@ static void do_sethook(xpd_t *xpd, int pos, bool offhook) priv = xpd->priv; BUG_ON(!priv); if(!IS_SET(priv->battery, pos)) { - DBG("%s/%s/%d: WARNING: called while battery is off\n", xpd->xbus->busname, xpd->xpdname, pos); + NOTICE("%s/%s/%d: WARNING: called while battery is off\n", xpd->xbus->busname, xpd->xpdname, pos); } spin_lock_irqsave(&xpd->lock, flags); mark_ring(xpd, pos, 0); // No more rings @@ -678,6 +678,11 @@ HANDLER_DEF(FXO, SIG_CHANGED) spin_lock_irqsave(&xpd->lock, flags); for_each_line(xpd, i) { if(IS_SET(sig_toggles, i)) { + if(!IS_SET(priv->battery, i)) { + DBG("%s/%s/%d: battery is off. ignore false alarm.\n", + xbus->busname, xpd->xpdname, i); + continue; + } if(IS_SET(sig_status, i)) { #ifdef SOFT_RING priv->ring_sig[i]=1; /* trigger register polling */ @@ -727,14 +732,14 @@ HANDLER_DEF(FXO, DAA_REPLY) */ if(IS_SET(priv->battery, i) && priv->battery_debounce[i]++ > BAT_DEBOUNCE) { DBG("%s/%s: BATTERY OFF (%04X) voltage=%d\n", xpd->xbus->busname, xpd->xpdname, lines, bat); - priv->battery &= ~lines; + BIT_CLR(priv->battery, i); update_line_status(xpd, i, 0); } } else { priv->battery_debounce[i] = 0; if(!IS_SET(priv->battery, i)) { DBG("%s/%s: BATTERY ON (%04X) voltage=%d\n", xpd->xbus->busname, xpd->xpdname, lines, bat); - priv->battery |= lines; + BIT_SET(priv->battery, i); update_line_status(xpd, i, 1); } } |