summaryrefslogtreecommitdiff
path: root/xpp/card_fxo.c
diff options
context:
space:
mode:
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);
}