From patchwork Fri Nov 23 14:27:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ladislav Michl X-Patchwork-Id: 10695947 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A75DE5A4 for ; Fri, 23 Nov 2018 14:37:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 949BF2BA17 for ; Fri, 23 Nov 2018 14:37:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 894FD2BA2A; Fri, 23 Nov 2018 14:37:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8B102BACB for ; Fri, 23 Nov 2018 14:37:38 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 48E52267A8E; Fri, 23 Nov 2018 15:28:12 +0100 (CET) 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 7DE6D267A72; Fri, 23 Nov 2018 15:28:08 +0100 (CET) Received: from cvs.linux-mips.org (eddie.linux-mips.org [148.251.95.138]) by alsa0.perex.cz (Postfix) with ESMTP id EF7E1267A73 for ; Fri, 23 Nov 2018 15:28:06 +0100 (CET) Received: (from localhost user: 'ladis' uid#1021 fake: STDIN (ladis@eddie.linux-mips.org)) by eddie.linux-mips.org id S23992965AbeKWO1aS3Sxb (ORCPT ); Fri, 23 Nov 2018 15:27:30 +0100 Date: Fri, 23 Nov 2018 15:27:29 +0100 From: Ladislav Michl To: alsa-devel@alsa-project.org Message-ID: <20181123142729.GC7347@lenoch> References: <20181123142507.GA7347@lenoch> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20181123142507.GA7347@lenoch> User-Agent: Mutt/1.10.1 (2018-07-13) Cc: Mark Brown , Kuninori Morimoto , anish kumar Subject: [alsa-devel] [PATCH 2/5] ASoC: max9867: Fix power management 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: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP Move device enable to probe function. Doing that from prepare callback allows only DAC to be enabled. While here move suspend and resume functions to more common place. Signed-off-by: Ladislav Michl --- sound/soc/codecs/max9867.c | 62 +++++++++++++++----------------------- sound/soc/codecs/max9867.h | 2 +- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c index 1cda54b59854..07a8205b211a 100644 --- a/sound/soc/codecs/max9867.c +++ b/sound/soc/codecs/max9867.c @@ -248,17 +248,6 @@ static int max9867_dai_hw_params(struct snd_pcm_substream *substream, return 0; } -static int max9867_prepare(struct snd_pcm_substream *substream, - struct snd_soc_dai *dai) -{ - struct snd_soc_component *component = dai->component; - struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component); - - regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, - MAX9867_SHTDOWN_MASK, MAX9867_SHTDOWN_MASK); - return 0; -} - static int max9867_mute(struct snd_soc_dai *dai, int mute) { struct snd_soc_component *component = dai->component; @@ -361,7 +350,6 @@ static int max9867_dai_set_fmt(struct snd_soc_dai *codec_dai, static const struct snd_soc_dai_ops max9867_dai_ops = { .set_fmt = max9867_dai_set_fmt, .set_sysclk = max9867_set_dai_sysclk, - .prepare = max9867_prepare, .digital_mute = max9867_mute, .hw_params = max9867_dai_hw_params, }; @@ -392,27 +380,6 @@ static struct snd_soc_dai_driver max9867_dai[] = { } }; -#ifdef CONFIG_PM_SLEEP -static int max9867_suspend(struct device *dev) -{ - struct max9867_priv *max9867 = dev_get_drvdata(dev); - - /* Drop down to power saving mode when system is suspended */ - regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, - MAX9867_SHTDOWN_MASK, ~MAX9867_SHTDOWN_MASK); - return 0; -} - -static int max9867_resume(struct device *dev) -{ - struct max9867_priv *max9867 = dev_get_drvdata(dev); - - regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, - MAX9867_SHTDOWN_MASK, MAX9867_SHTDOWN_MASK); - return 0; -} -#endif - static const struct snd_soc_component_driver max9867_component = { .controls = max9867_snd_controls, .num_controls = ARRAY_SIZE(max9867_snd_controls), @@ -491,19 +458,40 @@ static int max9867_i2c_probe(struct i2c_client *i2c, } ret = regmap_read(max9867->regmap, MAX9867_REVISION, ®); if (ret < 0) { - dev_err(&i2c->dev, "Failed to read: %d\n", ret); + dev_err(&i2c->dev, "Failed to read revision: %d\n", ret); return ret; } dev_info(&i2c->dev, "device revision: %x\n", reg); - ret = devm_snd_soc_register_component(&i2c->dev, &max9867_component, - max9867_dai, ARRAY_SIZE(max9867_dai)); + ret = regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, + MAX9867_SHTDOWN, MAX9867_SHTDOWN); if (ret < 0) { - dev_err(&i2c->dev, "Failed to register component: %d\n", ret); + dev_err(&i2c->dev, "Failed to enable: %d\n", ret); return ret; } + ret = devm_snd_soc_register_component(&i2c->dev, &max9867_component, + max9867_dai, ARRAY_SIZE(max9867_dai)); + if (ret < 0) + dev_err(&i2c->dev, "Failed to register component: %d\n", ret); return ret; } +static int __maybe_unused max9867_suspend(struct device *dev) +{ + struct max9867_priv *max9867 = dev_get_drvdata(dev); + + /* Drop down to power saving mode when system is suspended */ + return regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, + MAX9867_SHTDOWN, 0); +} + +static int __maybe_unused max9867_resume(struct device *dev) +{ + struct max9867_priv *max9867 = dev_get_drvdata(dev); + + return regmap_update_bits(max9867->regmap, MAX9867_PWRMAN, + MAX9867_SHTDOWN, MAX9867_SHTDOWN); +} + static const struct i2c_device_id max9867_i2c_id[] = { { "max9867", 0 }, { } diff --git a/sound/soc/codecs/max9867.h b/sound/soc/codecs/max9867.h index 55cd9976ff47..d9170850c96e 100644 --- a/sound/soc/codecs/max9867.h +++ b/sound/soc/codecs/max9867.h @@ -67,7 +67,7 @@ #define MAX9867_MICCONFIG 0x15 #define MAX9867_MODECONFIG 0x16 #define MAX9867_PWRMAN 0x17 -#define MAX9867_SHTDOWN_MASK (1<<7) +#define MAX9867_SHTDOWN 0x80 #define MAX9867_REVISION 0xff #define MAX9867_CACHEREGNUM 10