Unverified Commit 8dc08c82 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: mediatek: Add support for MT8188 SoC

Merge series from Trevor Wu <trevor.wu@mediatek.com>:

This series of patches adds support for Mediatek AFE of MT8188 SoC.
Patches are based on broonie tree "for-next" branch.

Changes since v4:
  - refine etdm dai driver based on reviewer's suggestions
  - refine dt-binding files based on reviewer's suggestions

Changes since v3:
  - replace apll_ck with apll to sync with the relationship in CCF
  - add mtk-soundcard-driver.c to support codec parsing
  - drop mclk-always-on-rates support in mt8188-dai-etdm.c
  - refine dt-binding files based on reviewer's suggestions

Changes since v2:
  - drop CLK_IGNORE_UNUSED flag
  - include bitfield.h to reslove the issue reported by kernel test robot
  - rename mt8188-afe-pcm.yaml to mt8188-afe.yaml
  - refine dt-binding files based on reviewer's suggestions

Changes since v1:
  - remove bus protection functions in case of unmerged dependency problem
  - replace some bit operation macro with FIELD_PREP
  - simplify register control by regmap_set_bits and regmap_clear_bits
  - fix dt-binding errors
  - rename compatible string for recognition

Trevor Wu (13):
  ASoC: mediatek: common: add SMC ops and SMC CMD
  ASoC: mediatek: mt8188: add common header
  ASoC: mediatek: mt8188: support audsys clock
  ASoC: mediatek: mt8188: support adda in platform driver
  ASoC: mediatek: mt8188: support etdm in platform driver
  ASoC: mediatek: mt8188: support pcmif in platform driver
  ASoC: mediatek: mt8188: support audio clock control
  ASoC: mediatek: mt8188: add platform driver
  ASoC: mediatek: mt8188: add control for timing select
  ASoC: dt-bindings: mediatek,mt8188-afe: add audio afe document
  ASoC: mediatek: common: add soundcard driver common code
  ASoC: mediatek: mt8188: add machine driver with mt6359
  ASoC: dt-bindings: mediatek,mt8188-mt6359: add mt8188-mt6359 document

 .../bindings/sound/mediatek,mt8188-afe.yaml   |  208 +
 .../sound/mediatek,mt8188-mt6359.yaml         |   97 +
 sound/soc/mediatek/Kconfig                    |   23 +
 sound/soc/mediatek/Makefile                   |    1 +
 sound/soc/mediatek/common/Makefile            |    2 +-
 sound/soc/mediatek/common/mtk-base-afe.h      |   19 +
 .../mediatek/common/mtk-soundcard-driver.c    |   79 +
 .../mediatek/common/mtk-soundcard-driver.h    |   14 +
 sound/soc/mediatek/mt8188/Makefile            |   15 +
 sound/soc/mediatek/mt8188/mt8188-afe-clk.c    |  658 ++++
 sound/soc/mediatek/mt8188/mt8188-afe-clk.h    |  115 +
 sound/soc/mediatek/mt8188/mt8188-afe-common.h |  151 +
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c    | 3359 +++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c |  205 +
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |   15 +
 .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |   83 +
 sound/soc/mediatek/mt8188/mt8188-dai-adda.c   |  632 ++++
 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c   | 2588 +++++++++++++
 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c    |  367 ++
 sound/soc/mediatek/mt8188/mt8188-mt6359.c     |  785 ++++
 sound/soc/mediatek/mt8188/mt8188-reg.h        | 3180 ++++++++++++++++
 21 files changed, 12595 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.c
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.h
 create mode 100644 sound/soc/mediatek/mt8188/Makefile
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-mt6359.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-reg.h

--
2.18.0
parents ae7c40bc ce038238
Loading
Loading
Loading
Loading
+208 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/mediatek,mt8188-afe.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MediaTek AFE PCM controller for mt8188

maintainers:
  - Trevor Wu <trevor.wu@mediatek.com>

properties:
  compatible:
    const: mediatek,mt8188-afe

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  resets:
    maxItems: 1

  reset-names:
    const: audiosys

  mediatek,topckgen:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: The phandle of the mediatek topckgen controller

  power-domains:
    maxItems: 1

  clocks:
    items:
      - description: 26M clock
      - description: audio pll1 clock
      - description: audio pll2 clock
      - description: clock divider for i2si1_mck
      - description: clock divider for i2si2_mck
      - description: clock divider for i2so1_mck
      - description: clock divider for i2so2_mck
      - description: clock divider for dptx_mck
      - description: a1sys hoping clock
      - description: audio intbus clock
      - description: audio hires clock
      - description: audio local bus clock
      - description: mux for dptx_mck
      - description: mux for i2so1_mck
      - description: mux for i2so2_mck
      - description: mux for i2si1_mck
      - description: mux for i2si2_mck
      - description: audio 26m clock

  clock-names:
    items:
      - const: clk26m
      - const: apll1
      - const: apll2
      - const: apll12_div0
      - const: apll12_div1
      - const: apll12_div2
      - const: apll12_div3
      - const: apll12_div9
      - const: a1sys_hp_sel
      - const: aud_intbus_sel
      - const: audio_h_sel
      - const: audio_local_bus_sel
      - const: dptx_m_sel
      - const: i2so1_m_sel
      - const: i2so2_m_sel
      - const: i2si1_m_sel
      - const: i2si2_m_sel
      - const: adsp_audio_26m

  mediatek,etdm-in1-cowork-source:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      etdm modules can share the same external clock pin. Specify
      which etdm clock source is required by this etdm in module.
    enum:
      - 1 # etdm2_in
      - 2 # etdm1_out
      - 3 # etdm2_out

  mediatek,etdm-in2-cowork-source:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      etdm modules can share the same external clock pin. Specify
      which etdm clock source is required by this etdm in module.
    enum:
      - 0 # etdm1_in
      - 2 # etdm1_out
      - 3 # etdm2_out

  mediatek,etdm-out1-cowork-source:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      etdm modules can share the same external clock pin. Specify
      which etdm clock source is required by this etdm out module.
    enum:
      - 0 # etdm1_in
      - 1 # etdm2_in
      - 3 # etdm2_out

  mediatek,etdm-out2-cowork-source:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      etdm modules can share the same external clock pin. Specify
      which etdm clock source is required by this etdm out module.
    enum:
      - 0 # etdm1_in
      - 1 # etdm2_in
      - 2 # etdm1_out

patternProperties:
  "^mediatek,etdm-in[1-2]-chn-disabled$":
    $ref: /schemas/types.yaml#/definitions/uint8-array
    minItems: 1
    maxItems: 16
    description:
      This is a list of channel IDs which should be disabled.
      By default, all data received from ETDM pins will be outputed to
      memory. etdm in supports disable_out in direct mode(w/o interconn),
      so user can disable the specified channels by the property.
    uniqueItems: true
    items:
      minimum: 0
      maximum: 15

  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
    type: boolean
    description: if present, the etdm data mode is I2S.

  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
    type: boolean
    description: if present, the etdm data mode is I2S.

required:
  - compatible
  - reg
  - interrupts
  - resets
  - reset-names
  - mediatek,topckgen
  - power-domains
  - clocks
  - clock-names

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    afe@10b10000 {
        compatible = "mediatek,mt8188-afe";
        reg = <0x10b10000 0x10000>;
        interrupts = <GIC_SPI 822 IRQ_TYPE_LEVEL_HIGH 0>;
        resets = <&watchdog 14>;
        reset-names = "audiosys";
        mediatek,topckgen = <&topckgen>;
        power-domains = <&spm 13>; //MT8188_POWER_DOMAIN_AUDIO
        mediatek,etdm-in2-cowork-source = <2>;
        mediatek,etdm-out2-cowork-source = <0>;
        mediatek,etdm-in1-multi-pin-mode;
        mediatek,etdm-in1-chn-disabled = /bits/ 8 <0x0 0x2>;
        clocks = <&clk26m>,
                 <&apmixedsys 9>, //CLK_APMIXED_APLL1
                 <&apmixedsys 10>, //CLK_APMIXED_APLL2
                 <&topckgen 186>, //CLK_TOP_APLL12_CK_DIV0
                 <&topckgen 187>, //CLK_TOP_APLL12_CK_DIV1
                 <&topckgen 188>, //CLK_TOP_APLL12_CK_DIV2
                 <&topckgen 189>, //CLK_TOP_APLL12_CK_DIV3
                 <&topckgen 191>, //CLK_TOP_APLL12_CK_DIV9
                 <&topckgen 83>, //CLK_TOP_A1SYS_HP
                 <&topckgen 31>, //CLK_TOP_AUD_INTBUS
                 <&topckgen 32>, //CLK_TOP_AUDIO_H
                 <&topckgen 69>, //CLK_TOP_AUDIO_LOCAL_BUS
                 <&topckgen 81>, //CLK_TOP_DPTX
                 <&topckgen 77>, //CLK_TOP_I2SO1
                 <&topckgen 78>, //CLK_TOP_I2SO2
                 <&topckgen 79>, //CLK_TOP_I2SI1
                 <&topckgen 80>, //CLK_TOP_I2SI2
                 <&adsp_audio26m 0>; //CLK_AUDIODSP_AUDIO26M
        clock-names = "clk26m",
                      "apll1",
                      "apll2",
                      "apll12_div0",
                      "apll12_div1",
                      "apll12_div2",
                      "apll12_div3",
                      "apll12_div9",
                      "a1sys_hp_sel",
                      "aud_intbus_sel",
                      "audio_h_sel",
                      "audio_local_bus_sel",
                      "dptx_m_sel",
                      "i2so1_m_sel",
                      "i2so2_m_sel",
                      "i2si1_m_sel",
                      "i2si2_m_sel",
                      "adsp_audio_26m";
    };

...
+97 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/mediatek,mt8188-mt6359.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MediaTek MT8188 ASoC sound card

maintainers:
  - Trevor Wu <trevor.wu@mediatek.com>

properties:
  compatible:
    const: mediatek,mt8188-mt6359-evb

  model:
    $ref: /schemas/types.yaml#/definitions/string
    description: User specified audio sound card name

  audio-routing:
    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
    description:
      A list of the connections between audio components. Each entry is a
      sink/source pair of strings. Valid names could be the input or output
      widgets of audio components, power supplies, MicBias of codec and the
      software switch.

  mediatek,platform:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: The phandle of MT8188 ASoC platform.

patternProperties:
  "^dai-link-[0-9]+$":
    type: object
    description:
      Container for dai-link level properties and CODEC sub-nodes.

    properties:
      link-name:
        description:
          This property corresponds to the name of the BE dai-link to which
          we are going to update parameters in this node.
        items:
          enum:
            - ADDA_BE
            - DPTX_BE
            - ETDM1_IN_BE
            - ETDM2_IN_BE
            - ETDM1_OUT_BE
            - ETDM2_OUT_BE
            - ETDM3_OUT_BE
            - PCM1_BE

      codec:
        description: Holds subnode which indicates codec dai.
        type: object
        additionalProperties: false
        properties:
          sound-dai:
            minItems: 1
            maxItems: 2
        required:
          - sound-dai

    additionalProperties: false

    required:
      - link-name
      - codec

additionalProperties: false

required:
  - compatible
  - mediatek,platform

examples:
  - |
    sound {
        compatible = "mediatek,mt8188-mt6359-evb";
        mediatek,platform = <&afe>;
        pinctrl-names = "default";
        pinctrl-0 = <&aud_pins_default>;
        audio-routing =
            "Headphone", "Headphone L",
            "Headphone", "Headphone R",
            "AIN1", "Headset Mic";
        dai-link-0 {
            link-name = "ETDM3_OUT_BE";

            codec {
                sound-dai = <&hdmi0>;
            };
        };
    };

...
+23 −0
Original line number Diff line number Diff line
@@ -208,6 +208,29 @@ config SND_SOC_MTK_BTCVSD
	  Select Y if you have such device.
	  If unsure select "N".

config SND_SOC_MT8188
	tristate "ASoC support for MediaTek MT8188 chip"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on COMMON_CLK
	select SND_SOC_MEDIATEK
	select MFD_SYSCON if SND_SOC_MT6359
	help
	  This adds ASoC platform driver support for MediaTek MT8188 chip
	  that can be used with other codecs.
	  Select Y if you have such device.
	  If unsure select "N".

config SND_SOC_MT8188_MT6359
	tristate "ASoC Audio driver for MT8188 with MT6359 and I2S codecs"
	depends on SND_SOC_MT8188 && MTK_PMIC_WRAP
	select SND_SOC_MT6359
	select SND_SOC_HDMI_CODEC
	help
	  This adds support for ASoC machine driver for MediaTek MT8188
	  boards with the MT6359 and other I2S audio codecs.
	  Select Y if you have such device.
	  If unsure select "N".

config SND_SOC_MT8192
	tristate "ASoC support for Mediatek MT8192 chip"
	depends on ARCH_MEDIATEK
+1 −0
Original line number Diff line number Diff line
@@ -5,5 +5,6 @@ obj-$(CONFIG_SND_SOC_MT6797) += mt6797/
obj-$(CONFIG_SND_SOC_MT8173) += mt8173/
obj-$(CONFIG_SND_SOC_MT8183) += mt8183/
obj-$(CONFIG_SND_SOC_MT8186) += mt8186/
obj-$(CONFIG_SND_SOC_MT8188) += mt8188/
obj-$(CONFIG_SND_SOC_MT8192) += mt8192/
obj-$(CONFIG_SND_SOC_MT8195) += mt8195/
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
# platform driver
snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o
snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o mtk-soundcard-driver.o
obj-$(CONFIG_SND_SOC_MEDIATEK) += snd-soc-mtk-common.o

obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += mtk-btcvsd.o
Loading