mbox series

[v3,00/16] Support external boost at CS35l41 ASoC driver

Message ID 20220308171730.454587-1-tanureal@opensource.cirrus.com
Headers show
Series Support external boost at CS35l41 ASoC driver | expand

Message

Lucas tanure March 8, 2022, 5:17 p.m. UTC
Move the support for CS35L41 external boost to its shared library
for ASoC use.
This move resulted in cs35l41_hda_reg_sequence being removed,
and its steps were broken down into regmap writes or functions
from the library. And hardware configuration struct was unified
for its use in the shared lib.
While at it, some minor bugs were found and fixed it.

v3 changelog:
 - Remove patches already accepted
 - Improved logic in documentation patch
 - Documentation patch goes before its code
 - Fixed missing Signed-off-by
 - Fixed subject for HDA patches

v2 changelog:
 - Instead of removing the log, playback actions will log the last regmap access.
 - Documentation patch with the correct subject line and fixed bug reported by Rob Herring on the
 provided example.

Previous versions:
 v1: https://lkml.org/lkml/2022/3/3/759
 v2: https://lkml.org/lkml/2022/3/4/743

David Rhodes (1):
  ASoC: dt-bindings: cs35l41: Document CS35l41 External Boost

Lucas Tanure (15):
  sound: cs35l41: Unify hardware configuration
  sound: cs35l41: Check hw_config before using it
  sound: cs35l41: Move cs35l41_gpio_config to shared lib
  ALSA: hda: cs35l41: Fix I2S params comments
  ALSA: hda: cs35l41: Always configure the DAI
  ALSA: hda: cs35l41: Add Boost type flag
  hda: cs35l41: Put the device into safe mode for external boost
  hda: cs35l41: Mute the device before shutdown
  sound: cs35l41: Enable Internal Boost in shared lib
  ALSA: hda: cs35l41: Move boost config to initialization code
  ALSA: hda: cs35l41: Remove cs35l41_hda_reg_sequence struct
  ALSA: hda: cs35l41: Reorganize log for playback actions
  ALSA: hda: cs35l41: Handle all external boost setups the same way
  ALSA: hda: cs35l41: Move external boost handling to lib for ASoC use
  ASoC: cs35l41: Support external boost

 .../bindings/sound/cirrus,cs35l41.yaml        |  44 ++-
 include/sound/cs35l41.h                       |  53 +++-
 sound/pci/hda/cs35l41_hda.c                   | 295 ++++++------------
 sound/pci/hda/cs35l41_hda.h                   |  27 +-
 sound/soc/codecs/cs35l41-i2c.c                |   4 +-
 sound/soc/codecs/cs35l41-lib.c                | 190 ++++++++++-
 sound/soc/codecs/cs35l41-spi.c                |   4 +-
 sound/soc/codecs/cs35l41.c                    | 166 +++++-----
 sound/soc/codecs/cs35l41.h                    |   5 +-
 9 files changed, 437 insertions(+), 351 deletions(-)

Comments

Lucas tanure March 9, 2022, 9:28 a.m. UTC | #1
On 3/9/22 01:20, Rob Herring wrote:
> On Tue, Mar 08, 2022 at 05:17:29PM +0000, Lucas Tanure wrote:
>> From: David Rhodes <drhodes@opensource.cirrus.com>
>>
>> Document internal and external boost feature for ASoC CS35L41.
>> For internal boost the following properties are required:
>> - cirrus,boost-peak-milliamp
>> - cirrus,boost-ind-nanohenry
>> - cirrus,boost-cap-microfarad
>>
>> For external boost, the GPIO1 must be configured as output,
>> so the following properties are required:
>> - cirrus,gpio1-src-select = <1>
>> - cirrus,gpio1-output-enable
>>
>> Signed-off-by: David Rhodes <drhodes@opensource.cirrus.com>
>> Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
>> ---
>>   .../bindings/sound/cirrus,cs35l41.yaml        | 44 +++++++++++++++++--
>>   1 file changed, 41 insertions(+), 3 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml b/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml
>> index 3235702ce402..09b515924c59 100644
>> --- a/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml
>> +++ b/Documentation/devicetree/bindings/sound/cirrus,cs35l41.yaml
>> @@ -75,6 +75,19 @@ properties:
>>       maximum: 3
>>       default: 2
>>   
>> +  cirrus,boost-type:
>> +    description:
>> +      Configures the type of Boost being used.
>> +      Internal boost requires boost-peak-milliamp, boost-ind-nanohenry and
>> +      boost-cap-microfarad.
>> +      External Boost must have GPIO1 as GPIO output. GPIO1 will be set high to
>> +      enable boost voltage.
>> +      0 = Internal Boost
>> +      1 = External Boost
>> +    $ref: "/schemas/types.yaml#/definitions/uint32"
>> +    minimum: 0
>> +    maximum: 1
> 
> What does not present mean? Might be better to make this boolean depending
> on what you are trying to accomplish.
Not present means Internal boost. There will be other types of boost in 
the future, so I would like to keep it as is.

> 
>> +
>>     cirrus,gpio1-polarity-invert:
>>       description:
>>         Boolean which specifies whether the GPIO1
>> @@ -131,9 +144,32 @@ required:
>>     - compatible
>>     - reg
>>     - "#sound-dai-cells"
>> -  - cirrus,boost-peak-milliamp
>> -  - cirrus,boost-ind-nanohenry
>> -  - cirrus,boost-cap-microfarad
>> +
>> +allOf:
>> +  - if:
>> +      properties:
>> +        cirrus,boost-type:
>> +            const: 0
> 
> Note that this will be true if cirrus,boost-type is not present. You
> probably want to add 'required'.
Yes, that's expected. We want to continue to support old device trees 
without boost type, and for that case it sets to internal boost.

> 
>> +    then:
>> +      required:
>> +        - cirrus,boost-peak-milliamp
>> +        - cirrus,boost-ind-nanohenry
>> +        - cirrus,boost-cap-microfarad
>> +    else:
>> +      if:
>> +        properties:
>> +          cirrus,boost-type:
>> +            const: 1
>> +      then:
>> +        required:
>> +          - cirrus,gpio1-output-enable
>> +          - cirrus,gpio1-src-select
>> +        properties:
>> +          cirrus,boost-peak-milliamp: false
>> +          cirrus,boost-ind-nanohenry: false
>> +          cirrus,boost-cap-microfarad: false
>> +          cirrus,gpio1-src-select:
>> +            enum: [1]
>>   
>>   additionalProperties: false
>>   
>> @@ -150,6 +186,8 @@ examples:
>>             VA-supply = <&dummy_vreg>;
>>             VP-supply = <&dummy_vreg>;
>>             reset-gpios = <&gpio 110 0>;
>> +
>> +          cirrus,boost-type = <0>;
>>             cirrus,boost-peak-milliamp = <4500>;
>>             cirrus,boost-ind-nanohenry = <1000>;
>>             cirrus,boost-cap-microfarad = <15>;
>> -- 
>> 2.35.1
>>
>>