mbox series

[v3,0/6] Add support for Rpi4b + Cirrus Lochnagar2 and CS47L15

Message ID 20201217154142.24301-1-rf@opensource.cirrus.com
Headers show
Series Add support for Rpi4b + Cirrus Lochnagar2 and CS47L15 | expand

Message

Richard Fitzgerald Dec. 17, 2020, 3:41 p.m. UTC
This set of patches provides support for using the Raspberry Pi 4b with
a Cirrus Logic Lochnagar 2 audio development platform plus Cirrus Logic
CS47L15 codec.

Patches are needed to audio-graph-card to enable support for setting the
component sysclks and plls. These are not specific to CS47L15 - several
Cirrus and non-Cirrus codecs also require component clock setup, typically
for larger codecs with multiple internal clocking options and clock domains.

The codec sysclks and plls cannot be placed under the clock framework because
they are typically I2C/SPI/Soundwire-connected peripherals and access to the
registers would cause a nested get of the bus clock. The clock framework does
not support this and it would result in a deadlock.

Richard Fitzgerald (6):
  of: base: Add of_count_phandle_with_fixed_args()
  ASoC: audio-graph-card: Add plls and sysclks DT bindings
  ASoC: audio-graph-card: Support setting component plls and sysclks
  ASoC: madera: Allow codecs to be selected from kernel config
  ASoC: madera: Export clock config defines to dt-bindings
  ARM: dts: Add dts for RPi4b + Cirrus Logic Lochnagar2 + CS47L15

 .../bindings/sound/audio-graph-card.txt       |  72 ++++++
 MAINTAINERS                                   |   1 +
 arch/arm/boot/dts/Makefile                    |   1 +
 ...bcm2711-rpi4b-cirrus-lochnagar-cs47l15.dts | 186 ++++++++++++++
 .../dts/bcm2711-rpi4b-cirrus-lochnagar.dtsi   | 201 +++++++++++++++
 drivers/of/base.c                             |  73 ++++--
 include/dt-bindings/sound/madera.h            |  60 +++++
 include/linux/of.h                            |   9 +
 include/sound/simple_card_utils.h             |  25 ++
 sound/soc/codecs/Kconfig                      |  10 +-
 sound/soc/codecs/madera.h                     |  56 +----
 sound/soc/generic/audio-graph-card.c          |  16 +-
 sound/soc/generic/simple-card-utils.c         | 236 ++++++++++++++++++
 13 files changed, 861 insertions(+), 85 deletions(-)
 create mode 100644 arch/arm/boot/dts/bcm2711-rpi4b-cirrus-lochnagar-cs47l15.dts
 create mode 100644 arch/arm/boot/dts/bcm2711-rpi4b-cirrus-lochnagar.dtsi

Comments

Florian Fainelli Dec. 17, 2020, 5:11 p.m. UTC | #1
On 12/17/20 7:41 AM, 'Richard Fitzgerald' via
BCM-KERNEL-FEEDBACK-LIST,PDL wrote:
> This adds a devicetree configuration for Raspberry Pi 4b connected to
> Cirrus Logic Lochnagar 2 audio development board and CS47L15 codec.
> 
> The common (codec-independent) Lochnagar 2 configuration is separated
> into a dtsi to simplify re-using it for other codecs.
> 
> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
> ---
>  MAINTAINERS                                   |   1 +
>  arch/arm/boot/dts/Makefile                    |   1 +
>  ...bcm2711-rpi4b-cirrus-lochnagar-cs47l15.dts | 186 ++++++++++++++++
>  .../dts/bcm2711-rpi4b-cirrus-lochnagar.dtsi   | 201 ++++++++++++++++++
>  4 files changed, 389 insertions(+)
>  create mode 100644 arch/arm/boot/dts/bcm2711-rpi4b-cirrus-lochnagar-cs47l15.dts
>  create mode 100644 arch/arm/boot/dts/bcm2711-rpi4b-cirrus-lochnagar.dtsi
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 5cc595ac7b28..7dca1db52144 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -4193,6 +4193,7 @@ M:	Charles Keepax <ckeepax@opensource.cirrus.com>
>  M:	Richard Fitzgerald <rf@opensource.cirrus.com>
>  L:	patches@opensource.cirrus.com
>  S:	Supported
> +F:	arch/arm/boot/dts/bcm2711-rpi4b-cirrus-lochnagar*
>  F:	Documentation/devicetree/bindings/clock/cirrus,lochnagar.yaml
>  F:	Documentation/devicetree/bindings/hwmon/cirrus,lochnagar.yaml
>  F:	Documentation/devicetree/bindings/mfd/cirrus,lochnagar.yaml
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index ce66ffd5a1bb..240cc58fd954 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -93,6 +93,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
>  	bcm2837-rpi-3-b-plus.dtb \
>  	bcm2837-rpi-cm3-io3.dtb \
>  	bcm2711-rpi-4-b.dtb \
> +	bcm2711-rpi4b-cirrus-lochnagar-cs47l15.dtb \

Is there a reason you are not following the convention established above
and have this file be named: bcm2711-rpi-4-b-cirrus-lochnagar-cs47l15.dtb?
Kuninori Morimoto Dec. 18, 2020, 12:03 a.m. UTC | #2
Hi Richard

Thank you for your patch.
This is v3 patch, but I think this is the first time for me
to receive patch...

> Some codecs need plls and/or sysclks to be configured using the
> snd_soc_component_set_[sysclk|pll] functions. These drivers cannot
> necessarily be converted to use the clock framework. If the codec is on
> a I2C/SPI bus, a nested clk_get would be needed to enable the bus clock.
> But the clock framework does not support nested operations and this would
> deadlock.
> 
> This patch adds new dt properties that list phandles of components with
> the pll/sysclk settings to be applied. Multiple settings can be given for
> the same phandle to allow for components with multiple clocks and plls.
> The plls and sysclks are enabled when the card bias level moves to STANDBY
> and disabled when it moves to OFF.
> 
> The implementation does not attempt to handle specifying complex clock
> ordering interdependencies between components. The plls and sysclks are
> applied to a component as it is passed to the card set_bias_level/
> set_bias_level_post callbacks. It follows from this that the order
> components are configured is the order that they are passed to those
> callbacks.
> 
> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
> ---
>  include/sound/simple_card_utils.h     |  25 +++
>  sound/soc/generic/audio-graph-card.c  |  16 +-
>  sound/soc/generic/simple-card-utils.c | 236 ++++++++++++++++++++++++++
>  3 files changed, 275 insertions(+), 2 deletions(-)

I understand that you need sysclk/pll and .set_bias_level_xxx().
But I guess makes it generic code is difficult (?).
Thus, as Sameer doing on Tegra, creating custom audio-graph-card is better
idea for you ?

# Now I'm creating new audio-graph-card2 which also supports
# overwriting/customizing each/all functions.
# It is not full compatible with audio-graph-card, but almost same if you
# uses normal connection.
# I hope I can post it next year

Thank you for your help !!

Best regards
---
Kuninori Morimoto
Richard Fitzgerald Dec. 21, 2020, 10:38 a.m. UTC | #3
On 18/12/2020 00:03, Kuninori Morimoto wrote:
> 
> Hi Richard
> 
> Thank you for your patch.
> This is v3 patch, but I think this is the first time for me
> to receive patch...

Yes sorry.
Somehow I missed you off V1 and V2 emails.

> 
>> Some codecs need plls and/or sysclks to be configured using the
>> snd_soc_component_set_[sysclk|pll] functions. These drivers cannot
>> necessarily be converted to use the clock framework. If the codec is on
>> a I2C/SPI bus, a nested clk_get would be needed to enable the bus clock.
>> But the clock framework does not support nested operations and this would
>> deadlock.
>>
>> This patch adds new dt properties that list phandles of components with
>> the pll/sysclk settings to be applied. Multiple settings can be given for
>> the same phandle to allow for components with multiple clocks and plls.
>> The plls and sysclks are enabled when the card bias level moves to STANDBY
>> and disabled when it moves to OFF.
>>
>> The implementation does not attempt to handle specifying complex clock
>> ordering interdependencies between components. The plls and sysclks are
>> applied to a component as it is passed to the card set_bias_level/
>> set_bias_level_post callbacks. It follows from this that the order
>> components are configured is the order that they are passed to those
>> callbacks.
>>
>> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
>> ---
>>   include/sound/simple_card_utils.h     |  25 +++
>>   sound/soc/generic/audio-graph-card.c  |  16 +-
>>   sound/soc/generic/simple-card-utils.c | 236 ++++++++++++++++++++++++++
>>   3 files changed, 275 insertions(+), 2 deletions(-)
> 
> I understand that you need sysclk/pll and .set_bias_level_xxx().
> But I guess makes it generic code is difficult (?).
> Thus, as Sameer doing on Tegra, creating custom audio-graph-card is better
> idea for you ?
> 
> # Now I'm creating new audio-graph-card2 which also supports
> # overwriting/customizing each/all functions.
> # It is not full compatible with audio-graph-card, but almost same if you
> # uses normal connection.
> # I hope I can post it next year
> 
> Thank you for your help !!
> 
> Best regards
> ---
> Kuninori Morimoto
>