Unverified Commit cba62c8b authored by Mark Brown's avatar Mark Brown
Browse files

Merge series "ASoC: qcom: Add support for SC7180 lpass variant" from Rohit...

Merge series "ASoC: qcom: Add support for SC7180 lpass variant" from Rohit kumar <rohitkr@codeaurora.org>:

This patch chain add audio support for SC7180 soc by doing the required
modification in existing common lpass-cpu/lpass-platform driver.
This also fixes some concurrency issue.

This patch series is already tested by Srinivas on Dragon Board 410c.
Changes since v5:
        - Fixed remove api in lpass-sc7180.c
        - Addressed comments by Rob in yaml Documentation.

Ajit Pandey (4):
  ASoC: qcom: Add common array to initialize soc based core clocks
  ASoC: qcom: lpass-platform: Replace card->dev with component->dev
  include: dt-bindings: sound: Add sc7180-lpass bindings header
  ASoC: qcom: lpass-sc7180: Add platform driver for lpass audio

Rohit kumar (8):
  ASoC: qcom: lpass-cpu: Move ahbix clk to platform specific function
  ASoC: qcom: lpass-platform: fix memory leak
  ASoC: qcom: lpass: Use regmap_field for i2sctl and dmactl registers
  ASoC: qcom: lpass-cpu: fix concurrency issue
  dt-bindings: sound: lpass-cpu: Add sc7180 lpass cpu node
  ASoC: qcom: lpass-cpu: Use platform_get_resource
  ASoC: qcom: lpass-platform: Use platform_get_irq
  dt-bindings: sound: lpass-cpu: Move to yaml format

 .../devicetree/bindings/sound/qcom,lpass-cpu.txt   |  79 --------
 .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  | 189 ++++++++++++++++++
 include/dt-bindings/sound/sc7180-lpass.h           |  10 +
 sound/soc/qcom/Kconfig                             |   5 +
 sound/soc/qcom/Makefile                            |   2 +
 sound/soc/qcom/lpass-apq8016.c                     |  86 ++++++--
 sound/soc/qcom/lpass-cpu.c                         | 204 ++++++++++---------
 sound/soc/qcom/lpass-ipq806x.c                     |  67 +++++++
 sound/soc/qcom/lpass-lpaif-reg.h                   | 157 ++++++++-------
 sound/soc/qcom/lpass-platform.c                    | 155 +++++++++++----
 sound/soc/qcom/lpass-sc7180.c                      | 216 +++++++++++++++++++++
 sound/soc/qcom/lpass.h                             |  63 +++++-
 12 files changed, 934 insertions(+), 299 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/sound/qcom,lpass-cpu.txt
 create mode 100644 Documentation/devicetree/bindings/sound/qcom,lpass-cpu.yaml
 create mode 100644 include/dt-bindings/sound/sc7180-lpass.h
 create mode 100644 sound/soc/qcom/lpass-sc7180.c

--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
parents 354caf58 4b381d7e
Loading
Loading
Loading
Loading
+0 −79
Original line number Diff line number Diff line
* Qualcomm Technologies LPASS CPU DAI

This node models the Qualcomm Technologies Low-Power Audio SubSystem (LPASS).

Required properties:

- compatible		: "qcom,lpass-cpu" or "qcom,apq8016-lpass-cpu"
- clocks		: Must contain an entry for each entry in clock-names.
- clock-names		: A list which must include the following entries:
				* "ahbix-clk"
				* "mi2s-osr-clk"
				* "mi2s-bit-clk"
			: required clocks for "qcom,lpass-cpu-apq8016"
				* "ahbix-clk"
				* "mi2s-bit-clk0"
				* "mi2s-bit-clk1"
				* "mi2s-bit-clk2"
				* "mi2s-bit-clk3"
				* "pcnoc-mport-clk"
				* "pcnoc-sway-clk"

- interrupts		: Must contain an entry for each entry in
			  interrupt-names.
- interrupt-names	: A list which must include the following entries:
				* "lpass-irq-lpaif"
- pinctrl-N		: One property must exist for each entry in
			  pinctrl-names.  See ../pinctrl/pinctrl-bindings.txt
			  for details of the property values.
- pinctrl-names		: Must contain a "default" entry.
- reg			: Must contain an address for each entry in reg-names.
- reg-names		: A list which must include the following entries:
				* "lpass-lpaif"
- #address-cells	: Must be 1
- #size-cells		: Must be 0



Optional properties:

- qcom,adsp		: Phandle for the audio DSP node

By default, the driver uses up to 4 MI2S SD lines, for a total of 8 channels.
The SD lines to use can be configured by adding subnodes for each of the DAIs.

Required properties for each DAI (represented by a subnode):
- reg			: Must be one of the DAI IDs
			  (usually part of dt-bindings header)
- qcom,playback-sd-lines: List of serial data lines to use for playback
			  Each SD line should be represented by a number from 0-3.
- qcom,capture-sd-lines	: List of serial data lines to use for capture
			  Each SD line should be represented by a number from 0-3.

Note that adding a subnode changes the default to "no lines configured",
so both playback and capture lines should be configured when a subnode is added.

Example:

lpass@28100000 {
	compatible = "qcom,lpass-cpu";
	clocks = <&lcc AHBIX_CLK>, <&lcc MI2S_OSR_CLK>, <&lcc MI2S_BIT_CLK>;
	clock-names = "ahbix-clk", "mi2s-osr-clk", "mi2s-bit-clk";
	interrupts = <0 85 1>;
	interrupt-names = "lpass-irq-lpaif";
	pinctrl-names = "default", "idle";
	pinctrl-0 = <&mi2s_default>;
	pinctrl-1 = <&mi2s_idle>;
	reg = <0x28100000 0x10000>;
	reg-names = "lpass-lpaif";
	qcom,adsp = <&adsp>;

	#address-cells = <1>;
	#size-cells = <0>;

	/* Optional to set different MI2S SD lines */
	dai@3 {
		reg = <MI2S_QUATERNARY>;
		qcom,playback-sd-lines = <0 1>;
	};
};
+189 −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/qcom,lpass-cpu.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Technologies Inc. LPASS CPU dai driver bindings

maintainers:
  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
  - Rohit kumar <rohitkr@codeaurora.org>

description: |
  Qualcomm Technologies Inc. SOC Low-Power Audio SubSystem (LPASS) that consist
  of MI2S interface for audio data transfer on external codecs. LPASS cpu driver
  is a module to configure Low-Power Audio Interface(LPAIF) core registers
  across different IP versions.

properties:
  compatible:
    enum:
      - qcom,lpass-cpu
      - qcom,apq8016-lpass-cpu
      - qcom,sc7180-lpass-cpu

  reg:
    maxItems: 1
    description: LPAIF core registers

  clocks:
    minItems: 3
    maxItems: 6

  clock-names:
    minItems: 3
    maxItems: 6

  interrupts:
    maxItems: 1
    description: LPAIF DMA buffer interrupt

  qcom,adsp:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: Phandle for the audio DSP node

  iommus:
    maxItems: 1
    description: Phandle to apps_smmu node with sid mask

  power-domains:
    maxItems: 1

  '#sound-dai-cells':
    const: 1

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

patternProperties:
  "(^mi2s-[0-9a-f]$|mi2s)":
    type: object
    description: Required properties for each DAI

    properties:
      reg:
        maxItems: 1
        description: Must be one of the DAI ID

      qcom,playback-sd-lines:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        description: list of MI2S data lines for playback

      qcom,capture-sd-lines:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        description: list of MI2S data lines for capture

    required:
      - reg

    additionalProperties: false

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts
  - '#sound-dai-cells'

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: qcom,lpass-cpu

    then:
      properties:
        clock-names:
          items:
            - const: ahbix-clk
            - const: mi2s-osr-clk
            - const: mi2s-bit-clk

  - if:
      properties:
        compatible:
          contains:
            const: qcom,apq8016-lpass-cpu

    then:
      properties:
        clock-names:
          items:
            - const: ahbix-clk
            - const: mi2s-bit-clk0
            - const: mi2s-bit-clk1
            - const: mi2s-bit-clk2
            - const: mi2s-bit-clk3
            - const: pcnoc-mport-clk
            - const: pcnoc-sway-clk

  - if:
      properties:
        compatible:
          contains:
            const: qcom,sc7180-lpass-cpu

    then:
      properties:
        clock-names:
          items:
            - const: pcnoc-sway-clk
            - const: audio-core
            - const: mclk0
            - const: pcnoc-mport-clk
            - const: mi2s-bit-clk0
            - const: mi2s-bit-clk1
      required:
        - iommus
        - power-domains

examples:
  - |
    #include <dt-bindings/sound/sc7180-lpass.h>

    soc {
        #address-cells = <2>;
        #size-cells = <2>;
        lpass@62f00000 {
            compatible = "qcom,sc7180-lpass-cpu";

            reg = <0 0x62f00000  0 0x29000>;

            iommus = <&apps_smmu 0x1020 0>;
            power-domains = <&lpass_hm 0>;

            clocks = <&gcc 131>,
                 <&lpasscorecc 6>,
                 <&lpasscorecc 7>,
                 <&lpasscorecc 10>,
                 <&lpasscorecc 8>,
                 <&lpasscorecc 9>;

            clock-names = "pcnoc-sway-clk", "audio-core",
                          "mclk0", "pcnoc-mport-clk",
                          "mi2s-bit-clk0", "mi2s-bit-clk1";

            interrupts = <0 160 1>;

            #sound-dai-cells = <1>;

            #address-cells = <1>;
            #size-cells = <0>;
            /* Optional to set different MI2S SD lines */
            mi2s-primary@0 {
                reg = <MI2S_PRIMARY>;
                qcom,playback-sd-lines = <1>;
                qcom,capture-sd-lines = <0>;
            };
        };
    };

...
+10 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __DT_SC7180_LPASS_H
#define __DT_SC7180_LPASS_H

#define MI2S_PRIMARY	0
#define MI2S_SECONDARY	1

#define LPASS_MCLK0	0

#endif /* __DT_APQ8016_LPASS_H */
+5 −0
Original line number Diff line number Diff line
@@ -26,6 +26,11 @@ config SND_SOC_LPASS_APQ8016
	select SND_SOC_LPASS_CPU
	select SND_SOC_LPASS_PLATFORM

config SND_SOC_LPASS_SC7180
	tristate
	select SND_SOC_LPASS_CPU
	select SND_SOC_LPASS_PLATFORM

config SND_SOC_STORM
	tristate "ASoC I2S support for Storm boards"
	select SND_SOC_LPASS_IPQ806X
+2 −0
Original line number Diff line number Diff line
@@ -4,11 +4,13 @@ snd-soc-lpass-cpu-objs := lpass-cpu.o
snd-soc-lpass-platform-objs := lpass-platform.o
snd-soc-lpass-ipq806x-objs := lpass-ipq806x.o
snd-soc-lpass-apq8016-objs := lpass-apq8016.o
snd-soc-lpass-sc7180-objs := lpass-sc7180.o

obj-$(CONFIG_SND_SOC_LPASS_CPU) += snd-soc-lpass-cpu.o
obj-$(CONFIG_SND_SOC_LPASS_PLATFORM) += snd-soc-lpass-platform.o
obj-$(CONFIG_SND_SOC_LPASS_IPQ806X) += snd-soc-lpass-ipq806x.o
obj-$(CONFIG_SND_SOC_LPASS_APQ8016) += snd-soc-lpass-apq8016.o
obj-$(CONFIG_SND_SOC_LPASS_SC7180) += snd-soc-lpass-sc7180.o

# Machine
snd-soc-storm-objs := storm.o
Loading