summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-02-05 23:48:24 +0000
committersruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-02-05 23:48:24 +0000
commit5af0f564f40075a92f0ade2819a20b28463c5f2b (patch)
treed0c972a099deab9e822af39218e28f792f28bb2f
parent09cbd97c920b6c61e9af8bb47c60f9b895881bed (diff)
Changes to the wcte12xp driver.
- replace change to allow driver to recover from descriptor unavailable. - module echo cancellation parameters now valid under 2.6 kernels. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@3805 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--kernel/wcte12xp/base.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/wcte12xp/base.c b/kernel/wcte12xp/base.c
index 5dd83db..477f293 100644
--- a/kernel/wcte12xp/base.c
+++ b/kernel/wcte12xp/base.c
@@ -1898,6 +1898,7 @@ ZAP_IRQ_HANDLER(te12xp_interrupt)
/* Read interrupts */
spin_lock(&wc->reglock);
ints = __t1_getctl(wc, 0x0028);
+ ints &= 0x3fef; /* Just look at the interrupt conditions */
if (!ints) {
spin_unlock(&wc->reglock);
@@ -1910,7 +1911,6 @@ ZAP_IRQ_HANDLER(te12xp_interrupt)
/* clear interrupts interrupts (we only get here if interrupt is for us) */
__t1_setctl(wc, 0x0028, ints);
- ints &= wc->intmask;
if (ints & 0x00000041) {
do {
@@ -1918,6 +1918,13 @@ ZAP_IRQ_HANDLER(te12xp_interrupt)
res |= t1_check_descriptor(wc, 1);
} while(res);
}
+
+ if (ints & 0x0000a3ae) {
+ /* This will allow us to recover if interrupts are held for a long period of time */
+ debug_printk(1, "Abnormal interrupt %08x detected\n", ints);
+ __t1_setctl(wc, 0x0008, 0x00000000);
+ __t1_setctl(wc, 0x0010, 0x00000000);
+ }
spin_unlock(&wc->reglock);
#ifdef LINUX26
@@ -2114,6 +2121,9 @@ module_param(alarmdebounce, int, S_IRUGO | S_IWUSR);
module_param(vpmsupport, int, S_IRUGO | S_IWUSR);
module_param(vpmdtmfsupport, int, S_IRUGO | S_IWUSR);
module_param(vpmtsisupport, int, S_IRUGO | S_IWUSR);
+module_param(vpmnlptype, int, S_IRUGO | S_IWUSR);
+module_param(vpmnlpthresh, int, S_IRUGO | S_IWUSR);
+module_param(vpmnlpmaxsupp, int, S_IRUGO | S_IWUSR);
#endif
#else
MODULE_PARM(debug, "i");