From patchwork Wed Apr 25 06:52:11 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karsten Keil X-Patchwork-Id: 154813 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 D8AEEB6F13 for ; Wed, 25 Apr 2012 16:55:58 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751859Ab2DYGzy (ORCPT ); Wed, 25 Apr 2012 02:55:54 -0400 Received: from moutng.kundenserver.de ([212.227.17.9]:55080 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750908Ab2DYGzO (ORCPT ); Wed, 25 Apr 2012 02:55:14 -0400 Received: from mailone.linux-pingi.de (p54979DE3.dip.t-dialin.net [84.151.157.227]) by mrelayeu.kundenserver.de (node=mreu0) with ESMTP (Nemesis) id 0MP3gp-1SGaTY3xY7-006WhP; Wed, 25 Apr 2012 08:55:12 +0200 Received: from pingi6.linux-pingi.de (pingi6.linux-pingi.de [10.23.200.6]) by mailone.linux-pingi.de (Postfix) with ESMTP id C21C854F8; Wed, 25 Apr 2012 08:55:09 +0200 (CEST) Received: by pingi6.linux-pingi.de (Postfix, from userid 1000) id AB58D9FB8D; Wed, 25 Apr 2012 08:52:14 +0200 (CEST) From: Karsten Keil To: David Miller Cc: netdev@vger.kernel.org, Andreas Eversberg Subject: [PATCH 1/4] mISDN: Fixed false interruption of audio during bridging change. Date: Wed, 25 Apr 2012 08:52:11 +0200 Message-Id: <1335336734-25181-2-git-send-email-kkeil@linux-pingi.de> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1335336734-25181-1-git-send-email-kkeil@linux-pingi.de> References: <1335336734-25181-1-git-send-email-kkeil@linux-pingi.de> X-Provags-ID: V02:K0:s03ftc0uKWmZELQcMa1z2diQWxk2xWCHZZl3qcylGJJ 48BhZGBZLOxajrPH3tU/tJWSGARQeuQS99ywOJDKX+dijC4k0G XFFPyZKNar3Y1UQMMs3gK7FnOvjgIW1M/Tw1zjMaKxDmTJMYXb y7s0km+n/XMCuLu7XICsNLAgkgIEuHtPmbWgLVEnr4VXv1wPnc eup2CLPTQlW7Wqw2da3+1WnAxtoYlJ7KaUtthOCWSOCfbC6+zs GAdhTSPNxCqWIazRlp0fmnPcUolrGiX6xPs58rBUkLr6L5oXwc YkWAJ6nDCPulJZ27nY/3lEIOWcuyK2zp3cACliT4H9NS3dsJhv 0GjuC51tlA01RcNs7u6DvxHNB2I2uQfxqkSXYX+2TfyRhoYo// OjFvjNtky1kHqWQaU+qamPWP2C9+IZO7dk= 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] |=