2019-05-16 13:04:03

by Viorel Suman

[permalink] [raw]
Subject: [PATCH] ASoC: AK4458: add regulator for ak4458

From: Shengjiu Wang <[email protected]>

Add regulator for ak4458.

Signed-off-by: Shengjiu Wang <[email protected]>
Signed-off-by: Viorel Suman <[email protected]>
---
sound/soc/codecs/ak4458.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/ak4458.c b/sound/soc/codecs/ak4458.c
index 7156215..06dcf13 100644
--- a/sound/soc/codecs/ak4458.c
+++ b/sound/soc/codecs/ak4458.c
@@ -12,6 +12,7 @@
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <sound/initval.h>
#include <sound/pcm_params.h>
@@ -21,6 +22,12 @@

#include "ak4458.h"

+#define AK4458_NUM_SUPPLIES 2
+static const char *ak4458_supply_names[AK4458_NUM_SUPPLIES] = {
+ "DVDD",
+ "AVDD",
+};
+
struct ak4458_drvdata {
struct snd_soc_dai_driver *dai_drv;
const struct snd_soc_component_driver *comp_drv;
@@ -37,6 +44,7 @@ struct ak4458_priv {
int fmt;
int slots;
int slot_width;
+ struct regulator_bulk_data supplies[AK4458_NUM_SUPPLIES];
};

static const struct reg_default ak4458_reg_defaults[] = {
@@ -666,7 +674,7 @@ static int ak4458_i2c_probe(struct i2c_client *i2c)
{
struct ak4458_priv *ak4458;
const struct ak4458_drvdata *drvdata;
- int ret;
+ int ret, i;

ak4458 = devm_kzalloc(&i2c->dev, sizeof(*ak4458), GFP_KERNEL);
if (!ak4458)
@@ -691,6 +699,23 @@ static int ak4458_i2c_probe(struct i2c_client *i2c)
if (IS_ERR(ak4458->mute_gpiod))
return PTR_ERR(ak4458->mute_gpiod);

+ for (i = 0; i < ARRAY_SIZE(ak4458->supplies); i++)
+ ak4458->supplies[i].supply = ak4458_supply_names[i];
+
+ ret = devm_regulator_bulk_get(ak4458->dev, ARRAY_SIZE(ak4458->supplies),
+ ak4458->supplies);
+ if (ret != 0) {
+ dev_err(ak4458->dev, "Failed to request supplies: %d\n", ret);
+ return ret;
+ }
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(ak4458->supplies),
+ ak4458->supplies);
+ if (ret != 0) {
+ dev_err(ak4458->dev, "Failed to enable supplies: %d\n", ret);
+ return ret;
+ }
+
ret = devm_snd_soc_register_component(ak4458->dev, drvdata->comp_drv,
drvdata->dai_drv, 1);
if (ret < 0) {
--
2.7.4


2019-05-16 13:16:40

by Fabio Estevam

[permalink] [raw]
Subject: Re: [alsa-devel] [PATCH] ASoC: AK4458: add regulator for ak4458

On Thu, May 16, 2019 at 10:02 AM Viorel Suman <[email protected]> wrote:

> + for (i = 0; i < ARRAY_SIZE(ak4458->supplies); i++)
> + ak4458->supplies[i].supply = ak4458_supply_names[i];
> +
> + ret = devm_regulator_bulk_get(ak4458->dev, ARRAY_SIZE(ak4458->supplies),
> + ak4458->supplies);
> + if (ret != 0) {
> + dev_err(ak4458->dev, "Failed to request supplies: %d\n", ret);
> + return ret;

This would break existing users that do not pass the regulators in device tree.

Ok, in this case there is no ak4458 user in any dts, so that would not
be an issue.

Please update the dt-bindings with the regulator entries.

2019-05-16 14:15:05

by Viorel Suman

[permalink] [raw]
Subject: Re: [alsa-devel] [PATCH] ASoC: AK4458: add regulator for ak4458

On Jo, 2019-05-16 at 10:14 -0300, Fabio Estevam wrote:
> On Thu, May 16, 2019 at 10:02 AM Viorel Suman <[email protected]> wrote:
>
> >
> > +       for (i = 0; i < ARRAY_SIZE(ak4458->supplies); i++)
> > +               ak4458->supplies[i].supply = ak4458_supply_names[i];
> > +
> > +       ret = devm_regulator_bulk_get(ak4458->dev, ARRAY_SIZE(ak4458->supplies),
> > +                                     ak4458->supplies);
> > +       if (ret != 0) {
> > +               dev_err(ak4458->dev, "Failed to request supplies: %d\n", ret);
> > +               return ret;
> This would break existing users that do not pass the regulators in device tree.
>
> Ok, in this case there is no ak4458 user in any dts, so that would not
> be an issue.
>
> Please update the dt-bindings with the regulator entries.

Thanks, will send in V2.

/Viorel

2019-05-16 14:18:04

by Daniel Baluta

[permalink] [raw]
Subject: Re: [PATCH] ASoC: AK4458: add regulator for ak4458

On Thu, 2019-05-16 at 13:00 +0000, Viorel Suman wrote:
> From: Shengjiu Wang <[email protected]>
>
> Add regulator for ak4458.
>
Hi Viorel,

While at it please disable/enable the regulator in suspend/resume.

thanks,
Daniel.

2019-05-16 18:24:19

by Mark Brown

[permalink] [raw]
Subject: Re: [alsa-devel] [PATCH] ASoC: AK4458: add regulator for ak4458

On Thu, May 16, 2019 at 10:14:42AM -0300, Fabio Estevam wrote:

> > + ret = devm_regulator_bulk_get(ak4458->dev, ARRAY_SIZE(ak4458->supplies),
> > + ak4458->supplies);
> > + if (ret != 0) {
> > + dev_err(ak4458->dev, "Failed to request supplies: %d\n", ret);
> > + return ret;

> This would break existing users that do not pass the regulators in device tree.

It won't, if you're using regulator_get() and there's just no regulator
in the DT the regulator framework just assumes that there is actually a
regulator there which isn't described in the DT and substitutes in a
dummy regulator for you.


Attachments:
(No filename) (689.00 B)
signature.asc (499.00 B)
Download all attachments