linux-stable/sound
Oleksandr Suvorov a61e5804ef ASoC: sgtl5000: Improve VAG power and mute control
[ Upstream commit b1f373a11d ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-10-11 18:18:50 +02:00
..
aoa ALSA: snd-aoa: add of_node_put() in error path 2018-10-03 17:00:50 -07:00
arm License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
atmel ASoC: Updates for v4.14 2017-09-04 14:50:49 +02:00
core ALSA: seq: Fix potential concurrent access to the deleted pool 2019-09-06 10:20:52 +02:00
drivers ALSA: opl3: fix mismatch between snd_opl3_drum_switch definition and declaration 2019-04-20 09:15:00 +02:00
firewire ALSA: firewire-tascam: check intermediate state of clock status and retry 2019-10-05 12:48:04 +02:00
hda ALSA: hda: Flush interrupts on disabling 2019-10-05 12:47:44 +02:00
i2c ALSA: i2c: ak4xxx-adda: Fix a possible null pointer dereference in build_adc_controls() 2019-10-05 12:47:47 +02:00
isa ALSA: sb8: add a check for request_region 2019-04-20 09:15:00 +02:00
mips ALSA: mips: constify snd_pcm_ops structures 2017-08-19 11:02:18 +02:00
oss License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
parisc License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci ALSA: hda/realtek - Fixup mute led on HP Spectre x360 2019-10-05 12:48:05 +02:00
pcmcia ALSA: vxpocket: Fix invalid endian conversions 2018-08-22 07:46:10 +02:00
ppc License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sh ALSA: sh: Put missing KERN_* prefix 2017-08-31 11:02:15 +02:00
soc ASoC: sgtl5000: Improve VAG power and mute control 2019-10-11 18:18:50 +02:00
sparc ALSA: sparc: Fix invalid snd_free_pages() at error path 2018-12-05 19:41:24 +01:00
spi License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
synth ALSA: emux: Fix potential Spectre v1 vulnerabilities 2019-01-09 17:14:46 +01:00
usb ALSA: usb-audio: Skip bSynchAddress endpoint check if it is invalid 2019-10-05 12:47:48 +02:00
x86 ALSA: x86: Fix runtime PM for hdmi-lpe-audio 2019-03-27 14:13:52 +09:00
ac97_bus.c
Kconfig ALSA: synth: Select snd-emux-synth explicitly 2017-06-09 22:10:06 +02:00
last.c
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sound_core.c sound: fix a memory leak bug 2019-08-16 10:13:46 +02:00