diff mbox

[1/3] ASoC: max98357a: Make 'sdmode-gpios' dts property optional

Message ID 1436684202-16461-1-git-send-email-anatol.pomozov@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Anatol Pomozov July 12, 2015, 6:56 a.m. UTC
The option is not needed if chip is always on or managed by some other part
of system like platform card driver.

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
---
 Documentation/devicetree/bindings/sound/max98357a.txt | 6 +++++-
 sound/soc/codecs/max98357a.c                          | 5 ++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

Comments

Lars-Peter Clausen July 12, 2015, 10:31 a.m. UTC | #1
On 07/12/2015 08:56 AM, Anatol Pomozov wrote:
[...]
> @@ -61,7 +64,7 @@ static int max98357a_codec_probe(struct snd_soc_codec *codec)
>   	struct gpio_desc *sdmode;
>
>   	sdmode = devm_gpiod_get(codec->dev, "sdmode", GPIOD_OUT_LOW);
> -	if (IS_ERR(sdmode)) {
> +	if (IS_ERR(sdmode) && (PTR_ERR(sdmode) != -ENOENT)) {

There is is devm_gpiod_get_optional() exactly for this use case. It will 
return NULL if no GPIO is specified.

>   		dev_err(codec->dev, "%s() unable to get sdmode GPIO: %ld\n",
>   				__func__, PTR_ERR(sdmode));
>   		return PTR_ERR(sdmode);
>
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/sound/max98357a.txt b/Documentation/devicetree/bindings/sound/max98357a.txt
index a7a149a..28645a2 100644
--- a/Documentation/devicetree/bindings/sound/max98357a.txt
+++ b/Documentation/devicetree/bindings/sound/max98357a.txt
@@ -4,7 +4,11 @@  This node models the Maxim MAX98357A DAC.
 
 Required properties:
 - compatible   : "maxim,max98357a"
-- sdmode-gpios : GPIO specifier for the GPIO -> DAC SDMODE pin
+
+Optional properties:
+- sdmode-gpios : GPIO specifier for the chip's SD_MODE pin.
+        If this option is not specified then driver does not manage
+        the pin state (e.g. chip is always on).
 
 Example:
 
diff --git a/sound/soc/codecs/max98357a.c b/sound/soc/codecs/max98357a.c
index 3a2fda0..6d4246a 100644
--- a/sound/soc/codecs/max98357a.c
+++ b/sound/soc/codecs/max98357a.c
@@ -31,6 +31,9 @@  static int max98357a_daiops_trigger(struct snd_pcm_substream *substream,
 {
 	struct gpio_desc *sdmode = snd_soc_dai_get_drvdata(dai);
 
+	if (!sdmode)
+		return 0;
+
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
@@ -61,7 +64,7 @@  static int max98357a_codec_probe(struct snd_soc_codec *codec)
 	struct gpio_desc *sdmode;
 
 	sdmode = devm_gpiod_get(codec->dev, "sdmode", GPIOD_OUT_LOW);
-	if (IS_ERR(sdmode)) {
+	if (IS_ERR(sdmode) && (PTR_ERR(sdmode) != -ENOENT)) {
 		dev_err(codec->dev, "%s() unable to get sdmode GPIO: %ld\n",
 				__func__, PTR_ERR(sdmode));
 		return PTR_ERR(sdmode);