summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2011-11-30 10:20:38 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2011-11-30 10:20:38 +0000
commit319ca7f7d616dad55fbeac13e73bbddf77bb6542 (patch)
tree548406ddbab1d758a9f9ea862af0c19baf1b903c
parent866e1f5b4faf57b1d3767d4dca95f96ed0fe3927 (diff)
xpp: Adaptations for E-Main-3
* An xbus transport now have a "model_string" member * The xpp_usb driver fills this with "usb:<idVendor>/<idProduct>/<bcdDevice>" * It is passed via environment to the "init_card_<type>_<protocol>" scripts * The FXS script uses this to condition two registers according to the power supply model. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10351 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r--drivers/dahdi/xpp/card_global.c4
-rwxr-xr-xdrivers/dahdi/xpp/init_card_1_3015
-rw-r--r--drivers/dahdi/xpp/xbus-core.h6
-rw-r--r--drivers/dahdi/xpp/xpp_usb.c6
4 files changed, 24 insertions, 7 deletions
diff --git a/drivers/dahdi/xpp/card_global.c b/drivers/dahdi/xpp/card_global.c
index 551192c..cc9ac1d 100644
--- a/drivers/dahdi/xpp/card_global.c
+++ b/drivers/dahdi/xpp/card_global.c
@@ -642,7 +642,6 @@ static void global_packet_dump(const char *msg, xpacket_t *pack)
DBG(GENERAL, "%s\n", msg);
}
-#define MAX_ENV_STR 40
#define MAX_PATH_STR 128
int run_initialize_registers(xpd_t *xpd)
@@ -651,6 +650,7 @@ int run_initialize_registers(xpd_t *xpd)
xbus_t *xbus;
char busstr[MAX_ENV_STR];
char busnumstr[MAX_ENV_STR];
+ char modelstr[MAX_ENV_STR];
char unitstr[MAX_ENV_STR];
char subunitsstr[MAX_ENV_STR];
char typestr[MAX_ENV_STR];
@@ -668,6 +668,7 @@ int run_initialize_registers(xpd_t *xpd)
char *envp[] = {
busstr,
busnumstr,
+ modelstr,
unitstr,
subunitsstr,
typestr,
@@ -703,6 +704,7 @@ int run_initialize_registers(xpd_t *xpd)
}
snprintf(busstr, MAX_ENV_STR, "XBUS_NAME=%s", xbus->busname);
snprintf(busnumstr, MAX_ENV_STR, "XBUS_NUMBER=%d", xbus->num);
+ snprintf(modelstr, MAX_ENV_STR, "XBUS_MODEL_STRING=%s", xbus->transport.model_string);
snprintf(unitstr, MAX_ENV_STR, "UNIT_NUMBER=%d", xpd->addr.unit);
snprintf(typestr, MAX_ENV_STR, "UNIT_TYPE=%d", xpd->type);
snprintf(subunitsstr, MAX_ENV_STR, "UNIT_SUBUNITS=%d", xpd->subunits);
diff --git a/drivers/dahdi/xpp/init_card_1_30 b/drivers/dahdi/xpp/init_card_1_30
index 6495f34..0813ead 100755
--- a/drivers/dahdi/xpp/init_card_1_30
+++ b/drivers/dahdi/xpp/init_card_1_30
@@ -51,6 +51,7 @@ BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
use XppConfig $init_dir;
my $unit_id;
my %opts;
+my $vbat_48 = 0;
getopts('o:', \%opts);
@@ -78,6 +79,7 @@ if (-t STDERR) {
foreach my $k (qw(
XBUS_NAME
XBUS_NUMBER
+ XBUS_MODEL_STRING
UNIT_NUMBER
UNIT_TYPE
UNIT_SUBUNITS
@@ -90,6 +92,10 @@ if (-t STDERR) {
die;
}
}
+ logit "XBUS_MODEL_STRING='$ENV{XBUS_MODEL_STRING}'";
+ if ($ENV{XBUS_MODEL_STRING} =~ m{.*/.*/201}) {
+ $vbat_48 = 1;
+ }
$chipregs = sprintf "/sys/bus/xpds/devices/%02d:%1d:0/chipregs",
$ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER};
if(! -f $chipregs) {
@@ -286,11 +292,15 @@ sub init_indirect_registers() {
}
sub init_early_direct_regs() {
+ my $lbv = ($vbat_48) ? "20" : "10";
+ my $vcm = ($vbat_48) ? "02" : "03";
+
return write_to_slic_file("#
* WD 08 00 # Audio Path Loopback Control
* WD 6C 01
* WD 4A 3F # High Battery Voltage
-* WD 4B 10 # Low Battery Voltage
+* WD 4B $lbv # Low Battery Voltage
+* WD 49 $vcm # Common Mode Voltage (VCM)
* WD 40 00 # Line Feed Control
#")
}
@@ -578,9 +588,6 @@ __DATA__
# On-Hook Line Voltage (VOC)
* WD 48 20
-# Common Mode Voltage (VCM)
-* WD 49 03
-
* WS 1E 23 00 80
* WS 1E 24 20 03
* WS 1E 25 8C 00
diff --git a/drivers/dahdi/xpp/xbus-core.h b/drivers/dahdi/xpp/xbus-core.h
index 2149a38..e86798e 100644
--- a/drivers/dahdi/xpp/xbus-core.h
+++ b/drivers/dahdi/xpp/xbus-core.h
@@ -29,8 +29,9 @@
#include "xframe_queue.h"
#include "xbus-pcm.h"
-#define MAX_BUSES 32
-#define XFRAME_DATASIZE 512
+#define MAX_BUSES 32
+#define XFRAME_DATASIZE 512
+#define MAX_ENV_STR 40
/* forward declarations */
struct xbus_workqueue;
@@ -108,6 +109,7 @@ struct xbus_transport {
atomic_t transport_refcount;
wait_queue_head_t transport_unused;
spinlock_t lock;
+ char model_string[MAX_ENV_STR];
};
#define MAX_SEND_SIZE(xbus) ((xbus)->transport.max_send_size)
diff --git a/drivers/dahdi/xpp/xpp_usb.c b/drivers/dahdi/xpp/xpp_usb.c
index 119abcb..7727cc5 100644
--- a/drivers/dahdi/xpp/xpp_usb.c
+++ b/drivers/dahdi/xpp/xpp_usb.c
@@ -737,6 +737,12 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
retval = -ENOMEM;
goto probe_failed;
}
+ snprintf(xbus->transport.model_string,
+ ARRAY_SIZE(xbus->transport.model_string),
+ "usb:%04x/%04x/%x",
+ udev->descriptor.idVendor,
+ udev->descriptor.idProduct,
+ udev->descriptor.bcdDevice);
spin_lock_irqsave(&xusb_lock, flags);
for(i = 0; i < MAX_BUSES; i++) {
if(xusb_array[i] == NULL)