Skip to content

Commit 01f15f3

Browse files
committed
Merge tag 'sound-5.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Only a few regression fixes and trivial device quirks" * tag 'sound-5.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda/via: Apply runtime PM workaround for ASUS B23E ALSA: hda: Fix hang during shutdown due to link reset ALSA: hda/realtek: Enable 4-speaker output for Dell XPS 15 9510 laptop ALSA: oxfw: fix functioal regression for silence in Apogee Duet FireWire ALSA: hda - fix the 'Capture Switch' value change notifications
2 parents a83955b + 4bf61ad commit 01f15f3

File tree

7 files changed

+35
-9
lines changed

7 files changed

+35
-9
lines changed

sound/firewire/oxfw/oxfw-stream.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,21 @@ static int init_stream(struct snd_oxfw *oxfw, struct amdtp_stream *stream)
153153
struct cmp_connection *conn;
154154
enum cmp_direction c_dir;
155155
enum amdtp_stream_direction s_dir;
156-
unsigned int flags = CIP_UNAWARE_SYT;
156+
unsigned int flags = 0;
157157
int err;
158158

159159
if (!(oxfw->quirks & SND_OXFW_QUIRK_BLOCKING_TRANSMISSION))
160160
flags |= CIP_NONBLOCKING;
161161
else
162162
flags |= CIP_BLOCKING;
163163

164+
// OXFW 970/971 has no function to generate playback timing according to the sequence
165+
// of value in syt field, thus the packet should include NO_INFO value in the field.
166+
// However, some models just ignore data blocks in packet with NO_INFO for audio data
167+
// processing.
168+
if (!(oxfw->quirks & SND_OXFW_QUIRK_IGNORE_NO_INFO_PACKET))
169+
flags |= CIP_UNAWARE_SYT;
170+
164171
if (stream == &oxfw->tx_stream) {
165172
conn = &oxfw->out_conn;
166173
c_dir = CMP_OUTPUT;

sound/firewire/oxfw/oxfw.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,10 @@ static int detect_quirks(struct snd_oxfw *oxfw, const struct ieee1394_device_id
159159
return snd_oxfw_scs1x_add(oxfw);
160160
}
161161

162-
if (entry->vendor_id == OUI_APOGEE && entry->model_id == MODEL_DUET_FW)
163-
oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION;
162+
if (entry->vendor_id == OUI_APOGEE && entry->model_id == MODEL_DUET_FW) {
163+
oxfw->quirks |= SND_OXFW_QUIRK_BLOCKING_TRANSMISSION |
164+
SND_OXFW_QUIRK_IGNORE_NO_INFO_PACKET;
165+
}
164166

165167
/*
166168
* TASCAM FireOne has physical control and requires a pair of additional

sound/firewire/oxfw/oxfw.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ enum snd_oxfw_quirk {
4242
SND_OXFW_QUIRK_BLOCKING_TRANSMISSION = 0x04,
4343
// Stanton SCS1.d and SCS1.m support unique transaction.
4444
SND_OXFW_QUIRK_SCS_TRANSACTION = 0x08,
45+
// Apogee Duet FireWire ignores data blocks in packet with NO_INFO for audio data
46+
// processing, while output level meter moves. Any value in syt field of packet takes
47+
// the device to process audio data even if the value is invalid in a point of
48+
// IEC 61883-1/6.
49+
SND_OXFW_QUIRK_IGNORE_NO_INFO_PACKET = 0x10,
4550
};
4651

4752
/* This is an arbitrary number for convinience. */

sound/pci/hda/hda_generic.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3460,7 +3460,7 @@ static int cap_put_caller(struct snd_kcontrol *kcontrol,
34603460
struct hda_gen_spec *spec = codec->spec;
34613461
const struct hda_input_mux *imux;
34623462
struct nid_path *path;
3463-
int i, adc_idx, err = 0;
3463+
int i, adc_idx, ret, err = 0;
34643464

34653465
imux = &spec->input_mux;
34663466
adc_idx = kcontrol->id.index;
@@ -3470,9 +3470,13 @@ static int cap_put_caller(struct snd_kcontrol *kcontrol,
34703470
if (!path || !path->ctls[type])
34713471
continue;
34723472
kcontrol->private_value = path->ctls[type];
3473-
err = func(kcontrol, ucontrol);
3474-
if (err < 0)
3473+
ret = func(kcontrol, ucontrol);
3474+
if (ret < 0) {
3475+
err = ret;
34753476
break;
3477+
}
3478+
if (ret > 0)
3479+
err = 1;
34763480
}
34773481
mutex_unlock(&codec->control_mutex);
34783482
if (err >= 0 && spec->cap_sync_hook)

sound/pci/hda/hda_intel.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -883,10 +883,11 @@ static unsigned int azx_get_pos_skl(struct azx *chip, struct azx_dev *azx_dev)
883883
return azx_get_pos_posbuf(chip, azx_dev);
884884
}
885885

886-
static void azx_shutdown_chip(struct azx *chip)
886+
static void __azx_shutdown_chip(struct azx *chip, bool skip_link_reset)
887887
{
888888
azx_stop_chip(chip);
889-
azx_enter_link_reset(chip);
889+
if (!skip_link_reset)
890+
azx_enter_link_reset(chip);
890891
azx_clear_irq_pending(chip);
891892
display_power(chip, false);
892893
}
@@ -895,6 +896,11 @@ static void azx_shutdown_chip(struct azx *chip)
895896
static DEFINE_MUTEX(card_list_lock);
896897
static LIST_HEAD(card_list);
897898

899+
static void azx_shutdown_chip(struct azx *chip)
900+
{
901+
__azx_shutdown_chip(chip, false);
902+
}
903+
898904
static void azx_add_card_list(struct azx *chip)
899905
{
900906
struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
@@ -2385,7 +2391,7 @@ static void azx_shutdown(struct pci_dev *pci)
23852391
return;
23862392
chip = card->private_data;
23872393
if (chip && chip->running)
2388-
azx_shutdown_chip(chip);
2394+
__azx_shutdown_chip(chip, true);
23892395
}
23902396

23912397
/* PCI IDs */

sound/pci/hda/patch_realtek.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8332,6 +8332,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
83328332
SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
83338333
SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
83348334
SND_PCI_QUIRK(0x1028, 0x0a58, "Dell", ALC255_FIXUP_DELL_HEADSET_MIC),
8335+
SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK),
83358336
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
83368337
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
83378338
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),

sound/pci/hda/patch_via.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,7 @@ static const struct hda_fixup via_fixups[] = {
10411041
};
10421042

10431043
static const struct snd_pci_quirk vt2002p_fixups[] = {
1044+
SND_PCI_QUIRK(0x1043, 0x13f7, "Asus B23E", VIA_FIXUP_POWER_SAVE),
10441045
SND_PCI_QUIRK(0x1043, 0x1487, "Asus G75", VIA_FIXUP_ASUS_G75),
10451046
SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST),
10461047
SND_PCI_QUIRK_VENDOR(0x1558, "Clevo", VIA_FIXUP_POWER_SAVE),

0 commit comments

Comments
 (0)