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

Merge series "Qualcomm's lpass-hdmi ASoC driver to support audio over dp port"...

Merge series "Qualcomm's lpass-hdmi ASoC driver to support audio over dp port" from Srinivasa Rao Mandadapu <srivasam@codeaurora.org>:

These patches are to support audio over DP port on Qualcomm's SC7180 LPASS
Asoc. It includes machine driver, cpu driver, platform driver updates for
HDMI path support, device tree documention, lpass variant structure
optimization and configuration changes.
These patches depends on the DP patch series
https://patchwork.kernel.org/project/dri-devel/list/?series=332029
https://lore.kernel.org/patchwork/project/lkml/list/?series=464856

changes since V10:
    -- Moved hdmi regmap functions from lpass-hdmi.c to lpass-cpu.c
    -- Moved QCOM_REGMAP_FIELD_ALLOC macro from lpass-hdmi.c to lpass.h
changes since V9:
    -- Removed unused structures lpass_hdmi.h
changes since V8:
    -- Removed redundant structure wrapper for reg map field memebrs
    -- Updated lpass_hdmi_regmap_volatile API with appropriate registers as true
       and others as false.
changes since V7:
    -- Fixed typo errors
    -- Created Separate patch for buffer size change
changes since V6:
    -- Removed compile time define flag, which used for enabling
     HDMI code, based on corresponding config param is included.
    -- Updated reg map alloc API with reg map bulk API.
    -- Removed unnecessary line splits
changes since V5:
    -- Removed unused struct regmap *map in lpass_platform_alloc_hdmidmactl_fields.
    -- DMA alloc and free API signature change in lpass-apq8016.c, lpass-ipq806x.c
    -- Keeping API "irqreturn_t lpass_platform_hdmiif_irq" under ifdef macro
Changes Since v4:
    -- Updated with single compatible node for both I2S and HDMI.
Changes Since v3:
    -- Removed id in lpass variant structure and used snd_soc_dai_driver id.
Changes Since v2:
    -- Audio buffer size(i.e. LPASS_PLATFORM_BUFFER_SIZE) in lpass-platform.c increased.
Changes Since v1:
    -- Commit messages are updated
    -- Addressed Rob Herring review comments

V Sujith Kumar Reddy (7):
  ASoC: Add sc7180-lpass binding header hdmi define
  ASoC: dt-bindings: Add dt binding for lpass hdmi
  Asoc:qcom:lpass-cpu:Update dts property read API
  Asoc: qcom: lpass:Update lpaif_dmactl members order
  ASoC: qcom: Add support for lpass hdmi driver
  Asoc: qcom: lpass-platform : Increase buffer size
  ASoC: qcom: sc7180: Add support for audio over DP

 .../devicetree/bindings/sound/qcom,lpass-cpu.yaml  |  74 ++--
 include/dt-bindings/sound/sc7180-lpass.h           |   1 +
 sound/soc/qcom/Kconfig                             |   5 +
 sound/soc/qcom/Makefile                            |   2 +
 sound/soc/qcom/lpass-apq8016.c                     |   4 +-
 sound/soc/qcom/lpass-cpu.c                         | 249 ++++++++++++-
 sound/soc/qcom/lpass-hdmi.c                        | 258 ++++++++++++++
 sound/soc/qcom/lpass-hdmi.h                        | 102 ++++++
 sound/soc/qcom/lpass-ipq806x.c                     |   4 +-
 sound/soc/qcom/lpass-lpaif-reg.h                   |  49 ++-
 sound/soc/qcom/lpass-platform.c                    | 395 +++++++++++++++++----
 sound/soc/qcom/lpass-sc7180.c                      | 116 +++++-
 sound/soc/qcom/lpass.h                             | 124 ++++++-
 13 files changed, 1240 insertions(+), 143 deletions(-)
 create mode 100644 sound/soc/qcom/lpass-hdmi.c
 create mode 100644 sound/soc/qcom/lpass-hdmi.h

--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
parents 18096cb0 2ad63dc8
Loading
Loading
Loading
Loading
+52 −22
Original line number Diff line number Diff line
@@ -24,9 +24,10 @@ properties:
      - qcom,sc7180-lpass-cpu

  reg:
    maxItems: 1
    maxItems: 2
    description: LPAIF core registers

  reg-names:
     maxItems: 2
  clocks:
    minItems: 3
    maxItems: 6
@@ -36,15 +37,16 @@ properties:
    maxItems: 6

  interrupts:
    maxItems: 1
    maxItems: 2
    description: LPAIF DMA buffer interrupt

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

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

  power-domains:
@@ -60,10 +62,12 @@ properties:
    const: 0

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

    description: |
      LPASS CPU dai node for each I2S device. Bindings of each node
      depends on the specific driver providing the functionality and
      properties.
    properties:
      reg:
        maxItems: 1
@@ -85,9 +89,11 @@ patternProperties:
required:
  - compatible
  - reg
  - reg-names
  - clocks
  - clock-names
  - interrupts
  - interrupt-names
  - '#sound-dai-cells'

additionalProperties: false
@@ -134,13 +140,32 @@ allOf:
    then:
      properties:
        clock-names:
          items:
          oneOf:
           - items:   #for I2S
              - const: pcnoc-sway-clk
              - const: audio-core
              - const: mclk0
              - const: pcnoc-mport-clk
              - const: mi2s-bit-clk0
              - const: mi2s-bit-clk1
           - items:   #for HDMI
              - const: pcnoc-sway-clk
              - const: audio-core
              - const: pcnoc-mport-clk
        reg-names:
          anyOf:
            - items:   #for I2S
              - const: lpass-lpaif
            - items:   #for I2S and HDMI
              - const: lpass-hdmiif
              - const: lpass-lpaif
        interrupt-names:
          anyOf:
            - items:   #for I2S
              - const: lpass-irq-lpaif
            - items:   #for I2S and HDMI
              - const: lpass-irq-lpaif
              - const: lpass-irq-hdmi
      required:
        - iommus
        - power-domains
@@ -152,12 +177,15 @@ examples:
    soc {
        #address-cells = <2>;
        #size-cells = <2>;
        lpass@62f00000 {
        lpass@62d80000 {
            compatible = "qcom,sc7180-lpass-cpu";

            reg = <0 0x62f00000  0 0x29000>;

            iommus = <&apps_smmu 0x1020 0>;
            reg = <0 0x62d87000 0 0x68000>,
                  <0 0x62f00000 0 0x29000>;
            reg-names = "lpass-hdmiif",
                        "lpass-lpaif";
            iommus = <&apps_smmu 0x1020 0>,
                     <&apps_smmu 0x1032 0>;
            power-domains = <&lpass_hm 0>;

            clocks = <&gcc 131>,
@@ -171,14 +199,16 @@ examples:
                          "mclk0", "pcnoc-mport-clk",
                          "mi2s-bit-clk0", "mi2s-bit-clk1";

            interrupts = <0 160 1>;

            interrupts = <0 160 1>,
                         <0 268 1>;
            interrupt-names = "lpass-irq-lpaif",
                              "lpass-irq-hdmi";
            #sound-dai-cells = <1>;

            #address-cells = <1>;
            #size-cells = <0>;
            /* Optional to set different MI2S SD lines */
            mi2s-primary@0 {
            dai-link@0 {
                reg = <MI2S_PRIMARY>;
                qcom,playback-sd-lines = <1>;
                qcom,capture-sd-lines = <0>;
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

#define MI2S_PRIMARY	0
#define MI2S_SECONDARY	1
#define LPASS_DP_RX	2

#define LPASS_MCLK0	0

+5 −0
Original line number Diff line number Diff line
@@ -12,6 +12,10 @@ config SND_SOC_LPASS_CPU
	tristate
	select REGMAP_MMIO

config SND_SOC_LPASS_HDMI
	tristate
	select REGMAP_MMIO

config SND_SOC_LPASS_PLATFORM
	tristate
	select REGMAP_MMIO
@@ -30,6 +34,7 @@ config SND_SOC_LPASS_SC7180
	tristate
	select SND_SOC_LPASS_CPU
	select SND_SOC_LPASS_PLATFORM
	select SND_SOC_LPASS_HDMI

config SND_SOC_STORM
	tristate "ASoC I2S support for Storm boards"
+2 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
# Platform
snd-soc-lpass-cpu-objs := lpass-cpu.o
snd-soc-lpass-hdmi-objs := lpass-hdmi.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_HDMI) += snd-soc-lpass-hdmi.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
+2 −2
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ static struct snd_soc_dai_driver apq8016_lpass_cpu_dai_driver[] = {
};

static int apq8016_lpass_alloc_dma_channel(struct lpass_data *drvdata,
					   int direction)
					   int direction, unsigned int dai_id)
{
	struct lpass_variant *v = drvdata->variant;
	int chan = 0;
@@ -151,7 +151,7 @@ static int apq8016_lpass_alloc_dma_channel(struct lpass_data *drvdata,
	return chan;
}

static int apq8016_lpass_free_dma_channel(struct lpass_data *drvdata, int chan)
static int apq8016_lpass_free_dma_channel(struct lpass_data *drvdata, int chan, unsigned int dai_id)
{
	clear_bit(chan, &drvdata->dma_ch_bit_map);

Loading