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
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user