aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c76
1 files changed, 76 insertions, 0 deletions
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)