aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/sound/alsa/ALSA-Configuration.txt6
-rw-r--r--sound/pci/hda/patch_realtek.c76
2 files changed, 82 insertions, 0 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
index afdb6ffeae55..22aee1a5dd6e 100644
--- a/Documentation/sound/alsa/ALSA-Configuration.txt
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt
@@ -801,6 +801,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
801 will Will laptops (PB V7900) 801 will Will laptops (PB V7900)
802 replacer Replacer 672V 802 replacer Replacer 672V
803 basic fixed pin assignment (old default model) 803 basic fixed pin assignment (old default model)
804 test for testing/debugging purpose, almost all controls can
805 adjusted. Appearing only when compiled with
806 $CONFIG_SND_DEBUG=y
804 auto auto-config reading BIOS (default) 807 auto auto-config reading BIOS (default)
805 808
806 ALC262 809 ALC262
@@ -821,6 +824,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
821 3stack 3-stack model 824 3stack 3-stack model
822 toshiba Toshiba A205 825 toshiba Toshiba A205
823 acer Acer laptops 826 acer Acer laptops
827 test for testing/debugging purpose, almost all controls can
828 adjusted. Appearing only when compiled with
829 $CONFIG_SND_DEBUG=y
824 auto auto-config reading BIOS (default) 830 auto auto-config reading BIOS (default)
825 831
826 ALC662 832 ALC662
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0a64d24e7fda..1b2ad52bc908 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -106,6 +106,9 @@ enum {
106 ALC268_3ST, 106 ALC268_3ST,
107 ALC268_TOSHIBA, 107 ALC268_TOSHIBA,
108 ALC268_ACER, 108 ALC268_ACER,
109#ifdef CONFIG_SND_DEBUG
110 ALC268_TEST,
111#endif
109 ALC268_AUTO, 112 ALC268_AUTO,
110 ALC268_MODEL_LAST /* last tag */ 113 ALC268_MODEL_LAST /* last tag */
111}; 114};
@@ -9366,6 +9369,60 @@ static struct hda_input_mux alc268_capture_source = {
9366 }, 9369 },
9367}; 9370};
9368 9371
9372#ifdef CONFIG_SND_DEBUG
9373static struct snd_kcontrol_new alc268_test_mixer[] = {
9374 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT),
9375 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT),
9376 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT),
9377 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
9378
9379 /* Volume widgets */
9380 HDA_CODEC_VOLUME("LOUT1 Playback Volume", 0x02, 0x0, HDA_OUTPUT),
9381 HDA_CODEC_VOLUME("LOUT2 Playback Volume", 0x03, 0x0, HDA_OUTPUT),
9382 HDA_BIND_MUTE_MONO("Mono sum Playback Switch", 0x0e, 1, 2, HDA_INPUT),
9383 HDA_BIND_MUTE("LINE-OUT sum Playback Switch", 0x0f, 2, HDA_INPUT),
9384 HDA_BIND_MUTE("HP-OUT sum Playback Switch", 0x10, 2, HDA_INPUT),
9385 HDA_BIND_MUTE("LINE-OUT Playback Switch", 0x14, 2, HDA_OUTPUT),
9386 HDA_BIND_MUTE("HP-OUT Playback Switch", 0x15, 2, HDA_OUTPUT),
9387 HDA_BIND_MUTE("Mono Playback Switch", 0x16, 2, HDA_OUTPUT),
9388 HDA_CODEC_VOLUME("MIC1 Capture Volume", 0x18, 0x0, HDA_INPUT),
9389 HDA_BIND_MUTE("MIC1 Capture Switch", 0x18, 2, HDA_OUTPUT),
9390 HDA_CODEC_VOLUME("MIC2 Capture Volume", 0x19, 0x0, HDA_INPUT),
9391 HDA_CODEC_VOLUME("LINE1 Capture Volume", 0x1a, 0x0, HDA_INPUT),
9392 HDA_BIND_MUTE("LINE1 Capture Switch", 0x1a, 2, HDA_OUTPUT),
9393 HDA_CODEC_VOLUME("PCBEEP Playback Volume", 0x1d, 0x0, HDA_INPUT),
9394 HDA_CODEC_VOLUME("PCM-IN1 Capture Volume", 0x23, 0x0, HDA_OUTPUT),
9395 HDA_BIND_MUTE("PCM-IN1 Capture Switch", 0x23, 2, HDA_OUTPUT),
9396 HDA_CODEC_VOLUME("PCM-IN2 Capture Volume", 0x24, 0x0, HDA_OUTPUT),
9397 HDA_BIND_MUTE("PCM-IN2 Capture Switch", 0x24, 2, HDA_OUTPUT),
9398
9399 /* Modes for retasking pin widgets */
9400 ALC_PIN_MODE("LINE-OUT pin mode", 0x14, ALC_PIN_DIR_INOUT),
9401 ALC_PIN_MODE("HP-OUT pin mode", 0x15, ALC_PIN_DIR_INOUT),
9402 ALC_PIN_MODE("MIC1 pin mode", 0x18, ALC_PIN_DIR_INOUT),
9403 ALC_PIN_MODE("LINE1 pin mode", 0x1a, ALC_PIN_DIR_INOUT),
9404
9405 /* Controls for GPIO pins, assuming they are configured as outputs */
9406 ALC_GPIO_DATA_SWITCH("GPIO pin 0", 0x01, 0x01),
9407 ALC_GPIO_DATA_SWITCH("GPIO pin 1", 0x01, 0x02),
9408 ALC_GPIO_DATA_SWITCH("GPIO pin 2", 0x01, 0x04),
9409 ALC_GPIO_DATA_SWITCH("GPIO pin 3", 0x01, 0x08),
9410
9411 /* Switches to allow the digital SPDIF output pin to be enabled.
9412 * The ALC268 does not have an SPDIF input.
9413 */
9414 ALC_SPDIF_CTRL_SWITCH("SPDIF Playback Switch", 0x06, 0x01),
9415
9416 /* A switch allowing EAPD to be enabled. Some laptops seem to use
9417 * this output to turn on an external amplifier.
9418 */
9419 ALC_EAPD_CTRL_SWITCH("LINE-OUT EAPD Enable Switch", 0x0f, 0x02),
9420 ALC_EAPD_CTRL_SWITCH("HP-OUT EAPD Enable Switch", 0x10, 0x02),
9421
9422 { } /* end */
9423};
9424#endif
9425
9369/* create input playback/capture controls for the given pin */ 9426/* create input playback/capture controls for the given pin */
9370static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid, 9427static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid,
9371 const char *ctlname, int idx) 9428 const char *ctlname, int idx)
@@ -9578,6 +9635,9 @@ static const char *alc268_models[ALC268_MODEL_LAST] = {
9578 [ALC268_3ST] = "3stack", 9635 [ALC268_3ST] = "3stack",
9579 [ALC268_TOSHIBA] = "toshiba", 9636 [ALC268_TOSHIBA] = "toshiba",
9580 [ALC268_ACER] = "acer", 9637 [ALC268_ACER] = "acer",
9638#ifdef CONFIG_SND_DEBUG
9639 [ALC268_TEST] = "test",
9640#endif
9581 [ALC268_AUTO] = "auto", 9641 [ALC268_AUTO] = "auto",
9582}; 9642};
9583 9643
@@ -9636,6 +9696,22 @@ static struct alc_config_preset alc268_presets[] = {
9636 .unsol_event = alc268_acer_unsol_event, 9696 .unsol_event = alc268_acer_unsol_event,
9637 .init_hook = alc268_acer_init_hook, 9697 .init_hook = alc268_acer_init_hook,
9638 }, 9698 },
9699#ifdef CONFIG_SND_DEBUG
9700 [ALC268_TEST] = {
9701 .mixers = { alc268_test_mixer, alc268_capture_mixer },
9702 .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
9703 alc268_volume_init_verbs },
9704 .num_dacs = ARRAY_SIZE(alc268_dac_nids),
9705 .dac_nids = alc268_dac_nids,
9706 .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
9707 .adc_nids = alc268_adc_nids_alt,
9708 .hp_nid = 0x03,
9709 .dig_out_nid = ALC268_DIGOUT_NID,
9710 .num_channel_mode = ARRAY_SIZE(alc268_modes),
9711 .channel_mode = alc268_modes,
9712 .input_mux = &alc268_capture_source,
9713 },
9714#endif
9639}; 9715};
9640 9716
9641static int patch_alc268(struct hda_codec *codec) 9717static int patch_alc268(struct hda_codec *codec)