diff options
author | markster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2005-05-11 23:43:11 +0000 |
---|---|---|
committer | markster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2005-05-11 23:43:11 +0000 |
commit | 3957d619bb756563a03b3d15b9bffec5239dac19 (patch) | |
tree | a9fbeabe0fa07864461f2d753de4c9dee84218a2 /wctdm.c | |
parent | 0afdce07bf03c4ef19cd6754a7e6d8e2785e5e03 (diff) |
Add support for polarity reversal
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@641 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'wctdm.c')
-rwxr-xr-x | wctdm.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -1657,6 +1657,22 @@ static int wctdm_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long dat wctdm_setreg(wc, chan->chanpos - 1, 64, wc->mod.fxs.lasttxhook[chan->chanpos - 1]); } break; + case ZT_SETPOLARITY: + if (get_user(x, (int *)data)) + return -EFAULT; + if (wc->modtype[chan->chanpos - 1] != MOD_TYPE_FXS) + return -EINVAL; + /* Can't change polarity while ringing or when open */ + if ((wc->mod.fxs.lasttxhook[chan->chanpos -1 ] == 0x04) || + (wc->mod.fxs.lasttxhook[chan->chanpos -1 ] == 0x00)) + return -EINVAL; + + if (x) + wc->mod.fxs.lasttxhook[chan->chanpos - 1] |= 0x04; + else + wc->mod.fxs.lasttxhook[chan->chanpos - 1] &= ~0x04; + wctdm_setreg(wc, chan->chanpos - 1, 64, wc->mod.fxs.lasttxhook[chan->chanpos - 1]); + break; case WCTDM_GET_STATS: if (wc->modtype[chan->chanpos - 1] == MOD_TYPE_FXS) { stats.tipvolt = wctdm_getreg(wc, chan->chanpos - 1, 80) * -376; |