aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/sound/mvebu-audio.txt12
-rw-r--r--include/sound/rcar_snd.h2
-rw-r--r--sound/pci/hda/hda_intel.c1
-rw-r--r--sound/pci/hda/patch_cirrus.c89
-rw-r--r--sound/pci/hda/patch_hdmi.c50
-rw-r--r--sound/pci/hda/patch_realtek.c56
-rw-r--r--sound/soc/atmel/atmel_ssc_dai.c2
-rw-r--r--sound/soc/codecs/mc13783.c4
-rw-r--r--sound/soc/fsl/Kconfig1
-rw-r--r--sound/soc/fsl/imx-audmux.c3
-rw-r--r--sound/soc/kirkwood/kirkwood-i2s.c3
-rw-r--r--sound/soc/sh/rcar/scu.c4
12 files changed, 177 insertions, 50 deletions
diff --git a/Documentation/devicetree/bindings/sound/mvebu-audio.txt b/Documentation/devicetree/bindings/sound/mvebu-audio.txt
index 7e5fd37c1b3f..f0062c5871b4 100644
--- a/Documentation/devicetree/bindings/sound/mvebu-audio.txt
+++ b/Documentation/devicetree/bindings/sound/mvebu-audio.txt
@@ -2,13 +2,17 @@
2 2
3Required properties: 3Required properties:
4 4
5- compatible: "marvell,mvebu-audio" 5- compatible:
6 "marvell,kirkwood-audio" for Kirkwood platforms
7 "marvell,dove-audio" for Dove platforms
6 8
7- reg: physical base address of the controller and length of memory mapped 9- reg: physical base address of the controller and length of memory mapped
8 region. 10 region.
9 11
10- interrupts: list of two irq numbers. 12- interrupts:
11 The first irq is used for data flow and the second one is used for errors. 13 with "marvell,kirkwood-audio", the audio interrupt
14 with "marvell,dove-audio", a list of two interrupts, the first for
15 the data flow, and the second for errors.
12 16
13- clocks: one or two phandles. 17- clocks: one or two phandles.
14 The first one is mandatory and defines the internal clock. 18 The first one is mandatory and defines the internal clock.
@@ -21,7 +25,7 @@ Required properties:
21Example: 25Example:
22 26
23i2s1: audio-controller@b4000 { 27i2s1: audio-controller@b4000 {
24 compatible = "marvell,mvebu-audio"; 28 compatible = "marvell,dove-audio";
25 reg = <0xb4000 0x2210>; 29 reg = <0xb4000 0x2210>;
26 interrupts = <21>, <22>; 30 interrupts = <21>, <22>;
27 clocks = <&gate_clk 13>; 31 clocks = <&gate_clk 13>;
diff --git a/include/sound/rcar_snd.h b/include/sound/rcar_snd.h
index d35412ae03b3..fe66533e9b7a 100644
--- a/include/sound/rcar_snd.h
+++ b/include/sound/rcar_snd.h
@@ -55,7 +55,7 @@ struct rsnd_ssi_platform_info {
55/* 55/*
56 * flags 56 * flags
57 */ 57 */
58#define RSND_SCU_USB_HPBIF (1 << 31) /* it needs RSND_SSI_DEPENDENT */ 58#define RSND_SCU_USE_HPBIF (1 << 31) /* it needs RSND_SSI_DEPENDENT */
59 59
60struct rsnd_scu_platform_info { 60struct rsnd_scu_platform_info {
61 u32 flags; 61 u32 flags;
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index e54ebd530849..6e61a019aa5e 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -3428,6 +3428,7 @@ static struct snd_pci_quirk msi_black_list[] = {
3428 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ 3428 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3429 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */ 3429 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3430 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */ 3430 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3431 SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */
3431 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */ 3432 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3432 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */ 3433 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3433 {} 3434 {}
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index cccaf9c7a7bb..b524f89a1f13 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -169,7 +169,7 @@ static void cs_automute(struct hda_codec *codec)
169 169
170 snd_hda_gen_update_outputs(codec); 170 snd_hda_gen_update_outputs(codec);
171 171
172 if (spec->gpio_eapd_hp) { 172 if (spec->gpio_eapd_hp || spec->gpio_eapd_speaker) {
173 spec->gpio_data = spec->gen.hp_jack_present ? 173 spec->gpio_data = spec->gen.hp_jack_present ?
174 spec->gpio_eapd_hp : spec->gpio_eapd_speaker; 174 spec->gpio_eapd_hp : spec->gpio_eapd_speaker;
175 snd_hda_codec_write(codec, 0x01, 0, 175 snd_hda_codec_write(codec, 0x01, 0,
@@ -291,10 +291,11 @@ static int cs_init(struct hda_codec *codec)
291{ 291{
292 struct cs_spec *spec = codec->spec; 292 struct cs_spec *spec = codec->spec;
293 293
294 /* init_verb sequence for C0/C1/C2 errata*/ 294 if (spec->vendor_nid == CS420X_VENDOR_NID) {
295 snd_hda_sequence_write(codec, cs_errata_init_verbs); 295 /* init_verb sequence for C0/C1/C2 errata*/
296 296 snd_hda_sequence_write(codec, cs_errata_init_verbs);
297 snd_hda_sequence_write(codec, cs_coef_init_verbs); 297 snd_hda_sequence_write(codec, cs_coef_init_verbs);
298 }
298 299
299 snd_hda_gen_init(codec); 300 snd_hda_gen_init(codec);
300 301
@@ -307,8 +308,10 @@ static int cs_init(struct hda_codec *codec)
307 spec->gpio_data); 308 spec->gpio_data);
308 } 309 }
309 310
310 init_input_coef(codec); 311 if (spec->vendor_nid == CS420X_VENDOR_NID) {
311 init_digital_coef(codec); 312 init_input_coef(codec);
313 init_digital_coef(codec);
314 }
312 315
313 return 0; 316 return 0;
314} 317}
@@ -552,6 +555,76 @@ static int patch_cs420x(struct hda_codec *codec)
552} 555}
553 556
554/* 557/*
558 * CS4208 support:
559 * Its layout is no longer compatible with CS4206/CS4207, and the generic
560 * parser seems working fairly well, except for trivial fixups.
561 */
562enum {
563 CS4208_GPIO0,
564};
565
566static const struct hda_model_fixup cs4208_models[] = {
567 { .id = CS4208_GPIO0, .name = "gpio0" },
568 {}
569};
570
571static const struct snd_pci_quirk cs4208_fixup_tbl[] = {
572 /* codec SSID */
573 SND_PCI_QUIRK(0x106b, 0x7100, "MacBookPro 6,1", CS4208_GPIO0),
574 SND_PCI_QUIRK(0x106b, 0x7200, "MacBookPro 6,2", CS4208_GPIO0),
575 {} /* terminator */
576};
577
578static void cs4208_fixup_gpio0(struct hda_codec *codec,
579 const struct hda_fixup *fix, int action)
580{
581 if (action == HDA_FIXUP_ACT_PRE_PROBE) {
582 struct cs_spec *spec = codec->spec;
583 spec->gpio_eapd_hp = 0;
584 spec->gpio_eapd_speaker = 1;
585 spec->gpio_mask = spec->gpio_dir =
586 spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
587 }
588}
589
590static const struct hda_fixup cs4208_fixups[] = {
591 [CS4208_GPIO0] = {
592 .type = HDA_FIXUP_FUNC,
593 .v.func = cs4208_fixup_gpio0,
594 },
595};
596
597static int patch_cs4208(struct hda_codec *codec)
598{
599 struct cs_spec *spec;
600 int err;
601
602 spec = cs_alloc_spec(codec, 0); /* no specific w/a */
603 if (!spec)
604 return -ENOMEM;
605
606 spec->gen.automute_hook = cs_automute;
607
608 snd_hda_pick_fixup(codec, cs4208_models, cs4208_fixup_tbl,
609 cs4208_fixups);
610 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
611
612 err = cs_parse_auto_config(codec);
613 if (err < 0)
614 goto error;
615
616 codec->patch_ops = cs_patch_ops;
617
618 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
619
620 return 0;
621
622 error:
623 cs_free(codec);
624 return err;
625}
626
627/*
555 * Cirrus Logic CS4210 628 * Cirrus Logic CS4210
556 * 629 *
557 * 1 DAC => HP(sense) / Speakers, 630 * 1 DAC => HP(sense) / Speakers,
@@ -991,6 +1064,7 @@ static int patch_cs4213(struct hda_codec *codec)
991static const struct hda_codec_preset snd_hda_preset_cirrus[] = { 1064static const struct hda_codec_preset snd_hda_preset_cirrus[] = {
992 { .id = 0x10134206, .name = "CS4206", .patch = patch_cs420x }, 1065 { .id = 0x10134206, .name = "CS4206", .patch = patch_cs420x },
993 { .id = 0x10134207, .name = "CS4207", .patch = patch_cs420x }, 1066 { .id = 0x10134207, .name = "CS4207", .patch = patch_cs420x },
1067 { .id = 0x10134208, .name = "CS4208", .patch = patch_cs4208 },
994 { .id = 0x10134210, .name = "CS4210", .patch = patch_cs4210 }, 1068 { .id = 0x10134210, .name = "CS4210", .patch = patch_cs4210 },
995 { .id = 0x10134213, .name = "CS4213", .patch = patch_cs4213 }, 1069 { .id = 0x10134213, .name = "CS4213", .patch = patch_cs4213 },
996 {} /* terminator */ 1070 {} /* terminator */
@@ -998,6 +1072,7 @@ static const struct hda_codec_preset snd_hda_preset_cirrus[] = {
998 1072
999MODULE_ALIAS("snd-hda-codec-id:10134206"); 1073MODULE_ALIAS("snd-hda-codec-id:10134206");
1000MODULE_ALIAS("snd-hda-codec-id:10134207"); 1074MODULE_ALIAS("snd-hda-codec-id:10134207");
1075MODULE_ALIAS("snd-hda-codec-id:10134208");
1001MODULE_ALIAS("snd-hda-codec-id:10134210"); 1076MODULE_ALIAS("snd-hda-codec-id:10134210");
1002MODULE_ALIAS("snd-hda-codec-id:10134213"); 1077MODULE_ALIAS("snd-hda-codec-id:10134213");
1003 1078
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 9a58893d52a7..3d8cd04455a6 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -44,6 +44,8 @@ static bool static_hdmi_pcm;
44module_param(static_hdmi_pcm, bool, 0644); 44module_param(static_hdmi_pcm, bool, 0644);
45MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info"); 45MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
46 46
47#define is_haswell(codec) ((codec)->vendor_id == 0x80862807)
48
47struct hdmi_spec_per_cvt { 49struct hdmi_spec_per_cvt {
48 hda_nid_t cvt_nid; 50 hda_nid_t cvt_nid;
49 int assigned; 51 int assigned;
@@ -894,6 +896,11 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
894 if (!channels) 896 if (!channels)
895 return; 897 return;
896 898
899 if (is_haswell(codec))
900 snd_hda_codec_write(codec, pin_nid, 0,
901 AC_VERB_SET_AMP_GAIN_MUTE,
902 AMP_OUT_UNMUTE);
903
897 eld = &per_pin->sink_eld; 904 eld = &per_pin->sink_eld;
898 if (!eld->monitor_present) 905 if (!eld->monitor_present)
899 return; 906 return;
@@ -1033,10 +1040,10 @@ static void hdmi_unsol_event(struct hda_codec *codec, unsigned int res)
1033 hdmi_non_intrinsic_event(codec, res); 1040 hdmi_non_intrinsic_event(codec, res);
1034} 1041}
1035 1042
1036static void haswell_verify_pin_D0(struct hda_codec *codec, 1043static void haswell_verify_D0(struct hda_codec *codec,
1037 hda_nid_t cvt_nid, hda_nid_t nid) 1044 hda_nid_t cvt_nid, hda_nid_t nid)
1038{ 1045{
1039 int pwr, lamp, ramp; 1046 int pwr;
1040 1047
1041 /* For Haswell, the converter 1/2 may keep in D3 state after bootup, 1048 /* For Haswell, the converter 1/2 may keep in D3 state after bootup,
1042 * thus pins could only choose converter 0 for use. Make sure the 1049 * thus pins could only choose converter 0 for use. Make sure the
@@ -1052,25 +1059,6 @@ static void haswell_verify_pin_D0(struct hda_codec *codec,
1052 pwr = (pwr & AC_PWRST_ACTUAL) >> AC_PWRST_ACTUAL_SHIFT; 1059 pwr = (pwr & AC_PWRST_ACTUAL) >> AC_PWRST_ACTUAL_SHIFT;
1053 snd_printd("Haswell HDMI audio: Power for pin 0x%x is now D%d\n", nid, pwr); 1060 snd_printd("Haswell HDMI audio: Power for pin 0x%x is now D%d\n", nid, pwr);
1054 } 1061 }
1055
1056 lamp = snd_hda_codec_read(codec, nid, 0,
1057 AC_VERB_GET_AMP_GAIN_MUTE,
1058 AC_AMP_GET_LEFT | AC_AMP_GET_OUTPUT);
1059 ramp = snd_hda_codec_read(codec, nid, 0,
1060 AC_VERB_GET_AMP_GAIN_MUTE,
1061 AC_AMP_GET_RIGHT | AC_AMP_GET_OUTPUT);
1062 if (lamp != ramp) {
1063 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
1064 AC_AMP_SET_RIGHT | AC_AMP_SET_OUTPUT | lamp);
1065
1066 lamp = snd_hda_codec_read(codec, nid, 0,
1067 AC_VERB_GET_AMP_GAIN_MUTE,
1068 AC_AMP_GET_LEFT | AC_AMP_GET_OUTPUT);
1069 ramp = snd_hda_codec_read(codec, nid, 0,
1070 AC_VERB_GET_AMP_GAIN_MUTE,
1071 AC_AMP_GET_RIGHT | AC_AMP_GET_OUTPUT);
1072 snd_printd("Haswell HDMI audio: Mute after set on pin 0x%x: [0x%x 0x%x]\n", nid, lamp, ramp);
1073 }
1074} 1062}
1075 1063
1076/* 1064/*
@@ -1087,8 +1075,8 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid,
1087 int pinctl; 1075 int pinctl;
1088 int new_pinctl = 0; 1076 int new_pinctl = 0;
1089 1077
1090 if (codec->vendor_id == 0x80862807) 1078 if (is_haswell(codec))
1091 haswell_verify_pin_D0(codec, cvt_nid, pin_nid); 1079 haswell_verify_D0(codec, cvt_nid, pin_nid);
1092 1080
1093 if (snd_hda_query_pin_caps(codec, pin_nid) & AC_PINCAP_HBR) { 1081 if (snd_hda_query_pin_caps(codec, pin_nid) & AC_PINCAP_HBR) {
1094 pinctl = snd_hda_codec_read(codec, pin_nid, 0, 1082 pinctl = snd_hda_codec_read(codec, pin_nid, 0,
@@ -1227,7 +1215,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
1227 mux_idx); 1215 mux_idx);
1228 1216
1229 /* configure unused pins to choose other converters */ 1217 /* configure unused pins to choose other converters */
1230 if (codec->vendor_id == 0x80862807) 1218 if (is_haswell(codec))
1231 haswell_config_cvts(codec, pin_idx, mux_idx); 1219 haswell_config_cvts(codec, pin_idx, mux_idx);
1232 1220
1233 snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid); 1221 snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid);
@@ -1358,14 +1346,10 @@ static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
1358 /* Haswell-specific workaround: re-setup when the transcoder is 1346 /* Haswell-specific workaround: re-setup when the transcoder is
1359 * changed during the stream playback 1347 * changed during the stream playback
1360 */ 1348 */
1361 if (codec->vendor_id == 0x80862807 && 1349 if (is_haswell(codec) &&
1362 eld->eld_valid && !old_eld_valid && per_pin->setup) { 1350 eld->eld_valid && !old_eld_valid && per_pin->setup)
1363 snd_hda_codec_write(codec, pin_nid, 0,
1364 AC_VERB_SET_AMP_GAIN_MUTE,
1365 AMP_OUT_UNMUTE);
1366 hdmi_setup_audio_infoframe(codec, per_pin, 1351 hdmi_setup_audio_infoframe(codec, per_pin,
1367 per_pin->non_pcm); 1352 per_pin->non_pcm);
1368 }
1369 } 1353 }
1370 mutex_unlock(&pin_eld->lock); 1354 mutex_unlock(&pin_eld->lock);
1371 1355
@@ -1405,7 +1389,7 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
1405 if (get_defcfg_connect(config) == AC_JACK_PORT_NONE) 1389 if (get_defcfg_connect(config) == AC_JACK_PORT_NONE)
1406 return 0; 1390 return 0;
1407 1391
1408 if (codec->vendor_id == 0x80862807) 1392 if (is_haswell(codec))
1409 intel_haswell_fixup_connect_list(codec, pin_nid); 1393 intel_haswell_fixup_connect_list(codec, pin_nid);
1410 1394
1411 pin_idx = spec->num_pins; 1395 pin_idx = spec->num_pins;
@@ -2014,7 +1998,7 @@ static int patch_generic_hdmi(struct hda_codec *codec)
2014 codec->spec = spec; 1998 codec->spec = spec;
2015 hdmi_array_init(spec, 4); 1999 hdmi_array_init(spec, 4);
2016 2000
2017 if (codec->vendor_id == 0x80862807) { 2001 if (is_haswell(codec)) {
2018 intel_haswell_enable_all_pins(codec, true); 2002 intel_haswell_enable_all_pins(codec, true);
2019 intel_haswell_fixup_enable_dp12(codec); 2003 intel_haswell_fixup_enable_dp12(codec);
2020 } 2004 }
@@ -2025,7 +2009,7 @@ static int patch_generic_hdmi(struct hda_codec *codec)
2025 return -EINVAL; 2009 return -EINVAL;
2026 } 2010 }
2027 codec->patch_ops = generic_hdmi_patch_ops; 2011 codec->patch_ops = generic_hdmi_patch_ops;
2028 if (codec->vendor_id == 0x80862807) { 2012 if (is_haswell(codec)) {
2029 codec->patch_ops.set_power_state = haswell_set_power_state; 2013 codec->patch_ops.set_power_state = haswell_set_power_state;
2030 codec->dp_mst = true; 2014 codec->dp_mst = true;
2031 } 2015 }
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 9e9378cde8fa..bc07d369fac4 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3443,6 +3443,56 @@ static void alc283_fixup_chromebook(struct hda_codec *codec,
3443 } 3443 }
3444} 3444}
3445 3445
3446/* mute tablet speaker pin (0x14) via dock plugging in addition */
3447static void asus_tx300_automute(struct hda_codec *codec)
3448{
3449 struct alc_spec *spec = codec->spec;
3450 snd_hda_gen_update_outputs(codec);
3451 if (snd_hda_jack_detect(codec, 0x1b))
3452 spec->gen.mute_bits |= (1ULL << 0x14);
3453}
3454
3455static void alc282_fixup_asus_tx300(struct hda_codec *codec,
3456 const struct hda_fixup *fix, int action)
3457{
3458 struct alc_spec *spec = codec->spec;
3459 /* TX300 needs to set up GPIO2 for the speaker amp */
3460 static const struct hda_verb gpio2_verbs[] = {
3461 { 0x01, AC_VERB_SET_GPIO_MASK, 0x04 },
3462 { 0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04 },
3463 { 0x01, AC_VERB_SET_GPIO_DATA, 0x04 },
3464 {}
3465 };
3466 static const struct hda_pintbl dock_pins[] = {
3467 { 0x1b, 0x21114000 }, /* dock speaker pin */
3468 {}
3469 };
3470 struct snd_kcontrol *kctl;
3471
3472 switch (action) {
3473 case HDA_FIXUP_ACT_PRE_PROBE:
3474 snd_hda_add_verbs(codec, gpio2_verbs);
3475 snd_hda_apply_pincfgs(codec, dock_pins);
3476 spec->gen.auto_mute_via_amp = 1;
3477 spec->gen.automute_hook = asus_tx300_automute;
3478 snd_hda_jack_detect_enable_callback(codec, 0x1b,
3479 HDA_GEN_HP_EVENT,
3480 snd_hda_gen_hp_automute);
3481 break;
3482 case HDA_FIXUP_ACT_BUILD:
3483 /* this is a bit tricky; give more sane names for the main
3484 * (tablet) speaker and the dock speaker, respectively
3485 */
3486 kctl = snd_hda_find_mixer_ctl(codec, "Speaker Playback Switch");
3487 if (kctl)
3488 strcpy(kctl->id.name, "Dock Speaker Playback Switch");
3489 kctl = snd_hda_find_mixer_ctl(codec, "Bass Speaker Playback Switch");
3490 if (kctl)
3491 strcpy(kctl->id.name, "Speaker Playback Switch");
3492 break;
3493 }
3494}
3495
3446enum { 3496enum {
3447 ALC269_FIXUP_SONY_VAIO, 3497 ALC269_FIXUP_SONY_VAIO,
3448 ALC275_FIXUP_SONY_VAIO_GPIO2, 3498 ALC275_FIXUP_SONY_VAIO_GPIO2,
@@ -3480,6 +3530,7 @@ enum {
3480 ALC269_FIXUP_LIMIT_INT_MIC_BOOST, 3530 ALC269_FIXUP_LIMIT_INT_MIC_BOOST,
3481 ALC269VB_FIXUP_ORDISSIMO_EVE2, 3531 ALC269VB_FIXUP_ORDISSIMO_EVE2,
3482 ALC283_FIXUP_CHROME_BOOK, 3532 ALC283_FIXUP_CHROME_BOOK,
3533 ALC282_FIXUP_ASUS_TX300,
3483}; 3534};
3484 3535
3485static const struct hda_fixup alc269_fixups[] = { 3536static const struct hda_fixup alc269_fixups[] = {
@@ -3735,6 +3786,10 @@ static const struct hda_fixup alc269_fixups[] = {
3735 .type = HDA_FIXUP_FUNC, 3786 .type = HDA_FIXUP_FUNC,
3736 .v.func = alc283_fixup_chromebook, 3787 .v.func = alc283_fixup_chromebook,
3737 }, 3788 },
3789 [ALC282_FIXUP_ASUS_TX300] = {
3790 .type = HDA_FIXUP_FUNC,
3791 .v.func = alc282_fixup_asus_tx300,
3792 },
3738}; 3793};
3739 3794
3740static const struct snd_pci_quirk alc269_fixup_tbl[] = { 3795static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -3784,6 +3839,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
3784 SND_PCI_QUIRK(0x103c, 0x1983, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1), 3839 SND_PCI_QUIRK(0x103c, 0x1983, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
3785 SND_PCI_QUIRK(0x103c, 0x21ed, "HP Falco Chromebook", ALC283_FIXUP_CHROME_BOOK), 3840 SND_PCI_QUIRK(0x103c, 0x21ed, "HP Falco Chromebook", ALC283_FIXUP_CHROME_BOOK),
3786 SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED), 3841 SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED),
3842 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
3787 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 3843 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
3788 SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 3844 SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
3789 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC), 3845 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index 0ecf356027f6..bb53dea85b17 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -649,7 +649,7 @@ static int atmel_ssc_prepare(struct snd_pcm_substream *substream,
649 dma_params = ssc_p->dma_params[dir]; 649 dma_params = ssc_p->dma_params[dir];
650 650
651 ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_enable); 651 ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_enable);
652 ssc_writel(ssc_p->ssc->regs, IER, dma_params->mask->ssc_error); 652 ssc_writel(ssc_p->ssc->regs, IDR, dma_params->mask->ssc_error);
653 653
654 pr_debug("%s enabled SSC_SR=0x%08x\n", 654 pr_debug("%s enabled SSC_SR=0x%08x\n",
655 dir ? "receive" : "transmit", 655 dir ? "receive" : "transmit",
diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c
index 4d3c8fd8c5db..ea141e1d6f28 100644
--- a/sound/soc/codecs/mc13783.c
+++ b/sound/soc/codecs/mc13783.c
@@ -125,6 +125,10 @@ static int mc13783_write(struct snd_soc_codec *codec,
125 125
126 ret = mc13xxx_reg_write(priv->mc13xxx, reg, value); 126 ret = mc13xxx_reg_write(priv->mc13xxx, reg, value);
127 127
128 /* include errata fix for spi audio problems */
129 if (reg == MC13783_AUDIO_CODEC || reg == MC13783_AUDIO_DAC)
130 ret = mc13xxx_reg_write(priv->mc13xxx, reg, value);
131
128 mc13xxx_unlock(priv->mc13xxx); 132 mc13xxx_unlock(priv->mc13xxx);
129 133
130 return ret; 134 return ret;
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
index 704e246f5b1e..b7ab71f2ccc1 100644
--- a/sound/soc/fsl/Kconfig
+++ b/sound/soc/fsl/Kconfig
@@ -198,6 +198,7 @@ config SND_SOC_IMX_SPDIF
198 select SND_SOC_IMX_PCM_DMA 198 select SND_SOC_IMX_PCM_DMA
199 select SND_SOC_FSL_SPDIF 199 select SND_SOC_FSL_SPDIF
200 select SND_SOC_SPDIF 200 select SND_SOC_SPDIF
201 select REGMAP_MMIO
201 help 202 help
202 SoC Audio support for i.MX boards with S/PDIF 203 SoC Audio support for i.MX boards with S/PDIF
203 Say Y if you want to add support for SoC audio on an i.MX board with 204 Say Y if you want to add support for SoC audio on an i.MX board with
diff --git a/sound/soc/fsl/imx-audmux.c b/sound/soc/fsl/imx-audmux.c
index ab17381cc981..d3bf71a0ec56 100644
--- a/sound/soc/fsl/imx-audmux.c
+++ b/sound/soc/fsl/imx-audmux.c
@@ -335,7 +335,8 @@ static int imx_audmux_probe(struct platform_device *pdev)
335 if (audmux_type == IMX31_AUDMUX) 335 if (audmux_type == IMX31_AUDMUX)
336 audmux_debugfs_init(); 336 audmux_debugfs_init();
337 337
338 imx_audmux_parse_dt_defaults(pdev, pdev->dev.of_node); 338 if (of_id)
339 imx_audmux_parse_dt_defaults(pdev, pdev->dev.of_node);
339 340
340 return 0; 341 return 0;
341} 342}
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c
index 7fce340ab3ef..0f3d73d4ef48 100644
--- a/sound/soc/kirkwood/kirkwood-i2s.c
+++ b/sound/soc/kirkwood/kirkwood-i2s.c
@@ -559,7 +559,8 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev)
559 559
560#ifdef CONFIG_OF 560#ifdef CONFIG_OF
561static struct of_device_id mvebu_audio_of_match[] = { 561static struct of_device_id mvebu_audio_of_match[] = {
562 { .compatible = "marvell,mvebu-audio" }, 562 { .compatible = "marvell,kirkwood-audio" },
563 { .compatible = "marvell,dove-audio" },
563 { } 564 { }
564}; 565};
565MODULE_DEVICE_TABLE(of, mvebu_audio_of_match); 566MODULE_DEVICE_TABLE(of, mvebu_audio_of_match);
diff --git a/sound/soc/sh/rcar/scu.c b/sound/soc/sh/rcar/scu.c
index 184d9008cecd..2df2e9150b89 100644
--- a/sound/soc/sh/rcar/scu.c
+++ b/sound/soc/sh/rcar/scu.c
@@ -157,9 +157,9 @@ static int rsnd_scu_start(struct rsnd_mod *mod,
157 int ret; 157 int ret;
158 158
159 /* 159 /*
160 * SCU will be used if it has RSND_SCU_USB_HPBIF flags 160 * SCU will be used if it has RSND_SCU_USE_HPBIF flags
161 */ 161 */
162 if (!(flags & RSND_SCU_USB_HPBIF)) { 162 if (!(flags & RSND_SCU_USE_HPBIF)) {
163 /* it use PIO transter */ 163 /* it use PIO transter */
164 dev_dbg(dev, "%s%d is not used\n", 164 dev_dbg(dev, "%s%d is not used\n",
165 rsnd_mod_name(mod), rsnd_mod_id(mod)); 165 rsnd_mod_name(mod), rsnd_mod_id(mod));