Skip to content

Commit f24afe3

Browse files
zhaopeipengakiernan
authored andcommitted
codec: fixed audio codec tlv320adc3101 input mode error
PD#150798: codec: fixed audio codec tlv320adc3101 input mode add single end and differential input for S400&S420 Change-Id: I83086663b38e322425f6719247c89877504f22f5 Signed-off-by: Peipeng Zhao <[email protected]>
1 parent 6c5dc0f commit f24afe3

File tree

6 files changed

+31
-8
lines changed

6 files changed

+31
-8
lines changed

arch/arm64/boot/dts/amlogic/axg_s400.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,7 @@
877877
compatible = "ti,tlv320adc3101";
878878
#sound-dai-cells = <0>;
879879
reg = <0x19>;
880+
differential_pair = <1>;
880881
status = "okay";
881882
};
882883

arch/arm64/boot/dts/amlogic/axg_s400_v03.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,7 @@
877877
compatible = "ti,tlv320adc3101";
878878
#sound-dai-cells = <0>;
879879
reg = <0x19>;
880+
differential_pair = <1>;
880881
status = "okay";
881882
};
882883

arch/arm64/boot/dts/amlogic/axg_s420.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@
708708
compatible = "ti,tlv320adc3101";
709709
#sound-dai-cells = <0>;
710710
reg = <0x19>;
711+
differential_pair = <1>;
711712
status = "okay";
712713
};
713714

arch/arm64/boot/dts/amlogic/axg_s420_128m.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@
707707
compatible = "ti,tlv320adc3101";
708708
#sound-dai-cells = <0>;
709709
reg = <0x19>;
710+
differential_pair = <1>;
710711
status = "okay";
711712
};
712713

arch/arm64/boot/dts/amlogic/axg_s420_v03.dts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@
709709
compatible = "ti,tlv320adc3101";
710710
#sound-dai-cells = <0>;
711711
reg = <0x19>;
712+
differential_pair = <1>;
712713
status = "okay";
713714
};
714715

sound/soc/codecs/amlogic/tlv320adc3101.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ struct adc3101_priv {
6767
int codec_mask;
6868
struct i2c_client *client[4];
6969
u8 page_no;
70+
/* differential_pair
71+
* 0: Single-ended;
72+
* 1: Differential Pair;
73+
*/
74+
unsigned int differential_pair;
7075
};
7176

7277
enum{
@@ -523,14 +528,20 @@ static int adc3101_hw_params(struct snd_pcm_substream *substream,
523528
pr_info("%s iface1 = %02x\n", __func__, data);
524529

525530
snd_soc_write(codec, ADC3101_MICBIAS, 0x50);
526-
/* 0x3f: differential, 0xFC:single input */
527-
snd_soc_write(codec, ADC3101_LMICPGANIN, 0x3F);
528-
/* 0x3f: differential input */
529-
snd_soc_write(codec, ADC3101_RMICPGANIN, 0x3F);
530-
/* 0x3f: differential, 0xFC:single input */
531-
snd_soc_write(codec, ADC3101_LMICPGAPIN, 0x3F);
532-
/* 0x3f: differential input */
533-
snd_soc_write(codec, ADC3101_RMICPGAPIN, 0x3F);
531+
532+
if (adc3101->differential_pair == 1) {
533+
pr_info("%s differential pair\n", __func__);
534+
snd_soc_write(codec, ADC3101_LMICPGANIN, 0x33); //54
535+
snd_soc_write(codec, ADC3101_RMICPGANIN, 0x33); //57
536+
snd_soc_write(codec, ADC3101_LMICPGAPIN, 0x3F); //52
537+
snd_soc_write(codec, ADC3101_RMICPGAPIN, 0x3F); //55
538+
} else {
539+
pr_info("%s single end\n", __func__);
540+
snd_soc_write(codec, ADC3101_LMICPGANIN, 0x3F); //54
541+
snd_soc_write(codec, ADC3101_RMICPGANIN, 0x3F); //57
542+
snd_soc_write(codec, ADC3101_LMICPGAPIN, 0xCF); //52
543+
snd_soc_write(codec, ADC3101_RMICPGAPIN, 0xCF); //55
544+
}
534545
snd_soc_write(codec, ADC3101_LMICPGAVOL, lr_gain);
535546
snd_soc_write(codec, ADC3101_RMICPGAVOL, lr_gain);
536547
snd_soc_write(codec, ADC3101_ADCSETUP, 0xc2);
@@ -822,6 +833,13 @@ static int adc3101_i2c_probe(struct i2c_client *i2c,
822833
return ret;
823834
}
824835
}
836+
ret = of_property_read_u32(i2c->dev.of_node, "differential_pair",
837+
&adc3101->differential_pair);
838+
if (ret) {
839+
pr_err("failed to get differential_pair, set it default\n");
840+
adc3101->differential_pair = 0;
841+
ret = 0;
842+
}
825843
pr_info("%s i2c:%p\n", __func__, i2c);
826844
ret = snd_soc_register_codec(&i2c->dev,
827845
&soc_codec_dev_adc3101, adc3101_dai, 1);

0 commit comments

Comments
 (0)