diff options
author | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-05-22 16:41:06 +0000 |
---|---|---|
committer | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-05-22 16:41:06 +0000 |
commit | 117fcbf3e26236b41ec3fb932e4f73b4b34f289e (patch) | |
tree | be3e5f1e3a4e2bd70cd429f957ad1a9c30b836a7 /xpp/card_fxo.c | |
parent | f3ba7804d8358e041cf38eb84ebce9bdbc8757cb (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.c | 16 |
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); } |