From patchwork Sat Mar 17 09:34:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karsten Keil X-Patchwork-Id: 154509 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B82E7B6EEB for ; Tue, 24 Apr 2012 03:10:05 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754676Ab2DWRJ6 (ORCPT ); Mon, 23 Apr 2012 13:09:58 -0400 Received: from moutng.kundenserver.de ([212.227.126.171]:52532 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754177Ab2DWRIW (ORCPT ); Mon, 23 Apr 2012 13:08:22 -0400 Received: from mailone.linux-pingi.de (p5497CD69.dip.t-dialin.net [84.151.205.105]) by mrelayeu.kundenserver.de (node=mreu3) with ESMTP (Nemesis) id 0MTJVi-1SmJd62CYA-00SA0e; Mon, 23 Apr 2012 19:08:18 +0200 Received: from pingi6.linux-pingi.de (pingi6.linux-pingi.de [10.23.200.6]) by mailone.linux-pingi.de (Postfix) with ESMTP id 3759D4FD0; Mon, 23 Apr 2012 19:08:16 +0200 (CEST) Received: by pingi6.linux-pingi.de (Postfix, from userid 1000) id 670339FB8D; Mon, 23 Apr 2012 19:05:49 +0200 (CEST) Date: Sat, 17 Mar 2012 10:34:47 +0100 Subject: [PATCH 03/28] mISDN: Fixed false interruption of audio during bridging change. From: Karsten Keil To: David Miller Cc: netdev@vger.kernel.org, isdn4linux@listserv.isdn4linux.de Message-Id: <20120423170549.670339FB8D@pingi6.linux-pingi.de> X-Provags-ID: V02:K0:4+lR7WdI4xfV+phKm2P6ZjSF4M+w7w62OWnH51AL9yg A9qxLwPHrf2kkoT/na5KVO599Gry2DOG+S8n+acGGJc1BvL2do 6Xf3A0LE0fujx1gdwI6s0ZQc3WKKHNqnwdJN+gPJDQEDAAKpiJ iYmJca16cLovhzYfULUomdliKwIdhAYvuypShOJm4EqOBoz2BZ Bh2QzSsPNXfSXnAGcCTMzsmKokY1SMJ8suhP6ASoqQMENQkoJ8 gt5fzyyOrEaC8uvRfZM9W++JdpAdx9kd3DlPXozQNe5og2yIEM TcKlvsVp227r5G/egdznxvnqW667IthBBOqq/V5PLb8RrZnTrm jbV/6Pq9vzNYKgyCBncwpQAPSjAJnfE/xV7/XHM/Jf8tW0EMSE qxz+FFvLDKQYPydhMAiQ8KaHiqpXDJRrxQ= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Andreas Eversberg 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 Signed-off-by: Karsten Keil --- drivers/isdn/hardware/mISDN/hfcmulti.c | 24 ++++++++++++++++-------- 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index 0332231..c4e7fda 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c @@ -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] |=