Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Again it became bigger than wished, unfortunately, as this contains
quite a few ASoC fixes that came up a bit late. It also includes yet
more HD- and USB-audio quirks: I decided to merge them now, as those
are for stable, and we'll need them sooner or later.

Although the volumes are a bit high, all changes are device-specific
(and reasonably small) fixes, so it should be safe for the late rc"

* tag 'sound-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: usb-audio: Fix microphone sound on Jieli webcam.
ALSA: hda/realtek: Fixes HP Spectre x360 15-eb1xxx speakers
ALSA: usb-audio: Provide quirk for Sennheiser GSP670 Headset
ALSA: hda/realtek: Add quirk for Clevo PC50HS
ALSA: usb-audio: add Schiit Hel device to quirk table
ASoC: wm8960: Fix clock configuration on slave mode
ASoC: cs42l42: Ensure 0dB full scale volume is used for headsets
ASoC: soc-core: fix null-ptr-deref in snd_soc_del_component_unlocked()
ASoC: codec: wcd938x: Add irq config support
ASoC: DAPM: Fix missing kctl change notifications
ASoC: Intel: bytcht_es8316: Utilize dev_err_probe() to avoid log saturation
ASoC: Intel: bytcht_es8316: Switch to use gpiod_get_optional()
ASoC: Intel: bytcht_es8316: Use temporary variable for struct device
ASoC: Intel: bytcht_es8316: Get platform data via dev_get_platdata()
ASoC: wcd938x: Fix jack detection issue
ASoC: nau8824: Fix headphone vs headset, button-press detection no longer working
ASoC: cs4341: Add SPI device ID table
ASoC: pcm179x: Add missing entries SPI to device ID table
ASoC: fsl_xcvr: Fix channel swap issue with ARC
ASoC: pcm512x: Mend accesses to the I2S_1 and I2S_2 registers

+157 -56
+47
sound/pci/hda/patch_realtek.c
··· 2535 2535 SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2536 2536 SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2537 2537 SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2538 + SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2538 2539 SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2539 2540 SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2540 2541 SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), ··· 6406 6405 } 6407 6406 } 6408 6407 6408 + /* GPIO1 = amplifier on/off 6409 + * GPIO3 = mic mute LED 6410 + */ 6411 + static void alc285_fixup_hp_spectre_x360_eb1(struct hda_codec *codec, 6412 + const struct hda_fixup *fix, int action) 6413 + { 6414 + static const hda_nid_t conn[] = { 0x02 }; 6415 + 6416 + struct alc_spec *spec = codec->spec; 6417 + static const struct hda_pintbl pincfgs[] = { 6418 + { 0x14, 0x90170110 }, /* front/high speakers */ 6419 + { 0x17, 0x90170130 }, /* back/bass speakers */ 6420 + { } 6421 + }; 6422 + 6423 + //enable micmute led 6424 + alc_fixup_hp_gpio_led(codec, action, 0x00, 0x04); 6425 + 6426 + switch (action) { 6427 + case HDA_FIXUP_ACT_PRE_PROBE: 6428 + spec->micmute_led_polarity = 1; 6429 + /* needed for amp of back speakers */ 6430 + spec->gpio_mask |= 0x01; 6431 + spec->gpio_dir |= 0x01; 6432 + snd_hda_apply_pincfgs(codec, pincfgs); 6433 + /* share DAC to have unified volume control */ 6434 + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn); 6435 + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn); 6436 + break; 6437 + case HDA_FIXUP_ACT_INIT: 6438 + /* need to toggle GPIO to enable the amp of back speakers */ 6439 + alc_update_gpio_data(codec, 0x01, true); 6440 + msleep(100); 6441 + alc_update_gpio_data(codec, 0x01, false); 6442 + break; 6443 + } 6444 + } 6445 + 6409 6446 static void alc285_fixup_hp_spectre_x360(struct hda_codec *codec, 6410 6447 const struct hda_fixup *fix, int action) 6411 6448 { ··· 6596 6557 ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, 6597 6558 ALC280_FIXUP_HP_9480M, 6598 6559 ALC245_FIXUP_HP_X360_AMP, 6560 + ALC285_FIXUP_HP_SPECTRE_X360_EB1, 6599 6561 ALC288_FIXUP_DELL_HEADSET_MODE, 6600 6562 ALC288_FIXUP_DELL1_MIC_NO_PRESENCE, 6601 6563 ALC288_FIXUP_DELL_XPS_13, ··· 8290 8250 .type = HDA_FIXUP_FUNC, 8291 8251 .v.func = alc285_fixup_hp_spectre_x360, 8292 8252 }, 8253 + [ALC285_FIXUP_HP_SPECTRE_X360_EB1] = { 8254 + .type = HDA_FIXUP_FUNC, 8255 + .v.func = alc285_fixup_hp_spectre_x360_eb1 8256 + }, 8293 8257 [ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = { 8294 8258 .type = HDA_FIXUP_FUNC, 8295 8259 .v.func = alc285_fixup_ideapad_s740_coef, ··· 8628 8584 SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP), 8629 8585 SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED), 8630 8586 SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), 8587 + SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), 8588 + SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), 8631 8589 SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), 8632 8590 SND_PCI_QUIRK(0x103c, 0x8847, "HP EliteBook x360 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), 8633 8591 SND_PCI_QUIRK(0x103c, 0x884b, "HP EliteBook 840 Aero G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), ··· 9051 9005 {.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"}, 9052 9006 {.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"}, 9053 9007 {.id = ALC285_FIXUP_HP_SPECTRE_X360, .name = "alc285-hp-spectre-x360"}, 9008 + {.id = ALC285_FIXUP_HP_SPECTRE_X360_EB1, .name = "alc285-hp-spectre-x360-eb1"}, 9054 9009 {.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"}, 9055 9010 {.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"}, 9056 9011 {.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"},
+1
sound/soc/codecs/Kconfig
··· 1583 1583 tristate "WCD9380/WCD9385 Codec - SDW" 1584 1584 select SND_SOC_WCD938X 1585 1585 select SND_SOC_WCD_MBHC 1586 + select REGMAP_IRQ 1586 1587 depends on SOUNDWIRE 1587 1588 select REGMAP_SOUNDWIRE 1588 1589 help
+3 -13
sound/soc/codecs/cs42l42.c
··· 922 922 struct snd_soc_component *component = dai->component; 923 923 struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component); 924 924 unsigned int regval; 925 - u8 fullScaleVol; 926 925 int ret; 927 926 928 927 if (mute) { ··· 992 993 cs42l42->stream_use |= 1 << stream; 993 994 994 995 if (stream == SNDRV_PCM_STREAM_PLAYBACK) { 995 - /* Read the headphone load */ 996 - regval = snd_soc_component_read(component, CS42L42_LOAD_DET_RCSTAT); 997 - if (((regval & CS42L42_RLA_STAT_MASK) >> CS42L42_RLA_STAT_SHIFT) == 998 - CS42L42_RLA_STAT_15_OHM) { 999 - fullScaleVol = CS42L42_HP_FULL_SCALE_VOL_MASK; 1000 - } else { 1001 - fullScaleVol = 0; 1002 - } 1003 - 1004 - /* Un-mute the headphone, set the full scale volume flag */ 996 + /* Un-mute the headphone */ 1005 997 snd_soc_component_update_bits(component, CS42L42_HP_CTL, 1006 998 CS42L42_HP_ANA_AMUTE_MASK | 1007 - CS42L42_HP_ANA_BMUTE_MASK | 1008 - CS42L42_HP_FULL_SCALE_VOL_MASK, fullScaleVol); 999 + CS42L42_HP_ANA_BMUTE_MASK, 1000 + 0); 1009 1001 } 1010 1002 } 1011 1003
+7
sound/soc/codecs/cs4341.c
··· 305 305 return cs4341_probe(&spi->dev); 306 306 } 307 307 308 + static const struct spi_device_id cs4341_spi_ids[] = { 309 + { "cs4341a" }, 310 + { } 311 + }; 312 + MODULE_DEVICE_TABLE(spi, cs4341_spi_ids); 313 + 308 314 static struct spi_driver cs4341_spi_driver = { 309 315 .driver = { 310 316 .name = "cs4341-spi", 311 317 .of_match_table = of_match_ptr(cs4341_dt_ids), 312 318 }, 313 319 .probe = cs4341_spi_probe, 320 + .id_table = cs4341_spi_ids, 314 321 }; 315 322 #endif 316 323
+2 -2
sound/soc/codecs/nau8824.c
··· 867 867 struct regmap *regmap = nau8824->regmap; 868 868 int adc_value, event = 0, event_mask = 0; 869 869 870 - snd_soc_dapm_enable_pin(dapm, "MICBIAS"); 871 - snd_soc_dapm_enable_pin(dapm, "SAR"); 870 + snd_soc_dapm_force_enable_pin(dapm, "MICBIAS"); 871 + snd_soc_dapm_force_enable_pin(dapm, "SAR"); 872 872 snd_soc_dapm_sync(dapm); 873 873 874 874 msleep(100);
+1
sound/soc/codecs/pcm179x-spi.c
··· 36 36 MODULE_DEVICE_TABLE(of, pcm179x_of_match); 37 37 38 38 static const struct spi_device_id pcm179x_spi_ids[] = { 39 + { "pcm1792a", 0 }, 39 40 { "pcm179x", 0 }, 40 41 { }, 41 42 };
+2
sound/soc/codecs/pcm512x.c
··· 116 116 { PCM512x_FS_SPEED_MODE, 0x00 }, 117 117 { PCM512x_IDAC_1, 0x01 }, 118 118 { PCM512x_IDAC_2, 0x00 }, 119 + { PCM512x_I2S_1, 0x02 }, 120 + { PCM512x_I2S_2, 0x00 }, 119 121 }; 120 122 121 123 static bool pcm512x_readable(struct device *dev, unsigned int reg)
+3 -3
sound/soc/codecs/wcd938x.c
··· 4144 4144 { 4145 4145 struct wcd938x_priv *wcd = dev_get_drvdata(comp->dev); 4146 4146 4147 - if (!jack) 4147 + if (jack) 4148 4148 return wcd_mbhc_start(wcd->wcd_mbhc, &wcd->mbhc_cfg, jack); 4149 - 4150 - wcd_mbhc_stop(wcd->wcd_mbhc); 4149 + else 4150 + wcd_mbhc_stop(wcd->wcd_mbhc); 4151 4151 4152 4152 return 0; 4153 4153 }
+10 -3
sound/soc/codecs/wm8960.c
··· 742 742 int i, j, k; 743 743 int ret; 744 744 745 - if (!(iface1 & (1<<6))) { 746 - dev_dbg(component->dev, 747 - "Codec is slave mode, no need to configure clock\n"); 745 + /* 746 + * For Slave mode clocking should still be configured, 747 + * so this if statement should be removed, but some platform 748 + * may not work if the sysclk is not configured, to avoid such 749 + * compatible issue, just add '!wm8960->sysclk' condition in 750 + * this if statement. 751 + */ 752 + if (!(iface1 & (1 << 6)) && !wm8960->sysclk) { 753 + dev_warn(component->dev, 754 + "slave mode, but proceeding with no clock configuration\n"); 748 755 return 0; 749 756 } 750 757
+12 -5
sound/soc/fsl/fsl_xcvr.c
··· 487 487 return ret; 488 488 } 489 489 490 - /* clear DPATH RESET */ 490 + /* set DPATH RESET */ 491 491 m_ctl |= FSL_XCVR_EXT_CTRL_DPTH_RESET(tx); 492 + v_ctl |= FSL_XCVR_EXT_CTRL_DPTH_RESET(tx); 492 493 ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, m_ctl, v_ctl); 493 494 if (ret < 0) { 494 495 dev_err(dai->dev, "Error while setting EXT_CTRL: %d\n", ret); ··· 591 590 val |= FSL_XCVR_EXT_CTRL_CMDC_RESET(tx); 592 591 } 593 592 594 - /* set DPATH RESET */ 595 - mask |= FSL_XCVR_EXT_CTRL_DPTH_RESET(tx); 596 - val |= FSL_XCVR_EXT_CTRL_DPTH_RESET(tx); 597 - 598 593 ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, mask, val); 599 594 if (ret < 0) { 600 595 dev_err(dai->dev, "Err setting DPATH RESET: %d\n", ret); ··· 640 643 dev_err(dai->dev, "Failed to enable DMA: %d\n", ret); 641 644 return ret; 642 645 } 646 + 647 + /* clear DPATH RESET */ 648 + ret = regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, 649 + FSL_XCVR_EXT_CTRL_DPTH_RESET(tx), 650 + 0); 651 + if (ret < 0) { 652 + dev_err(dai->dev, "Failed to clear DPATH RESET: %d\n", ret); 653 + return ret; 654 + } 655 + 643 656 break; 644 657 case SNDRV_PCM_TRIGGER_STOP: 645 658 case SNDRV_PCM_TRIGGER_SUSPEND:
+12 -25
sound/soc/intel/boards/bytcht_es8316.c
··· 456 456 457 457 static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev) 458 458 { 459 + struct device *dev = &pdev->dev; 459 460 static const char * const mic_name[] = { "in1", "in2" }; 461 + struct snd_soc_acpi_mach *mach = dev_get_platdata(dev); 460 462 struct property_entry props[MAX_NO_PROPS] = {}; 461 463 struct byt_cht_es8316_private *priv; 462 464 const struct dmi_system_id *dmi_id; 463 - struct device *dev = &pdev->dev; 464 - struct snd_soc_acpi_mach *mach; 465 465 struct fwnode_handle *fwnode; 466 466 const char *platform_name; 467 467 struct acpi_device *adev; ··· 476 476 if (!priv) 477 477 return -ENOMEM; 478 478 479 - mach = dev->platform_data; 480 479 /* fix index of codec dai */ 481 480 for (i = 0; i < ARRAY_SIZE(byt_cht_es8316_dais); i++) { 482 481 if (!strcmp(byt_cht_es8316_dais[i].codecs->name, ··· 493 494 put_device(&adev->dev); 494 495 byt_cht_es8316_dais[dai_index].codecs->name = codec_name; 495 496 } else { 496 - dev_err(&pdev->dev, "Error cannot find '%s' dev\n", mach->id); 497 + dev_err(dev, "Error cannot find '%s' dev\n", mach->id); 497 498 return -ENXIO; 498 499 } 499 500 ··· 532 533 533 534 /* get the clock */ 534 535 priv->mclk = devm_clk_get(dev, "pmc_plt_clk_3"); 535 - if (IS_ERR(priv->mclk)) { 536 - ret = PTR_ERR(priv->mclk); 537 - dev_err(dev, "clk_get pmc_plt_clk_3 failed: %d\n", ret); 538 - return ret; 539 - } 536 + if (IS_ERR(priv->mclk)) 537 + return dev_err_probe(dev, PTR_ERR(priv->mclk), "clk_get pmc_plt_clk_3 failed\n"); 540 538 541 539 /* get speaker enable GPIO */ 542 540 codec_dev = acpi_get_first_physical_node(adev); ··· 563 567 564 568 devm_acpi_dev_add_driver_gpios(codec_dev, byt_cht_es8316_gpios); 565 569 priv->speaker_en_gpio = 566 - gpiod_get_index(codec_dev, "speaker-enable", 0, 567 - /* see comment in byt_cht_es8316_resume */ 568 - GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE); 569 - 570 + gpiod_get_optional(codec_dev, "speaker-enable", 571 + /* see comment in byt_cht_es8316_resume() */ 572 + GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE); 570 573 if (IS_ERR(priv->speaker_en_gpio)) { 571 - ret = PTR_ERR(priv->speaker_en_gpio); 572 - switch (ret) { 573 - case -ENOENT: 574 - priv->speaker_en_gpio = NULL; 575 - break; 576 - default: 577 - dev_err(dev, "get speaker GPIO failed: %d\n", ret); 578 - fallthrough; 579 - case -EPROBE_DEFER: 580 - goto err_put_codec; 581 - } 574 + ret = dev_err_probe(dev, PTR_ERR(priv->speaker_en_gpio), 575 + "get speaker GPIO failed\n"); 576 + goto err_put_codec; 582 577 } 583 578 584 579 snprintf(components_string, sizeof(components_string), ··· 584 597 byt_cht_es8316_card.long_name = long_name; 585 598 #endif 586 599 587 - sof_parent = snd_soc_acpi_sof_parent(&pdev->dev); 600 + sof_parent = snd_soc_acpi_sof_parent(dev); 588 601 589 602 /* set card and driver name */ 590 603 if (sof_parent) {
+1
sound/soc/soc-core.c
··· 2599 2599 INIT_LIST_HEAD(&component->dai_list); 2600 2600 INIT_LIST_HEAD(&component->dobj_list); 2601 2601 INIT_LIST_HEAD(&component->card_list); 2602 + INIT_LIST_HEAD(&component->list); 2602 2603 mutex_init(&component->io_mutex); 2603 2604 2604 2605 component->name = fmt_single_name(dev, &component->id);
+8 -5
sound/soc/soc-dapm.c
··· 2561 2561 const char *pin, int status) 2562 2562 { 2563 2563 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true); 2564 + int ret = 0; 2564 2565 2565 2566 dapm_assert_locked(dapm); 2566 2567 ··· 2574 2573 dapm_mark_dirty(w, "pin configuration"); 2575 2574 dapm_widget_invalidate_input_paths(w); 2576 2575 dapm_widget_invalidate_output_paths(w); 2576 + ret = 1; 2577 2577 } 2578 2578 2579 2579 w->connected = status; 2580 2580 if (status == 0) 2581 2581 w->force = 0; 2582 2582 2583 - return 0; 2583 + return ret; 2584 2584 } 2585 2585 2586 2586 /** ··· 3585 3583 { 3586 3584 struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); 3587 3585 const char *pin = (const char *)kcontrol->private_value; 3586 + int ret; 3588 3587 3589 3588 if (ucontrol->value.integer.value[0]) 3590 - snd_soc_dapm_enable_pin(&card->dapm, pin); 3589 + ret = snd_soc_dapm_enable_pin(&card->dapm, pin); 3591 3590 else 3592 - snd_soc_dapm_disable_pin(&card->dapm, pin); 3591 + ret = snd_soc_dapm_disable_pin(&card->dapm, pin); 3593 3592 3594 3593 snd_soc_dapm_sync(&card->dapm); 3595 - return 0; 3594 + return ret; 3596 3595 } 3597 3596 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch); 3598 3597 ··· 4026 4023 4027 4024 rtd->params_select = ucontrol->value.enumerated.item[0]; 4028 4025 4029 - return 0; 4026 + return 1; 4030 4027 } 4031 4028 4032 4029 static void
+7
sound/usb/mixer.c
··· 1198 1198 cval->res = 1; 1199 1199 } 1200 1200 break; 1201 + case USB_ID(0x1224, 0x2a25): /* Jieli Technology USB PHY 2.0 */ 1202 + if (!strcmp(kctl->id.name, "Mic Capture Volume")) { 1203 + usb_audio_info(chip, 1204 + "set resolution quirk: cval->res = 16\n"); 1205 + cval->res = 16; 1206 + } 1207 + break; 1201 1208 } 1202 1209 } 1203 1210
+32
sound/usb/quirks-table.h
··· 4012 4012 } 4013 4013 } 4014 4014 }, 4015 + { 4016 + /* 4017 + * Sennheiser GSP670 4018 + * Change order of interfaces loaded 4019 + */ 4020 + USB_DEVICE(0x1395, 0x0300), 4021 + .bInterfaceClass = USB_CLASS_PER_INTERFACE, 4022 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4023 + .ifnum = QUIRK_ANY_INTERFACE, 4024 + .type = QUIRK_COMPOSITE, 4025 + .data = &(const struct snd_usb_audio_quirk[]) { 4026 + // Communication 4027 + { 4028 + .ifnum = 3, 4029 + .type = QUIRK_AUDIO_STANDARD_INTERFACE 4030 + }, 4031 + // Recording 4032 + { 4033 + .ifnum = 4, 4034 + .type = QUIRK_AUDIO_STANDARD_INTERFACE 4035 + }, 4036 + // Main 4037 + { 4038 + .ifnum = 1, 4039 + .type = QUIRK_AUDIO_STANDARD_INTERFACE 4040 + }, 4041 + { 4042 + .ifnum = -1 4043 + } 4044 + } 4045 + } 4046 + }, 4015 4047 4016 4048 #undef USB_DEVICE_VENDOR_SPEC 4017 4049 #undef USB_AUDIO_DEVICE
+9
sound/usb/quirks.c
··· 1719 1719 */ 1720 1720 fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; 1721 1721 break; 1722 + case USB_ID(0x1224, 0x2a25): /* Jieli Technology USB PHY 2.0 */ 1723 + /* mic works only when ep packet size is set to wMaxPacketSize */ 1724 + fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX; 1725 + break; 1726 + 1722 1727 } 1723 1728 } 1724 1729 ··· 1889 1884 QUIRK_FLAG_GET_SAMPLE_RATE), 1890 1885 DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */ 1891 1886 QUIRK_FLAG_GET_SAMPLE_RATE), 1887 + DEVICE_FLG(0x30be, 0x0101, /* Schiit Hel */ 1888 + QUIRK_FLAG_IGNORE_CTL_ERROR), 1892 1889 DEVICE_FLG(0x413c, 0xa506, /* Dell AE515 sound bar */ 1893 1890 QUIRK_FLAG_GET_SAMPLE_RATE), 1894 1891 DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */ 1895 1892 QUIRK_FLAG_ALIGN_TRANSFER), 1893 + DEVICE_FLG(0x1224, 0x2a25, /* Jieli Technology USB PHY 2.0 */ 1894 + QUIRK_FLAG_GET_SAMPLE_RATE), 1896 1895 1897 1896 /* Vendor matches */ 1898 1897 VENDOR_FLG(0x045e, /* MS Lifecam */