Skip to content

Commit def69f2

Browse files
committed
Merge series "Qualcomm's lpass-hdmi ASoC driver to support audio over dp port" from Srinivasa Rao Mandadapu <[email protected]>:
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.
2 parents 18096cb + 2ad63dc commit def69f2

File tree

13 files changed

+1240
-143
lines changed

13 files changed

+1240
-143
lines changed

Documentation/devicetree/bindings/sound/qcom,lpass-cpu.yaml

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ properties:
2424
- qcom,sc7180-lpass-cpu
2525

2626
reg:
27-
maxItems: 1
27+
maxItems: 2
2828
description: LPAIF core registers
29-
29+
reg-names:
30+
maxItems: 2
3031
clocks:
3132
minItems: 3
3233
maxItems: 6
@@ -36,15 +37,16 @@ properties:
3637
maxItems: 6
3738

3839
interrupts:
39-
maxItems: 1
40+
maxItems: 2
4041
description: LPAIF DMA buffer interrupt
41-
42+
interrupt-names:
43+
maxItems: 2
4244
qcom,adsp:
4345
$ref: /schemas/types.yaml#/definitions/phandle
4446
description: Phandle for the audio DSP node
4547

4648
iommus:
47-
maxItems: 1
49+
maxItems: 2
4850
description: Phandle to apps_smmu node with sid mask
4951

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

6264
patternProperties:
63-
"(^mi2s-[0-9a-f]$|mi2s)":
65+
"^dai-link@[0-9a-f]$":
6466
type: object
65-
description: Required properties for each DAI
66-
67+
description: |
68+
LPASS CPU dai node for each I2S device. Bindings of each node
69+
depends on the specific driver providing the functionality and
70+
properties.
6771
properties:
6872
reg:
6973
maxItems: 1
@@ -85,9 +89,11 @@ patternProperties:
8589
required:
8690
- compatible
8791
- reg
92+
- reg-names
8893
- clocks
8994
- clock-names
9095
- interrupts
96+
- interrupt-names
9197
- '#sound-dai-cells'
9298

9399
additionalProperties: false
@@ -134,13 +140,32 @@ allOf:
134140
then:
135141
properties:
136142
clock-names:
137-
items:
138-
- const: pcnoc-sway-clk
139-
- const: audio-core
140-
- const: mclk0
141-
- const: pcnoc-mport-clk
142-
- const: mi2s-bit-clk0
143-
- const: mi2s-bit-clk1
143+
oneOf:
144+
- items: #for I2S
145+
- const: pcnoc-sway-clk
146+
- const: audio-core
147+
- const: mclk0
148+
- const: pcnoc-mport-clk
149+
- const: mi2s-bit-clk0
150+
- const: mi2s-bit-clk1
151+
- items: #for HDMI
152+
- const: pcnoc-sway-clk
153+
- const: audio-core
154+
- const: pcnoc-mport-clk
155+
reg-names:
156+
anyOf:
157+
- items: #for I2S
158+
- const: lpass-lpaif
159+
- items: #for I2S and HDMI
160+
- const: lpass-hdmiif
161+
- const: lpass-lpaif
162+
interrupt-names:
163+
anyOf:
164+
- items: #for I2S
165+
- const: lpass-irq-lpaif
166+
- items: #for I2S and HDMI
167+
- const: lpass-irq-lpaif
168+
- const: lpass-irq-hdmi
144169
required:
145170
- iommus
146171
- power-domains
@@ -152,12 +177,15 @@ examples:
152177
soc {
153178
#address-cells = <2>;
154179
#size-cells = <2>;
155-
lpass@62f00000 {
180+
lpass@62d80000 {
156181
compatible = "qcom,sc7180-lpass-cpu";
157182
158-
reg = <0 0x62f00000 0 0x29000>;
159-
160-
iommus = <&apps_smmu 0x1020 0>;
183+
reg = <0 0x62d87000 0 0x68000>,
184+
<0 0x62f00000 0 0x29000>;
185+
reg-names = "lpass-hdmiif",
186+
"lpass-lpaif";
187+
iommus = <&apps_smmu 0x1020 0>,
188+
<&apps_smmu 0x1032 0>;
161189
power-domains = <&lpass_hm 0>;
162190
163191
clocks = <&gcc 131>,
@@ -171,14 +199,16 @@ examples:
171199
"mclk0", "pcnoc-mport-clk",
172200
"mi2s-bit-clk0", "mi2s-bit-clk1";
173201
174-
interrupts = <0 160 1>;
175-
202+
interrupts = <0 160 1>,
203+
<0 268 1>;
204+
interrupt-names = "lpass-irq-lpaif",
205+
"lpass-irq-hdmi";
176206
#sound-dai-cells = <1>;
177207
178208
#address-cells = <1>;
179209
#size-cells = <0>;
180210
/* Optional to set different MI2S SD lines */
181-
mi2s-primary@0 {
211+
dai-link@0 {
182212
reg = <MI2S_PRIMARY>;
183213
qcom,playback-sd-lines = <1>;
184214
qcom,capture-sd-lines = <0>;

include/dt-bindings/sound/sc7180-lpass.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#define MI2S_PRIMARY 0
66
#define MI2S_SECONDARY 1
7+
#define LPASS_DP_RX 2
78

89
#define LPASS_MCLK0 0
910

sound/soc/qcom/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ config SND_SOC_LPASS_CPU
1212
tristate
1313
select REGMAP_MMIO
1414

15+
config SND_SOC_LPASS_HDMI
16+
tristate
17+
select REGMAP_MMIO
18+
1519
config SND_SOC_LPASS_PLATFORM
1620
tristate
1721
select REGMAP_MMIO
@@ -30,6 +34,7 @@ config SND_SOC_LPASS_SC7180
3034
tristate
3135
select SND_SOC_LPASS_CPU
3236
select SND_SOC_LPASS_PLATFORM
37+
select SND_SOC_LPASS_HDMI
3338

3439
config SND_SOC_STORM
3540
tristate "ASoC I2S support for Storm boards"

sound/soc/qcom/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# SPDX-License-Identifier: GPL-2.0
22
# Platform
33
snd-soc-lpass-cpu-objs := lpass-cpu.o
4+
snd-soc-lpass-hdmi-objs := lpass-hdmi.o
45
snd-soc-lpass-platform-objs := lpass-platform.o
56
snd-soc-lpass-ipq806x-objs := lpass-ipq806x.o
67
snd-soc-lpass-apq8016-objs := lpass-apq8016.o
78
snd-soc-lpass-sc7180-objs := lpass-sc7180.o
89

910
obj-$(CONFIG_SND_SOC_LPASS_CPU) += snd-soc-lpass-cpu.o
11+
obj-$(CONFIG_SND_SOC_LPASS_HDMI) += snd-soc-lpass-hdmi.o
1012
obj-$(CONFIG_SND_SOC_LPASS_PLATFORM) += snd-soc-lpass-platform.o
1113
obj-$(CONFIG_SND_SOC_LPASS_IPQ806X) += snd-soc-lpass-ipq806x.o
1214
obj-$(CONFIG_SND_SOC_LPASS_APQ8016) += snd-soc-lpass-apq8016.o

sound/soc/qcom/lpass-apq8016.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static struct snd_soc_dai_driver apq8016_lpass_cpu_dai_driver[] = {
125125
};
126126

127127
static int apq8016_lpass_alloc_dma_channel(struct lpass_data *drvdata,
128-
int direction)
128+
int direction, unsigned int dai_id)
129129
{
130130
struct lpass_variant *v = drvdata->variant;
131131
int chan = 0;
@@ -151,7 +151,7 @@ static int apq8016_lpass_alloc_dma_channel(struct lpass_data *drvdata,
151151
return chan;
152152
}
153153

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

0 commit comments

Comments
 (0)