diff -uNr linux/drivers/dahdi/wcb4xxp/base.c linux/drivers/dahdi/wcb4xxp/base.c --- linux/drivers/dahdi/wcb4xxp/base.c 2011-02-18 20:53:12.000000000 +0100 +++ linux/drivers/dahdi/wcb4xxp/base.c 2011-02-18 20:55:23.000000000 +0100 @@ -84,6 +84,7 @@ static int debug = 0; static int spanfilter = 0xFF; /* Bitmap for ports 1-8 */ +static int te_nt_override=0xFFFF; /* Override settings */ #ifdef LOOPBACK_SUPPORTED static int loopback = 0; #endif @@ -1519,14 +1520,23 @@ * - In B410P: GPIO=0: NT * - In Junghanns: GPIO=0: TE */ - if (b4->card_type == B410P) - nt = ((gpio & (1 << (i + 4))) == 0); - else - nt = ((gpio & (1 << (i + 4))) != 0); + + if(b4->card_type == B800P_OV) { + nt = !((te_nt_override >> i & 1)); + dev_info(b4->dev, "Port %d: %s mode manually set\n", i + 1, (nt ? "NT" : "TE")); + } + else { + + if (b4->card_type == B410P) + nt = ((gpio & (1 << (i + 4))) == 0); + else + nt = ((gpio & (1 << (i + 4))) != 0); + + dev_info(b4->dev, "Port %d: %s mode\n", i + 1, (nt ? "NT" : "TE")); - s->te_mode = !nt; + } - dev_info(b4->dev, "Port %d: %s mode\n", i + 1, (nt ? "NT" : "TE")); + s->te_mode = !nt; hfc_reset_st(s); hfc_start_st(s); @@ -2402,9 +2412,18 @@ DAHDI_CONFIG_ESF | DAHDI_CONFIG_HDB3 | DAHDI_CONFIG_CCS | DAHDI_CONFIG_CRC4; - sprintf(bspan->span.name, "B4/%d/%d", b4->cardno, i+1); - sprintf(bspan->span.desc, "B4XXP (PCI) Card %d Span %d", b4->cardno, i+1); - bspan->span.manufacturer = "Digium"; + if(b4->card_type == B800P_OV){ + int nt; + nt = !((te_nt_override >> i & 1)); + sprintf(bspan->span.desc, "B8XXP (PCI) Card %d Span %d Mode %s", b4->cardno, i+1, (nt ? "NT" : "TE")); + sprintf(bspan->span.name, "B8/%d/%d", b4->cardno, i+1); + } + else { + sprintf(bspan->span.desc, "B4XXP (PCI) Card %d Span %d", b4->cardno, i+1); + sprintf(bspan->span.name, "B4/%d/%d", b4->cardno, i+1); + } + + bspan->span.manufacturer = "Digium"; dahdi_copy_string(bspan->span.devicetype, b4->variety, sizeof(bspan->span.devicetype)); sprintf(bspan->span.location, "PCI Bus %02d Slot %02d", b4->pdev->bus->number, PCI_SLOT(b4->pdev->devfn) + 1); @@ -2422,8 +2441,12 @@ bspan->chans[j] = &bspan->_chans[j]; chan = bspan->chans[j]; chan->pvt = b4; + + if(b4->card_type == B800P_OV) + sprintf(chan->name, "B8/%d/%d/%d", b4->cardno, i + 1, j + 1); + else + sprintf(chan->name, "B4/%d/%d/%d", b4->cardno, i + 1, j + 1); - sprintf(chan->name, "B4/%d/%d/%d", b4->cardno, i + 1, j + 1); /* The last channel in the span is the D-channel */ if (j == WCB4XXP_CHANNELS_PER_SPAN - 1) { chan->sigcap = DAHDI_SIG_HARDHDLC; @@ -3012,6 +3035,7 @@ module_param(timer_1_ms, int, S_IRUGO | S_IWUSR); module_param(timer_3_ms, int, S_IRUGO | S_IWUSR); module_param(companding, charp, S_IRUGO); +module_param(te_nt_override, int, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(debug, "bitmap: 1=general 2=dtmf 4=regops 8=fops 16=ec 32=st state 64=hdlc 128=alarm"); MODULE_PARM_DESC(spanfilter, "debug filter for spans. bitmap: 1=port 1, 2=port 2, 4=port 3, 8=port 4"); @@ -3027,6 +3051,9 @@ MODULE_PARM_DESC(timer_3_ms, "TE: msec to wait for link activation, NT: unused."); MODULE_PARM_DESC(companding, "Change the companding to \"alaw\" or \"ulaw\""\ "(alaw by default)"); +MODULE_PARM_DESC(te_nt_override, "Overrides driver mode for B800P.\n"\ + "You need a bitmap as follows 11111110 = 254 (all spans in TE except the 1st)\n"\ + "You must configure the jumpper and turn on the terminator for each port you expect to work in NT mode."); MODULE_AUTHOR("Digium Incorporated "); MODULE_DESCRIPTION("B410P & Similars multi-port BRI module driver."); diff -uNr tools/xpp/perl_modules/Dahdi/Span.pm tools/xpp/perl_modules/Dahdi/Span.pm --- tools/xpp/perl_modules/Dahdi/Span.pm 2011-02-18 20:53:12.000000000 +0100 +++ tools/xpp/perl_modules/Dahdi/Span.pm 2011-02-18 21:30:17.000000000 +0100 @@ -132,6 +132,7 @@ 'octoBRI \[(NT|TE)\] ', 'HFC-S PCI A ISDN.* \[(NT|TE)\] ', '(B4XXP) \(PCI\) Card', # Does not expose NT/TE type + '(B8XXP) \(PCI\) Card', # NT/TE via module parameter '(WCBRI)', # has selectable NT/TE modes via dahdi_cfg ); @@ -190,7 +191,8 @@ foreach my $cardtype (@bri_strings) { if($head =~ m/$cardtype/) { my $termtype = $1; - $termtype = 'TE' if ( $1 eq 'B4XXP' or $1 eq 'WCBRI' ); + $termtype = 'TE' if ( $1 eq 'B4XXP' or $1 eq 'B8XXP' or $1 eq 'WCBRI' ); + $termtype = 'NT' if ($head =~ m/NT/); $self->{IS_DIGITAL} = 1; $self->{IS_BRI} = 1; $self->{TERMTYPE} = $termtype; @@ -264,7 +266,7 @@ # Infer some info from channel name: my $first_chan = ($self->chans())[0] || die "$0: No channels in span #$num\n"; my $chan_fqn = $first_chan->fqn(); - if($chan_fqn =~ m(ZTHFC.*/|ztqoz.*/|XPP_BRI_.*|B4/.*|WCBRI/.*)) { # BRI + if($chan_fqn =~ m(ZTHFC.*/|ztqoz.*/|XPP_BRI_.*|B4/.*|B8/.*|WCBRI/.*)) { # BRI if($chan_fqn =~ m(WCBRI/.*)) { # make sure to set termination resistors on hybrid cards $self->{TERMINATION} = 'term'; $self->{SOFTNTTE} = 'te';