[svn-commits] mattf: linux/trunk r7309 - in /linux/trunk/drivers/dahdi: ./ voicebus/ wctdm2...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Oct 2 11:32:09 CDT 2009


Author: mattf
Date: Fri Oct  2 11:31:58 2009
New Revision: 7309

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=7309
Log:
Implement API update to do per-channel companding selection for VPMADT032

Modified:
    linux/trunk/drivers/dahdi/adt_lec.c
    linux/trunk/drivers/dahdi/adt_lec.h
    linux/trunk/drivers/dahdi/voicebus/GpakCust.c
    linux/trunk/drivers/dahdi/voicebus/GpakCust.h
    linux/trunk/drivers/dahdi/wctdm24xxp/base.c
    linux/trunk/drivers/dahdi/wcte12xp/base.c

Modified: linux/trunk/drivers/dahdi/adt_lec.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/adt_lec.c?view=diff&rev=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/adt_lec.c (original)
+++ linux/trunk/drivers/dahdi/adt_lec.c Fri Oct  2 11:31:58 2009
@@ -29,8 +29,10 @@
 
 static inline void adt_lec_init_defaults(struct adt_lec_params *params, __u32 tap_length)
 {
-	memset(params, 0, sizeof(*params));
 	params->tap_length = tap_length;
+	params->nlp_type = 0;
+	params->nlp_max_suppress = 0;
+	params->nlp_threshold = 0;
 }
 
 static int adt_lec_parse_params(struct adt_lec_params *params,

Modified: linux/trunk/drivers/dahdi/adt_lec.h
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/adt_lec.h?view=diff&rev=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/adt_lec.h (original)
+++ linux/trunk/drivers/dahdi/adt_lec.h Fri Oct  2 11:31:58 2009
@@ -32,11 +32,17 @@
 	ADT_LEC_SUPPRESS,
 };
 
+enum adt_companding {
+	ADT_COMP_ULAW = 0,
+	ADT_COMP_ALAW,
+};
+
 struct adt_lec_params {
 	__u32 tap_length;
 	enum adt_lec_nlp_type nlp_type;
 	__u32 nlp_threshold;
 	__u32 nlp_max_suppress;
+	enum adt_companding companding;
 };
 
 #endif /* _ADT_LEC_H */

Modified: linux/trunk/drivers/dahdi/voicebus/GpakCust.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/voicebus/GpakCust.c?view=diff&rev=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/voicebus/GpakCust.c (original)
+++ linux/trunk/drivers/dahdi/voicebus/GpakCust.c Fri Oct  2 11:31:58 2009
@@ -218,13 +218,10 @@
 	GPAK_AlgControlStat_t pstatus;
 	GpakAlgCtrl_t control;
 
-	if (vpm->span) {
-		control = (DAHDI_LAW_ALAW == vpm->span->deflaw) ?
-				EnableALawSwCompanding :
-				EnableMuLawSwCompanding;
-	} else {
-		control = EnableMuLawSwCompanding;
-	}
+ 	control = (ADT_COMP_ALAW == vpm->desiredecstate[channel].companding) ?
+ 			EnableALawSwCompanding :
+ 			EnableMuLawSwCompanding;
+ 
 	if (vpm->options.debug & DEBUG_ECHOCAN) {
 		const char *law;
 		law = (control == EnableMuLawSwCompanding) ? "MuLaw" : "ALaw";
@@ -282,7 +279,7 @@
 	 * looking for ones where the desired state does not match the current
 	 * state.
 	 */
-	for (channel = 0; channel < vpm->span->channels; channel++) {
+	for (channel = 0; channel < vpm->options.channels; channel++) {
 		GPAK_AlgControlStat_t pstatus;
 		int res = 1;
 		curstate = &vpm->curecstate[channel];

Modified: linux/trunk/drivers/dahdi/voicebus/GpakCust.h
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/voicebus/GpakCust.h?view=diff&rev=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/voicebus/GpakCust.h (original)
+++ linux/trunk/drivers/dahdi/voicebus/GpakCust.h Fri Oct  2 11:31:58 2009
@@ -108,7 +108,6 @@
 #define MAX_CHANNELS_PER_SPAN 32
 struct vpmadt032 {
 	void *context;
-	const struct dahdi_span *span;
 	struct work_struct work;
 	struct workqueue_struct *wq;
 	int dspid;

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=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/wctdm24xxp/base.c (original)
+++ linux/trunk/drivers/dahdi/wctdm24xxp/base.c Fri Oct  2 11:31:58 2009
@@ -311,18 +311,7 @@
 	chanconfig->MuteToneB = Disabled;
 	chanconfig->FaxCngDetB = Disabled;
 
-	switch (vpm->span->deflaw) {
-	case DAHDI_LAW_MULAW:
-		chanconfig->SoftwareCompand = cmpPCMU;
-		break;
-	case DAHDI_LAW_ALAW:
-		chanconfig->SoftwareCompand = cmpPCMA;
-		break;
-	default:
-		chanconfig->SoftwareCompand = cmpPCMU;
-		break;
-	}
-		
+	chanconfig->SoftwareCompand = (vpm->desiredecstate[channel].companding = ADT_COMP_ALAW) ? cmpPCMA : cmpPCMU;
 	chanconfig->FrameRate = rate2ms;
 	p = &chanconfig->EcanParametersA;
 
@@ -337,7 +326,7 @@
 		sizeof(chanconfig->EcanParametersB));
 }
 
-static int config_vpmadt032(struct vpmadt032 *vpm)
+static int config_vpmadt032(struct vpmadt032 *vpm, struct wctdm *wc)
 {
 	int res, i;
 	GpakPortConfig_t portconfig = {0};
@@ -426,11 +415,12 @@
 		return -1;
 	}
 
-	for (i = 0; i < vpm->span->channels; ++i) {
+	for (i = 0; i < vpm->options.channels; ++i) {
 		vpm->curecstate[i].tap_length = 0;
 		vpm->curecstate[i].nlp_type = vpm->options.vpmnlptype;
 		vpm->curecstate[i].nlp_threshold = vpm->options.vpmnlpthresh;
 		vpm->curecstate[i].nlp_max_suppress = vpm->options.vpmnlpmaxsupp;
+		vpm->curecstate[i].companding = (wc->span.deflaw == DAHDI_LAW_MULAW) ? ADT_COMP_ULAW : ADT_COMP_ALAW;
 		memcpy(&vpm->desiredecstate[i], &vpm->curecstate[i], sizeof(vpm->curecstate[i]));
 
 		/* set_vpmadt032_chanconfig_from_state(&vpm->curecstate[i], &vpm->options, i, &chanconfig); !!! */
@@ -445,6 +435,11 @@
 		}
 
 		if ((res = gpakAlgControl(vpm->dspid, i, BypassEcanA, &algstatus))) {
+			printk(KERN_NOTICE "Unable to disable echo can on channel %d (reason %d:%d)\n", i + 1, res, algstatus);
+			return -1;
+		}
+
+		if ((res = gpakAlgControl(vpm->dspid, i, BypassSwCompanding, &algstatus))) {
 			printk(KERN_NOTICE "Unable to disable echo can on channel %d (reason %d:%d)\n", i + 1, res, algstatus);
 			return -1;
 		}
@@ -3679,7 +3674,7 @@
 
 		wc->vpmadt032->setchanconfig_from_state = setchanconfig_from_state;
 		wc->vpmadt032->context = wc;
-		wc->vpmadt032->span = &wc->span;
+		wc->vpmadt032->options.channels = wc->span.channels;
 		get_default_portconfig(&portconfig);
 		res = vpmadt032_init(wc->vpmadt032, wc->vb);
 		/* In case there was an error while we were loading the VPM module. */
@@ -3696,7 +3691,7 @@
 
 		/* Now we need to configure the VPMADT032 module for this
 		 * particular board. */
-		res = config_vpmadt032(wc->vpmadt032);
+		res = config_vpmadt032(wc->vpmadt032, wc);
 		if (res) {
 			vpmadt032_free(wc->vpmadt032);
 			wc->vpmadt032 = NULL;

Modified: linux/trunk/drivers/dahdi/wcte12xp/base.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/wcte12xp/base.c?view=diff&rev=7309&r1=7308&r2=7309
==============================================================================
--- linux/trunk/drivers/dahdi/wcte12xp/base.c (original)
+++ linux/trunk/drivers/dahdi/wcte12xp/base.c Fri Oct  2 11:31:58 2009
@@ -258,7 +258,7 @@
 	}
 }
 
-static int config_vpmadt032(struct vpmadt032 *vpm)
+static int config_vpmadt032(struct vpmadt032 *vpm, struct t1 *wc)
 {
 	int res, channel;
 	GpakPortConfig_t portconfig = {0};
@@ -352,6 +352,7 @@
 		vpm->curecstate[channel].nlp_type = vpm->options.vpmnlptype;
 		vpm->curecstate[channel].nlp_threshold = vpm->options.vpmnlpthresh;
 		vpm->curecstate[channel].nlp_max_suppress = vpm->options.vpmnlpmaxsupp;
+		vpm->curecstate[channel].companding = (wc->spantype == TYPE_T1) ? ADT_COMP_ULAW : ADT_COMP_ALAW;
 		memcpy(&vpm->desiredecstate[channel], &vpm->curecstate[channel], sizeof(vpm->curecstate[channel]));
 
 		vpm->setchanconfig_from_state(vpm, channel, &chanconfig);
@@ -1364,6 +1365,7 @@
 		options.vpmnlptype = vpmnlptype;
 		options.vpmnlpthresh = vpmnlpthresh;
 		options.vpmnlpmaxsupp = vpmnlpmaxsupp;
+		options.channels = (wc->spantype == TYPE_T1) ? 24 : 32;
 
 		wc->vpmadt032 = vpmadt032_alloc(&options, wc->name);
 		if (!wc->vpmadt032)
@@ -1371,7 +1373,6 @@
 
 		wc->vpmadt032->context = wc;
 		wc->vpmadt032->setchanconfig_from_state = setchanconfig_from_state;
-		wc->vpmadt032->span = &wc->span;
 
 		res = vpmadt032_init(wc->vpmadt032, wc->vb);
 		if (res) {
@@ -1380,7 +1381,7 @@
 			return -EIO;
 		}
 
-		config_vpmadt032(wc->vpmadt032);
+		config_vpmadt032(wc->vpmadt032, wc);
 
 		set_span_devicetype(wc);
 		module_printk("VPM present and operational (Firmware version %x)\n", wc->vpmadt032->version);




More information about the svn-commits mailing list