[svn-commits] mattf: branch 1.4 r3133 - in /branches/1.4: ./ wctdm24xxp/base.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Oct 12 17:25:47 CDT 2007


Author: mattf
Date: Fri Oct 12 17:25:46 2007
New Revision: 3133

URL: http://svn.digium.com/view/zaptel?view=rev&rev=3133
Log:
Merged revisions 3132 via svnmerge from 
https://origsvn.digium.com/svn/zaptel/branches/1.2

........
r3132 | mattf | 2007-10-12 17:19:58 -0500 (Fri, 12 Oct 2007) | 1 line

Fix for false power alarms, as well as a clock polarity issue
........

Modified:
    branches/1.4/   (props changed)
    branches/1.4/wctdm24xxp/base.c

Propchange: branches/1.4/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Modified: branches/1.4/wctdm24xxp/base.c
URL: http://svn.digium.com/view/zaptel/branches/1.4/wctdm24xxp/base.c?view=diff&rev=3133&r1=3132&r2=3133
==============================================================================
--- branches/1.4/wctdm24xxp/base.c (original)
+++ branches/1.4/wctdm24xxp/base.c Fri Oct 12 17:25:46 2007
@@ -1194,7 +1194,7 @@
 		if (wc->mods[card].fxs.palarms < MAX_ALARMS) {
 			printk("Power alarm (%02x) on module %d, resetting!\n", res, card + 1);
 			if (wc->mods[card].fxs.lasttxhook == 4)
-				wc->mods[card].fxs.lasttxhook = 1;
+				wc->mods[card].fxs.lasttxhook = 0x11;
 			wc->sethook[card] = CMD_WR(19, res);
 #if 0
 			wc->sethook[card] = CMD_WR(64, wc->mods[card].fxs.lasttxhook);
@@ -1210,12 +1210,21 @@
 	}
 #else
 	res = wc->cmdq[card].isrshadow[1];
-	if (!res && (res != wc->mods[card].fxs.lasttxhook)) {
+	/* This makes sure the lasthook was put in reg 64 the linefeed reg */
+	if (((res & 0x0f) | 0x10) == wc->mods[card].fxs.lasttxhook) 
+		wc->mods[card].fxs.lasttxhook &= 0x0f;
+
+	res = !res &&    /* reg 64 has to be zero at last isr read */
+		!(wc->mods[card].fxs.lasttxhook & 0x10 ) && /* not a transition */
+		wc->mods[card].fxs.lasttxhook; /* not an intended zero */
+	
+	if (res) {
 		wc->mods[card].fxs.palarms++;
 		if (wc->mods[card].fxs.palarms < MAX_ALARMS) {
 			printk("Power alarm on module %d, resetting!\n", card + 1);
 			if (wc->mods[card].fxs.lasttxhook == 4)
-				wc->mods[card].fxs.lasttxhook = 1;
+				wc->mods[card].fxs.lasttxhook = 0x11;
+			wc->mods[card].fxs.lasttxhook |= 0x10;
 			wc->sethook[card] = CMD_WR(64, wc->mods[card].fxs.lasttxhook);
 
 			/* wctdm_setreg_intr(wc, card, 64, wc->mods[card].fxs.lasttxhook); */
@@ -1552,7 +1561,7 @@
 							wc->mods[x].fxs.idletxhookstate = 0x1;	/* Switch to active */
 							if (wc->mods[x].fxs.lasttxhook == 0x2) {
 								/* Apply the change if appropriate */
-								wc->mods[x].fxs.lasttxhook = 0x1;
+								wc->mods[x].fxs.lasttxhook = 0x11;
 								wc->sethook[x] = CMD_WR(64, wc->mods[x].fxs.lasttxhook);
 								/* wctdm_setreg_intr(wc, x, 64, wc->mods[x].fxs.lasttxhook); */
 							}
@@ -2100,6 +2109,7 @@
 
 	/* By default, don't send on hook */
 	wc->mods[card].fxs.idletxhookstate = 1;
+	wc->mods[card].fxs.lasttxhook = 0x10;
 
 	/* Sanity check the ProSLIC */
 	if (!sane && wctdm_proslic_insane(wc, card))
@@ -2289,7 +2299,7 @@
 		}
 	}
 
-	if(fxstxgain || fxsrxgain) {
+	if (fxstxgain || fxsrxgain) {
 		r9 = wctdm_getreg(wc, card, 9);
 		switch (fxstxgain) {
 		
@@ -2314,14 +2324,14 @@
 			case 0:
 				break;
 		}
-		wctdm_setreg(wc,card,9,r9);
-	}
-
-	if(debug)
-			printk("DEBUG: fxstxgain:%s fxsrxgain:%s\n",((wctdm_getreg(wc, card, 9)/8) == 1)?"3.5":(((wctdm_getreg(wc,card,9)/4) == 1)?"-3.5":"0.0"),((wctdm_getreg(wc, card, 9)/2) == 1)?"3.5":((wctdm_getreg(wc,card,9)%2)?"-3.5":"0.0"));
-
+		wctdm_setreg(wc, card, 9, r9);
+	}
+
+	if (debug)
+		printk("DEBUG: fxstxgain:%s fxsrxgain:%s\n",((wctdm_getreg(wc, card, 9)/8) == 1)?"3.5":(((wctdm_getreg(wc,card,9)/4) == 1)?"-3.5":"0.0"),((wctdm_getreg(wc, card, 9)/2) == 1)?"3.5":((wctdm_getreg(wc,card,9)%2)?"-3.5":"0.0"));
+
+	wc->mods[card].fxs.lasttxhook = 0x11;
 	wctdm_setreg(wc, card, 64, 0x01);
-	wc->mods[card].fxs.lasttxhook = 1;
 	return 0;
 }
 
@@ -2507,7 +2517,7 @@
 		wc->mods[chan->chanpos - 1].fxs.idletxhookstate = 0x2;	/* OHT mode when idle */
 		if (wc->mods[chan->chanpos - 1].fxs.lasttxhook == 0x1) {
 			/* Apply the change if appropriate */
-			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x2;
+			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x12;
 			wc->sethook[chan->chanpos - 1] = CMD_WR(64, wc->mods[chan->chanpos - 1].fxs.lasttxhook);
 			/* wctdm_setreg(wc, chan->chanpos - 1, 64, wc->mods[chan->chanpos - 1].fxs.lasttxhook); */
 		}
@@ -2554,6 +2564,9 @@
 			wctdm_proslic_setreg_indirect(wc, chan->chanpos - 1, regop.reg, regop.val);
 		} else {
 			regop.val &= 0xff;
+			if (regop.reg == 64)
+				wc->mods[chan->chanpos-1].fxs.lasttxhook = (regop.val & 0x0f) |  0x10;
+			
 			printk("Setting direct %d to %04x on %d\n", regop.reg, regop.val, chan->chanpos);
 			wctdm_setreg(wc, chan->chanpos - 1, regop.reg, regop.val);
 		}
@@ -2859,28 +2872,30 @@
 			case ZT_SIG_EM:
 			case ZT_SIG_FXOKS:
 			case ZT_SIG_FXOLS:
-				wc->mods[chan->chanpos - 1].fxs.lasttxhook = wc->mods[chan->chanpos - 1].fxs.idletxhookstate;
+				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x10 |
+					wc->mods[chan->chanpos - 1].fxs.idletxhookstate;
 				break;
 			case ZT_SIG_FXOGS:
-				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 3;
+				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x13;
 				break;
 			}
 			break;
 		case ZT_TXSIG_OFFHOOK:
 			switch(chan->sig) {
 			case ZT_SIG_EM:
-				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 5;
+				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x15;
 				break;
 			default:
-				wc->mods[chan->chanpos - 1].fxs.lasttxhook = wc->mods[chan->chanpos - 1].fxs.idletxhookstate;
+				wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x10 |
+					wc->mods[chan->chanpos - 1].fxs.idletxhookstate;
 				break;
 			}
 			break;
 		case ZT_TXSIG_START:
-			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 4;
+			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x14;
 			break;
 		case ZT_TXSIG_KEWL:
-			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0;
+			wc->mods[chan->chanpos - 1].fxs.lasttxhook = 0x10;
 			break;
 		default:
 			printk("wctdm24xxp: Can't set tx state to %d\n", txsig);
@@ -3370,7 +3385,7 @@
 	portconfig.TxFrameSyncPolarity3 = FrameSyncActHigh;
 	portconfig.RxFrameSyncPolarity3 = FrameSyncActHigh;
 	portconfig.TxClockPolarity3 = SerClockActHigh;
-	portconfig.RxClockPolarity3 = SerClockActHigh;
+	portconfig.RxClockPolarity3 = SerClockActLow;
 	portconfig.TxDataDelay3 = DataDelay0;
 	portconfig.RxDataDelay3 = DataDelay0;
 	portconfig.DxDelay3 = Disabled;




More information about the svn-commits mailing list