mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 18:51:21 +02:00
sound fixes for 7.0-rc7
people have been so busy for hunting and we're still getting a more amount of changes than wished, but it doesn't look too scaring; almost all changes are device-specific small fixes. I guess it's rather a casual bump, and no more Easter eggs are left for 7.0 (hopefully)... - Fixes for the recent regression on ctxfi driver - Fix missing INIT_LIST_HEAD() for ASoC card_aux_list - Usual HD- and USB-audio, and ASoC AMD quirk updates - ASoC fixes for AMD and Intel -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmnORAAOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+8cw//QichDSwSUzl0f1jmZtWUN+OFz1CL+j841hiS BTXtT8lKYuyCmAsyyxYMNTetYE1W7kClOSdw/yxml/cjDfiYJQLUIsc+Ps+P4Spj VyJ6c+Id0TS+0hbspNNe0EftuZen3tIIVYCPoIEJJ8RvWhQQFNSb1oSLWMY39AHR 1MStjAWl5eOqmw3cehutgTy3o+iJ37dz524znAUJlFgTIgY61YfC6+yMWk5ZDJ3j Qp33Wze6RXxI2d6TRNo8BbFQcOSsaXdwV0F4J/GmwaByeQggU6xBalOgaZHtiXLd Mr9xXfClWkx8H/Pt/qFNS0QazbMUmMIv6In0Ah7WpCgtXv23643nQaTh4qbUaIvm +5Ee0usw8g6q8YxnUCqT+74ClYbUwEw3AtRYVBQobhalbJ3zvSshpc6XwQSdBdFT Ecoh7qXNfbUm4Kw0VtTxRhOf4MaiwAu8fhN/6izbDSKbDM5TnMJRgFeaAa6jTTFg Z2Ug0mZijWpvo4EDoxUl/7si2KwYIKTK6n7HbY8Q2g3ak3IacSM2QXyDN/ticI+A 1eDoTUl3/A06fxIkmQKwCMm02Le+bhL6tNQrGnrYqGLud3whyNeMICphQG9ImDAr MGVJ+yvWtVR+x44tEpt6zYURkhBImCouqD2CMWbGWhwUP1mpbkzkaTsSmEdkUd++ 9uLGf34= =hv8y -----END PGP SIGNATURE----- Merge tag 'sound-7.0-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "People have been so busy for hunting and we're still getting more changes than wished for, but it doesn't look too scary; almost all changes are device-specific small fixes. I guess it's rather a casual bump, and no more Easter eggs are left for 7.0 (hopefully)... - Fixes for the recent regression on ctxfi driver - Fix missing INIT_LIST_HEAD() for ASoC card_aux_list - Usual HD- and USB-audio, and ASoC AMD quirk updates - ASoC fixes for AMD and Intel" * tag 'sound-7.0-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (24 commits) ASoC: amd: ps: Fix missing leading zeros in subsystem_device SSID log ALSA: usb-audio: Exclude Scarlett 2i2 1st Gen (8016) from SKIP_IFACE_SETUP ALSA: hda/realtek: add quirk for Acer Swift SFG14-73 ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IMH9 ASoC: Intel: boards: fix unmet dependency on PINCTRL ASoC: Intel: ehl_rt5660: Use the correct rtd->dev device in hw_params ALSA: ctxfi: Don't enumerate SPDIF1 at DAIO initialization ALSA: hda/realtek: Add quirk for Lenovo Yoga Slim 7 14AKP10 ALSA: hda/realtek: add quirk for HP Laptop 15-fc0xxx ASoC: ep93xx: Fix unchecked clk_prepare_enable() and add rollback on failure ASoC: soc-core: call missing INIT_LIST_HEAD() for card_aux_list ALSA: hda/realtek: Add quirk for Samsung Book2 Pro 360 (NP950QED) ASoC: amd: yc: Add DMI entry for HP Laptop 15-fc0xxx ASoC: amd: yc: Add DMI quirk for ASUS Vivobook Pro 16X OLED M7601RM ALSA: hda/realtek: Add quirk for ASUS ROG Strix SCAR 15 ALSA: usb-audio: Exclude Scarlett Solo 1st Gen from SKIP_IFACE_SETUP ALSA: caiaq: fix stack out-of-bounds read in init_card ALSA: ctxfi: Check the error for index mapping ALSA: ctxfi: Fix missing SPDIFI1 index handling ALSA: hda/realtek: add quirk for HP Victus 15-fb0xxx ...
This commit is contained in:
commit
2ec9074b28
|
|
@ -4122,6 +4122,8 @@ enum {
|
|||
ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY,
|
||||
ALC245_FIXUP_BASS_HP_DAC,
|
||||
ALC245_FIXUP_ACER_MICMUTE_LED,
|
||||
ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED,
|
||||
ALC236_FIXUP_HP_DMIC,
|
||||
};
|
||||
|
||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
||||
|
|
@ -6651,6 +6653,19 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.v.func = alc285_fixup_hp_coef_micmute_led,
|
||||
.chained = true,
|
||||
.chain_id = ALC2XX_FIXUP_HEADSET_MIC,
|
||||
},
|
||||
[ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc245_fixup_hp_mute_led_coefbit,
|
||||
.chained = true,
|
||||
.chain_id = ALC287_FIXUP_CS35L41_I2C_2,
|
||||
},
|
||||
[ALC236_FIXUP_HP_DMIC] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x12, 0x90a60160 }, /* use as internal mic */
|
||||
{ }
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -6705,6 +6720,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x1597, "Acer Nitro 5 AN517-55", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x169a, "Acer Swift SFG16", ALC256_FIXUP_ACER_SFG16_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x171e, "Acer Nitro ANV15-51", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x173a, "Acer Swift SFG14-73", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x1826, "Acer Helios ZPC", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1025, 0x182c, "Acer Helios ZPD", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1025, 0x1844, "Acer Helios ZPS", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
||||
|
|
@ -7002,6 +7018,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8a30, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a31, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a34, "HP Pavilion x360 2-in-1 Laptop 14-ek0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a3d, "HP Victus 15-fb0xxx (MB 8A3D)", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a4f, "HP Victus 15-fa0xxx (MB 8A4F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a6e, "HP EDNA 360", ALC287_FIXUP_CS35L41_I2C_4),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a74, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
|
||||
|
|
@ -7145,6 +7162,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8da1, "HP 16 Clipper OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8da7, "HP 14 Enstrom OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8da8, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dc9, "HP Laptop 15-fc0xxx", ALC236_FIXUP_HP_DMIC),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dd4, "HP EliteStudio 8 AIO", ALC274_FIXUP_HP_AIO_BIND_DACS),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dd7, "HP Laptop 15-fd0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8de8, "HP Gemtree", ALC245_FIXUP_TAS2781_SPI_2),
|
||||
|
|
@ -7177,7 +7195,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8e37, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e3a, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e3b, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e60, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e60, "HP OmniBook 7 Laptop 16-bh0xxx", ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e61, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e62, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e8a, "HP NexusX", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
|
||||
|
|
@ -7261,6 +7279,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1043, 0x1533, "ASUS GV302XA/XJ/XQ/XU/XV/XI", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1573, "ASUS GZ301VV/VQ/VU/VJ/VA/VC/VE/VVC/VQC/VUC/VJC/VEC/VCC", ALC285_FIXUP_ASUS_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x1584, "ASUS UM3406GA ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1602, "ASUS ROG Strix SCAR 15", ALC285_FIXUP_ASUS_G533Z_PINS),
|
||||
SND_PCI_QUIRK(0x1043, 0x1652, "ASUS ROG Zephyrus Do 15 SE", ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1663, "ASUS GU603ZI/ZJ/ZQ/ZU/ZV", ALC285_FIXUP_ASUS_HEADSET_MIC),
|
||||
|
|
@ -7400,6 +7419,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x144d, 0xc188, "Samsung Galaxy Book Flex (NT950QCT-A38A)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
SND_PCI_QUIRK(0x144d, 0xc189, "Samsung Galaxy Book Flex (NT950QCG-X716)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
SND_PCI_QUIRK(0x144d, 0xc18a, "Samsung Galaxy Book Ion (NP930XCJ-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
SND_PCI_QUIRK(0x144d, 0xc1ac, "Samsung Galaxy Book2 Pro 360 (NP950QED)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),
|
||||
SND_PCI_QUIRK(0x144d, 0xc1a3, "Samsung Galaxy Book Pro (NP935XDB-KC1SE)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
SND_PCI_QUIRK(0x144d, 0xc1a4, "Samsung Galaxy Book Pro 360 (NT935QBD)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
SND_PCI_QUIRK(0x144d, 0xc1a6, "Samsung Galaxy Book Pro 360 (NP930QBD)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
|
|
@ -7595,6 +7615,10 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x383d, "Legion Y9000X 2019", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3843, "Lenovo Yoga 9i / Yoga Book 9i", ALC287_FIXUP_LENOVO_YOGA_BOOK_9I),
|
||||
/* Yoga Pro 7 14IMH9 shares PCI SSID 17aa:3847 with Legion 7 16ACHG6;
|
||||
* use codec SSID to distinguish them
|
||||
*/
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x38cf, "Lenovo Yoga Pro 7 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3847, "Legion 7 16ACHG6", ALC287_FIXUP_LEGION_16ACHG6),
|
||||
SND_PCI_QUIRK(0x17aa, 0x384a, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
|
||||
|
|
@ -7657,6 +7681,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x390d, "Lenovo Yoga Pro 7 14ASP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3913, "Lenovo 145", ALC236_FIXUP_LENOVO_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x391a, "Lenovo Yoga Slim 7 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x391f, "Yoga S990-16 pro Quad YC Quad", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3929, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
|
|
@ -7750,6 +7775,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0xf111, 0x0009, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x000b, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x000c, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x000f, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
|
||||
#if 0
|
||||
/* Below is a quirk table taken from the old code.
|
||||
|
|
|
|||
|
|
@ -2085,6 +2085,11 @@ static struct pci_device_id driver_denylist_ideapad_z570[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static struct pci_device_id driver_denylist_msi_x870e[] = {
|
||||
{ PCI_DEVICE_SUB(0x1022, 0x15e3, 0x1462, 0xee59) }, /* MSI X870E Tomahawk WiFi */
|
||||
{}
|
||||
};
|
||||
|
||||
/* DMI-based denylist, to be used when:
|
||||
* - PCI subsystem IDs are zero, impossible to distinguish from valid sound cards.
|
||||
* - Different modifications of the same laptop use different GPU models.
|
||||
|
|
@ -2098,6 +2103,14 @@ static const struct dmi_system_id driver_denylist_dmi[] = {
|
|||
},
|
||||
.driver_data = &driver_denylist_ideapad_z570,
|
||||
},
|
||||
{
|
||||
/* PCI device matching alone incorrectly matches some laptops */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "MAG X870E TOMAHAWK WIFI (MS-7E59)"),
|
||||
},
|
||||
.driver_data = &driver_denylist_msi_x870e,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1427,10 +1427,14 @@ static int atc_get_resources(struct ct_atc *atc)
|
|||
daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO];
|
||||
da_desc.msr = atc->msr;
|
||||
for (i = 0; i < NUM_DAIOTYP; i++) {
|
||||
if (((i == MIC) && !cap.dedicated_mic) || ((i == RCA) && !cap.dedicated_rca))
|
||||
if (((i == MIC) && !cap.dedicated_mic) ||
|
||||
((i == RCA) && !cap.dedicated_rca) ||
|
||||
i == SPDIFI1)
|
||||
continue;
|
||||
da_desc.type = (atc->model != CTSB073X) ? i :
|
||||
((i == SPDIFIO) ? SPDIFI1 : i);
|
||||
if (atc->model == CTSB073X && i == SPDIFIO)
|
||||
da_desc.type = SPDIFI1;
|
||||
else
|
||||
da_desc.type = i;
|
||||
da_desc.output = (i < LINEIM) || (i == RCA);
|
||||
err = daio_mgr->get_daio(daio_mgr, &da_desc,
|
||||
(struct daio **)&atc->daios[i]);
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ static const struct rsc_ops daio_in_rsc_ops_20k2 = {
|
|||
.output_slot = daio_index,
|
||||
};
|
||||
|
||||
static unsigned int daio_device_index(enum DAIOTYP type, struct hw *hw)
|
||||
static int daio_device_index(enum DAIOTYP type, struct hw *hw)
|
||||
{
|
||||
switch (hw->chip_type) {
|
||||
case ATC20K1:
|
||||
|
|
@ -112,12 +112,15 @@ static unsigned int daio_device_index(enum DAIOTYP type, struct hw *hw)
|
|||
case LINEO3: return 5;
|
||||
case LINEO4: return 6;
|
||||
case LINEIM: return 7;
|
||||
default: return -EINVAL;
|
||||
default:
|
||||
pr_err("ctxfi: Invalid type %d for hw20k1\n", type);
|
||||
return -EINVAL;
|
||||
}
|
||||
case ATC20K2:
|
||||
switch (type) {
|
||||
case SPDIFOO: return 0;
|
||||
case SPDIFIO: return 0;
|
||||
case SPDIFI1: return 1;
|
||||
case LINEO1: return 4;
|
||||
case LINEO2: return 7;
|
||||
case LINEO3: return 5;
|
||||
|
|
@ -125,9 +128,12 @@ static unsigned int daio_device_index(enum DAIOTYP type, struct hw *hw)
|
|||
case LINEIM: return 4;
|
||||
case MIC: return 5;
|
||||
case RCA: return 3;
|
||||
default: return -EINVAL;
|
||||
default:
|
||||
pr_err("ctxfi: Invalid type %d for hw20k2\n", type);
|
||||
return -EINVAL;
|
||||
}
|
||||
default:
|
||||
pr_err("ctxfi: Invalid chip type %d\n", hw->chip_type);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
|
@ -148,8 +154,11 @@ static int dao_spdif_set_spos(struct dao *dao, unsigned int spos)
|
|||
|
||||
static int dao_commit_write(struct dao *dao)
|
||||
{
|
||||
dao->hw->dao_commit_write(dao->hw,
|
||||
daio_device_index(dao->daio.type, dao->hw), dao->ctrl_blk);
|
||||
int idx = daio_device_index(dao->daio.type, dao->hw);
|
||||
|
||||
if (idx < 0)
|
||||
return idx;
|
||||
dao->hw->dao_commit_write(dao->hw, idx, dao->ctrl_blk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -287,8 +296,11 @@ static int dai_set_enb_srt(struct dai *dai, unsigned int enb)
|
|||
|
||||
static int dai_commit_write(struct dai *dai)
|
||||
{
|
||||
dai->hw->dai_commit_write(dai->hw,
|
||||
daio_device_index(dai->daio.type, dai->hw), dai->ctrl_blk);
|
||||
int idx = daio_device_index(dai->daio.type, dai->hw);
|
||||
|
||||
if (idx < 0)
|
||||
return idx;
|
||||
dai->hw->dai_commit_write(dai->hw, idx, dai->ctrl_blk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -367,7 +379,7 @@ static int dao_rsc_init(struct dao *dao,
|
|||
{
|
||||
struct hw *hw = mgr->mgr.hw;
|
||||
unsigned int conf;
|
||||
int err;
|
||||
int idx, err;
|
||||
|
||||
err = daio_rsc_init(&dao->daio, desc, mgr->mgr.hw);
|
||||
if (err)
|
||||
|
|
@ -386,15 +398,18 @@ static int dao_rsc_init(struct dao *dao,
|
|||
if (err)
|
||||
goto error2;
|
||||
|
||||
hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(dao->daio.type, hw));
|
||||
idx = daio_device_index(dao->daio.type, hw);
|
||||
if (idx < 0) {
|
||||
err = idx;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk, idx);
|
||||
hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk);
|
||||
|
||||
conf = (desc->msr & 0x7) | (desc->passthru << 3);
|
||||
hw->daio_mgr_dao_init(hw, mgr->mgr.ctrl_blk,
|
||||
daio_device_index(dao->daio.type, hw), conf);
|
||||
hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(dao->daio.type, hw));
|
||||
hw->daio_mgr_dao_init(hw, mgr->mgr.ctrl_blk, idx, conf);
|
||||
hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk, idx);
|
||||
hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk);
|
||||
|
||||
return 0;
|
||||
|
|
@ -443,7 +458,7 @@ static int dai_rsc_init(struct dai *dai,
|
|||
const struct daio_desc *desc,
|
||||
struct daio_mgr *mgr)
|
||||
{
|
||||
int err;
|
||||
int idx, err;
|
||||
struct hw *hw = mgr->mgr.hw;
|
||||
unsigned int rsr, msr;
|
||||
|
||||
|
|
@ -457,6 +472,12 @@ static int dai_rsc_init(struct dai *dai,
|
|||
if (err)
|
||||
goto error1;
|
||||
|
||||
idx = daio_device_index(dai->daio.type, dai->hw);
|
||||
if (idx < 0) {
|
||||
err = idx;
|
||||
goto error1;
|
||||
}
|
||||
|
||||
for (rsr = 0, msr = desc->msr; msr > 1; msr >>= 1)
|
||||
rsr++;
|
||||
|
||||
|
|
@ -465,8 +486,7 @@ static int dai_rsc_init(struct dai *dai,
|
|||
/* default to disabling control of a SRC */
|
||||
hw->dai_srt_set_ec(dai->ctrl_blk, 0);
|
||||
hw->dai_srt_set_et(dai->ctrl_blk, 0); /* default to disabling SRT */
|
||||
hw->dai_commit_write(hw,
|
||||
daio_device_index(dai->daio.type, dai->hw), dai->ctrl_blk);
|
||||
hw->dai_commit_write(hw, idx, dai->ctrl_blk);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -581,28 +601,28 @@ static int put_daio_rsc(struct daio_mgr *mgr, struct daio *daio)
|
|||
static int daio_mgr_enb_daio(struct daio_mgr *mgr, struct daio *daio)
|
||||
{
|
||||
struct hw *hw = mgr->mgr.hw;
|
||||
int idx = daio_device_index(daio->type, hw);
|
||||
|
||||
if (daio->output) {
|
||||
hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(daio->type, hw));
|
||||
} else {
|
||||
hw->daio_mgr_enb_dai(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(daio->type, hw));
|
||||
}
|
||||
if (idx < 0)
|
||||
return idx;
|
||||
if (daio->output)
|
||||
hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk, idx);
|
||||
else
|
||||
hw->daio_mgr_enb_dai(mgr->mgr.ctrl_blk, idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int daio_mgr_dsb_daio(struct daio_mgr *mgr, struct daio *daio)
|
||||
{
|
||||
struct hw *hw = mgr->mgr.hw;
|
||||
int idx = daio_device_index(daio->type, hw);
|
||||
|
||||
if (daio->output) {
|
||||
hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(daio->type, hw));
|
||||
} else {
|
||||
hw->daio_mgr_dsb_dai(mgr->mgr.ctrl_blk,
|
||||
daio_device_index(daio->type, hw));
|
||||
}
|
||||
if (idx < 0)
|
||||
return idx;
|
||||
if (daio->output)
|
||||
hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk, idx);
|
||||
else
|
||||
hw->daio_mgr_dsb_dai(mgr->mgr.ctrl_blk, idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ static struct snd_soc_acpi_mach *acp63_sdw_machine_select(struct device *dev)
|
|||
mach->mach_params.subsystem_device = acp_data->subsystem_device;
|
||||
mach->mach_params.subsystem_id_set = true;
|
||||
|
||||
dev_dbg(dev, "SSID %x%x\n", mach->mach_params.subsystem_vendor,
|
||||
dev_dbg(dev, "SSID %x%04x\n", mach->mach_params.subsystem_vendor,
|
||||
mach->mach_params.subsystem_device);
|
||||
return mach;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,13 @@ static struct snd_soc_card acp6x_card = {
|
|||
};
|
||||
|
||||
static const struct dmi_system_id yc_acp_quirk_table[] = {
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Laptop 15-fc0xxx"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
|
@ -731,6 +738,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Thin A15 B7VE"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "M7601RM"),
|
||||
}
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -91,16 +91,28 @@ static inline unsigned ep93xx_i2s_read_reg(struct ep93xx_i2s_info *info,
|
|||
return __raw_readl(info->regs + reg);
|
||||
}
|
||||
|
||||
static void ep93xx_i2s_enable(struct ep93xx_i2s_info *info, int stream)
|
||||
static int ep93xx_i2s_enable(struct ep93xx_i2s_info *info, int stream)
|
||||
{
|
||||
unsigned base_reg;
|
||||
int err;
|
||||
|
||||
if ((ep93xx_i2s_read_reg(info, EP93XX_I2S_TX0EN) & 0x1) == 0 &&
|
||||
(ep93xx_i2s_read_reg(info, EP93XX_I2S_RX0EN) & 0x1) == 0) {
|
||||
/* Enable clocks */
|
||||
clk_prepare_enable(info->mclk);
|
||||
clk_prepare_enable(info->sclk);
|
||||
clk_prepare_enable(info->lrclk);
|
||||
err = clk_prepare_enable(info->mclk);
|
||||
if (err)
|
||||
return err;
|
||||
err = clk_prepare_enable(info->sclk);
|
||||
if (err) {
|
||||
clk_disable_unprepare(info->mclk);
|
||||
return err;
|
||||
}
|
||||
err = clk_prepare_enable(info->lrclk);
|
||||
if (err) {
|
||||
clk_disable_unprepare(info->sclk);
|
||||
clk_disable_unprepare(info->mclk);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Enable i2s */
|
||||
ep93xx_i2s_write_reg(info, EP93XX_I2S_GLCTRL, 1);
|
||||
|
|
@ -119,6 +131,8 @@ static void ep93xx_i2s_enable(struct ep93xx_i2s_info *info, int stream)
|
|||
ep93xx_i2s_write_reg(info, EP93XX_I2S_TXCTRL,
|
||||
EP93XX_I2S_TXCTRL_TXEMPTY_LVL |
|
||||
EP93XX_I2S_TXCTRL_TXUFIE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ep93xx_i2s_disable(struct ep93xx_i2s_info *info, int stream)
|
||||
|
|
@ -195,9 +209,7 @@ static int ep93xx_i2s_startup(struct snd_pcm_substream *substream,
|
|||
{
|
||||
struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
|
||||
|
||||
ep93xx_i2s_enable(info, substream->stream);
|
||||
|
||||
return 0;
|
||||
return ep93xx_i2s_enable(info, substream->stream);
|
||||
}
|
||||
|
||||
static void ep93xx_i2s_shutdown(struct snd_pcm_substream *substream,
|
||||
|
|
@ -373,14 +385,16 @@ static int ep93xx_i2s_suspend(struct snd_soc_component *component)
|
|||
static int ep93xx_i2s_resume(struct snd_soc_component *component)
|
||||
{
|
||||
struct ep93xx_i2s_info *info = snd_soc_component_get_drvdata(component);
|
||||
int err;
|
||||
|
||||
if (!snd_soc_component_active(component))
|
||||
return 0;
|
||||
|
||||
ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_PLAYBACK);
|
||||
ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_CAPTURE);
|
||||
err = ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_PLAYBACK);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
return ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_CAPTURE);
|
||||
}
|
||||
#else
|
||||
#define ep93xx_i2s_suspend NULL
|
||||
|
|
|
|||
|
|
@ -530,8 +530,6 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
|
|||
select SND_SOC_CS42L43_SDW
|
||||
select MFD_CS42L43
|
||||
select MFD_CS42L43_SDW
|
||||
select PINCTRL_CS42L43
|
||||
select SPI_CS42L43
|
||||
select SND_SOC_CS35L56_SPI
|
||||
select SND_SOC_CS35L56_SDW
|
||||
select SND_SOC_DMIC
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ static int rt5660_hw_params(struct snd_pcm_substream *substream,
|
|||
params_rate(params) * 50,
|
||||
params_rate(params) * 512);
|
||||
if (ret < 0)
|
||||
dev_err(codec_dai->dev, "can't set codec pll: %d\n", ret);
|
||||
dev_err(rtd->dev, "can't set codec pll: %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2859,6 +2859,7 @@ int snd_soc_component_initialize(struct snd_soc_component *component,
|
|||
INIT_LIST_HEAD(&component->dobj_list);
|
||||
INIT_LIST_HEAD(&component->card_list);
|
||||
INIT_LIST_HEAD(&component->list);
|
||||
INIT_LIST_HEAD(&component->card_aux_list);
|
||||
mutex_init(&component->io_mutex);
|
||||
|
||||
if (!component->name) {
|
||||
|
|
|
|||
|
|
@ -488,7 +488,7 @@ static int init_card(struct snd_usb_caiaqdev *cdev)
|
|||
memset(id, 0, sizeof(id));
|
||||
|
||||
for (c = card->shortname, len = 0;
|
||||
*c && len < sizeof(card->id); c++)
|
||||
*c && len < sizeof(card->id) - 1; c++)
|
||||
if (*c != ' ')
|
||||
id[len++] = *c;
|
||||
|
||||
|
|
|
|||
|
|
@ -2305,6 +2305,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_PLAYBACK_FIRST | QUIRK_FLAG_GENERIC_IMPLICIT_FB),
|
||||
DEVICE_FLG(0x13e5, 0x0001, /* Serato Phono */
|
||||
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
||||
DEVICE_FLG(0x152a, 0x880a, /* NeuralDSP Quad Cortex */
|
||||
0), /* Doesn't have the vendor quirk which would otherwise apply */
|
||||
DEVICE_FLG(0x154e, 0x1002, /* Denon DCD-1500RE */
|
||||
QUIRK_FLAG_ITF_USB_DSD_DAC | QUIRK_FLAG_CTL_MSG_DELAY),
|
||||
DEVICE_FLG(0x154e, 0x1003, /* Denon DA-300USB */
|
||||
|
|
@ -2433,6 +2435,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_VALIDATE_RATES),
|
||||
DEVICE_FLG(0x1235, 0x8006, 0), /* Focusrite Scarlett 2i2 1st Gen */
|
||||
DEVICE_FLG(0x1235, 0x800a, 0), /* Focusrite Scarlett 2i4 1st Gen */
|
||||
DEVICE_FLG(0x1235, 0x8016, 0), /* Focusrite Scarlett 2i2 1st Gen */
|
||||
DEVICE_FLG(0x1235, 0x801c, 0), /* Focusrite Scarlett Solo 1st Gen */
|
||||
VENDOR_FLG(0x1235, /* Focusrite Novation */
|
||||
QUIRK_FLAG_SKIP_CLOCK_SELECTOR |
|
||||
QUIRK_FLAG_SKIP_IFACE_SETUP),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user