diff options
| -rw-r--r-- | sound/firewire/oxfw/oxfw-pcm.c | 6 | ||||
| -rw-r--r-- | sound/firewire/oxfw/oxfw-proc.c | 2 | ||||
| -rw-r--r-- | sound/firewire/oxfw/oxfw-stream.c | 3 | ||||
| -rw-r--r-- | sound/firewire/oxfw/oxfw.c | 2 | ||||
| -rw-r--r-- | sound/pci/asihpi/hpi_internal.h | 6 | ||||
| -rw-r--r-- | sound/pci/asihpi/hpi_version.h | 6 | ||||
| -rw-r--r-- | sound/pci/asihpi/hpidspcd.c | 26 | ||||
| -rw-r--r-- | sound/pci/hda/hda_generic.c | 10 | ||||
| -rw-r--r-- | sound/pci/hda/hda_generic.h | 9 | ||||
| -rw-r--r-- | sound/pci/hda/hda_sysfs.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_analog.c | 42 | ||||
| -rw-r--r-- | sound/pci/hda/patch_conexant.c | 4 | ||||
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 6 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 15 | ||||
| -rw-r--r-- | sound/pci/hda/patch_via.c | 2 | ||||
| -rw-r--r-- | sound/soc/atmel/atmel_ssc_dai.c | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/Kconfig | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/pcm512x-i2c.c | 7 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5645.c | 4 | ||||
| -rw-r--r-- | sound/soc/intel/sst/sst_acpi.c | 10 | ||||
| -rw-r--r-- | sound/soc/samsung/i2s.c | 2 | ||||
| -rw-r--r-- | sound/usb/mixer_maps.c | 15 | ||||
| -rw-r--r-- | sound/usb/mixer_scarlett.c | 2 | ||||
| -rw-r--r-- | sound/usb/quirks.c | 5 | 
24 files changed, 139 insertions, 51 deletions
| diff --git a/sound/firewire/oxfw/oxfw-pcm.c b/sound/firewire/oxfw/oxfw-pcm.c index 9bc556b15a92..67ade0775a5b 100644 --- a/sound/firewire/oxfw/oxfw-pcm.c +++ b/sound/firewire/oxfw/oxfw-pcm.c @@ -19,7 +19,7 @@ static int hw_rule_rate(struct snd_pcm_hw_params *params,  		.min = UINT_MAX, .max = 0, .integer = 1  	};  	struct snd_oxfw_stream_formation formation; -	unsigned int i, err; +	int i, err;  	for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {  		if (formats[i] == NULL) @@ -47,7 +47,7 @@ static int hw_rule_channels(struct snd_pcm_hw_params *params,  	const struct snd_interval *r =  		hw_param_interval_c(params, SNDRV_PCM_HW_PARAM_RATE);  	struct snd_oxfw_stream_formation formation; -	unsigned int i, j, err; +	int i, j, err;  	unsigned int count, list[SND_OXFW_STREAM_FORMAT_ENTRIES] = {0};  	count = 0; @@ -80,7 +80,7 @@ static int hw_rule_channels(struct snd_pcm_hw_params *params,  static void limit_channels_and_rates(struct snd_pcm_hardware *hw, u8 **formats)  {  	struct snd_oxfw_stream_formation formation; -	unsigned int i, err; +	int i, err;  	hw->channels_min = UINT_MAX;  	hw->channels_max = 0; diff --git a/sound/firewire/oxfw/oxfw-proc.c b/sound/firewire/oxfw/oxfw-proc.c index 604808e5526d..8ba4f9f262b8 100644 --- a/sound/firewire/oxfw/oxfw-proc.c +++ b/sound/firewire/oxfw/oxfw-proc.c @@ -15,7 +15,7 @@ static void proc_read_formation(struct snd_info_entry *entry,  	struct snd_oxfw_stream_formation formation, curr;  	u8 *format;  	char flag; -	unsigned int i, err; +	int i, err;  	/* Show input. */  	err = snd_oxfw_stream_get_current_formation(oxfw, diff --git a/sound/firewire/oxfw/oxfw-stream.c b/sound/firewire/oxfw/oxfw-stream.c index b77cf80f1678..bda845afb470 100644 --- a/sound/firewire/oxfw/oxfw-stream.c +++ b/sound/firewire/oxfw/oxfw-stream.c @@ -61,7 +61,8 @@ static int set_stream_format(struct snd_oxfw *oxfw, struct amdtp_stream *s,  	u8 **formats;  	struct snd_oxfw_stream_formation formation;  	enum avc_general_plug_dir dir; -	unsigned int i, err, len; +	unsigned int len; +	int i, err;  	if (s == &oxfw->tx_stream) {  		formats = oxfw->tx_stream_formats; diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c index cf1d0b55e827..60e5cad0531a 100644 --- a/sound/firewire/oxfw/oxfw.c +++ b/sound/firewire/oxfw/oxfw.c @@ -43,7 +43,7 @@ static bool detect_loud_models(struct fw_unit *unit)  	err = fw_csr_string(unit->directory, CSR_MODEL,  			    model, sizeof(model));  	if (err < 0) -		return err; +		return false;  	for (i = 0; i < ARRAY_SIZE(models); i++) {  		if (strcmp(models[i], model) == 0) diff --git a/sound/pci/asihpi/hpi_internal.h b/sound/pci/asihpi/hpi_internal.h index 48380ce2c81b..aeea679b2281 100644 --- a/sound/pci/asihpi/hpi_internal.h +++ b/sound/pci/asihpi/hpi_internal.h @@ -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; diff --git a/sound/pci/asihpi/hpi_version.h b/sound/pci/asihpi/hpi_version.h index e9146e53bd50..6623ab110038 100644 --- a/sound/pci/asihpi/hpi_version.h +++ b/sound/pci/asihpi/hpi_version.h @@ -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) diff --git a/sound/pci/asihpi/hpidspcd.c b/sound/pci/asihpi/hpidspcd.c index ac9163770013..3603c24f34d2 100644 --- a/sound/pci/asihpi/hpidspcd.c +++ b/sound/pci/asihpi/hpidspcd.c @@ -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); diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 63b69f750d8e..b680b4ec6331 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -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); diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h index 61dd5153f512..3d852660443a 100644 --- a/sound/pci/hda/hda_generic.h +++ b/sound/pci/hda/hda_generic.h @@ -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); diff --git a/sound/pci/hda/hda_sysfs.c b/sound/pci/hda/hda_sysfs.c index bef721592c3a..ccc962a1699f 100644 --- a/sound/pci/hda/hda_sysfs.c +++ b/sound/pci/hda/hda_sysfs.c @@ -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 diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index c81b715d6c98..a9d78e275138 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -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), diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index e9ebc7bd752c..fd3ed18670e9 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c @@ -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; diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 9dc9cf8c90e9..5f13d2d18079 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -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"); diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a722067c491c..65f1f4e18ea5 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -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 }, diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 6c206b6c8d65..3de6d3d779c9 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -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;  } diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c index b1cc2a4a7fc0..99ff35e2a25d 100644 --- a/sound/soc/atmel/atmel_ssc_dai.c +++ b/sound/soc/atmel/atmel_ssc_dai.c @@ -267,7 +267,7 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream *substream,  	if (!ssc_p->dir_mask) {  		if (ssc_p->initialized) {  			/* Shutdown the SSC clock. */ -			pr_debug("atmel_ssc_dau: Stopping clock\n"); +			pr_debug("atmel_ssc_dai: Stopping clock\n");  			clk_disable(ssc_p->ssc->clk);  			free_irq(ssc_p->ssc->irq, ssc_p); diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 883c5778b309..8349f982a586 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -520,6 +520,8 @@ config SND_SOC_RT5670  config SND_SOC_RT5677  	tristate +	select REGMAP_I2C +	select REGMAP_IRQ  config SND_SOC_RT5677_SPI  	tristate diff --git a/sound/soc/codecs/pcm512x-i2c.c b/sound/soc/codecs/pcm512x-i2c.c index 4d62230bd378..d0547fa275fc 100644 --- a/sound/soc/codecs/pcm512x-i2c.c +++ b/sound/soc/codecs/pcm512x-i2c.c @@ -24,8 +24,13 @@ static int pcm512x_i2c_probe(struct i2c_client *i2c,  			     const struct i2c_device_id *id)  {  	struct regmap *regmap; +	struct regmap_config config = pcm512x_regmap; -	regmap = devm_regmap_init_i2c(i2c, &pcm512x_regmap); +	/* msb needs to be set to enable auto-increment of addresses */ +	config.read_flag_mask = 0x80; +	config.write_flag_mask = 0x80; + +	regmap = devm_regmap_init_i2c(i2c, &config);  	if (IS_ERR(regmap))  		return PTR_ERR(regmap); diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c index a7789a8726e3..27141e2df878 100644 --- a/sound/soc/codecs/rt5645.c +++ b/sound/soc/codecs/rt5645.c @@ -2209,6 +2209,10 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec)  	int gpio_state, jack_type = 0;  	unsigned int val; +	if (!gpio_is_valid(rt5645->pdata.hp_det_gpio)) { +		dev_err(codec->dev, "invalid gpio\n"); +		return -EINVAL; +	}  	gpio_state = gpio_get_value(rt5645->pdata.hp_det_gpio);  	dev_dbg(codec->dev, "gpio = %d(%d)\n", rt5645->pdata.hp_det_gpio, diff --git a/sound/soc/intel/sst/sst_acpi.c b/sound/soc/intel/sst/sst_acpi.c index 31124aa4434e..3abc29e8a928 100644 --- a/sound/soc/intel/sst/sst_acpi.c +++ b/sound/soc/intel/sst/sst_acpi.c @@ -43,7 +43,7 @@  #include "sst.h"  struct sst_machines { -	char codec_id[32]; +	char *codec_id;  	char board[32];  	char machine[32];  	void (*machine_quirk)(void); @@ -277,16 +277,16 @@ int sst_acpi_probe(struct platform_device *pdev)  	dev_dbg(dev, "ACPI device id: %x\n", dev_id);  	plat_dev = platform_device_register_data(dev, mach->pdata->platform, -1, NULL, 0); -	if (plat_dev == NULL) { +	if (IS_ERR(plat_dev)) {  		dev_err(dev, "Failed to create machine device: %s\n", mach->pdata->platform); -		return -ENODEV; +		return PTR_ERR(plat_dev);  	}  	/* Create platform device for sst machine driver */  	mdev = platform_device_register_data(dev, mach->machine, -1, NULL, 0); -	if (mdev == NULL) { +	if (IS_ERR(mdev)) {  		dev_err(dev, "Failed to create machine device: %s\n", mach->machine); -		return -ENODEV; +		return PTR_ERR(mdev);  	}  	ret = sst_alloc_drv_context(&ctx, dev, dev_id); diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index b1a7c5bce4a1..b5a80c528d86 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -1261,6 +1261,8 @@ static int samsung_i2s_probe(struct platform_device *pdev)  			ret = -ENOMEM;  			goto err;  		} + +		sec_dai->variant_regs = pri_dai->variant_regs;  		sec_dai->dma_playback.dma_addr = regs_base + I2STXDS;  		sec_dai->dma_playback.ch_name = "tx-sec"; diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c index 1994d41348f8..b703cb3cda19 100644 --- a/sound/usb/mixer_maps.c +++ b/sound/usb/mixer_maps.c @@ -333,8 +333,11 @@ static struct usbmix_name_map gamecom780_map[] = {  	{}  }; -static const struct usbmix_name_map kef_x300a_map[] = { -	{ 10, NULL }, /* firmware locks up (?) when we try to access this FU */ +/* some (all?) SCMS USB3318 devices are affected by a firmware lock up + * when anything attempts to access FU 10 (control) + */ +static const struct usbmix_name_map scms_usb3318_map[] = { +	{ 10, NULL },  	{ 0 }  }; @@ -434,8 +437,14 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {  		.map = ebox44_map,  	},  	{ +		/* KEF X300A */  		.id = USB_ID(0x27ac, 0x1000), -		.map = kef_x300a_map, +		.map = scms_usb3318_map, +	}, +	{ +		/* Arcam rPAC */ +		.id = USB_ID(0x25c4, 0x0003), +		.map = scms_usb3318_map,  	},  	{ 0 } /* terminator */  }; diff --git a/sound/usb/mixer_scarlett.c b/sound/usb/mixer_scarlett.c index 9109652b88b9..7438e7c4a842 100644 --- a/sound/usb/mixer_scarlett.c +++ b/sound/usb/mixer_scarlett.c @@ -655,7 +655,7 @@ static struct scarlett_device_info s6i6_info = {  		.names = NULL  	}, -	.num_controls = 0, +	.num_controls = 9,  	.controls = {  		{ .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },  		{ .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone" }, diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 4dbfb3d18ee2..a7398412310b 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1245,8 +1245,9 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,  	/* XMOS based USB DACs */  	switch (chip->usb_id) { -	/* iFi Audio micro/nano iDSD */ -	case USB_ID(0x20b1, 0x3008): +	case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */ +	case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */ +	case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */  		if (fp->altsetting == 2)  			return SNDRV_PCM_FMTBIT_DSD_U32_BE;  		break; | 
