From 319ca7f7d616dad55fbeac13e73bbddf77bb6542 Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Wed, 30 Nov 2011 10:20:38 +0000 Subject: xpp: Adaptations for E-Main-3 * An xbus transport now have a "model_string" member * The xpp_usb driver fills this with "usb://" * It is passed via environment to the "init_card__" scripts * The FXS script uses this to condition two registers according to the power supply model. Signed-off-by: Tzafrir Cohen git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10351 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/xpp/card_global.c | 4 +++- drivers/dahdi/xpp/init_card_1_30 | 15 +++++++++++---- drivers/dahdi/xpp/xbus-core.h | 6 ++++-- drivers/dahdi/xpp/xpp_usb.c | 6 ++++++ 4 files changed, 24 insertions(+), 7 deletions(-) (limited to 'drivers/dahdi') 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) -- cgit v1.2.3