[svn-commits] sruffell: linux/trunk r10166 - /linux/trunk/drivers/dahdi/wctdm24xxp/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Aug 30 11:38:27 CDT 2011


Author: sruffell
Date: Tue Aug 30 11:38:23 2011
New Revision: 10166

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=10166
Log:
wctdm24xxp: 'oppending_ms' shouldn't assume being checked at 1ms intervals.

Part of preparations for being able to optionally slow the interrupt
rate down and opening the door for moving more module processing out of
the interrupt handler.

Signed-off-by: Shaun Ruffell <sruffell at digium.com>
Acked-by: Russ Meyerriecks <rmeyerriecks at digium.com>

Modified:
    linux/trunk/drivers/dahdi/wctdm24xxp/base.c
    linux/trunk/drivers/dahdi/wctdm24xxp/wctdm24xxp.h

Modified: linux/trunk/drivers/dahdi/wctdm24xxp/base.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/wctdm24xxp/base.c?view=diff&rev=10166&r1=10165&r2=10166
==============================================================================
--- linux/trunk/drivers/dahdi/wctdm24xxp/base.c (original)
+++ linux/trunk/drivers/dahdi/wctdm24xxp/base.c Tue Aug 30 11:38:23 2011
@@ -1649,7 +1649,14 @@
 	return 0;
 }
 
-/* 1ms interrupt */
+/**
+ * wctdm_proslic_check_oppending -
+ *
+ * Ensures that a write to the line feed register on the SLIC has been
+ * processed. If it hasn't after the timeout value, then it will resend the
+ * command and wait for another timeout period.
+ *
+ */
 static void
 wctdm_proslic_check_oppending(struct wctdm *wc, struct wctdm_module *const mod)
 {
@@ -1670,7 +1677,6 @@
 	if ((fxs->linefeed_control_shadow & SLIC_LF_SETMASK) ==
 	    (fxs->lasttxhook & SLIC_LF_SETMASK)) {
 		fxs->lasttxhook &= SLIC_LF_SETMASK;
-		fxs->oppending_ms = 0;
 		if (debug & DEBUG_CARD) {
 			dev_info(&wc->vb.pdev->dev,
 				 "SLIC_LF OK: card=%d shadow=%02x "
@@ -1678,7 +1684,10 @@
 				 fxs->linefeed_control_shadow,
 				 fxs->lasttxhook, wc->framecount);
 		}
-	} else if (fxs->oppending_ms && (--fxs->oppending_ms == 0)) {
+	} else if (time_after(wc->framecount, fxs->oppending_timeout)) {
+		/* Check again in 100 ms */
+		fxs->oppending_timeout = wc->framecount + 100;
+
 		wctdm_setreg_intr(wc, mod, LINE_STATE, fxs->lasttxhook);
 		if (debug & DEBUG_CARD) {
 			dev_info(&wc->vb.pdev->dev,
@@ -1687,9 +1696,8 @@
 				 fxs->linefeed_control_shadow,
 				 fxs->lasttxhook, wc->framecount);
 		}
-	} else { /* Start 100ms Timeout */
-		fxs->oppending_ms = 100;
-	}
+	}
+
 	spin_unlock(&wc->reglock);
 }
 
@@ -1736,6 +1744,7 @@
 			}
 			fxs->lasttxhook |= SLIC_LF_OPPENDING;
 			mod->sethook = CMD_WR(LINE_STATE, fxs->lasttxhook);
+			fxs->oppending_timeout = wc->framecount + 100;
 
 			/* Update shadow register to avoid extra power alarms
 			 * until next read */
@@ -2174,6 +2183,7 @@
 	if (x != fxs->lasttxhook) {
 		fxs->lasttxhook = x | SLIC_LF_OPPENDING;
 		mod->sethook = CMD_WR(LINE_STATE, fxs->lasttxhook);
+		fxs->oppending_timeout = wc->framecount + 100;
 		spin_unlock_irqrestore(&wc->reglock, flags);
 
 		if (debug & DEBUG_CARD) {

Modified: linux/trunk/drivers/dahdi/wctdm24xxp/wctdm24xxp.h
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/wctdm24xxp/wctdm24xxp.h?view=diff&rev=10166&r1=10165&r2=10166
==============================================================================
--- linux/trunk/drivers/dahdi/wctdm24xxp/wctdm24xxp.h (original)
+++ linux/trunk/drivers/dahdi/wctdm24xxp/wctdm24xxp.h Tue Aug 30 11:38:23 2011
@@ -182,7 +182,6 @@
 * voicebus ISR.
 */
 	int lasttxhook;
-	int oppending_ms;
 	u8 linefeed_control_shadow;
 	u8 hook_state_shadow;
 	int palarms;
@@ -193,6 +192,7 @@
 	struct calregs calregs;
 	unsigned long check_alarm;
 	unsigned long check_proslic;
+	unsigned long oppending_timeout;
 };
 
 struct qrv {




More information about the svn-commits mailing list