sound fixes for 5.11-rc1
A collection of small fixes that came up recently for 5.11. Majority of fixes are usual HD-audio and USB-audio quirks, while a few PCM core fixes for addressing the information leak and yet more UBSAN fixes in the core side. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAl/i9TYOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+jBg/6Al8JBgYALZkDOFS1fdeihm7i2keRbkI16OIt dRv1sIr3rctuLk/oCwj0pTjBNJHfhUX2UfGxcYXIz0m32O1S13t4aBKPJ7BqUi/m x0CHYy4v8JDeJGuWm8txzdedJIA3m69m/2TZZ+pFe7p3vIl51vXekklALuLQ+JTw tz98CaXMQxJQq+/ddlukLOKSTNI1gb/Q+T4R/ZuMYXrfn0+/WjaP3OED/a4uPvvQ 0SpLTNS1zzTbS8wK2yys90SK9uR4Y0b0lcNZ5gES1rmYR9ZLwcp0jdHFXKc1HJnJ x3YmMHQ+qtP/tFTJz1TCEmYl0ofL6axKEb55urm3NY6Nr/xDei5teT+nuBdum4O8 tMAui110hVoD4BRz9lCLnvGARVa9MDKj4Znp7QXu1YsUmATuAN4fEzCar9ojIvOV rv73LmotPeymeSnLkFKI4DhbesxjJa4/eQkwPGFXsbjwt/E9N4zFpSxyTcWzYK1q wl1jyPE6TuMD6nm/Ef2G5h6XIlnZD+AeSSNkVQSsd97Ttvp6kCU5Aidc+IQpQ1b5 tWRhM8dphiiO+Y2j4pbJNDQMWarXVMp2deXIZzohVNluWM1t/0k76bWa+wATodFJ okuZE4knHCUXJ+HO+oTt+85t/H+qgIx0I9VzyQBCwvbJ03xRHYbj0+06YDgTp272 q6zhW5g= =Ihh7 -----END PGP SIGNATURE----- Merge tag 'sound-fix-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A collection of small fixes that came up recently for 5.11. The majority of fixes are usual HD-audio and USB-audio quirks, with a few PCM core fixes for addressing the information leak and yet more UBSAN fixes in the core side" * tag 'sound-fix-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA/hda: apply jack fixup for the Acer Veriton N4640G/N6640G/N2510G ALSA: hda/realtek: Apply jack fixup for Quanta NL3 ALSA: usb-audio: Add implicit feeback support for the BOSS GT-1 ALSA: usb-audio: Add alias entry for ASUS PRIME TRX40 PRO-S ALSA: core: Remove redundant comments ALSA: hda/realtek: Add quirk for MSI-GP73 ALSA: pcm: oss: Fix a few more UBSAN fixes ALSA: pcm: Clear the full allocated memory at hw_params ALSA: memalloc: Align buffer allocations in page size ALSA: usb-audio: Disable sample read check if firmware doesn't give back ALSA: pcm: Remove snd_pcm_lib_preallocate_dma_free() ALSA: usb-audio: Add VID to support native DSD reproduction on FiiO devices ALSA: core: memalloc: add page alignment for iram ALSA: hda/realtek - Supported Dell fixed type headset ALSA: hda/realtek: Remove dummy lineout on Acer TravelMate P648/P658
This commit is contained in:
commit
58cf05f597
|
@ -149,8 +149,6 @@ static void release_card_device(struct device *dev)
|
||||||
* @extra_size: allocate this extra size after the main soundcard structure
|
* @extra_size: allocate this extra size after the main soundcard structure
|
||||||
* @card_ret: the pointer to store the created card instance
|
* @card_ret: the pointer to store the created card instance
|
||||||
*
|
*
|
||||||
* Creates and initializes a soundcard structure.
|
|
||||||
*
|
|
||||||
* The function allocates snd_card instance via kzalloc with the given
|
* The function allocates snd_card instance via kzalloc with the given
|
||||||
* space for the driver to use freely. The allocated struct is stored
|
* space for the driver to use freely. The allocated struct is stored
|
||||||
* in the given card_ret pointer.
|
* in the given card_ret pointer.
|
||||||
|
|
|
@ -77,7 +77,8 @@ static void snd_malloc_dev_iram(struct snd_dma_buffer *dmab, size_t size)
|
||||||
/* Assign the pool into private_data field */
|
/* Assign the pool into private_data field */
|
||||||
dmab->private_data = pool;
|
dmab->private_data = pool;
|
||||||
|
|
||||||
dmab->area = gen_pool_dma_alloc(pool, size, &dmab->addr);
|
dmab->area = gen_pool_dma_alloc_align(pool, size, &dmab->addr,
|
||||||
|
PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,6 +133,7 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
|
||||||
if (WARN_ON(!dmab))
|
if (WARN_ON(!dmab))
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
dmab->dev.type = type;
|
dmab->dev.type = type;
|
||||||
dmab->dev.dev = device;
|
dmab->dev.dev = device;
|
||||||
dmab->bytes = 0;
|
dmab->bytes = 0;
|
||||||
|
|
|
@ -693,6 +693,8 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream,
|
||||||
|
|
||||||
oss_buffer_size = snd_pcm_plug_client_size(substream,
|
oss_buffer_size = snd_pcm_plug_client_size(substream,
|
||||||
snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, NULL)) * oss_frame_size;
|
snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, NULL)) * oss_frame_size;
|
||||||
|
if (!oss_buffer_size)
|
||||||
|
return -EINVAL;
|
||||||
oss_buffer_size = rounddown_pow_of_two(oss_buffer_size);
|
oss_buffer_size = rounddown_pow_of_two(oss_buffer_size);
|
||||||
if (atomic_read(&substream->mmap_count)) {
|
if (atomic_read(&substream->mmap_count)) {
|
||||||
if (oss_buffer_size > runtime->oss.mmap_bytes)
|
if (oss_buffer_size > runtime->oss.mmap_bytes)
|
||||||
|
@ -728,17 +730,21 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream,
|
||||||
|
|
||||||
min_period_size = snd_pcm_plug_client_size(substream,
|
min_period_size = snd_pcm_plug_client_size(substream,
|
||||||
snd_pcm_hw_param_value_min(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL));
|
snd_pcm_hw_param_value_min(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL));
|
||||||
min_period_size *= oss_frame_size;
|
if (min_period_size) {
|
||||||
min_period_size = roundup_pow_of_two(min_period_size);
|
min_period_size *= oss_frame_size;
|
||||||
if (oss_period_size < min_period_size)
|
min_period_size = roundup_pow_of_two(min_period_size);
|
||||||
oss_period_size = min_period_size;
|
if (oss_period_size < min_period_size)
|
||||||
|
oss_period_size = min_period_size;
|
||||||
|
}
|
||||||
|
|
||||||
max_period_size = snd_pcm_plug_client_size(substream,
|
max_period_size = snd_pcm_plug_client_size(substream,
|
||||||
snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL));
|
snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL));
|
||||||
max_period_size *= oss_frame_size;
|
if (max_period_size) {
|
||||||
max_period_size = rounddown_pow_of_two(max_period_size);
|
max_period_size *= oss_frame_size;
|
||||||
if (oss_period_size > max_period_size)
|
max_period_size = rounddown_pow_of_two(max_period_size);
|
||||||
oss_period_size = max_period_size;
|
if (oss_period_size > max_period_size)
|
||||||
|
oss_period_size = max_period_size;
|
||||||
|
}
|
||||||
|
|
||||||
oss_periods = oss_buffer_size / oss_period_size;
|
oss_periods = oss_buffer_size / oss_period_size;
|
||||||
|
|
||||||
|
|
|
@ -89,14 +89,6 @@ static int preallocate_pcm_pages(struct snd_pcm_substream *substream, size_t siz
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* release the preallocated buffer if not yet done.
|
|
||||||
*/
|
|
||||||
static void snd_pcm_lib_preallocate_dma_free(struct snd_pcm_substream *substream)
|
|
||||||
{
|
|
||||||
do_free_pages(substream->pcm->card, &substream->dma_buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* snd_pcm_lib_preallocate_free - release the preallocated buffer of the specified substream.
|
* snd_pcm_lib_preallocate_free - release the preallocated buffer of the specified substream.
|
||||||
* @substream: the pcm substream instance
|
* @substream: the pcm substream instance
|
||||||
|
@ -105,7 +97,7 @@ static void snd_pcm_lib_preallocate_dma_free(struct snd_pcm_substream *substream
|
||||||
*/
|
*/
|
||||||
void snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
void snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
snd_pcm_lib_preallocate_dma_free(substream);
|
do_free_pages(substream->pcm->card, &substream->dma_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -755,8 +755,13 @@ static int snd_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||||
runtime->boundary *= 2;
|
runtime->boundary *= 2;
|
||||||
|
|
||||||
/* clear the buffer for avoiding possible kernel info leaks */
|
/* clear the buffer for avoiding possible kernel info leaks */
|
||||||
if (runtime->dma_area && !substream->ops->copy_user)
|
if (runtime->dma_area && !substream->ops->copy_user) {
|
||||||
memset(runtime->dma_area, 0, runtime->dma_bytes);
|
size_t size = runtime->dma_bytes;
|
||||||
|
|
||||||
|
if (runtime->info & SNDRV_PCM_INFO_MMAP)
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
|
memset(runtime->dma_area, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
snd_pcm_timer_resolution_change(substream);
|
snd_pcm_timer_resolution_change(substream);
|
||||||
snd_pcm_set_state(substream, SNDRV_PCM_STATE_SETUP);
|
snd_pcm_set_state(substream, SNDRV_PCM_STATE_SETUP);
|
||||||
|
|
|
@ -2516,6 +2516,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
|
||||||
SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
|
||||||
SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
|
||||||
|
SND_PCI_QUIRK(0x1462, 0x1229, "MSI-GP73", ALC1220_FIXUP_CLEVO_P950),
|
||||||
SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
|
||||||
SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
|
||||||
SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
|
SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
|
||||||
|
@ -6368,6 +6369,7 @@ enum {
|
||||||
ALC287_FIXUP_HP_GPIO_LED,
|
ALC287_FIXUP_HP_GPIO_LED,
|
||||||
ALC256_FIXUP_HP_HEADSET_MIC,
|
ALC256_FIXUP_HP_HEADSET_MIC,
|
||||||
ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
|
ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
|
||||||
|
ALC282_FIXUP_ACER_DISABLE_LINEOUT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_fixup alc269_fixups[] = {
|
static const struct hda_fixup alc269_fixups[] = {
|
||||||
|
@ -7791,6 +7793,16 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||||
.chained = true,
|
.chained = true,
|
||||||
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||||
},
|
},
|
||||||
|
[ALC282_FIXUP_ACER_DISABLE_LINEOUT] = {
|
||||||
|
.type = HDA_FIXUP_PINS,
|
||||||
|
.v.pins = (const struct hda_pintbl[]) {
|
||||||
|
{ 0x1b, 0x411111f0 },
|
||||||
|
{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||||
|
{ },
|
||||||
|
},
|
||||||
|
.chained = true,
|
||||||
|
.chain_id = ALC269_FIXUP_HEADSET_MODE
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
|
@ -7805,11 +7817,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
||||||
SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
||||||
SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
|
SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
|
||||||
|
SND_PCI_QUIRK(0x1025, 0x101c, "Acer Veriton N2510G", ALC269_FIXUP_LIFEBOOK),
|
||||||
SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
|
SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
|
||||||
SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||||
|
SND_PCI_QUIRK(0x1025, 0x1166, "Acer Veriton N4640G", ALC269_FIXUP_LIFEBOOK),
|
||||||
|
SND_PCI_QUIRK(0x1025, 0x1167, "Acer Veriton N6640G", ALC269_FIXUP_LIFEBOOK),
|
||||||
SND_PCI_QUIRK(0x1025, 0x1246, "Acer Predator Helios 500", ALC299_FIXUP_PREDATOR_SPK),
|
SND_PCI_QUIRK(0x1025, 0x1246, "Acer Predator Helios 500", ALC299_FIXUP_PREDATOR_SPK),
|
||||||
SND_PCI_QUIRK(0x1025, 0x1247, "Acer vCopperbox", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
|
SND_PCI_QUIRK(0x1025, 0x1247, "Acer vCopperbox", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
|
||||||
SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||||
|
@ -7870,6 +7885,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1028, 0x09bf, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1028, 0x09bf, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
||||||
|
SND_PCI_QUIRK(0x1028, 0x0a58, "Dell Precision 3650 Tower", ALC255_FIXUP_DELL_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||||
|
@ -8017,6 +8033,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
|
SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
|
||||||
|
SND_PCI_QUIRK(0x152d, 0x1082, "Quanta NL3", ALC269_FIXUP_LIFEBOOK),
|
||||||
SND_PCI_QUIRK(0x1558, 0x1323, "Clevo N130ZU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1558, 0x1323, "Clevo N130ZU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1558, 0x1325, "System76 Darter Pro (darp5)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1558, 0x1325, "System76 Darter Pro (darp5)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1558, 0x1401, "Clevo L140[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1558, 0x1401, "Clevo L140[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||||
|
@ -8564,6 +8581,22 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||||
{0x12, 0x90a60140},
|
{0x12, 0x90a60140},
|
||||||
{0x19, 0x04a11030},
|
{0x19, 0x04a11030},
|
||||||
{0x21, 0x04211020}),
|
{0x21, 0x04211020}),
|
||||||
|
SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
|
||||||
|
ALC282_STANDARD_PINS,
|
||||||
|
{0x12, 0x90a609c0},
|
||||||
|
{0x18, 0x03a11830},
|
||||||
|
{0x19, 0x04a19831},
|
||||||
|
{0x1a, 0x0481303f},
|
||||||
|
{0x1b, 0x04211020},
|
||||||
|
{0x21, 0x0321101f}),
|
||||||
|
SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
|
||||||
|
ALC282_STANDARD_PINS,
|
||||||
|
{0x12, 0x90a60940},
|
||||||
|
{0x18, 0x03a11830},
|
||||||
|
{0x19, 0x04a19831},
|
||||||
|
{0x1a, 0x0481303f},
|
||||||
|
{0x1b, 0x04211020},
|
||||||
|
{0x21, 0x0321101f}),
|
||||||
SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||||
ALC282_STANDARD_PINS,
|
ALC282_STANDARD_PINS,
|
||||||
{0x12, 0x90a60130},
|
{0x12, 0x90a60130},
|
||||||
|
|
|
@ -383,6 +383,9 @@ static const struct usb_audio_device_name usb_audio_names[] = {
|
||||||
/* ASUS ROG Strix */
|
/* ASUS ROG Strix */
|
||||||
PROFILE_NAME(0x0b05, 0x1917,
|
PROFILE_NAME(0x0b05, 0x1917,
|
||||||
"Realtek", "ALC1220-VB-DT", "Realtek-ALC1220-VB-Desktop"),
|
"Realtek", "ALC1220-VB-DT", "Realtek-ALC1220-VB-Desktop"),
|
||||||
|
/* ASUS PRIME TRX40 PRO-S */
|
||||||
|
PROFILE_NAME(0x0b05, 0x1918,
|
||||||
|
"Realtek", "ALC1220-VB-DT", "Realtek-ALC1220-VB-Desktop"),
|
||||||
|
|
||||||
/* Dell WD15 Dock */
|
/* Dell WD15 Dock */
|
||||||
PROFILE_NAME(0x0bda, 0x4014, "Dell", "WD15 Dock", "Dell-WD15-Dock"),
|
PROFILE_NAME(0x0bda, 0x4014, "Dell", "WD15 Dock", "Dell-WD15-Dock"),
|
||||||
|
|
|
@ -534,6 +534,12 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip,
|
||||||
}
|
}
|
||||||
|
|
||||||
crate = data[0] | (data[1] << 8) | (data[2] << 16);
|
crate = data[0] | (data[1] << 8) | (data[2] << 16);
|
||||||
|
if (!crate) {
|
||||||
|
dev_info(&dev->dev, "failed to read current rate; disabling the check\n");
|
||||||
|
chip->sample_rate_read_error = 3; /* three strikes, see above */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (crate != rate) {
|
if (crate != rate) {
|
||||||
dev_warn(&dev->dev, "current rate %d is different from the runtime rate %d\n", crate, rate);
|
dev_warn(&dev->dev, "current rate %d is different from the runtime rate %d\n", crate, rate);
|
||||||
// runtime->rate = crate;
|
// runtime->rate = crate;
|
||||||
|
|
|
@ -75,6 +75,7 @@ static const struct snd_usb_implicit_fb_match playback_implicit_fb_quirks[] = {
|
||||||
/* No quirk for playback but with capture quirk (see below) */
|
/* No quirk for playback but with capture quirk (see below) */
|
||||||
IMPLICIT_FB_SKIP_DEV(0x0582, 0x0130), /* BOSS BR-80 */
|
IMPLICIT_FB_SKIP_DEV(0x0582, 0x0130), /* BOSS BR-80 */
|
||||||
IMPLICIT_FB_SKIP_DEV(0x0582, 0x0189), /* BOSS GT-100v2 */
|
IMPLICIT_FB_SKIP_DEV(0x0582, 0x0189), /* BOSS GT-100v2 */
|
||||||
|
IMPLICIT_FB_SKIP_DEV(0x0582, 0x01d6), /* BOSS GT-1 */
|
||||||
IMPLICIT_FB_SKIP_DEV(0x0582, 0x01d8), /* BOSS Katana */
|
IMPLICIT_FB_SKIP_DEV(0x0582, 0x01d8), /* BOSS Katana */
|
||||||
IMPLICIT_FB_SKIP_DEV(0x0582, 0x01e5), /* BOSS GT-001 */
|
IMPLICIT_FB_SKIP_DEV(0x0582, 0x01e5), /* BOSS GT-001 */
|
||||||
|
|
||||||
|
@ -85,6 +86,7 @@ static const struct snd_usb_implicit_fb_match playback_implicit_fb_quirks[] = {
|
||||||
static const struct snd_usb_implicit_fb_match capture_implicit_fb_quirks[] = {
|
static const struct snd_usb_implicit_fb_match capture_implicit_fb_quirks[] = {
|
||||||
IMPLICIT_FB_FIXED_DEV(0x0582, 0x0130, 0x0d, 0x01), /* BOSS BR-80 */
|
IMPLICIT_FB_FIXED_DEV(0x0582, 0x0130, 0x0d, 0x01), /* BOSS BR-80 */
|
||||||
IMPLICIT_FB_FIXED_DEV(0x0582, 0x0189, 0x0d, 0x01), /* BOSS GT-100v2 */
|
IMPLICIT_FB_FIXED_DEV(0x0582, 0x0189, 0x0d, 0x01), /* BOSS GT-100v2 */
|
||||||
|
IMPLICIT_FB_FIXED_DEV(0x0582, 0x01d6, 0x0d, 0x01), /* BOSS GT-1 */
|
||||||
IMPLICIT_FB_FIXED_DEV(0x0582, 0x01d8, 0x0d, 0x01), /* BOSS Katana */
|
IMPLICIT_FB_FIXED_DEV(0x0582, 0x01d8, 0x0d, 0x01), /* BOSS Katana */
|
||||||
IMPLICIT_FB_FIXED_DEV(0x0582, 0x01e5, 0x0d, 0x01), /* BOSS GT-001 */
|
IMPLICIT_FB_FIXED_DEV(0x0582, 0x01e5, 0x0d, 0x01), /* BOSS GT-001 */
|
||||||
|
|
||||||
|
|
|
@ -1771,6 +1771,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
|
||||||
case 0x25ce: /* Mytek devices */
|
case 0x25ce: /* Mytek devices */
|
||||||
case 0x278b: /* Rotel? */
|
case 0x278b: /* Rotel? */
|
||||||
case 0x292b: /* Gustard/Ess based devices */
|
case 0x292b: /* Gustard/Ess based devices */
|
||||||
|
case 0x2972: /* FiiO devices */
|
||||||
case 0x2ab6: /* T+A devices */
|
case 0x2ab6: /* T+A devices */
|
||||||
case 0x3353: /* Khadas devices */
|
case 0x3353: /* Khadas devices */
|
||||||
case 0x3842: /* EVGA */
|
case 0x3842: /* EVGA */
|
||||||
|
|
Loading…
Reference in New Issue