2022-03-10 09:26:19

by Steve Lee

[permalink] [raw]
Subject: [PATCH] ASoC: max98390: Add reset gpio control

Add reset gpio control to support RESET PIN connected to gpio.

Signed-off-by: Steve Lee <[email protected]>
---
sound/soc/codecs/max98390.c | 18 ++++++++++++++++++
sound/soc/codecs/max98390.h | 1 +
2 files changed, 19 insertions(+)

diff --git a/sound/soc/codecs/max98390.c b/sound/soc/codecs/max98390.c
index b392567c2b3e..574d8d5f1119 100644
--- a/sound/soc/codecs/max98390.c
+++ b/sound/soc/codecs/max98390.c
@@ -1073,6 +1073,24 @@ static int max98390_i2c_probe(struct i2c_client *i2c,
return ret;
}

+ max98390->reset_gpio = of_get_named_gpio(i2c->dev.of_node,
+ "maxim,reset-gpios", 0);
+
+ /* Power on device */
+ if (gpio_is_valid(max98390->reset_gpio)) {
+ ret = devm_gpio_request(&i2c->dev, max98390->reset_gpio,
+ "MAX98390_RESET");
+ if (ret) {
+ dev_err(&i2c->dev, "%s: Failed to request gpio %d\n",
+ __func__, max98390->reset_gpio);
+ return -EINVAL;
+ }
+ gpio_direction_output(max98390->reset_gpio, 0);
+ usleep_range(1000, 2000);
+ gpio_direction_output(max98390->reset_gpio, 1);
+ usleep_range(1000, 2000);
+ }
+
/* Check Revision ID */
ret = regmap_read(max98390->regmap,
MAX98390_R24FF_REV_ID, &reg);
diff --git a/sound/soc/codecs/max98390.h b/sound/soc/codecs/max98390.h
index c250740f73a2..5518f2340247 100644
--- a/sound/soc/codecs/max98390.h
+++ b/sound/soc/codecs/max98390.h
@@ -655,6 +655,7 @@

struct max98390_priv {
struct regmap *regmap;
+ int reset_gpio;
unsigned int sysclk;
unsigned int master;
unsigned int tdm_mode;
--
2.17.1


2022-03-10 10:51:47

by Nuno Sa

[permalink] [raw]
Subject: RE: [PATCH] ASoC: max98390: Add reset gpio control

Hi Steve,

> From: Steve Lee <[email protected]>
> Sent: Thursday, March 10, 2022 9:16 AM
> To: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; geert@linux-
> m68k.org; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; Sa, Nuno <[email protected]>;
> [email protected]; [email protected];
> [email protected]
> Cc: Steve Lee <[email protected]>
> Subject: [PATCH] ASoC: max98390: Add reset gpio control
>
> [External]
>
> Add reset gpio control to support RESET PIN connected to gpio.
>
> Signed-off-by: Steve Lee <[email protected]>
> ---
> sound/soc/codecs/max98390.c | 18 ++++++++++++++++++
> sound/soc/codecs/max98390.h | 1 +
> 2 files changed, 19 insertions(+)
>
> diff --git a/sound/soc/codecs/max98390.c
> b/sound/soc/codecs/max98390.c
> index b392567c2b3e..574d8d5f1119 100644
> --- a/sound/soc/codecs/max98390.c
> +++ b/sound/soc/codecs/max98390.c
> @@ -1073,6 +1073,24 @@ static int max98390_i2c_probe(struct
> i2c_client *i2c,
> return ret;
> }
>
> + max98390->reset_gpio = of_get_named_gpio(i2c-
> >dev.of_node,
> + "maxim,reset-gpios", 0);

Why not using devm_gpiod_get_optional()? We could request the pin
already in the asserted state and make the code slightly better...

/* I guess there's no need to save it in our struct as we only use it here? */
struct gpio_desc *reset_gpio;

reset_gpio = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_HIGH);
if (reset_gpio) {
usleep_range(1000, 2000);
/* bring out of reset */
gpio_direction_output(max98390->reset_gpio, 0);
usleep_range(1000, 2000);
}

Also, do we have this on the bindings doc? If not, it should be done on a second
patch on this series...

- Nuno S?

2022-03-10 13:38:39

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] ASoC: max98390: Add reset gpio control

On Thu, Mar 10, 2022 at 08:48:09AM +0000, Sa, Nuno wrote:

> > + max98390->reset_gpio = of_get_named_gpio(i2c-
> > >dev.of_node,
> > + "maxim,reset-gpios", 0);

> Why not using devm_gpiod_get_optional()? We could request the pin
> already in the asserted state and make the code slightly better...

Yes, and it'd support other firmware interfaces too. We also need an
update to the binding document covering the new property.

Might also be worth putting the device into reset when unloading the
driver, though that's not essential.


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

2022-03-11 22:16:52

by Steve Lee

[permalink] [raw]
Subject: Re: [PATCH] ASoC: max98390: Add reset gpio control

On Thu, Mar 10, 2022 at 5:48 PM Sa, Nuno <[email protected]> wrote:
>
> Hi Steve,
>
> > From: Steve Lee <[email protected]>
> > Sent: Thursday, March 10, 2022 9:16 AM
> > To: [email protected]; [email protected]; [email protected];
> > [email protected]; [email protected]; geert@linux-
> > m68k.org; [email protected]; [email protected];
> > [email protected]; [email protected]; [email protected];
> > [email protected]; Sa, Nuno <[email protected]>;
> > [email protected]; [email protected];
> > [email protected]
> > Cc: Steve Lee <[email protected]>
> > Subject: [PATCH] ASoC: max98390: Add reset gpio control
> >
> > [External]
> >
> > Add reset gpio control to support RESET PIN connected to gpio.
> >
> > Signed-off-by: Steve Lee <[email protected]>
> > ---
> > sound/soc/codecs/max98390.c | 18 ++++++++++++++++++
> > sound/soc/codecs/max98390.h | 1 +
> > 2 files changed, 19 insertions(+)
> >
> > diff --git a/sound/soc/codecs/max98390.c
> > b/sound/soc/codecs/max98390.c
> > index b392567c2b3e..574d8d5f1119 100644
> > --- a/sound/soc/codecs/max98390.c
> > +++ b/sound/soc/codecs/max98390.c
> > @@ -1073,6 +1073,24 @@ static int max98390_i2c_probe(struct
> > i2c_client *i2c,
> > return ret;
> > }
> >
> > + max98390->reset_gpio = of_get_named_gpio(i2c-
> > >dev.of_node,
> > + "maxim,reset-gpios", 0);
>
> Why not using devm_gpiod_get_optional()? We could request the pin
> already in the asserted state and make the code slightly better...
>
> /* I guess there's no need to save it in our struct as we only use it here? */
> struct gpio_desc *reset_gpio;
>
> reset_gpio = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_HIGH);
> if (reset_gpio) {
> usleep_range(1000, 2000);
> /* bring out of reset */
> gpio_direction_output(max98390->reset_gpio, 0);
> usleep_range(1000, 2000);
> }
>
> Also, do we have this on the bindings doc? If not, it should be done on a second
> patch on this series...
>
> - Nuno Sá
>

Thanks for comment on this patch. I will check and update as commented.

2022-03-11 23:25:12

by Steve Lee

[permalink] [raw]
Subject: Re: [PATCH] ASoC: max98390: Add reset gpio control

On Thu, Mar 10, 2022 at 8:29 PM Mark Brown <[email protected]> wrote:
>
> On Thu, Mar 10, 2022 at 08:48:09AM +0000, Sa, Nuno wrote:
>
> > > + max98390->reset_gpio = of_get_named_gpio(i2c-
> > > >dev.of_node,
> > > + "maxim,reset-gpios", 0);
>
> > Why not using devm_gpiod_get_optional()? We could request the pin
> > already in the asserted state and make the code slightly better...
>
> Yes, and it'd support other firmware interfaces too. We also need an
> update to the binding document covering the new property.
>
> Might also be worth putting the device into reset when unloading the
> driver, though that's not essential.

I will check and update v2 patch.