summaryrefslogtreecommitdiff
path: root/xpp/card_fxs.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_fxs.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_fxs.c')
-rw-r--r--xpp/card_fxs.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/xpp/card_fxs.c b/xpp/card_fxs.c
index e4480a3..d2413f3 100644
--- a/xpp/card_fxs.c
+++ b/xpp/card_fxs.c
@@ -169,7 +169,6 @@ static const int led_register_vals[] = { BIT(4), BIT(1), BIT(0) };
*/
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;
@@ -180,7 +179,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;
@@ -211,7 +209,6 @@ static int do_led(xpd_t *xpd, lineno_t pos, byte which, bool on)
packet_send(xbus, pack);
out:
- spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
}
@@ -350,6 +347,7 @@ static int FXS_card_zaptel_registration(xpd_t *xpd, bool on)
{
xbus_t *xbus;
struct FXS_priv_data *priv;
+ unsigned long flags;
int i;
BUG_ON(!xpd);
@@ -358,7 +356,9 @@ static int FXS_card_zaptel_registration(xpd_t *xpd, bool on)
BUG_ON(!xbus);
DBG("%s/%s: %s\n", xbus->busname, xpd->xpdname, (on)?"on":"off");
if(on) {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, ALL_LINES, LED_GREEN, LED_OFF);
+ spin_unlock_irqrestore(&xpd->lock, flags);
for_each_enabled_line(xpd, i) {
DO_LED(priv,i,LED_GREEN,LED_ON);
mdelay(50);
@@ -368,7 +368,9 @@ static int FXS_card_zaptel_registration(xpd_t *xpd, bool on)
mdelay(50);
}
} else {
+ spin_lock_irqsave(&xpd->lock, flags);
do_led(xpd, ALL_LINES, LED_RED, LED_OFF);
+ spin_unlock_irqrestore(&xpd->lock, flags);
for_each_enabled_line(xpd, i) {
DO_LED(priv,i,LED_RED,LED_ON);
mdelay(50);
@@ -492,6 +494,7 @@ static /* 0x0F */ HOSTCMD(FXS, CHAN_ENABLE, xpp_line_t lines, bool on)
slic_cmd_t *sc;
int len;
enum fxs_state value = (on) ? 0x01 : 0x00;
+ unsigned long flags;
int i;
BUG_ON(!xbus);
@@ -509,11 +512,13 @@ static /* 0x0F */ HOSTCMD(FXS, CHAN_ENABLE, xpp_line_t lines, bool on)
xpd->lasttxhook[i] = value;
packet_send(xbus, pack);
+ spin_lock_irqsave(&xpd->lock, flags);
if(on) {
do_led(xpd, ALL_LINES, LED_GREEN, LED_ON);
} else {
do_led(xpd, ALL_LINES, LED_GREEN, LED_OFF);
}
+ spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
}