Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e00447fa authored by Jyri Sarha's avatar Jyri Sarha Committed by Mark Brown
Browse files

ASoC: tlv320aic31xx: Add basic codec driver implementation



This commit adds a bare bones driver support for TLV320AIC31XX family
audio codecs. The driver adds basic stereo playback trough headphone
and speaker outputs and mono capture trough microphone inputs.

The driver is currently missing support at least for mini DSP features
and jack detection. I have tested the driver only on TLV320AIC3111,
but based on the data sheets TLV320AIC3100, TLV320AIC3110, and
TLV320AIC3120 should work Ok too.

The base for the implementation was taken from:
git@gitorious.org:ti-codecs/ti-codecs.git ajitk/topics/k3.10.1-aic31xx
-branch at commit 77504eba0294764e9e63b4a0c696b44db187cd13.

Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent b46f2c5c
Loading
Loading
Loading
Loading
+61 −0
Original line number Original line Diff line number Diff line
Texas Instruments - tlv320aic31xx Codec module

The tlv320aic31xx serial control bus communicates through I2C protocols

Required properties:

- compatible - "string" - One of:
    "ti,tlv320aic310x" - Generic TLV320AIC31xx with mono speaker amp
    "ti,tlv320aic311x" - Generic TLV320AIC31xx with stereo speaker amp
    "ti,tlv320aic3100" - TLV320AIC3100 (mono speaker amp, no MiniDSP)
    "ti,tlv320aic3110" - TLV320AIC3110 (stereo speaker amp, no MiniDSP)
    "ti,tlv320aic3120" - TLV320AIC3120 (mono speaker amp, MiniDSP)
    "ti,tlv320aic3111" - TLV320AIC3111 (stereo speaker amp, MiniDSP)

- reg - <int> -  I2C slave address


Optional properties:

- gpio-reset - gpio pin number used for codec reset
- ai31xx-micbias-vg - MicBias Voltage setting
        1 or MICBIAS_2_0V - MICBIAS output is powered to 2.0V
        2 or MICBIAS_2_5V - MICBIAS output is powered to 2.5V
        3 or MICBIAS_AVDD - MICBIAS output is connected to AVDD
	If this node is not mentioned or if the value is unknown, then
	micbias	is set to 2.0V.
- HPVDD-supply, SPRVDD-supply, SPLVDD-supply, AVDD-supply, IOVDD-supply,
  DVDD-supply : power supplies for the device as covered in
  Documentation/devicetree/bindings/regulator/regulator.txt

CODEC output pins:
  * HPL
  * HPR
  * SPL, devices with stereo speaker amp
  * SPR, devices with stereo speaker amp
  * SPK, devices with mono speaker amp
  * MICBIAS

CODEC input pins:
  * MIC1LP
  * MIC1RP
  * MIC1LM

The pins can be used in referring sound node's audio-routing property.

Example:
#include <dt-bindings/sound/tlv320aic31xx-micbias.h>

tlv320aic31xx: tlv320aic31xx@18 {
	compatible = "ti,tlv320aic311x";
	reg = <0x18>;

	ai31xx-micbias-vg = <MICBIAS_OFF>;

	HPVDD-supply = <&regulator>;
	SPRVDD-supply = <&regulator>;
	SPLVDD-supply = <&regulator>;
	AVDD-supply = <&regulator>;
	IOVDD-supply = <&regulator>;
	DVDD-supply = <&regulator>;
};
+8 −0
Original line number Original line Diff line number Diff line
#ifndef __DT_TLV320AIC31XX_MICBIAS_H
#define __DT_TLV320AIC31XX_MICBIAS_H

#define MICBIAS_2_0V		1
#define MICBIAS_2_5V		2
#define MICBIAS_AVDDV		3

#endif /* __DT_TLV320AIC31XX_MICBIAS_H */
+4 −0
Original line number Original line Diff line number Diff line
@@ -73,6 +73,7 @@ config SND_SOC_ALL_CODECS
	select SND_SOC_TAS5086 if I2C
	select SND_SOC_TAS5086 if I2C
	select SND_SOC_TLV320AIC23 if I2C
	select SND_SOC_TLV320AIC23 if I2C
	select SND_SOC_TLV320AIC26 if SPI_MASTER
	select SND_SOC_TLV320AIC26 if SPI_MASTER
	select SND_SOC_TLV320AIC31XX if I2C
	select SND_SOC_TLV320AIC32X4 if I2C
	select SND_SOC_TLV320AIC32X4 if I2C
	select SND_SOC_TLV320AIC3X if I2C
	select SND_SOC_TLV320AIC3X if I2C
	select SND_SOC_TPA6130A2 if I2C
	select SND_SOC_TPA6130A2 if I2C
@@ -361,6 +362,9 @@ config SND_SOC_TLV320AIC26
	tristate
	tristate
	depends on SPI
	depends on SPI


config SND_SOC_TLV320AIC31XX
        tristate

config SND_SOC_TLV320AIC32X4
config SND_SOC_TLV320AIC32X4
	tristate
	tristate


+2 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ snd-soc-stac9766-objs := stac9766.o
snd-soc-tas5086-objs := tas5086.o
snd-soc-tas5086-objs := tas5086.o
snd-soc-tlv320aic23-objs := tlv320aic23.o
snd-soc-tlv320aic23-objs := tlv320aic23.o
snd-soc-tlv320aic26-objs := tlv320aic26.o
snd-soc-tlv320aic26-objs := tlv320aic26.o
snd-soc-tlv320aic31xx-objs := tlv320aic31xx.o
snd-soc-tlv320aic32x4-objs := tlv320aic32x4.o
snd-soc-tlv320aic32x4-objs := tlv320aic32x4.o
snd-soc-tlv320aic3x-objs := tlv320aic3x.o
snd-soc-tlv320aic3x-objs := tlv320aic3x.o
snd-soc-tlv320dac33-objs := tlv320dac33.o
snd-soc-tlv320dac33-objs := tlv320dac33.o
@@ -194,6 +195,7 @@ obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o
obj-$(CONFIG_SND_SOC_TAS5086)	+= snd-soc-tas5086.o
obj-$(CONFIG_SND_SOC_TAS5086)	+= snd-soc-tas5086.o
obj-$(CONFIG_SND_SOC_TLV320AIC23)	+= snd-soc-tlv320aic23.o
obj-$(CONFIG_SND_SOC_TLV320AIC23)	+= snd-soc-tlv320aic23.o
obj-$(CONFIG_SND_SOC_TLV320AIC26)	+= snd-soc-tlv320aic26.o
obj-$(CONFIG_SND_SOC_TLV320AIC26)	+= snd-soc-tlv320aic26.o
obj-$(CONFIG_SND_SOC_TLV320AIC31XX)     += snd-soc-tlv320aic31xx.o
obj-$(CONFIG_SND_SOC_TLV320AIC32X4)     += snd-soc-tlv320aic32x4.o
obj-$(CONFIG_SND_SOC_TLV320AIC32X4)     += snd-soc-tlv320aic32x4.o
obj-$(CONFIG_SND_SOC_TLV320AIC3X)	+= snd-soc-tlv320aic3x.o
obj-$(CONFIG_SND_SOC_TLV320AIC3X)	+= snd-soc-tlv320aic3x.o
obj-$(CONFIG_SND_SOC_TLV320DAC33)	+= snd-soc-tlv320dac33.o
obj-$(CONFIG_SND_SOC_TLV320DAC33)	+= snd-soc-tlv320dac33.o
+1295 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading