From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 From: nickel@altlinux.org To: devel-kernel@lists.altlinux.org Date: Mon, 4 Apr 2022 09:28:43 +0300 Message-Id: <20220404062849.1372967-5-nickel@altlinux.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220404062849.1372967-2-nickel@altlinux.org> References: <20220404062849.1372967-1-nickel@altlinux.org> <20220404062849.1372967-2-nickel@altlinux.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Cc: Vasily Vinogradov Subject: [d-kernel] [PATCH 3/9] commit 8143959d503dd6b3c8b9802cee0f1eba82e8d844 X-BeenThere: devel-kernel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Apr 2022 06:29:34 -0000 Archived-At: List-Archive: List-Post: From: Vasily Vinogradov ASoC: es8316: Add power management --- sound/soc/codecs/es8316.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c index 8f30a3ea8bfe..c63f3b300797 100644 --- a/sound/soc/codecs/es8316.c +++ b/sound/soc/codecs/es8316.c @@ -728,6 +728,8 @@ static int es8316_probe(struct snd_soc_component *component) return ret; } + snd_soc_component_init_regmap(component, es8316->regmap); + /* Reset codec and enable current state machine */ snd_soc_component_write(component, ES8316_RESET, 0x3f); usleep_range(5000, 5500); @@ -754,9 +756,43 @@ static void es8316_remove(struct snd_soc_component *component) { struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component); + snd_soc_component_exit_regmap(component); + clk_disable_unprepare(es8316->mclk); } +#ifdef CONFIG_PM_SLEEP +static int es8316_suspend(struct device *dev) +{ + struct es8316_priv *es8316 = dev_get_drvdata(dev); + + dev_dbg(dev, "%s: Enter\n", __func__); + + regcache_cache_only(es8316->regmap, true); + regcache_mark_dirty(es8316->regmap); + + return 0; +} + +static int es8316_resume(struct device *dev) +{ + struct es8316_priv *es8316 = dev_get_drvdata(dev); + + dev_dbg(dev, "%s: Enter\n", __func__); + + regcache_cache_only(es8316->regmap, false); + regcache_sync(es8316->regmap); + + es8316_irq(es8316->irq, es8316); + + return 0; +} +#endif + +static const struct dev_pm_ops es8316_pm = { + SET_SYSTEM_SLEEP_PM_OPS(es8316_suspend, es8316_resume) +}; + static const struct snd_soc_component_driver soc_component_dev_es8316 = { .probe = es8316_probe, .remove = es8316_remove, @@ -787,6 +823,8 @@ static const struct regmap_config es8316_regmap = { .max_register = 0x53, .volatile_table = &es8316_volatile_table, .cache_type = REGCACHE_RBTREE, + .use_single_read = true, + .use_single_write = true, }; static int es8316_i2c_probe(struct i2c_client *i2c_client, @@ -851,6 +889,7 @@ static struct i2c_driver es8316_i2c_driver = { .name = "es8316", .acpi_match_table = ACPI_PTR(es8316_acpi_match), .of_match_table = of_match_ptr(es8316_of_match), + .pm = &es8316_pm, }, .probe = es8316_i2c_probe, .id_table = es8316_i2c_id, -- 2.33.0