diff options
author | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-09-06 05:08:32 +0000 |
---|---|---|
committer | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-09-06 05:08:32 +0000 |
commit | 9f615ebcb22c35e982c327d00d6d685d8c056cd5 (patch) | |
tree | 5234c1994aeec2245f6cae327c32e8457782fa6d /xpp/card_fxo.c | |
parent | efb34c4af7ad5a96c2733aee1e8ee33fbe4cdd69 (diff) |
Begin merging a small set of clean-ups:
* __do_sethook() was gone and merged into do_sethook().
* Use DAA_RING_REGISTER constant instead of a number.
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1408 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp/card_fxo.c')
-rw-r--r-- | xpp/card_fxo.c | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c index f775217..7b8180f 100644 --- a/xpp/card_fxo.c +++ b/xpp/card_fxo.c @@ -76,8 +76,8 @@ static int process_slic_cmdline(xpd_t *xpd, char *cmdline); #define POLL_RING_INTERVAL 2 #define RING_THRESHOLD 3 #define NORING_THRESHOLD 10 -#define DAA_RING_REGISTER 0x05 #endif +#define DAA_RING_REGISTER 0x05 struct FXO_priv_data { struct proc_dir_entry *xpd_slic; @@ -214,50 +214,38 @@ static void mark_ring(xpd_t *xpd, lineno_t pos, bool on) } } -static int __do_sethook(xbus_t *xbus, xpd_t *xpd, int pos, bool to_offhook) -{ - int ret = 0; - xpacket_t *pack; - slic_cmd_t *sc; - int len; - bool value; - struct FXO_priv_data *priv; - - BUG_ON(!xbus); - BUG_ON(!xpd); - priv = (struct FXO_priv_data*)xpd->priv; - value = (to_offhook) ? 0x09 : 0x08; - // value |= BIT(3); /* Bit 3 is for CID */ - DBG("%s/%s/%d: SETHOOK: value=0x%02X %s\n", xbus->busname, xpd->xpdname, pos, value, (to_offhook)?"OFFHOOK":"ONHOOK"); - MARK_LED(xpd, pos, LED_GREEN, (to_offhook)?LED_ON:LED_OFF); - XPACKET_NEW(pack, xbus, FXO, DAA_WRITE, xpd->id); - sc = &RPACKET_FIELD(pack, FXO, DAA_WRITE, slic_cmd); - len = slic_cmd_direct_write(sc, BIT(pos), 0x05, value); - pack->datalen = len; - packet_send(xbus, pack); - if(!to_offhook) - mark_ring(xpd, pos, 0); // No more rings -#ifdef SOFT_RING - priv->ring_sig[pos] = 0; -#endif - return ret; -} - -static void do_sethook(xpd_t *xpd, int pos, bool to_offhook) +static int do_sethook(xpd_t *xpd, int pos, bool to_offhook) { unsigned long flags; + xbus_t *xbus; struct FXO_priv_data *priv; + int ret = 0; + bool value; + xpacket_t *pack; + slic_cmd_t *sc; + int len; BUG_ON(!xpd); BUG_ON(xpd->direction == TO_PHONE); // We can SETHOOK state only on PSTN + xbus = xpd->xbus; priv = xpd->priv; BUG_ON(!priv); if(!IS_SET(priv->battery, pos)) { - NOTICE("%s/%s/%d: WARNING: called while battery is off\n", xpd->xbus->busname, xpd->xpdname, pos); + NOTICE("%s/%s/%d: WARNING: called while battery is off\n", xbus->busname, xpd->xpdname, pos); } spin_lock_irqsave(&xpd->lock, flags); mark_ring(xpd, pos, 0); // No more rings - __do_sethook(xpd->xbus, xpd, pos, to_offhook); + value = (to_offhook) ? 0x09 : 0x08; /* Bit 3 is for CID */ + DBG("%s/%s/%d: SETHOOK: value=0x%02X %s\n", xbus->busname, xpd->xpdname, pos, value, (to_offhook)?"OFFHOOK":"ONHOOK"); + MARK_LED(xpd, pos, LED_GREEN, (to_offhook)?LED_ON:LED_OFF); + XPACKET_NEW(pack, xbus, FXO, DAA_WRITE, xpd->id); + sc = &RPACKET_FIELD(pack, FXO, DAA_WRITE, slic_cmd); + len = slic_cmd_direct_write(sc, BIT(pos), DAA_RING_REGISTER, value); + pack->datalen = len; + packet_send(xbus, pack); +#ifdef SOFT_RING + priv->ring_sig[pos] = 0; +#endif if(to_offhook) { BIT_SET(xpd->offhook, pos); } else { @@ -268,6 +256,7 @@ static void do_sethook(xpd_t *xpd, int pos, bool to_offhook) spin_unlock_irqrestore(&xpd->lock, flags); if(to_offhook) wake_up_interruptible(&xpd->txstateq[pos]); + return ret; } /*---------------- FXO: Methods -------------------------------------------*/ |