From patchwork Tue Jul 1 07:48:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benoit Cousson X-Patchwork-Id: 4457011 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 13FDB9F26C for ; Tue, 1 Jul 2014 07:52:56 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 14149203FB for ; Tue, 1 Jul 2014 07:52:55 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id CFD03201DE for ; Tue, 1 Jul 2014 07:52:53 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id DB72A2657BA; Tue, 1 Jul 2014 09:52:52 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,NO_DNS_FOR_FROM, UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 849CC265700; Tue, 1 Jul 2014 09:49:28 +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 10B62265721; Tue, 1 Jul 2014 09:49:27 +0200 (CEST) Received: from mail-we0-f169.google.com (mail-we0-f169.google.com [74.125.82.169]) by alsa0.perex.cz (Postfix) with ESMTP id 2DE562656FD for ; Tue, 1 Jul 2014 09:49:06 +0200 (CEST) Received: by mail-we0-f169.google.com with SMTP id t60so9281117wes.14 for ; Tue, 01 Jul 2014 00:49:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Y8fQBL1NvXFUzWG69ZO25gne5/hYyPngummVGKFuzRs=; b=T70IUBezg+Pz7GZO2SR3KuBVLVIUzx6PRO49phb0CjLspXIZzoUHBS+/y0PiK6UM38 pxq/mqkSI1Foy+yen20GneE/K/qxEoPPoOBdW7yjkCkuvE8GmCxgRiDSnDB5g5D70E0d /+CxOjxmvhSc/To5F7OBiEU82pByHjdbaPl5u/ArApQZ2yeol+7Ih70wJ+Fx456yixLn nQsIvXOnmkaRg4+Z3keRjQTOqtupW+4eaj+vj1hXqayJlJunHFwSshNL6yP4cQjPl4V7 IA6w+fCASBYaV6C6VHONn1DJtqJZ/AiJL53KRje/3owp9orJcMElq7V3pHznT38oGE9l IPMw== X-Gm-Message-State: ALoCoQmyP8vufJqbcdqQnHaEsqRZovJssORUec1iEyp+MMlTYIFZOLpXYXzuOuuTk06G8Tz+LZCN X-Received: by 10.194.119.34 with SMTP id kr2mr51093054wjb.34.1404200945767; Tue, 01 Jul 2014 00:49:05 -0700 (PDT) Received: from localhost.localdomain (lau06-1-82-228-246-9.fbx.proxad.net. [82.228.246.9]) by mx.google.com with ESMTPSA id bq7sm40353720wib.7.2014.07.01.00.49.04 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 01 Jul 2014 00:49:05 -0700 (PDT) From: Benoit Cousson To: broonie@kernel.org, lgirdwood@gmail.com, lars@metafoo.de Date: Tue, 1 Jul 2014 09:48:00 +0200 Message-Id: <1404200881-32253-8-git-send-email-bcousson@baylibre.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1404200881-32253-1-git-send-email-bcousson@baylibre.com> References: <1404200881-32253-1-git-send-email-bcousson@baylibre.com> Cc: misael.lopez@ti.com, alsa-devel@alsa-project.org, Benoit Cousson Subject: [alsa-devel] [PATCH v4 7/8] ASoC: pcm: Add soc_dai_hw_params helper 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 X-Virus-Scanned: ClamAV using ClamSMTP Add a function helper to factorize the hw_params code. Suggested by Lars-Peter Clausen Signed-off-by: Benoit Cousson --- include/sound/soc.h | 4 ++++ sound/soc/soc-dapm.c | 26 ++++++-------------------- sound/soc/soc-pcm.c | 41 ++++++++++++++++++++++------------------- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index f2142cf..98555f8 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -436,6 +436,10 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, int snd_soc_platform_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_platform *platform); +int soc_dai_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params, + struct snd_soc_dai *dai); + /* Jack reporting */ int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type, struct snd_soc_jack *jack); diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 5c63c3b..d8a24bb 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -3214,27 +3214,13 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: - if (source->driver->ops && source->driver->ops->hw_params) { - substream.stream = SNDRV_PCM_STREAM_CAPTURE; - ret = source->driver->ops->hw_params(&substream, - params, source); - if (ret != 0) { - dev_err(source->dev, - "ASoC: hw_params() failed: %d\n", ret); - goto out; - } - } + substream.stream = SNDRV_PCM_STREAM_CAPTURE; + if (soc_dai_hw_params(&substream, params, source) < 0) + goto out; - if (sink->driver->ops && sink->driver->ops->hw_params) { - substream.stream = SNDRV_PCM_STREAM_PLAYBACK; - ret = sink->driver->ops->hw_params(&substream, params, - sink); - if (ret != 0) { - dev_err(sink->dev, - "ASoC: hw_params() failed: %d\n", ret); - goto out; - } - } + substream.stream = SNDRV_PCM_STREAM_PLAYBACK; + if (soc_dai_hw_params(&substream, params, sink) < 0) + goto out; break; case SND_SOC_DAPM_POST_PMU: diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 981b99c..b48f2a8 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -780,6 +780,24 @@ static void soc_pcm_codec_params_fixup(struct snd_pcm_hw_params *params, interval->max = channels; } +int soc_dai_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params, + struct snd_soc_dai *dai) +{ + int ret; + + if (dai->driver->ops && dai->driver->ops->hw_params) { + ret = dai->driver->ops->hw_params(substream, params, dai); + if (ret < 0) { + dev_err(dai->dev, "ASoC: can't set %s hw params: %d\n", + dai->name, ret); + return ret; + } + } + + return 0; +} + /* * Called by ALSA when the hardware params are set by application. This * function can also be called multiple times and can allocate buffers @@ -823,17 +841,8 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream, soc_pcm_codec_params_fixup(&codec_params, codec_dai->rx_mask); - if (codec_dai->driver->ops && - codec_dai->driver->ops->hw_params) { - ret = codec_dai->driver->ops->hw_params(substream, - &codec_params, codec_dai); - if (ret < 0) { - dev_err(codec_dai->dev, - "ASoC: can't set %s hw params: %d\n", - codec_dai->name, ret); - goto codec_err; - } - } + if (soc_dai_hw_params(substream, &codec_params, codec_dai) < 0) + goto codec_err; codec_dai->rate = params_rate(&codec_params); codec_dai->channels = params_channels(&codec_params); @@ -841,14 +850,8 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream, params_format(&codec_params)); } - if (cpu_dai->driver->ops && cpu_dai->driver->ops->hw_params) { - ret = cpu_dai->driver->ops->hw_params(substream, params, cpu_dai); - if (ret < 0) { - dev_err(cpu_dai->dev, "ASoC: %s hw params failed: %d\n", - cpu_dai->name, ret); - goto interface_err; - } - } + if (soc_dai_hw_params(substream, params, cpu_dai) < 0) + goto interface_err; if (platform->driver->ops && platform->driver->ops->hw_params) { ret = platform->driver->ops->hw_params(substream, params);