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-fix-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"A collection of fixes gathered since the previous pull.

We see a bit large LOCs at a HD-audio quirk, but that's only bulk COEF
data, hence it's safe to take. In addition to that, there were two
minor fixes for MIDI 2.0 handling for ALSA core, and the rest are all
rather random small and device-specific fixes"

* tag 'sound-fix-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ASoC: fsl-asoc-card: Dynamically allocate memory for snd_soc_dai_link_components
ASoC: amd: yc: Support mic on Lenovo Thinkpad E16 Gen 2
ALSA: hda/realtek: Implement sound init sequence for Samsung Galaxy Book3 Pro 360
ALSA: hda/realtek: cs35l41: Fixup remaining asus strix models
ASoC: SOF: ipc4-topology: Preserve the DMA Link ID for ChainDMA on unprepare
ASoC: SOF: ipc4-topology: Only handle dai_config with HW_PARAMS for ChainDMA
ALSA: ump: Force 1 Group for MIDI1 FBs
ALSA: ump: Don't update FB name for static blocks
ALSA: usb-audio: Add a quirk for Sonix HD USB Camera
ASoC: TAS2781: Fix tasdev_load_calibrated_data()
ASoC: tegra: select CONFIG_SND_SIMPLE_CARD_UTILS
ASoC: Intel: use soc_intel_is_byt_cr() only when IOSF_MBI is reachable
ALSA: usb-audio: Move HD Webcam quirk to the right place
ALSA: hda: tas2781: mark const variables as __maybe_unused
ALSA: usb-audio: Fix microphone sound on HD webcam.
ASoC: sof: amd: fix for firmware reload failure in Vangogh platform
ASoC: Intel: Fix RT5650 SSP lookup
ASOC: SOF: Intel: hda-loader: only wait for HDaudio IOC for IPC4 devices
ASoC: SOF: imx8m: Fix DSP control regmap retrieval

+433 -45
+3 -3
include/sound/tas2781-tlv.h
··· 16 16 #define __TAS2781_TLV_H__ 17 17 18 18 static const __maybe_unused DECLARE_TLV_DB_SCALE(dvc_tlv, -10000, 100, 0); 19 - static const DECLARE_TLV_DB_SCALE(amp_vol_tlv, 1100, 50, 0); 20 - static const DECLARE_TLV_DB_SCALE(tas2563_dvc_tlv, -12150, 50, 1); 19 + static const __maybe_unused DECLARE_TLV_DB_SCALE(amp_vol_tlv, 1100, 50, 0); 20 + static const __maybe_unused DECLARE_TLV_DB_SCALE(tas2563_dvc_tlv, -12150, 50, 1); 21 21 22 22 /* pow(10, db/20) * pow(2,30) */ 23 - static const unsigned char tas2563_dvc_table[][4] = { 23 + static const __maybe_unused unsigned char tas2563_dvc_table[][4] = { 24 24 { 0X00, 0X00, 0X00, 0X00 }, /* -121.5db */ 25 25 { 0X00, 0X00, 0X03, 0XBC }, /* -121.0db */ 26 26 { 0X00, 0X00, 0X03, 0XF5 }, /* -120.5db */
+13
sound/core/ump.c
··· 733 733 info->block_id, info->direction, info->active, 734 734 info->first_group, info->num_groups, info->midi_ci_version, 735 735 info->sysex8_streams, info->flags); 736 + 737 + if ((info->flags & SNDRV_UMP_BLOCK_IS_MIDI1) && info->num_groups != 1) { 738 + info->num_groups = 1; 739 + ump_dbg(ump, "FB %d: corrected groups to 1 for MIDI1\n", 740 + info->block_id); 741 + } 736 742 } 737 743 738 744 /* check whether the FB info gets updated by the current message */ ··· 811 805 fb = snd_ump_get_block(ump, blk); 812 806 if (!fb) 813 807 return -ENODEV; 808 + 809 + if (ump->parsed && 810 + (ump->info.flags & SNDRV_UMP_EP_INFO_STATIC_BLOCKS)) { 811 + ump_dbg(ump, "Skipping static FB name update (blk#%d)\n", 812 + fb->info.block_id); 813 + return 0; 814 + } 814 815 815 816 ret = ump_append_string(ump, fb->info.name, sizeof(fb->info.name), 816 817 buf->raw, 3);
+12 -3
sound/pci/hda/patch_realtek.c
··· 4800 4800 } 4801 4801 } 4802 4802 4803 + #include "samsung_helper.c" 4804 + 4803 4805 #if IS_REACHABLE(CONFIG_INPUT) 4804 4806 static void gpio2_mic_hotkey_event(struct hda_codec *codec, 4805 4807 struct hda_jack_callback *event) ··· 7431 7429 ALC236_FIXUP_HP_MUTE_LED, 7432 7430 ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF, 7433 7431 ALC298_FIXUP_SAMSUNG_AMP, 7432 + ALC298_FIXUP_SAMSUNG_AMP2, 7434 7433 ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, 7435 7434 ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, 7436 7435 ALC295_FIXUP_ASUS_MIC_NO_PRESENCE, ··· 9058 9055 .chained = true, 9059 9056 .chain_id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET 9060 9057 }, 9058 + [ALC298_FIXUP_SAMSUNG_AMP2] = { 9059 + .type = HDA_FIXUP_FUNC, 9060 + .v.func = alc298_fixup_samsung_amp2 9061 + }, 9061 9062 [ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = { 9062 9063 .type = HDA_FIXUP_VERBS, 9063 9064 .v.verbs = (const struct hda_verb[]) { ··· 10366 10359 SND_PCI_QUIRK(0x1043, 0x1f62, "ASUS UX7602ZM", ALC245_FIXUP_CS35L41_SPI_2), 10367 10360 SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401), 10368 10361 SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2), 10369 - SND_PCI_QUIRK(0x1043, 0x3a20, "ASUS G614JZR", ALC245_FIXUP_CS35L41_SPI_2), 10370 - SND_PCI_QUIRK(0x1043, 0x3a30, "ASUS G814JVR/JIR", ALC245_FIXUP_CS35L41_SPI_2), 10362 + SND_PCI_QUIRK(0x1043, 0x3a20, "ASUS G614JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS), 10363 + SND_PCI_QUIRK(0x1043, 0x3a30, "ASUS G814JVR/JIR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS), 10371 10364 SND_PCI_QUIRK(0x1043, 0x3a40, "ASUS G814JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS), 10372 - SND_PCI_QUIRK(0x1043, 0x3a50, "ASUS G834JYR/JZR", ALC245_FIXUP_CS35L41_SPI_2), 10365 + SND_PCI_QUIRK(0x1043, 0x3a50, "ASUS G834JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS), 10373 10366 SND_PCI_QUIRK(0x1043, 0x3a60, "ASUS G634JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS), 10374 10367 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC), 10375 10368 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC), ··· 10413 10406 SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET), 10414 10407 SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP), 10415 10408 SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP), 10409 + SND_PCI_QUIRK(0x144d, 0xc1ca, "Samsung Galaxy Book3 Pro 360 (NP960QFG-KB1US)", ALC298_FIXUP_SAMSUNG_AMP2), 10416 10410 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC), 10417 10411 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC), 10418 10412 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC), ··· 10851 10843 {.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"}, 10852 10844 {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"}, 10853 10845 {.id = ALC298_FIXUP_SAMSUNG_AMP, .name = "alc298-samsung-amp"}, 10846 + {.id = ALC298_FIXUP_SAMSUNG_AMP2, .name = "alc298-samsung-amp2"}, 10854 10847 {.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"}, 10855 10848 {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"}, 10856 10849 {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
+310
sound/pci/hda/samsung_helper.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* Helper functions for Samsung Galaxy Book3 audio initialization */ 3 + 4 + struct alc298_samsung_coeff_fixup_desc { 5 + unsigned char coeff_idx; 6 + unsigned short coeff_value; 7 + }; 8 + 9 + struct alc298_samsung_coeff_seq_desc { 10 + unsigned short coeff_0x23; 11 + unsigned short coeff_0x24; 12 + unsigned short coeff_0x25; 13 + unsigned short coeff_0x26; 14 + }; 15 + 16 + 17 + static inline void alc298_samsung_write_coef_pack2(struct hda_codec *codec, 18 + const struct alc298_samsung_coeff_seq_desc *seq) 19 + { 20 + int i; 21 + 22 + for (i = 0; i < 100; i++) { 23 + if ((alc_read_coef_idx(codec, 0x26) & 0x0010) == 0) 24 + break; 25 + 26 + usleep_range(500, 1000); 27 + } 28 + 29 + alc_write_coef_idx(codec, 0x23, seq->coeff_0x23); 30 + alc_write_coef_idx(codec, 0x24, seq->coeff_0x24); 31 + alc_write_coef_idx(codec, 0x25, seq->coeff_0x25); 32 + alc_write_coef_idx(codec, 0x26, seq->coeff_0x26); 33 + } 34 + 35 + static inline void alc298_samsung_write_coef_pack_seq( 36 + struct hda_codec *codec, 37 + unsigned char target, 38 + const struct alc298_samsung_coeff_seq_desc seq[], 39 + int count) 40 + { 41 + alc_write_coef_idx(codec, 0x22, target); 42 + for (int i = 0; i < count; i++) 43 + alc298_samsung_write_coef_pack2(codec, &seq[i]); 44 + } 45 + 46 + static void alc298_fixup_samsung_amp2(struct hda_codec *codec, 47 + const struct hda_fixup *fix, int action) 48 + { 49 + int i; 50 + static const struct alc298_samsung_coeff_fixup_desc fixups1[] = { 51 + { 0x99, 0x8000 }, { 0x82, 0x4408 }, { 0x32, 0x3f00 }, { 0x0e, 0x6f80 }, 52 + { 0x10, 0x0e21 }, { 0x55, 0x8000 }, { 0x08, 0x2fcf }, { 0x08, 0x2fcf }, 53 + { 0x2d, 0xc020 }, { 0x19, 0x0017 }, { 0x50, 0x1000 }, { 0x0e, 0x6f80 }, 54 + { 0x08, 0x2fcf }, { 0x80, 0x0011 }, { 0x2b, 0x0c10 }, { 0x2d, 0xc020 }, 55 + { 0x03, 0x0042 }, { 0x0f, 0x0062 }, { 0x08, 0x2fcf }, 56 + }; 57 + 58 + static const struct alc298_samsung_coeff_seq_desc amp_0x38[] = { 59 + { 0x2000, 0x0000, 0x0001, 0xb011 }, { 0x23ff, 0x0000, 0x0000, 0xb011 }, 60 + { 0x203a, 0x0000, 0x0080, 0xb011 }, { 0x23e1, 0x0000, 0x0000, 0xb011 }, 61 + { 0x2012, 0x0000, 0x006f, 0xb011 }, { 0x2014, 0x0000, 0x0000, 0xb011 }, 62 + { 0x201b, 0x0000, 0x0001, 0xb011 }, { 0x201d, 0x0000, 0x0001, 0xb011 }, 63 + { 0x201f, 0x0000, 0x00fe, 0xb011 }, { 0x2021, 0x0000, 0x0000, 0xb011 }, 64 + { 0x2022, 0x0000, 0x0010, 0xb011 }, { 0x203d, 0x0000, 0x0005, 0xb011 }, 65 + { 0x203f, 0x0000, 0x0003, 0xb011 }, { 0x2050, 0x0000, 0x002c, 0xb011 }, 66 + { 0x2076, 0x0000, 0x000e, 0xb011 }, { 0x207c, 0x0000, 0x004a, 0xb011 }, 67 + { 0x2081, 0x0000, 0x0003, 0xb011 }, { 0x2399, 0x0000, 0x0003, 0xb011 }, 68 + { 0x23a4, 0x0000, 0x00b5, 0xb011 }, { 0x23a5, 0x0000, 0x0001, 0xb011 }, 69 + { 0x23ba, 0x0000, 0x0094, 0xb011 }, { 0x2100, 0x00d0, 0x950e, 0xb017 }, 70 + { 0x2104, 0x0061, 0xd4e2, 0xb017 }, { 0x2108, 0x00d0, 0x950e, 0xb017 }, 71 + { 0x210c, 0x0075, 0xf4e2, 0xb017 }, { 0x2110, 0x00b4, 0x4b0d, 0xb017 }, 72 + { 0x2114, 0x000a, 0x1000, 0xb017 }, { 0x2118, 0x0015, 0x2000, 0xb017 }, 73 + { 0x211c, 0x000a, 0x1000, 0xb017 }, { 0x2120, 0x0075, 0xf4e2, 0xb017 }, 74 + { 0x2124, 0x00b4, 0x4b0d, 0xb017 }, { 0x2128, 0x0000, 0x0010, 0xb017 }, 75 + { 0x212c, 0x0000, 0x0000, 0xb017 }, { 0x2130, 0x0000, 0x0000, 0xb017 }, 76 + { 0x2134, 0x0000, 0x0000, 0xb017 }, { 0x2138, 0x0000, 0x0000, 0xb017 }, 77 + { 0x213c, 0x0000, 0x0010, 0xb017 }, { 0x2140, 0x0000, 0x0000, 0xb017 }, 78 + { 0x2144, 0x0000, 0x0000, 0xb017 }, { 0x2148, 0x0000, 0x0000, 0xb017 }, 79 + { 0x214c, 0x0000, 0x0000, 0xb017 }, { 0x2150, 0x0000, 0x0010, 0xb017 }, 80 + { 0x2154, 0x0000, 0x0000, 0xb017 }, { 0x2158, 0x0000, 0x0000, 0xb017 }, 81 + { 0x215c, 0x0000, 0x0000, 0xb017 }, { 0x2160, 0x0000, 0x0000, 0xb017 }, 82 + { 0x2164, 0x0000, 0x0010, 0xb017 }, { 0x2168, 0x0000, 0x0000, 0xb017 }, 83 + { 0x216c, 0x0000, 0x0000, 0xb017 }, { 0x2170, 0x0000, 0x0000, 0xb017 }, 84 + { 0x2174, 0x0000, 0x0000, 0xb017 }, { 0x2178, 0x0000, 0x0010, 0xb017 }, 85 + { 0x217c, 0x0000, 0x0000, 0xb017 }, { 0x2180, 0x0000, 0x0000, 0xb017 }, 86 + { 0x2184, 0x0000, 0x0000, 0xb017 }, { 0x2188, 0x0000, 0x0000, 0xb017 }, 87 + { 0x218c, 0x0064, 0x5800, 0xb017 }, { 0x2190, 0x00c8, 0xb000, 0xb017 }, 88 + { 0x2194, 0x0064, 0x5800, 0xb017 }, { 0x2198, 0x003d, 0x5be7, 0xb017 }, 89 + { 0x219c, 0x0054, 0x060a, 0xb017 }, { 0x21a0, 0x00c8, 0xa310, 0xb017 }, 90 + { 0x21a4, 0x0029, 0x4de5, 0xb017 }, { 0x21a8, 0x0032, 0x420c, 0xb017 }, 91 + { 0x21ac, 0x0029, 0x4de5, 0xb017 }, { 0x21b0, 0x00fa, 0xe50c, 0xb017 }, 92 + { 0x21b4, 0x0000, 0x0010, 0xb017 }, { 0x21b8, 0x0000, 0x0000, 0xb017 }, 93 + { 0x21bc, 0x0000, 0x0000, 0xb017 }, { 0x21c0, 0x0000, 0x0000, 0xb017 }, 94 + { 0x21c4, 0x0000, 0x0000, 0xb017 }, { 0x21c8, 0x0056, 0xc50f, 0xb017 }, 95 + { 0x21cc, 0x007b, 0xd7e1, 0xb017 }, { 0x21d0, 0x0077, 0xa70e, 0xb017 }, 96 + { 0x21d4, 0x00e0, 0xbde1, 0xb017 }, { 0x21d8, 0x0032, 0x530e, 0xb017 }, 97 + { 0x2204, 0x00fb, 0x7e0f, 0xb017 }, { 0x2208, 0x000b, 0x02e1, 0xb017 }, 98 + { 0x220c, 0x00fb, 0x7e0f, 0xb017 }, { 0x2210, 0x00d5, 0x17e1, 0xb017 }, 99 + { 0x2214, 0x00c0, 0x130f, 0xb017 }, { 0x2218, 0x00e5, 0x0a00, 0xb017 }, 100 + { 0x221c, 0x00cb, 0x1500, 0xb017 }, { 0x2220, 0x00e5, 0x0a00, 0xb017 }, 101 + { 0x2224, 0x00d5, 0x17e1, 0xb017 }, { 0x2228, 0x00c0, 0x130f, 0xb017 }, 102 + { 0x222c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2230, 0x0017, 0x48e2, 0xb017 }, 103 + { 0x2234, 0x00f5, 0xdb0e, 0xb017 }, { 0x2238, 0x00ef, 0x5ce2, 0xb017 }, 104 + { 0x223c, 0x00c1, 0xcc0d, 0xb017 }, { 0x2240, 0x00f5, 0xdb0e, 0xb017 }, 105 + { 0x2244, 0x0017, 0x48e2, 0xb017 }, { 0x2248, 0x00f5, 0xdb0e, 0xb017 }, 106 + { 0x224c, 0x00ef, 0x5ce2, 0xb017 }, { 0x2250, 0x00c1, 0xcc0d, 0xb017 }, 107 + { 0x2254, 0x00f5, 0xdb0e, 0xb017 }, { 0x2258, 0x0017, 0x48e2, 0xb017 }, 108 + { 0x225c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2260, 0x00ef, 0x5ce2, 0xb017 }, 109 + { 0x2264, 0x00c1, 0xcc0d, 0xb017 }, { 0x2268, 0x00f5, 0xdb0e, 0xb017 }, 110 + { 0x226c, 0x0017, 0x48e2, 0xb017 }, { 0x2270, 0x00f5, 0xdb0e, 0xb017 }, 111 + { 0x2274, 0x00ef, 0x5ce2, 0xb017 }, { 0x2278, 0x00c1, 0xcc0d, 0xb017 }, 112 + { 0x227c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2280, 0x0017, 0x48e2, 0xb017 }, 113 + { 0x2284, 0x00f5, 0xdb0e, 0xb017 }, { 0x2288, 0x00ef, 0x5ce2, 0xb017 }, 114 + { 0x228c, 0x00c1, 0xcc0d, 0xb017 }, { 0x22cc, 0x00e8, 0x8d00, 0xb017 }, 115 + { 0x22d0, 0x0000, 0x0000, 0xb017 }, { 0x22d4, 0x0018, 0x72ff, 0xb017 }, 116 + { 0x22d8, 0x00ce, 0x25e1, 0xb017 }, { 0x22dc, 0x002f, 0xe40e, 0xb017 }, 117 + { 0x238e, 0x0000, 0x0099, 0xb011 }, { 0x238f, 0x0000, 0x0011, 0xb011 }, 118 + { 0x2390, 0x0000, 0x0056, 0xb011 }, { 0x2391, 0x0000, 0x0004, 0xb011 }, 119 + { 0x2392, 0x0000, 0x00bb, 0xb011 }, { 0x2393, 0x0000, 0x006d, 0xb011 }, 120 + { 0x2394, 0x0000, 0x0010, 0xb011 }, { 0x2395, 0x0000, 0x0064, 0xb011 }, 121 + { 0x2396, 0x0000, 0x00b6, 0xb011 }, { 0x2397, 0x0000, 0x0028, 0xb011 }, 122 + { 0x2398, 0x0000, 0x000b, 0xb011 }, { 0x239a, 0x0000, 0x0099, 0xb011 }, 123 + { 0x239b, 0x0000, 0x000d, 0xb011 }, { 0x23a6, 0x0000, 0x0064, 0xb011 }, 124 + { 0x23a7, 0x0000, 0x0078, 0xb011 }, { 0x23b9, 0x0000, 0x0000, 0xb011 }, 125 + { 0x23e0, 0x0000, 0x0021, 0xb011 }, { 0x23e1, 0x0000, 0x0001, 0xb011 }, 126 + }; 127 + 128 + static const struct alc298_samsung_coeff_seq_desc amp_0x39[] = { 129 + { 0x2000, 0x0000, 0x0001, 0xb011 }, { 0x23ff, 0x0000, 0x0000, 0xb011 }, 130 + { 0x203a, 0x0000, 0x0080, 0xb011 }, { 0x23e1, 0x0000, 0x0000, 0xb011 }, 131 + { 0x2012, 0x0000, 0x006f, 0xb011 }, { 0x2014, 0x0000, 0x0000, 0xb011 }, 132 + { 0x201b, 0x0000, 0x0002, 0xb011 }, { 0x201d, 0x0000, 0x0002, 0xb011 }, 133 + { 0x201f, 0x0000, 0x00fd, 0xb011 }, { 0x2021, 0x0000, 0x0001, 0xb011 }, 134 + { 0x2022, 0x0000, 0x0010, 0xb011 }, { 0x203d, 0x0000, 0x0005, 0xb011 }, 135 + { 0x203f, 0x0000, 0x0003, 0xb011 }, { 0x2050, 0x0000, 0x002c, 0xb011 }, 136 + { 0x2076, 0x0000, 0x000e, 0xb011 }, { 0x207c, 0x0000, 0x004a, 0xb011 }, 137 + { 0x2081, 0x0000, 0x0003, 0xb011 }, { 0x2399, 0x0000, 0x0003, 0xb011 }, 138 + { 0x23a4, 0x0000, 0x00b5, 0xb011 }, { 0x23a5, 0x0000, 0x0001, 0xb011 }, 139 + { 0x23ba, 0x0000, 0x0094, 0xb011 }, { 0x2100, 0x00d0, 0x950e, 0xb017 }, 140 + { 0x2104, 0x0061, 0xd4e2, 0xb017 }, { 0x2108, 0x00d0, 0x950e, 0xb017 }, 141 + { 0x210c, 0x0075, 0xf4e2, 0xb017 }, { 0x2110, 0x00b4, 0x4b0d, 0xb017 }, 142 + { 0x2114, 0x000a, 0x1000, 0xb017 }, { 0x2118, 0x0015, 0x2000, 0xb017 }, 143 + { 0x211c, 0x000a, 0x1000, 0xb017 }, { 0x2120, 0x0075, 0xf4e2, 0xb017 }, 144 + { 0x2124, 0x00b4, 0x4b0d, 0xb017 }, { 0x2128, 0x0000, 0x0010, 0xb017 }, 145 + { 0x212c, 0x0000, 0x0000, 0xb017 }, { 0x2130, 0x0000, 0x0000, 0xb017 }, 146 + { 0x2134, 0x0000, 0x0000, 0xb017 }, { 0x2138, 0x0000, 0x0000, 0xb017 }, 147 + { 0x213c, 0x0000, 0x0010, 0xb017 }, { 0x2140, 0x0000, 0x0000, 0xb017 }, 148 + { 0x2144, 0x0000, 0x0000, 0xb017 }, { 0x2148, 0x0000, 0x0000, 0xb017 }, 149 + { 0x214c, 0x0000, 0x0000, 0xb017 }, { 0x2150, 0x0000, 0x0010, 0xb017 }, 150 + { 0x2154, 0x0000, 0x0000, 0xb017 }, { 0x2158, 0x0000, 0x0000, 0xb017 }, 151 + { 0x215c, 0x0000, 0x0000, 0xb017 }, { 0x2160, 0x0000, 0x0000, 0xb017 }, 152 + { 0x2164, 0x0000, 0x0010, 0xb017 }, { 0x2168, 0x0000, 0x0000, 0xb017 }, 153 + { 0x216c, 0x0000, 0x0000, 0xb017 }, { 0x2170, 0x0000, 0x0000, 0xb017 }, 154 + { 0x2174, 0x0000, 0x0000, 0xb017 }, { 0x2178, 0x0000, 0x0010, 0xb017 }, 155 + { 0x217c, 0x0000, 0x0000, 0xb017 }, { 0x2180, 0x0000, 0x0000, 0xb017 }, 156 + { 0x2184, 0x0000, 0x0000, 0xb017 }, { 0x2188, 0x0000, 0x0000, 0xb017 }, 157 + { 0x218c, 0x0064, 0x5800, 0xb017 }, { 0x2190, 0x00c8, 0xb000, 0xb017 }, 158 + { 0x2194, 0x0064, 0x5800, 0xb017 }, { 0x2198, 0x003d, 0x5be7, 0xb017 }, 159 + { 0x219c, 0x0054, 0x060a, 0xb017 }, { 0x21a0, 0x00c8, 0xa310, 0xb017 }, 160 + { 0x21a4, 0x0029, 0x4de5, 0xb017 }, { 0x21a8, 0x0032, 0x420c, 0xb017 }, 161 + { 0x21ac, 0x0029, 0x4de5, 0xb017 }, { 0x21b0, 0x00fa, 0xe50c, 0xb017 }, 162 + { 0x21b4, 0x0000, 0x0010, 0xb017 }, { 0x21b8, 0x0000, 0x0000, 0xb017 }, 163 + { 0x21bc, 0x0000, 0x0000, 0xb017 }, { 0x21c0, 0x0000, 0x0000, 0xb017 }, 164 + { 0x21c4, 0x0000, 0x0000, 0xb017 }, { 0x21c8, 0x0056, 0xc50f, 0xb017 }, 165 + { 0x21cc, 0x007b, 0xd7e1, 0xb017 }, { 0x21d0, 0x0077, 0xa70e, 0xb017 }, 166 + { 0x21d4, 0x00e0, 0xbde1, 0xb017 }, { 0x21d8, 0x0032, 0x530e, 0xb017 }, 167 + { 0x2204, 0x00fb, 0x7e0f, 0xb017 }, { 0x2208, 0x000b, 0x02e1, 0xb017 }, 168 + { 0x220c, 0x00fb, 0x7e0f, 0xb017 }, { 0x2210, 0x00d5, 0x17e1, 0xb017 }, 169 + { 0x2214, 0x00c0, 0x130f, 0xb017 }, { 0x2218, 0x00e5, 0x0a00, 0xb017 }, 170 + { 0x221c, 0x00cb, 0x1500, 0xb017 }, { 0x2220, 0x00e5, 0x0a00, 0xb017 }, 171 + { 0x2224, 0x00d5, 0x17e1, 0xb017 }, { 0x2228, 0x00c0, 0x130f, 0xb017 }, 172 + { 0x222c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2230, 0x0017, 0x48e2, 0xb017 }, 173 + { 0x2234, 0x00f5, 0xdb0e, 0xb017 }, { 0x2238, 0x00ef, 0x5ce2, 0xb017 }, 174 + { 0x223c, 0x00c1, 0xcc0d, 0xb017 }, { 0x2240, 0x00f5, 0xdb0e, 0xb017 }, 175 + { 0x2244, 0x0017, 0x48e2, 0xb017 }, { 0x2248, 0x00f5, 0xdb0e, 0xb017 }, 176 + { 0x224c, 0x00ef, 0x5ce2, 0xb017 }, { 0x2250, 0x00c1, 0xcc0d, 0xb017 }, 177 + { 0x2254, 0x00f5, 0xdb0e, 0xb017 }, { 0x2258, 0x0017, 0x48e2, 0xb017 }, 178 + { 0x225c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2260, 0x00ef, 0x5ce2, 0xb017 }, 179 + { 0x2264, 0x00c1, 0xcc0d, 0xb017 }, { 0x2268, 0x00f5, 0xdb0e, 0xb017 }, 180 + { 0x226c, 0x0017, 0x48e2, 0xb017 }, { 0x2270, 0x00f5, 0xdb0e, 0xb017 }, 181 + { 0x2274, 0x00ef, 0x5ce2, 0xb017 }, { 0x2278, 0x00c1, 0xcc0d, 0xb017 }, 182 + { 0x227c, 0x00f5, 0xdb0e, 0xb017 }, { 0x2280, 0x0017, 0x48e2, 0xb017 }, 183 + { 0x2284, 0x00f5, 0xdb0e, 0xb017 }, { 0x2288, 0x00ef, 0x5ce2, 0xb017 }, 184 + { 0x228c, 0x00c1, 0xcc0d, 0xb017 }, { 0x22cc, 0x00e8, 0x8d00, 0xb017 }, 185 + { 0x22d0, 0x0000, 0x0000, 0xb017 }, { 0x22d4, 0x0018, 0x72ff, 0xb017 }, 186 + { 0x22d8, 0x00ce, 0x25e1, 0xb017 }, { 0x22dc, 0x002f, 0xe40e, 0xb017 }, 187 + { 0x238e, 0x0000, 0x0099, 0xb011 }, { 0x238f, 0x0000, 0x0011, 0xb011 }, 188 + { 0x2390, 0x0000, 0x0056, 0xb011 }, { 0x2391, 0x0000, 0x0004, 0xb011 }, 189 + { 0x2392, 0x0000, 0x00bb, 0xb011 }, { 0x2393, 0x0000, 0x006d, 0xb011 }, 190 + { 0x2394, 0x0000, 0x0010, 0xb011 }, { 0x2395, 0x0000, 0x0064, 0xb011 }, 191 + { 0x2396, 0x0000, 0x00b6, 0xb011 }, { 0x2397, 0x0000, 0x0028, 0xb011 }, 192 + { 0x2398, 0x0000, 0x000b, 0xb011 }, { 0x239a, 0x0000, 0x0099, 0xb011 }, 193 + { 0x239b, 0x0000, 0x000d, 0xb011 }, { 0x23a6, 0x0000, 0x0064, 0xb011 }, 194 + { 0x23a7, 0x0000, 0x0078, 0xb011 }, { 0x23b9, 0x0000, 0x0000, 0xb011 }, 195 + { 0x23e0, 0x0000, 0x0021, 0xb011 }, { 0x23e1, 0x0000, 0x0001, 0xb011 }, 196 + }; 197 + 198 + static const struct alc298_samsung_coeff_seq_desc amp_0x3c[] = { 199 + { 0x2000, 0x0000, 0x0001, 0xb011 }, { 0x23ff, 0x0000, 0x0000, 0xb011 }, 200 + { 0x203a, 0x0000, 0x0080, 0xb011 }, { 0x23e1, 0x0000, 0x0000, 0xb011 }, 201 + { 0x2012, 0x0000, 0x006f, 0xb011 }, { 0x2014, 0x0000, 0x0000, 0xb011 }, 202 + { 0x201b, 0x0000, 0x0001, 0xb011 }, { 0x201d, 0x0000, 0x0001, 0xb011 }, 203 + { 0x201f, 0x0000, 0x00fe, 0xb011 }, { 0x2021, 0x0000, 0x0000, 0xb011 }, 204 + { 0x2022, 0x0000, 0x0010, 0xb011 }, { 0x203d, 0x0000, 0x0005, 0xb011 }, 205 + { 0x203f, 0x0000, 0x0003, 0xb011 }, { 0x2050, 0x0000, 0x002c, 0xb011 }, 206 + { 0x2076, 0x0000, 0x000e, 0xb011 }, { 0x207c, 0x0000, 0x004a, 0xb011 }, 207 + { 0x2081, 0x0000, 0x0003, 0xb011 }, { 0x23ba, 0x0000, 0x008d, 0xb011 }, 208 + { 0x2128, 0x0005, 0x460d, 0xb017 }, { 0x212c, 0x00f6, 0x73e5, 0xb017 }, 209 + { 0x2130, 0x0005, 0x460d, 0xb017 }, { 0x2134, 0x00c0, 0xe9e5, 0xb017 }, 210 + { 0x2138, 0x00d5, 0x010b, 0xb017 }, { 0x213c, 0x009d, 0x7809, 0xb017 }, 211 + { 0x2140, 0x00c5, 0x0eed, 0xb017 }, { 0x2144, 0x009d, 0x7809, 0xb017 }, 212 + { 0x2148, 0x00c4, 0x4ef0, 0xb017 }, { 0x214c, 0x003a, 0x3106, 0xb017 }, 213 + { 0x2150, 0x00af, 0x750e, 0xb017 }, { 0x2154, 0x008c, 0x1ff1, 0xb017 }, 214 + { 0x2158, 0x009e, 0x360c, 0xb017 }, { 0x215c, 0x008c, 0x1ff1, 0xb017 }, 215 + { 0x2160, 0x004d, 0xac0a, 0xb017 }, { 0x2164, 0x007d, 0xa00f, 0xb017 }, 216 + { 0x2168, 0x00e1, 0x9ce3, 0xb017 }, { 0x216c, 0x00e8, 0x590e, 0xb017 }, 217 + { 0x2170, 0x00e1, 0x9ce3, 0xb017 }, { 0x2174, 0x0066, 0xfa0d, 0xb017 }, 218 + { 0x2178, 0x0000, 0x0010, 0xb017 }, { 0x217c, 0x0000, 0x0000, 0xb017 }, 219 + { 0x2180, 0x0000, 0x0000, 0xb017 }, { 0x2184, 0x0000, 0x0000, 0xb017 }, 220 + { 0x2188, 0x0000, 0x0000, 0xb017 }, { 0x218c, 0x0000, 0x0010, 0xb017 }, 221 + { 0x2190, 0x0000, 0x0000, 0xb017 }, { 0x2194, 0x0000, 0x0000, 0xb017 }, 222 + { 0x2198, 0x0000, 0x0000, 0xb017 }, { 0x219c, 0x0000, 0x0000, 0xb017 }, 223 + { 0x21a0, 0x0000, 0x0010, 0xb017 }, { 0x21a4, 0x0000, 0x0000, 0xb017 }, 224 + { 0x21a8, 0x0000, 0x0000, 0xb017 }, { 0x21ac, 0x0000, 0x0000, 0xb017 }, 225 + { 0x21b0, 0x0000, 0x0000, 0xb017 }, { 0x21b4, 0x0000, 0x0010, 0xb017 }, 226 + { 0x21b8, 0x0000, 0x0000, 0xb017 }, { 0x21bc, 0x0000, 0x0000, 0xb017 }, 227 + { 0x21c0, 0x0000, 0x0000, 0xb017 }, { 0x21c4, 0x0000, 0x0000, 0xb017 }, 228 + { 0x23b9, 0x0000, 0x0000, 0xb011 }, { 0x23e0, 0x0000, 0x0020, 0xb011 }, 229 + { 0x23e1, 0x0000, 0x0001, 0xb011 }, 230 + }; 231 + 232 + static const struct alc298_samsung_coeff_seq_desc amp_0x3d[] = { 233 + { 0x2000, 0x0000, 0x0001, 0xb011 }, { 0x23ff, 0x0000, 0x0000, 0xb011 }, 234 + { 0x203a, 0x0000, 0x0080, 0xb011 }, { 0x23e1, 0x0000, 0x0000, 0xb011 }, 235 + { 0x2012, 0x0000, 0x006f, 0xb011 }, { 0x2014, 0x0000, 0x0000, 0xb011 }, 236 + { 0x201b, 0x0000, 0x0002, 0xb011 }, { 0x201d, 0x0000, 0x0002, 0xb011 }, 237 + { 0x201f, 0x0000, 0x00fd, 0xb011 }, { 0x2021, 0x0000, 0x0001, 0xb011 }, 238 + { 0x2022, 0x0000, 0x0010, 0xb011 }, { 0x203d, 0x0000, 0x0005, 0xb011 }, 239 + { 0x203f, 0x0000, 0x0003, 0xb011 }, { 0x2050, 0x0000, 0x002c, 0xb011 }, 240 + { 0x2076, 0x0000, 0x000e, 0xb011 }, { 0x207c, 0x0000, 0x004a, 0xb011 }, 241 + { 0x2081, 0x0000, 0x0003, 0xb011 }, { 0x23ba, 0x0000, 0x008d, 0xb011 }, 242 + { 0x2128, 0x0005, 0x460d, 0xb017 }, { 0x212c, 0x00f6, 0x73e5, 0xb017 }, 243 + { 0x2130, 0x0005, 0x460d, 0xb017 }, { 0x2134, 0x00c0, 0xe9e5, 0xb017 }, 244 + { 0x2138, 0x00d5, 0x010b, 0xb017 }, { 0x213c, 0x009d, 0x7809, 0xb017 }, 245 + { 0x2140, 0x00c5, 0x0eed, 0xb017 }, { 0x2144, 0x009d, 0x7809, 0xb017 }, 246 + { 0x2148, 0x00c4, 0x4ef0, 0xb017 }, { 0x214c, 0x003a, 0x3106, 0xb017 }, 247 + { 0x2150, 0x00af, 0x750e, 0xb017 }, { 0x2154, 0x008c, 0x1ff1, 0xb017 }, 248 + { 0x2158, 0x009e, 0x360c, 0xb017 }, { 0x215c, 0x008c, 0x1ff1, 0xb017 }, 249 + { 0x2160, 0x004d, 0xac0a, 0xb017 }, { 0x2164, 0x007d, 0xa00f, 0xb017 }, 250 + { 0x2168, 0x00e1, 0x9ce3, 0xb017 }, { 0x216c, 0x00e8, 0x590e, 0xb017 }, 251 + { 0x2170, 0x00e1, 0x9ce3, 0xb017 }, { 0x2174, 0x0066, 0xfa0d, 0xb017 }, 252 + { 0x2178, 0x0000, 0x0010, 0xb017 }, { 0x217c, 0x0000, 0x0000, 0xb017 }, 253 + { 0x2180, 0x0000, 0x0000, 0xb017 }, { 0x2184, 0x0000, 0x0000, 0xb017 }, 254 + { 0x2188, 0x0000, 0x0000, 0xb017 }, { 0x218c, 0x0000, 0x0010, 0xb017 }, 255 + { 0x2190, 0x0000, 0x0000, 0xb017 }, { 0x2194, 0x0000, 0x0000, 0xb017 }, 256 + { 0x2198, 0x0000, 0x0000, 0xb017 }, { 0x219c, 0x0000, 0x0000, 0xb017 }, 257 + { 0x21a0, 0x0000, 0x0010, 0xb017 }, { 0x21a4, 0x0000, 0x0000, 0xb017 }, 258 + { 0x21a8, 0x0000, 0x0000, 0xb017 }, { 0x21ac, 0x0000, 0x0000, 0xb017 }, 259 + { 0x21b0, 0x0000, 0x0000, 0xb017 }, { 0x21b4, 0x0000, 0x0010, 0xb017 }, 260 + { 0x21b8, 0x0000, 0x0000, 0xb017 }, { 0x21bc, 0x0000, 0x0000, 0xb017 }, 261 + { 0x21c0, 0x0000, 0x0000, 0xb017 }, { 0x21c4, 0x0000, 0x0000, 0xb017 }, 262 + { 0x23b9, 0x0000, 0x0000, 0xb011 }, { 0x23e0, 0x0000, 0x0020, 0xb011 }, 263 + { 0x23e1, 0x0000, 0x0001, 0xb011 }, 264 + }; 265 + 266 + static const struct alc298_samsung_coeff_seq_desc amp_seq1[] = { 267 + { 0x23ff, 0x0000, 0x0000, 0xb011 }, { 0x203a, 0x0000, 0x0080, 0xb011 }, 268 + }; 269 + 270 + static const struct alc298_samsung_coeff_fixup_desc fixups2[] = { 271 + { 0x4f, 0xb029 }, { 0x05, 0x2be0 }, { 0x30, 0x2421 }, 272 + }; 273 + 274 + 275 + static const struct alc298_samsung_coeff_seq_desc amp_seq2[] = { 276 + { 0x203a, 0x0000, 0x0081, 0xb011 }, { 0x23ff, 0x0000, 0x0001, 0xb011 }, 277 + }; 278 + 279 + if (action != HDA_FIXUP_ACT_INIT) 280 + return; 281 + 282 + // First set of fixups 283 + for (i = 0; i < ARRAY_SIZE(fixups1); i++) 284 + alc_write_coef_idx(codec, fixups1[i].coeff_idx, fixups1[i].coeff_value); 285 + 286 + // First set of writes 287 + alc298_samsung_write_coef_pack_seq(codec, 0x38, amp_0x38, ARRAY_SIZE(amp_0x38)); 288 + alc298_samsung_write_coef_pack_seq(codec, 0x39, amp_0x39, ARRAY_SIZE(amp_0x39)); 289 + alc298_samsung_write_coef_pack_seq(codec, 0x3c, amp_0x3c, ARRAY_SIZE(amp_0x3c)); 290 + alc298_samsung_write_coef_pack_seq(codec, 0x3d, amp_0x3d, ARRAY_SIZE(amp_0x3d)); 291 + 292 + // Second set of writes 293 + alc298_samsung_write_coef_pack_seq(codec, 0x38, amp_seq1, ARRAY_SIZE(amp_seq1)); 294 + alc298_samsung_write_coef_pack_seq(codec, 0x39, amp_seq1, ARRAY_SIZE(amp_seq1)); 295 + alc298_samsung_write_coef_pack_seq(codec, 0x3c, amp_seq1, ARRAY_SIZE(amp_seq1)); 296 + alc298_samsung_write_coef_pack_seq(codec, 0x3d, amp_seq1, ARRAY_SIZE(amp_seq1)); 297 + 298 + // Second set of fixups 299 + for (i = 0; i < ARRAY_SIZE(fixups2); i++) 300 + alc_write_coef_idx(codec, fixups2[i].coeff_idx, fixups2[i].coeff_value); 301 + 302 + // Third set of writes 303 + alc298_samsung_write_coef_pack_seq(codec, 0x38, amp_seq2, ARRAY_SIZE(amp_seq2)); 304 + alc298_samsung_write_coef_pack_seq(codec, 0x39, amp_seq2, ARRAY_SIZE(amp_seq2)); 305 + alc298_samsung_write_coef_pack_seq(codec, 0x3c, amp_seq2, ARRAY_SIZE(amp_seq2)); 306 + alc298_samsung_write_coef_pack_seq(codec, 0x3d, amp_seq2, ARRAY_SIZE(amp_seq2)); 307 + 308 + // Final fixup 309 + alc_write_coef_idx(codec, 0x10, 0x0F21); 310 + }
+7
sound/soc/amd/yc/acp6x-mach.c
··· 224 224 .driver_data = &acp6x_card, 225 225 .matches = { 226 226 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 227 + DMI_MATCH(DMI_PRODUCT_NAME, "21M5"), 228 + } 229 + }, 230 + { 231 + .driver_data = &acp6x_card, 232 + .matches = { 233 + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 227 234 DMI_MATCH(DMI_PRODUCT_NAME, "82QF"), 228 235 } 229 236 },
+1 -1
sound/soc/codecs/tas2781-fmwlib.c
··· 2162 2162 return; 2163 2163 2164 2164 cal = cal_fmw->calibrations; 2165 - if (cal) 2165 + if (!cal) 2166 2166 return; 2167 2167 2168 2168 load_calib_data(priv, &cal->dev_data);
+29 -17
sound/soc/fsl/fsl-asoc-card.c
··· 306 306 return 0; 307 307 } 308 308 309 - SND_SOC_DAILINK_DEFS(hifi, 310 - DAILINK_COMP_ARRAY(COMP_EMPTY()), 311 - DAILINK_COMP_ARRAY(COMP_EMPTY(), COMP_EMPTY()), 312 - DAILINK_COMP_ARRAY(COMP_EMPTY())); 313 - 314 - SND_SOC_DAILINK_DEFS(hifi_fe, 315 - DAILINK_COMP_ARRAY(COMP_EMPTY()), 316 - DAILINK_COMP_ARRAY(COMP_DUMMY()), 317 - DAILINK_COMP_ARRAY(COMP_EMPTY())); 318 - 319 - SND_SOC_DAILINK_DEFS(hifi_be, 320 - DAILINK_COMP_ARRAY(COMP_EMPTY()), 321 - DAILINK_COMP_ARRAY(COMP_EMPTY(), COMP_EMPTY())); 322 - 323 309 static const struct snd_soc_dai_link fsl_asoc_card_dai[] = { 324 310 /* Default ASoC DAI Link*/ 325 311 { 326 312 .name = "HiFi", 327 313 .stream_name = "HiFi", 328 314 .ops = &fsl_asoc_card_ops, 329 - SND_SOC_DAILINK_REG(hifi), 330 315 }, 331 316 /* DPCM Link between Front-End and Back-End (Optional) */ 332 317 { ··· 320 335 .dpcm_playback = 1, 321 336 .dpcm_capture = 1, 322 337 .dynamic = 1, 323 - SND_SOC_DAILINK_REG(hifi_fe), 324 338 }, 325 339 { 326 340 .name = "HiFi-ASRC-BE", ··· 329 345 .dpcm_playback = 1, 330 346 .dpcm_capture = 1, 331 347 .no_pcm = 1, 332 - SND_SOC_DAILINK_REG(hifi_be), 333 348 }, 334 349 }; 335 350 ··· 620 637 struct platform_device *cpu_pdev; 621 638 struct fsl_asoc_card_priv *priv; 622 639 struct device *codec_dev[2] = { NULL, NULL }; 640 + struct snd_soc_dai_link_component *dlc; 623 641 const char *codec_dai_name[2]; 624 642 const char *codec_dev_name[2]; 625 643 u32 asrc_fmt = 0; ··· 701 717 702 718 memcpy(priv->dai_link, fsl_asoc_card_dai, 703 719 sizeof(struct snd_soc_dai_link) * ARRAY_SIZE(priv->dai_link)); 720 + /* 721 + * "Default ASoC DAI Link": 1 cpus, 2 codecs, 1 platforms 722 + * "DPCM Link Front-End": 1 cpus, 1 codecs (dummy), 1 platforms 723 + * "DPCM Link Back-End": 1 cpus, 2 codecs 724 + * totally 10 components 725 + */ 726 + dlc = devm_kcalloc(&pdev->dev, 10, sizeof(*dlc), GFP_KERNEL); 727 + if (!dlc) { 728 + ret = -ENOMEM; 729 + goto asrc_fail; 730 + } 731 + 732 + priv->dai_link[0].cpus = &dlc[0]; 733 + priv->dai_link[0].num_cpus = 1; 734 + priv->dai_link[0].codecs = &dlc[1]; 704 735 priv->dai_link[0].num_codecs = 1; 736 + priv->dai_link[0].platforms = &dlc[3]; 737 + priv->dai_link[0].num_platforms = 1; 738 + 739 + priv->dai_link[1].cpus = &dlc[4]; 740 + priv->dai_link[1].num_cpus = 1; 741 + priv->dai_link[1].codecs = &dlc[5]; 742 + priv->dai_link[1].num_codecs = 0; /* dummy */ 743 + priv->dai_link[1].platforms = &dlc[6]; 744 + priv->dai_link[1].num_platforms = 1; 745 + 746 + priv->dai_link[2].cpus = &dlc[7]; 747 + priv->dai_link[2].num_cpus = 1; 748 + priv->dai_link[2].codecs = &dlc[8]; 705 749 priv->dai_link[2].num_codecs = 1; 706 750 707 751 priv->card.dapm_routes = audio_map;
+9
sound/soc/intel/common/soc-acpi-intel-ssp-common.c
··· 64 64 CODEC_MAP_ENTRY("RT1015P", "rt1015", RT1015P_ACPI_HID, CODEC_RT1015P), 65 65 CODEC_MAP_ENTRY("RT1019P", "rt1019", RT1019P_ACPI_HID, CODEC_RT1019P), 66 66 CODEC_MAP_ENTRY("RT1308", "rt1308", RT1308_ACPI_HID, CODEC_RT1308), 67 + 68 + /* 69 + * Monolithic components 70 + * 71 + * Only put components that can serve as both the amp and the codec below this line. 72 + * This will ensure that if the part is used just as a codec and there is an amp as well 73 + * then the amp will be selected properly. 74 + */ 75 + CODEC_MAP_ENTRY("RT5650", "rt5650", RT5650_ACPI_HID, CODEC_RT5650), 67 76 }; 68 77 69 78 enum snd_soc_acpi_intel_codec
+1 -1
sound/soc/intel/common/soc-intel-quirks.h
··· 11 11 12 12 #include <linux/platform_data/x86/soc.h> 13 13 14 - #if IS_ENABLED(CONFIG_X86) 14 + #if IS_REACHABLE(CONFIG_IOSF_MBI) 15 15 16 16 #include <linux/dmi.h> 17 17 #include <asm/iosf_mbi.h>
-1
sound/soc/sof/amd/pci-vangogh.c
··· 34 34 .dsp_intr_base = ACP5X_DSP_SW_INTR_BASE, 35 35 .sram_pte_offset = ACP5X_SRAM_PTE_OFFSET, 36 36 .hw_semaphore_offset = ACP5X_AXI2DAGB_SEM_0, 37 - .acp_clkmux_sel = ACP5X_CLKMUX_SEL, 38 37 .probe_reg_offset = ACP5X_FUTURE_REG_ACLK_0, 39 38 }; 40 39
+1 -1
sound/soc/sof/imx/imx8m.c
··· 234 234 /* set default mailbox offset for FW ready message */ 235 235 sdev->dsp_box.offset = MBOX_OFFSET; 236 236 237 - priv->regmap = syscon_regmap_lookup_by_compatible("fsl,dsp-ctrl"); 237 + priv->regmap = syscon_regmap_lookup_by_phandle(np, "fsl,dsp-ctrl"); 238 238 if (IS_ERR(priv->regmap)) { 239 239 dev_err(sdev->dev, "cannot find dsp-ctrl registers"); 240 240 ret = PTR_ERR(priv->regmap);
+11 -7
sound/soc/sof/intel/hda-loader.c
··· 310 310 return ret; 311 311 } 312 312 313 - /* Wait for completion of transfer */ 314 - time_left = wait_for_completion_timeout(&hda_stream->ioc, 315 - msecs_to_jiffies(HDA_CL_DMA_IOC_TIMEOUT_MS)); 313 + if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) { 314 + /* Wait for completion of transfer */ 315 + time_left = wait_for_completion_timeout(&hda_stream->ioc, 316 + msecs_to_jiffies(HDA_CL_DMA_IOC_TIMEOUT_MS)); 316 317 317 - if (!time_left) { 318 - dev_err(sdev->dev, "Code loader DMA did not complete\n"); 319 - return -ETIMEDOUT; 318 + if (!time_left) { 319 + dev_err(sdev->dev, "Code loader DMA did not complete\n"); 320 + return -ETIMEDOUT; 321 + } 322 + dev_dbg(sdev->dev, "Code loader DMA done\n"); 320 323 } 321 - dev_dbg(sdev->dev, "Code loader DMA done, waiting for FW_ENTERED status\n"); 324 + 325 + dev_dbg(sdev->dev, "waiting for FW_ENTERED status\n"); 322 326 323 327 status = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, 324 328 chip->rom_status_reg, reg,
+9 -8
sound/soc/sof/intel/hda.c
··· 1307 1307 const struct sof_dev_desc *desc = sof_pdata->desc; 1308 1308 struct hdac_bus *bus = sof_to_bus(sdev); 1309 1309 struct snd_soc_acpi_mach *mach = NULL; 1310 - enum snd_soc_acpi_intel_codec codec_type; 1310 + enum snd_soc_acpi_intel_codec codec_type, amp_type; 1311 1311 const char *tplg_filename; 1312 1312 const char *tplg_suffix; 1313 + bool amp_name_valid; 1313 1314 1314 1315 /* Try I2S or DMIC if it is supported */ 1315 1316 if (interface_mask & (BIT(SOF_DAI_INTEL_SSP) | BIT(SOF_DAI_INTEL_DMIC))) ··· 1414 1413 } 1415 1414 } 1416 1415 1417 - codec_type = snd_soc_acpi_intel_detect_amp_type(sdev->dev); 1416 + amp_type = snd_soc_acpi_intel_detect_amp_type(sdev->dev); 1417 + codec_type = snd_soc_acpi_intel_detect_codec_type(sdev->dev); 1418 + amp_name_valid = amp_type != CODEC_NONE && amp_type != codec_type; 1418 1419 1419 - if (tplg_fixup && 1420 - mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_AMP_NAME && 1421 - codec_type != CODEC_NONE) { 1422 - tplg_suffix = snd_soc_acpi_intel_get_amp_tplg_suffix(codec_type); 1420 + if (tplg_fixup && amp_name_valid && 1421 + mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_AMP_NAME) { 1422 + tplg_suffix = snd_soc_acpi_intel_get_amp_tplg_suffix(amp_type); 1423 1423 if (!tplg_suffix) { 1424 1424 dev_err(sdev->dev, "no tplg suffix found, amp %d\n", 1425 - codec_type); 1425 + amp_type); 1426 1426 return NULL; 1427 1427 } 1428 1428 ··· 1438 1436 add_extension = true; 1439 1437 } 1440 1438 1441 - codec_type = snd_soc_acpi_intel_detect_codec_type(sdev->dev); 1442 1439 1443 1440 if (tplg_fixup && 1444 1441 mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME &&
+15 -3
sound/soc/sof/ipc4-topology.c
··· 1358 1358 ipc4_copier = dai->private; 1359 1359 1360 1360 if (pipeline->use_chain_dma) { 1361 - pipeline->msg.primary = 0; 1361 + /* 1362 + * Preserve the DMA Link ID and clear other bits since 1363 + * the DMA Link ID is only configured once during 1364 + * dai_config, other fields are expected to be 0 for 1365 + * re-configuration 1366 + */ 1367 + pipeline->msg.primary &= SOF_IPC4_GLB_CHAIN_DMA_LINK_ID_MASK; 1362 1368 pipeline->msg.extension = 0; 1363 1369 } 1364 1370 ··· 3101 3095 return 0; 3102 3096 3103 3097 if (pipeline->use_chain_dma) { 3104 - pipeline->msg.primary &= ~SOF_IPC4_GLB_CHAIN_DMA_LINK_ID_MASK; 3105 - pipeline->msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_LINK_ID(data->dai_data); 3098 + /* 3099 + * Only configure the DMA Link ID for ChainDMA when this op is 3100 + * invoked with SOF_DAI_CONFIG_FLAGS_HW_PARAMS 3101 + */ 3102 + if (flags & SOF_DAI_CONFIG_FLAGS_HW_PARAMS) { 3103 + pipeline->msg.primary &= ~SOF_IPC4_GLB_CHAIN_DMA_LINK_ID_MASK; 3104 + pipeline->msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_LINK_ID(data->dai_data); 3105 + } 3106 3106 return 0; 3107 3107 } 3108 3108
+1
sound/soc/tegra/Kconfig
··· 78 78 79 79 config SND_SOC_TEGRA210_I2S 80 80 tristate "Tegra210 I2S module" 81 + select SND_SIMPLE_CARD_UTILS 81 82 help 82 83 Config to enable the Inter-IC Sound (I2S) Controller which 83 84 implements full-duplex and bidirectional and single direction
+7
sound/usb/mixer.c
··· 1211 1211 cval->res = 16; 1212 1212 } 1213 1213 break; 1214 + case USB_ID(0x1bcf, 0x2281): /* HD Webcam */ 1215 + if (!strcmp(kctl->id.name, "Mic Capture Volume")) { 1216 + usb_audio_info(chip, 1217 + "set resolution quirk: cval->res = 16\n"); 1218 + cval->res = 16; 1219 + } 1220 + break; 1214 1221 } 1215 1222 } 1216 1223
+4
sound/usb/quirks.c
··· 2125 2125 QUIRK_FLAG_CTL_MSG_DELAY_1M), 2126 2126 DEVICE_FLG(0x0b0e, 0x0349, /* Jabra 550a */ 2127 2127 QUIRK_FLAG_CTL_MSG_DELAY_1M), 2128 + DEVICE_FLG(0x0c45, 0x6340, /* Sonix HD USB Camera */ 2129 + QUIRK_FLAG_GET_SAMPLE_RATE), 2128 2130 DEVICE_FLG(0x0ecb, 0x205c, /* JBL Quantum610 Wireless */ 2129 2131 QUIRK_FLAG_FIXED_RATE), 2130 2132 DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */ ··· 2168 2166 DEVICE_FLG(0x1901, 0x0191, /* GE B850V3 CP2114 audio interface */ 2169 2167 QUIRK_FLAG_GET_SAMPLE_RATE), 2170 2168 DEVICE_FLG(0x19f7, 0x0035, /* RODE NT-USB+ */ 2169 + QUIRK_FLAG_GET_SAMPLE_RATE), 2170 + DEVICE_FLG(0x1bcf, 0x2281, /* HD Webcam */ 2171 2171 QUIRK_FLAG_GET_SAMPLE_RATE), 2172 2172 DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */ 2173 2173 QUIRK_FLAG_GET_SAMPLE_RATE),