* [PATCH v3 0/2] Add documentation and machine driver for SC7180 sound card @ 2020-07-31 8:40 Cheng-Yi Chiang 2020-07-31 8:40 ` [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings Cheng-Yi Chiang 2020-07-31 8:40 ` [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration Cheng-Yi Chiang 0 siblings, 2 replies; 8+ messages in thread From: Cheng-Yi Chiang @ 2020-07-31 8:40 UTC (permalink / raw) To: linux-kernel Cc: Taniya Das, devicetree, tzungbi, Banajit Goswami, Stephan Gerhold, linux-arm-msm, Patrick Lai, Takashi Iwai, Liam Girdwood, Rob Herring, Bjorn Andersson, alsa-devel, Andy Gross, Rohit kumar, Mark Brown, dianders, Srini Kandagatla, dgreid, linux-arm-kernel, Cheng-Yi Chiang 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 <cychiang@chromium.org> Rohit kumar <rohitkr@codeaurora.org> Ajit Pandey <ajitp@codeaurora.org> 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 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings 2020-07-31 8:40 [PATCH v3 0/2] Add documentation and machine driver for SC7180 sound card Cheng-Yi Chiang @ 2020-07-31 8:40 ` Cheng-Yi Chiang 2020-07-31 18:27 ` Rob Herring 2020-07-31 18:32 ` Rob Herring 2020-07-31 8:40 ` [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration Cheng-Yi Chiang 1 sibling, 2 replies; 8+ messages in thread From: Cheng-Yi Chiang @ 2020-07-31 8:40 UTC (permalink / raw) To: linux-kernel Cc: Taniya Das, devicetree, tzungbi, Banajit Goswami, Stephan Gerhold, linux-arm-msm, Patrick Lai, Takashi Iwai, Liam Girdwood, Rob Herring, Bjorn Andersson, alsa-devel, Andy Gross, Rohit kumar, Mark Brown, dianders, Srini Kandagatla, dgreid, linux-arm-kernel, Cheng-Yi Chiang Add devicetree bindings documentation file for sc7180 sound card. Signed-off-by: Cheng-Yi Chiang <cychiang@chromium.org> --- .../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 <rohitkr@codeaurora.org> + - Cheng-Yi Chiang <cychiang@chromium.org> + +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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings 2020-07-31 8:40 ` [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings Cheng-Yi Chiang @ 2020-07-31 18:27 ` Rob Herring 2020-08-03 8:24 ` Cheng-yi Chiang 2020-07-31 18:32 ` Rob Herring 1 sibling, 1 reply; 8+ messages in thread From: Rob Herring @ 2020-07-31 18:27 UTC (permalink / raw) To: Cheng-Yi Chiang Cc: Taniya Das, devicetree, alsa-devel, Banajit Goswami, linux-kernel, Stephan Gerhold, Liam Girdwood, linux-arm-msm, Patrick Lai, Takashi Iwai, dianders, tzungbi, Bjorn Andersson, Rob Herring, Andy Gross, Srini Kandagatla, Mark Brown, Rohit kumar, dgreid, linux-arm-kernel 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 <cychiang@chromium.org> > --- > .../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. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings 2020-07-31 18:27 ` Rob Herring @ 2020-08-03 8:24 ` Cheng-yi Chiang 0 siblings, 0 replies; 8+ messages in thread From: Cheng-yi Chiang @ 2020-08-03 8:24 UTC (permalink / raw) To: Rob Herring Cc: Taniya Das, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..., Banajit Goswami, linux-kernel, Stephan Gerhold, Liam Girdwood, linux-arm-msm, Patrick Lai, Takashi Iwai, Doug Anderson, Tzung-Bi Shih, Bjorn Andersson, Rob Herring, Andy Gross, Srini Kandagatla, Mark Brown, Rohit kumar, Dylan Reid, Linux ARM On Sat, Aug 1, 2020 at 2:27 AM Rob Herring <robh@kernel.org> 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 <cychiang@chromium.org> > > --- > > .../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! ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings 2020-07-31 8:40 ` [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings Cheng-Yi Chiang 2020-07-31 18:27 ` Rob Herring @ 2020-07-31 18:32 ` Rob Herring 2020-08-03 8:40 ` Cheng-yi Chiang 1 sibling, 1 reply; 8+ messages in thread From: Rob Herring @ 2020-07-31 18:32 UTC (permalink / raw) To: Cheng-Yi Chiang Cc: Taniya Das, devicetree, alsa-devel, Banajit Goswami, Stephan Gerhold, Liam Girdwood, linux-arm-msm, Patrick Lai, Takashi Iwai, linux-kernel, tzungbi, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, dianders, Srini Kandagatla, dgreid, linux-arm-kernel 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 <cychiang@chromium.org> > --- > .../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 <rohitkr@codeaurora.org> > + - Cheng-Yi Chiang <cychiang@chromium.org> > + > +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 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings 2020-07-31 18:32 ` Rob Herring @ 2020-08-03 8:40 ` Cheng-yi Chiang 0 siblings, 0 replies; 8+ messages in thread From: Cheng-yi Chiang @ 2020-08-03 8:40 UTC (permalink / raw) To: Rob Herring Cc: Taniya Das, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..., Banajit Goswami, Stephan Gerhold, Liam Girdwood, linux-arm-msm, Patrick Lai, Takashi Iwai, linux-kernel, Tzung-Bi Shih, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, Doug Anderson, Srini Kandagatla, Dylan Reid, Linux ARM On Sat, Aug 1, 2020 at 2:32 AM Rob Herring <robh@kernel.org> 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 <cychiang@chromium.org> > > --- > > .../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 <rohitkr@codeaurora.org> > > + - Cheng-Yi Chiang <cychiang@chromium.org> > > + > > +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 > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration 2020-07-31 8:40 [PATCH v3 0/2] Add documentation and machine driver for SC7180 sound card Cheng-Yi Chiang 2020-07-31 8:40 ` [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings Cheng-Yi Chiang @ 2020-07-31 8:40 ` Cheng-Yi Chiang 2020-07-31 9:17 ` Tzung-Bi Shih 1 sibling, 1 reply; 8+ messages in thread From: Cheng-Yi Chiang @ 2020-07-31 8:40 UTC (permalink / raw) To: linux-kernel Cc: Taniya Das, alsa-devel, Banajit Goswami, Liam Girdwood, Rohit kumar, Cheng-Yi Chiang, Patrick Lai, Ajit Pandey, Andy Gross, dgreid, devicetree, tzungbi, Stephan Gerhold, linux-arm-msm, Rob Herring, Bjorn Andersson, linux-arm-kernel, dianders, Takashi Iwai, Mark Brown, Srini Kandagatla From: Ajit Pandey <ajitp@codeaurora.org> 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 <ajitp@codeaurora.org> Signed-off-by: Cheng-Yi Chiang <cychiang@chromium.org> --- 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration 2020-07-31 8:40 ` [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration Cheng-Yi Chiang @ 2020-07-31 9:17 ` Tzung-Bi Shih 0 siblings, 0 replies; 8+ messages in thread From: Tzung-Bi Shih @ 2020-07-31 9:17 UTC (permalink / raw) To: Cheng-Yi Chiang Cc: Taniya Das, ALSA development, Banajit Goswami, Takashi Iwai, Rohit kumar, Patrick Lai, Ajit Pandey, Andy Gross, dgreid, devicetree, Tzung-Bi Shih, Stephan Gerhold, linux-arm-msm, Rob Herring, Bjorn Andersson, linux-arm-kernel, Douglas Anderson, Liam Girdwood, Linux Kernel Mailing List, Mark Brown, Srini Kandagatla On Fri, Jul 31, 2020 at 4:41 PM Cheng-Yi Chiang <cychiang@chromium.org> wrote: > > From: Ajit Pandey <ajitp@codeaurora.org> > > 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 <ajitp@codeaurora.org> > Signed-off-by: Cheng-Yi Chiang <cychiang@chromium.org> Reviewed-by: Tzung-Bi Shih <tzungbi@google.com> LGTM. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-08-03 8:41 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-07-31 8:40 [PATCH v3 0/2] Add documentation and machine driver for SC7180 sound card Cheng-Yi Chiang 2020-07-31 8:40 ` [PATCH v3 1/2] ASoC: qcom: dt-bindings: Add sc7180 machine bindings Cheng-Yi Chiang 2020-07-31 18:27 ` Rob Herring 2020-08-03 8:24 ` Cheng-yi Chiang 2020-07-31 18:32 ` Rob Herring 2020-08-03 8:40 ` Cheng-yi Chiang 2020-07-31 8:40 ` [PATCH v3 2/2] ASoC: qcom: sc7180: Add machine driver for sound card registration Cheng-Yi Chiang 2020-07-31 9:17 ` Tzung-Bi Shih
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).