diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-09 11:07:42 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-09 11:07:42 -0500 |
| commit | 3ab345fc4b95a981a83f616487bbe07ddb5b1b1a (patch) | |
| tree | fa636303d4bcae2e6dfa7f3c54541195bf67b255 | |
| parent | 975e32c287a9b144cf115d3f42ca18664b3331df (diff) | |
| parent | 0a34b42b6245ccc710be6759cded5b7fe41ea1f9 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda/realtek - Fix lost speaker volume controls
ALSA: hda/realtek - Create "Bass Speaker" for two speaker pins
ALSA: hda/realtek - Don't create extra controls with channel suffix
ALSA: hda - Fix remaining VREF mute-LED NID check in post-3.1 changes
ALSA: hda - Fix GPIO LED setup for IDT 92HD75 codecs
ASoC: Provide a more complete DMA driver stub
ASoC: Remove references to corgi and spitz from machine driver document
ASoC: Make SND_SOC_MX27VIS_AIC32X4 depend on I2C
ASoC: Fix dependency for SND_SOC_RAUMFELD and SND_PXA2XX_SOC_HX4700
ASoC: uda1380: Return proper error in uda1380_modinit failure path
ASoC: kirkwood: Make SND_KIRKWOOD_SOC_OPENRD and SND_KIRKWOOD_SOC_T5325 depend on I2C
ASoC: Mark WM8994 ADC muxes as virtual
ALSA: hda/realtek - Fix Oops in alc_mux_select()
ALSA: sis7019 - give slow codecs more time to reset
| -rw-r--r-- | Documentation/sound/alsa/soc/machine.txt | 6 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 65 | ||||
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 47 | ||||
| -rw-r--r-- | sound/pci/sis7019.c | 64 | ||||
| -rw-r--r-- | sound/soc/codecs/uda1380.c | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8994.c | 12 | ||||
| -rw-r--r-- | sound/soc/imx/Kconfig | 2 | ||||
| -rw-r--r-- | sound/soc/kirkwood/Kconfig | 3 | ||||
| -rw-r--r-- | sound/soc/pxa/Kconfig | 3 | ||||
| -rw-r--r-- | sound/soc/soc-utils.c | 31 |
10 files changed, 172 insertions, 65 deletions
diff --git a/Documentation/sound/alsa/soc/machine.txt b/Documentation/sound/alsa/soc/machine.txt index 3e2ec9cbf397..d50c14df3411 100644 --- a/Documentation/sound/alsa/soc/machine.txt +++ b/Documentation/sound/alsa/soc/machine.txt | |||
| @@ -50,8 +50,7 @@ Machine DAI Configuration | |||
| 50 | The machine DAI configuration glues all the codec and CPU DAIs together. It can | 50 | The machine DAI configuration glues all the codec and CPU DAIs together. It can |
| 51 | also be used to set up the DAI system clock and for any machine related DAI | 51 | also be used to set up the DAI system clock and for any machine related DAI |
| 52 | initialisation e.g. the machine audio map can be connected to the codec audio | 52 | initialisation e.g. the machine audio map can be connected to the codec audio |
| 53 | map, unconnected codec pins can be set as such. Please see corgi.c, spitz.c | 53 | map, unconnected codec pins can be set as such. |
| 54 | for examples. | ||
| 55 | 54 | ||
| 56 | struct snd_soc_dai_link is used to set up each DAI in your machine. e.g. | 55 | struct snd_soc_dai_link is used to set up each DAI in your machine. e.g. |
| 57 | 56 | ||
| @@ -83,8 +82,7 @@ Machine Power Map | |||
| 83 | The machine driver can optionally extend the codec power map and to become an | 82 | The machine driver can optionally extend the codec power map and to become an |
| 84 | audio power map of the audio subsystem. This allows for automatic power up/down | 83 | audio power map of the audio subsystem. This allows for automatic power up/down |
| 85 | of speaker/HP amplifiers, etc. Codec pins can be connected to the machines jack | 84 | of speaker/HP amplifiers, etc. Codec pins can be connected to the machines jack |
| 86 | sockets in the machine init function. See soc/pxa/spitz.c and dapm.txt for | 85 | sockets in the machine init function. |
| 87 | details. | ||
| 88 | 86 | ||
| 89 | 87 | ||
| 90 | Machine Controls | 88 | Machine Controls |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index cbde019d3d52..1d07e8fa2433 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -297,6 +297,8 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx, | |||
| 297 | imux = &spec->input_mux[mux_idx]; | 297 | imux = &spec->input_mux[mux_idx]; |
| 298 | if (!imux->num_items && mux_idx > 0) | 298 | if (!imux->num_items && mux_idx > 0) |
| 299 | imux = &spec->input_mux[0]; | 299 | imux = &spec->input_mux[0]; |
| 300 | if (!imux->num_items) | ||
| 301 | return 0; | ||
| 300 | 302 | ||
| 301 | if (idx >= imux->num_items) | 303 | if (idx >= imux->num_items) |
| 302 | idx = imux->num_items - 1; | 304 | idx = imux->num_items - 1; |
| @@ -2629,6 +2631,8 @@ static const char *alc_get_line_out_pfx(struct alc_spec *spec, int ch, | |||
| 2629 | case AUTO_PIN_SPEAKER_OUT: | 2631 | case AUTO_PIN_SPEAKER_OUT: |
| 2630 | if (cfg->line_outs == 1) | 2632 | if (cfg->line_outs == 1) |
| 2631 | return "Speaker"; | 2633 | return "Speaker"; |
| 2634 | if (cfg->line_outs == 2) | ||
| 2635 | return ch ? "Bass Speaker" : "Speaker"; | ||
| 2632 | break; | 2636 | break; |
| 2633 | case AUTO_PIN_HP_OUT: | 2637 | case AUTO_PIN_HP_OUT: |
| 2634 | /* for multi-io case, only the primary out */ | 2638 | /* for multi-io case, only the primary out */ |
| @@ -2902,7 +2906,7 @@ static hda_nid_t alc_auto_look_for_dac(struct hda_codec *codec, hda_nid_t pin) | |||
| 2902 | if (!nid) | 2906 | if (!nid) |
| 2903 | continue; | 2907 | continue; |
| 2904 | if (found_in_nid_list(nid, spec->multiout.dac_nids, | 2908 | if (found_in_nid_list(nid, spec->multiout.dac_nids, |
| 2905 | spec->multiout.num_dacs)) | 2909 | ARRAY_SIZE(spec->private_dac_nids))) |
| 2906 | continue; | 2910 | continue; |
| 2907 | if (found_in_nid_list(nid, spec->multiout.hp_out_nid, | 2911 | if (found_in_nid_list(nid, spec->multiout.hp_out_nid, |
| 2908 | ARRAY_SIZE(spec->multiout.hp_out_nid))) | 2912 | ARRAY_SIZE(spec->multiout.hp_out_nid))) |
| @@ -2923,6 +2927,7 @@ static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin) | |||
| 2923 | return 0; | 2927 | return 0; |
| 2924 | } | 2928 | } |
| 2925 | 2929 | ||
| 2930 | /* return 0 if no possible DAC is found, 1 if one or more found */ | ||
| 2926 | static int alc_auto_fill_extra_dacs(struct hda_codec *codec, int num_outs, | 2931 | static int alc_auto_fill_extra_dacs(struct hda_codec *codec, int num_outs, |
| 2927 | const hda_nid_t *pins, hda_nid_t *dacs) | 2932 | const hda_nid_t *pins, hda_nid_t *dacs) |
| 2928 | { | 2933 | { |
| @@ -2940,7 +2945,7 @@ static int alc_auto_fill_extra_dacs(struct hda_codec *codec, int num_outs, | |||
| 2940 | if (!dacs[i]) | 2945 | if (!dacs[i]) |
| 2941 | dacs[i] = alc_auto_look_for_dac(codec, pins[i]); | 2946 | dacs[i] = alc_auto_look_for_dac(codec, pins[i]); |
| 2942 | } | 2947 | } |
| 2943 | return 0; | 2948 | return 1; |
| 2944 | } | 2949 | } |
| 2945 | 2950 | ||
| 2946 | static int alc_auto_fill_multi_ios(struct hda_codec *codec, | 2951 | static int alc_auto_fill_multi_ios(struct hda_codec *codec, |
| @@ -2950,7 +2955,7 @@ static int alc_auto_fill_multi_ios(struct hda_codec *codec, | |||
| 2950 | static int alc_auto_fill_dac_nids(struct hda_codec *codec) | 2955 | static int alc_auto_fill_dac_nids(struct hda_codec *codec) |
| 2951 | { | 2956 | { |
| 2952 | struct alc_spec *spec = codec->spec; | 2957 | struct alc_spec *spec = codec->spec; |
| 2953 | const struct auto_pin_cfg *cfg = &spec->autocfg; | 2958 | struct auto_pin_cfg *cfg = &spec->autocfg; |
| 2954 | bool redone = false; | 2959 | bool redone = false; |
| 2955 | int i; | 2960 | int i; |
| 2956 | 2961 | ||
| @@ -2961,6 +2966,7 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
| 2961 | spec->multiout.extra_out_nid[0] = 0; | 2966 | spec->multiout.extra_out_nid[0] = 0; |
| 2962 | memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids)); | 2967 | memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids)); |
| 2963 | spec->multiout.dac_nids = spec->private_dac_nids; | 2968 | spec->multiout.dac_nids = spec->private_dac_nids; |
| 2969 | spec->multi_ios = 0; | ||
| 2964 | 2970 | ||
| 2965 | /* fill hard-wired DACs first */ | 2971 | /* fill hard-wired DACs first */ |
| 2966 | if (!redone) { | 2972 | if (!redone) { |
| @@ -2994,10 +3000,12 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
| 2994 | for (i = 0; i < cfg->line_outs; i++) { | 3000 | for (i = 0; i < cfg->line_outs; i++) { |
| 2995 | if (spec->private_dac_nids[i]) | 3001 | if (spec->private_dac_nids[i]) |
| 2996 | spec->multiout.num_dacs++; | 3002 | spec->multiout.num_dacs++; |
| 2997 | else | 3003 | else { |
| 2998 | memmove(spec->private_dac_nids + i, | 3004 | memmove(spec->private_dac_nids + i, |
| 2999 | spec->private_dac_nids + i + 1, | 3005 | spec->private_dac_nids + i + 1, |
| 3000 | sizeof(hda_nid_t) * (cfg->line_outs - i - 1)); | 3006 | sizeof(hda_nid_t) * (cfg->line_outs - i - 1)); |
| 3007 | spec->private_dac_nids[cfg->line_outs - 1] = 0; | ||
| 3008 | } | ||
| 3001 | } | 3009 | } |
| 3002 | 3010 | ||
| 3003 | if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { | 3011 | if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { |
| @@ -3019,9 +3027,28 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
| 3019 | if (cfg->line_out_type != AUTO_PIN_HP_OUT) | 3027 | if (cfg->line_out_type != AUTO_PIN_HP_OUT) |
| 3020 | alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins, | 3028 | alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins, |
| 3021 | spec->multiout.hp_out_nid); | 3029 | spec->multiout.hp_out_nid); |
| 3022 | if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) | 3030 | if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { |
| 3023 | alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, cfg->speaker_pins, | 3031 | int err = alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, |
| 3024 | spec->multiout.extra_out_nid); | 3032 | cfg->speaker_pins, |
| 3033 | spec->multiout.extra_out_nid); | ||
| 3034 | /* if no speaker volume is assigned, try again as the primary | ||
| 3035 | * output | ||
| 3036 | */ | ||
| 3037 | if (!err && cfg->speaker_outs > 0 && | ||
| 3038 | cfg->line_out_type == AUTO_PIN_HP_OUT) { | ||
| 3039 | cfg->hp_outs = cfg->line_outs; | ||
| 3040 | memcpy(cfg->hp_pins, cfg->line_out_pins, | ||
| 3041 | sizeof(cfg->hp_pins)); | ||
| 3042 | cfg->line_outs = cfg->speaker_outs; | ||
| 3043 | memcpy(cfg->line_out_pins, cfg->speaker_pins, | ||
| 3044 | sizeof(cfg->speaker_pins)); | ||
| 3045 | cfg->speaker_outs = 0; | ||
| 3046 | memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins)); | ||
| 3047 | cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; | ||
| 3048 | redone = false; | ||
| 3049 | goto again; | ||
| 3050 | } | ||
| 3051 | } | ||
| 3025 | 3052 | ||
| 3026 | return 0; | 3053 | return 0; |
| 3027 | } | 3054 | } |
| @@ -3171,7 +3198,8 @@ static int alc_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
| 3171 | } | 3198 | } |
| 3172 | 3199 | ||
| 3173 | static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin, | 3200 | static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin, |
