]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
mISDN: Fixed false interruption of audio during bridging change.
authorAndreas Eversberg <jolly@eversberg.eu>
Tue, 24 Apr 2012 20:52:11 +0000 (20:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Apr 2012 09:21:03 +0000 (05:21 -0400)
Transmitted audio data was interrupted if a bridge was enabled or disabled.
Now transmission seamlessly continues during that action.
Fix in hfcmulti.ko

Signed-off-by: Andreas Eversberg <jolly@eversberg.eu>
Signed-off-by: Karsten Keil <keil@b1-systems.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/hardware/mISDN/hfcmulti.c

index 033223180b555911510c5893cc553dfff48e5c3c..c4e7fda99435811ea1e09d1dcfa0e370357a1247 100644 (file)
@@ -3018,8 +3018,10 @@ mode_hfcmulti(struct hfc_multi *hc, int ch, int protocol, int slot_tx,
                        HFC_outb(hc, A_CON_HDLC, 0x20 | V_HDLC_TRP | V_IFF);
                        HFC_outb(hc, A_SUBCH_CFG, 0);
                        HFC_outb(hc, A_IRQ_MSK, 0);
-                       HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
-                       HFC_wait(hc);
+                       if (hc->chan[ch].protocol != protocol) {
+                               HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
+                               HFC_wait(hc);
+                       }
                        HFC_outb(hc, R_SLOT, ((((ch / 4) * 8) +
                                               ((ch % 4) * 4) + 1) << 1) | 1);
                        HFC_outb(hc, A_SL_CFG, 0x80 | 0x20 | (ch << 1) | 1);
@@ -3039,8 +3041,10 @@ mode_hfcmulti(struct hfc_multi *hc, int ch, int protocol, int slot_tx,
                        HFC_outb(hc, A_CON_HDLC, 0x20 | V_HDLC_TRP | V_IFF);
                        HFC_outb(hc, A_SUBCH_CFG, 0);
                        HFC_outb(hc, A_IRQ_MSK, 0);
-                       HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
-                       HFC_wait(hc);
+                       if (hc->chan[ch].protocol != protocol) {
+                               HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
+                               HFC_wait(hc);
+                       }
                        /* tx silence */
                        HFC_outb_nodebug(hc, A_FIFO_DATA0_NOINC, hc->silence);
                        HFC_outb(hc, R_SLOT, (((ch / 4) * 8) +
@@ -3059,8 +3063,10 @@ mode_hfcmulti(struct hfc_multi *hc, int ch, int protocol, int slot_tx,
                                         V_HDLC_TRP | V_IFF);
                        HFC_outb(hc, A_SUBCH_CFG, 0);
                        HFC_outb(hc, A_IRQ_MSK, 0);
-                       HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
-                       HFC_wait(hc);
+                       if (hc->chan[ch].protocol != protocol) {
+                               HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
+                               HFC_wait(hc);
+                       }
                        /* tx silence */
                        HFC_outb_nodebug(hc, A_FIFO_DATA0_NOINC, hc->silence);
                        /* enable RX fifo */
@@ -3075,8 +3081,10 @@ mode_hfcmulti(struct hfc_multi *hc, int ch, int protocol, int slot_tx,
                                         V_HDLC_TRP);
                        HFC_outb(hc, A_SUBCH_CFG, 0);
                        HFC_outb(hc, A_IRQ_MSK, 0);
-                       HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
-                       HFC_wait(hc);
+                       if (hc->chan[ch].protocol != protocol) {
+                               HFC_outb(hc, R_INC_RES_FIFO, V_RES_F);
+                               HFC_wait(hc);
+                       }
                }
                if (hc->ctype != HFC_TYPE_E1) {
                        hc->hw.a_st_ctrl0[hc->chan[ch].port] |=