summaryrefslogtreecommitdiff
path: root/xpp/card_fxo.c
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-09-06 05:08:32 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-09-06 05:08:32 +0000
commit9f615ebcb22c35e982c327d00d6d685d8c056cd5 (patch)
tree5234c1994aeec2245f6cae327c32e8457782fa6d /xpp/card_fxo.c
parentefb34c4af7ad5a96c2733aee1e8ee33fbe4cdd69 (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.c55
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 -------------------------------------------*/