Commit 318e741e authored by Olivier Moysan's avatar Olivier Moysan Committed by Mark Brown

ASoC: cs42l51: fix mclk support

The MCLK clock is made optional for cs42l51 codec.
However, ASoC DAPM clock supply widget, expects the clock to be defined
unconditionally.
Register MCLK DAPM conditionally in codec driver,
depending on clock presence in DT.

Fixes: 5e8d63a7 ("ASoC: cs42l51: add mclk support")
Signed-off-by: default avatarOlivier Moysan <olivier.moysan@st.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 7ece50c9
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
* - master mode *NOT* supported * - master mode *NOT* supported
*/ */
#include <linux/clk.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <sound/core.h> #include <sound/core.h>
...@@ -41,6 +42,7 @@ enum master_slave_mode { ...@@ -41,6 +42,7 @@ enum master_slave_mode {
struct cs42l51_private { struct cs42l51_private {
unsigned int mclk; unsigned int mclk;
struct clk *mclk_handle;
unsigned int audio_mode; /* The mode (I2S or left-justified) */ unsigned int audio_mode; /* The mode (I2S or left-justified) */
enum master_slave_mode func; enum master_slave_mode func;
}; };
...@@ -492,9 +494,13 @@ static int cs42l51_component_probe(struct snd_soc_component *component) ...@@ -492,9 +494,13 @@ static int cs42l51_component_probe(struct snd_soc_component *component)
{ {
int ret, reg; int ret, reg;
struct snd_soc_dapm_context *dapm; struct snd_soc_dapm_context *dapm;
struct cs42l51_private *cs42l51;
cs42l51 = snd_soc_component_get_drvdata(component);
dapm = snd_soc_component_get_dapm(component); dapm = snd_soc_component_get_dapm(component);
snd_soc_dapm_new_controls(dapm, cs42l51_dapm_mclk_widgets, 1);
if (cs42l51->mclk_handle)
snd_soc_dapm_new_controls(dapm, cs42l51_dapm_mclk_widgets, 1);
/* /*
* DAC configuration * DAC configuration
...@@ -548,6 +554,13 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap) ...@@ -548,6 +554,13 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap)
dev_set_drvdata(dev, cs42l51); dev_set_drvdata(dev, cs42l51);
cs42l51->mclk_handle = devm_clk_get(dev, "MCLK");
if (IS_ERR(cs42l51->mclk_handle)) {
if (PTR_ERR(cs42l51->mclk_handle) != -ENOENT)
return PTR_ERR(cs42l51->mclk_handle);
cs42l51->mclk_handle = NULL;
}
/* Verify that we have a CS42L51 */ /* Verify that we have a CS42L51 */
ret = regmap_read(regmap, CS42L51_CHIP_REV_ID, &val); ret = regmap_read(regmap, CS42L51_CHIP_REV_ID, &val);
if (ret < 0) { if (ret < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment