summaryrefslogtreecommitdiff
path: root/xpp/card_fxo.c
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-05-22 16:41:06 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-05-22 16:41:06 +0000
commit117fcbf3e26236b41ec3fb932e4f73b4b34f289e (patch)
treebe3e5f1e3a4e2bd70cd429f957ad1a9c30b836a7 /xpp/card_fxo.c
parentf3ba7804d8358e041cf38eb84ebce9bdbc8757cb (diff)
* Now possible to load FPGA (second stage) firmware with USB1
* fixed locking of xpd-lock * slightly newer FPGA firmware: slight improvements. git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1078 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp/card_fxo.c')
-rw-r--r--xpp/card_fxo.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c
index 024e112..15e71e1 100644
--- a/xpp/card_fxo.c
+++ b/xpp/card_fxo.c
@@ -101,7 +101,6 @@ struct FXO_priv_data {
*/
static int do_led(xpd_t *xpd, lineno_t pos, byte which, bool on)
{
- unsigned long flags;
int ret = 0;
xpacket_t *pack;
slic_cmd_t *sc;
@@ -111,7 +110,6 @@ static int do_led(xpd_t *xpd, lineno_t pos, byte which, bool on)
xbus_t *xbus;
BUG_ON(!xpd);
- spin_lock_irqsave(&xpd->lock, flags);
xbus = xpd->xbus;
priv = xpd->priv;
which = which % NUM_LEDS;
@@ -138,7 +136,6 @@ static int do_led(xpd_t *xpd, lineno_t pos, byte which, bool on)
pack->datalen = len;
packet_send(xbus, pack);
out:
- spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
}
@@ -293,6 +290,7 @@ static int FXO_card_zaptel_registration(xpd_t *xpd, bool on)
{
xbus_t *xbus;
struct FXO_priv_data *priv;
+ unsigned long flags;
int i;
BUG_ON(!xpd);
@@ -303,18 +301,26 @@ static int FXO_card_zaptel_registration(xpd_t *xpd, bool on)
DBG("%s/%s (%d)\n", xbus->busname, xpd->xpdname, on);
if(on) {
for_each_line(xpd, i) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_ON);
+ spin_unlock_irqrestore(&xpd->lock, flags);
mdelay(50);
}
for_each_line(xpd, i) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_OFF);
+ spin_unlock_irqrestore(&xpd->lock, flags);
mdelay(50);
}
} else {
for_each_line(xpd, i) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_ON);
+ spin_unlock_irqrestore(&xpd->lock, flags);
mdelay(100);
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_OFF);
+ spin_unlock_irqrestore(&xpd->lock, flags);
}
}
return 0;
@@ -386,6 +392,7 @@ static int FXO_card_tick(xbus_t *xbus, xpd_t *xpd)
/* 0x0F */ HOSTCMD(FXO, CHAN_ENABLE, xpp_line_t lines, bool on)
{
+ unsigned long flags;
int ret = 0;
int i;
@@ -398,10 +405,13 @@ static int FXO_card_tick(xbus_t *xbus, xpd_t *xpd)
DBG("Channel Activation: 0x%4X %s\n", lines, (on) ? "on" : "off");
if(on) {
for_each_enabled_line(xpd, i) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_ON);
+ spin_unlock_irqrestore(&xpd->lock, flags);
mdelay(20);
}
for_each_enabled_line(xpd, i) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, i, LED_GREEN, LED_OFF);
mdelay(20);
}