Message ID | 20250206163152.423199-4-francesco@dolcini.it (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ASoC: wm8904: Add DMIC and DRC support | expand |
On Thu, Feb 06, 2025 at 05:31:50PM +0100, Francesco Dolcini wrote: > From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com> > > Add two properties to select the IN1L/DMICDAT1 and IN2R/DMICDAT2 > functionality: > - wlf,in1l-as-dmicdat1 > - wlf,in1r-as-dmicdat2 > > Add a property to describe the GPIO configuration registers, that can be > used to set the four multifunction pins: > - wlf,gpio-cfg > > Add a property to describe the mic bias control registers: > - wlf,mic-cfg > > Add two properties to describe the Dynamic Range Controller (DRC), > allowing multiple named configurations where each config sets the 4 DRC > registers (R40-R43): > - wlf,drc-cfg-regs > - wlf,drc-cfg-names > > Add three properties to describe the equalizer (ReTune Mobile), allowing > multiple named configurations (associated with a samplerate) that set > the 24 (R134-R157) EQ registers: > - wlf,retune-mobile-cfg-regs > - wlf,retune-mobile-cfg-names > - wlf,retune-mobile-cfg-rates > > Datasheet: https://statics.cirrus.com/pubs/proDatasheet/WM8904_Rev4.1.pdf > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com> > Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> > --- > .../devicetree/bindings/sound/wlf,wm8904.yaml | 88 +++++++++++++++++++ > 1 file changed, 88 insertions(+) > > diff --git a/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml b/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml > index 329260cf0fa0..b89d9db02848 100644 > --- a/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml > +++ b/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml > @@ -38,6 +38,74 @@ properties: > DCVDD-supply: true > MICVDD-supply: true > > + wlf,in1l-as-dmicdat1: > + type: boolean > + description: > + Use IN1L/DMICDAT1 as DMICDAT1, enabling the DMIC input path. > + > + wlf,in1r-as-dmicdat2: > + type: boolean > + description: > + Use IN1R/DMICDAT2 as DMICDAT2, enabling the DMIC input path. > + > + wlf,gpio-cfg: > + $ref: /schemas/types.yaml#/definitions/uint32-array > + minItems: 4 > + maxItems: 4 > + description: > + Default register values for R121/122/123/124 (GPIO Control). > + If any entry has the value 0xFFFF, the related register won't be set. > + default: [0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF] > + > + wlf,mic-cfg: > + $ref: /schemas/types.yaml#/definitions/uint32-array > + minItems: 2 > + maxItems: 2 > + description: > + Default register values for R6/R7 (Mic Bias Control). > + default: [0, 0] > + > + wlf,drc-cfg-names: > + $ref: /schemas/types.yaml#/definitions/string-array > + description: > + List of strings for the available DRC modes. > + If absent, DRC is disabled. > + > + wlf,drc-cfg-regs: > + $ref: /schemas/types.yaml#/definitions/uint16-array > + description: > + Default register values for R40/41/42/43 (DRC). > + The list must be 4 times the length of wlf,drc-cfg-names. > + If absent, DRC is disabled. > + > + wlf,retune-mobile-cfg-names: > + $ref: /schemas/types.yaml#/definitions/string-array > + description: > + List of strings for the available retune modes. > + If absent, retune is disabled. Is there no defined set of names? > + > + wlf,retune-mobile-cfg-rates: > + $ref: /schemas/types.yaml#/definitions/uint32-array > + description: > + List of rates for the available retune modes. > + The list must be the same length as wlf,retune-mobile-cfg-names. > + If absent, retune is disabled. > + > + wlf,retune-mobile-cfg-regs: > + $ref: /schemas/types.yaml#/definitions/uint16-array > + description: > + Default register values for R134/.../157 (EQ). > + The list must be 24 times the length of wlf,retune-mobile-cfg-names. > + If absent, retune is disabled. > + > +dependencies: > + wlf,drc-cfg-names: [ 'wlf,drc-cfg-regs' ] > + wlf,drc-cfg-regs: [ 'wlf,drc-cfg-names' ] > + > + wlf,retune-mobile-cfg-names: [ 'wlf,retune-mobile-cfg-rates', 'wlf,retune-mobile-cfg-regs' ] > + wlf,retune-mobile-cfg-regs: [ 'wlf,retune-mobile-cfg-names', 'wlf,retune-mobile-cfg-rates' ] > + wlf,retune-mobile-cfg-rates: [ 'wlf,retune-mobile-cfg-names', 'wlf,retune-mobile-cfg-regs' ] I'm not really a fan of these long lists of properties, but codecs and touchscreens seem to need a bunch of parameters. > + > required: > - compatible > - reg > @@ -70,5 +138,25 @@ examples: > DBVDD-supply = <®_1p8v>; > DCVDD-supply = <®_1p8v>; > MICVDD-supply = <®_1p8v>; > + > + wlf,drc-cfg-names = "default", "peaklimiter", "tradition", "soft", "music"; > + wlf,drc-cfg-regs = > + /* coded default: KNEE_IP = KNEE_OP = 0, HI_COMP = LO_COMP = 1 */ > + /bits/ 16 <0x01af 0x3248 0x0000 0x0000>, > + /* coded default: KNEE_IP = -24, KNEE_OP = -6, HI_COMP = 1/4, LO_COMP = 1 */ > + /bits/ 16 <0x04af 0x324b 0x0010 0x0408>, > + /* coded default: KNEE_IP = -42, KNEE_OP = -3, HI_COMP = 0, LO_COMP = 1 */ > + /bits/ 16 <0x04af 0x324b 0x0028 0x0704>, > + /* coded default: KNEE_IP = -45, KNEE_OP = -9, HI_COMP = 1/8, LO_COMP = 1 */ > + /bits/ 16 <0x04af 0x324b 0x0018 0x078c>, > + /* coded default: KNEE_IP = -30, KNEE_OP = -10.5, HI_COMP = 1/4, LO_COMP = 1 */ > + /bits/ 16 <0x04af 0x324b 0x0010 0x050e>; > + > + wlf,gpio-cfg = < > + 0x0018 /* GPIO1 => DMIC_CLK */ > + 0xffff /* GPIO2 => don't touch */ > + 0xffff /* GPIO3 => don't touch */ > + 0xffff /* GPIO4 => don't touch */ > + >; Please make your example full and add all the optional properties. > }; > }; > -- > 2.39.5 >
On Tue, Feb 11, 2025 at 04:19:04PM -0600, Rob Herring wrote: > On Thu, Feb 06, 2025 at 05:31:50PM +0100, Francesco Dolcini wrote: > > + wlf,retune-mobile-cfg-names: > > + $ref: /schemas/types.yaml#/definitions/string-array > > + description: > > + List of strings for the available retune modes. > > + If absent, retune is disabled. > Is there no defined set of names? No, this set of names is for system integrator specified tunings so they can make up whatever is appropriate for their system and use cases (or otherwise amuses them). The names will end up getting exposed directly to userspace as options that can be selected at runtime.
On Thu, Feb 06, 2025 at 05:31:50PM +0100, Francesco Dolcini wrote: > From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com> > > Add two properties to select the IN1L/DMICDAT1 and IN2R/DMICDAT2 > functionality: > - wlf,in1l-as-dmicdat1 > - wlf,in1r-as-dmicdat2 > > Add a property to describe the GPIO configuration registers, that can be > used to set the four multifunction pins: > - wlf,gpio-cfg > > Add a property to describe the mic bias control registers: > - wlf,mic-cfg > > Add two properties to describe the Dynamic Range Controller (DRC), > allowing multiple named configurations where each config sets the 4 DRC > registers (R40-R43): > - wlf,drc-cfg-regs > - wlf,drc-cfg-names > > Add three properties to describe the equalizer (ReTune Mobile), allowing > multiple named configurations (associated with a samplerate) that set > the 24 (R134-R157) EQ registers: > - wlf,retune-mobile-cfg-regs > - wlf,retune-mobile-cfg-names > - wlf,retune-mobile-cfg-rates > > Datasheet: https://statics.cirrus.com/pubs/proDatasheet/WM8904_Rev4.1.pdf > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com> > Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> > --- Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Thanks, Charles
diff --git a/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml b/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml index 329260cf0fa0..b89d9db02848 100644 --- a/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml +++ b/Documentation/devicetree/bindings/sound/wlf,wm8904.yaml @@ -38,6 +38,74 @@ properties: DCVDD-supply: true MICVDD-supply: true + wlf,in1l-as-dmicdat1: + type: boolean + description: + Use IN1L/DMICDAT1 as DMICDAT1, enabling the DMIC input path. + + wlf,in1r-as-dmicdat2: + type: boolean + description: + Use IN1R/DMICDAT2 as DMICDAT2, enabling the DMIC input path. + + wlf,gpio-cfg: + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 4 + maxItems: 4 + description: + Default register values for R121/122/123/124 (GPIO Control). + If any entry has the value 0xFFFF, the related register won't be set. + default: [0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF] + + wlf,mic-cfg: + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 2 + maxItems: 2 + description: + Default register values for R6/R7 (Mic Bias Control). + default: [0, 0] + + wlf,drc-cfg-names: + $ref: /schemas/types.yaml#/definitions/string-array + description: + List of strings for the available DRC modes. + If absent, DRC is disabled. + + wlf,drc-cfg-regs: + $ref: /schemas/types.yaml#/definitions/uint16-array + description: + Default register values for R40/41/42/43 (DRC). + The list must be 4 times the length of wlf,drc-cfg-names. + If absent, DRC is disabled. + + wlf,retune-mobile-cfg-names: + $ref: /schemas/types.yaml#/definitions/string-array + description: + List of strings for the available retune modes. + If absent, retune is disabled. + + wlf,retune-mobile-cfg-rates: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: + List of rates for the available retune modes. + The list must be the same length as wlf,retune-mobile-cfg-names. + If absent, retune is disabled. + + wlf,retune-mobile-cfg-regs: + $ref: /schemas/types.yaml#/definitions/uint16-array + description: + Default register values for R134/.../157 (EQ). + The list must be 24 times the length of wlf,retune-mobile-cfg-names. + If absent, retune is disabled. + +dependencies: + wlf,drc-cfg-names: [ 'wlf,drc-cfg-regs' ] + wlf,drc-cfg-regs: [ 'wlf,drc-cfg-names' ] + + wlf,retune-mobile-cfg-names: [ 'wlf,retune-mobile-cfg-rates', 'wlf,retune-mobile-cfg-regs' ] + wlf,retune-mobile-cfg-regs: [ 'wlf,retune-mobile-cfg-names', 'wlf,retune-mobile-cfg-rates' ] + wlf,retune-mobile-cfg-rates: [ 'wlf,retune-mobile-cfg-names', 'wlf,retune-mobile-cfg-regs' ] + required: - compatible - reg @@ -70,5 +138,25 @@ examples: DBVDD-supply = <®_1p8v>; DCVDD-supply = <®_1p8v>; MICVDD-supply = <®_1p8v>; + + wlf,drc-cfg-names = "default", "peaklimiter", "tradition", "soft", "music"; + wlf,drc-cfg-regs = + /* coded default: KNEE_IP = KNEE_OP = 0, HI_COMP = LO_COMP = 1 */ + /bits/ 16 <0x01af 0x3248 0x0000 0x0000>, + /* coded default: KNEE_IP = -24, KNEE_OP = -6, HI_COMP = 1/4, LO_COMP = 1 */ + /bits/ 16 <0x04af 0x324b 0x0010 0x0408>, + /* coded default: KNEE_IP = -42, KNEE_OP = -3, HI_COMP = 0, LO_COMP = 1 */ + /bits/ 16 <0x04af 0x324b 0x0028 0x0704>, + /* coded default: KNEE_IP = -45, KNEE_OP = -9, HI_COMP = 1/8, LO_COMP = 1 */ + /bits/ 16 <0x04af 0x324b 0x0018 0x078c>, + /* coded default: KNEE_IP = -30, KNEE_OP = -10.5, HI_COMP = 1/4, LO_COMP = 1 */ + /bits/ 16 <0x04af 0x324b 0x0010 0x050e>; + + wlf,gpio-cfg = < + 0x0018 /* GPIO1 => DMIC_CLK */ + 0xffff /* GPIO2 => don't touch */ + 0xffff /* GPIO3 => don't touch */ + 0xffff /* GPIO4 => don't touch */ + >; }; };