diff --git a/arch/arm64/boot/dts/amlogic/axg_s400.dts b/arch/arm64/boot/dts/amlogic/axg_s400.dts index ec04c8df060a..02ddb0259b22 100644 --- a/arch/arm64/boot/dts/amlogic/axg_s400.dts +++ b/arch/arm64/boot/dts/amlogic/axg_s400.dts @@ -357,10 +357,10 @@ format = "i2s"; mclk-fs = <256>; continuous-clock; - bitclock-inversion; - frame-inversion; - //bitclock-master = <&aml_tdmb>; - //frame-master = <&aml_tdmb>; + //bitclock-inversion; + //frame-inversion; + bitclock-master = <&aml_tdmb>; + frame-master = <&aml_tdmb>; cpu { sound-dai = <&aml_tdmb>; dai-tdm-slot-tx-mask = <1 1>; @@ -370,7 +370,8 @@ system-clock-frequency = <12288000>; }; codec { - sound-dai = <&dummy_codec &dummy_codec>; + sound-dai = <&tlv320adc3101_32 &tlv320adc3101_30 + &tlv320adc3101_34 &tlv320adc3101_36>; }; }; @@ -630,11 +631,11 @@ status = "okay"; //pinctrl-names="default"; //pinctrl-0=<&b_i2c_master>; - tlv320adc3101_32: tlv320adc3101_32@30 { + tlv320adc3101_32: tlv320adc3101_32@32 { compatible = "ti,tlv320adc3101"; #sound-dai-cells = <0>; - reg = <0x32>; - status = "disabled"; + reg = <0x19>; + status = "okay"; }; tas5707_36: tas5707_36@36 { @@ -662,19 +663,19 @@ tlv320adc3101_30: tlv320adc3101_30@30 { compatible = "ti,tlv320adc3101"; #sound-dai-cells = <0>; - reg = <0x30>; + reg = <0x18>; status = "okay"; }; tlv320adc3101_34: tlv320adc3101_34@30 { compatible = "ti,tlv320adc3101"; #sound-dai-cells = <0>; - reg = <0x34>; + reg = <0x1a>; status = "okay"; }; tlv320adc3101_36: tlv320adc3101_36@30 { compatible = "ti,tlv320adc3101"; #sound-dai-cells = <0>; - reg = <0x36>; + reg = <0x1b>; status = "okay"; }; }; @@ -713,7 +714,7 @@ GIC_SPI 89 IRQ_TYPE_EDGE_RISING>; interrupt-names = "tdmin", "tdmout"; pinctrl-names = "tdm_pins"; - pinctrl-0 = <&tdmb_mclk &tdmout_b>; + pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; }; aml_tdmc: tdmc { @@ -801,20 +802,18 @@ tdmout_b: tdmout_b { mux { - pins = "GPIOA_8", "GPIOA_9", "GPIOA_10", - "GPIOA_11", "GPIOA_12", "GPIOA_13"; + pins = "GPIOA_8", "GPIOA_9"; + /*"GPIOA_10","GPIOA_11", "GPIOA_12", "GPIOA_13";*/ function = "tdmb_out"; }; }; // tdmin and tdmout are the same pins. can't use at same time - /* - *tdmin_b:tdmin_b { - * mux { - * pins = "GPIOA_10", "GPIOA_11", "GPIOA_12", "GPIOA_13"; - * function = "tdmb_in"; - * }; - *}; - */ + tdmin_b:tdmin_b { + mux { + pins = "GPIOA_10", "GPIOA_11", "GPIOA_12", "GPIOA_13"; + function = "tdmb_in"; + }; + }; tdmc_mclk: tdmc_mclk { mux { diff --git a/sound/soc/amlogic/auge/card.c b/sound/soc/amlogic/auge/card.c index 97604e2c81c7..f8890699d983 100644 --- a/sound/soc/amlogic/auge/card.c +++ b/sound/soc/amlogic/auge/card.c @@ -151,14 +151,14 @@ static int aml_card_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; - struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct aml_card_data *priv = snd_soc_card_get_drvdata(rtd->card); struct aml_dai_props *dai_props = aml_priv_to_props(priv, rtd->num); unsigned int mclk, mclk_fs = 0; - int ret = 0; + int i = 0, ret = 0; + pr_info("%s ..numcodec:%d\n", __func__, rtd->num_codecs); if (priv->mclk_fs) mclk_fs = priv->mclk_fs; else if (dai_props->mclk_fs) @@ -166,11 +166,16 @@ static int aml_card_hw_params(struct snd_pcm_substream *substream, if (mclk_fs) { mclk = params_rate(params) * mclk_fs; - ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, - SND_SOC_CLOCK_IN); - if (ret && ret != -ENOTSUPP) - goto err; + for (i = 0; i < rtd->num_codecs; i++) { + struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; + + ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, + SND_SOC_CLOCK_IN); + + if (ret && ret != -ENOTSUPP) + goto err; + } ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, SND_SOC_CLOCK_OUT); if (ret && ret != -ENOTSUPP)