Qualcomm's lpass-hdmi ASoC driver to support audio over dp port
Subsystems (5)
v11 cover Qualcomm's lpass-hdmi ASoC driver to support audio over dp port
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
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 1/7 ASoC: Add sc7180-lpass binding header hdmi define
From: V Sujith Kumar Reddy <[email protected]>
Add header defining hdmi dai-id for SC7180 lpass soc in dt bindings.
--- include/dt-bindings/sound/sc7180-lpass.h | 1 + 1 file changed, 1 insertion(+)
include/dt-bindings/sound/sc7180-lpass.h +1 -0
@@ -4,6 +4,7 @@#define MI2S_PRIMARY 0#define MI2S_SECONDARY 1 +#define LPASS_DP_RX 2#define LPASS_MCLK0 0
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 2/7 ASoC: dt-bindings: Add dt binding for lpass hdmi
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Adds bindings for lpass hdmi interface
which can support audio path over dp.
--- .../devicetree/bindings/sound/qcom,lpass-cpu.yaml | 74 +++++++++++++++------- 1 file changed, 52 insertions(+), 22 deletions(-)
Documentation/devicetree/bindings/sound/qcom,lpass-cpu.yaml +52 -22
@@ -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: - - const: pcnoc-sway-clk - - const: audio-core - - const: mclk0 - - const: pcnoc-mport-clk - - const: mi2s-bit-clk0 - - const: mi2s-bit-clk1 + 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>;
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 3/7 Asoc:qcom:lpass-cpu:Update dts property read API
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Update dts property read API call with platform get property by name, as it make code more readable and avoid conflicts when array of properties to be used.
--- sound/soc/qcom/lpass-cpu.c | 2 +- sound/soc/qcom/lpass-platform.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
sound/soc/qcom/lpass-cpu.c +1 -1
@@ -575,7 +575,7 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)of_lpass_cpu_parse_dai_data (dev, drvdata); - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"lpass-lpaif" ); drvdata->lpaif =devm_ioremap_resource (dev, res);if (IS_ERR ((void const __force *)drvdata->lpaif)) {
sound/soc/qcom/lpass-platform.c +1 -1
@@ -621,7 +621,7 @@ int asoc_qcom_lpass_platform_register(struct platform_device *pdev)struct lpass_variant *v = drvdata->variant;int ret; - drvdata->lpaif_irq =platform_get_irq (pdev,0 ); + drvdata->lpaif_irq =platform_get_irq_byname (pdev,"lpass-irq-lpaif" );if (drvdata->lpaif_irq <0 )return -ENODEV ;
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 4/7 Asoc: qcom: lpass:Update lpaif_dmactl members order
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Update the lpaif_dmactl struct members order to match HDMI reg map members sequence. Separate Interface reg map as it is used for I2S control but not for HDMI control, to make use of bulk API, which makes code more readable.
--- sound/soc/qcom/lpass-platform.c | 8 ++++---- sound/soc/qcom/lpass.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-)
sound/soc/qcom/lpass-platform.c +4 -4
@@ -71,13 +71,13 @@ static int lpass_platform_alloc_dmactl_fields(struct device *dev, rd_dmactl = drvdata->rd_dmactl; wr_dmactl = drvdata->wr_dmactl; - rval =devm_regmap_field_bulk_alloc (dev, map, &rd_dmactl->bursten, - &v->rdma_bursten,6 ); + rval =devm_regmap_field_bulk_alloc (dev, map, &rd_dmactl->intf, + &v->rdma_intf,6 );if (rval)return rval; -return devm_regmap_field_bulk_alloc (dev, map, &wr_dmactl->bursten, - &v->wrdma_bursten,6 ); +return devm_regmap_field_bulk_alloc (dev, map, &wr_dmactl->intf, + &v->wrdma_intf,6 ); } static int lpass_platform_pcmops_open(struct snd_soc_component *component,
sound/soc/qcom/lpass.h +3 -3
@@ -31,9 +31,9 @@ struct lpaif_i2sctl {struct lpaif_dmactl { +struct regmap_field *intf;struct regmap_field *bursten;struct regmap_field *wpscnt; -struct regmap_field *intf;struct regmap_field *fifowm;struct regmap_field *enable;struct regmap_field *dyncclk;
@@ -110,17 +110,17 @@ struct lpass_variant {struct reg_field bitwidth;/* RD_DMA Register fields */ +struct reg_field rdma_intf;struct reg_field rdma_bursten;struct reg_field rdma_wpscnt; -struct reg_field rdma_intf;struct reg_field rdma_fifowm;struct reg_field rdma_enable;struct reg_field rdma_dyncclk;/* WR_DMA Register fields */ +struct reg_field wrdma_intf;struct reg_field wrdma_bursten;struct reg_field wrdma_wpscnt; -struct reg_field wrdma_intf;struct reg_field wrdma_fifowm;struct reg_field wrdma_enable;struct reg_field wrdma_dyncclk;
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 5/7 ASoC: qcom: Add support for lpass hdmi driver
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Upadate lpass cpu and platform driver to support audio over dp. Also add lpass-hdmi.c and lpass-hdmi.h.
--- sound/soc/qcom/Kconfig | 5 + sound/soc/qcom/Makefile | 2 + sound/soc/qcom/lpass-apq8016.c | 4 +- sound/soc/qcom/lpass-cpu.c | 247 ++++++++++++++++++++++++- 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 | 383 ++++++++++++++++++++++++++++++++------- sound/soc/qcom/lpass.h | 118 +++++++++++- 10 files changed, 1075 insertions(+), 97 deletions(-) create mode 100644 sound/soc/qcom/lpass-hdmi.c create mode 100644 sound/soc/qcom/lpass-hdmi.h
sound/soc/qcom/Kconfig +5 -0
@@ -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"
sound/soc/qcom/Makefile +2 -0
@@ -1,12 +1,14 @@ # 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
sound/soc/qcom/lpass-apq8016.c +2 -2
@@ -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);
sound/soc/qcom/lpass-cpu.c +241 -6
278 lines not on this page · raw message
sound/soc/qcom/lpass-hdmi.c new file +258 -0
258 lines not on this page · raw message
sound/soc/qcom/lpass-hdmi.h new file +102 -0
102 lines not on this page · raw message
sound/soc/qcom/lpass-ipq806x.c +2 -2
@@ -96,7 +96,7 @@ static int ipq806x_lpass_exit(struct platform_device *pdev)return 0 ; } -static int ipq806x_lpass_alloc_dma_channel (struct lpass_data *drvdata,int dir) +static int ipq806x_lpass_alloc_dma_channel (struct lpass_data *drvdata,int dir,unsigned int dai_id) {if (dir ==SNDRV_PCM_STREAM_PLAYBACK )return IPQ806X_LPAIF_RDMA_CHAN_MI2S ;
@@ -104,7 +104,7 @@ static int ipq806x_lpass_alloc_dma_channel(struct lpass_data *drvdata, int dir)return -EINVAL ; } -static int ipq806x_lpass_free_dma_channel (struct lpass_data *drvdata,int chan) +static int ipq806x_lpass_free_dma_channel (struct lpass_data *drvdata,int chan,unsigned int dai_id) {return 0 ; }
sound/soc/qcom/lpass-lpaif-reg.h +38 -11
69 lines not on this page · raw message
sound/soc/qcom/lpass-platform.c +314 -69
617 lines not on this page · raw message
sound/soc/qcom/lpass.h +111 -7
193 lines not on this page · raw message
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH v11 5/7] ASoC: qcom: Add support for lpass hdmi driver
Quoted 19 lines · Srinivasa Rao Mandadapu
From: V Sujith Kumar Reddy <[email protected]>
Upadate lpass cpu and platform driver to support audio over dp. Also add
lpass-hdmi.candlpass-hdmi.h.Signed-off-by V Sujith Kumar Reddy <[email protected]>Signed-off-by Srinivasa Rao <[email protected]>--- sound/soc/qcom/Kconfig | 5 + sound/soc/qcom/Makefile | 2 + sound/soc/qcom/lpass-apq8016.c | 4 +- sound/soc/qcom/lpass-cpu.c | 247 ++++++++++++++++++++++++- 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 | 383 ++++++++++++++++++++++++++++++++------- sound/soc/qcom/lpass.h | 118 +++++++++++- 10 files changed, 1075 insertions(+), 97 deletions(-)
Quoted 3 lines
create mode 100644
sound/soc/qcom/lpass-hdmi.c
create mode 100644sound/soc/qcom/lpass-hdmi.h
PATCH v11 6/7 Asoc: qcom: lpass-platform : Increase buffer size
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Increase buffer size to support audio over DP.
--- sound/soc/qcom/lpass-platform.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/qcom/lpass-platform.c +1 -1
@@ -23,7 +23,7 @@ struct lpass_pcm_data {int i2s_port; }; -#define LPASS_PLATFORM_BUFFER_SIZE (16 * 1024) +#define LPASS_PLATFORM_BUFFER_SIZE (24 * 2 * 1024)#define LPASS_PLATFORM_PERIODS 2static const struct snd_pcm_hardware lpass_platform_pcm_hardware = {
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v11 7/7 ASoC: qcom: sc7180: Add support for audio over DP
In reply to Srinivasa Rao MandadapuFrom: V Sujith Kumar Reddy <[email protected]>
Add support for audio playback over DP in lpass
sc7180 platform driver. Update lpass_variant
structure for hdmi data configuaration.
--- sound/soc/qcom/lpass-sc7180.c | 116 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 102 insertions(+), 14 deletions(-)
sound/soc/qcom/lpass-sc7180.c +102 -14
@@ -60,38 +60,65 @@ static struct snd_soc_dai_driver sc7180_lpass_cpu_dai_driver[] = { .probe = &asoc_qcom_lpass_cpu_dai_probe, .ops = &asoc_qcom_lpass_cpu_dai_ops, }, + [LPASS_DP_RX] = { + .id = LPASS_DP_RX, + .name = "Hdmi", + .playback = { + .stream_name = "Hdmi Playback", + .formats = SNDRV_PCM_FMTBIT_S24, + .rates = SNDRV_PCM_RATE_48000, + .rate_min = 48000, + .rate_max = 48000, + .channels_min = 2, + .channels_max = 2, + }, + .ops = &asoc_qcom_lpass_hdmi_dai_ops, + }, };static int sc7180_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 ; -if (direction ==SNDRV_PCM_STREAM_PLAYBACK ) { - chan =find_first_zero_bit (&drvdata->dma_ch_bit_map, - v->rdma_channels); +if (dai_id ==LPASS_DP_RX ) { +if (direction ==SNDRV_PCM_STREAM_PLAYBACK ) { + chan =find_first_zero_bit (&drvdata->hdmi_dma_ch_bit_map, + v->hdmi_rdma_channels); + +if (chan >= v->hdmi_rdma_channels) +return -EBUSY ; + } +set_bit (chan, &drvdata->hdmi_dma_ch_bit_map); + }else { +if (direction ==SNDRV_PCM_STREAM_PLAYBACK ) { + chan =find_first_zero_bit (&drvdata->dma_ch_bit_map, + v->rdma_channels);if (chan >= v->rdma_channels)return -EBUSY ; - }else { - chan =find_next_zero_bit (&drvdata->dma_ch_bit_map, + }else { + chan =find_next_zero_bit (&drvdata->dma_ch_bit_map, v->wrdma_channel_start + v->wrdma_channels, v->wrdma_channel_start); -if (chan >= v->wrdma_channel_start + v->wrdma_channels) -return -EBUSY ; - } - -set_bit (chan, &drvdata->dma_ch_bit_map); +if (chan >= v->wrdma_channel_start + v->wrdma_channels) +return -EBUSY ; + } +set_bit (chan, &drvdata->dma_ch_bit_map); + }return chan; } -static int sc7180_lpass_free_dma_channel (struct lpass_data *drvdata,int chan) +static int sc7180_lpass_free_dma_channel (struct lpass_data *drvdata,int chan,unsigned int dai_id) { -clear_bit (chan, &drvdata->dma_ch_bit_map); +if (dai_id ==LPASS_DP_RX ) +clear_bit (chan, &drvdata->hdmi_dma_ch_bit_map); +else +clear_bit (chan, &drvdata->dma_ch_bit_map);return 0 ; }
@@ -144,6 +171,9 @@ static struct lpass_variant sc7180_data = { .rdma_reg_base = 0xC000, .rdma_reg_stride = 0x1000, .rdma_channels = 5, + .hdmi_rdma_reg_base = 0x64000, + .hdmi_rdma_reg_stride = 0x1000, + .hdmi_rdma_channels = 4, .dmactl_audif_start = 1, .wrdma_reg_base = 0x18000, .wrdma_reg_stride = 0x1000,
@@ -163,7 +193,7 @@ static struct lpass_variant sc7180_data = { .rdma_dyncclk = REG_FIELD_ID(0xC000, 21, 21, 5, 0x1000), .rdma_bursten = REG_FIELD_ID(0xC000, 20, 20, 5, 0x1000), .rdma_wpscnt = REG_FIELD_ID(0xC000, 16, 19, 5, 0x1000), - .rdma_intf = REG_FIELD_ID(0xC000, 12, 15, 5, 0x1000), + .rdma_intf = REG_FIELD_ID(0xC000, 12, 15, 5, 0x1000), .rdma_fifowm = REG_FIELD_ID(0xC000, 1, 5, 5, 0x1000), .rdma_enable = REG_FIELD_ID(0xC000, 0, 0, 5, 0x1000),
@@ -174,6 +204,64 @@ static struct lpass_variant sc7180_data = { .wrdma_fifowm = REG_FIELD_ID(0x18000, 1, 5, 4, 0x1000), .wrdma_enable = REG_FIELD_ID(0x18000, 0, 0, 4, 0x1000), + .hdmi_tx_ctl_addr = 0x1000, + .hdmi_legacy_addr = 0x1008, + .hdmi_vbit_addr = 0x610c0, + .hdmi_ch_lsb_addr = 0x61048, + .hdmi_ch_msb_addr = 0x6104c, + .ch_stride = 0x8, + .hdmi_parity_addr = 0x61034, + .hdmi_dmactl_addr = 0x61038, + .hdmi_dma_stride = 0x4, + .hdmi_DP_addr = 0x610c8, + .hdmi_sstream_addr = 0x6101c, + .hdmi_irq_reg_base = 0x63000, + .hdmi_irq_ports = 1, + + .hdmi_rdma_dyncclk = REG_FIELD_ID(0x64000, 14, 14, 4, 0x1000), + .hdmi_rdma_bursten = REG_FIELD_ID(0x64000, 13, 13, 4, 0x1000), + .hdmi_rdma_burst8 = REG_FIELD_ID(0x64000, 15, 15, 4, 0x1000), + .hdmi_rdma_burst16 = REG_FIELD_ID(0x64000, 16, 16, 4, 0x1000), + .hdmi_rdma_dynburst = REG_FIELD_ID(0x64000, 18, 18, 4, 0x1000), + .hdmi_rdma_wpscnt = REG_FIELD_ID(0x64000, 10, 12, 4, 0x1000), + .hdmi_rdma_fifowm = REG_FIELD_ID(0x64000, 1, 5, 4, 0x1000), + .hdmi_rdma_enable = REG_FIELD_ID(0x64000, 0, 0, 4, 0x1000), + + .sstream_en = REG_FIELD(0x6101c, 0, 0), + .dma_sel = REG_FIELD(0x6101c, 1, 2), + .auto_bbit_en = REG_FIELD(0x6101c, 3, 3), + .layout = REG_FIELD(0x6101c, 4, 4), + .layout_sp = REG_FIELD(0x6101c, 5, 8), + .set_sp_on_en = REG_FIELD(0x6101c, 10, 10), + .dp_audio = REG_FIELD(0x6101c, 11, 11), + .dp_staffing_en = REG_FIELD(0x6101c, 12, 12), + .dp_sp_b_hw_en = REG_FIELD(0x6101c, 13, 13), + + .mute = REG_FIELD(0x610c8, 0, 0), + .as_sdp_cc = REG_FIELD(0x610c8, 1, 3), + .as_sdp_ct = REG_FIELD(0x610c8, 4, 7), + .aif_db4 = REG_FIELD(0x610c8, 8, 15), + .frequency = REG_FIELD(0x610c8, 16, 21), + .mst_index = REG_FIELD(0x610c8, 28, 29), + .dptx_index = REG_FIELD(0x610c8, 30, 31), + + .soft_reset = REG_FIELD(0x1000, 31, 31), + .force_reset = REG_FIELD(0x1000, 30, 30), + + .use_hw_chs = REG_FIELD(0x61038, 0, 0), + .use_hw_usr = REG_FIELD(0x61038, 1, 1), + .hw_chs_sel = REG_FIELD(0x61038, 2, 4), + .hw_usr_sel = REG_FIELD(0x61038, 5, 6), + + .replace_vbit = REG_FIELD(0x610c0, 0, 0), + .vbit_stream = REG_FIELD(0x610c0, 1, 1), + + .legacy_en = REG_FIELD(0x1008, 0, 0), + .calc_en = REG_FIELD(0x61034, 0, 0), + .lsb_bits = REG_FIELD(0x61048, 0, 31), + .msb_bits = REG_FIELD(0x6104c, 0, 31), + + .clk_name = (const char *[]) {"pcnoc-sway-clk" ,"audio-core" ,
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Quoted 62 lines · Srinivasa Rao Mandadapu
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=464856changes since V10:
-- Moved hdmi regmap functions fromlpass-hdmi.ctolpass-cpu.c
-- MovedQCOM_REGMAP_FIELD_ALLOCmacro fromlpass-hdmi.ctolpass.h
changes since V9:
-- Removed unused structureslpass_hdmi.h
changes since V8:
-- Removed redundant structure wrapper for reg map field memebrs
-- Updatedlpass_hdmi_regmap_volatileAPI 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 inlpass_platform_alloc_hdmidmactl_fields. -- DMA alloc and free API signature change inlpass-apq8016.c,lpass-ipq806x.c-- Keeping API "irqreturn_tlpass_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 usedsnd_soc_dai_driverid.
Changes Since v2:
-- Audio buffer size(i.e.LPASS_PLATFORM_BUFFER_SIZE) inlpass-platform.cincreased.
Changes Since v1:
-- Commit messages are updated
-- Addressed Rob Herring review commentsV 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:Updatelpaif_dmactlmembers 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(-)
Quoted 3 lines
create mode 100644
sound/soc/qcom/lpass-hdmi.c
create mode 100644sound/soc/qcom/lpass-hdmi.h
Tested this series on DragonBoard 410c
Hi Srinivas,
Quoted 67 lines · Srinivas Kandagatla
Quoted 62 lines · Srinivasa Rao Mandadapu
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=464856changes since V10:
-- Moved hdmi regmap functions fromlpass-hdmi.ctolpass-cpu.c
-- MovedQCOM_REGMAP_FIELD_ALLOCmacro fromlpass-hdmi.ctolpass.h
changes since V9:
-- Removed unused structureslpass_hdmi.h
changes since V8:
-- Removed redundant structure wrapper for reg map field memebrs
-- Updatedlpass_hdmi_regmap_volatileAPI 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 inlpass_platform_alloc_hdmidmactl_fields. -- DMA alloc and free API signature change inlpass-apq8016.c,lpass-ipq806x.c-- Keeping API "irqreturn_tlpass_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 usedsnd_soc_dai_driverid.
Changes Since v2:
-- Audio buffer size(i.e.LPASS_PLATFORM_BUFFER_SIZE) inlpass-platform.cincreased.
Changes Since v1:
-- Commit messages are updated
-- Addressed Rob Herring review commentsV 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:Updatelpaif_dmactlmembers 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(-)Quoted 3 lines
create mode 100644
sound/soc/qcom/lpass-hdmi.c
create mode 100644sound/soc/qcom/lpass-hdmi.h
Quoted 4 lines
Tested this series on DragonBoard 410c
Tested-by Srinivas Kandagatla <[email protected]>Reviewed-by Srinivas Kandagatla <[email protected]>
I spent quite some time today trying to track down another regression for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch series as the cause. So I'm very surprised that you successfully tested this on DB410c.
Attempting to play HDMI audio results in:
ADV7533: lpass_platform_pcmops_hw_params: invalid interface: 3
ADV7533: lpass_platform_pcmops_trigger: invalid 3 interface
apq8016-lpass-cpu 7708000.audio-controller: ASoC: error at soc_component_trigger on 7708000.audio-controller: -22
Attempting to record analog audio results in:
Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4 Internal error: Oops: 96000004 [#1] PREEMPT SMP CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20 Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT) pc : regmap_write+0x14/0x80 lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] Call trace: regmap_write+0x14/0x80 lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] snd_soc_component_open+0x2c/0x94 ...
Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver" there is a quite obvious mistake there. lpass.h now contains
#include <dt-bindings/sound/sc7180-lpass.h>
and then the SC7810 DAI IDs are hardcoded all over lpass-cpu.c and lpass-platform.c. But apq8016 and ipq806x have completely different DAI IDs so now MI2S_QUATERNARY (HDMI) is invalid and MI2S_TERTIARY (= LPASS_DP_RX in sc7180-lpass.h) is treated as HDMI port.
Effectively LPASS is broken on all platforms except SC7810.
I have a patch prepared to fix this (will send it tomorrow), but I wonder how you have tested this successfully on DB410c. :)
Stephan
Hi Stephan,
Quoted 100 lines · Stephan Gerhold
Hi Srinivas,
Quoted 67 lines · Srinivas Kandagatla
Quoted 62 lines · Srinivasa Rao Mandadapu
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=464856changes since V10:
-- Moved hdmi regmap functions fromlpass-hdmi.ctolpass-cpu.c
-- MovedQCOM_REGMAP_FIELD_ALLOCmacro fromlpass-hdmi.ctolpass.h
changes since V9:
-- Removed unused structureslpass_hdmi.h
changes since V8:
-- Removed redundant structure wrapper for reg map field memebrs
-- Updatedlpass_hdmi_regmap_volatileAPI 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 inlpass_platform_alloc_hdmidmactl_fields. -- DMA alloc and free API signature change inlpass-apq8016.c,lpass-ipq806x.c-- Keeping API "irqreturn_tlpass_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 usedsnd_soc_dai_driverid.
Changes Since v2:
-- Audio buffer size(i.e.LPASS_PLATFORM_BUFFER_SIZE) inlpass-platform.cincreased.
Changes Since v1:
-- Commit messages are updated
-- Addressed Rob Herring review commentsV 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:Updatelpaif_dmactlmembers 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(-)Quoted 3 lines
create mode 100644
sound/soc/qcom/lpass-hdmi.c
create mode 100644sound/soc/qcom/lpass-hdmi.hQuoted 4 lines
Tested this series on DragonBoard 410c
Tested-by Srinivas Kandagatla <[email protected]>Reviewed-by Srinivas Kandagatla <[email protected]>I spent quite some time today trying to track down another regression for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch series as the cause. So I'm very surprised that you successfully tested this on DB410c.
Attempting to play HDMI audio results in:
ADV7533:
lpass_platform_pcmops_hw_params: invalid interface: 3
ADV7533:lpass_platform_pcmops_trigger: invalid 3 interface
apq8016-lpass-cpu 7708000.audio-controller: ASoC: error atsoc_component_triggeron 7708000.audio-controller: -22Attempting to record analog audio results in:
Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4 Internal error: Oops: 96000004 [#1] PREEMPT SMP CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20 Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT) pc : regmap_write+0x14/0x80 lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] Call trace: regmap_write+0x14/0x80 lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] snd_soc_component_open+0x2c/0x94 ...
Quoted 3 lines
Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver" there is a quite obvious mistake there.
lpass.hnow contains
We did hit these two bugs recently while June was testing a platform based of 410c.
we had to these 2 fixes in his dev branch
https://paste.ubuntu.com/p/MCbpBgH7JV/
and a hack:
https://paste.ubuntu.com/p/GYDSDmJt7Y/
I got side tracked with other stuff, so I could not cleanup the lpass hack patch to send it!
With this two patches June was able to test all the usecases for 410c.
Quoted 7 lines
#include <
dt-bindings/sound/sc7180-lpass.h>and then the SC7810 DAI IDs are hardcoded all over
lpass-cpu.candlpass-platform.c. But apq8016 and ipq806x have completely different DAI IDs so nowMI2S_QUATERNARY(HDMI) is invalid andMI2S_TERTIARY(=LPASS_DP_RXinsc7180-lpass.h) is treated as HDMI port.
Yes, this basically overwritten some of the defines. Specially MI2S_TERTIARY and MI2S_QUATERNARY
We should probably consolidate these defines to a single lpass.h file in include/dt-bindings/ and not split them into soc specific.
Quoted 4 lines
Effectively LPASS is broken on all platforms except SC7810.
I have a patch prepared to fix this (will send it tomorrow), but I wonder how you have tested this successfully on DB410c. :)
My tests are pretty basic headset/speaker playback cases, this basically tests PRIMARY and SECONDARY MI2S and not MI2S_TERTIARY or QUAT MI2S.
June reported this to me some time during Christmas.
Look forward to review your patches!
--srini
Quoted 3 lines
Stephan
Hi,
Quoted 103 lines · Srinivas Kandagatla
Quoted 98 lines · Stephan Gerhold
Quoted 67 lines · Srinivas Kandagatla
Quoted 62 lines · Srinivasa Rao Mandadapu
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=464856changes since V10:
-- Moved hdmi regmap functions fromlpass-hdmi.ctolpass-cpu.c
-- MovedQCOM_REGMAP_FIELD_ALLOCmacro fromlpass-hdmi.ctolpass.h
changes since V9:
-- Removed unused structureslpass_hdmi.h
changes since V8:
-- Removed redundant structure wrapper for reg map field memebrs
-- Updatedlpass_hdmi_regmap_volatileAPI 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 inlpass_platform_alloc_hdmidmactl_fields. -- DMA alloc and free API signature change inlpass-apq8016.c,lpass-ipq806x.c-- Keeping API "irqreturn_tlpass_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 usedsnd_soc_dai_driverid.
Changes Since v2:
-- Audio buffer size(i.e.LPASS_PLATFORM_BUFFER_SIZE) inlpass-platform.cincreased.
Changes Since v1:
-- Commit messages are updated
-- Addressed Rob Herring review commentsV 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:Updatelpaif_dmactlmembers 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(-)Quoted 3 lines
create mode 100644
sound/soc/qcom/lpass-hdmi.c
create mode 100644sound/soc/qcom/lpass-hdmi.hQuoted 4 lines
Tested this series on DragonBoard 410c
Tested-by Srinivas Kandagatla <[email protected]>Reviewed-by Srinivas Kandagatla <[email protected]>I spent quite some time today trying to track down another regression for MSM8916/DragonBoard 410c audio in 5.10 and identified this patch series as the cause. So I'm very surprised that you successfully tested this on DB410c.
Attempting to play HDMI audio results in:
ADV7533:
lpass_platform_pcmops_hw_params: invalid interface: 3
ADV7533:lpass_platform_pcmops_trigger: invalid 3 interface
apq8016-lpass-cpu 7708000.audio-controller: ASoC: error atsoc_component_triggeron 7708000.audio-controller: -22Attempting to record analog audio results in:
Unable to handle kernel NULL pointer dereference at virtual address 00000000000001e4 Internal error: Oops: 96000004 [#1] PREEMPT SMP CPU: 1 PID: 1568 Comm: arecord Not tainted 5.11.0-rc3 #20 Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT) pc : regmap_write+0x14/0x80 lr : lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] Call trace: regmap_write+0x14/0x80 lpass_platform_pcmops_open+0xd8/0x210 [snd_soc_lpass_platform] snd_soc_component_open+0x2c/0x94 ...Quoted 3 lines
Looking at the changes in "ASoC: qcom: Add support for lpass hdmi driver" there is a quite obvious mistake there.
lpass.hnow contains
Quoted 7 lines
We did hit these two bugs recently while June was testing a platform based of 410c.
we had to these 2 fixes in his dev branch
I fixed that one a bit differently in
"ASoC: hdmi-codec: Fix return value in hdmi_codec_set_jack()"
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/commit/?h=for-5.11&id=2a0435df963f996ca870a2ef1cbf1773dc0ea25a
It might be useful to implement the jack detection in adv7511, but I guess we would also need some changes in sound/soc/qcom/apq8016_sbc.c to setup SND_JACK_LINEOUT. And somehow there would need to be a way to differentiate between the normal audio jack and the "HDMI jack".
Quoted 6 lines
and a hack:
https://paste.ubuntu.com/p/GYDSDmJt7Y/I got side tracked with other stuff, so I could not cleanup the lpass hack patch to send it!
Quoted 7 lines
With this two patches June was able to test all the usecases for 410c.
[...]
We should probably consolidate these defines to a single
lpass.hfile ininclude/dt-bindings/and not split them into soc specific.
I agree, especially in case more special DAIs are added in the future. However, in my patch I tried to avoid doing that for the following two reasons:
- Changing dt-bindings after they are added is generally discouraged.
but more importantly:
- lpass-ipq806x.c does not seem to have PRIMARY, SECONDARY, ... but something completely different. I know nothing about that platform so I would not know how to handle it.
I will post my patch and then you can decide.
Thanks,
Stephan
Mark Brown
maintainerQuoted 9 lines · Srinivasa Rao Mandadapu
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[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/7] ASoC: Add sc7180-lpass binding header hdmi define
commit: 12fbfc4cabec65950bb0cc10eab0fc5c4c4d039f
[2/7] ASoC: dt-bindings: Add dt binding for lpass hdmi
commit: 8e3fdc52ccc64c64912b4785a39f525db9db1fbc
[3/7] Asoc:qcom:lpass-cpu:Update dts property read API
commit: 4049a3b87847fec754632d233bffbd608364917f
[4/7] Asoc: qcom: lpass:Update lpaif_dmactl members order
commit: d9e8e61243958409645c18c9267b6dbaaaf22364
[5/7] ASoC: qcom: Add support for lpass hdmi driver
commit: 7cb37b7bd0d3c93e381ae7abf30971819966bd9d
[6/7] Asoc: qcom: lpass-platform : Increase buffer size
commit: 03f20e209d07968c410fc404b3d636dc446d3ef2
[7/7] ASoC: qcom: sc7180: Add support for audio over DP
commit: 2ad63dc8df6b6108aee82dc77c820e3918bc0a65All 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