Merge tag 'sound-fix-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Here are a few fixes that have landed after the previous pull request. All are driver specific fixes including: - error/int value fixes in OXFW, - Intel Skylake HD-audio HDMI codec support, - Additional HD-audio Realtek codecs and AD1986A codec fixes/quirks, - a few more DSD support and a quirk for Arcam rPAC in usb-audio, - a typo fix for Scarlett 6i6, - fixes for new ASIHPI firmware, - ASoC Exynos7 cleanups, - Intel ACPI support, and - a fix for PCM512 register cache sync" * tag 'sound-fix-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (24 commits) ALSA: usb-audio: extend KEF X300A FU 10 tweak to Arcam rPAC ALSA: hda/realtek - New codec support for ALC298 ALSA: asihpi: update to HPI version 4.14 ALSA: asihpi: increase tuner pad cache size ALSA: asihpi: relax firmware version check ALSA: usb-audio: Fix Scarlett 6i6 initialization typo ALSA: hda - Add quirk for Packard Bell EasyNote MX65 ALSA: usb-audio: add native DSD support for Matrix Audio DACs ALSA: hda/realtek - New codec support for ALC256 ALSA: hda/realtek - Add new Dell desktop for ALC3234 headset mode ASoC: Intel: fix possible acpi enumeration panic ALSA: hda/hdmi - apply Haswell fix-ups to Skylake display codec ASoC: Intel: fix return value check in sst_acpi_probe() ALSA: hda - Make add_stereo_mix_input flag tristate ALSA: hda - Create capture source ctls when stereo mix input is added ALSA: hda - Fix typos in snd_hda_get_int_hint() kerneldoc comments ALSA: hda - add codec ID for Skylake display audio codec ALSA: oxfw: some signedness bugs ALSA: oxfw: fix detect_loud_models() return value ASoC: rt5677: add REGMAP_I2C and REGMAP_IRQ dependency ...
This commit is contained in:
@@ -1367,9 +1367,9 @@ struct hpi_control_cache_single {
|
||||
struct hpi_control_cache_pad {
|
||||
struct hpi_control_cache_info i;
|
||||
u32 field_valid_flags;
|
||||
u8 c_channel[8];
|
||||
u8 c_artist[40];
|
||||
u8 c_title[40];
|
||||
u8 c_channel[40];
|
||||
u8 c_artist[100];
|
||||
u8 c_title[100];
|
||||
u8 c_comment[200];
|
||||
u32 pTY;
|
||||
u32 pI;
|
||||
|
||||
@@ -11,13 +11,13 @@ Production releases have even minor version.
|
||||
/* Use single digits for versions less that 10 to avoid octal. */
|
||||
/* *** HPI_VER is the only edit required to update version *** */
|
||||
/** HPI version */
|
||||
#define HPI_VER HPI_VERSION_CONSTRUCTOR(4, 10, 1)
|
||||
#define HPI_VER HPI_VERSION_CONSTRUCTOR(4, 14, 3)
|
||||
|
||||
/** HPI version string in dotted decimal format */
|
||||
#define HPI_VER_STRING "4.10.01"
|
||||
#define HPI_VER_STRING "4.14.03"
|
||||
|
||||
/** Library version as documented in hpi-api-versions.txt */
|
||||
#define HPI_LIB_VER HPI_VERSION_CONSTRUCTOR(10, 2, 0)
|
||||
#define HPI_LIB_VER HPI_VERSION_CONSTRUCTOR(10, 4, 0)
|
||||
|
||||
/** Construct hpi version number from major, minor, release numbers */
|
||||
#define HPI_VERSION_CONSTRUCTOR(maj, min, r) ((maj << 16) + (min << 8) + r)
|
||||
|
||||
+12
-14
@@ -1,8 +1,9 @@
|
||||
/***********************************************************************/
|
||||
/**
|
||||
/***********************************************************************
|
||||
|
||||
AudioScience HPI driver
|
||||
Copyright (C) 1997-2011 AudioScience Inc. <support@audioscience.com>
|
||||
Functions for reading DSP code using hotplug firmware loader
|
||||
|
||||
Copyright (C) 1997-2014 AudioScience Inc. <support@audioscience.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of version 2 of the GNU General Public License as
|
||||
@@ -17,11 +18,7 @@
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
\file
|
||||
Functions for reading DSP code using
|
||||
hotplug firmware loader from individual dsp code files
|
||||
*/
|
||||
/***********************************************************************/
|
||||
***********************************************************************/
|
||||
#define SOURCEFILE_NAME "hpidspcd.c"
|
||||
#include "hpidspcd.h"
|
||||
#include "hpidebug.h"
|
||||
@@ -68,17 +65,18 @@ short hpi_dsp_code_open(u32 adapter, void *os_data, struct dsp_code *dsp_code,
|
||||
goto error2;
|
||||
}
|
||||
|
||||
if ((header.version >> 9) != (HPI_VER >> 9)) {
|
||||
/* Consider even and subsequent odd minor versions to be compatible */
|
||||
dev_err(&dev->dev, "Incompatible firmware version DSP image %X != Driver %X\n",
|
||||
if (HPI_VER_MAJOR(header.version) != HPI_VER_MAJOR(HPI_VER)) {
|
||||
/* Major version change probably means Host-DSP protocol change */
|
||||
dev_err(&dev->dev,
|
||||
"Incompatible firmware version DSP image %X != Driver %X\n",
|
||||
header.version, HPI_VER);
|
||||
goto error2;
|
||||
}
|
||||
|
||||
if (header.version != HPI_VER) {
|
||||
dev_info(&dev->dev,
|
||||
"Firmware: release version mismatch DSP image %X != Driver %X\n",
|
||||
header.version, HPI_VER);
|
||||
dev_warn(&dev->dev,
|
||||
"Firmware version mismatch: DSP image %X != Driver %X\n",
|
||||
header.version, HPI_VER);
|
||||
}
|
||||
|
||||
HPI_DEBUG_LOG(DEBUG, "dsp code %s opened\n", fw_name);
|
||||
|
||||
@@ -3218,12 +3218,13 @@ static int create_input_ctls(struct hda_codec *codec)
|
||||
}
|
||||
|
||||
/* add stereo mix when explicitly enabled via hint */
|
||||
if (mixer && spec->add_stereo_mix_input &&
|
||||
snd_hda_get_bool_hint(codec, "add_stereo_mix_input") > 0) {
|
||||
if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
|
||||
err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
|
||||
"Stereo Mix", 0);
|
||||
if (err < 0)
|
||||
return err;
|
||||
else
|
||||
spec->suppress_auto_mic = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -4542,9 +4543,8 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
||||
|
||||
/* add stereo mix if available and not enabled yet */
|
||||
if (!spec->auto_mic && spec->mixer_nid &&
|
||||
spec->add_stereo_mix_input &&
|
||||
spec->input_mux.num_items > 1 &&
|
||||
snd_hda_get_bool_hint(codec, "add_stereo_mix_input") < 0) {
|
||||
spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
|
||||
spec->input_mux.num_items > 1) {
|
||||
err = parse_capture_source(codec, spec->mixer_nid,
|
||||
CFG_IDX_MIX, spec->num_all_adcs,
|
||||
"Stereo Mix", 0);
|
||||
|
||||
@@ -222,7 +222,7 @@ struct hda_gen_spec {
|
||||
unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */
|
||||
unsigned int indep_hp:1; /* independent HP supported */
|
||||
unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */
|
||||
unsigned int add_stereo_mix_input:1; /* add aamix as a capture src */
|
||||
unsigned int add_stereo_mix_input:2; /* add aamix as a capture src */
|
||||
unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */
|
||||
unsigned int power_down_unused:1; /* power down unused widgets */
|
||||
unsigned int dac_min_mute:1; /* minimal = mute for DACs */
|
||||
@@ -291,6 +291,13 @@ struct hda_gen_spec {
|
||||
struct hda_jack_callback *cb);
|
||||
};
|
||||
|
||||
/* values for add_stereo_mix_input flag */
|
||||
enum {
|
||||
HDA_HINT_STEREO_MIX_DISABLE, /* No stereo mix input */
|
||||
HDA_HINT_STEREO_MIX_ENABLE, /* Add stereo mix input */
|
||||
HDA_HINT_STEREO_MIX_AUTO, /* Add only if auto-mic is disabled */
|
||||
};
|
||||
|
||||
int snd_hda_gen_spec_init(struct hda_gen_spec *spec);
|
||||
|
||||
int snd_hda_gen_init(struct hda_codec *codec);
|
||||
|
||||
@@ -468,7 +468,7 @@ int snd_hda_get_bool_hint(struct hda_codec *codec, const char *key)
|
||||
EXPORT_SYMBOL_GPL(snd_hda_get_bool_hint);
|
||||
|
||||
/**
|
||||
* snd_hda_get_bool_hint - Get a boolean hint value
|
||||
* snd_hda_get_int_hint - Get an integer hint value
|
||||
* @codec: the HDA codec
|
||||
* @key: the hint key string
|
||||
* @valp: pointer to store a value
|
||||
|
||||
@@ -195,7 +195,8 @@ static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
|
||||
codec->no_sticky_stream = 1;
|
||||
|
||||
spec->gen.indep_hp = indep_hp;
|
||||
spec->gen.add_stereo_mix_input = 1;
|
||||
if (!spec->gen.add_stereo_mix_input)
|
||||
spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
|
||||
|
||||
err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
|
||||
if (err < 0)
|
||||
@@ -256,6 +257,18 @@ static void ad1986a_fixup_eapd(struct hda_codec *codec,
|
||||
}
|
||||
}
|
||||
|
||||
/* enable stereo-mix input for avoiding regression on KDE (bko#88251) */
|
||||
static void ad1986a_fixup_eapd_mix_in(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
struct ad198x_spec *spec = codec->spec;
|
||||
|
||||
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
||||
ad1986a_fixup_eapd(codec, fix, action);
|
||||
spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_ENABLE;
|
||||
}
|
||||
}
|
||||
|
||||
enum {
|
||||
AD1986A_FIXUP_INV_JACK_DETECT,
|
||||
AD1986A_FIXUP_ULTRA,
|
||||
@@ -264,6 +277,8 @@ enum {
|
||||
AD1986A_FIXUP_LAPTOP,
|
||||
AD1986A_FIXUP_LAPTOP_IMIC,
|
||||
AD1986A_FIXUP_EAPD,
|
||||
AD1986A_FIXUP_EAPD_MIX_IN,
|
||||
AD1986A_FIXUP_EASYNOTE,
|
||||
};
|
||||
|
||||
static const struct hda_fixup ad1986a_fixups[] = {
|
||||
@@ -328,6 +343,30 @@ static const struct hda_fixup ad1986a_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = ad1986a_fixup_eapd,
|
||||
},
|
||||
[AD1986A_FIXUP_EAPD_MIX_IN] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = ad1986a_fixup_eapd_mix_in,
|
||||
},
|
||||
[AD1986A_FIXUP_EASYNOTE] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x1a, 0x0421402f }, /* headphone */
|
||||
{ 0x1b, 0x90170110 }, /* speaker */
|
||||
{ 0x1c, 0x411111f0 }, /* N/A */
|
||||
{ 0x1d, 0x90a70130 }, /* int mic */
|
||||
{ 0x1e, 0x411111f0 }, /* N/A */
|
||||
{ 0x1f, 0x04a19040 }, /* mic */
|
||||
{ 0x20, 0x411111f0 }, /* N/A */
|
||||
{ 0x21, 0x411111f0 }, /* N/A */
|
||||
{ 0x22, 0x411111f0 }, /* N/A */
|
||||
{ 0x23, 0x411111f0 }, /* N/A */
|
||||
{ 0x24, 0x411111f0 }, /* N/A */
|
||||
{ 0x25, 0x411111f0 }, /* N/A */
|
||||
{}
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = AD1986A_FIXUP_EAPD_MIX_IN,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
|
||||
@@ -341,6 +380,7 @@ static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP),
|
||||
SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG),
|
||||
SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA),
|
||||
SND_PCI_QUIRK(0x1631, 0xc022, "PackardBell EasyNote MX65", AD1986A_FIXUP_EASYNOTE),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2066, "Lenovo N100", AD1986A_FIXUP_INV_JACK_DETECT),
|
||||
SND_PCI_QUIRK(0x17aa, 0x1011, "Lenovo M55", AD1986A_FIXUP_3STACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x1017, "Lenovo A60", AD1986A_FIXUP_3STACK),
|
||||
|
||||
@@ -855,14 +855,14 @@ static int patch_conexant_auto(struct hda_codec *codec)
|
||||
case 0x14f15045:
|
||||
codec->single_adc_amp = 1;
|
||||
spec->gen.mixer_nid = 0x17;
|
||||
spec->gen.add_stereo_mix_input = 1;
|
||||
spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
|
||||
snd_hda_pick_fixup(codec, cxt5045_fixup_models,
|
||||
cxt5045_fixups, cxt_fixups);
|
||||
break;
|
||||
case 0x14f15047:
|
||||
codec->pin_amp_workaround = 1;
|
||||
spec->gen.mixer_nid = 0x19;
|
||||
spec->gen.add_stereo_mix_input = 1;
|
||||
spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
|
||||
snd_hda_pick_fixup(codec, cxt5047_fixup_models,
|
||||
cxt5047_fixups, cxt_fixups);
|
||||
break;
|
||||
|
||||
@@ -47,7 +47,9 @@ MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
|
||||
|
||||
#define is_haswell(codec) ((codec)->vendor_id == 0x80862807)
|
||||
#define is_broadwell(codec) ((codec)->vendor_id == 0x80862808)
|
||||
#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec))
|
||||
#define is_skylake(codec) ((codec)->vendor_id == 0x80862809)
|
||||
#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec) \
|
||||
|| is_skylake(codec))
|
||||
|
||||
#define is_valleyview(codec) ((codec)->vendor_id == 0x80862882)
|
||||
#define is_cherryview(codec) ((codec)->vendor_id == 0x80862883)
|
||||
@@ -3365,6 +3367,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
|
||||
{ .id = 0x80862806, .name = "PantherPoint HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862807, .name = "Haswell HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862808, .name = "Broadwell HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862809, .name = "Skylake HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862880, .name = "CedarTrail HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862882, .name = "Valleyview2 HDMI", .patch = patch_generic_hdmi },
|
||||
{ .id = 0x80862883, .name = "Braswell HDMI", .patch = patch_generic_hdmi },
|
||||
@@ -3425,6 +3428,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862805");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862806");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862807");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862808");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862809");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862880");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862882");
|
||||
MODULE_ALIAS("snd-hda-codec-id:80862883");
|
||||
|
||||
@@ -321,10 +321,12 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
|
||||
break;
|
||||
case 0x10ec0233:
|
||||
case 0x10ec0255:
|
||||
case 0x10ec0256:
|
||||
case 0x10ec0282:
|
||||
case 0x10ec0283:
|
||||
case 0x10ec0286:
|
||||
case 0x10ec0288:
|
||||
case 0x10ec0298:
|
||||
alc_update_coef_idx(codec, 0x10, 1<<9, 0);
|
||||
break;
|
||||
case 0x10ec0285:
|
||||
@@ -2659,7 +2661,9 @@ enum {
|
||||
ALC269_TYPE_ALC284,
|
||||
ALC269_TYPE_ALC285,
|
||||
ALC269_TYPE_ALC286,
|
||||
ALC269_TYPE_ALC298,
|
||||
ALC269_TYPE_ALC255,
|
||||
ALC269_TYPE_ALC256,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -2686,7 +2690,9 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
|
||||
case ALC269_TYPE_ALC282:
|
||||
case ALC269_TYPE_ALC283:
|
||||
case ALC269_TYPE_ALC286:
|
||||
case ALC269_TYPE_ALC298:
|
||||
case ALC269_TYPE_ALC255:
|
||||
case ALC269_TYPE_ALC256:
|
||||
ssids = alc269_ssids;
|
||||
break;
|
||||
default:
|
||||
@@ -4829,6 +4835,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
@@ -5417,9 +5424,15 @@ static int patch_alc269(struct hda_codec *codec)
|
||||
spec->codec_variant = ALC269_TYPE_ALC286;
|
||||
spec->shutup = alc286_shutup;
|
||||
break;
|
||||
case 0x10ec0298:
|
||||
spec->codec_variant = ALC269_TYPE_ALC298;
|
||||
break;
|
||||
case 0x10ec0255:
|
||||
spec->codec_variant = ALC269_TYPE_ALC255;
|
||||
break;
|
||||
case 0x10ec0256:
|
||||
spec->codec_variant = ALC269_TYPE_ALC256;
|
||||
break;
|
||||
}
|
||||
|
||||
if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
|
||||
@@ -6341,6 +6354,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
|
||||
{ .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0235, .name = "ALC233", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0256, .name = "ALC256", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
|
||||
{ .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
|
||||
{ .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
|
||||
@@ -6360,6 +6374,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
|
||||
{ .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0293, .name = "ALC293", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0298, .name = "ALC298", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
|
||||
.patch = patch_alc861 },
|
||||
{ .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
|
||||
|
||||
@@ -137,7 +137,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec)
|
||||
spec->gen.indep_hp = 1;
|
||||
spec->gen.keep_eapd_on = 1;
|
||||
spec->gen.pcm_playback_hook = via_playback_pcm_hook;
|
||||
spec->gen.add_stereo_mix_input = 1;
|
||||
spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
|
||||
return spec;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user