linux/sound/soc
Oleksandr Suvorov b1f373a11d
ASoC: sgtl5000: Improve VAG power and mute control
VAG power control is improved to fit the manual [1]. This patch fixes as
minimum one bug: if customer muxes Headphone to Line-In right after boot,
the VAG power remains off that leads to poor sound quality from line-in.

I.e. after boot:
  - Connect sound source to Line-In jack;
  - Connect headphone to HP jack;
  - Run following commands:
  $ amixer set 'Headphone' 80%
  $ amixer set 'Headphone Mux' LINE_IN

Change VAG power on/off control according to the following algorithm:
  - turn VAG power ON on the 1st incoming event.
  - keep it ON if there is any active VAG consumer (ADC/DAC/HP/Line-In).
  - turn VAG power OFF when there is the latest consumer's pre-down event
    come.
  - always delay after VAG power OFF to avoid pop.
  - delay after VAG power ON if the initiative consumer is Line-In, this
    prevents pop during line-in muxing.

According to the data sheet [1], to avoid any pops/clicks,
the outputs should be muted during input/output
routing changes.

[1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf

Cc: stable@vger.kernel.org
Fixes: 9b34e6cc3b ("ASoC: Add Freescale SGTL5000 codec support")
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20190719100524.23300-3-oleksandr.suvorov@toradex.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2019-07-22 13:26:24 +01:00
..
adi treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 177 2019-05-30 11:29:19 -07:00
amd Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
atmel ASoC: atmel: tse850-pcm5142: consider CPU-Platform possibility 2019-06-28 15:10:51 +01:00
au1x ASoC: au1x: psc-i2s.c: use devm_snd_soc_register_component() 2019-07-02 13:48:29 +01:00
bcm ASoC: bcm: cygnus-pcm: Unneeded variable: "ret". 2019-07-22 13:26:00 +01:00
cirrus ASoC: cirrus: ep93xx-i2s.c: use devm_snd_soc_register_component() 2019-07-02 13:48:39 +01:00
codecs ASoC: sgtl5000: Improve VAG power and mute control 2019-07-22 13:26:24 +01:00
dwc treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
fsl ASoC: fsl_sai: mark regmap as fast_io 2019-07-22 13:26:14 +01:00
generic Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
hisilicon treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340 2019-06-05 17:37:07 +02:00
img treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
intel Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
jz4740 Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
kirkwood ASoC: kirkwood: armada-370-db: consider CPU-Platform possibility 2019-06-28 15:12:59 +01:00
mediatek ASoC: mediatek: mt8183: make headset codec optional 2019-07-22 13:26:12 +01:00
meson Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
mxs ASoC: mxs: mxs-sgtl5000: consider CPU-Platform possibility 2019-06-28 15:13:19 +01:00
nuc900 Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
pxa ASoC: pxa: pxa2xx-ac97.c: use devm_snd_soc_register_component() 2019-07-02 13:52:08 +01:00
qcom kernel: fix typos and some coding style in comments 2019-07-16 19:23:21 -07:00
rockchip ASoC: rockchip-max98090: Remove MICBIAS as supply of input pin IN34 2019-07-22 13:26:19 +01:00
samsung ASoC: samsung: tm2_wm5110: consider CPU-Platform possibility 2019-06-28 15:16:22 +01:00
sh ASoC: rsnd: add missing pin sharing with SSI9 2019-06-26 12:28:35 +01:00
sirf ASoC: sirf: sirf-audio: consider CPU-Platform possibility 2019-06-28 15:16:43 +01:00
sof ASoC: SOF: Intel: hda: Make hdac_device device-managed 2019-07-22 13:09:25 +01:00
spear treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
sprd treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
sti treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
stm Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
sunxi ASoC: sunxi: sun50i-codec-analog: Add earpiece 2019-07-05 17:58:31 +01:00
tegra ASoC: tegra: trimslice: consider CPU-Platform possibility 2019-06-28 15:18:45 +01:00
ti Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
txx9 Linux 5.2-rc6 2019-06-26 12:39:34 +01:00
uniphier
ux500 ASoC: ux500: mop500: consider CPU-Platform possibility 2019-06-28 15:19:55 +01:00
xilinx treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
xtensa treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
zte treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile ASoC: SOF: Add Build support for SOF core and Intel drivers 2019-04-28 02:51:46 +09:00
soc-ac97.c
soc-acpi.c ASoC: soc-acpi: fix implicit header use of module.h/export.h 2019-05-08 18:06:28 +09:00
soc-compress.c ASoC: compress: Fix memory leak from snd_soc_new_compress 2019-06-25 15:33:04 +01:00
soc-core.c Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
soc-dapm.c Merge branch 'asoc-5.3' into asoc-next 2019-07-06 12:25:26 +01:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: More changes for v5.1 2019-02-28 13:30:55 +01:00
soc-io.c
soc-jack.c
soc-ops.c
soc-pcm.c ASoC: Fixes for v5.2 2019-06-13 17:33:34 +02:00
soc-topology.c ASoC: topology: fix memory leaks on sm, se and sbe 2019-06-28 15:08:49 +01:00
soc-utils.c ASoC: soc-utils: respawn dummy Platform 2019-06-28 15:21:04 +01:00