diff options
| -rw-r--r-- | sound/pci/cmipci.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_analog.c | 45 | ||||
| -rw-r--r-- | sound/soc/codecs/Makefile | 1 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8580.c | 16 | ||||
| -rw-r--r-- | sound/soc/s3c24xx/s3c-i2s-v2.c | 3 | ||||
| -rw-r--r-- | sound/usb/caiaq/audio.c | 12 | ||||
| -rw-r--r-- | sound/usb/caiaq/device.c | 2 |
7 files changed, 65 insertions, 16 deletions
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index c7899c32aba1..449fe02f666e 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
| @@ -3014,7 +3014,7 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc | |||
| 3014 | .dev_free = snd_cmipci_dev_free, | 3014 | .dev_free = snd_cmipci_dev_free, |
| 3015 | }; | 3015 | }; |
| 3016 | unsigned int val; | 3016 | unsigned int val; |
| 3017 | long iomidi; | 3017 | long iomidi = 0; |
| 3018 | int integrated_midi = 0; | 3018 | int integrated_midi = 0; |
| 3019 | char modelstr[16]; | 3019 | char modelstr[16]; |
| 3020 | int pcm_index, pcm_spdif_index; | 3020 | int pcm_index, pcm_spdif_index; |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 9bcd8ab5a27f..84cc49ca9148 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -3817,6 +3817,49 @@ static struct hda_verb ad1884a_laptop_verbs[] = { | |||
| 3817 | { } /* end */ | 3817 | { } /* end */ |
| 3818 | }; | 3818 | }; |
| 3819 | 3819 | ||
| 3820 | static struct hda_verb ad1884a_mobile_verbs[] = { | ||
| 3821 | /* DACs; unmute as default */ | ||
| 3822 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, 0x27}, /* 0dB */ | ||
| 3823 | {0x04, AC_VERB_SET_AMP_GAIN_MUTE, 0x27}, /* 0dB */ | ||
| 3824 | /* Port-A (HP) mixer - route only from analog mixer */ | ||
| 3825 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
| 3826 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 3827 | /* Port-A pin */ | ||
| 3828 | {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
| 3829 | /* Port-A (HP) pin - always unmuted */ | ||
| 3830 | {0x11, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
| 3831 | /* Port-B (mic jack) pin */ | ||
| 3832 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
| 3833 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */ | ||
| 3834 | /* Port-C (int mic) pin */ | ||
| 3835 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
| 3836 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */ | ||
| 3837 | /* Port-F (int speaker) mixer - route only from analog mixer */ | ||
| 3838 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
| 3839 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 3840 | /* Port-F pin */ | ||
| 3841 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
| 3842 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
| 3843 | /* Analog mixer; mute as default */ | ||
| 3844 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
| 3845 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, | ||
| 3846 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
| 3847 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
| 3848 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
| 3849 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(5)}, | ||
| 3850 | /* Analog Mix output amp */ | ||
| 3851 | {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
| 3852 | /* capture sources */ | ||
| 3853 | /* {0x0c, AC_VERB_SET_CONNECT_SEL, 0x0}, */ /* set via unsol */ | ||
| 3854 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
| 3855 | {0x0d, AC_VERB_SET_CONNECT_SEL, 0x0}, | ||
| 3856 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
| 3857 | /* unsolicited event for pin-sense */ | ||
| 3858 | {0x11, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_HP_EVENT}, | ||
| 3859 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_MIC_EVENT}, | ||
| 3860 | { } /* end */ | ||
| 3861 | }; | ||
| 3862 | |||
| 3820 | /* | 3863 | /* |
| 3821 | * Thinkpad X300 | 3864 | * Thinkpad X300 |
| 3822 | * 0x11 - HP | 3865 | * 0x11 - HP |
| @@ -3988,7 +4031,7 @@ static int patch_ad1884a(struct hda_codec *codec) | |||
| 3988 | break; | 4031 | break; |
| 3989 | case AD1884A_MOBILE: | 4032 | case AD1884A_MOBILE: |
| 3990 | spec->mixers[0] = ad1884a_mobile_mixers; | 4033 | spec->mixers[0] = ad1884a_mobile_mixers; |
| 3991 | spec->init_verbs[spec->num_init_verbs++] = ad1884a_laptop_verbs; | 4034 | spec->init_verbs[0] = ad1884a_mobile_verbs; |
| 3992 | spec->multiout.dig_out_nid = 0; | 4035 | spec->multiout.dig_out_nid = 0; |
| 3993 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; | 4036 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; |
| 3994 | codec->patch_ops.init = ad1884a_hp_init; | 4037 | codec->patch_ops.init = ad1884a_hp_init; |
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 030d2454725f..f2653803ede8 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile | |||
| @@ -56,7 +56,6 @@ obj-$(CONFIG_SND_SOC_WM8900) += snd-soc-wm8900.o | |||
| 56 | obj-$(CONFIG_SND_SOC_WM8903) += snd-soc-wm8903.o | 56 | obj-$(CONFIG_SND_SOC_WM8903) += snd-soc-wm8903.o |
| 57 | obj-$(CONFIG_SND_SOC_WM8971) += snd-soc-wm8971.o | 57 | obj-$(CONFIG_SND_SOC_WM8971) += snd-soc-wm8971.o |
| 58 | obj-$(CONFIG_SND_SOC_WM8990) += snd-soc-wm8990.o | 58 | obj-$(CONFIG_SND_SOC_WM8990) += snd-soc-wm8990.o |
| 59 | obj-$(CONFIG_SND_SOC_WM8991) += snd-soc-wm8991.o | ||
| 60 | obj-$(CONFIG_SND_SOC_WM9705) += snd-soc-wm9705.o | 59 | obj-$(CONFIG_SND_SOC_WM9705) += snd-soc-wm9705.o |
| 61 | obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o | 60 | obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o |
| 62 | obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o | 61 | obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o |
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c index 442ea6f160fc..9f6be3d31ac0 100644 --- a/sound/soc/codecs/wm8580.c +++ b/sound/soc/codecs/wm8580.c | |||
| @@ -268,9 +268,11 @@ static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1); | |||
| 268 | static int wm8580_out_vu(struct snd_kcontrol *kcontrol, | 268 | static int wm8580_out_vu(struct snd_kcontrol *kcontrol, |
| 269 | struct snd_ctl_elem_value *ucontrol) | 269 | struct snd_ctl_elem_value *ucontrol) |
| 270 | { | 270 | { |
| 271 | struct soc_mixer_control *mc = | ||
| 272 | (struct soc_mixer_control *)kcontrol->private_value; | ||
| 271 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 273 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); |
| 272 | int reg = kcontrol->private_value & 0xff; | 274 | unsigned int reg = mc->reg; |
| 273 | int reg2 = (kcontrol->private_value >> 24) & 0xff; | 275 | unsigned int reg2 = mc->rreg; |
| 274 | int ret; | 276 | int ret; |
| 275 | u16 val; | 277 | u16 val; |
| 276 | 278 | ||
| @@ -292,15 +294,17 @@ static int wm8580_out_vu(struct snd_kcontrol *kcontrol, | |||
| 292 | return 0; | 294 | return 0; |
| 293 | } | 295 | } |
| 294 | 296 | ||
| 295 | #define SOC_WM8580_OUT_DOUBLE_R_TLV(xname, reg_left, reg_right, shift, max, invert, tlv_array) \ | 297 | #define SOC_WM8580_OUT_DOUBLE_R_TLV(xname, reg_left, reg_right, xshift, xmax, \ |
| 298 | xinvert, tlv_array) \ | ||
| 296 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | 299 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ |
| 297 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ | 300 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ |
| 298 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | 301 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ |
| 299 | .tlv.p = (tlv_array), \ | 302 | .tlv.p = (tlv_array), \ |
| 300 | .info = snd_soc_info_volsw_2r, \ | 303 | .info = snd_soc_info_volsw_2r, \ |
| 301 | .get = snd_soc_get_volsw_2r, .put = wm8580_out_vu, \ | 304 | .get = snd_soc_get_volsw_2r, .put = wm8580_out_vu, \ |
| 302 | .private_value = (reg_left) | ((shift) << 8) | \ | 305 | .private_value = (unsigned long)&(struct soc_mixer_control) \ |
| 303 | ((max) << 12) | ((invert) << 20) | ((reg_right) << 24) } | 306 | {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ |
| 307 | .max = xmax, .invert = xinvert} } | ||
| 304 | 308 | ||
| 305 | static const struct snd_kcontrol_new wm8580_snd_controls[] = { | 309 | static const struct snd_kcontrol_new wm8580_snd_controls[] = { |
| 306 | SOC_WM8580_OUT_DOUBLE_R_TLV("DAC1 Playback Volume", | 310 | SOC_WM8580_OUT_DOUBLE_R_TLV("DAC1 Playback Volume", |
| @@ -522,7 +526,7 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, | |||
| 522 | reg = wm8580_read(codec, WM8580_PLLA4 + offset); | 526 | reg = wm8580_read(codec, WM8580_PLLA4 + offset); |
| 523 | reg &= ~0x3f; | 527 | reg &= ~0x3f; |
| 524 | reg |= pll_div.prescale | pll_div.postscale << 1 | | 528 | reg |= pll_div.prescale | pll_div.postscale << 1 | |
| 525 | pll_div.freqmode << 4; | 529 | pll_div.freqmode << 3; |
| 526 | 530 | ||
| 527 | wm8580_write(codec, WM8580_PLLA4 + offset, reg); | 531 | wm8580_write(codec, WM8580_PLLA4 + offset, reg); |
| 528 | 532 | ||
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.c b/sound/soc/s3c24xx/s3c-i2s-v2.c index 689ffcd17e1f..ab680aac3fcb 100644 --- a/sound/soc/s3c24xx/s3c-i2s-v2.c +++ b/sound/soc/s3c24xx/s3c-i2s-v2.c | |||
| @@ -636,5 +636,6 @@ int s3c_i2sv2_register_dai(struct snd_soc_dai *dai) | |||
| 636 | 636 | ||
| 637 | return snd_soc_register_dai(dai); | 637 | return snd_soc_register_dai(dai); |
| 638 | } | 638 | } |
| 639 | |||
| 640 | EXPORT_SYMBOL_GPL(s3c_i2sv2_register_dai); | 639 | EXPORT_SYMBOL_GPL(s3c_i2sv2_register_dai); |
| 640 | |||
| 641 | MODULE_LICENSE("GPL"); | ||
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index 3f45c0fe61ab..b13ce767ac72 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c | |||
| @@ -195,11 +195,14 @@ static int snd_usb_caiaq_pcm_prepare(struct snd_pcm_substream *substream) | |||
| 195 | 195 | ||
| 196 | debug("%s(%p)\n", __func__, substream); | 196 | debug("%s(%p)\n", __func__, substream); |
| 197 | 197 | ||
| 198 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | 198 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
| 199 | dev->period_out_count[index] = BYTES_PER_SAMPLE + 1; | ||
| 199 | dev->audio_out_buf_pos[index] = BYTES_PER_SAMPLE + 1; | 200 | dev->audio_out_buf_pos[index] = BYTES_PER_SAMPLE + 1; |
| 200 | else | 201 | } else { |
| 202 | dev->period_in_count[index] = BYTES_PER_SAMPLE; | ||
| 201 | dev->audio_in_buf_pos[index] = BYTES_PER_SAMPLE; | 203 | dev->audio_in_buf_pos[index] = BYTES_PER_SAMPLE; |
| 202 | 204 | } | |
| 205 | |||
| 203 | if (dev->streaming) | 206 | if (dev->streaming) |
| 204 | return 0; | 207 | return 0; |
| 205 | 208 | ||
| @@ -300,8 +303,7 @@ static void check_for_elapsed_periods(struct snd_usb_caiaqdev *dev, | |||
| 300 | if (!sub) | 303 | if (!sub) |
| 301 | continue; | 304 | continue; |
| 302 | 305 | ||
| 303 | pb = frames_to_bytes(sub->runtime, | 306 | pb = snd_pcm_lib_period_bytes(sub); |
| 304 | sub->runtime->period_size); | ||
| 305 | cnt = (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) ? | 307 | cnt = (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) ? |
| 306 | &dev->period_out_count[stream] : | 308 | &dev->period_out_count[stream] : |
| 307 | &dev->period_in_count[stream]; | 309 | &dev->period_in_count[stream]; |
diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c index 6d517705da0e..515de1cd2a3e 100644 --- a/sound/usb/caiaq/device.c +++ b/sound/usb/caiaq/device.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include "input.h" | 35 | #include "input.h" |
| 36 | 36 | ||
| 37 | MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>"); | 37 | MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>"); |
| 38 | MODULE_DESCRIPTION("caiaq USB audio, version 1.3.13"); | 38 | MODULE_DESCRIPTION("caiaq USB audio, version 1.3.14"); |
| 39 | MODULE_LICENSE("GPL"); | 39 | MODULE_LICENSE("GPL"); |
| 40 | MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," | 40 | MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," |
| 41 | "{Native Instruments, RigKontrol3}," | 41 | "{Native Instruments, RigKontrol3}," |
