* [PATCH 0/4] ASoC: codecs: adau1373: drop platform data
@ 2024-10-21 13:46 Nuno Sa
2024-10-21 13:46 ` [PATCH 1/4] ASoC: codecs: adau1373: add some kconfig text Nuno Sa
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Nuno Sa @ 2024-10-21 13:46 UTC (permalink / raw)
To: linux-sound, devicetree
Cc: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai,
Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Main motivation for this was to just add support for a powerdown GPIO.
Then, I realized the driver was using platdata which is not being used by
any platform. Hence, move to support FW properties and add bindings
docs.
---
Nuno Sa (4):
ASoC: codecs: adau1373: add some kconfig text
ASoC: dt-bindings: document the adau1373 Codec
ASoC: codecs: adau1373: drop patform_data
ASoC: codecs: adau1373: add powerdown gpio
.../devicetree/bindings/sound/adi,adau1373.yaml | 102 +++++++++++
MAINTAINERS | 1 +
include/sound/adau1373.h | 33 ----
sound/soc/codecs/Kconfig | 2 +-
sound/soc/codecs/adau1373.c | 198 ++++++++++++++++-----
5 files changed, 253 insertions(+), 83 deletions(-)
---
base-commit: cab655772416379a925af9ea85769a9d3eecdba0
change-id: 20241018-adau1373-shutdown-dc3d485a7d86
--
Thanks!
- Nuno Sá
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH 1/4] ASoC: codecs: adau1373: add some kconfig text 2024-10-21 13:46 [PATCH 0/4] ASoC: codecs: adau1373: drop platform data Nuno Sa @ 2024-10-21 13:46 ` Nuno Sa 2024-10-21 13:46 ` [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec Nuno Sa ` (2 subsequent siblings) 3 siblings, 0 replies; 11+ messages in thread From: Nuno Sa @ 2024-10-21 13:46 UTC (permalink / raw) To: linux-sound, devicetree Cc: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley Add some text to 'tristate' so that we can actually enable the driver when using things like menuconfig. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- sound/soc/codecs/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 6a6125e94d2dc094b10c6f2fb53dd447e831f23d..72643907cef737ab4504ebac78b2bf7b4a8ead68 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -464,7 +464,7 @@ config SND_SOC_ADAU1372_SPI select REGMAP_SPI config SND_SOC_ADAU1373 - tristate + tristate "Analog Devices ADAU1373 CODEC" depends on I2C select SND_SOC_ADAU_UTILS -- 2.47.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec 2024-10-21 13:46 [PATCH 0/4] ASoC: codecs: adau1373: drop platform data Nuno Sa 2024-10-21 13:46 ` [PATCH 1/4] ASoC: codecs: adau1373: add some kconfig text Nuno Sa @ 2024-10-21 13:46 ` Nuno Sa 2024-10-22 6:06 ` Krzysztof Kozlowski 2024-10-21 13:46 ` [PATCH 3/4] ASoC: codecs: adau1373: drop patform_data Nuno Sa 2024-10-21 13:46 ` [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio Nuno Sa 3 siblings, 1 reply; 11+ messages in thread From: Nuno Sa @ 2024-10-21 13:46 UTC (permalink / raw) To: linux-sound, devicetree Cc: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley Describe the adau1373 Low Power Codec with Speaker and Headphone Amplifier. While at it, properly add a MAINTAINERS entry for ADI sound bindings. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- .../devicetree/bindings/sound/adi,adau1373.yaml | 102 +++++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 103 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/adi,adau1373.yaml b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b2b5b2226ed7b354f2fb7871c17272b347921fa5 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml @@ -0,0 +1,102 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/adi,adau1373.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + + +title: Analog Devices ADAU1373 CODEC + +maintainers: + - Nuno Sá <nuno.sa@analog.com> + +description: | + Analog Devices ADAU1373 Low power codec with speaker and headphone amplifiers. + https://www.analog.com/media/en/technical-documentation/data-sheets/ADAU1373.pdf + +allOf: + - $ref: dai-common.yaml# + +properties: + compatible: + enum: + - adi,adau1373 + + reg: + maxItems: 1 + + "#sound-dai-cells": + const: 0 + + powerdown-gpios: + description: GPIO used for hardware power-down. + maxItems: 1 + + adi,micbias1-microvolt: + description: + This property sets the microphone bias voltage for the first microphone. + enum: [1800000, 2200000, 2600000, 2900000] + default: 2900000 + + adi,micbias2-microvolt: + description: + This property sets the microphone bias voltage for the second microphone. + enum: [1800000, 2200000, 2600000, 2900000] + default: 2900000 + + adi,input1-differential: + description: This property sets the first analog input as differential. + type: boolean + + adi,input2-differential: + description: This property sets the second analog input as differential. + type: boolean + + adi,input3-differential: + description: This property sets the third analog input as differential. + type: boolean + + adi,input4-differential: + description: This property sets the fourth analog input as differential. + type: boolean + + adi,lineout-differential: + description: This property sets the line output as differential. + type: boolean + + adi,lineout-gnd-sense: + description: This property enables the line output ground sense control. + type: boolean + + adi,drc-settings: + description: + This setting is used to control the dynamic range of the signal. The + device provides a maximum of three full band DRCs with 13 entries each. + $ref: /schemas/types.yaml#/definitions/uint8-array + oneOf: + - minItems: 13 + - minItems: 26 + - minItems: 39 + +required: + - "#sound-dai-cells" + - compatible + - reg + +unevaluatedProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + + i2c { + #address-cells = <1>; + #size-cells = <0>; + audio-codec@1a { + compatible = "adi,adau1373"; + reg = <0x1a>; + #sound-dai-cells = <0>; + powerdown-gpios = <&gpio 100 GPIO_ACTIVE_LOW>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index c1a2c296446c0724a0c6e70c845e5e5e1e693fd5..a3bf361f7b80774ae2228f2d71a3f477eb497ec5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1521,6 +1521,7 @@ L: linux-sound@vger.kernel.org S: Supported W: http://wiki.analog.com/ W: https://ez.analog.com/linux-software-drivers +F: Documentation/devicetree/bindings/sound/adi,* F: sound/soc/codecs/ad1* F: sound/soc/codecs/ad7* F: sound/soc/codecs/adau* -- 2.47.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec 2024-10-21 13:46 ` [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec Nuno Sa @ 2024-10-22 6:06 ` Krzysztof Kozlowski 2024-10-22 6:42 ` Nuno Sá 0 siblings, 1 reply; 11+ messages in thread From: Krzysztof Kozlowski @ 2024-10-22 6:06 UTC (permalink / raw) To: Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley On Mon, Oct 21, 2024 at 03:46:46PM +0200, Nuno Sa wrote: > Describe the adau1373 Low Power Codec with Speaker and > Headphone Amplifier. > > While at it, properly add a MAINTAINERS entry for ADI sound bindings. > > Signed-off-by: Nuno Sa <nuno.sa@analog.com> > --- > .../devicetree/bindings/sound/adi,adau1373.yaml | 102 +++++++++++++++++++++ > MAINTAINERS | 1 + > 2 files changed, 103 insertions(+) > > diff --git a/Documentation/devicetree/bindings/sound/adi,adau1373.yaml b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml > new file mode 100644 > index 0000000000000000000000000000000000000000..b2b5b2226ed7b354f2fb7871c17272b347921fa5 > --- /dev/null > +++ b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml > @@ -0,0 +1,102 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/sound/adi,adau1373.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > + Just one blank line > +title: Analog Devices ADAU1373 CODEC > + > +maintainers: > + - Nuno Sá <nuno.sa@analog.com> > + > +description: | > + Analog Devices ADAU1373 Low power codec with speaker and headphone amplifiers. > + https://www.analog.com/media/en/technical-documentation/data-sheets/ADAU1373.pdf > + > +allOf: > + - $ref: dai-common.yaml# > + > +properties: > + compatible: > + enum: > + - adi,adau1373 > + > + reg: > + maxItems: 1 > + > + "#sound-dai-cells": > + const: 0 > + > + powerdown-gpios: > + description: GPIO used for hardware power-down. > + maxItems: 1 > + > + adi,micbias1-microvolt: > + description: > + This property sets the microphone bias voltage for the first microphone. > + enum: [1800000, 2200000, 2600000, 2900000] > + default: 2900000 > + > + adi,micbias2-microvolt: > + description: > + This property sets the microphone bias voltage for the second microphone. > + enum: [1800000, 2200000, 2600000, 2900000] > + default: 2900000 > + > + adi,input1-differential: > + description: This property sets the first analog input as differential. > + type: boolean > + > + adi,input2-differential: > + description: This property sets the second analog input as differential. > + type: boolean > + > + adi,input3-differential: > + description: This property sets the third analog input as differential. > + type: boolean > + > + adi,input4-differential: > + description: This property sets the fourth analog input as differential. > + type: boolean > + > + adi,lineout-differential: > + description: This property sets the line output as differential. > + type: boolean > + > + adi,lineout-gnd-sense: > + description: This property enables the line output ground sense control. > + type: boolean > + > + adi,drc-settings: > + description: > + This setting is used to control the dynamic range of the signal. The > + device provides a maximum of three full band DRCs with 13 entries each. > + $ref: /schemas/types.yaml#/definitions/uint8-array > + oneOf: > + - minItems: 13 > + - minItems: 26 > + - minItems: 39 and maxItems? > + > +required: > + - "#sound-dai-cells" > + - compatible > + - reg > + > +unevaluatedProperties: false > + > +examples: > + - | > + #include <dt-bindings/gpio/gpio.h> > + > + i2c { > + #address-cells = <1>; > + #size-cells = <0>; > + audio-codec@1a { > + compatible = "adi,adau1373"; Messed indentation. > + reg = <0x1a>; > + #sound-dai-cells = <0>; > + powerdown-gpios = <&gpio 100 GPIO_ACTIVE_LOW>; Extend the example, you have like 10 unused properties. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec 2024-10-22 6:06 ` Krzysztof Kozlowski @ 2024-10-22 6:42 ` Nuno Sá 2024-10-26 18:14 ` Krzysztof Kozlowski 0 siblings, 1 reply; 11+ messages in thread From: Nuno Sá @ 2024-10-22 6:42 UTC (permalink / raw) To: Krzysztof Kozlowski, Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley On Tue, 2024-10-22 at 08:06 +0200, Krzysztof Kozlowski wrote: > On Mon, Oct 21, 2024 at 03:46:46PM +0200, Nuno Sa wrote: > > Describe the adau1373 Low Power Codec with Speaker and > > Headphone Amplifier. > > > > While at it, properly add a MAINTAINERS entry for ADI sound bindings. > > > > Signed-off-by: Nuno Sa <nuno.sa@analog.com> > > --- > > .../devicetree/bindings/sound/adi,adau1373.yaml | 102 > > +++++++++++++++++++++ > > MAINTAINERS | 1 + > > 2 files changed, 103 insertions(+) > > > > diff --git a/Documentation/devicetree/bindings/sound/adi,adau1373.yaml > > b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml > > new file mode 100644 > > index > > 0000000000000000000000000000000000000000..b2b5b2226ed7b354f2fb7871c17272b347 > > 921fa5 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/sound/adi,adau1373.yaml > > @@ -0,0 +1,102 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/sound/adi,adau1373.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > + > > Just one blank line > > > +title: Analog Devices ADAU1373 CODEC > > + > > +maintainers: > > + - Nuno Sá <nuno.sa@analog.com> > > + > > +description: | > > + Analog Devices ADAU1373 Low power codec with speaker and headphone > > amplifiers. > > + > > https://www.analog.com/media/en/technical-documentation/data-sheets/ADAU1373.pdf > > + > > +allOf: > > + - $ref: dai-common.yaml# > > + > > +properties: > > + compatible: > > + enum: > > + - adi,adau1373 > > + > > + reg: > > + maxItems: 1 > > + > > + "#sound-dai-cells": > > + const: 0 > > + > > + powerdown-gpios: > > + description: GPIO used for hardware power-down. > > + maxItems: 1 > > + > > + adi,micbias1-microvolt: > > + description: > > + This property sets the microphone bias voltage for the first > > microphone. > > + enum: [1800000, 2200000, 2600000, 2900000] > > + default: 2900000 > > + > > + adi,micbias2-microvolt: > > + description: > > + This property sets the microphone bias voltage for the second > > microphone. > > + enum: [1800000, 2200000, 2600000, 2900000] > > + default: 2900000 > > + > > + adi,input1-differential: > > + description: This property sets the first analog input as differential. > > + type: boolean > > + > > + adi,input2-differential: > > + description: This property sets the second analog input as > > differential. > > + type: boolean > > + > > + adi,input3-differential: > > + description: This property sets the third analog input as differential. > > + type: boolean > > + > > + adi,input4-differential: > > + description: This property sets the fourth analog input as > > differential. > > + type: boolean > > + > > + adi,lineout-differential: > > + description: This property sets the line output as differential. > > + type: boolean > > + > > + adi,lineout-gnd-sense: > > + description: This property enables the line output ground sense > > control. > > + type: boolean > > + > > + adi,drc-settings: > > + description: > > + This setting is used to control the dynamic range of the signal. The > > + device provides a maximum of three full band DRCs with 13 entries > > each. > > + $ref: /schemas/types.yaml#/definitions/uint8-array > > + oneOf: > > + - minItems: 13 > > + - minItems: 26 > > + - minItems: 39 > > and maxItems? Hmm, I had the idea that if maxItems was omitted, then it's the same as minItems? Because that's the intent... We can either have an array of 13, 26 or 39 entries. > > > + > > +required: > > + - "#sound-dai-cells" > > + - compatible > > + - reg > > + > > +unevaluatedProperties: false > > + > > +examples: > > + - | > > + #include <dt-bindings/gpio/gpio.h> > > + > > + i2c { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + audio-codec@1a { > > + compatible = "adi,adau1373"; > > Messed indentation. WIll fix. Normally my IDE handles this pretty well... > > > + reg = <0x1a>; > > + #sound-dai-cells = <0>; > > + powerdown-gpios = <&gpio 100 GPIO_ACTIVE_LOW>; > > Extend the example, you have like 10 unused properties. Will do Thanks! - Nuno Sá ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec 2024-10-22 6:42 ` Nuno Sá @ 2024-10-26 18:14 ` Krzysztof Kozlowski 2024-10-28 14:10 ` Nuno Sá 0 siblings, 1 reply; 11+ messages in thread From: Krzysztof Kozlowski @ 2024-10-26 18:14 UTC (permalink / raw) To: Nuno Sá, Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley On 22/10/2024 08:42, Nuno Sá wrote: >>> + $ref: /schemas/types.yaml#/definitions/uint8-array >>> + oneOf: >>> + - minItems: 13 >>> + - minItems: 26 >>> + - minItems: 39 >> >> and maxItems? > > Hmm, I had the idea that if maxItems was omitted, then it's the same as > minItems? Because that's the intent... We can either have an array of 13, 26 or > 39 entries. That's not the case and none of the files follow such logic. If you manage to find one file, please correct or report it. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec 2024-10-26 18:14 ` Krzysztof Kozlowski @ 2024-10-28 14:10 ` Nuno Sá 0 siblings, 0 replies; 11+ messages in thread From: Nuno Sá @ 2024-10-28 14:10 UTC (permalink / raw) To: Krzysztof Kozlowski, Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley On Sat, 2024-10-26 at 20:14 +0200, Krzysztof Kozlowski wrote: > On 22/10/2024 08:42, Nuno Sá wrote: > > > > + $ref: /schemas/types.yaml#/definitions/uint8-array > > > > + oneOf: > > > > + - minItems: 13 > > > > + - minItems: 26 > > > > + - minItems: 39 > > > > > > and maxItems? > > > > Hmm, I had the idea that if maxItems was omitted, then it's the same as > > minItems? Because that's the intent... We can either have an array of 13, 26 or > > 39 entries. > > That's not the case and none of the files follow such logic. If you > manage to find one file, please correct or report it. > Okay... will add maxItems FWIW, playing with the DT example and validating the bindings works (and fails) as expected when omitting maxItems. - Nuno Sá ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/4] ASoC: codecs: adau1373: drop patform_data 2024-10-21 13:46 [PATCH 0/4] ASoC: codecs: adau1373: drop platform data Nuno Sa 2024-10-21 13:46 ` [PATCH 1/4] ASoC: codecs: adau1373: add some kconfig text Nuno Sa 2024-10-21 13:46 ` [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec Nuno Sa @ 2024-10-21 13:46 ` Nuno Sa 2024-10-21 13:46 ` [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio Nuno Sa 3 siblings, 0 replies; 11+ messages in thread From: Nuno Sa @ 2024-10-21 13:46 UTC (permalink / raw) To: linux-sound, devicetree Cc: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley struct adau1373_platform_data" was not being used by any platform. Hence, drop it and move to firmware based support. All the configurations quirks present in the platform_data are now supported as firmware properties. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- include/sound/adau1373.h | 33 -------- sound/soc/codecs/adau1373.c | 180 ++++++++++++++++++++++++++++++++------------ 2 files changed, 132 insertions(+), 81 deletions(-) diff --git a/include/sound/adau1373.h b/include/sound/adau1373.h deleted file mode 100644 index 4c32ba1328eda75f405047ce0f920791f348b98c..0000000000000000000000000000000000000000 --- a/include/sound/adau1373.h +++ /dev/null @@ -1,33 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * Analog Devices ADAU1373 Audio Codec drive - * - * Copyright 2011 Analog Devices Inc. - * Author: Lars-Peter Clausen <lars@metafoo.de> - */ - -#ifndef __SOUND_ADAU1373_H__ -#define __SOUND_ADAU1373_H__ - -enum adau1373_micbias_voltage { - ADAU1373_MICBIAS_2_9V = 0, - ADAU1373_MICBIAS_2_2V = 1, - ADAU1373_MICBIAS_2_6V = 2, - ADAU1373_MICBIAS_1_8V = 3, -}; - -#define ADAU1373_DRC_SIZE 13 - -struct adau1373_platform_data { - bool input_differential[4]; - bool lineout_differential; - bool lineout_ground_sense; - - unsigned int num_drc; - uint8_t drc_setting[3][ADAU1373_DRC_SIZE]; - - enum adau1373_micbias_voltage micbias1; - enum adau1373_micbias_voltage micbias2; -}; - -#endif diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c index a910e252aa1265aa44fbd944f666a6f7ad16dc24..9568ff933e12ba939134a696c8d9c16a2ef04795 100644 --- a/sound/soc/codecs/adau1373.c +++ b/sound/soc/codecs/adau1373.c @@ -10,6 +10,7 @@ #include <linux/init.h> #include <linux/delay.h> #include <linux/pm.h> +#include <linux/property.h> #include <linux/i2c.h> #include <linux/slab.h> @@ -18,7 +19,6 @@ #include <sound/pcm_params.h> #include <sound/tlv.h> #include <sound/soc.h> -#include <sound/adau1373.h> #include "adau1373.h" #include "adau-utils.h" @@ -30,9 +30,28 @@ struct adau1373_dai { bool clock_provider; }; +enum adau1373_micbias_voltage { + ADAU1373_MICBIAS_2_9V, + ADAU1373_MICBIAS_2_2V, + ADAU1373_MICBIAS_2_6V, + ADAU1373_MICBIAS_1_8V, +}; + +#define ADAU1373_DRC_SIZE 13 + struct adau1373 { struct regmap *regmap; struct adau1373_dai dais[3]; + + bool input_differential[4]; + bool lineout_differential; + bool lineout_ground_sense; + + unsigned int num_drc; + u8 drc_setting[3][ADAU1373_DRC_SIZE]; + + enum adau1373_micbias_voltage micbias1; + enum adau1373_micbias_voltage micbias2; }; #define ADAU1373_INPUT_MODE 0x00 @@ -1332,66 +1351,61 @@ static void adau1373_load_drc_settings(struct adau1373 *adau1373, regmap_write(adau1373->regmap, ADAU1373_DRC(nr) + i, drc[i]); } -static bool adau1373_valid_micbias(enum adau1373_micbias_voltage micbias) +static int adau1373_get_micbias(unsigned int val, + enum adau1373_micbias_voltage *micbias) { - switch (micbias) { - case ADAU1373_MICBIAS_2_9V: - case ADAU1373_MICBIAS_2_2V: - case ADAU1373_MICBIAS_2_6V: - case ADAU1373_MICBIAS_1_8V: - return true; + switch (val) { + case 2900000: + *micbias = ADAU1373_MICBIAS_2_9V; + return 0; + case 2200000: + *micbias = ADAU1373_MICBIAS_2_2V; + return 0; + case 2600000: + *micbias = ADAU1373_MICBIAS_2_6V; + return 0; + case 1800000: + *micbias = ADAU1373_MICBIAS_1_8V; + return 0; default: - break; + return -EINVAL; } - return false; } static int adau1373_probe(struct snd_soc_component *component) { struct adau1373 *adau1373 = snd_soc_component_get_drvdata(component); - struct adau1373_platform_data *pdata = component->dev->platform_data; - bool lineout_differential = false; unsigned int val; int i; - if (pdata) { - if (pdata->num_drc > ARRAY_SIZE(pdata->drc_setting)) - return -EINVAL; - - if (!adau1373_valid_micbias(pdata->micbias1) || - !adau1373_valid_micbias(pdata->micbias2)) - return -EINVAL; - - for (i = 0; i < pdata->num_drc; ++i) { - adau1373_load_drc_settings(adau1373, i, - pdata->drc_setting[i]); - } - - snd_soc_add_component_controls(component, adau1373_drc_controls, - pdata->num_drc); - - val = 0; - for (i = 0; i < 4; ++i) { - if (pdata->input_differential[i]) - val |= BIT(i); - } - regmap_write(adau1373->regmap, ADAU1373_INPUT_MODE, val); - - val = 0; - if (pdata->lineout_differential) - val |= ADAU1373_OUTPUT_CTRL_LDIFF; - if (pdata->lineout_ground_sense) - val |= ADAU1373_OUTPUT_CTRL_LNFBEN; - regmap_write(adau1373->regmap, ADAU1373_OUTPUT_CTRL, val); - - lineout_differential = pdata->lineout_differential; - - regmap_write(adau1373->regmap, ADAU1373_EP_CTRL, - (pdata->micbias1 << ADAU1373_EP_CTRL_MICBIAS1_OFFSET) | - (pdata->micbias2 << ADAU1373_EP_CTRL_MICBIAS2_OFFSET)); + for (i = 0; i < adau1373->num_drc; ++i) { + adau1373_load_drc_settings(adau1373, i, + adau1373->drc_setting[i]); } - if (!lineout_differential) { + snd_soc_add_component_controls(component, adau1373_drc_controls, + adau1373->num_drc); + + val = 0; + for (i = 0; i < ARRAY_SIZE(adau1373->input_differential); ++i) { + if (adau1373->input_differential[i]) + val |= BIT(i); + } + regmap_write(adau1373->regmap, ADAU1373_INPUT_MODE, val); + + val = 0; + if (adau1373->lineout_differential) + val |= ADAU1373_OUTPUT_CTRL_LDIFF; + if (adau1373->lineout_ground_sense) + val |= ADAU1373_OUTPUT_CTRL_LNFBEN; + + regmap_write(adau1373->regmap, ADAU1373_OUTPUT_CTRL, val); + + regmap_write(adau1373->regmap, ADAU1373_EP_CTRL, + (adau1373->micbias1 << ADAU1373_EP_CTRL_MICBIAS1_OFFSET) | + (adau1373->micbias2 << ADAU1373_EP_CTRL_MICBIAS2_OFFSET)); + + if (!adau1373->lineout_differential) { snd_soc_add_component_controls(component, adau1373_lineout2_controls, ARRAY_SIZE(adau1373_lineout2_controls)); } @@ -1471,6 +1485,65 @@ static const struct snd_soc_component_driver adau1373_component_driver = { .endianness = 1, }; +static int adau1373_parse_fw(struct device *dev, struct adau1373 *adau1373) +{ + int ret, drc_count; + unsigned int val; + + if (device_property_present(dev, "adi,input1-differential")) + adau1373->input_differential[0] = true; + if (device_property_present(dev, "adi,input2-differential")) + adau1373->input_differential[1] = true; + if (device_property_present(dev, "adi,input3-differential")) + adau1373->input_differential[2] = true; + if (device_property_present(dev, "adi,input4-differential")) + adau1373->input_differential[3] = true; + + if (device_property_present(dev, "adi,lineout-differential")) + adau1373->lineout_differential = true; + if (device_property_present(dev, "adi,lineout-gnd-sense")) + adau1373->lineout_ground_sense = true; + + ret = device_property_read_u32(dev, "adi,micbias1-microvolt", &val); + if (!ret) { + ret = adau1373_get_micbias(val, &adau1373->micbias1); + if (ret) + return dev_err_probe(dev, ret, + "Failed to get micbias1(%u)\n", val); + } + + ret = device_property_read_u32(dev, "adi,micbias2-microvolt", &val); + if (!ret) { + ret = adau1373_get_micbias(val, &adau1373->micbias2); + if (ret) + return dev_err_probe(dev, ret, + "Failed to get micbias2(%u)\n", val); + } + + drc_count = device_property_count_u8(dev, "adi,drc-settings"); + if (drc_count < 0) + return 0; + if (drc_count % ADAU1373_DRC_SIZE != 0) + return dev_err_probe(dev, -EINVAL, + "DRC count(%u) not multiple of %u\n", + drc_count, ADAU1373_DRC_SIZE); + + adau1373->num_drc = drc_count / ADAU1373_DRC_SIZE; + if (adau1373->num_drc > ARRAY_SIZE(adau1373->drc_setting)) + return dev_err_probe(dev, -EINVAL, + "Too many DRC settings(%u)\n", + adau1373->num_drc); + + ret = device_property_read_u8_array(dev, "adi,drc-settings", + (u8 *)&adau1373->drc_setting[0], + drc_count); + if (ret) + return dev_err_probe(dev, ret, + "Failed to read DRC settings\n"); + + return 0; +} + static int adau1373_i2c_probe(struct i2c_client *client) { struct adau1373 *adau1373; @@ -1489,6 +1562,10 @@ static int adau1373_i2c_probe(struct i2c_client *client) dev_set_drvdata(&client->dev, adau1373); + ret = adau1373_parse_fw(&client->dev, adau1373); + if (ret) + return ret; + ret = devm_snd_soc_register_component(&client->dev, &adau1373_component_driver, adau1373_dai_driver, ARRAY_SIZE(adau1373_dai_driver)); @@ -1501,9 +1578,16 @@ static const struct i2c_device_id adau1373_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, adau1373_i2c_id); +static const struct of_device_id adau1373_of_match[] = { + { .compatible = "adi,adau1373", }, + { } +}; +MODULE_DEVICE_TABLE(of, adau1373_of_match); + static struct i2c_driver adau1373_i2c_driver = { .driver = { .name = "adau1373", + .of_match_table = adau1373_of_match, }, .probe = adau1373_i2c_probe, .id_table = adau1373_i2c_id, -- 2.47.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio 2024-10-21 13:46 [PATCH 0/4] ASoC: codecs: adau1373: drop platform data Nuno Sa ` (2 preceding siblings ...) 2024-10-21 13:46 ` [PATCH 3/4] ASoC: codecs: adau1373: drop patform_data Nuno Sa @ 2024-10-21 13:46 ` Nuno Sa 2024-10-21 15:30 ` Mark Brown 3 siblings, 1 reply; 11+ messages in thread From: Nuno Sa @ 2024-10-21 13:46 UTC (permalink / raw) To: linux-sound, devicetree Cc: Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley If the powerdown GPIO is specified, we use it for reset. Otherwise, fallback to a software reset. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- sound/soc/codecs/adau1373.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c index 9568ff933e12ba939134a696c8d9c16a2ef04795..d5566b4c444f3a8be07cc17fbdbb5fee1b6442e9 100644 --- a/sound/soc/codecs/adau1373.c +++ b/sound/soc/codecs/adau1373.c @@ -8,6 +8,7 @@ #include <linux/module.h> #include <linux/init.h> +#include <linux/gpio/consumer.h> #include <linux/delay.h> #include <linux/pm.h> #include <linux/property.h> @@ -1547,6 +1548,7 @@ static int adau1373_parse_fw(struct device *dev, struct adau1373 *adau1373) static int adau1373_i2c_probe(struct i2c_client *client) { struct adau1373 *adau1373; + struct gpio_desc *gpiod; int ret; adau1373 = devm_kzalloc(&client->dev, sizeof(*adau1373), GFP_KERNEL); @@ -1558,7 +1560,21 @@ static int adau1373_i2c_probe(struct i2c_client *client) if (IS_ERR(adau1373->regmap)) return PTR_ERR(adau1373->regmap); - regmap_write(adau1373->regmap, ADAU1373_SOFT_RESET, 0x00); + /* + * If the powerdown GPIO is specified, we use it for reset. Otherwise + * a software reset is done. + */ + gpiod = devm_gpiod_get_optional(&client->dev, "powerdown", + GPIOD_OUT_HIGH); + if (IS_ERR(gpiod)) + return PTR_ERR(gpiod); + + if (gpiod) { + gpiod_set_value_cansleep(gpiod, 0); + fsleep(10); + } else { + regmap_write(adau1373->regmap, ADAU1373_SOFT_RESET, 0x00); + } dev_set_drvdata(&client->dev, adau1373); -- 2.47.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio 2024-10-21 13:46 ` [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio Nuno Sa @ 2024-10-21 15:30 ` Mark Brown 2024-10-22 6:39 ` Nuno Sá 0 siblings, 1 reply; 11+ messages in thread From: Mark Brown @ 2024-10-21 15:30 UTC (permalink / raw) To: Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley [-- Attachment #1: Type: text/plain, Size: 246 bytes --] On Mon, Oct 21, 2024 at 03:46:48PM +0200, Nuno Sa wrote: > If the powerdown GPIO is specified, we use it for reset. Otherwise, > fallback to a software reset. Ideally we'd also put the device into reset when we unload, but that's not essential. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio 2024-10-21 15:30 ` Mark Brown @ 2024-10-22 6:39 ` Nuno Sá 0 siblings, 0 replies; 11+ messages in thread From: Nuno Sá @ 2024-10-22 6:39 UTC (permalink / raw) To: Mark Brown, Nuno Sa Cc: linux-sound, devicetree, Liam Girdwood, Jaroslav Kysela, Takashi Iwai, Lars-Peter Clausen, Rob Herring, Krzysztof Kozlowski, Conor Dooley On Mon, 2024-10-21 at 16:30 +0100, Mark Brown wrote: > On Mon, Oct 21, 2024 at 03:46:48PM +0200, Nuno Sa wrote: > > If the powerdown GPIO is specified, we use it for reset. Otherwise, > > fallback to a software reset. > > Ideally we'd also put the device into reset when we unload, but that's > not essential. Alright... I can do a v2 with that. Will just wait for some more feedback on the rest. - Nuno Sá ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-10-28 14:10 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-10-21 13:46 [PATCH 0/4] ASoC: codecs: adau1373: drop platform data Nuno Sa 2024-10-21 13:46 ` [PATCH 1/4] ASoC: codecs: adau1373: add some kconfig text Nuno Sa 2024-10-21 13:46 ` [PATCH 2/4] ASoC: dt-bindings: document the adau1373 Codec Nuno Sa 2024-10-22 6:06 ` Krzysztof Kozlowski 2024-10-22 6:42 ` Nuno Sá 2024-10-26 18:14 ` Krzysztof Kozlowski 2024-10-28 14:10 ` Nuno Sá 2024-10-21 13:46 ` [PATCH 3/4] ASoC: codecs: adau1373: drop patform_data Nuno Sa 2024-10-21 13:46 ` [PATCH 4/4] ASoC: codecs: adau1373: add powerdown gpio Nuno Sa 2024-10-21 15:30 ` Mark Brown 2024-10-22 6:39 ` Nuno Sá
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).