Some devices don't use the builtin jack-detect but can still benefit
from the mic-bias-current over-current-detection to differentiate
between headphones vs a headset.
Move the ovcd init code from rt5640_enable_jack_detect() into a new
rt5640_set_ovcd_params() helper and export this helper as well
as a couple of related ovcd functions.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210819190543.784415-5-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Some devices don't use the builtin jack-detect but can still benefit
from the mic-bias-current over-current-detection headphones vs
headset detection done by rt5640_detect_headset().
In this case the jack-inserted check done by rt5640_detect_headset()
needs to be done through a GPIO rather then by using the codec's
builtin jack-detect. Add an optional hp_det_gpio parameter and export
rt5640_detect_headset() for use on machines where jack-detect is
handled outside of the codec.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210819190543.784415-4-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Delay requesting the IRQ until the machine-drv calls set_jack.
The main reason for this is that the codec's IRQ is unused on some boards,
in which case we really should not call request_irq at all.
On some boards there is an IRQ listed at index 0 for the codec, but
this is not connected to the codec, but rather is directly connected
to the jack's jack-detect pin. These special setups will be handled
by the machine-driver, but the machine driver can only request the IRQ
if it is not first requested by the codec driver. Moving the request_irq
to the set_jack callback (which will not get called in this case) avoids
the codec-driver clobbering the IRQ.
Moving the request_irq also removes the need to disable the IRQ immediately
after requesting it, avoiding a small race (this could also have been fixed
by using the new IRQF_NO_AUTOEN flag when requesting the IRQ).
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210819190543.784415-3-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Don't populate the arrays mul and div on the stack but instead make them
static const. Makes the object code smaller by 4 bytes.
Before:
text data bss dec hex filename
16226 4984 64 21274 531a ./sound/soc/uniphier/aio-cpu.o
After:
text data bss dec hex filename
16062 5144 64 21270 5316 ./sound/soc/uniphier/aio-cpu.o
(gcc version 10.2.0)
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Link: https://lore.kernel.org/r/20210818151746.38520-1-colin.king@canonical.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The commit 2e6b836312 ("ASoC: intel: atom: Fix reference to PCM
buffer address") changed the reference of PCM buffer address to
substream->runtime->dma_addr as the buffer address may change
dynamically. However, I forgot that the dma_addr field is still not
set up for the CONTINUOUS buffer type (that this driver uses) yet in
5.14 and earlier kernels, and it resulted in garbage I/O. The problem
will be fixed in 5.15, but we need to address it quickly for now.
The fix is to deduce the address again from the DMA pointer with
virt_to_phys(), but from the right one, substream->runtime->dma_area.
Fixes: 2e6b836312 ("ASoC: intel: atom: Fix reference to PCM buffer address")
Reported-and-tested-by: Hans de Goede <hdegoede@redhat.com>
Cc: <stable@vger.kernel.org>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/2048c6aa-2187-46bd-6772-36a4fb3c5aeb@redhat.com
Link: https://lore.kernel.org/r/20210819152945.8510-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Delete/fixup few includes in anticipation of global -isystem compile
option removal.
Note: crypto/aegis128-neon-inner.c keeps <stddef.h> due to redefinition
of uintptr_t error (one definition comes from <stddef.h>, another from
<linux/types.h>).
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Pull sound fixes from Takashi Iwai:
"Only a few regression fixes and trivial device quirks"
* tag 'sound-5.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda/via: Apply runtime PM workaround for ASUS B23E
ALSA: hda: Fix hang during shutdown due to link reset
ALSA: hda/realtek: Enable 4-speaker output for Dell XPS 15 9510 laptop
ALSA: oxfw: fix functioal regression for silence in Apogee Duet FireWire
ALSA: hda - fix the 'Capture Switch' value change notifications
When CONFIG_PM is not set, there is an unused function warning:
sound/pci/hda/patch_analog.c:115:13: warning: unused function
'ad198x_shutup' [-Wunused-function]
static void ad198x_shutup(struct hda_codec *codec)
^
1 warning generated.
Sink ad198x_shutup() into ad198x_suspend(), as it is only called in that
one space. Move the CONFIG_PM guards above ad198x_power_eapd_write() as
it is only called in ad198x_power_eapd(), which is in turn only called
in ad198x_power_eapd(). Those two functions are large enough that they
are left alone.
Fixes: 327b34f2a9 ("ALSA: hda: Nuke unused reboot_notify callback")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/20210818012705.311963-2-nathan@kernel.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
When CONFIG_PM is not set, there is an unused function warning:
sound/pci/hda/patch_sigmatel.c:4383:13: warning: unused function
'stac_shutup' [-Wunused-function]
static void stac_shutup(struct hda_codec *codec)
^
1 warning generated.
Sink the contents of stac_shutup() into stac_suspend() since
stac_shutup() is only called in that one location now.
Fixes: 327b34f2a9 ("ALSA: hda: Nuke unused reboot_notify callback")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/20210818012705.311963-1-nathan@kernel.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Use "cfg-lineout:2" in the components string on boards with a lineout
instead of "cfg-lineout:1", this better mirrors the speaker part of
the components string where we use "cfg-spk:1" for devices with a single
speaker and "cfg-spk:2" for stereo speakers.
The lineout is stereo by default, so using ":2" makes more sense, this
way we keep ":1" reserved in case we ever encounter a device with
a mono lineout.
We can make this change without breaking userspace because no kernel
has shipped with "cfg-lineout:1" in the component-string yet; and there
also are no userspace bits (UCM profiles) checking for this yet.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210816114722.107363-1-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The commit 0165c4e19f ("ALSA: hda: Fix hang during shutdown due to
link reset") modified the shutdown callback of the HD-audio controller
for working around a hang. Meanwhile, the actual culprit of the hang
was identified to be the leftover active codecs that may interfere
with the powered down controller somehow, but we took a minimal fix
approach for 5.14, and that was the commit above.
Now, since the codec drivers go runtime-suspend at shutdown for 5.15,
we can revert the change and make sure that the full runtime-suspend
is performed at shutdown of HD-audio controller again. This patch
essentially reverts the commit above to restore the behavior.
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=214045
Link: https://lore.kernel.org/r/20210817075630.7115-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This patch cleanups below cppcheck warning.
sound/soc/soc-ac97.c:41:15: style: struct member 'snd_ac97_gpio_priv::gpios_set' is never used. [unusedStructMember]
unsigned int gpios_set;
^
sound/soc/soc-ac97.c:42:28: style: struct member 'snd_ac97_gpio_priv::component' is never used. [unusedStructMember]
struct snd_soc_component *component;
^
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87r1euyolk.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This patch cleanups below cppcheck warning.
sound/soc/soc-jack.c:21:6: style: struct member 'jack_gpio_tbl::count' is never used. [unusedStructMember]
int count;
^
sound/soc/soc-jack.c:23:28: style: struct member 'jack_gpio_tbl::gpios' is never used. [unusedStructMember]
struct snd_soc_jack_gpio *gpios;
^
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87tujqyols.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This patch cleanups below cppcheck warning.
sound/soc/soc-dai.c:454:7: style: The scope of the variable 'supported_cpu' can be reduced. [variableScope]
bool supported_cpu;
^
sound/soc/soc-dai.c:455:7: style: The scope of the variable 'supported_codec' can be reduced. [variableScope]
bool supported_codec;
^
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87y292yom6.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
So far we have a few workarounds at shutdown for each codec,
e.g. turning off the display power and setting the codec to D3.
But all those are basically a part of the suspend procedure.
Moreover, the streams are still active after that call, hence it might
hit the update on the codec that has been already put to D3.
In this patch, instead of calling each reboot_notify callback, simply
put the codec into the runtime-suspended state after the manual
suspend of all PCM streams. It makes the code and the behavior more
consistent.
The reboot_notify callback is no longer used after this patch, and
will be cleaned up later.
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=214045
Link: https://lore.kernel.org/r/20210813081230.4268-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
ALSA PCM core has an optimized way to communicate with user-space for
its control and status data via mmap on the supported architectures
like x86. Depending on the situation, however, we'd rather want to
enforce user-space notifying the applptr or hwptr change explicitly
via ioctl. For example, the upcoming non-contig and non-coherent
buffer handling would need an explicit sync, and this needs to catch
the applptr and hwptr changes. Also, ASoC SOF driver will have the
SPIB support that has the similar requirement for the explicit control
of the applptr and hwptr.
This patch adds the new PCM hardware info flag,
SNDRV_PCM_INFO_EXPLICIT_SYNC. When this flag is set, PCM core
disables both the control and the status mmap, which enforces
user-space to update via SYNC_PTR ioctl. In that way, drivers can
catch the applptr and hwptr update and apply the sync operation if
needed.
Link: https://lore.kernel.org/r/20210812113818.6479-1-tiwai@suse.de
Link: https://lore.kernel.org/r/20210610205326.1176400-1-pierre-louis.bossart@linux.intel.com
Link: https://lore.kernel.org/r/20210813082142.5375-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This adds a second mixer control to Digidesign Mbox
to select between Analog/SPDIF capture.
Users will note that selecting the SPDIF input source
automatically switches the clock mode to sync to SPDIF,
which is a feature of the hardware.
(You can change the clock source back to internal if you want
to capture from spdif but not sync to its clock although this mode
is probably not recommended).
Unfortunately, starting the stream resets both modes
to Internally clocked and Analog input mode.
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Tested-by: Damien Zammit <damien@zamaudio.com>
Link: https://lore.kernel.org/r/20210813113402.11849-1-damien@zamaudio.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This is an update on an earlier contribution from Heikki Krogerus
The function device_add_properties() is going to be removed.
Replacing it with software node API equivalents.
Thanks for Hans de Goede and Andy Shevchenko for their comments,
suggestions and Reviewed-by tags on GitHub. The review thread can be
found at https://github.com/thesofproject/linux/pull/3041)
v3 changes:
Fixed nit-picks from Andy: label, return value, missing commas/periods.
Added Andy's Reviewed-by tag
v2 changes: feedback from Andy and Hans
Better error handling
Codec reference is kept until the .remove callback
Remove bus search to find device
v1 changes from Heikki's patches:
Avoid the use of devm_ routines for Baytrail machine drivers.
Heikki Krogerus (1):
ASoC: Intel: boards: use software node API in Atom boards
Pierre-Louis Bossart (7):
ASoC: Intel: boards: harden codec property handling
ASoC: Intel: boards: handle errors with acpi_dev_get_first_match_dev()
ASoC: Intel: boards: get codec device with ACPI instead of bus search
ASoC: Intel: sof_sdw: pass card information to init/exit functions
ASoC: Intel: sof_sdw_rt711*: keep codec device reference until remove
ASoC: Intel: use software node API in SoundWire machines
ASoC: Intel: remove device_properties for Atom boards
sound/soc/intel/boards/bytcht_es8316.c | 31 ++++++++--
sound/soc/intel/boards/bytcr_rt5640.c | 60 +++++++++++++++-----
sound/soc/intel/boards/bytcr_rt5651.c | 63 ++++++++++++++-------
sound/soc/intel/boards/sof_sdw.c | 20 ++++---
sound/soc/intel/boards/sof_sdw_common.h | 37 +++++++-----
sound/soc/intel/boards/sof_sdw_max98373.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt1308.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt1316.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt5682.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt700.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt711.c | 51 +++++++++--------
sound/soc/intel/boards/sof_sdw_rt711_sdca.c | 52 +++++++++--------
sound/soc/intel/boards/sof_sdw_rt715.c | 3 +-
sound/soc/intel/boards/sof_sdw_rt715_sdca.c | 3 +-
14 files changed, 223 insertions(+), 112 deletions(-)
--
2.25.1
This patch series aims to add ASoC support on RZ/G2L SoC's.
It is based on the work done by Chris Brandt for RZ/A ASoC driver.
v4->v5
* Moved validation of sample bits in hw_params
* Removed validation of frame bits as it is redundant
* split the rz_ssi_start_stop function into rz_ssi_start and rz_ssi_stop.
* remove the spin_lock around rz_ssi_stream_init.
* Updated dmas description and removed fixes as it is an enhancement
now.
* updated ssi_start functions with setting fifo thresholds
and ssi_stop function with cancel all dma txn.
v3->v4:
* Updated the subject line as per style for the subsystem.
* Removed select SND_SIMPLE_CARD from Kconfig
* Added C++ comments for copyright and driver description.
* Moved validation of channels in hw_params
* removed asm issue reported by bot as well as Mark
* replaced master/slave macros with provider/consumer macros
* Improved locking and added more null pointer checks.
v2->v3:
* Fixed the dependency on KCONFIG
* Merged the binding patch with dma feature added
* Updated dt binding example with encoded #dma-cells value.
* Improved Error handling in probe function
* Removed the passing legacy channel configuration parameters from
dmaengine_slave_config function
* started using dma_request_chan instead of deprecated
dma_request_slave_channel
* Removed SoC dtsi and config patches from this series. Will send it later.
v1->v2:
* Rebased to latest rc kernel
Biju Das (3):
ASoC: sh: Add RZ/G2L SSIF-2 driver
ASoC: dt-bindings: renesas,rz-ssi: Update slave dma channel
configuration parameters
ASoC: sh: rz-ssi: Add SSI DMAC support
.../bindings/sound/renesas,rz-ssi.yaml | 22 +-
sound/soc/sh/Kconfig | 6 +
sound/soc/sh/Makefile | 4 +
sound/soc/sh/rz-ssi.c | 1063 +++++++++++++++++
4 files changed, 1093 insertions(+), 2 deletions(-)
create mode 100644 sound/soc/sh/rz-ssi.c
--
2.17.1
This patchset provides an optimization that result in significant power
savings on Intel HDAudio platforms using SOF (Sound Open Firmware).
We previously prevented the Intel DSP from enabling the DMI_L1
capability to work-around issues with pause on capture streams. It
turns out that this also prevented the platform from entering high C
states in full-duplex usages such as videoconferencing - a rather
basic use case since the start of the pandemic.
The support for pause_push/release was already a bit controversial for
Intel platforms, in theory platforms should only enable PAUSE if they
can resume on the same sample, which is not the case on any Intel
platform.
With this patchset, when the user enables DMI L1 via a kernel
parameter, the PAUSE support is disabled for capture streams. A kernel
parameter is far from ideal but it's a placeholder until we have an
API to negotiate capabilities between applications and driver, and
it's far less confusing than a Kconfig option.
Changes since v1:
Removal of SPIB support since it may conflict with Takashi's memalloc
changes. These SPIB changes will be provided after rebase.
Addition of one cleanup for cppcheck warning
Move all changes to intel/ directory, no changes in shared code
Flipped the logic: the selection of DMI L1 disables PAUSE
Pierre-Louis Bossart (4):
ASoC: SOF: Intel: Kconfig: clarify DMI L1 option description
ASoC: SOF: Intel: hda-stream: remove always true condition
ASoC: SOF: Intel: simplify logic for DMI_L1 handling
ASoC: SOF: Intel: make DMI L1 selection more robust
sound/soc/sof/intel/Kconfig | 10 ----------
sound/soc/sof/intel/hda-pcm.c | 16 ++++++++++++++--
sound/soc/sof/intel/hda-stream.c | 11 +++++------
3 files changed, 19 insertions(+), 18 deletions(-)
--
2.25.1