diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-19 21:07:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-19 21:07:17 -0500 |
commit | 20e471fd34d1f79bed65fdc1bf4ad090f70472a5 (patch) | |
tree | 7e74e4ca71a90c6b39392dacab07e26feedb8185 /sound | |
parent | ed55635e2e4df3169f21ae4047004b7235de956e (diff) | |
parent | d70a1b9893f820fdbcdffac408c909c50f2e6b43 (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.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, | |||
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, | |||
80 | static void limit_channels_and_rates(struct snd_pcm_hardware *hw, u8 **formats) | 80 | static 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 { | |||
1367 | struct hpi_control_cache_pad { | 1367 | struct 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 | ***********************************************************************/ |
21 | Functions for reading DSP code using | ||
22 | hotplug 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 */ | ||
295 | enum { | ||
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 | |||
294 | int snd_hda_gen_spec_init(struct hda_gen_spec *spec); | 301 | int snd_hda_gen_spec_init(struct hda_gen_spec *spec); |
295 | 302 | ||
296 | int snd_hda_gen_init(struct hda_codec *codec); | 303 | 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) | |||
468 | EXPORT_SYMBOL_GPL(snd_hda_get_bool_hint); | 468 | EXPORT_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) */ | ||
261 | static 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 | |||
259 | enum { | 272 | enum { |
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 | ||
269 | static const struct hda_fixup ad1986a_fixups[] = { | 284 | static 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 | ||
333 | static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { | 372 | static 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"); | |||
3425 | MODULE_ALIAS("snd-hda-codec-id:80862806"); | 3428 | MODULE_ALIAS("snd-hda-codec-id:80862806"); |
3426 | MODULE_ALIAS("snd-hda-codec-id:80862807"); | 3429 | MODULE_ALIAS("snd-hda-codec-id:80862807"); |
3427 | MODULE_ALIAS("snd-hda-codec-id:80862808"); | 3430 | MODULE_ALIAS("snd-hda-codec-id:80862808"); |
3431 | MODULE_ALIAS("snd-hda-codec-id:80862809"); | ||
3428 | MODULE_ALIAS("snd-hda-codec-id:80862880"); | 3432 | MODULE_ALIAS("snd-hda-codec-id:80862880"); |
3429 | MODULE_ALIAS("snd-hda-codec-id:80862882"); | 3433 | MODULE_ALIAS("snd-hda-codec-id:80862882"); |
3430 | MODULE_ALIAS("snd-hda-codec-id:80862883"); | 3434 | 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) | |||
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 | ||
521 | config SND_SOC_RT5677 | 521 | config SND_SOC_RT5677 |
522 | tristate | 522 | tristate |
523 | select REGMAP_I2C | ||
524 | select REGMAP_IRQ | ||
523 | 525 | ||
524 | config SND_SOC_RT5677_SPI | 526 | config 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 | ||
45 | struct sst_machines { | 45 | struct 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 | ||
336 | static 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 | */ | ||
339 | static 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; |