diff options
-rw-r--r-- | Documentation/devicetree/bindings/sound/mvebu-audio.txt | 12 | ||||
-rw-r--r-- | include/sound/rcar_snd.h | 2 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 89 | ||||
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 50 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 56 | ||||
-rw-r--r-- | sound/soc/atmel/atmel_ssc_dai.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/mc13783.c | 4 | ||||
-rw-r--r-- | sound/soc/fsl/Kconfig | 1 | ||||
-rw-r--r-- | sound/soc/fsl/imx-audmux.c | 3 | ||||
-rw-r--r-- | sound/soc/kirkwood/kirkwood-i2s.c | 3 | ||||
-rw-r--r-- | sound/soc/sh/rcar/scu.c | 4 |
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 | ||
3 | Required properties: | 3 | Required 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: | |||
21 | Example: | 25 | Example: |
22 | 26 | ||
23 | i2s1: audio-controller@b4000 { | 27 | i2s1: 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 | ||
60 | struct rsnd_scu_platform_info { | 60 | struct 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 | */ | ||
562 | enum { | ||
563 | CS4208_GPIO0, | ||
564 | }; | ||
565 | |||
566 | static const struct hda_model_fixup cs4208_models[] = { | ||
567 | { .id = CS4208_GPIO0, .name = "gpio0" }, | ||
568 | {} | ||
569 | }; | ||
570 | |||
571 | static 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 | |||
578 | static 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 | |||
590 | static const struct hda_fixup cs4208_fixups[] = { | ||
591 | [CS4208_GPIO0] = { | ||
592 | .type = HDA_FIXUP_FUNC, | ||
593 | .v.func = cs4208_fixup_gpio0, | ||
594 | }, | ||
595 | }; | ||
596 | |||
597 | static 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) | |||
991 | static const struct hda_codec_preset snd_hda_preset_cirrus[] = { | 1064 | static 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 | ||
999 | MODULE_ALIAS("snd-hda-codec-id:10134206"); | 1073 | MODULE_ALIAS("snd-hda-codec-id:10134206"); |
1000 | MODULE_ALIAS("snd-hda-codec-id:10134207"); | 1074 | MODULE_ALIAS("snd-hda-codec-id:10134207"); |
1075 | MODULE_ALIAS("snd-hda-codec-id:10134208"); | ||
1001 | MODULE_ALIAS("snd-hda-codec-id:10134210"); | 1076 | MODULE_ALIAS("snd-hda-codec-id:10134210"); |
1002 | MODULE_ALIAS("snd-hda-codec-id:10134213"); | 1077 | MODULE_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; | |||
44 | module_param(static_hdmi_pcm, bool, 0644); | 44 | module_param(static_hdmi_pcm, bool, 0644); |
45 | MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info"); | 45 | MODULE_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 | |||
47 | struct hdmi_spec_per_cvt { | 49 | struct 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 | ||
1036 | static void haswell_verify_pin_D0(struct hda_codec *codec, | 1043 | static 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 */ | ||
3447 | static 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 | |||
3455 | static 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 | |||
3446 | enum { | 3496 | enum { |
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 | ||
3485 | static const struct hda_fixup alc269_fixups[] = { | 3536 | static 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 | ||
3740 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { | 3795 | static 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 |
561 | static struct of_device_id mvebu_audio_of_match[] = { | 561 | static 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 | }; |
565 | MODULE_DEVICE_TABLE(of, mvebu_audio_of_match); | 566 | MODULE_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)); |