From patchwork Thu Aug 10 15:42:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 109818 Delivered-To: patch@linaro.org Received: by 10.182.109.195 with SMTP id hu3csp2559969obb; Thu, 10 Aug 2017 08:43:07 -0700 (PDT) X-Received: by 10.223.147.197 with SMTP id 63mr8755962wrp.90.1502379787417; Thu, 10 Aug 2017 08:43:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502379787; cv=none; d=google.com; s=arc-20160816; b=XJjAWuIRfBynu4hQrQtnfxMdwAoQxTc0Bo5cMtzk2wuMzrIjbaVp/kpkrzSG4qHNx7 RPo3AGO4Zfqw2y8xnkyOOQpFg1dCk9p5ScBqwGzfD1PoWoNgiRYIlWJjjEVJxMwGbapM sk7VUm9FBQnjub1cnCx8/iCYs8x7uOcMPYCuGyxr7nRy0O8gjwKWcnkZrv7QSrgXuz7a HiC54dhwAZBs9lbL+xEBtisxlhAghyYY2JxIu/VZ8uwWUH5SK6LeBF0mPNOYPkcFFTko CN7Hix0LKpOqt/8chPo6QOtHyuhX6EpTbN2uoLqw45YRQGH9moZ2G6SgicL5GZhKzIRV Q1hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:date:message-id:in-reply-to:to:from :delivered-to:arc-authentication-results; bh=0VrEGgvN7u/Wumz8jCXkCxQPFFbT6pJOh9MUM6B5q8Q=; b=UfBuBmI9C1s06VzHONVbCvbaaokoTaNGELLQWge49SmoB/epO1KnxUBO2m4Yg6EWIB m8pHX0gAswxy7A/mTyEN6Y8VdDR7i7QmjuDDThDdxW/RnADjCd+Ennhe85TUwmw2KJ9t Vf+WEh3yGqnZt+xU9iYrrvExe+NN4icpxHW6iCrsSklJ0KlQOOI7EWZVQZqGO/alvws6 NOJAx5fkKiLRlreOROmc5RPfmtmSTrRfBANGujKlA589TFWsVrU89WlpH14tjj/cOdoa FxpUHCbZh8uLn6RsbMM/0mFprPRBFf3BT9ZxAJI3kKGb7prr/nry21Q0TJ7adco/BrxS V7kw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) smtp.mailfrom=alsa-devel-bounces@alsa-project.org Return-Path: Received: from alsa0.perex.cz (alsa0.perex.cz. [77.48.224.243]) by mx.google.com with ESMTP id y69si5882250wrb.262.2017.08.10.08.43.07; Thu, 10 Aug 2017 08:43:07 -0700 (PDT) Received-SPF: pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) client-ip=77.48.224.243; Authentication-Results: mx.google.com; spf=pass (google.com: domain of alsa-devel-bounces@alsa-project.org designates 77.48.224.243 as permitted sender) smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 57F1B2675BC; Thu, 10 Aug 2017 17:42:44 +0200 (CEST) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 6CB3D2675E7; Thu, 10 Aug 2017 17:42:43 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail1.perex.cz X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD, SPF_PASS, URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from mezzanine.sirena.org.uk (mezzanine.sirena.org.uk [106.187.55.193]) by alsa0.perex.cz (Postfix) with ESMTP id 262242675BF for ; Thu, 10 Aug 2017 17:42:28 +0200 (CEST) Received: from host86-142-17-160.range86-142.btcentralplus.com ([86.142.17.160] helo=finisterre) by mezzanine.sirena.org.uk with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1dfpbL-0006aF-Cl; Thu, 10 Aug 2017 15:42:25 +0000 Received: from broonie by finisterre with local (Exim 4.89) (envelope-from ) id 1dfpbH-0001js-DV; Thu, 10 Aug 2017 16:42:19 +0100 From: Mark Brown To: Kuninori Morimoto In-Reply-To: <873790z3y6.wl%kuninori.morimoto.gx@renesas.com> Message-Id: Date: Thu, 10 Aug 2017 16:42:19 +0100 X-SA-Exim-Connect-IP: 86.142.17.160 X-SA-Exim-Mail-From: broonie@sirena.org.uk X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: No (on mezzanine.sirena.org.uk); Unknown failure Cc: linux-renesas-soc@vger.kernel.org, alsa-devel@alsa-project.org, Mark Brown , Simon Subject: [alsa-devel] Applied "ASoC: rsnd: call request_irq/free_irq once in MIX case" to the asoc tree X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org The patch ASoC: rsnd: call request_irq/free_irq once in MIX case has been applied to the asoc tree at git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark >From b6e58fcacb3edc6245ecf700207ba675cba18018 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Thu, 10 Aug 2017 00:07:38 +0000 Subject: [PATCH] ASoC: rsnd: call request_irq/free_irq once in MIX case Each module's dai callback function availability is controlled by mod->status. For example "always called", "call once". In .probe/.remove case, it needs to be called always, because .probe will call xxx_attach() function on .probe, especially if platform is using MIXer. For example, below case, MIX0/DVC0/SSI0 needs to be called twice. playback = <&src0 &ctu02 &mix0 &dvc0 &ssi0>; playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>; But in this case, SSI0 will call request_irq() twice. This patch add new RSND_SSI_PROBED flag and control it Signed-off-by: Kuninori Morimoto Signed-off-by: Mark Brown --- sound/soc/sh/rcar/ssi.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) -- 2.13.2 _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index ca9355b86bd9..8bb47144660b 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@ -90,6 +90,7 @@ struct rsnd_ssi { #define RSND_SSI_NO_BUSIF (1 << 1) /* SSI+DMA without BUSIF */ #define RSND_SSI_HDMI0 (1 << 2) /* for HDMI0 */ #define RSND_SSI_HDMI1 (1 << 3) /* for HDMI1 */ +#define RSND_SSI_PROBED (1 << 4) #define for_each_rsnd_ssi(pos, priv, i) \ for (i = 0; \ @@ -103,6 +104,7 @@ struct rsnd_ssi { #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod) #define rsnd_ssi_flags_has(p, f) ((p)->flags & f) #define rsnd_ssi_flags_set(p, f) ((p)->flags |= f) +#define rsnd_ssi_flags_del(p, f) ((p)->flags = ((p)->flags & ~f)) #define rsnd_ssi_is_parent(ssi, io) ((ssi) == rsnd_io_to_mod_ssip(io)) #define rsnd_ssi_is_multi_slave(mod, io) \ (rsnd_ssi_multi_slaves(io) & (1 << rsnd_mod_id(mod))) @@ -784,11 +786,22 @@ static int rsnd_ssi_common_probe(struct rsnd_mod *mod, /* * SSI might be called again as PIO fallback * It is easy to manual handling for IRQ request/free + * + * OTOH, this function might be called many times if platform is + * using MIX. It needs xxx_attach() many times on xxx_probe(). + * Because of it, we can't control .probe/.remove calling count by + * mod->status. + * But it don't need to call request_irq() many times. + * Let's control it by RSND_SSI_PROBED flag. */ - ret = request_irq(ssi->irq, - rsnd_ssi_interrupt, - IRQF_SHARED, - dev_name(dev), mod); + if (!rsnd_ssi_flags_has(ssi, RSND_SSI_PROBED)) { + ret = request_irq(ssi->irq, + rsnd_ssi_interrupt, + IRQF_SHARED, + dev_name(dev), mod); + + rsnd_ssi_flags_set(ssi, RSND_SSI_PROBED); + } return ret; } @@ -805,7 +818,11 @@ static int rsnd_ssi_common_remove(struct rsnd_mod *mod, return 0; /* PIO will request IRQ again */ - free_irq(ssi->irq, mod); + if (rsnd_ssi_flags_has(ssi, RSND_SSI_PROBED)) { + free_irq(ssi->irq, mod); + + rsnd_ssi_flags_del(ssi, RSND_SSI_PROBED); + } return 0; }