Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: maxim,max9867: add "mclk" support

Add basic support for the codecs' mclk.
Enable it on SND_SOC_BIAS_ON, disable it on SND_SOC_BIAS_OFF.

Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
Signed-off-by: Richard Leitner <richard.leitner@skidata.com>
Link: https://lore.kernel.org/r/20230302-max9867-v2-3-fd2036d5e825@skidata.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Benjamin Bara and committed by
Mark Brown
448b06ba d63e55b3

+17 -2
+17 -2
sound/soc/codecs/max9867.c
··· 6 6 // Copyright 2018 Ladislav Michl <ladis@linux-mips.org> 7 7 // 8 8 9 + #include <linux/clk.h> 9 10 #include <linux/delay.h> 10 11 #include <linux/i2c.h> 11 12 #include <linux/module.h> ··· 17 16 #include "max9867.h" 18 17 19 18 struct max9867_priv { 19 + struct clk *mclk; 20 20 struct regmap *regmap; 21 21 const struct snd_pcm_hw_constraint_list *constraints; 22 22 unsigned int sysclk, pclk; ··· 579 577 struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component); 580 578 581 579 switch (level) { 580 + case SND_SOC_BIAS_ON: 581 + err = clk_prepare_enable(max9867->mclk); 582 + if (err) 583 + return err; 584 + break; 582 585 case SND_SOC_BIAS_STANDBY: 583 586 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) { 584 587 err = regcache_sync(max9867->regmap); ··· 602 595 return err; 603 596 604 597 regcache_mark_dirty(max9867->regmap); 598 + clk_disable_unprepare(max9867->mclk); 605 599 break; 606 600 default: 607 601 break; ··· 671 663 dev_info(&i2c->dev, "device revision: %x\n", reg); 672 664 ret = devm_snd_soc_register_component(&i2c->dev, &max9867_component, 673 665 max9867_dai, ARRAY_SIZE(max9867_dai)); 674 - if (ret < 0) 666 + if (ret < 0) { 675 667 dev_err(&i2c->dev, "Failed to register component: %d\n", ret); 676 - return ret; 668 + return ret; 669 + } 670 + 671 + max9867->mclk = devm_clk_get(&i2c->dev, NULL); 672 + if (IS_ERR(max9867->mclk)) 673 + return PTR_ERR(max9867->mclk); 674 + 675 + return 0; 677 676 } 678 677 679 678 static const struct i2c_device_id max9867_i2c_id[] = {