Unverified Commit bc0505bd authored by Derek Fang's avatar Derek Fang Committed by Mark Brown
Browse files

ASoC: rt5682s: Separate the regulator consumer controls



Control the regulators separately instead of using regulator_bulk to
accord to the timing request in the datasheet.

Signed-off-by: default avatarDerek Fang <derek.fang@realtek.com>
Link: https://lore.kernel.org/r/20220328053338.21441-1-derek.fang@realtek.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent a403993c
Loading
Loading
Loading
Loading
+22 −5
Original line number Original line Diff line number Diff line
@@ -42,8 +42,8 @@ static const struct rt5682s_platform_data i2s_default_platform_data = {
};
};


static const char *rt5682s_supply_names[RT5682S_NUM_SUPPLIES] = {
static const char *rt5682s_supply_names[RT5682S_NUM_SUPPLIES] = {
	"AVDD",
	[RT5682S_SUPPLY_AVDD] = "AVDD",
	"MICVDD",
	[RT5682S_SUPPLY_MICVDD] = "MICVDD",
};
};


static const struct reg_sequence patch_list[] = {
static const struct reg_sequence patch_list[] = {
@@ -3025,8 +3025,18 @@ static struct snd_soc_dai_driver rt5682s_dai[] = {
static void rt5682s_i2c_disable_regulators(void *data)
static void rt5682s_i2c_disable_regulators(void *data)
{
{
	struct rt5682s_priv *rt5682s = data;
	struct rt5682s_priv *rt5682s = data;
	struct device *dev = regmap_get_device(rt5682s->regmap);
	int ret;

	ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_AVDD].consumer);
	if (ret)
		dev_err(dev, "Failed to disable supply AVDD: %d\n", ret);


	regulator_bulk_disable(ARRAY_SIZE(rt5682s->supplies), rt5682s->supplies);
	usleep_range(1000, 1500);

	ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_MICVDD].consumer);
	if (ret)
		dev_err(dev, "Failed to disable supply MICVDD: %d\n", ret);
}
}


static int rt5682s_i2c_probe(struct i2c_client *i2c,
static int rt5682s_i2c_probe(struct i2c_client *i2c,
@@ -3071,9 +3081,16 @@ static int rt5682s_i2c_probe(struct i2c_client *i2c,
	if (ret)
	if (ret)
		return ret;
		return ret;


	ret = regulator_bulk_enable(ARRAY_SIZE(rt5682s->supplies), rt5682s->supplies);
	ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_MICVDD].consumer);
	if (ret) {
		dev_err(&i2c->dev, "Failed to enable supply MICVDD: %d\n", ret);
		return ret;
	}
	usleep_range(1000, 1500);

	ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_AVDD].consumer);
	if (ret) {
	if (ret) {
		dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
		dev_err(&i2c->dev, "Failed to enable supply AVDD: %d\n", ret);
		return ret;
		return ret;
	}
	}


+5 −1
Original line number Original line Diff line number Diff line
@@ -1434,7 +1434,11 @@ struct pll_calc_map {
	bool sel_ps;
	bool sel_ps;
};
};


#define RT5682S_NUM_SUPPLIES 2
enum {
	RT5682S_SUPPLY_AVDD,
	RT5682S_SUPPLY_MICVDD,
	RT5682S_NUM_SUPPLIES,
};


struct rt5682s_priv {
struct rt5682s_priv {
	struct snd_soc_component *component;
	struct snd_soc_component *component;