mirror of https://gitee.com/openkylin/linux.git
sound fixes for 4.16-rc2
A collection of usual suspects: - A handful USB-audio and HD-audio device-specific quirks - Some trivial fixes for the new AC97 bus stuff - Another race fix in ALSA sequencer core -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAlqGpdIOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE/8Dg//Y/jOsYVVatg8JPYZOv/8FopyjM/+tGCFLWij oxFnsqK3f4mEbE2MQGZVZDSexwfrro7U7PWRrmxE9/DWkakRbwcjOiKRRDfYcGHA jE1BIQkcbu3HgTzRWACnHpHMFzwWoOyRv8HVq/qMbYcCPgCDgNPXJat1GopwSkK/ k5SCbEOLAqefTv6tcGPSVie9cjfjj1wSJ0M5jV6zJp1+9feDfN0yttEi+fUDOGeR dfEuHoeaPpd6PnINxdkY6jaoMZtk91TdUpVEaq0srJXxYwO5V7JiOGt7VV4hgk23 tJMLCfA7NGNQBKVcjs/uLDTeWWqlzYVCD7caCp1z97CidfCX5k9f4rK1r1GzMfez zrIxAY+Y7nHPlE65sTVToHTa5FjS8J3cdAPovJWRjbY6/C9GYvdx1epaz02HPpZm va1r21oD02a5+UqwOvX0H4rii5Yc63Mt4FelBfEhv+cGq7m2Sduw32UDk09n3Wst 1Q9ivL5gigf4hEnPMG+aZba0KOgLM+Q3P+EeivoAQhQrp0A9TqZ3aCmDNGTmhc51 Yhgz+kJHcLtDfJnGQXlG7M+pDSepk1Pb8Yl+m0u305sf+hyFwYrcHU5tWc/u+bX+ ZMa1rGEr21yIvBadcO8qrGPiOgWCgGzTTAeI0kMlMZaofOmQQTaiszGVL+/gjOZu pmNbkfc= =UMDx -----END PGP SIGNATURE----- Merge tag 'sound-4.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A collection of usual suspects: - a handful USB-audio and HD-audio device-specific quirks - some trivial fixes for the new AC97 bus stuff - another race fix in ALSA sequencer core" * tag 'sound-4.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 ALSA: seq: Fix racy pool initializations ALSA: usb: add more device quirks for USB DSD devices ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute ALSA: ac97: Fix copy and paste typo in documentation ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204 ALSA: ac97: kconfig: Remove select of undefined symbol AC97 ALSA: hda/realtek - Enable Thinkpad Dock device for ALC298 platform ALSA: hda/realtek - Add headset mode support for Dell laptop ALSA: hda - Fix headset mic detection problem for two Dell machines
This commit is contained in:
commit
1a2a7d3ee6
|
@ -31,7 +31,7 @@
|
|||
#define AC97_HEADPHONE 0x04 /* Headphone Volume (optional) */
|
||||
#define AC97_MASTER_MONO 0x06 /* Master Volume Mono (optional) */
|
||||
#define AC97_MASTER_TONE 0x08 /* Master Tone (Bass & Treble) (optional) */
|
||||
#define AC97_PC_BEEP 0x0a /* PC Beep Volume (optinal) */
|
||||
#define AC97_PC_BEEP 0x0a /* PC Beep Volume (optional) */
|
||||
#define AC97_PHONE 0x0c /* Phone Volume (optional) */
|
||||
#define AC97_MIC 0x0e /* MIC Volume */
|
||||
#define AC97_LINE 0x10 /* Line In Volume */
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
config AC97_BUS_NEW
|
||||
tristate
|
||||
select AC97
|
||||
help
|
||||
This is the new AC97 bus type, successor of AC97_BUS. The ported
|
||||
drivers which benefit from the AC97 automatic probing should "select"
|
||||
|
|
|
@ -1003,7 +1003,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
|||
{
|
||||
struct snd_seq_client *client = file->private_data;
|
||||
int written = 0, len;
|
||||
int err = -EINVAL;
|
||||
int err;
|
||||
struct snd_seq_event event;
|
||||
|
||||
if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
|
||||
|
@ -1018,11 +1018,15 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
|||
|
||||
/* allocate the pool now if the pool is not allocated yet */
|
||||
if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
|
||||
if (snd_seq_pool_init(client->pool) < 0)
|
||||
mutex_lock(&client->ioctl_mutex);
|
||||
err = snd_seq_pool_init(client->pool);
|
||||
mutex_unlock(&client->ioctl_mutex);
|
||||
if (err < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* only process whole events */
|
||||
err = -EINVAL;
|
||||
while (count >= sizeof(struct snd_seq_event)) {
|
||||
/* Read in the event header from the user */
|
||||
len = sizeof(event);
|
||||
|
|
|
@ -3465,6 +3465,19 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
|
|||
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
||||
}
|
||||
|
||||
static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix,
|
||||
int action)
|
||||
{
|
||||
unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
|
||||
unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
|
||||
|
||||
if (cfg_headphone && cfg_headset_mic == 0x411111f0)
|
||||
snd_hda_codec_set_pincfg(codec, 0x19,
|
||||
(cfg_headphone & ~AC_DEFCFG_DEVICE) |
|
||||
(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
|
||||
}
|
||||
|
||||
static void alc269_fixup_hweq(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
|
@ -4972,6 +4985,28 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec,
|
|||
}
|
||||
}
|
||||
|
||||
static void alc_fixup_tpt470_dock(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
static const struct hda_pintbl pincfgs[] = {
|
||||
{ 0x17, 0x21211010 }, /* dock headphone */
|
||||
{ 0x19, 0x21a11010 }, /* dock mic */
|
||||
{ }
|
||||
};
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
||||
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
||||
/* Enable DOCK device */
|
||||
snd_hda_codec_write(codec, 0x17, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
|
||||
/* Enable DOCK device */
|
||||
snd_hda_codec_write(codec, 0x19, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
|
||||
snd_hda_apply_pincfgs(codec, pincfgs);
|
||||
}
|
||||
}
|
||||
|
||||
static void alc_shutup_dell_xps13(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
@ -5351,6 +5386,7 @@ enum {
|
|||
ALC269_FIXUP_LIFEBOOK_EXTMIC,
|
||||
ALC269_FIXUP_LIFEBOOK_HP_PIN,
|
||||
ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
|
||||
ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
|
||||
ALC269_FIXUP_AMIC,
|
||||
ALC269_FIXUP_DMIC,
|
||||
ALC269VB_FIXUP_AMIC,
|
||||
|
@ -5446,6 +5482,7 @@ enum {
|
|||
ALC700_FIXUP_INTEL_REFERENCE,
|
||||
ALC274_FIXUP_DELL_BIND_DACS,
|
||||
ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
|
||||
ALC298_FIXUP_TPT470_DOCK,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
|
@ -5556,6 +5593,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
|
||||
},
|
||||
[ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc269_fixup_pincfg_U7x7_headset_mic,
|
||||
},
|
||||
[ALC269_FIXUP_AMIC] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
|
@ -6271,6 +6312,12 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.chained = true,
|
||||
.chain_id = ALC274_FIXUP_DELL_BIND_DACS
|
||||
},
|
||||
[ALC298_FIXUP_TPT470_DOCK] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_tpt470_dock,
|
||||
.chained = true,
|
||||
.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
|
@ -6321,6 +6368,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
|
||||
SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
|
||||
SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
|
||||
SND_PCI_QUIRK(0x1028, 0x084b, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
|
||||
SND_PCI_QUIRK(0x1028, 0x084e, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
|
||||
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(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||
|
@ -6422,6 +6471,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
|
||||
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
||||
SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
|
||||
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
||||
|
@ -6450,8 +6500,16 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x222d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x222e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2245, "Thinkpad T470", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2246, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2247, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
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),
|
||||
|
@ -6472,7 +6530,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x505d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x505f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x5062, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
|
||||
SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
|
||||
SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
|
||||
|
@ -6734,6 +6797,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|||
{0x12, 0xb7a60130},
|
||||
{0x14, 0x90170110},
|
||||
{0x21, 0x02211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
{0x12, 0x90a60130},
|
||||
{0x14, 0x90170110},
|
||||
{0x14, 0x01011020},
|
||||
{0x21, 0x0221101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC256_STANDARD_PINS),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
|
||||
|
@ -6803,6 +6871,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|||
{0x12, 0x90a60120},
|
||||
{0x14, 0x90170110},
|
||||
{0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
{0x12, 0xb7a60130},
|
||||
{0x14, 0x90170110},
|
||||
{0x21, 0x04211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x15, 0x04211040},
|
||||
|
|
|
@ -347,17 +347,20 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
|
|||
int validx, int *value_ret)
|
||||
{
|
||||
struct snd_usb_audio *chip = cval->head.mixer->chip;
|
||||
unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
|
||||
/* enough space for one range */
|
||||
unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
|
||||
unsigned char *val;
|
||||
int idx = 0, ret, size;
|
||||
int idx = 0, ret, val_size, size;
|
||||
__u8 bRequest;
|
||||
|
||||
val_size = uac2_ctl_value_size(cval->val_type);
|
||||
|
||||
if (request == UAC_GET_CUR) {
|
||||
bRequest = UAC2_CS_CUR;
|
||||
size = uac2_ctl_value_size(cval->val_type);
|
||||
size = val_size;
|
||||
} else {
|
||||
bRequest = UAC2_CS_RANGE;
|
||||
size = sizeof(buf);
|
||||
size = sizeof(__u16) + 3 * val_size;
|
||||
}
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
@ -390,16 +393,17 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
|
|||
val = buf + sizeof(__u16);
|
||||
break;
|
||||
case UAC_GET_MAX:
|
||||
val = buf + sizeof(__u16) * 2;
|
||||
val = buf + sizeof(__u16) + val_size;
|
||||
break;
|
||||
case UAC_GET_RES:
|
||||
val = buf + sizeof(__u16) * 3;
|
||||
val = buf + sizeof(__u16) + val_size * 2;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
|
||||
*value_ret = convert_signed_value(cval,
|
||||
snd_usb_combine_bytes(val, val_size));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -352,6 +352,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
|
|||
ep = 0x86;
|
||||
iface = usb_ifnum_to_if(dev, 2);
|
||||
|
||||
if (!iface || iface->num_altsetting == 0)
|
||||
return -EINVAL;
|
||||
|
||||
alts = &iface->altsetting[1];
|
||||
goto add_sync_ep;
|
||||
case USB_ID(0x1397, 0x0002):
|
||||
ep = 0x81;
|
||||
iface = usb_ifnum_to_if(dev, 1);
|
||||
|
||||
if (!iface || iface->num_altsetting == 0)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -1363,8 +1363,11 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
|
|||
return SNDRV_PCM_FMTBIT_DSD_U32_BE;
|
||||
break;
|
||||
|
||||
/* Amanero Combo384 USB interface with native DSD support */
|
||||
case USB_ID(0x16d0, 0x071a):
|
||||
/* Amanero Combo384 USB based DACs with native DSD support */
|
||||
case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */
|
||||
case USB_ID(0x2ab6, 0x0004): /* T+A DAC8DSD-V2.0, MP1000E-V2.0, MP2000R-V2.0, MP2500R-V2.0, MP3100HV-V2.0 */
|
||||
case USB_ID(0x2ab6, 0x0005): /* T+A USB HD Audio 1 */
|
||||
case USB_ID(0x2ab6, 0x0006): /* T+A USB HD Audio 2 */
|
||||
if (fp->altsetting == 2) {
|
||||
switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) {
|
||||
case 0x199:
|
||||
|
|
Loading…
Reference in New Issue