aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hardware/mISDN/hfcmulti.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/hardware/mISDN/hfcmulti.c')
-rw-r--r--drivers/isdn/hardware/mISDN/hfcmulti.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c
index 0b28141e43bf..ca153de6954e 100644
--- a/drivers/isdn/hardware/mISDN/hfcmulti.c
+++ b/drivers/isdn/hardware/mISDN/hfcmulti.c
@@ -4013,11 +4013,41 @@ open_bchannel(struct hfc_multi *hc, struct dchannel *dch,
4013static int 4013static int
4014channel_dctrl(struct dchannel *dch, struct mISDN_ctrl_req *cq) 4014channel_dctrl(struct dchannel *dch, struct mISDN_ctrl_req *cq)
4015{ 4015{
4016 struct hfc_multi *hc = dch->hw;
4016 int ret = 0; 4017 int ret = 0;
4018 int wd_mode, wd_cnt;
4017 4019
4018 switch (cq->op) { 4020 switch (cq->op) {
4019 case MISDN_CTRL_GETOP: 4021 case MISDN_CTRL_GETOP:
4020 cq->op = 0; 4022 cq->op = MISDN_CTRL_HFC_OP;
4023 break;
4024 case MISDN_CTRL_HFC_WD_INIT: /* init the watchdog */
4025 wd_cnt = cq->p1 & 0xf;
4026 wd_mode = !!(cq->p1 >> 4);
4027 if (debug & DEBUG_HFCMULTI_MSG)
4028 printk(KERN_DEBUG
4029 "%s: MISDN_CTRL_HFC_WD_INIT mode %s counter 0x%x\n",
4030 __func__, wd_mode ? "AUTO" : "MANUAL", wd_cnt);
4031 /* set the watchdog timer */
4032 HFC_outb(hc, R_TI_WD, poll_timer | (wd_cnt << 4));
4033 hc->hw.r_bert_wd_md = (wd_mode ? V_AUTO_WD_RES : 0);
4034 if (hc->ctype == HFC_TYPE_XHFC)
4035 hc->hw.r_bert_wd_md |= 0x40 /* V_WD_EN */;
4036 /* init the watchdog register and reset the counter */
4037 HFC_outb(hc, R_BERT_WD_MD, hc->hw.r_bert_wd_md | V_WD_RES);
4038 if (test_bit(HFC_CHIP_PLXSD, &hc->chip)) {
4039 /* enable the watchdog output for Speech-Design */
4040 HFC_outb(hc, R_GPIO_SEL, V_GPIO_SEL7);
4041 HFC_outb(hc, R_GPIO_EN1, V_GPIO_EN15);
4042 HFC_outb(hc, R_GPIO_OUT1, 0);
4043 HFC_outb(hc, R_GPIO_OUT1, V_GPIO_OUT15);
4044 }
4045 break;
4046 case MISDN_CTRL_HFC_WD_RESET: /* reset the watchdog counter */
4047 if (debug & DEBUG_HFCMULTI_MSG)
4048 printk(KERN_DEBUG "%s: MISDN_CTRL_HFC_WD_RESET\n",
4049 __func__);
4050 HFC_outb(hc, R_BERT_WD_MD, hc->hw.r_bert_wd_md | V_WD_RES);
4021 break; 4051 break;
4022 default: 4052 default:
4023 printk(KERN_WARNING "%s: unknown Op %x\n", 4053 printk(KERN_WARNING "%s: unknown Op %x\n",