mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge tag 'asoc-fix-v7.2-rc2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v7.2 A fairly standard set of device specific fixes and quriks for new devices, nothing too remarkable here.
This commit is contained in:
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-rx-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-rx-macro
|
||||
- qcom,kaanapali-lpass-rx-macro
|
||||
- qcom,sm8650-lpass-rx-macro
|
||||
- qcom,sm8750-lpass-rx-macro
|
||||
|
||||
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-tx-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-tx-macro
|
||||
- qcom,kaanapali-lpass-tx-macro
|
||||
- qcom,sm8650-lpass-tx-macro
|
||||
- qcom,sm8750-lpass-tx-macro
|
||||
|
||||
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-va-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-va-macro
|
||||
- qcom,glymur-lpass-va-macro
|
||||
- qcom,kaanapali-lpass-va-macro
|
||||
- qcom,sm8650-lpass-va-macro
|
||||
|
||||
@@ -20,6 +20,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-wsa-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-wsa-macro
|
||||
- qcom,glymur-lpass-wsa-macro
|
||||
- qcom,kaanapali-lpass-wsa-macro
|
||||
- qcom,sm8650-lpass-wsa-macro
|
||||
|
||||
@@ -23,6 +23,7 @@ properties:
|
||||
- const: qcom,sdm845-sndcard
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-sndcard
|
||||
- qcom,kaanapali-sndcard
|
||||
- qcom,sm8550-sndcard
|
||||
- qcom,sm8650-sndcard
|
||||
|
||||
@@ -15,13 +15,17 @@ config SND_SOC_AMD_ACP_COMMON
|
||||
|
||||
config SND_SOC_ACPI_AMD_MATCH
|
||||
tristate
|
||||
select SND_SOC_ACPI_AMD_SDCA_QUIRKS if SND_SOC_SDCA
|
||||
select SND_SOC_ACPI if ACPI
|
||||
|
||||
config SND_SOC_ACPI_AMD_SDCA_QUIRKS
|
||||
tristate
|
||||
depends on ACPI
|
||||
bool "AMD ACPI SDCA quirks"
|
||||
depends on SND_SOC_ACPI_AMD_MATCH
|
||||
depends on SND_SOC_SDCA
|
||||
depends on SND_SOC_ACPI_AMD_MATCH = m || SND_SOC_SDCA = y
|
||||
default y
|
||||
help
|
||||
Enable SDCA quirk support for AMD ACPI match tables.
|
||||
This is compiled into the snd-soc-acpi-amd-match module.
|
||||
|
||||
if SND_SOC_AMD_ACP_COMMON
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@ snd-acp-mach-y := acp-mach-common.o
|
||||
snd-acp-legacy-mach-y := acp-legacy-mach.o acp3x-es83xx/acp3x-es83xx.o
|
||||
snd-acp-sof-mach-y := acp-sof-mach.o
|
||||
snd-soc-acpi-amd-match-y := amd-acp63-acpi-match.o amd-acp70-acpi-match.o
|
||||
snd-soc-acpi-amd-match-$(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS) += soc-acpi-amd-sdca-quirks.o
|
||||
snd-acp-sdw-mach-y := acp-sdw-mach-common.o
|
||||
snd-acp-sdw-sof-mach-y += acp-sdw-sof-mach.o
|
||||
snd-acp-sdw-legacy-mach-y += acp-sdw-legacy-mach.o
|
||||
snd-soc-acpi-amd-sdca-quirks-y += soc-acpi-amd-sdca-quirks.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_AMD_ACP_PCM) += snd-acp-pcm.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_ACP_I2S) += snd-acp-i2s.o
|
||||
@@ -41,7 +41,6 @@ obj-$(CONFIG_SND_AMD_ASOC_REMBRANDT) += snd-acp-rembrandt.o
|
||||
obj-$(CONFIG_SND_AMD_ASOC_ACP63) += snd-acp63.o
|
||||
obj-$(CONFIG_SND_AMD_ASOC_ACP70) += snd-acp70.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS) += snd-soc-acpi-amd-sdca-quirks.o
|
||||
obj-$(CONFIG_SND_AMD_SOUNDWIRE_ACPI) += snd-amd-sdw-acpi.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_MACH_COMMON) += snd-acp-mach.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_LEGACY_MACH) += snd-acp-legacy-mach.o
|
||||
|
||||
@@ -553,6 +553,46 @@ static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
|
||||
{
|
||||
/* left */
|
||||
.adr = 0x00003c0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "tas2783-1",
|
||||
},
|
||||
{
|
||||
/* right */
|
||||
.adr = 0x00003d0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "tas2783-2",
|
||||
},
|
||||
{
|
||||
/* left */
|
||||
.adr = 0x0000390102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "tas2783-3",
|
||||
},
|
||||
{
|
||||
/* right */
|
||||
.adr = 0x00003a0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "tas2783-4",
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_tas2783_2[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
.num_adr = ARRAY_SIZE(tas2783_2_adr),
|
||||
.adr_d = tas2783_2_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device rt1320_0_single_adr[] = {
|
||||
{
|
||||
.adr = 0x000030025D132001ull,
|
||||
@@ -659,6 +699,11 @@ static const struct snd_soc_acpi_link_adr acp70_rt721_only[] = {
|
||||
};
|
||||
|
||||
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
|
||||
{
|
||||
.link_mask = BIT(0),
|
||||
.links = acp70_tas2783_2,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(0) | BIT(1),
|
||||
.links = acp70_rt1320_l0_rt722_l1,
|
||||
@@ -775,5 +820,5 @@ MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration"
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS)
|
||||
MODULE_IMPORT_NS("SND_SOC_ACPI_AMD_SDCA_QUIRKS");
|
||||
MODULE_IMPORT_NS("SND_SOC_SDCA");
|
||||
#endif
|
||||
|
||||
@@ -35,8 +35,4 @@ bool snd_soc_acpi_amd_sdca_is_device_rt712_vb(void *arg)
|
||||
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_NS(snd_soc_acpi_amd_sdca_is_device_rt712_vb, "SND_SOC_ACPI_AMD_SDCA_QUIRKS");
|
||||
|
||||
MODULE_DESCRIPTION("ASoC ACPI AMD SDCA quirks");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_IMPORT_NS("SND_SOC_SDCA");
|
||||
|
||||
@@ -248,7 +248,7 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
|
||||
if (sdw_dma_irq_flag)
|
||||
return IRQ_WAKE_THREAD;
|
||||
|
||||
if (irq_flag | wake_irq_flag)
|
||||
if (irq_flag || wake_irq_flag)
|
||||
return IRQ_HANDLED;
|
||||
else
|
||||
return IRQ_NONE;
|
||||
@@ -602,7 +602,7 @@ static int snd_acp63_probe(struct pci_dev *pci,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = pci_request_regions(pci, "AMD ACP6.2 audio");
|
||||
ret = pci_request_regions(pci, "AMD ACP6.3 audio");
|
||||
if (ret < 0) {
|
||||
dev_err(&pci->dev, "pci_request_regions failed\n");
|
||||
goto disable_pci;
|
||||
@@ -693,8 +693,37 @@ static int snd_acp_runtime_resume(struct device *dev)
|
||||
return acp_hw_runtime_resume(dev);
|
||||
}
|
||||
|
||||
static void acp_disable_msi_on_resume(struct pci_dev *pdev)
|
||||
{
|
||||
u16 control;
|
||||
|
||||
if (!pdev->msi_cap)
|
||||
return;
|
||||
|
||||
pci_read_config_word(pdev, pdev->msi_cap + PCI_MSI_FLAGS, &control);
|
||||
if (control & PCI_MSI_FLAGS_ENABLE) {
|
||||
dev_warn(&pdev->dev,
|
||||
"ACP: MSI unexpectedly enabled after resume (flags=0x%04x), disabling\n",
|
||||
control);
|
||||
control &= ~PCI_MSI_FLAGS_ENABLE;
|
||||
pci_write_config_word(pdev, pdev->msi_cap + PCI_MSI_FLAGS, control);
|
||||
}
|
||||
}
|
||||
|
||||
static int snd_acp_resume(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
|
||||
/*
|
||||
* BIOS/firmware may re-enable MSI in PCI config space during
|
||||
* system resume even though this driver only uses legacy INTx
|
||||
* interrupts. If MSI is left enabled with stale address/data
|
||||
* registers, the device will write interrupts to a bogus address
|
||||
* causing IOMMU IO_PAGE_FAULT and interrupt delivery failure.
|
||||
* Explicitly clear the MSI Enable bit before reinitializing
|
||||
* the ACP hardware.
|
||||
*/
|
||||
acp_disable_msi_on_resume(pdev);
|
||||
return acp_hw_resume(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -310,6 +310,7 @@ irqreturn_t cs42l43_bias_detect_clamp(int irq, void *data)
|
||||
#define CS42L43_JACK_ABSENT 0x0
|
||||
|
||||
#define CS42L43_JACK_OPTICAL (SND_JACK_MECHANICAL | SND_JACK_AVOUT)
|
||||
#define CS42L43_JACK_MICROPHONE (SND_JACK_MECHANICAL | SND_JACK_MICROPHONE)
|
||||
#define CS42L43_JACK_HEADPHONE (SND_JACK_MECHANICAL | SND_JACK_HEADPHONE)
|
||||
#define CS42L43_JACK_HEADSET (SND_JACK_MECHANICAL | SND_JACK_HEADSET)
|
||||
#define CS42L43_JACK_LINEOUT (SND_JACK_MECHANICAL | SND_JACK_LINEOUT)
|
||||
@@ -871,7 +872,7 @@ static const struct cs42l43_jack_override_mode {
|
||||
.hsdet_mode = CS42L43_JACK_3_POLE_SWITCHES,
|
||||
.mic_ctrl = (0x3 << CS42L43_JACK_STEREO_CONFIG_SHIFT) |
|
||||
CS42L43_HS1_BIAS_EN_MASK | CS42L43_HS2_BIAS_EN_MASK,
|
||||
.report = CS42L43_JACK_LINEIN,
|
||||
.report = CS42L43_JACK_MICROPHONE,
|
||||
},
|
||||
[CS42L43_JACK_RAW_OPTICAL] = {
|
||||
.hsdet_mode = CS42L43_JACK_3_POLE_SWITCHES,
|
||||
|
||||
@@ -1843,6 +1843,15 @@ static void rt712_sdca_vb_io_init(struct rt712_sdca_priv *rt712)
|
||||
}
|
||||
}
|
||||
|
||||
static void rt712_sdca_reset(struct rt712_sdca_priv *rt712)
|
||||
{
|
||||
rt712_sdca_index_update_bits(rt712, RT712_VENDOR_REG,
|
||||
RT712_PARA_VERB_CTL, RT712_HIDDEN_REG_SW_RESET,
|
||||
RT712_HIDDEN_REG_SW_RESET);
|
||||
rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
|
||||
RT712_HDA_LEGACY_RESET_CTL, 0x1, 0x1);
|
||||
}
|
||||
|
||||
int rt712_sdca_io_init(struct device *dev, struct sdw_slave *slave)
|
||||
{
|
||||
struct rt712_sdca_priv *rt712 = dev_get_drvdata(dev);
|
||||
@@ -1870,6 +1879,8 @@ int rt712_sdca_io_init(struct device *dev, struct sdw_slave *slave)
|
||||
|
||||
pm_runtime_get_noresume(&slave->dev);
|
||||
|
||||
rt712_sdca_reset(rt712);
|
||||
|
||||
rt712_sdca_index_read(rt712, RT712_VENDOR_REG, RT712_JD_PRODUCT_NUM, &val);
|
||||
rt712->hw_id = (val & 0xf000) >> 12;
|
||||
rt712->version_id = (val & 0x0f00) >> 8;
|
||||
|
||||
@@ -675,11 +675,12 @@ static int tas2562_parse_dt(struct tas2562_data *tas2562)
|
||||
if (tas2562->sdz_gpio == NULL) {
|
||||
tas2562->sdz_gpio = devm_gpiod_get_optional(dev, "shut-down",
|
||||
GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(tas2562->sdz_gpio))
|
||||
if (IS_ERR(tas2562->sdz_gpio)) {
|
||||
if (PTR_ERR(tas2562->sdz_gpio) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
tas2562->sdz_gpio = NULL;
|
||||
tas2562->sdz_gpio = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (tas2562->model_id == TAS2110)
|
||||
|
||||
@@ -855,6 +855,7 @@ static const struct snd_pci_quirk sof_sdw_ssid_quirk_table[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x2348, "Lenovo P16", SOC_SDW_CODEC_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2349, "Lenovo P1", SOC_SDW_CODEC_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3821, "Lenovo 0x3821", SOC_SDW_SIDECAR_AMPS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x383c, "Lenovo 0x383c", SOC_SDW_SIDECAR_AMPS),
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define AIU_MEM_IEC958_CONTROL_MODE_16BIT BIT(7)
|
||||
#define AIU_MEM_IEC958_CONTROL_MODE_LINEAR BIT(8)
|
||||
#define AIU_MEM_IEC958_BUF_CNTL_INIT BIT(0)
|
||||
#define AIU_RST_SOFT_958_FAST BIT(2)
|
||||
|
||||
#define AIU_FIFO_SPDIF_BLOCK 8
|
||||
|
||||
@@ -68,11 +69,15 @@ static int fifo_spdif_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
snd_soc_component_write(component, AIU_RST_SOFT,
|
||||
AIU_RST_SOFT_958_FAST);
|
||||
fifo_spdif_dcu_enable(component, true);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
snd_soc_component_write(component, AIU_RST_SOFT,
|
||||
AIU_RST_SOFT_958_FAST);
|
||||
fifo_spdif_dcu_enable(component, false);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -164,6 +164,7 @@ static int sc8280xp_platform_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
static const struct of_device_id snd_sc8280xp_dt_match[] = {
|
||||
{.compatible = "qcom,eliza-sndcard", "eliza"},
|
||||
{.compatible = "qcom,kaanapali-sndcard", "kaanapali"},
|
||||
{.compatible = "qcom,qcm6490-idp-sndcard", "qcm6490"},
|
||||
{.compatible = "qcom,qcs615-sndcard", "qcs615"},
|
||||
|
||||
Reference in New Issue
Block a user