Commit cb0ab640 authored by Mark Brown's avatar Mark Brown

ASoC: codecs: wcd937x: add wcd937x audio codec

Merge series from Mohammad Rafi Shaik <quic_mohs@quicinc.com>:

This patchset adds support for Qualcomm WCD9370/WCD9375 codec.

Qualcomm WCD9370/WCD9375 Codec is a standalone Hi-Fi audio codec IC
connected over SoundWire. This device has two SoundWire devices, RX and
TX respectively supporting 3 x ADCs, ClassH, Ear, Aux PA, 2xHPH,
6 DMICs and MBHC.

For codec driver to be functional it would need both tx and rx Soundwire devices
to be up and this is taken care by using device component framework and device-links
are used to ensure proper pm dependencies. Ex tx does not enter suspend
before rx or codec is suspended.

This patchset along with other SoundWire patches on the list
have been tested on QCM6490 IDP device.
parents b97e4090 313e978d
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/qcom,wcd937x-sdw.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm SoundWire Slave devices on WCD9370/WCD9375
maintainers:
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
description: |
Qualcomm WCD9370/WCD9375 Codec is a standalone Hi-Fi audio codec IC.
It has RX and TX Soundwire slave devices. This bindings is for the
slave devices.
properties:
compatible:
const: sdw20217010a00
reg:
maxItems: 1
qcom,tx-port-mapping:
description: |
Specifies static port mapping between device and host tx ports.
In the order of the device port index which are adc1_port, adc23_port,
dmic03_mbhc_port, dmic46_port.
Supports maximum 4 tx soundwire ports.
WCD9370 TX Port 1 (ADC1) <=> SWR2 Port 2
WCD9370 TX Port 2 (ADC2, 3) <=> SWR2 Port 2
WCD9370 TX Port 3 (DMIC0,1,2,3 & MBHC) <=> SWR2 Port 3
WCD9370 TX Port 4 (DMIC4,5,6,7) <=> SWR2 Port 4
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 4
maxItems: 4
items:
enum: [1, 2, 3, 4]
qcom,rx-port-mapping:
description: |
Specifies static port mapping between device and host rx ports.
In the order of device port index which are hph_port, clsh_port,
comp_port, lo_port, dsd port.
Supports maximum 5 rx soundwire ports.
WCD9370 RX Port 1 (HPH_L/R) <==> SWR1 Port 1 (HPH_L/R)
WCD9370 RX Port 2 (CLSH) <==> SWR1 Port 2 (CLSH)
WCD9370 RX Port 3 (COMP_L/R) <==> SWR1 Port 3 (COMP_L/R)
WCD9370 RX Port 4 (LO) <==> SWR1 Port 4 (LO)
WCD9370 RX Port 5 (DSD_L/R) <==> SWR1 Port 5 (DSD)
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 5
maxItems: 5
items:
enum: [1, 2, 3, 4, 5]
required:
- compatible
- reg
additionalProperties: false
examples:
- |
soundwire@3210000 {
reg = <0x03210000 0x2000>;
#address-cells = <2>;
#size-cells = <0>;
wcd937x_rx: codec@0,4 {
compatible = "sdw20217010a00";
reg = <0 4>;
qcom,rx-port-mapping = <1 2 3 4 5>;
};
};
soundwire@3230000 {
reg = <0x03230000 0x2000>;
#address-cells = <2>;
#size-cells = <0>;
wcd937x_tx: codec@0,3 {
compatible = "sdw20217010a00";
reg = <0 3>;
qcom,tx-port-mapping = <2 2 3 4>;
};
};
...
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/qcom,wcd937x.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm WCD9370/WCD9375 Audio Codec
maintainers:
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
description:
Qualcomm WCD9370/WCD9375 Codec is a standalone Hi-Fi audio codec IC.
It has RX and TX Soundwire slave devices.
allOf:
- $ref: dai-common.yaml#
- $ref: qcom,wcd93xx-common.yaml#
properties:
compatible:
oneOf:
- const: qcom,wcd9370-codec
- items:
- const: qcom,wcd9375-codec
- const: qcom,wcd9370-codec
vdd-px-supply:
description: A reference to the 1.8V I/O supply
required:
- compatible
- vdd-px-supply
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
codec {
compatible = "qcom,wcd9370-codec";
pinctrl-names = "default", "sleep";
pinctrl-0 = <&wcd_reset_n>;
pinctrl-1 = <&wcd_reset_n_sleep>;
reset-gpios = <&tlmm 83 GPIO_ACTIVE_HIGH>;
vdd-buck-supply = <&vreg_l17b_1p8>;
vdd-rxtx-supply = <&vreg_l18b_1p8>;
vdd-px-supply = <&vreg_l18b_1p8>;
vdd-mic-bias-supply = <&vreg_bob>;
qcom,micbias1-microvolt = <1800000>;
qcom,micbias2-microvolt = <1800000>;
qcom,micbias3-microvolt = <1800000>;
qcom,micbias4-microvolt = <1800000>;
qcom,rx-device = <&wcd937x_rx>;
qcom,tx-device = <&wcd937x_tx>;
#sound-dai-cells = <1>;
};
/* ... */
soundwire@3210000 {
reg = <0x03210000 0x2000>;
#address-cells = <2>;
#size-cells = <0>;
wcd937x_rx: codec@0,4 {
compatible = "sdw20217010a00";
reg = <0 4>;
qcom,rx-port-mapping = <1 2 3 4 5>;
};
};
soundwire@3230000 {
reg = <0x03230000 0x2000>;
#address-cells = <2>;
#size-cells = <0>;
wcd937x_tx: codec@0,3 {
compatible = "sdw20217010a00";
reg = <0 3>;
qcom,tx-port-mapping = <1 2 3 4>;
};
};
...
......@@ -279,6 +279,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_UDA1380
imply SND_SOC_WCD9335
imply SND_SOC_WCD934X
imply SND_SOC_WCD937X_SDW
imply SND_SOC_WCD938X_SDW
imply SND_SOC_WCD939X_SDW
imply SND_SOC_LPASS_MACRO_COMMON
......@@ -2111,6 +2112,25 @@ config SND_SOC_WCD934X
The WCD9340/9341 is a audio codec IC Integrated in
Qualcomm SoCs like SDM845.
config SND_SOC_WCD937X
depends on SND_SOC_WCD937X_SDW
tristate
depends on SOUNDWIRE || !SOUNDWIRE
select SND_SOC_WCD_CLASSH
config SND_SOC_WCD937X_SDW
tristate "WCD9370/WCD9375 Codec - SDW"
select SND_SOC_WCD937X
select SND_SOC_WCD_MBHC
select REGMAP_IRQ
depends on SOUNDWIRE
select REGMAP_SOUNDWIRE
help
The WCD9370/9375 is an audio codec IC used with SoCs
like SC7280 or QCM6490 chipsets, and it connected
via soundwire.
To compile this codec driver say Y or m.
config SND_SOC_WCD938X
depends on SND_SOC_WCD938X_SDW
tristate
......
......@@ -318,6 +318,8 @@ snd-soc-wcd-classh-y := wcd-clsh-v2.o
snd-soc-wcd-mbhc-y := wcd-mbhc-v2.o
snd-soc-wcd9335-y := wcd9335.o
snd-soc-wcd934x-y := wcd934x.o
snd-soc-wcd937x-objs := wcd937x.o
snd-soc-wcd937x-sdw-objs := wcd937x-sdw.o
snd-soc-wcd938x-y := wcd938x.o
snd-soc-wcd938x-sdw-y := wcd938x-sdw.o
snd-soc-wcd939x-y := wcd939x.o
......@@ -714,6 +716,11 @@ obj-$(CONFIG_SND_SOC_WCD_CLASSH) += snd-soc-wcd-classh.o
obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o
obj-$(CONFIG_SND_SOC_WCD9335) += snd-soc-wcd9335.o
obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x.o
ifdef CONFIG_SND_SOC_WCD937X_SDW
# avoid link failure by forcing sdw code built-in when needed
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x-sdw.o
endif
obj-$(CONFIG_SND_SOC_WCD938X) += snd-soc-wcd938x.o
ifdef CONFIG_SND_SOC_WCD938X_SDW
# avoid link failure by forcing sdw code built-in when needed
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment