sound fixes for 4.11-rc4
This contains the collection of small fixes for 4.11 that were pending during my vacation: - A few HD-audio quirks (more Dell headset support, docking station support on HP laptops), - A regression fix for the previous ctxfi DMA mask fix, - A correction of the new CONFIG_SND_X86 menu entry, and - A fix for the races in ALSA sequencer core spotted by syzkaller. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEECxfAB4MH3rD5mfB6bDGAVD0pKaQFAljTzpwOHHRpd2FpQHN1 c2UuZGUACgkQbDGAVD0pKaQzKQ//WmOSF098ORabkxxapsEG9k/8Y5cdChOKmRrT pmhbZ0APIxYHnBT09sDqWmCMQJB3hpI1fnGRQxz8TSGgYlWHV+PXwWKQz4XUil5b Cq6AznbNZsPCT11AgBRQ5G4CBLIhrL/fGFHqKBZbj0i8RtaLtMzhMUVXy7jQZrK4 /CsZHUPAEH/TG3w3XDmlRQ0JLfAJ5eb1Vxvtq6aSwZ9C8CFuZqVef6gLbs81MSYz ZEpyK1/lRzi6Um/xTcq0bZB5lbXAd6d4K9+6dvog2vQni7rXBr4h3ID+li2Hr6SW 4m3nxESkWAfXUFDKk6Ib8/LgZVXX5PonF3mnZJGrxQ1ZGFyhmXCvUIzhwOPTGEjo PyX9yo8Gh9Avj9kX4DsFFVApX4AwtA104DLz/3uZDVKThZKcWOMEOODDYRHidl3i MrWKsZvcilGeQ55xNhzvX/dw2G8Fjxq6892QEyIGNICk+lcTWHXeiTAYtd7iju+w 587AUOx7BOjqUA0PGY1qqp6sqIIes4zxaXHYttZJhpNEB8Ga/9uUcOwnXj8MmiGc U1NWRZ0e+oQ+/08gMWq9aqQCaYwWxXXYFJcHKsJFoaqnrHeiX9gHdZlbkx8ZYZDt KMyhPeN/aBTRcwMvnGII7g7ah/dziDHCekfwpINbxp7czb93+a81jFEkwDRgHXQt POi+/w4= =tHT0 -----END PGP SIGNATURE----- Merge tag 'sound-4.11-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "This contains the collection of small fixes for 4.11 that were pending during my vacation: - a few HD-audio quirks (more Dell headset support, docking station support on HP laptops) - a regression fix for the previous ctxfi DMA mask fix - a correction of the new CONFIG_SND_X86 menu entry - a fix for the races in ALSA sequencer core spotted by syzkaller" * tag 'sound-4.11-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Adding a group of pin definition to fix headset problem ALSA: seq: Fix racy cell insertions during snd_seq_pool_done() ALSA: x86: Make CONFIG_SND_X86 bool ALSA: hda - add support for docking station for HP 840 G3 ALSA: hda - add support for docking station for HP 820 G2 ALSA: ctxfi: Fix the incorrect check of dma_set_mask() call
This commit is contained in:
Коммит
d038e3dcff
|
@ -1832,6 +1832,7 @@ static int snd_seq_ioctl_set_client_pool(struct snd_seq_client *client,
|
|||
info->output_pool != client->pool->size)) {
|
||||
if (snd_seq_write_pool_allocated(client)) {
|
||||
/* remove all existing cells */
|
||||
snd_seq_pool_mark_closing(client->pool);
|
||||
snd_seq_queue_client_leave_cells(client->number);
|
||||
snd_seq_pool_done(client->pool);
|
||||
}
|
||||
|
|
|
@ -72,6 +72,9 @@ void snd_seq_fifo_delete(struct snd_seq_fifo **fifo)
|
|||
return;
|
||||
*fifo = NULL;
|
||||
|
||||
if (f->pool)
|
||||
snd_seq_pool_mark_closing(f->pool);
|
||||
|
||||
snd_seq_fifo_clear(f);
|
||||
|
||||
/* wake up clients if any */
|
||||
|
|
|
@ -415,6 +415,18 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* refuse the further insertion to the pool */
|
||||
void snd_seq_pool_mark_closing(struct snd_seq_pool *pool)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (snd_BUG_ON(!pool))
|
||||
return;
|
||||
spin_lock_irqsave(&pool->lock, flags);
|
||||
pool->closing = 1;
|
||||
spin_unlock_irqrestore(&pool->lock, flags);
|
||||
}
|
||||
|
||||
/* remove events */
|
||||
int snd_seq_pool_done(struct snd_seq_pool *pool)
|
||||
{
|
||||
|
@ -425,10 +437,6 @@ int snd_seq_pool_done(struct snd_seq_pool *pool)
|
|||
return -EINVAL;
|
||||
|
||||
/* wait for closing all threads */
|
||||
spin_lock_irqsave(&pool->lock, flags);
|
||||
pool->closing = 1;
|
||||
spin_unlock_irqrestore(&pool->lock, flags);
|
||||
|
||||
if (waitqueue_active(&pool->output_sleep))
|
||||
wake_up(&pool->output_sleep);
|
||||
|
||||
|
@ -485,6 +493,7 @@ int snd_seq_pool_delete(struct snd_seq_pool **ppool)
|
|||
*ppool = NULL;
|
||||
if (pool == NULL)
|
||||
return 0;
|
||||
snd_seq_pool_mark_closing(pool);
|
||||
snd_seq_pool_done(pool);
|
||||
kfree(pool);
|
||||
return 0;
|
||||
|
|
|
@ -84,6 +84,7 @@ static inline int snd_seq_total_cells(struct snd_seq_pool *pool)
|
|||
int snd_seq_pool_init(struct snd_seq_pool *pool);
|
||||
|
||||
/* done pool - free events */
|
||||
void snd_seq_pool_mark_closing(struct snd_seq_pool *pool);
|
||||
int snd_seq_pool_done(struct snd_seq_pool *pool);
|
||||
|
||||
/* create pool */
|
||||
|
|
|
@ -1905,7 +1905,7 @@ static int hw_card_start(struct hw *hw)
|
|||
return err;
|
||||
|
||||
/* Set DMA transfer mask */
|
||||
if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
|
||||
if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
|
||||
dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
|
||||
} else {
|
||||
dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
|
||||
|
|
|
@ -261,6 +261,7 @@ enum {
|
|||
CXT_FIXUP_HP_530,
|
||||
CXT_FIXUP_CAP_MIX_AMP_5047,
|
||||
CXT_FIXUP_MUTE_LED_EAPD,
|
||||
CXT_FIXUP_HP_DOCK,
|
||||
CXT_FIXUP_HP_SPECTRE,
|
||||
CXT_FIXUP_HP_GATE_MIC,
|
||||
};
|
||||
|
@ -778,6 +779,14 @@ static const struct hda_fixup cxt_fixups[] = {
|
|||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = cxt_fixup_mute_led_eapd,
|
||||
},
|
||||
[CXT_FIXUP_HP_DOCK] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x16, 0x21011020 }, /* line-out */
|
||||
{ 0x18, 0x2181103f }, /* line-in */
|
||||
{ }
|
||||
}
|
||||
},
|
||||
[CXT_FIXUP_HP_SPECTRE] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
|
@ -839,6 +848,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x0543, "Acer Aspire One 522", CXT_FIXUP_STEREO_DMIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC),
|
||||
SND_PCI_QUIRK(0x103c, 0x8079, "HP EliteBook 840 G3", CXT_FIXUP_HP_DOCK),
|
||||
SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
|
||||
SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
|
||||
|
@ -871,6 +881,7 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
|
|||
{ .id = CXT_PINCFG_LEMOTE_A1205, .name = "lemote-a1205" },
|
||||
{ .id = CXT_FIXUP_OLPC_XO, .name = "olpc-xo" },
|
||||
{ .id = CXT_FIXUP_MUTE_LED_EAPD, .name = "mute-led-eapd" },
|
||||
{ .id = CXT_FIXUP_HP_DOCK, .name = "hp-dock" },
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
@ -4847,6 +4847,7 @@ enum {
|
|||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
|
||||
ALC280_FIXUP_HP_DOCK_PINS,
|
||||
ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
|
||||
ALC280_FIXUP_HP_9480M,
|
||||
ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
|
@ -5388,6 +5389,16 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.chained = true,
|
||||
.chain_id = ALC280_FIXUP_HP_GPIO4
|
||||
},
|
||||
[ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x1b, 0x21011020 }, /* line-out */
|
||||
{ 0x18, 0x2181103f }, /* line-in */
|
||||
{ },
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
|
||||
},
|
||||
[ALC280_FIXUP_HP_9480M] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc280_fixup_hp_9480m,
|
||||
|
@ -5647,7 +5658,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
|
@ -5816,6 +5827,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
|||
{.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
|
||||
{.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
|
||||
{.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
|
||||
{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
|
||||
{.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
|
||||
{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
|
||||
{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
|
||||
|
@ -6090,6 +6102,8 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|||
ALC295_STANDARD_PINS,
|
||||
{0x17, 0x21014040},
|
||||
{0x18, 0x21a19050}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC295_STANDARD_PINS),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC298_STANDARD_PINS,
|
||||
{0x17, 0x90170110}),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
menuconfig SND_X86
|
||||
tristate "X86 sound devices"
|
||||
bool "X86 sound devices"
|
||||
depends on X86
|
||||
default y
|
||||
---help---
|
||||
X86 sound devices that don't fall under SoC or PCI categories
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче