wct4xxp: Report rx signalling bit changes after spanconfig.
This fixes a long standing issue where, for CAS signaling, the RX bits were sometimes misreported after span configuration before the first detected state change. The logic in the wct4xxp driver now matches that in the wcte43x driver and wcte13xp drivers. The wcte12xp driver always polls the sigbits due to how voicebus works and is not affected by this. Internal-Issue-ID: DAHDI-1081 Signed-off-by: Shaun Ruffell <sruffell@digium.com>
This commit is contained in:
parent
71867c3de7
commit
089b593b56
@ -3296,8 +3296,6 @@ static void t4_check_sigbits(struct t4 *wc, int span)
|
|||||||
dev_notice(&wc->dev->dev, "Checking sigbits on span %d\n",
|
dev_notice(&wc->dev->dev, "Checking sigbits on span %d\n",
|
||||||
span + 1);
|
span + 1);
|
||||||
|
|
||||||
if (!(ts->span.flags & DAHDI_FLAG_RUNNING))
|
|
||||||
return;
|
|
||||||
if (E1 == ts->linemode) {
|
if (E1 == ts->linemode) {
|
||||||
for (i = 0; i < 15; i++) {
|
for (i = 0; i < 15; i++) {
|
||||||
a = t4_framer_in(wc, span, 0x71 + i);
|
a = t4_framer_in(wc, span, 0x71 + i);
|
||||||
@ -3687,6 +3685,7 @@ static inline void t4_framer_interrupt(struct t4 *wc, int span)
|
|||||||
struct t4_span *ts = wc->tspans[span];
|
struct t4_span *ts = wc->tspans[span];
|
||||||
struct dahdi_chan *sigchan;
|
struct dahdi_chan *sigchan;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
bool recheck_sigbits = false;
|
||||||
|
|
||||||
|
|
||||||
/* 1st gen cards isn't used interrupts */
|
/* 1st gen cards isn't used interrupts */
|
||||||
@ -3712,6 +3711,8 @@ static inline void t4_framer_interrupt(struct t4 *wc, int span)
|
|||||||
ts->span.count.ebit += __t4_framer_in(wc, span, EBCL_T);
|
ts->span.count.ebit += __t4_framer_in(wc, span, EBCL_T);
|
||||||
ts->span.count.be += __t4_framer_in(wc, span, BECL_T);
|
ts->span.count.be += __t4_framer_in(wc, span, BECL_T);
|
||||||
ts->span.count.prbs = __t4_framer_in(wc, span, FRS1_T);
|
ts->span.count.prbs = __t4_framer_in(wc, span, FRS1_T);
|
||||||
|
if (DAHDI_RXSIG_INITIAL == ts->span.chans[0]->rxhooksig)
|
||||||
|
recheck_sigbits = true;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&wc->reglock, flags);
|
spin_unlock_irqrestore(&wc->reglock, flags);
|
||||||
|
|
||||||
@ -3720,7 +3721,7 @@ static inline void t4_framer_interrupt(struct t4 *wc, int span)
|
|||||||
ts->span.count.errsec += 1;
|
ts->span.count.errsec += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isr0)
|
if (isr0 & 0x08 || recheck_sigbits)
|
||||||
t4_check_sigbits(wc, span);
|
t4_check_sigbits(wc, span);
|
||||||
|
|
||||||
if (E1 == ts->linemode) {
|
if (E1 == ts->linemode) {
|
||||||
|
Loading…
Reference in New Issue
Block a user