mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
Merge branch 'for-linus' into for-next
Merge 6.3-devel branch back in order to apply the more Realtek HD-audio changes cleanly. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
commit
ea3292986c
@ -704,7 +704,7 @@ ref
|
||||
no-jd
|
||||
BIOS setup but without jack-detection
|
||||
intel
|
||||
Intel DG45* mobos
|
||||
Intel D*45* mobos
|
||||
dell-m6-amic
|
||||
Dell desktops/laptops with analog mics
|
||||
dell-m6-dmic
|
||||
|
@ -490,7 +490,7 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
|
||||
// packet is important for media clock recovery.
|
||||
err = amdtp_domain_start(&tscm->domain, tx_init_skip_cycles, true, true);
|
||||
if (err < 0)
|
||||
return err;
|
||||
goto error;
|
||||
|
||||
if (!amdtp_domain_wait_ready(&tscm->domain, READY_TIMEOUT_MS)) {
|
||||
err = -ETIMEDOUT;
|
||||
|
@ -561,10 +561,13 @@ int snd_cs8427_iec958_active(struct snd_i2c_device *cs8427, int active)
|
||||
if (snd_BUG_ON(!cs8427))
|
||||
return -ENXIO;
|
||||
chip = cs8427->private_data;
|
||||
if (active)
|
||||
if (active) {
|
||||
memcpy(chip->playback.pcm_status,
|
||||
chip->playback.def_status, 24);
|
||||
chip->playback.pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
|
||||
chip->playback.pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
|
||||
} else {
|
||||
chip->playback.pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
|
||||
}
|
||||
snd_ctl_notify(cs8427->bus->card,
|
||||
SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
|
||||
&chip->playback.pcm_ctl->id);
|
||||
|
@ -1183,7 +1183,7 @@ static int snd_emu10k1_capture_mic_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
|
||||
|
||||
emu->capture_interrupt = NULL;
|
||||
emu->capture_mic_interrupt = NULL;
|
||||
emu->pcm_capture_mic_substream = NULL;
|
||||
return 0;
|
||||
}
|
||||
@ -1290,7 +1290,7 @@ static int snd_emu10k1_capture_efx_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
|
||||
|
||||
emu->capture_interrupt = NULL;
|
||||
emu->capture_efx_interrupt = NULL;
|
||||
emu->pcm_capture_efx_substream = NULL;
|
||||
return 0;
|
||||
}
|
||||
@ -1728,17 +1728,21 @@ int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device)
|
||||
struct snd_kcontrol *kctl;
|
||||
int err;
|
||||
|
||||
err = snd_pcm_new(emu->card, "emu10k1 efx", device, 8, 1, &pcm);
|
||||
err = snd_pcm_new(emu->card, "emu10k1 efx", device, emu->audigy ? 0 : 8, 1, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
pcm->private_data = emu;
|
||||
|
||||
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_emu10k1_fx8010_playback_ops);
|
||||
if (!emu->audigy)
|
||||
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_emu10k1_fx8010_playback_ops);
|
||||
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_emu10k1_capture_efx_ops);
|
||||
|
||||
pcm->info_flags = 0;
|
||||
strcpy(pcm->name, "Multichannel Capture/PT Playback");
|
||||
if (emu->audigy)
|
||||
strcpy(pcm->name, "Multichannel Capture");
|
||||
else
|
||||
strcpy(pcm->name, "Multichannel Capture/PT Playback");
|
||||
emu->pcm_efx = pcm;
|
||||
|
||||
/* EFX capture - record the "FXBUS2" channels, by default we connect the EXTINs
|
||||
|
@ -81,6 +81,7 @@ struct hdmi_spec_per_pin {
|
||||
struct delayed_work work;
|
||||
struct hdmi_pcm *pcm; /* pointer to spec->pcm_rec[n] dynamically*/
|
||||
int pcm_idx; /* which pcm is attached. -1 means no pcm is attached */
|
||||
int prev_pcm_idx; /* previously assigned pcm index */
|
||||
int repoll_count;
|
||||
bool setup; /* the stream has been set up by prepare callback */
|
||||
bool silent_stream;
|
||||
@ -1380,9 +1381,17 @@ static void hdmi_attach_hda_pcm(struct hdmi_spec *spec,
|
||||
/* pcm already be attached to the pin */
|
||||
if (per_pin->pcm)
|
||||
return;
|
||||
/* try the previously used slot at first */
|
||||
idx = per_pin->prev_pcm_idx;
|
||||
if (idx >= 0) {
|
||||
if (!test_bit(idx, &spec->pcm_bitmap))
|
||||
goto found;
|
||||
per_pin->prev_pcm_idx = -1; /* no longer valid, clear it */
|
||||
}
|
||||
idx = hdmi_find_pcm_slot(spec, per_pin);
|
||||
if (idx == -EBUSY)
|
||||
return;
|
||||
found:
|
||||
per_pin->pcm_idx = idx;
|
||||
per_pin->pcm = get_hdmi_pcm(spec, idx);
|
||||
set_bit(idx, &spec->pcm_bitmap);
|
||||
@ -1398,6 +1407,7 @@ static void hdmi_detach_hda_pcm(struct hdmi_spec *spec,
|
||||
return;
|
||||
idx = per_pin->pcm_idx;
|
||||
per_pin->pcm_idx = -1;
|
||||
per_pin->prev_pcm_idx = idx; /* remember the previous index */
|
||||
per_pin->pcm = NULL;
|
||||
if (idx >= 0 && idx < spec->pcm_used)
|
||||
clear_bit(idx, &spec->pcm_bitmap);
|
||||
@ -1924,6 +1934,7 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
|
||||
|
||||
per_pin->pcm = NULL;
|
||||
per_pin->pcm_idx = -1;
|
||||
per_pin->prev_pcm_idx = -1;
|
||||
per_pin->pin_nid = pin_nid;
|
||||
per_pin->pin_nid_idx = spec->num_nids;
|
||||
per_pin->dev_id = i;
|
||||
@ -4611,7 +4622,7 @@ HDA_CODEC_ENTRY(0x80862814, "DG1 HDMI", patch_i915_tgl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x80862815, "Alderlake HDMI", patch_i915_tgl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x80862816, "Rocketlake HDMI", patch_i915_tgl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x80862818, "Raptorlake HDMI", patch_i915_tgl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x80862819, "DG2 HDMI", patch_i915_adlp_hdmi),
|
||||
HDA_CODEC_ENTRY(0x80862819, "DG2 HDMI", patch_i915_tgl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x8086281a, "Jasperlake HDMI", patch_i915_icl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x8086281b, "Elkhartlake HDMI", patch_i915_icl_hdmi),
|
||||
HDA_CODEC_ENTRY(0x8086281c, "Alderlake-P HDMI", patch_i915_adlp_hdmi),
|
||||
|
@ -2624,6 +2624,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
|
||||
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
|
||||
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
|
||||
SND_PCI_QUIRK(0x1558, 0x3702, "Clevo X370SN[VW]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
|
||||
SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
|
||||
SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
|
||||
SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
|
||||
@ -6959,6 +6960,8 @@ enum {
|
||||
ALC269_FIXUP_DELL_M101Z,
|
||||
ALC269_FIXUP_SKU_IGNORE,
|
||||
ALC269_FIXUP_ASUS_G73JW,
|
||||
ALC269_FIXUP_ASUS_N7601ZM_PINS,
|
||||
ALC269_FIXUP_ASUS_N7601ZM,
|
||||
ALC269_FIXUP_LENOVO_EAPD,
|
||||
ALC275_FIXUP_SONY_HWEQ,
|
||||
ALC275_FIXUP_SONY_DISABLE_AAMIX,
|
||||
@ -7255,6 +7258,29 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
{ }
|
||||
}
|
||||
},
|
||||
[ALC269_FIXUP_ASUS_N7601ZM_PINS] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x19, 0x03A11050 },
|
||||
{ 0x1a, 0x03A11C30 },
|
||||
{ 0x21, 0x03211420 },
|
||||
{ }
|
||||
}
|
||||
},
|
||||
[ALC269_FIXUP_ASUS_N7601ZM] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
{0x20, AC_VERB_SET_COEF_INDEX, 0x62},
|
||||
{0x20, AC_VERB_SET_PROC_COEF, 0xa007},
|
||||
{0x20, AC_VERB_SET_COEF_INDEX, 0x10},
|
||||
{0x20, AC_VERB_SET_PROC_COEF, 0x8420},
|
||||
{0x20, AC_VERB_SET_COEF_INDEX, 0x0f},
|
||||
{0x20, AC_VERB_SET_PROC_COEF, 0x7774},
|
||||
{ }
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_ASUS_N7601ZM_PINS,
|
||||
},
|
||||
[ALC269_FIXUP_LENOVO_EAPD] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
@ -9262,7 +9288,6 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x0a62, "Dell Precision 5560", ALC289_FIXUP_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0a9d, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0ac9, "Dell Precision 3260", ALC283_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0b19, "Dell XPS 15 9520", ALC289_FIXUP_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0b1a, "Dell Precision 5570", ALC289_FIXUP_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0b37, "Dell Inspiron 16 Plus 7620 2-in-1", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
|
||||
@ -9443,6 +9468,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8b47, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b5d, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b5e, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b65, "HP ProBook 455 15.6 inch G10 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b66, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b7a, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b7d, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b87, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
@ -9464,6 +9491,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1043, 0x1271, "ASUS X430UN", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1043, 0x1290, "ASUS X441SA", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1043, 0x12a0, "ASUS X441UV", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1043, 0x12a3, "Asus N7691ZM", ALC269_FIXUP_ASUS_N7601ZM),
|
||||
SND_PCI_QUIRK(0x1043, 0x12af, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x12e0, "ASUS X541SA", ALC256_FIXUP_ASUS_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x12f0, "ASUS X541UV", ALC256_FIXUP_ASUS_MIC),
|
||||
@ -9661,6 +9689,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
@ -9713,6 +9744,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x9e56, "Lenovo ZhaoYang CF4620Z", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1849, 0x1233, "ASRock NUC Box 1100", ALC233_FIXUP_NO_AUDIO_JACK),
|
||||
SND_PCI_QUIRK(0x1849, 0xa233, "Positivo Master C6300", ALC269_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
|
||||
|
@ -1707,6 +1707,7 @@ static const struct snd_pci_quirk stac925x_fixup_tbl[] = {
|
||||
};
|
||||
|
||||
static const struct hda_pintbl ref92hd73xx_pin_configs[] = {
|
||||
// Port A-H
|
||||
{ 0x0a, 0x02214030 },
|
||||
{ 0x0b, 0x02a19040 },
|
||||
{ 0x0c, 0x01a19020 },
|
||||
@ -1715,9 +1716,12 @@ static const struct hda_pintbl ref92hd73xx_pin_configs[] = {
|
||||
{ 0x0f, 0x01014010 },
|
||||
{ 0x10, 0x01014020 },
|
||||
{ 0x11, 0x01014030 },
|
||||
// CD in
|
||||
{ 0x12, 0x02319040 },
|
||||
// Digial Mic ins
|
||||
{ 0x13, 0x90a000f0 },
|
||||
{ 0x14, 0x90a000f0 },
|
||||
// Digital outs
|
||||
{ 0x22, 0x01452050 },
|
||||
{ 0x23, 0x01452050 },
|
||||
{}
|
||||
@ -1758,6 +1762,7 @@ static const struct hda_pintbl alienware_m17x_pin_configs[] = {
|
||||
};
|
||||
|
||||
static const struct hda_pintbl intel_dg45id_pin_configs[] = {
|
||||
// Analog outputs
|
||||
{ 0x0a, 0x02214230 },
|
||||
{ 0x0b, 0x02A19240 },
|
||||
{ 0x0c, 0x01013214 },
|
||||
@ -1765,6 +1770,9 @@ static const struct hda_pintbl intel_dg45id_pin_configs[] = {
|
||||
{ 0x0e, 0x01A19250 },
|
||||
{ 0x0f, 0x01011212 },
|
||||
{ 0x10, 0x01016211 },
|
||||
// Digital output
|
||||
{ 0x22, 0x01451380 },
|
||||
{ 0x23, 0x40f000f0 },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -1955,6 +1963,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = {
|
||||
"DFI LanParty", STAC_92HD73XX_REF),
|
||||
SND_PCI_QUIRK(PCI_VENDOR_ID_DFI, 0x3101,
|
||||
"DFI LanParty", STAC_92HD73XX_REF),
|
||||
SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5001,
|
||||
"Intel DP45SG", STAC_92HD73XX_INTEL),
|
||||
SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5002,
|
||||
"Intel DG45ID", STAC_92HD73XX_INTEL),
|
||||
SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5003,
|
||||
|
@ -172,7 +172,7 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(*chip), &card);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
@ -2160,7 +2160,7 @@ static int snd_ymfpci_memalloc(struct snd_ymfpci *chip)
|
||||
chip->work_base = ptr;
|
||||
chip->work_base_addr = ptr_addr;
|
||||
|
||||
snd_BUG_ON(ptr + chip->work_size !=
|
||||
snd_BUG_ON(ptr + PAGE_ALIGN(chip->work_size) !=
|
||||
chip->work_ptr->area + chip->work_ptr->bytes);
|
||||
|
||||
snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, chip->bank_base_playback_addr);
|
||||
|
@ -31,7 +31,7 @@ static int max98373_dac_event(struct snd_soc_dapm_widget *w,
|
||||
MAX98373_GLOBAL_EN_MASK, 1);
|
||||
usleep_range(30000, 31000);
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
regmap_update_bits(max98373->regmap,
|
||||
MAX98373_R20FF_GLOBAL_SHDN,
|
||||
MAX98373_GLOBAL_EN_MASK, 0);
|
||||
@ -64,7 +64,7 @@ static const struct snd_kcontrol_new max98373_spkfb_control =
|
||||
static const struct snd_soc_dapm_widget max98373_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_DAC_E("Amp Enable", "HiFi Playback",
|
||||
MAX98373_R202B_PCM_RX_EN, 0, 0, max98373_dac_event,
|
||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
|
||||
SND_SOC_DAPM_MUX("DAI Sel Mux", SND_SOC_NOPM, 0, 0,
|
||||
&max98373_dai_controls),
|
||||
SND_SOC_DAPM_OUTPUT("BE_OUT"),
|
||||
|
@ -209,14 +209,19 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
|
||||
be_chan = soc_component_to_pcm(component_be)->chan[substream->stream];
|
||||
tmp_chan = be_chan;
|
||||
}
|
||||
if (!tmp_chan)
|
||||
tmp_chan = dma_request_slave_channel(dev_be, tx ? "tx" : "rx");
|
||||
if (!tmp_chan) {
|
||||
tmp_chan = dma_request_chan(dev_be, tx ? "tx" : "rx");
|
||||
if (IS_ERR(tmp_chan)) {
|
||||
dev_err(dev, "failed to request DMA channel for Back-End\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* An EDMA DEV_TO_DEV channel is fixed and bound with DMA event of each
|
||||
* peripheral, unlike SDMA channel that is allocated dynamically. So no
|
||||
* need to configure dma_request and dma_request2, but get dma_chan of
|
||||
* Back-End device directly via dma_request_slave_channel.
|
||||
* Back-End device directly via dma_request_chan.
|
||||
*/
|
||||
if (!asrc->use_edma) {
|
||||
/* Get DMA request of Back-End */
|
||||
|
@ -1544,7 +1544,7 @@ static const struct fsl_sai_soc_data fsl_sai_imx8qm_data = {
|
||||
.use_imx_pcm = true,
|
||||
.use_edma = true,
|
||||
.fifo_depth = 64,
|
||||
.pins = 1,
|
||||
.pins = 4,
|
||||
.reg_offset = 0,
|
||||
.mclk0_is_mclk1 = false,
|
||||
.flags = 0,
|
||||
|
@ -2349,10 +2349,12 @@ static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
||||
}
|
||||
|
||||
if (!src_fw_module || !sink_fw_module) {
|
||||
/* The NULL module will print as "(efault)" */
|
||||
dev_err(sdev->dev, "source %s or sink %s widget weren't set up properly\n",
|
||||
src_fw_module->man4_module_entry.name,
|
||||
sink_fw_module->man4_module_entry.name);
|
||||
dev_err(sdev->dev,
|
||||
"cannot bind %s -> %s, no firmware module for: %s%s\n",
|
||||
src_widget->widget->name, sink_widget->widget->name,
|
||||
src_fw_module ? "" : " source",
|
||||
sink_fw_module ? "" : " sink");
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -188,6 +188,7 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
|
||||
const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
|
||||
pm_message_t pm_state;
|
||||
u32 target_state = snd_sof_dsp_power_target(sdev);
|
||||
u32 old_state = sdev->dsp_power_state.state;
|
||||
int ret;
|
||||
|
||||
/* do nothing if dsp suspend callback is not set */
|
||||
@ -197,7 +198,12 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
|
||||
if (runtime_suspend && !sof_ops(sdev)->runtime_suspend)
|
||||
return 0;
|
||||
|
||||
if (tplg_ops && tplg_ops->tear_down_all_pipelines)
|
||||
/* we need to tear down pipelines only if the DSP hardware is
|
||||
* active, which happens for PCI devices. if the device is
|
||||
* suspended, it is brought back to full power and then
|
||||
* suspended again
|
||||
*/
|
||||
if (tplg_ops && tplg_ops->tear_down_all_pipelines && (old_state == SOF_DSP_PM_D0))
|
||||
tplg_ops->tear_down_all_pipelines(sdev, false);
|
||||
|
||||
if (sdev->fw_state != SOF_FW_BOOT_COMPLETE)
|
||||
|
Loading…
Reference in New Issue
Block a user