As shown in diffstat and logs, it was again a busy development cycle at this time, too. The most significant changes are still on-going refactoring / modernization works for ASoC core and drivers, but there are lots of other changes as well. Here we go, some highlights below: ASoC: - Quite lots of cleanup / refactoring of ASoC core and APIs; most of them are systematic, but also including cleanups and modernization - A bulk of updates for some ASoC platforms, Freescale, sunxi and Intel SST/SOF - Initial support for Sound Open Firmware on i.MX8 - Removal of deprecated w90x900 and nuc900 drivers - New support for Cirrus Logic CS47L15 and CS47L92, Freescale i.MX 7ULP and 8MQ, Meson G12A and NXP UDA1334 USB-audio: - More validations of descriptor units for hardening against bugs reported by fuzzers - PCM device assignment workaround for a past call-order change - Scarlett Gen2 mixer interface, a few more more quirks HD-audio: - Support for audio component with AMD/ATI and Nvidia HDMI codecs - Clean up HD-audio core and remove indirect access ops for Intel SOF - DMIC detection at probe; it would make systems automatically falling back to SST/SOF driver on devices that need DMIC handling. Needs a new Kconfig to set, and beware that it's still new and a bit experimental FireWire: - Lots of code refactoring and cleanups -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAl1/dEsOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+2WA//YoEoxXgx/Aok5eJfKPSn0Pd7HccvU53Q9Syx z8DaUSUbd6S7g9P8zzXm1l5bIfAur1FQDkvfYrA23iDhixna/w+jnkeUbRBCFbnB tdUX4mMBMO/wfJZ5I1Amw9OaKsEaWoSaw8EezgWLkQUkVjfAVLitz/oH4qxlitxv ssOP2pLNaNKMqJjgV49DJ6wXjAFnndB+nSoEGzDkoDYv17VeahDG6XRPRGvmf6ZM 06w2KfGJqstNniH5Cw2us0GQf1UD6Ra1aZJRekoOjih5PeX8/Mjl+6HgQVwEZwZY ZnwAgJaL/ujUPywJO9cBlMv2yiePMqgXA8b5sNO1HJdzwIP7wAjD/bbY6V9+8IDZ zQpqHWen7B/PySLym7y19QvVZYmc+y43vJJev9M6kc0LofOltWmeeAUr5x3gktWx WuwN6KEHP5NA2cwkc8mW1LwiUavon1hl7PGOVqx7R3k4upPAKY1ZXBHNXgN2+M5N lX9fbAMLB2W0cPkD/Ob29JP04qDxmLT+nhHNh2lzSQBlHHpsuVUyGvJH4PwOWnTb tk1xTPxF+zVaVTV3TUGHziiK98PHY/Sj1hlyvKGuBiD+efvvnXAVkivjL9Egj4aq QGGGshTdOi7l7Anon3TEbHA8cFNkttRukKq1bpskZHydlaQtTOW0CEotRmvEJfpR ghQn5mY= =/+1Q -----END PGP SIGNATURE----- Merge tag 'sound-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound updates from Takashi Iwai: "As shown in diffstat and logs, it was again a busy development cycle at this time, too. The most significant changes are still on-going refactoring / modernization works for ASoC core and drivers, but there are lots of other changes as well. Here we go, some highlights below: ASoC: - Quite a lot of cleanup / refactoring of ASoC core and APIs; most of them are systematic, but also including cleanups and modernization - A bulk of updates for some ASoC platforms, Freescale, sunxi and Intel SST/SOF - Initial support for Sound Open Firmware on i.MX8 - Removal of deprecated w90x900 and nuc900 drivers - New support for Cirrus Logic CS47L15 and CS47L92, Freescale i.MX 7ULP and 8MQ, Meson G12A and NXP UDA1334 USB-audio: - More validations of descriptor units for hardening against bugs reported by fuzzers - PCM device assignment workaround for a past call-order change - Scarlett Gen2 mixer interface, a few more more quirks HD-audio: - Support for audio component with AMD/ATI and Nvidia HDMI codecs - Clean up HD-audio core and remove indirect access ops for Intel SOF - DMIC detection at probe; it would make systems automatically falling back to SST/SOF driver on devices that need DMIC handling. Needs a new Kconfig to set, and beware that it's still new and a bit experimental FireWire: - Lots of code refactoring and cleanups" * tag 'sound-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (521 commits) ASoC: sdm845: remove unneeded semicolon ASoC: fsl_sai: Implement set_bclk_ratio ASoC: dmaengine: Replace strncpy() with strscpy_pad() for pcm->name ASoC: wcd9335: remove redundant use of ret variable ALSA: firewire-tascam: check intermediate state of clock status and retry ALSA: firewire-tascam: handle error code when getting current source of clock ASoC: hdmi-codec: Add an op to set callback function for plug event ASoC: rt5677: keep analog power register at SND_SOC_BIAS_OFF ASoC: rt5677: Remove magic number register writes ASoC: soc-core: self contained soc_unbind_aux_dev() ASoC: soc-core: add soc_unbind_aux_dev() ASoC: soc-core: self contained soc_bind_aux_dev() ASoC: soc-core: move soc_probe_link_dais() next to soc_remove_link_dais() ASoC: soc-core: self contained soc_probe_link_dais() ASoC: soc-core: add new soc_link_init() ASoC: soc-core: move soc_probe_dai() next to soc_remove_dai() ASoC: soc-core: self contained soc_remove_link_dais() ASoC: soc-core: self contained soc_remove_link_components() ASoC: soc-core: self contained soc_probe_link_components() ASoC: rt1308: make array pd static const, makes object smaller ...
121 lines
2.5 KiB
C
121 lines
2.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* soc-intel-quirks.h - prototypes for quirk autodetection
|
|
*
|
|
* Copyright (c) 2019, Intel Corporation.
|
|
*
|
|
*/
|
|
|
|
#ifndef _SND_SOC_INTEL_QUIRKS_H
|
|
#define _SND_SOC_INTEL_QUIRKS_H
|
|
|
|
#if IS_ENABLED(CONFIG_X86)
|
|
|
|
#include <asm/cpu_device_id.h>
|
|
#include <asm/intel-family.h>
|
|
#include <asm/iosf_mbi.h>
|
|
|
|
#define ICPU(model) { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, }
|
|
|
|
#define SOC_INTEL_IS_CPU(soc, type) \
|
|
static inline bool soc_intel_is_##soc(void) \
|
|
{ \
|
|
static const struct x86_cpu_id soc##_cpu_ids[] = { \
|
|
ICPU(type), \
|
|
{} \
|
|
}; \
|
|
const struct x86_cpu_id *id; \
|
|
\
|
|
id = x86_match_cpu(soc##_cpu_ids); \
|
|
if (id) \
|
|
return true; \
|
|
return false; \
|
|
}
|
|
|
|
SOC_INTEL_IS_CPU(byt, INTEL_FAM6_ATOM_SILVERMONT);
|
|
SOC_INTEL_IS_CPU(cht, INTEL_FAM6_ATOM_AIRMONT);
|
|
SOC_INTEL_IS_CPU(apl, INTEL_FAM6_ATOM_GOLDMONT);
|
|
SOC_INTEL_IS_CPU(glk, INTEL_FAM6_ATOM_GOLDMONT_PLUS);
|
|
SOC_INTEL_IS_CPU(cml, INTEL_FAM6_KABYLAKE_L);
|
|
|
|
static inline bool soc_intel_is_byt_cr(struct platform_device *pdev)
|
|
{
|
|
struct device *dev = &pdev->dev;
|
|
int status = 0;
|
|
|
|
if (!soc_intel_is_byt())
|
|
return false;
|
|
|
|
if (iosf_mbi_available()) {
|
|
u32 bios_status;
|
|
|
|
status = iosf_mbi_read(BT_MBI_UNIT_PMC, /* 0x04 PUNIT */
|
|
MBI_REG_READ, /* 0x10 */
|
|
0x006, /* BIOS_CONFIG */
|
|
&bios_status);
|
|
|
|
if (status) {
|
|
dev_err(dev, "could not read PUNIT BIOS_CONFIG\n");
|
|
} else {
|
|
/* bits 26:27 mirror PMIC options */
|
|
bios_status = (bios_status >> 26) & 3;
|
|
|
|
if (bios_status == 1 || bios_status == 3) {
|
|
dev_info(dev, "Detected Baytrail-CR platform\n");
|
|
return true;
|
|
}
|
|
|
|
dev_info(dev, "BYT-CR not detected\n");
|
|
}
|
|
} else {
|
|
dev_info(dev, "IOSF_MBI not available, no BYT-CR detection\n");
|
|
}
|
|
|
|
if (!platform_get_resource(pdev, IORESOURCE_IRQ, 5)) {
|
|
/*
|
|
* Some devices detected as BYT-T have only a single IRQ listed,
|
|
* causing platform_get_irq with index 5 to return -ENXIO.
|
|
* The correct IRQ in this case is at index 0, as on BYT-CR.
|
|
*/
|
|
dev_info(dev, "Falling back to Baytrail-CR platform\n");
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
#else
|
|
|
|
static inline bool soc_intel_is_byt_cr(struct platform_device *pdev)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline bool soc_intel_is_byt(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline bool soc_intel_is_cht(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline bool soc_intel_is_apl(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline bool soc_intel_is_glk(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline bool soc_intel_is_cml(void)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SND_SOC_INTEL_QUIRKS_H */
|