aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-19 21:07:17 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-19 21:07:17 -0500
commit20e471fd34d1f79bed65fdc1bf4ad090f70472a5 (patch)
tree7e74e4ca71a90c6b39392dacab07e26feedb8185 /sound
parented55635e2e4df3169f21ae4047004b7235de956e (diff)
parentd70a1b9893f820fdbcdffac408c909c50f2e6b43 (diff)
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 ...
Diffstat (limited to 'sound')
-rw-r--r--sound/firewire/oxfw/oxfw-pcm.c6
-rw-r--r--sound/firewire/oxfw/oxfw-proc.c2
-rw-r--r--sound/firewire/oxfw/oxfw-stream.c3
-rw-r--r--sound/firewire/oxfw/oxfw.c2
-rw-r--r--sound/pci/asihpi/hpi_internal.h6
-rw-r--r--sound/pci/asihpi/hpi_version.h6
-rw-r--r--sound/pci/asihpi/hpidspcd.c26
-rw-r--r--sound/pci/hda/hda_generic.c10
-rw-r--r--sound/pci/hda/hda_generic.h9
-rw-r--r--sound/pci/hda/hda_sysfs.c2
-rw-r--r--sound/pci/hda/patch_analog.c42
-rw-r--r--sound/pci/hda/patch_conexant.c4
-rw-r--r--sound/pci/hda/patch_hdmi.c6
-rw-r--r--sound/pci/hda/patch_realtek.c15
-rw-r--r--sound/pci/hda/patch_via.c2
-rw-r--r--sound/soc/atmel/atmel_ssc_dai.c2
-rw-r--r--sound/soc/codecs/Kconfig2
-rw-r--r--sound/soc/codecs/pcm512x-i2c.c7
-rw-r--r--sound/soc/codecs/rt5645.c4
-rw-r--r--sound/soc/intel/sst/sst_acpi.c10
-rw-r--r--sound/soc/samsung/i2s.c2
-rw-r--r--sound/usb/mixer_maps.c15
-rw-r--r--sound/usb/mixer_scarlett.c2
-rw-r--r--sound/usb/quirks.c5
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,
19 .min = UINT_MAX, .max = 0, .integer = 1 19 .min = UINT_MAX, .max = 0, .integer = 1
20 }; 20 };
21 struct snd_oxfw_stream_formation formation; 21 struct snd_oxfw_stream_formation formation;
22 unsigned int i, err; 22 int i, err;
23 23
24 for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) { 24 for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {
25 if (formats[i] == NULL) 25 if (formats[i] == NULL)
@@ -47,7 +47,7 @@ static int hw_rule_channels(struct snd_pcm_hw_params *params,
47 const struct snd_interval *r = 47 const struct snd_interval *r =
48 hw_param_interval_c(params, SNDRV_PCM_HW_PARAM_RATE); 48 hw_param_interval_c(params, SNDRV_PCM_HW_PARAM_RATE);
49 struct snd_oxfw_stream_formation formation; 49 struct snd_oxfw_stream_formation formation;
50 unsigned int i, j, err; 50 int i, j, err;
51 unsigned int count, list[SND_OXFW_STREAM_FORMAT_ENTRIES] = {0}; 51 unsigned int count, list[SND_OXFW_STREAM_FORMAT_ENTRIES] = {0};
52 52
53 count = 0; 53 count = 0;
@@ -80,7 +80,7 @@ static int hw_rule_channels(struct snd_pcm_hw_params *params,
80static void limit_channels_and_rates(struct snd_pcm_hardware *hw, u8 **formats) 80static void limit_channels_and_rates(struct snd_pcm_hardware *hw, u8 **formats)
81{ 81{
82 struct snd_oxfw_stream_formation formation; 82 struct snd_oxfw_stream_formation formation;
83 unsigned int i, err; 83 int i, err;
84 84
85 hw->channels_min = UINT_MAX; 85 hw->channels_min = UINT_MAX;
86 hw->channels_max = 0; 86 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,
15 struct snd_oxfw_stream_formation formation, curr; 15 struct snd_oxfw_stream_formation formation, curr;
16 u8 *format; 16 u8 *format;
17 char flag; 17 char flag;
18 unsigned int i, err; 18 int i, err;
19 19
20 /* Show input. */ 20 /* Show input. */
21 err = snd_oxfw_stream_get_current_formation(oxfw, 21 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,
61 u8 **formats; 61 u8 **formats;
62 struct snd_oxfw_stream_formation formation; 62 struct snd_oxfw_stream_formation formation;
63 enum avc_general_plug_dir dir; 63 enum avc_general_plug_dir dir;
64 unsigned int i, err, len; 64 unsigned int len;
65 int i, err;
65 66
66 if (s == &oxfw->tx_stream) { 67 if (s == &oxfw->tx_stream) {
67 formats = oxfw->tx_stream_formats; 68 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)
43 err = fw_csr_string(unit->directory, CSR_MODEL, 43 err = fw_csr_string(unit->directory, CSR_MODEL,
44 model, sizeof(model)); 44 model, sizeof(model));
45 if (err < 0) 45 if (err < 0)
46 return err; 46 return false;
47 47
48 for (i = 0; i < ARRAY_SIZE(models); i++) { 48 for (i = 0; i < ARRAY_SIZE(models); i++) {
49 if (strcmp(models[i], model) == 0) 49 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 {
1367struct hpi_control_cache_pad { 1367struct hpi_control_cache_pad {
1368 struct hpi_control_cache_info i; 1368 struct hpi_control_cache_info i;
1369 u32 field_valid_flags; 1369 u32 field_valid_flags;
1370 u8 c_channel[8]; 1370 u8 c_channel[40];
1371 u8 c_artist[40]; 1371 u8 c_artist[100];
1372 u8 c_title[40]; 1372 u8 c_title[100];
1373 u8 c_comment[200]; 1373 u8 c_comment[200];
1374 u32 pTY; 1374 u32 pTY;
1375 u32 pI; 1375 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.
11/* Use single digits for versions less that 10 to avoid octal. */ 11/* Use single digits for versions less that 10 to avoid octal. */
12/* *** HPI_VER is the only edit required to update version *** */ 12/* *** HPI_VER is the only edit required to update version *** */
13/** HPI version */ 13/** HPI version */
14#define HPI_VER HPI_VERSION_CONSTRUCTOR(4, 10, 1) 14#define HPI_VER HPI_VERSION_CONSTRUCTOR(4, 14, 3)
15 15
16/** HPI version string in dotted decimal format */ 16/** HPI version string in dotted decimal format */
17#define HPI_VER_STRING "4.10.01" 17#define HPI_VER_STRING "4.14.03"
18 18
19/** Library version as documented in hpi-api-versions.txt */ 19/** Library version as documented in hpi-api-versions.txt */
20#define HPI_LIB_VER HPI_VERSION_CONSTRUCTOR(10, 2, 0) 20#define HPI_LIB_VER HPI_VERSION_CONSTRUCTOR(10, 4, 0)
21 21
22/** Construct hpi version number from major, minor, release numbers */ 22/** Construct hpi version number from major, minor, release numbers */
23#define HPI_VERSION_CONSTRUCTOR(maj, min, r) ((maj << 16) + (min << 8) + r) 23#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 @@
1/***********************************************************************/ 1/***********************************************************************
2/**
3 2
4 AudioScience HPI driver 3 AudioScience HPI driver
5 Copyright (C) 1997-2011 AudioScience Inc. <support@audioscience.com> 4 Functions for reading DSP code using hotplug firmware loader
5
6 Copyright (C) 1997-2014 AudioScience Inc. <support@audioscience.com>
6 7
7 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
8 it under the terms of version 2 of the GNU General Public License as 9 it under the terms of version 2 of the GNU General Public License as
@@ -17,11 +18,7 @@
17 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 20
20\file 21***********************************************************************/
21Functions for reading DSP code using
22hotplug firmware loader from individual dsp code files
23*/
24/***********************************************************************/
25#define SOURCEFILE_NAME "hpidspcd.c" 22#define SOURCEFILE_NAME "hpidspcd.c"
26#include "hpidspcd.h" 23#include "hpidspcd.h"
27#include "hpidebug.h" 24#include "hpidebug.h"
@@ -68,17 +65,18 @@ short hpi_dsp_code_open(u32 adapter, void *os_data, struct dsp_code *dsp_code,
68 goto error2; 65 goto error2;
69 } 66 }
70 67
71 if ((header.version >> 9) != (HPI_VER >> 9)) { 68 if (HPI_VER_MAJOR(header.version) != HPI_VER_MAJOR(HPI_VER)) {
72 /* Consider even and subsequent odd minor versions to be compatible */ 69 /* Major version change probably means Host-DSP protocol change */
73 dev_err(&dev->dev, "Incompatible firmware version DSP image %X != Driver %X\n", 70 dev_err(&dev->dev,
71 "Incompatible firmware version DSP image %X != Driver %X\n",
74 header.version, HPI_VER); 72 header.version, HPI_VER);
75 goto error2; 73 goto error2;
76 } 74 }
77 75
78 if (header.version != HPI_VER) { 76 if (header.version != HPI_VER) {
79 dev_info(&dev->dev, 77 dev_warn(&dev->dev,
80 "Firmware: release version mismatch DSP image %X != Driver %X\n", 78 "Firmware version mismatch: DSP image %X != Driver %X\n",
81 header.version, HPI_VER); 79 header.version, HPI_VER);
82 } 80 }
83 81
84 HPI_DEBUG_LOG(DEBUG, "dsp code %s opened\n", fw_name); 82 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)
3218 } 3218 }
3219 3219
3220 /* add stereo mix when explicitly enabled via hint */ 3220 /* add stereo mix when explicitly enabled via hint */
3221 if (mixer && spec->add_stereo_mix_input && 3221 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3222 snd_hda_get_bool_hint(codec, "add_stereo_mix_input") > 0) {
3223 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs, 3222 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3224 "Stereo Mix", 0); 3223 "Stereo Mix", 0);
3225 if (err < 0) 3224 if (err < 0)
3226 return err; 3225 return err;
3226 else
3227 spec->suppress_auto_mic = 1;
3227 } 3228 }
3228 3229
3229 return 0; 3230 return 0;
@@ -4542,9 +4543,8 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4542 4543
4543 /* add stereo mix if available and not enabled yet */ 4544 /* add stereo mix if available and not enabled yet */
4544 if (!spec->auto_mic && spec->mixer_nid && 4545 if (!spec->auto_mic && spec->mixer_nid &&
4545 spec->add_stereo_mix_input && 4546 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
4546 spec->input_mux.num_items > 1 && 4547 spec->input_mux.num_items > 1) {
4547 snd_hda_get_bool_hint(codec, "add_stereo_mix_input") < 0) {
4548 err = parse_capture_source(codec, spec->mixer_nid, 4548 err = parse_capture_source(codec, spec->mixer_nid,
4549 CFG_IDX_MIX, spec->num_all_adcs, 4549 CFG_IDX_MIX, spec->num_all_adcs,
4550 "Stereo Mix", 0); 4550 "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 {
222 unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */ 222 unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */
223 unsigned int indep_hp:1; /* independent HP supported */ 223 unsigned int indep_hp:1; /* independent HP supported */
224 unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */ 224 unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */
225 unsigned int add_stereo_mix_input:1; /* add aamix as a capture src */ 225 unsigned int add_stereo_mix_input:2; /* add aamix as a capture src */
226 unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */ 226 unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */
227 unsigned int power_down_unused:1; /* power down unused widgets */ 227 unsigned int power_down_unused:1; /* power down unused widgets */
228 unsigned int dac_min_mute:1; /* minimal = mute for DACs */ 228 unsigned int dac_min_mute:1; /* minimal = mute for DACs */
@@ -291,6 +291,13 @@ struct hda_gen_spec {
291 struct hda_jack_callback *cb); 291 struct hda_jack_callback *cb);
292}; 292};
293 293
294/* values for add_stereo_mix_input flag */
295enum {
296 HDA_HINT_STEREO_MIX_DISABLE, /* No stereo mix input */
297 HDA_HINT_STEREO_MIX_ENABLE, /* Add stereo mix input */
298 HDA_HINT_STEREO_MIX_AUTO, /* Add only if auto-mic is disabled */
299};
300
294int snd_hda_gen_spec_init(struct hda_gen_spec *spec); 301int snd_hda_gen_spec_init(struct hda_gen_spec *spec);
295 302
296int snd_hda_gen_init(struct hda_codec *codec); 303int 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)
468EXPORT_SYMBOL_GPL(snd_hda_get_bool_hint); 468EXPORT_SYMBOL_GPL(snd_hda_get_bool_hint);
469 469
470/** 470/**
471 * snd_hda_get_bool_hint - Get a boolean hint value 471 * snd_hda_get_int_hint - Get an integer hint value
472 * @codec: the HDA codec 472 * @codec: the HDA codec
473 * @key: the hint key string 473 * @key: the hint key string
474 * @valp: pointer to store a value 474 * @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)
195 codec->no_sticky_stream = 1; 195 codec->no_sticky_stream = 1;
196 196
197 spec->gen.indep_hp = indep_hp; 197 spec->gen.indep_hp = indep_hp;
198 spec->gen.add_stereo_mix_input = 1; 198 if (!spec->gen.add_stereo_mix_input)
199 spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
199 200
200 err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0); 201 err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
201 if (err < 0) 202 if (err < 0)
@@ -256,6 +257,18 @@ static void ad1986a_fixup_eapd(struct hda_codec *codec,
256 } 257 }
257} 258}
258 259
260/* enable stereo-mix input for avoiding regression on KDE (bko#88251) */
261static void ad1986a_fixup_eapd_mix_in(struct hda_codec *codec,
262 const struct hda_fixup *fix, int action)
263{
264 struct ad198x_spec *spec = codec->spec;
265
266 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
267 ad1986a_fixup_eapd(codec, fix, action);
268 spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_ENABLE;
269 }
270}
271
259enum { 272enum {
260 AD1986A_FIXUP_INV_JACK_DETECT, 273 AD1986A_FIXUP_INV_JACK_DETECT,
261 AD1986A_FIXUP_ULTRA, 274 AD1986A_FIXUP_ULTRA,
@@ -264,6 +277,8 @@ enum {
264 AD1986A_FIXUP_LAPTOP, 277 AD1986A_FIXUP_LAPTOP,
265 AD1986A_FIXUP_LAPTOP_IMIC, 278 AD1986A_FIXUP_LAPTOP_IMIC,
266 AD1986A_FIXUP_EAPD, 279 AD1986A_FIXUP_EAPD,
280 AD1986A_FIXUP_EAPD_MIX_IN,
281 AD1986A_FIXUP_EASYNOTE,
267}; 282};
268 283
269static const struct hda_fixup ad1986a_fixups[] = { 284static const struct hda_fixup ad1986a_fixups[] = {
@@ -328,6 +343,30 @@ static const struct hda_fixup ad1986a_fixups[] = {
328 .type = HDA_FIXUP_FUNC, 343 .type = HDA_FIXUP_FUNC,
329 .v.func = ad1986a_fixup_eapd, 344 .v.func = ad1986a_fixup_eapd,
330 }, 345 },
346 [AD1986A_FIXUP_EAPD_MIX_IN] = {
347 .type = HDA_FIXUP_FUNC,
348 .v.func = ad1986a_fixup_eapd_mix_in,
349 },
350 [AD1986A_FIXUP_EASYNOTE] = {
351 .type = HDA_FIXUP_PINS,
352 .v.pins = (const struct hda_pintbl[]) {
353 { 0x1a, 0x0421402f }, /* headphone */
354 { 0x1b, 0x90170110 }, /* speaker */
355 { 0x1c, 0x411111f0 }, /* N/A */
356 { 0x1d, 0x90a70130 }, /* int mic */
357 { 0x1e, 0x411111f0 }, /* N/A */
358 { 0x1f, 0x04a19040 }, /* mic */
359 { 0x20, 0x411111f0 }, /* N/A */
360 { 0x21, 0x411111f0 }, /* N/A */
361 { 0x22, 0x411111f0 }, /* N/A */
362 { 0x23, 0x411111f0 }, /* N/A */
363 { 0x24, 0x411111f0 }, /* N/A */
364 { 0x25, 0x411111f0 }, /* N/A */
365 {}
366 },
367 .chained = true,
368 .chain_id = AD1986A_FIXUP_EAPD_MIX_IN,
369 },
331}; 370};
332 371
333static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { 372static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
@@ -341,6 +380,7 @@ static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
341 SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP), 380 SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP),
342 SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG), 381 SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG),
343 SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA), 382 SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA),
383 SND_PCI_QUIRK(0x1631, 0xc022, "PackardBell EasyNote MX65", AD1986A_FIXUP_EASYNOTE),
344 SND_PCI_QUIRK(0x17aa, 0x2066, "Lenovo N100", AD1986A_FIXUP_INV_JACK_DETECT), 384 SND_PCI_QUIRK(0x17aa, 0x2066, "Lenovo N100", AD1986A_FIXUP_INV_JACK_DETECT),
345 SND_PCI_QUIRK(0x17aa, 0x1011, "Lenovo M55", AD1986A_FIXUP_3STACK), 385 SND_PCI_QUIRK(0x17aa, 0x1011, "Lenovo M55", AD1986A_FIXUP_3STACK),
346 SND_PCI_QUIRK(0x17aa, 0x1017, "Lenovo A60", AD1986A_FIXUP_3STACK), 386 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)
855 case 0x14f15045: 855 case 0x14f15045:
856 codec->single_adc_amp = 1; 856 codec->single_adc_amp = 1;
857 spec->gen.mixer_nid = 0x17; 857 spec->gen.mixer_nid = 0x17;
858 spec->gen.add_stereo_mix_input = 1; 858 spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
859 snd_hda_pick_fixup(codec, cxt5045_fixup_models, 859 snd_hda_pick_fixup(codec, cxt5045_fixup_models,
860 cxt5045_fixups, cxt_fixups); 860 cxt5045_fixups, cxt_fixups);
861 break; 861 break;
862 case 0x14f15047: 862 case 0x14f15047:
863 codec->pin_amp_workaround = 1; 863 codec->pin_amp_workaround = 1;
864 spec->gen.mixer_nid = 0x19; 864 spec->gen.mixer_nid = 0x19;
865 spec->gen.add_stereo_mix_input = 1; 865 spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
866 snd_hda_pick_fixup(codec, cxt5047_fixup_models, 866 snd_hda_pick_fixup(codec, cxt5047_fixup_models,
867 cxt5047_fixups, cxt_fixups); 867 cxt5047_fixups, cxt_fixups);
868 break; 868 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");
47 47
48#define is_haswell(codec) ((codec)->vendor_id == 0x80862807) 48#define is_haswell(codec) ((codec)->vendor_id == 0x80862807)
49#define is_broadwell(codec) ((codec)->vendor_id == 0x80862808) 49#define is_broadwell(codec) ((codec)->vendor_id == 0x80862808)
50#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec)) 50#define is_skylake(codec) ((codec)->vendor_id == 0x80862809)
51#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec) \
52 || is_skylake(codec))
51 53
52#define is_valleyview(codec) ((codec)->vendor_id == 0x80862882) 54#define is_valleyview(codec) ((codec)->vendor_id == 0x80862882)
53#define is_cherryview(codec) ((codec)->vendor_id == 0x80862883) 55#define is_cherryview(codec) ((codec)->vendor_id == 0x80862883)
@@ -3365,6 +3367,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
3365{ .id = 0x80862806, .name = "PantherPoint HDMI", .patch = patch_generic_hdmi }, 3367{ .id = 0x80862806, .name = "PantherPoint HDMI", .patch = patch_generic_hdmi },
3366{ .id = 0x80862807, .name = "Haswell HDMI", .patch = patch_generic_hdmi }, 3368{ .id = 0x80862807, .name = "Haswell HDMI", .patch = patch_generic_hdmi },
3367{ .id = 0x80862808, .name = "Broadwell HDMI", .patch = patch_generic_hdmi }, 3369{ .id = 0x80862808, .name = "Broadwell HDMI", .patch = patch_generic_hdmi },
3370{ .id = 0x80862809, .name = "Skylake HDMI", .patch = patch_generic_hdmi },
3368{ .id = 0x80862880, .name = "CedarTrail HDMI", .patch = patch_generic_hdmi }, 3371{ .id = 0x80862880, .name = "CedarTrail HDMI", .patch = patch_generic_hdmi },
3369{ .id = 0x80862882, .name = "Valleyview2 HDMI", .patch = patch_generic_hdmi }, 3372{ .id = 0x80862882, .name = "Valleyview2 HDMI", .patch = patch_generic_hdmi },
3370{ .id = 0x80862883, .name = "Braswell HDMI", .patch = patch_generic_hdmi }, 3373{ .id = 0x80862883, .name = "Braswell HDMI", .patch = patch_generic_hdmi },
@@ -3425,6 +3428,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862805");
3425MODULE_ALIAS("snd-hda-codec-id:80862806"); 3428MODULE_ALIAS("snd-hda-codec-id:80862806");
3426MODULE_ALIAS("snd-hda-codec-id:80862807"); 3429MODULE_ALIAS("snd-hda-codec-id:80862807");
3427MODULE_ALIAS("snd-hda-codec-id:80862808"); 3430MODULE_ALIAS("snd-hda-codec-id:80862808");
3431MODULE_ALIAS("snd-hda-codec-id:80862809");
3428MODULE_ALIAS("snd-hda-codec-id:80862880"); 3432MODULE_ALIAS("snd-hda-codec-id:80862880");
3429MODULE_ALIAS("snd-hda-codec-id:80862882"); 3433MODULE_ALIAS("snd-hda-codec-id:80862882");
3430MODULE_ALIAS("snd-hda-codec-id:80862883"); 3434MODULE_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)
321 break; 321 break;
322 case 0x10ec0233: 322 case 0x10ec0233:
323 case 0x10ec0255: 323 case 0x10ec0255:
324 case 0x10ec0256:
324 case 0x10ec0282: 325 case 0x10ec0282:
325 case 0x10ec0283: 326 case 0x10ec0283:
326 case 0x10ec0286: 327 case 0x10ec0286:
327 case 0x10ec0288: 328 case 0x10ec0288:
329 case 0x10ec0298:
328 alc_update_coef_idx(codec, 0x10, 1<<9, 0); 330 alc_update_coef_idx(codec, 0x10, 1<<9, 0);
329 break; 331 break;
330 case 0x10ec0285: 332 case 0x10ec0285:
@@ -2659,7 +2661,9 @@ enum {
2659 ALC269_TYPE_ALC284, 2661 ALC269_TYPE_ALC284,
2660 ALC269_TYPE_ALC285, 2662 ALC269_TYPE_ALC285,
2661 ALC269_TYPE_ALC286, 2663 ALC269_TYPE_ALC286,
2664 ALC269_TYPE_ALC298,
2662 ALC269_TYPE_ALC255, 2665 ALC269_TYPE_ALC255,
2666 ALC269_TYPE_ALC256,
2663}; 2667};
2664 2668
2665/* 2669/*
@@ -2686,7 +2690,9 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
2686 case ALC269_TYPE_ALC282: 2690 case ALC269_TYPE_ALC282:
2687 case ALC269_TYPE_ALC283: 2691 case ALC269_TYPE_ALC283:
2688 case ALC269_TYPE_ALC286: 2692 case ALC269_TYPE_ALC286:
2693 case ALC269_TYPE_ALC298:
2689 case ALC269_TYPE_ALC255: 2694 case ALC269_TYPE_ALC255:
2695 case ALC269_TYPE_ALC256:
2690 ssids = alc269_ssids; 2696 ssids = alc269_ssids;
2691 break; 2697 break;
2692 default: 2698 default:
@@ -4829,6 +4835,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4829 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK), 4835 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
4830 SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4836 SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4831 SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4837 SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4838 SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4832 SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4839 SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4833 SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4840 SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4834 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4841 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -5417,9 +5424,15 @@ static int patch_alc269(struct hda_codec *codec)
5417 spec->codec_variant = ALC269_TYPE_ALC286; 5424 spec->codec_variant = ALC269_TYPE_ALC286;
5418 spec->shutup = alc286_shutup; 5425 spec->shutup = alc286_shutup;
5419 break; 5426 break;
5427 case 0x10ec0298:
5428 spec->codec_variant = ALC269_TYPE_ALC298;
5429 break;
5420 case 0x10ec0255: 5430 case 0x10ec0255:
5421 spec->codec_variant = ALC269_TYPE_ALC255; 5431 spec->codec_variant = ALC269_TYPE_ALC255;
5422 break; 5432 break;
5433 case 0x10ec0256:
5434 spec->codec_variant = ALC269_TYPE_ALC256;
5435 break;
5423 } 5436 }
5424 5437
5425 if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) { 5438 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[] = {
6341 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 }, 6354 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 },
6342 { .id = 0x10ec0235, .name = "ALC233", .patch = patch_alc269 }, 6355 { .id = 0x10ec0235, .name = "ALC233", .patch = patch_alc269 },
6343 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 }, 6356 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 },
6357 { .id = 0x10ec0256, .name = "ALC256", .patch = patch_alc269 },
6344 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 }, 6358 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
6345 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 }, 6359 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
6346 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 }, 6360 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
@@ -6360,6 +6374,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
6360 { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, 6374 { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 },
6361 { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, 6375 { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 },
6362 { .id = 0x10ec0293, .name = "ALC293", .patch = patch_alc269 }, 6376 { .id = 0x10ec0293, .name = "ALC293", .patch = patch_alc269 },
6377 { .id = 0x10ec0298, .name = "ALC298", .patch = patch_alc269 },
6363 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", 6378 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
6364 .patch = patch_alc861 }, 6379 .patch = patch_alc861 },
6365 { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, 6380 { .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)
137 spec->gen.indep_hp = 1; 137 spec->gen.indep_hp = 1;
138 spec->gen.keep_eapd_on = 1; 138 spec->gen.keep_eapd_on = 1;
139 spec->gen.pcm_playback_hook = via_playback_pcm_hook; 139 spec->gen.pcm_playback_hook = via_playback_pcm_hook;
140 spec->gen.add_stereo_mix_input = 1; 140 spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
141 return spec; 141 return spec;
142} 142}
143 143
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,
267 if (!ssc_p->dir_mask) { 267 if (!ssc_p->dir_mask) {
268 if (ssc_p->initialized) { 268 if (ssc_p->initialized) {
269 /* Shutdown the SSC clock. */ 269 /* Shutdown the SSC clock. */
270 pr_debug("atmel_ssc_dau: Stopping clock\n"); 270 pr_debug("atmel_ssc_dai: Stopping clock\n");
271 clk_disable(ssc_p->ssc->clk); 271 clk_disable(ssc_p->ssc->clk);
272 272
273 free_irq(ssc_p->ssc->irq, ssc_p); 273 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
520 520
521config SND_SOC_RT5677 521config SND_SOC_RT5677
522 tristate 522 tristate
523 select REGMAP_I2C
524 select REGMAP_IRQ
523 525
524config SND_SOC_RT5677_SPI 526config SND_SOC_RT5677_SPI
525 tristate 527 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,
24 const struct i2c_device_id *id) 24 const struct i2c_device_id *id)
25{ 25{
26 struct regmap *regmap; 26 struct regmap *regmap;
27 struct regmap_config config = pcm512x_regmap;
27 28
28 regmap = devm_regmap_init_i2c(i2c, &pcm512x_regmap); 29 /* msb needs to be set to enable auto-increment of addresses */
30 config.read_flag_mask = 0x80;
31 config.write_flag_mask = 0x80;
32
33 regmap = devm_regmap_init_i2c(i2c, &config);
29 if (IS_ERR(regmap)) 34 if (IS_ERR(regmap))
30 return PTR_ERR(regmap); 35 return PTR_ERR(regmap);
31 36
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)
2209 int gpio_state, jack_type = 0; 2209 int gpio_state, jack_type = 0;
2210 unsigned int val; 2210 unsigned int val;
2211 2211
2212 if (!gpio_is_valid(rt5645->pdata.hp_det_gpio)) {
2213 dev_err(codec->dev, "invalid gpio\n");
2214 return -EINVAL;
2215 }
2212 gpio_state = gpio_get_value(rt5645->pdata.hp_det_gpio); 2216 gpio_state = gpio_get_value(rt5645->pdata.hp_det_gpio);
2213 2217
2214 dev_dbg(codec->dev, "gpio = %d(%d)\n", rt5645->pdata.hp_det_gpio, 2218 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 @@
43#include "sst.h" 43#include "sst.h"
44 44
45struct sst_machines { 45struct sst_machines {
46 char codec_id[32]; 46 char *codec_id;
47 char board[32]; 47 char board[32];
48 char machine[32]; 48 char machine[32];
49 void (*machine_quirk)(void); 49 void (*machine_quirk)(void);
@@ -277,16 +277,16 @@ int sst_acpi_probe(struct platform_device *pdev)
277 dev_dbg(dev, "ACPI device id: %x\n", dev_id); 277 dev_dbg(dev, "ACPI device id: %x\n", dev_id);
278 278
279 plat_dev = platform_device_register_data(dev, mach->pdata->platform, -1, NULL, 0); 279 plat_dev = platform_device_register_data(dev, mach->pdata->platform, -1, NULL, 0);
280 if (plat_dev == NULL) { 280 if (IS_ERR(plat_dev)) {
281 dev_err(dev, "Failed to create machine device: %s\n", mach->pdata->platform); 281 dev_err(dev, "Failed to create machine device: %s\n", mach->pdata->platform);
282 return -ENODEV; 282 return PTR_ERR(plat_dev);
283 } 283 }
284 284
285 /* Create platform device for sst machine driver */ 285 /* Create platform device for sst machine driver */
286 mdev = platform_device_register_data(dev, mach->machine, -1, NULL, 0); 286 mdev = platform_device_register_data(dev, mach->machine, -1, NULL, 0);
287 if (mdev == NULL) { 287 if (IS_ERR(mdev)) {
288 dev_err(dev, "Failed to create machine device: %s\n", mach->machine); 288 dev_err(dev, "Failed to create machine device: %s\n", mach->machine);
289 return -ENODEV; 289 return PTR_ERR(mdev);
290 } 290 }
291 291
292 ret = sst_alloc_drv_context(&ctx, dev, dev_id); 292 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)
1261 ret = -ENOMEM; 1261 ret = -ENOMEM;
1262 goto err; 1262 goto err;
1263 } 1263 }
1264
1265 sec_dai->variant_regs = pri_dai->variant_regs;
1264 sec_dai->dma_playback.dma_addr = regs_base + I2STXDS; 1266 sec_dai->dma_playback.dma_addr = regs_base + I2STXDS;
1265 sec_dai->dma_playback.ch_name = "tx-sec"; 1267 sec_dai->dma_playback.ch_name = "tx-sec";
1266 1268
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[] = {
333 {} 333 {}
334}; 334};
335 335
336static const struct usbmix_name_map kef_x300a_map[] = { 336/* some (all?) SCMS USB3318 devices are affected by a firmware lock up
337 { 10, NULL }, /* firmware locks up (?) when we try to access this FU */ 337 * when anything attempts to access FU 10 (control)
338 */
339static const struct usbmix_name_map scms_usb3318_map[] = {
340 { 10, NULL },
338 { 0 } 341 { 0 }
339}; 342};
340 343
@@ -434,8 +437,14 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
434 .map = ebox44_map, 437 .map = ebox44_map,
435 }, 438 },
436 { 439 {
440 /* KEF X300A */
437 .id = USB_ID(0x27ac, 0x1000), 441 .id = USB_ID(0x27ac, 0x1000),
438 .map = kef_x300a_map, 442 .map = scms_usb3318_map,
443 },
444 {
445 /* Arcam rPAC */
446 .id = USB_ID(0x25c4, 0x0003),
447 .map = scms_usb3318_map,
439 }, 448 },
440 { 0 } /* terminator */ 449 { 0 } /* terminator */
441}; 450};
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 = {
655 .names = NULL 655 .names = NULL
656 }, 656 },
657 657
658 .num_controls = 0, 658 .num_controls = 9,
659 .controls = { 659 .controls = {
660 { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" }, 660 { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
661 { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone" }, 661 { .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,
1245 1245
1246 /* XMOS based USB DACs */ 1246 /* XMOS based USB DACs */
1247 switch (chip->usb_id) { 1247 switch (chip->usb_id) {
1248 /* iFi Audio micro/nano iDSD */ 1248 case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */
1249 case USB_ID(0x20b1, 0x3008): 1249 case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
1250 case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
1250 if (fp->altsetting == 2) 1251 if (fp->altsetting == 2)
1251 return SNDRV_PCM_FMTBIT_DSD_U32_BE; 1252 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1252 break; 1253 break;