2020-07-31 08:41:18

by Cheng-Yi Chiang

[permalink] [raw]
Subject: [PATCH v3 0/2] Add documentation and machine driver for SC7180 sound card

Note:
- The machine driver patch depends on LPASS patch series so it is not ready to be merged now.
ASoC: qcom: Add support for SC7180 lpass variant https://patchwork.kernel.org/cover/11678133/
- The machine driver patch is made by the collaboration of
Cheng-Yi Chiang <[email protected]>
Rohit kumar <[email protected]>
Ajit Pandey <[email protected]>
But Ajit has left codeaurora.

Changes from v1 to v2:
- Ducumentation: Addressed all suggestions from Doug.
- Machine driver:
- Fix comment style for license.
- Sort includes.
- Remove sc7180_snd_hw_params.
- Remove sc7180_dai_init and use aux device instead for headset jack registration.
- Statically define format for Primary MI2S.
- Atomic is not a concern because there is mutex in card to make sure
startup and shutdown happen sequentially.
- Fix missing return -EINVAL in startup.
- Use static sound card.
- Use devm_kzalloc to avoid kfree.

Changes from v2 to v3:
- Ducumentation: Addressed suggestions from Srini.
- Machine driver:
- Reuse qcom_snd_parse_of to parse properties.
- Remove playback-only and capture-only.
- Misc fixes to address comments.

Thanks for the review!
Ajit Pandey (1):
ASoC: qcom: sc7180: Add machine driver for sound card registration

Cheng-Yi Chiang (1):
ASoC: qcom: dt-bindings: Add sc7180 machine bindings

.../bindings/sound/qcom,sc7180.yaml | 113 ++++++++
sound/soc/qcom/Kconfig | 12 +
sound/soc/qcom/Makefile | 2 +
sound/soc/qcom/sc7180.c | 244 ++++++++++++++++++
4 files changed, 371 insertions(+)
create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
create mode 100644 sound/soc/qcom/sc7180.c

--
2.28.0.163.g6104cc2f0b6-goog


2020-07-31 08:41:51

by Cheng-Yi Chiang

[permalink] [raw]
Subject: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings

Add devicetree bindings documentation file for sc7180 sound card.

Signed-off-by: Cheng-Yi Chiang <[email protected]>
---
.../bindings/sound/qcom,sc7180.yaml | 113 ++++++++++++++++++
1 file changed, 113 insertions(+)
create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml

diff --git a/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
new file mode 100644
index 000000000000..ce8a5a2d9df9
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
@@ -0,0 +1,113 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/qcom,sc7180.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Technologies Inc. SC7180 ASoC sound card driver
+
+maintainers:
+ - Rohit kumar <[email protected]>
+ - Cheng-Yi Chiang <[email protected]>
+
+description:
+ This binding describes the SC7180 sound card which uses LPASS for audio.
+
+definitions:
+
+ dai:
+ type: object
+ properties:
+ sound-dai:
+ maxItems: 1
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: phandle array of the codec or CPU DAI
+
+ required:
+ - sound-dai
+
+properties:
+ compatible:
+ contains:
+ const: qcom,sc7180-sndcard
+
+ audio-routing:
+ $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+ description:
+ A list of the connections between audio components. Each entry is a
+ pair of strings, the first being the connection's sink, the second
+ being the connection's source.
+
+ model:
+ $ref: /schemas/types.yaml#/definitions/string
+ description: User specified audio sound card name
+
+ aux-dev:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description: phandle of the codec for headset detection
+
+patternProperties:
+ "^dai-link(@[0-9]+)?$":
+ description:
+ Each subnode represents a dai link. Subnodes of each dai links would be
+ cpu/codec dais.
+
+ type: object
+
+ properties:
+ link-name:
+ description: Indicates dai-link name and PCM stream name.
+ $ref: /schemas/types.yaml#/definitions/string
+ maxItems: 1
+
+ cpu:
+ $ref: "#/definitions/dai"
+
+ codec:
+ $ref: "#/definitions/dai"
+
+ required:
+ - link-name
+ - cpu
+ - codec
+
+ additionalProperties: false
+
+examples:
+
+ - |
+ sound {
+ compatible = "qcom,sc7180-sndcard";
+ model = "sc7180-snd-card";
+
+ audio-routing =
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+
+ aux-dev = <&alc5682>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ dai-link@0 {
+ link-name = "MultiMedia0";
+ cpu {
+ sound-dai = <&lpass_cpu 0>;
+ };
+
+ codec {
+ sound-dai = <&alc5682 0>;
+ };
+ };
+
+ dai-link@1 {
+ link-name = "MultiMedia1";
+ cpu {
+ sound-dai = <&lpass_cpu 1>;
+ };
+
+ codec {
+ sound-dai = <&max98357a>;
+ };
+ };
+ };
--
2.28.0.163.g6104cc2f0b6-goog

2020-07-31 08:42:06

by Cheng-Yi Chiang

[permalink] [raw]
Subject: [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration

From: Ajit Pandey <[email protected]>

Add new driver to register sound card on sc7180 trogdor board and
do the required configuration for lpass cpu dai and external codecs
connected over MI2S interfaces.

Signed-off-by: Ajit Pandey <[email protected]>
Signed-off-by: Cheng-Yi Chiang <[email protected]>
---
sound/soc/qcom/Kconfig | 12 ++
sound/soc/qcom/Makefile | 2 +
sound/soc/qcom/sc7180.c | 244 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 258 insertions(+)
create mode 100644 sound/soc/qcom/sc7180.c

diff --git a/sound/soc/qcom/Kconfig b/sound/soc/qcom/Kconfig
index 5d6b2466a2f2..54aa2ede229c 100644
--- a/sound/soc/qcom/Kconfig
+++ b/sound/soc/qcom/Kconfig
@@ -110,3 +110,15 @@ config SND_SOC_SDM845
To add support for audio on Qualcomm Technologies Inc.
SDM845 SoC-based systems.
Say Y if you want to use audio device on this SoCs.
+
+config SND_SOC_SC7180
+ tristate "SoC Machine driver for SC7180 boards"
+ depends on SND_SOC_QCOM
+ select SND_SOC_QCOM_COMMON
+ select SND_SOC_LPASS_SC7180
+ select SND_SOC_MAX98357A
+ select SND_SOC_RT5682
+ help
+ To add support for audio on Qualcomm Technologies Inc.
+ SC7180 SoC-based systems.
+ Say Y if you want to use audio device on this SoCs.
diff --git a/sound/soc/qcom/Makefile b/sound/soc/qcom/Makefile
index 41b2c7a23a4d..3f6275d90526 100644
--- a/sound/soc/qcom/Makefile
+++ b/sound/soc/qcom/Makefile
@@ -15,12 +15,14 @@ snd-soc-storm-objs := storm.o
snd-soc-apq8016-sbc-objs := apq8016_sbc.o
snd-soc-apq8096-objs := apq8096.o
snd-soc-sdm845-objs := sdm845.o
+snd-soc-sc7180-objs := sc7180.o
snd-soc-qcom-common-objs := common.o

obj-$(CONFIG_SND_SOC_STORM) += snd-soc-storm.o
obj-$(CONFIG_SND_SOC_APQ8016_SBC) += snd-soc-apq8016-sbc.o
obj-$(CONFIG_SND_SOC_MSM8996) += snd-soc-apq8096.o
obj-$(CONFIG_SND_SOC_SDM845) += snd-soc-sdm845.o
+obj-$(CONFIG_SND_SOC_SC7180) += snd-soc-sc7180.o
obj-$(CONFIG_SND_SOC_QCOM_COMMON) += snd-soc-qcom-common.o

#DSP lib
diff --git a/sound/soc/qcom/sc7180.c b/sound/soc/qcom/sc7180.c
new file mode 100644
index 000000000000..7849376f63ba
--- /dev/null
+++ b/sound/soc/qcom/sc7180.c
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2020, The Linux Foundation. All rights reserved.
+//
+// sc7180.c -- ALSA SoC Machine driver for SC7180
+
+#include <dt-bindings/sound/sc7180-lpass.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <sound/core.h>
+#include <sound/jack.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <uapi/linux/input-event-codes.h>
+
+#include "../codecs/rt5682.h"
+#include "common.h"
+#include "lpass.h"
+
+#define DEFAULT_SAMPLE_RATE_48K 48000
+#define DEFAULT_MCLK_RATE 19200000
+#define RT5682_PLL1_FREQ (48000 * 512)
+
+struct sc7180_snd_data {
+ struct snd_soc_jack jack;
+ u32 pri_mi2s_clk_count;
+};
+
+static void sc7180_jack_free(struct snd_jack *jack)
+{
+ struct snd_soc_component *component = jack->private_data;
+
+ snd_soc_component_set_jack(component, NULL, NULL);
+}
+
+static int sc7180_headset_init(struct snd_soc_component *component)
+{
+ struct snd_soc_card *card = component->card;
+ struct sc7180_snd_data *pdata = snd_soc_card_get_drvdata(card);
+ struct snd_jack *jack;
+ int rval;
+
+ rval = snd_soc_card_jack_new(
+ card, "Headset Jack",
+ SND_JACK_HEADSET |
+ SND_JACK_HEADPHONE |
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3,
+ &pdata->jack, NULL, 0);
+
+ if (rval < 0) {
+ dev_err(card->dev, "Unable to add Headset Jack\n");
+ return rval;
+ }
+
+ jack = pdata->jack.jack;
+
+ snd_jack_set_key(jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
+ snd_jack_set_key(jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
+ snd_jack_set_key(jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
+ snd_jack_set_key(jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
+
+ jack->private_data = component;
+ jack->private_free = sc7180_jack_free;
+
+ rval = snd_soc_component_set_jack(component,
+ &pdata->jack, NULL);
+ if (rval != 0 && rval != -EOPNOTSUPP) {
+ dev_warn(card->dev, "Failed to set jack: %d\n", rval);
+ return rval;
+ }
+
+ return 0;
+}
+
+static struct snd_soc_aux_dev sc7180_headset_dev = {
+ .dlc = COMP_EMPTY(),
+ .init = sc7180_headset_init,
+};
+
+static int sc7180_snd_startup(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_card *card = rtd->card;
+ struct sc7180_snd_data *data = snd_soc_card_get_drvdata(card);
+ struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
+ struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+ int ret;
+
+ switch (cpu_dai->id) {
+ case MI2S_PRIMARY:
+ if (++data->pri_mi2s_clk_count == 1) {
+ snd_soc_dai_set_sysclk(cpu_dai,
+ LPASS_MCLK0,
+ DEFAULT_MCLK_RATE,
+ SNDRV_PCM_STREAM_PLAYBACK);
+ }
+
+ snd_soc_dai_set_fmt(codec_dai,
+ SND_SOC_DAIFMT_CBS_CFS |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_I2S);
+
+ /* Configure PLL1 for codec */
+ ret = snd_soc_dai_set_pll(codec_dai, 0, RT5682_PLL1_S_MCLK,
+ DEFAULT_MCLK_RATE, RT5682_PLL1_FREQ);
+ if (ret) {
+ dev_err(rtd->dev, "can't set codec pll: %d\n", ret);
+ return ret;
+ }
+
+ /* Configure sysclk for codec */
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
+ RT5682_PLL1_FREQ,
+ SND_SOC_CLOCK_IN);
+ if (ret)
+ dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n",
+ ret);
+
+ break;
+ case MI2S_SECONDARY:
+ break;
+ default:
+ dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__,
+ cpu_dai->id);
+ return -EINVAL;
+ }
+ return 0;
+}
+
+static void sc7180_snd_shutdown(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_card *card = rtd->card;
+ struct sc7180_snd_data *data = snd_soc_card_get_drvdata(card);
+ struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
+
+ switch (cpu_dai->id) {
+ case MI2S_PRIMARY:
+ if (--data->pri_mi2s_clk_count == 0) {
+ snd_soc_dai_set_sysclk(cpu_dai,
+ LPASS_MCLK0,
+ 0,
+ SNDRV_PCM_STREAM_PLAYBACK);
+ }
+ break;
+ case MI2S_SECONDARY:
+ break;
+ default:
+ dev_err(rtd->dev, "%s: invalid dai id 0x%x\n", __func__,
+ cpu_dai->id);
+ break;
+ }
+}
+
+static const struct snd_soc_ops sc7180_ops = {
+ .startup = sc7180_snd_startup,
+ .shutdown = sc7180_snd_shutdown,
+};
+
+static const struct snd_soc_dapm_widget sc7180_snd_widgets[] = {
+ SND_SOC_DAPM_HP("Headphone Jack", NULL),
+ SND_SOC_DAPM_MIC("Headset Mic", NULL),
+};
+
+static struct snd_soc_card sc7180_card = {
+ .owner = THIS_MODULE,
+ .aux_dev = &sc7180_headset_dev,
+ .num_aux_devs = 1,
+ .dapm_widgets = sc7180_snd_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(sc7180_snd_widgets),
+};
+
+static int sc7180_parse_aux_of(struct device *dev)
+{
+ sc7180_headset_dev.dlc.of_node = of_parse_phandle(
+ dev->of_node, "aux-dev", 0);
+
+ if (!sc7180_headset_dev.dlc.of_node)
+ return -EINVAL;
+ return 0;
+}
+
+static void sc7180_add_ops(struct snd_soc_card *card)
+{
+ struct snd_soc_dai_link *link;
+ int i;
+
+ for_each_card_prelinks(card, i, link)
+ link->ops = &sc7180_ops;
+}
+
+static int sc7180_snd_platform_probe(struct platform_device *pdev)
+{
+ struct snd_soc_card *card = &sc7180_card;
+ struct sc7180_snd_data *data;
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ /* Allocate the private data */
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ card->dev = dev;
+
+ ret = qcom_snd_parse_of(card);
+ if (ret) {
+ dev_err(dev, "Error parsing OF data\n");
+ return ret;
+ }
+
+ snd_soc_card_set_drvdata(card, data);
+
+ sc7180_add_ops(card);
+
+ ret = sc7180_parse_aux_of(dev);
+ if (ret) {
+ dev_err(dev, "Failed to parse OF for jack device\n");
+ return ret;
+ }
+
+ return devm_snd_soc_register_card(dev, card);
+}
+
+static const struct of_device_id sc7180_snd_device_id[] = {
+ { .compatible = "qcom,sc7180-sndcard" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, sc7180_snd_device_id);
+
+static struct platform_driver sc7180_snd_driver = {
+ .probe = sc7180_snd_platform_probe,
+ .driver = {
+ .name = "msm-snd-sc7180",
+ .of_match_table = sc7180_snd_device_id,
+ },
+};
+module_platform_driver(sc7180_snd_driver);
+
+MODULE_DESCRIPTION("sc7180 ASoC Machine Driver");
+MODULE_LICENSE("GPL v2");
--
2.28.0.163.g6104cc2f0b6-goog

2020-07-31 09:18:47

by Tzung-Bi Shih

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration

On Fri, Jul 31, 2020 at 4:41 PM Cheng-Yi Chiang <[email protected]> wrote:
>
> From: Ajit Pandey <[email protected]>
>
> Add new driver to register sound card on sc7180 trogdor board and
> do the required configuration for lpass cpu dai and external codecs
> connected over MI2S interfaces.
>
> Signed-off-by: Ajit Pandey <[email protected]>
> Signed-off-by: Cheng-Yi Chiang <[email protected]>
Reviewed-by: Tzung-Bi Shih <[email protected]>

LGTM.

2020-07-31 18:28:12

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings

On Fri, 31 Jul 2020 16:40:22 +0800, Cheng-Yi Chiang wrote:
> Add devicetree bindings documentation file for sc7180 sound card.
>
> Signed-off-by: Cheng-Yi Chiang <[email protected]>
> ---
> .../bindings/sound/qcom,sc7180.yaml | 113 ++++++++++++++++++
> 1 file changed, 113 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
>


My bot found errors running 'make dt_binding_check' on your patch:

Documentation/devicetree/bindings/sound/qcom,sc7180.example.dts:32.24-41.15: Warning (unit_address_vs_reg): /example-0/sound/dai-link@0: node has a unit name, but no reg or ranges property
Documentation/devicetree/bindings/sound/qcom,sc7180.example.dts:43.24-52.15: Warning (unit_address_vs_reg): /example-0/sound/dai-link@1: node has a unit name, but no reg or ranges property


See https://patchwork.ozlabs.org/patch/1339316

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure dt-schema is up to date:

pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade

Please check and re-submit.

2020-07-31 18:33:25

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings

On Fri, Jul 31, 2020 at 04:40:22PM +0800, Cheng-Yi Chiang wrote:
> Add devicetree bindings documentation file for sc7180 sound card.
>
> Signed-off-by: Cheng-Yi Chiang <[email protected]>
> ---
> .../bindings/sound/qcom,sc7180.yaml | 113 ++++++++++++++++++
> 1 file changed, 113 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
>
> diff --git a/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> new file mode 100644
> index 000000000000..ce8a5a2d9df9
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> @@ -0,0 +1,113 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/sound/qcom,sc7180.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm Technologies Inc. SC7180 ASoC sound card driver
> +
> +maintainers:
> + - Rohit kumar <[email protected]>
> + - Cheng-Yi Chiang <[email protected]>
> +
> +description:
> + This binding describes the SC7180 sound card which uses LPASS for audio.
> +
> +definitions:

Please don't use 'definitions'. Either just duplicate it or you can do
'patternProperties'.

> +
> + dai:
> + type: object
> + properties:
> + sound-dai:
> + maxItems: 1
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + description: phandle array of the codec or CPU DAI

This is a common property. You can assume we have a common schema
definition for it. IOW, 'sound-dai: true' is enough as it's always a
single phandle+args.

> +
> + required:
> + - sound-dai
> +
> +properties:
> + compatible:
> + contains:
> + const: qcom,sc7180-sndcard
> +
> + audio-routing:
> + $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> + description:
> + A list of the connections between audio components. Each entry is a
> + pair of strings, the first being the connection's sink, the second
> + being the connection's source.
> +
> + model:
> + $ref: /schemas/types.yaml#/definitions/string
> + description: User specified audio sound card name
> +
> + aux-dev:
> + $ref: /schemas/types.yaml#/definitions/phandle
> + description: phandle of the codec for headset detection
> +
> +patternProperties:
> + "^dai-link(@[0-9]+)?$":
> + description:
> + Each subnode represents a dai link. Subnodes of each dai links would be
> + cpu/codec dais.
> +
> + type: object
> +
> + properties:
> + link-name:
> + description: Indicates dai-link name and PCM stream name.
> + $ref: /schemas/types.yaml#/definitions/string
> + maxItems: 1
> +
> + cpu:
> + $ref: "#/definitions/dai"
> +
> + codec:
> + $ref: "#/definitions/dai"
> +
> + required:
> + - link-name
> + - cpu
> + - codec
> +
> + additionalProperties: false
> +
> +examples:
> +
> + - |
> + sound {
> + compatible = "qcom,sc7180-sndcard";
> + model = "sc7180-snd-card";
> +
> + audio-routing =
> + "Headphone Jack", "HPOL",
> + "Headphone Jack", "HPOR";
> +
> + aux-dev = <&alc5682>;
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + dai-link@0 {
> + link-name = "MultiMedia0";
> + cpu {
> + sound-dai = <&lpass_cpu 0>;
> + };
> +
> + codec {
> + sound-dai = <&alc5682 0>;
> + };
> + };
> +
> + dai-link@1 {
> + link-name = "MultiMedia1";
> + cpu {
> + sound-dai = <&lpass_cpu 1>;
> + };
> +
> + codec {
> + sound-dai = <&max98357a>;
> + };
> + };
> + };
> --
> 2.28.0.163.g6104cc2f0b6-goog
>

2020-08-02 04:22:12

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration

Hi Cheng-Yi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on asoc/for-next]
[also build test ERROR on linux/master linus/master v5.8-rc7 next-20200731]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Cheng-Yi-Chiang/Add-documentation-and-machine-driver-for-SC7180-sound-card/20200731-164257
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> sound/soc/qcom/sc7180.c:7:10: fatal error: dt-bindings/sound/sc7180-lpass.h: No such file or directory
7 | #include <dt-bindings/sound/sc7180-lpass.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

vim +7 sound/soc/qcom/sc7180.c

6
> 7 #include <dt-bindings/sound/sc7180-lpass.h>
8 #include <linux/module.h>
9 #include <linux/of_device.h>
10 #include <linux/platform_device.h>
11 #include <sound/core.h>
12 #include <sound/jack.h>
13 #include <sound/pcm.h>
14 #include <sound/pcm_params.h>
15 #include <sound/soc.h>
16 #include <uapi/linux/input-event-codes.h>
17

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (1.92 kB)
.config.gz (74.53 kB)
Download all attachments

2020-08-03 08:27:34

by Cheng-Yi Chiang

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings

On Sat, Aug 1, 2020 at 2:27 AM Rob Herring <[email protected]> wrote:
>
> On Fri, 31 Jul 2020 16:40:22 +0800, Cheng-Yi Chiang wrote:
> > Add devicetree bindings documentation file for sc7180 sound card.
> >
> > Signed-off-by: Cheng-Yi Chiang <[email protected]>
> > ---
> > .../bindings/sound/qcom,sc7180.yaml | 113 ++++++++++++++++++
> > 1 file changed, 113 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> >
>
>
> My bot found errors running 'make dt_binding_check' on your patch:
>
> Documentation/devicetree/bindings/sound/qcom,sc7180.example.dts:32.24-41.15: Warning (unit_address_vs_reg): /example-0/sound/dai-link@0: node has a unit name, but no reg or ranges property
> Documentation/devicetree/bindings/sound/qcom,sc7180.example.dts:43.24-52.15: Warning (unit_address_vs_reg): /example-0/sound/dai-link@1: node has a unit name, but no reg or ranges property
>
>
> See https://patchwork.ozlabs.org/patch/1339316
>
> If you already ran 'make dt_binding_check' and didn't see the above
> error(s), then make sure dt-schema is up to date:
>
> pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade
>
> Please check and re-submit.
>
I have passed this in v2 patch, but removed reg in v3 patch since it
is not used.
In v4, I have added back reg = <0> and reg = <1> into the example, and
reg property into schema to fix this error.
Since reg property is not used in the driver, I am not sure whether I
should add it in the schema.
Please let me know which is preferred. Thanks!

2020-08-03 08:43:24

by Cheng-Yi Chiang

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings

On Sat, Aug 1, 2020 at 2:32 AM Rob Herring <[email protected]> wrote:
>
> On Fri, Jul 31, 2020 at 04:40:22PM +0800, Cheng-Yi Chiang wrote:
> > Add devicetree bindings documentation file for sc7180 sound card.
> >
> > Signed-off-by: Cheng-Yi Chiang <[email protected]>
> > ---
> > .../bindings/sound/qcom,sc7180.yaml | 113 ++++++++++++++++++
> > 1 file changed, 113 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> > new file mode 100644
> > index 000000000000..ce8a5a2d9df9
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/sound/qcom,sc7180.yaml
> > @@ -0,0 +1,113 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/sound/qcom,sc7180.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Qualcomm Technologies Inc. SC7180 ASoC sound card driver
> > +
> > +maintainers:
> > + - Rohit kumar <[email protected]>
> > + - Cheng-Yi Chiang <[email protected]>
> > +
> > +description:
> > + This binding describes the SC7180 sound card which uses LPASS for audio.
> > +
> > +definitions:
>
> Please don't use 'definitions'. Either just duplicate it or you can do
> 'patternProperties'.
>
Removed dai definition in v4.
> > +
> > + dai:
> > + type: object
> > + properties:
> > + sound-dai:
> > + maxItems: 1
> > + $ref: /schemas/types.yaml#/definitions/phandle-array
> > + description: phandle array of the codec or CPU DAI
>
> This is a common property. You can assume we have a common schema
> definition for it. IOW, 'sound-dai: true' is enough as it's always a
> single phandle+args.
>
In the examples I found,
Documentation/devicetree/bindings/sound/amlogic,gx-sound-card.yaml,
Documentation/devicetree/bindings/sound/samsung,midas-audio.yaml
use:

sound-dai:
$ref: /schemas/types.yaml#/definitions/phandle
description: phandle of the CPU DAI

Documentation/devicetree/bindings/sound/simple-card.yaml
just use

sound-dai:
maxItems: 1

In v4, I used 'sound-dai: true' as suggested.

But I am a bit confused about assuming there is a common schema
definition for it.
I checked the code at https://github.com/devicetree-org/dt-schema but
did not found the definition for it.
Did I miss something here ?

Thanks for the help!

> > +
> > + required:
> > + - sound-dai
> > +
> > +properties:
> > + compatible:
> > + contains:
> > + const: qcom,sc7180-sndcard
> > +
> > + audio-routing:
> > + $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> > + description:
> > + A list of the connections between audio components. Each entry is a
> > + pair of strings, the first being the connection's sink, the second
> > + being the connection's source.
> > +
> > + model:
> > + $ref: /schemas/types.yaml#/definitions/string
> > + description: User specified audio sound card name
> > +
> > + aux-dev:
> > + $ref: /schemas/types.yaml#/definitions/phandle
> > + description: phandle of the codec for headset detection
> > +
> > +patternProperties:
> > + "^dai-link(@[0-9]+)?$":
> > + description:
> > + Each subnode represents a dai link. Subnodes of each dai links would be
> > + cpu/codec dais.
> > +
> > + type: object
> > +
> > + properties:
> > + link-name:
> > + description: Indicates dai-link name and PCM stream name.
> > + $ref: /schemas/types.yaml#/definitions/string
> > + maxItems: 1
> > +
> > + cpu:
> > + $ref: "#/definitions/dai"
> > +
> > + codec:
> > + $ref: "#/definitions/dai"
> > +
> > + required:
> > + - link-name
> > + - cpu
> > + - codec
> > +
> > + additionalProperties: false
> > +
> > +examples:
> > +
> > + - |
> > + sound {
> > + compatible = "qcom,sc7180-sndcard";
> > + model = "sc7180-snd-card";
> > +
> > + audio-routing =
> > + "Headphone Jack", "HPOL",
> > + "Headphone Jack", "HPOR";
> > +
> > + aux-dev = <&alc5682>;
> > +
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + dai-link@0 {
> > + link-name = "MultiMedia0";
> > + cpu {
> > + sound-dai = <&lpass_cpu 0>;
> > + };
> > +
> > + codec {
> > + sound-dai = <&alc5682 0>;
> > + };
> > + };
> > +
> > + dai-link@1 {
> > + link-name = "MultiMedia1";
> > + cpu {
> > + sound-dai = <&lpass_cpu 1>;
> > + };
> > +
> > + codec {
> > + sound-dai = <&max98357a>;
> > + };
> > + };
> > + };
> > --
> > 2.28.0.163.g6104cc2f0b6-goog
> >