mbox series

[v5,00/18] ASoC: Cleanup MediaTek soundcard machine drivers

Message ID 20240416071410.75620-1-angelogioacchino.delregno@collabora.com
Headers show
Series ASoC: Cleanup MediaTek soundcard machine drivers | expand

Message

AngeloGioacchino Del Regno April 16, 2024, 7:13 a.m. UTC
Changes in v5:
 - Cleaned up MT8186 soundcard migration commit which erroneously
   had leftovers from development
 - Changed the mtk_pcm_constraints_data structure to hold pointers
   to snd_pcm_hw_constraint_list, as to really reuse the const data
 - Tested again on all of the listed MTK platforms.

Changes in v4:
 - Rebased over next-20240409
 - Dropped the first 4 patches from v3 as were already picked by Mark
 - Fixed W=1 build issue

Changes in v3:
 - Added audio-routing names in enum in all yaml files
 - Added mention of disallowing old and new properties together in
   commit message of bindings patches
 - Fixed validation errors with sound-card-common.yaml inclusion
   due to missing model property in examples
 - Removed `else` enforcing headset-codec/speaker-codecs requirement
   if xxx-dai-link not present to avoid future commit noise as the
   deprecated statement will disallow deprecated properties as required

Changes in v2:
 - Bindings: Changed link-name/codec/clk-provider to remove `items`
   and leave just the enum
 - Moved .*-dai-link pattern additionalProperties after `type: object`
 - Added ref to sound-card-common.yaml
 - Fixed dai-link-xxx -> xxx-dai-link typo in example comment

This series performs a cleanup of most of the MediaTek AFE drivers and
soundcard machine drivers, reducing code duplication and setting a base
to be consistent with their devicetree bindings, as many of those are
using different properties and nodes for no good reason.

Summarizing:
 - Commonizes functions and ops where possible
 - Adds a common probe mechanism, increasing maintainability of
   soundcard drivers for older MediaTek SoCs
 - Migrates all drivers to support the new bindings
   - Obviously retains compatibility with old device trees
 - Reduces machine-specific parameters hardcoding in drivers
   - Can now set machine-specific params in device tree
   - Uses the `audio-routing` and `dai-link` nodes like some
     other non-MediaTek SoC sound drivers
 - Imposes consistency between MediaTek ASoC machine soundcard
   drivers bindings
 - Reduces code size and greatly reduces the amount of code that
   will be required for newer drivers (retaining compatibility with
   the old bindings was costly in terms of code size, otherwise
   this series would've removed ~1000 more lines, or something
   along that line).

This series was (manually) tested on MT8173, MT8192, MT8195 and MT8186
Chromebooks.


AngeloGioacchino Del Regno (18):
  ASoC: mediatek: Add common machine soundcard driver probe mechanism
  ASoC: mediatek: common: Constify struct mtk_sof_priv
  ASoC: mediatek: mt8188: Migrate to mtk_soundcard_common_probe
  ASoC: mediatek: mt8195: Migrate to mtk_soundcard_common_probe
  ASoC: mediatek: mt8192: Migrate to mtk_soundcard_common_probe
  ASoC: mediatek: mt8186: Migrate to mtk_soundcard_common_probe
  ASoC: mediatek: Add common snd_soc_ops .startup() callback
  ASoC: mediatek: mt8195: Migrate to the common mtk_soundcard_startup
  ASoC: mediatek: mt8192: Migrate to the common mtk_soundcard_startup
  ASoC: mediatek: mt8186-rt1019: Migrate to the common
    mtk_soundcard_startup
  ASoC: mediatek: Add common mtk_afe_component_probe callback
  ASoC: mediatek: Use common mtk_afe_pcm_platform with common probe cb
  ASoC: mediatek: mt8186: Unify mt8186-mt6366 machine drivers
  ASoC: dt-bindings: mt8195: Document audio-routing and dai-link subnode
  ASoC: dt-bindings: mt8192: Document audio-routing and dai-link subnode
  ASoC: dt-bindings: mt8186: Document audio-routing and dai-link subnode
  arm64: dts: mediatek: mt8195-cherry: Specify sound DAI links and
    routing
  arm64: dts: mediatek: mt8186-corsola: Specify sound DAI links and
    routing

 .../sound/mt8186-mt6366-da7219-max98357.yaml  |  131 +-
 .../sound/mt8186-mt6366-rt1019-rt5682s.yaml   |  120 +-
 .../sound/mt8192-mt6359-rt1015-rt5682.yaml    |  139 +-
 .../bindings/sound/mt8195-mt6359.yaml         |  134 ++
 .../boot/dts/mediatek/mt8186-corsola.dtsi     |   42 +-
 .../boot/dts/mediatek/mt8195-cherry.dtsi      |   45 +
 sound/soc/mediatek/Kconfig                    |   24 +-
 .../mediatek/common/mtk-afe-platform-driver.c |   18 +
 .../soc/mediatek/common/mtk-dsp-sof-common.c  |   15 +-
 .../soc/mediatek/common/mtk-dsp-sof-common.h  |    1 -
 sound/soc/mediatek/common/mtk-soc-card.h      |    7 +-
 .../mediatek/common/mtk-soundcard-driver.c    |  199 +++
 .../mediatek/common/mtk-soundcard-driver.h    |   42 +
 sound/soc/mediatek/mt6797/mt6797-afe-pcm.c    |   14 +-
 sound/soc/mediatek/mt7986/mt7986-afe-pcm.c    |   14 +-
 sound/soc/mediatek/mt8183/mt8183-afe-pcm.c    |   14 +-
 sound/soc/mediatek/mt8186/Makefile            |    3 +-
 .../mt8186/mt8186-mt6366-da7219-max98357.c    | 1189 -----------------
 ...t6366-rt1019-rt5682s.c => mt8186-mt6366.c} |  578 ++++----
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c    |   21 +-
 sound/soc/mediatek/mt8188/mt8188-mt6359.c     |  203 +--
 sound/soc/mediatek/mt8192/mt8192-afe-pcm.c    |   25 +-
 .../mt8192/mt8192-mt6359-rt1015-rt5682.c      |  301 ++---
 sound/soc/mediatek/mt8195/mt8195-afe-pcm.c    |   21 +-
 sound/soc/mediatek/mt8195/mt8195-mt6359.c     |  487 +++----
 25 files changed, 1597 insertions(+), 2190 deletions(-)
 delete mode 100644 sound/soc/mediatek/mt8186/mt8186-mt6366-da7219-max98357.c
 rename sound/soc/mediatek/mt8186/{mt8186-mt6366-rt1019-rt5682s.c => mt8186-mt6366.c} (72%)

Comments

Mark Brown April 17, 2024, 1:07 a.m. UTC | #1
On Tue, 16 Apr 2024 09:13:52 +0200, AngeloGioacchino Del Regno wrote:
> Changes in v5:
>  - Cleaned up MT8186 soundcard migration commit which erroneously
>    had leftovers from development
>  - Changed the mtk_pcm_constraints_data structure to hold pointers
>    to snd_pcm_hw_constraint_list, as to really reuse the const data
>  - Tested again on all of the listed MTK platforms.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[01/18] ASoC: mediatek: Add common machine soundcard driver probe mechanism
        commit: bce93a162505f0bc0499888ace2f66bd56fb94b3
[02/18] ASoC: mediatek: common: Constify struct mtk_sof_priv
        commit: f8782f776db33066a9b1cd14d319142c4175561f
[03/18] ASoC: mediatek: mt8188: Migrate to mtk_soundcard_common_probe
        commit: aad45b8aa973a863dee2f256cea8c527acaaf56e
[04/18] ASoC: mediatek: mt8195: Migrate to mtk_soundcard_common_probe
        commit: 6718e1ed93cc28f0faefe21b7d21679ff0b04020
[05/18] ASoC: mediatek: mt8192: Migrate to mtk_soundcard_common_probe
        commit: 2d72cbb56327205ae04a9376c5b78a35b6347294
[06/18] ASoC: mediatek: mt8186: Migrate to mtk_soundcard_common_probe
        commit: 44a53c8ec9cad02ce7dfd55094e8d7aeb48eb73c
[07/18] ASoC: mediatek: Add common snd_soc_ops .startup() callback
        commit: fe071237dee6d617e5cb0eb4856b23576a877479
[08/18] ASoC: mediatek: mt8195: Migrate to the common mtk_soundcard_startup
        commit: 386fe4ceaf196360ef96cbd68d045ed2730251a7
[09/18] ASoC: mediatek: mt8192: Migrate to the common mtk_soundcard_startup
        commit: 94142cc1ffd959aa8e83857515a75779e8ba8064
[10/18] ASoC: mediatek: mt8186-rt1019: Migrate to the common mtk_soundcard_startup
        commit: f103ce4ff6932b6991e1922d1a39c29971ab2938
[11/18] ASoC: mediatek: Add common mtk_afe_component_probe callback
        commit: 9d9b182876a249b393158e9f43c255aeee4ef898
[12/18] ASoC: mediatek: Use common mtk_afe_pcm_platform with common probe cb
        commit: 1d2a6b3b5189b6c3e51f29e050aa9b2337b774e8
[13/18] ASoC: mediatek: mt8186: Unify mt8186-mt6366 machine drivers
        commit: 6ed619b348bf0a490e70dea7a330cf44dc81c16d
[14/18] ASoC: dt-bindings: mt8195: Document audio-routing and dai-link subnode
        commit: dc7a31300a8f28af282974512c2d403ada0658b5
[15/18] ASoC: dt-bindings: mt8192: Document audio-routing and dai-link subnode
        commit: 5a50483c47b8cf3066eb151fa21e195f3dfab5a8
[16/18] ASoC: dt-bindings: mt8186: Document audio-routing and dai-link subnode
        commit: 787f190cd1cd3123555e33a3400f3e919ec94a81

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
Chen-Yu Tsai May 2, 2024, 9:59 a.m. UTC | #2
On Tue, Apr 16, 2024 at 3:15 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> The drivers and bindings acquired support for specifying audio hardware
> and links in device tree: describe and link the sound related HW of this
> machine.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> ---
>  .../boot/dts/mediatek/mt8186-corsola.dtsi     | 42 ++++++++++++++++---
>  1 file changed, 37 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi b/arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi
> index 1807e9d6cb0e..afdab5724eaa 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi
> @@ -42,7 +42,7 @@ backlight_lcd0: backlight-lcd0 {
>                 default-brightness-level = <576>;
>         };
>
> -       bt-sco-codec {
> +       bt-sco {

I remember changing this node from "bt-sco" to "bt-sco-codec" because
of a review comment when I submitted the Corsola dts series.

>                 compatible = "linux,bt-sco";
>                 #sound-dai-cells = <0>;
>         };
> @@ -223,12 +223,44 @@ sound: sound {
>                 mediatek,adsp = <&adsp>;
>                 mediatek,platform = <&afe>;
>
> -               playback-codecs {
> -                       sound-dai = <&it6505dptx>, <&rt1019p>;
> +               audio-routing =
> +                       "Headphone", "HPOL",
> +                       "Headphone", "HPOR",
> +                       "IN1P", "Headset Mic",
> +                       "Speakers", "Speaker",
> +                       "HDMI1", "TX";
> +
> +               hs-playback-dai-link {
> +                       link-name = "I2S0";
> +                       dai-format = "i2s";
> +                       mediatek,clk-provider = "cpu";
> +                       codec {
> +                               sound-dai = <&rt5682s 0>;
> +                       };
> +               };
> +
> +               hs-capture-dai-link {
> +                       link-name = "I2S1";
> +                       dai-format = "i2s";
> +                       mediatek,clk-provider = "cpu";
> +                       codec {
> +                               sound-dai = <&rt5682s 0>;
> +                       };
>                 };
>
> -               headset-codec {
> -                       sound-dai = <&rt5682s 0>;
> +               spk-share-dai-link {
> +                       link-name = "I2S2";
> +                       mediatek,clk-provider = "cpu";
> +               };
> +
> +               spk-hdmi-playback-dai-link {
> +                       link-name = "I2S3";
> +                       dai-format = "i2s";
> +                       mediatek,clk-provider = "cpu";
> +                       /* RT1019P and IT6505 connected to the same I2S line */
> +                       codec {
> +                               sound-dai = <&it6505dptx>, <&rt1019p>;
> +                       };
>                 };
>         };
>
> --
> 2.44.0
>