diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-26 22:04:24 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-26 22:04:24 -0500 |
| commit | 09cfd929860532f95c9944d39abbb043b8082f36 (patch) | |
| tree | b06c1666cc5e40fa350103fddcea780455b28799 | |
| parent | 8c6531f7a99f29ba8817ffb12cc9ecf190049bd6 (diff) | |
| parent | 7cb41c65b3fc547da4050721445d07277768aa37 (diff) | |
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa:
[ALSA] version 1.0.15
[ALSA] emu10k1 - Check value ranges in ctl callbacks
[ALSA] emu10k1: Add mixer controls parameter checking.
[ALSA] fix private data pointer calculation in CS4270 driver
[ALSA] portman2x4 - Fix probe error
[ALSA] ca0106 - Fix write proc assignment
[ALSA] s3c2443-ac97: compilation fix
[ALSA] hda-codec - Revert volume knob controls in STAC codecs
[ALSA] ca0106 - Check value range in ctl callbacks
[ALSA] hda-codec - Check PINCAP only for PIN widgets
[ALSA] mpu401: fix recursive locking in timer
[ALSA] cmipci: fix FLINKON/OFF bits
[ALSA] hda-codec - Disable shared stream on AD1986A
| -rw-r--r-- | include/sound/version.h | 2 | ||||
| -rw-r--r-- | sound/drivers/mpu401/mpu401_uart.c | 12 | ||||
| -rw-r--r-- | sound/drivers/portman2x4.c | 2 | ||||
| -rw-r--r-- | sound/pci/ca0106/ca0106_mixer.c | 18 | ||||
| -rw-r--r-- | sound/pci/ca0106/ca0106_proc.c | 4 | ||||
| -rw-r--r-- | sound/pci/cmipci.c | 5 | ||||
| -rw-r--r-- | sound/pci/emu10k1/emumixer.c | 65 | ||||
| -rw-r--r-- | sound/pci/emu10k1/p16v.c | 4 | ||||
| -rw-r--r-- | sound/pci/hda/hda_codec.c | 40 | ||||
| -rw-r--r-- | sound/pci/hda/hda_local.h | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_analog.c | 8 | ||||
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 57 | ||||
| -rw-r--r-- | sound/soc/codecs/cs4270.c | 3 | ||||
| -rw-r--r-- | sound/soc/s3c24xx/s3c2443-ac97.c | 2 |
14 files changed, 118 insertions, 105 deletions
diff --git a/include/sound/version.h b/include/sound/version.h index a2be8ad8894b..a9781eb0da09 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
| @@ -1,3 +1,3 @@ | |||
| 1 | /* include/version.h. Generated by alsa/ksync script. */ | 1 | /* include/version.h. Generated by alsa/ksync script. */ |
| 2 | #define CONFIG_SND_VERSION "1.0.15" | 2 | #define CONFIG_SND_VERSION "1.0.15" |
| 3 | #define CONFIG_SND_DATE " (Tue Oct 23 06:09:18 2007 UTC)" | 3 | #define CONFIG_SND_DATE " (Tue Nov 20 19:16:42 2007 UTC)" |
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c index 3306ecd49243..b57f2d5a1c9d 100644 --- a/sound/drivers/mpu401/mpu401_uart.c +++ b/sound/drivers/mpu401/mpu401_uart.c | |||
| @@ -97,23 +97,27 @@ static void snd_mpu401_uart_clear_rx(struct snd_mpu401 *mpu) | |||
| 97 | 97 | ||
| 98 | static void uart_interrupt_tx(struct snd_mpu401 *mpu) | 98 | static void uart_interrupt_tx(struct snd_mpu401 *mpu) |
| 99 | { | 99 | { |
| 100 | unsigned long flags; | ||
| 101 | |||
| 100 | if (test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode) && | 102 | if (test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode) && |
| 101 | test_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode)) { | 103 | test_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode)) { |
| 102 | spin_lock(&mpu->output_lock); | 104 | spin_lock_irqsave(&mpu->output_lock, flags); |
| 103 | snd_mpu401_uart_output_write(mpu); | 105 | snd_mpu401_uart_output_write(mpu); |
| 104 | spin_unlock(&mpu->output_lock); | 106 | spin_unlock_irqrestore(&mpu->output_lock, flags); |
| 105 | } | 107 | } |
| 106 | } | 108 | } |
| 107 | 109 | ||
| 108 | static void _snd_mpu401_uart_interrupt(struct snd_mpu401 *mpu) | 110 | static void _snd_mpu401_uart_interrupt(struct snd_mpu401 *mpu) |
| 109 | { | 111 | { |
| 112 | unsigned long flags; | ||
| 113 | |||
| 110 | if (mpu->info_flags & MPU401_INFO_INPUT) { | 114 | if (mpu->info_flags & MPU401_INFO_INPUT) { |
| 111 | spin_lock(&mpu->input_lock); | 115 | spin_lock_irqsave(&mpu->input_lock, flags); |
| 112 | if (test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) | 116 | if (test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) |
| 113 | snd_mpu401_uart_input_read(mpu); | 117 | snd_mpu401_uart_input_read(mpu); |
| 114 | else | 118 | else |
| 115 | snd_mpu401_uart_clear_rx(mpu); | 119 | snd_mpu401_uart_clear_rx(mpu); |
| 116 | spin_unlock(&mpu->input_lock); | 120 | spin_unlock_irqrestore(&mpu->input_lock, flags); |
| 117 | } | 121 | } |
| 118 | if (! (mpu->info_flags & MPU401_INFO_TX_IRQ)) | 122 | if (! (mpu->info_flags & MPU401_INFO_TX_IRQ)) |
| 119 | /* ok. for better Tx performance try do some output | 123 | /* ok. for better Tx performance try do some output |
diff --git a/sound/drivers/portman2x4.c b/sound/drivers/portman2x4.c index e065b2a6444a..1b832870cc84 100644 --- a/sound/drivers/portman2x4.c +++ b/sound/drivers/portman2x4.c | |||
| @@ -668,7 +668,7 @@ static int __devinit snd_portman_probe_port(struct parport *p) | |||
| 668 | parport_release(pardev); | 668 | parport_release(pardev); |
| 669 | parport_unregister_device(pardev); | 669 | parport_unregister_device(pardev); |
| 670 | 670 | ||
| 671 | return res; | 671 | return res ? -EIO : 0; |
| 672 | } | 672 | } |
| 673 | 673 | ||
| 674 | static void __devinit snd_portman_attach(struct parport *p) | 674 | static void __devinit snd_portman_attach(struct parport *p) |
diff --git a/sound/pci/ca0106/ca0106_mixer.c b/sound/pci/ca0106/ca0106_mixer.c index be519a17dfa5..3f9b5c560036 100644 --- a/sound/pci/ca0106/ca0106_mixer.c +++ b/sound/pci/ca0106/ca0106_mixer.c | |||
| @@ -86,7 +86,7 @@ static int snd_ca0106_shared_spdif_get(struct snd_kcontrol *kcontrol, | |||
| 86 | { | 86 | { |
| 87 | struct snd_ca0106 *emu = snd_kcontrol_chip(kcontrol); | 87 | struct snd_ca0106 *emu = snd_kcontrol_chip(kcontrol); |
| 88 | 88 | ||
| 89 | ucontrol->value.enumerated.item[0] = emu->spdif_enable; | 89 | ucontrol->value.integer.value[0] = emu->spdif_enable; |
| 90 | return 0; | 90 | return 0; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| @@ -98,11 +98,11 @@ static int snd_ca0106_shared_spdif_put(struct snd_kcontrol *kcontrol, | |||
| 98 | int change = 0; | 98 | int change = 0; |
| 99 | u32 mask; | 99 | u32 mask; |
| 100 | 100 | ||
| 101 | val = ucontrol->value.enumerated.item[0] ; | 101 | val = !!ucontrol->value.integer.value[0]; |
| 102 | change = (emu->spdif_enable != val); | 102 | change = (emu->spdif_enable != val); |
| 103 | if (change) { | 103 | if (change) { |
| 104 | emu->spdif_enable = val; | 104 | emu->spdif_enable = val; |
| 105 | if (val == 1) { | 105 | if (val) { |
| 106 | /* Digital */ | 106 | /* Digital */ |
| 107 | snd_ca0106_ptr_write(emu, SPDIF_SELECT1, 0, 0xf); | 107 | snd_ca0106_ptr_write(emu, SPDIF_SELECT1, 0, 0xf); |
| 108 | snd_ca0106_ptr_write(emu, SPDIF_SELECT2, 0, 0x0b000000); | 108 | snd_ca0106_ptr_write(emu, SPDIF_SELECT2, 0, 0x0b000000); |
| @@ -159,6 +159,8 @@ static int snd_ca0106_capture_source_put(struct snd_kcontrol *kcontrol, | |||
| 159 | u32 source; | 159 | u32 source; |
| 160 | 160 | ||
| 161 | val = ucontrol->value.enumerated.item[0] ; | 161 | val = ucontrol->value.enumerated.item[0] ; |
| 162 | if (val >= 6) | ||
| 163 | return -EINVAL; | ||
| 162 | change = (emu->capture_source != val); | 164 | change = (emu->capture_source != val); |
| 163 | if (change) { | 165 | if (change) { |
| 164 | emu->capture_source = val; | 166 | emu->capture_source = val; |
| @@ -207,6 +209,8 @@ static int snd_ca0106_i2c_capture_source_put(struct snd_kcontrol *kcontrol, | |||
| 207 | * for the particular source. | 209 | * for the particular source. |
| 208 | */ | 210 | */ |
| 209 | source_id = ucontrol->value.enumerated.item[0] ; | 211 | source_id = ucontrol->value.enumerated.item[0] ; |
| 212 | if (source_id >= 4) | ||
| 213 | return -EINVAL; | ||
| 210 | change = (emu->i2c_capture_source != source_id); | 214 | change = (emu->i2c_capture_source != source_id); |
| 211 | if (change) { | 215 | if (change) { |
| 212 | snd_ca0106_i2c_write(emu, ADC_MUX, 0); /* Mute input */ | 216 | snd_ca0106_i2c_write(emu, ADC_MUX, 0); /* Mute input */ |
| @@ -271,6 +275,8 @@ static int snd_ca0106_capture_mic_line_in_put(struct snd_kcontrol *kcontrol, | |||
| 271 | u32 tmp; | 275 | u32 tmp; |
| 272 | 276 | ||
| 273 | val = ucontrol->value.enumerated.item[0] ; | 277 | val = ucontrol->value.enumerated.item[0] ; |
| 278 | if (val > 1) | ||
| 279 | return -EINVAL; | ||
| 274 | change = (emu->capture_mic_line_in != val); | 280 | change = (emu->capture_mic_line_in != val); |
| 275 | if (change) { | 281 | if (change) { |
| 276 | emu->capture_mic_line_in = val; | 282 | emu->capture_mic_line_in = val; |
| @@ -443,7 +449,7 @@ static int snd_ca0106_i2c_volume_put(struct snd_kcontrol *kcontrol, | |||
| 443 | ogain = emu->i2c_capture_volume[source_id][0]; /* Left */ | 449 | ogain = emu->i2c_capture_volume[source_id][0]; /* Left */ |
| 444 | ngain = ucontrol->value.integer.value[0]; | 450 | ngain = ucontrol->value.integer.value[0]; |
| 445 | if (ngain > 0xff) | 451 | if (ngain > 0xff) |
| 446 | return 0; | 452 | return -EINVAL; |
| 447 | if (ogain != ngain) { | 453 | if (ogain != ngain) { |
| 448 | if (emu->i2c_capture_source == source_id) | 454 | if (emu->i2c_capture_source == source_id) |
| 449 | snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) ); | 455 | snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) ); |
| @@ -453,7 +459,7 @@ static int snd_ca0106_i2c_volume_put(struct snd_kcontrol *kcontrol, | |||
| 453 | ogain = emu->i2c_capture_volume[source_id][1]; /* Right */ | 459 | ogain = emu->i2c_capture_volume[source_id][1]; /* Right */ |
| 454 | ngain = ucontrol->value.integer.value[1]; | 460 | ngain = ucontrol->value.integer.value[1]; |
| 455 | if (ngain > 0xff) | 461 | if (ngain > 0xff) |
| 456 | return 0; | 462 | return -EINVAL; |
| 457 | if (ogain != ngain) { | 463 | if (ogain != ngain) { |
| 458 | if (emu->i2c_capture_source == source_id) | 464 | if (emu->i2c_capture_source == source_id) |
| 459 | snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff)); | 465 | snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff)); |
| @@ -497,7 +503,7 @@ static int spi_mute_put(struct snd_kcontrol *kcontrol, | |||
| 497 | } | 503 | } |
| 498 | 504 | ||
| 499 | ret = snd_ca0106_spi_write(emu, emu->spi_dac_reg[reg]); | 505 | ret = snd_ca0106_spi_write(emu, emu->spi_dac_reg[reg]); |
| 500 | return ret ? -1 : 1; | 506 | return ret ? -EINVAL : 1; |
| 501 | } | 507 | } |
| 502 | 508 | ||
| 503 | #define CA_VOLUME(xname,chid,reg) \ | 509 | #define CA_VOLUME(xname,chid,reg) \ |
diff --git a/sound/pci/ca0106/ca0106_proc.c b/sound/pci/ca0106/ca0106_proc.c index ae80f51d8c4f..61f2718ae359 100644 --- a/sound/pci/ca0106/ca0106_proc.c +++ b/sound/pci/ca0106/ca0106_proc.c | |||
| @@ -445,13 +445,11 @@ int __devinit snd_ca0106_proc_init(struct snd_ca0106 * emu) | |||
| 445 | snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read1); | 445 | snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read1); |
| 446 | entry->c.text.write = snd_ca0106_proc_reg_write; | 446 | entry->c.text.write = snd_ca0106_proc_reg_write; |
| 447 | entry->mode |= S_IWUSR; | 447 | entry->mode |= S_IWUSR; |
| 448 | // entry->private_data = emu; | ||
| 449 | } | 448 | } |
| 450 | if(! snd_card_proc_new(emu->card, "ca0106_i2c", &entry)) { | 449 | if(! snd_card_proc_new(emu->card, "ca0106_i2c", &entry)) { |
| 451 | snd_info_set_text_ops(entry, emu, snd_ca0106_proc_i2c_write); | ||
| 452 | entry->c.text.write = snd_ca0106_proc_i2c_write; | 450 | entry->c.text.write = snd_ca0106_proc_i2c_write; |
| 451 | entry->private_data = emu; | ||
| 453 | entry->mode |= S_IWUSR; | 452 | entry->mode |= S_IWUSR; |
| 454 | // entry->private_data = emu; | ||
| 455 | } | 453 | } |
| 456 | if(! snd_card_proc_new(emu->card, "ca0106_regs2", &entry)) | 454 | if(! snd_card_proc_new(emu->card, "ca0106_regs2", &entry)) |
| 457 | snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read2); | 455 | snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read2); |
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 6832649879ce..1fa5f004e858 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
| @@ -246,10 +246,9 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address."); | |||
| 246 | #define CM_MMODE_MASK 0x00000E00 /* model DAA interface mode */ | 246 | #define CM_MMODE_MASK 0x00000E00 /* model DAA interface mode */ |
| 247 | #define CM_SPDIF_SELECT2 0x00000100 /* for model > 039 ? */ | 247 | #define CM_SPDIF_SELECT2 0x00000100 /* for model > 039 ? */ |
| 248 | #define CM_ENCENTER 0x00000080 | 248 | #define CM_ENCENTER 0x00000080 |
| 249 | #define CM_FLINKON 0x00000080 /* force modem link detection on, model 037 */ | 249 | #define CM_FLINKON 0x00000040 /* force modem link detection on, model 037 */ |
| 250 | #define CM_MUTECH1 0x00000040 /* mute PCI ch1 to DAC */ | 250 | #define CM_MUTECH1 0x00000040 /* mute PCI ch1 to DAC */ |
| 251 | #define CM_FLINKOFF 0x00000040 /* force modem link detection off, model 037 */ | 251 | #define CM_FLINKOFF 0x00000020 /* force modem link detection off, model 037 */ |
| 252 | #define CM_UNKNOWN_18_5 0x00000020 /* ? */ | ||
| 253 | #define CM_MIDSMP 0x00000010 /* 1/2 interpolation at front end DAC */ | 252 | #define CM_MIDSMP 0x00000010 /* 1/2 interpolation at front end DAC */ |
| 254 | #define CM_UPDDMA_MASK 0x0000000C /* TDMA position update notification */ | 253 | #define CM_UPDDMA_MASK 0x0000000C /* TDMA position update notification */ |
| 255 | #define CM_UPDDMA_2048 0x00000000 | 254 | #define CM_UPDDMA_2048 0x00000000 |
diff --git a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c index 54a2034d8edd..ccacd7b890e8 100644 --- a/sound/pci/emu10k1/emumixer.c +++ b/sound/pci/emu10k1/emumixer.c | |||
| @@ -58,6 +58,9 @@ static int snd_emu10k1_spdif_get(struct snd_kcontrol *kcontrol, | |||
| 58 | unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); | 58 | unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); |
| 59 | unsigned long flags; | 59 | unsigned long flags; |
| 60 | 60 | ||
| 61 | /* Limit: emu->spdif_bits */ | ||
| 62 | if (idx >= 3) | ||
| 63 | return -EINVAL; | ||
| 61 | spin_lock_irqsave(&emu->reg_lock, flags); | 64 | spin_lock_irqsave(&emu->reg_lock, flags); |
| 62 | ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; | 65 | ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; |
| 63 | ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; | 66 | ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; |
| @@ -272,9 +275,12 @@ static int snd_emu1010_output_source_get(struct snd_kcontrol *kcontrol, | |||
| 272 | struct snd_ctl_elem_value *ucontrol) | 275 | struct snd_ctl_elem_value *ucontrol) |
| 273 | { | 276 | { |
| 274 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 277 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 275 | int channel; | 278 | unsigned int channel; |
| 276 | 279 | ||
| 277 | channel = (kcontrol->private_value) & 0xff; | 280 | channel = (kcontrol->private_value) & 0xff; |
| 281 | /* Limit: emu1010_output_dst, emu->emu1010.output_source */ | ||
| 282 | if (channel >= 24) | ||
| 283 | return -EINVAL; | ||
| 278 | ucontrol->value.enumerated.item[0] = emu->emu1010.output_source[channel]; | 284 | ucontrol->value.enumerated.item[0] = emu->emu1010.output_source[channel]; |
| 279 | return 0; | 285 | return 0; |
| 280 | } | 286 | } |
| @@ -285,11 +291,17 @@ static int snd_emu1010_output_source_put(struct snd_kcontrol *kcontrol, | |||
| 285 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 291 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 286 | int change = 0; | 292 | int change = 0; |
| 287 | unsigned int val; | 293 | unsigned int val; |
| 288 | int channel; | 294 | unsigned int channel; |
| 289 | 295 | ||
| 296 | val = ucontrol->value.enumerated.item[0]; | ||
| 297 | if (val >= 53) | ||
| 298 | return -EINVAL; | ||
| 290 | channel = (kcontrol->private_value) & 0xff; | 299 | channel = (kcontrol->private_value) & 0xff; |
| 291 | if (emu->emu1010.output_source[channel] != ucontrol->value.enumerated.item[0]) { | 300 | /* Limit: emu1010_output_dst, emu->emu1010.output_source */ |
| 292 | val = emu->emu1010.output_source[channel] = ucontrol->value.enumerated.item[0]; | 301 | if (channel >= 24) |
| 302 | return -EINVAL; | ||
| 303 | if (emu->emu1010.output_source[channel] != val) { | ||
| 304 | emu->emu1010.output_source[channel] = val; | ||
| 293 | change = 1; | 305 | change = 1; |
| 294 | snd_emu1010_fpga_link_dst_src_write(emu, | 306 | snd_emu1010_fpga_link_dst_src_write(emu, |
| 295 | emu1010_output_dst[channel], emu1010_src_regs[val]); | 307 | emu1010_output_dst[channel], emu1010_src_regs[val]); |
| @@ -301,9 +313,12 @@ static int snd_emu1010_input_source_get(struct snd_kcontrol *kcontrol, | |||
| 301 | struct snd_ctl_elem_value *ucontrol) | 313 | struct snd_ctl_elem_value *ucontrol) |
| 302 | { | 314 | { |
| 303 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 315 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 304 | int channel; | 316 | unsigned int channel; |
| 305 | 317 | ||
| 306 | channel = (kcontrol->private_value) & 0xff; | 318 | channel = (kcontrol->private_value) & 0xff; |
| 319 | /* Limit: emu1010_input_dst, emu->emu1010.input_source */ | ||
| 320 | if (channel >= 22) | ||
| 321 | return -EINVAL; | ||
| 307 | ucontrol->value.enumerated.item[0] = emu->emu1010.input_source[channel]; | 322 | ucontrol->value.enumerated.item[0] = emu->emu1010.input_source[channel]; |
| 308 | return 0; | 323 | return 0; |
| 309 | } | 324 | } |
| @@ -314,11 +329,17 @@ static int snd_emu1010_input_source_put(struct snd_kcontrol *kcontrol, | |||
| 314 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 329 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 315 | int change = 0; | 330 | int change = 0; |
| 316 | unsigned int val; | 331 | unsigned int val; |
| 317 | int channel; | 332 | unsigned int channel; |
| 318 | 333 | ||
| 334 | val = ucontrol->value.enumerated.item[0]; | ||
| 335 | if (val >= 53) | ||
| 336 | return -EINVAL; | ||
| 319 | channel = (kcontrol->private_value) & 0xff; | 337 | channel = (kcontrol->private_value) & 0xff; |
| 320 | if (emu->emu1010.input_source[channel] != ucontrol->value.enumerated.item[0]) { | 338 | /* Limit: emu1010_input_dst, emu->emu1010.input_source */ |
| 321 | val = emu->emu1010.input_source[channel] = ucontrol->value.enumerated.item[0]; | 339 | if (channel >= 22) |
| 340 | return -EINVAL; | ||
| 341 | if (emu->emu1010.input_source[channel] != val) { | ||
| 342 | emu->emu1010.input_source[channel] = val; | ||
| 322 | change = 1; | 343 | change = 1; |
| 323 | snd_emu1010_fpga_link_dst_src_write(emu, | 344 | snd_emu1010_fpga_link_dst_src_write(emu, |
| 324 | emu1010_input_dst[channel], emu1010_src_regs[val]); | 345 | emu1010_input_dst[channel], emu1010_src_regs[val]); |
| @@ -533,6 +554,9 @@ static int snd_emu1010_internal_clock_put(struct snd_kcontrol *kcontrol, | |||
| 533 | int change = 0; | 554 | int change = 0; |
| 534 | 555 | ||
| 535 | val = ucontrol->value.enumerated.item[0] ; | 556 | val = ucontrol->value.enumerated.item[0] ; |
| 557 | /* Limit: uinfo->value.enumerated.items = 4; */ | ||
| 558 | if (val >= 4) | ||
| 559 | return -EINVAL; | ||
| 536 | change = (emu->emu1010.internal_clock != val); | 560 | change = (emu->emu1010.internal_clock != val); |
| 537 | if (change) { | 561 | if (change) { |
| 538 | emu->emu1010.internal_clock = val; | 562 | emu->emu1010.internal_clock = val; |
| @@ -669,7 +693,11 @@ static int snd_audigy_i2c_capture_source_put(struct snd_kcontrol *kcontrol, | |||
| 669 | * update the capture volume from the cached value | 693 | * update the capture volume from the cached value |
| 670 | * for the particular source. | 694 | * for the particular source. |
| 671 | */ | 695 | */ |
| 672 | source_id = ucontrol->value.enumerated.item[0]; /* Use 2 and 3 */ | 696 | source_id = ucontrol->value.enumerated.item[0]; |
| 697 | /* Limit: uinfo->value.enumerated.items = 2; */ | ||
| 698 | /* emu->i2c_capture_volume */ | ||
| 699 | if (source_id >= 2) | ||
| 700 | return -EINVAL; | ||
| 673 | change = (emu->i2c_capture_source != source_id); | 701 | change = (emu->i2c_capture_source != source_id); |
| 674 | if (change) { | 702 | if (change) { |
| 675 | snd_emu10k1_i2c_write(emu, ADC_MUX, 0); /* Mute input */ | 703 | snd_emu10k1_i2c_write(emu, ADC_MUX, 0); /* Mute input */ |
| @@ -720,9 +748,13 @@ static int snd_audigy_i2c_volume_get(struct snd_kcontrol *kcontrol, | |||
| 720 | struct snd_ctl_elem_value *ucontrol) | 748 | struct snd_ctl_elem_value *ucontrol) |
| 721 | { | 749 | { |
| 722 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 750 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 723 | int source_id; | 751 | unsigned int source_id; |
| 724 | 752 | ||
| 725 | source_id = kcontrol->private_value; | 753 | source_id = kcontrol->private_value; |
| 754 | /* Limit: emu->i2c_capture_volume */ | ||
| 755 | /* capture_source: uinfo->value.enumerated.items = 2 */ | ||
| 756 | if (source_id >= 2) | ||
| 757 | return -EINVAL; | ||
| 726 | 758 | ||
| 727 | ucontrol->value.integer.value[0] = emu->i2c_capture_volume[source_id][0]; | 759 | ucontrol->value.integer.value[0] = emu->i2c_capture_volume[source_id][0]; |
| 728 | ucontrol->value.integer.value[1] = emu->i2c_capture_volume[source_id][1]; | 760 | ucontrol->value.integer.value[1] = emu->i2c_capture_volume[source_id][1]; |
| @@ -735,10 +767,14 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol, | |||
| 735 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); | 767 | struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); |
| 736 | unsigned int ogain; | 768 | unsigned int ogain; |
| 737 | unsigned int ngain; | 769 | unsigned int ngain; |
| 738 | int source_id; | 770 | unsigned int source_id; |
| 739 | int change = 0; | 771 | int change = 0; |
| 740 | 772 | ||
| 741 | source_id = kcontrol->private_value; | 773 | source_id = kcontrol->private_value; |
| 774 | /* Limit: emu->i2c_capture_volume */ | ||
| 775 | /* capture_source: uinfo->value.enumerated.items = 2 */ | ||
| 776 | if (source_id >= 2) | ||
| 777 | return -EINVAL; | ||
| 742 | ogain = emu->i2c_capture_volume[source_id][0]; /* Left */ | 778 | ogain = emu->i2c_capture_volume[source_id][0]; /* Left */ |
| 743 | ngain = ucontrol->value.integer.value[0]; | 779 | ngain = ucontrol->value.integer.value[0]; |
| 744 | if (ngain > 0xff) | 780 | if (ngain > 0xff) |
| @@ -746,7 +782,7 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol, | |||
| 746 | if (ogain != ngain) { | 782 | if (ogain != ngain) { |
| 747 | if (emu->i2c_capture_source == source_id) | 783 | if (emu->i2c_capture_source == source_id) |
| 748 | snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) ); | 784 | snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) ); |
| 749 | emu->i2c_capture_volume[source_id][0] = ucontrol->value.integer.value[0]; | 785 | emu->i2c_capture_volume[source_id][0] = ngain; |
| 750 | change = 1; | 786 | change = 1; |
| 751 | } | 787 | } |
| 752 | ogain = emu->i2c_capture_volume[source_id][1]; /* Right */ | 788 | ogain = emu->i2c_capture_volume[source_id][1]; /* Right */ |
| @@ -756,7 +792,7 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol, | |||
| 756 | if (ogain != ngain) { | 792 | if (ogain != ngain) { |
| 757 | if (emu->i2c_capture_source == source_id) | 793 | if (emu->i2c_capture_source == source_id) |
| 758 | snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff)); | 794 | snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff)); |
| 759 | emu->i2c_capture_volume[source_id][1] = ucontrol->value.integer.value[1]; | 795 | emu->i2c_capture_volume[source_id][1] = ngain; |
| 760 | change = 1; | 796 | change = 1; |
| 761 | } | 797 | } |
| 762 | 798 | ||
| @@ -877,6 +913,9 @@ static int snd_emu10k1_spdif_put(struct snd_kcontrol *kcontrol, | |||
| 877 | unsigned int val; | 913 | unsigned int val; |
| 878 | unsigned long flags; | 914 | unsigned long flags; |
| 879 | 915 | ||
| 916 | /* Limit: emu->spdif_bits */ | ||
| 917 | if (idx >= 3) | ||
| 918 | return -EINVAL; | ||
| 880 | val = (ucontrol->value.iec958.status[0] << 0) | | 919 | val = (ucontrol->value.iec958.status[0] << 0) | |
| 881 | (ucontrol->value.iec958.status[1] << 8) | | 920 | (ucontrol->value.iec958.status[1] << 8) | |
| 882 | (ucontrol->value.iec958.status[2] << 16) | | 921 | (ucontrol->value.iec958.status[2] << 16) | |
diff --git a/sound/pci/emu10k1/p16v.c b/sound/pci/emu10k1/p16v.c index d619a3842cdd..9fd3135f3118 100644 --- a/sound/pci/emu10k1/p16v.c +++ b/sound/pci/emu10k1/p16v.c | |||
| @@ -742,6 +742,8 @@ static int snd_p16v_capture_source_put(struct snd_kcontrol *kcontrol, | |||
| 742 | u32 source; | 742 | u32 source; |
| 743 | 743 | ||
| 744 | val = ucontrol->value.enumerated.item[0] ; | 744 | val = ucontrol->value.enumerated.item[0] ; |
| 745 | if (val > 7) | ||
| 746 | return -EINVAL; | ||
| 745 | change = (emu->p16v_capture_source != val); | 747 | change = (emu->p16v_capture_source != val); |
| 746 | if (change) { | 748 | if (change) { |
| 747 | emu->p16v_capture_source = val; | 749 | emu->p16v_capture_source = val; |
| @@ -784,6 +786,8 @@ static int snd_p16v_capture_channel_put(struct snd_kcontrol *kcontrol, | |||
| 784 | u32 tmp; | 786 | u32 tmp; |
| 785 | 787 | ||
| 786 | val = ucontrol->value.enumerated.item[0] ; | 788 | val = ucontrol->value.enumerated.item[0] ; |
| 789 | if (val > 3) | ||
| 790 | return -EINVAL; | ||
| 787 | change = (emu->p16v_capture_channel != val); | 791 | change = (emu->p16v_capture_channel != val); |
| 788 | if (change) { | 792 | if (change) { |
| 789 | emu->p16v_capture_channel = val; | 793 | emu->p16v_capture_channel = val; |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index ad4cb38109fc..8cbe3bf1e317 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
| @@ -1625,19 +1625,26 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, | |||
| 1625 | 1625 | ||
| 1626 | nid = codec->start_nid; | 1626 | nid = codec->start_nid; |
| 1627 | for (i = 0; i < codec->num_nodes; i++, nid++) { | 1627 | for (i = 0; i < codec->num_nodes; i++, nid++) { |
| 1628 | if (get_wcaps(codec, nid) & AC_WCAP_POWER) { | 1628 | unsigned int wcaps = get_wcaps(codec, nid); |
| 1629 | unsigned int pincap; | 1629 | if (wcaps & AC_WCAP_POWER) { |
| 1630 | /* | 1630 | unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >> |
| 1631 | * don't power down the widget if it controls eapd | 1631 | AC_WCAP_TYPE_SHIFT; |
| 1632 | * and EAPD_BTLENABLE is set. | 1632 | if (wid_type == AC_WID_PIN) { |
| 1633 | */ | 1633 | unsigned int pincap; |
| 1634 | pincap = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP); | 1634 | /* |
| 1635 | if (pincap & AC_PINCAP_EAPD) { | 1635 | * don't power down the widget if it controls |
| 1636 | int eapd = snd_hda_codec_read(codec, nid, | 1636 | * eapd and EAPD_BTLENABLE is set. |
| 1637 | 0, AC_VERB_GET_EAPD_BTLENABLE, 0); | 1637 | */ |
| 1638 | eapd &= 0x02; | 1638 | pincap = snd_hda_param_read(codec, nid, |
| 1639 | if (power_state == AC_PWRST_D3 && eapd) | 1639 | AC_PAR_PIN_CAP); |
| 1640 | continue; | 1640 | if (pincap & AC_PINCAP_EAPD) { |
| 1641 | int eapd = snd_hda_codec_read(codec, | ||
| 1642 | nid, 0, | ||
| 1643 | AC_VERB_GET_EAPD_BTLENABLE, 0); | ||
| 1644 | eapd &= 0x02; | ||
| 1645 | if (power_state == AC_PWRST_D3 && eapd) | ||
| 1646 | continue; | ||
| 1647 | } | ||
| 1641 | } | 1648 | } |
| 1642 | snd_hda_codec_write(codec, nid, 0, | 1649 | snd_hda_codec_write(codec, nid, 0, |
| 1643 | AC_VERB_SET_POWER_STATE, | 1650 | AC_VERB_SET_POWER_STATE, |
| @@ -2485,13 +2492,14 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec, | |||
| 2485 | /* front */ | 2492 | /* front */ |
| 2486 | snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag, | 2493 | snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag, |
| 2487 | 0, format); | 2494 | 0, format); |
| 2488 | if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT]) | 2495 | if (!mout->no_share_stream && |
| 2496 | mout->hp_nid && mout->hp_nid != nids[HDA_FRONT]) | ||
| 2489 | /* headphone out will just decode front left/right (stereo) */ | 2497 | /* headphone out will just decode front left/right (stereo) */ |
| 2490 | snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag, | 2498 | snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag, |
| 2491 | 0, format); | 2499 | 0, format); |
| 2492 | /* extra outputs copied from front */ | 2500 | /* extra outputs copied from front */ |
| 2493 | for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) | 2501 | for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) |
| 2494 | if (mout->extra_out_nid[i]) | 2502 | if (!mout->no_share_stream && mout->extra_out_nid[i]) |
| 2495 | snd_hda_codec_setup_stream(codec, | 2503 | snd_hda_codec_setup_stream(codec, |
| 2496 | mout->extra_out_nid[i], | 2504 | mout->extra_out_nid[i], |
| 2497 | stream_tag, 0, format); | 2505 | stream_tag, 0, format); |
| @@ -2501,7 +2509,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec, | |||
| 2501 | if (chs >= (i + 1) * 2) /* independent out */ | 2509 | if (chs >= (i + 1) * 2) /* independent out */ |
| 2502 | snd_hda_codec_setup_stream(codec, nids[i], stream_tag, | 2510 | snd_hda_codec_setup_stream(codec, nids[i], stream_tag, |
| 2503 | i * 2, format); | 2511 | i * 2, format); |
| 2504 | else /* copy front */ | 2512 | else if (!mout->no_share_stream) /* copy front */ |
| 2505 | snd_hda_codec_setup_stream(codec, nids[i], stream_tag, | 2513 | snd_hda_codec_setup_stream(codec, nids[i], stream_tag, |
| 2506 | 0, format); | 2514 | 0, format); |
| 2507 | } | 2515 | } |
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h index 20c5e6250374..8c56c9cb0d09 100644 --- a/sound/pci/hda/hda_local.h +++ b/sound/pci/hda/hda_local.h | |||
| @@ -220,6 +220,7 @@ struct hda_multi_out { | |||
| 220 | hda_nid_t dig_out_nid; /* digital out audio widget */ | 220 | hda_nid_t dig_out_nid; /* digital out audio widget */ |
| 221 | int max_channels; /* currently supported analog channels */ | 221 | int max_channels; /* currently supported analog channels */ |
| 222 | int dig_out_used; /* current usage of digital out (HDA_DIG_XXX) */ | 222 | int dig_out_used; /* current usage of digital out (HDA_DIG_XXX) */ |
| 223 | int no_share_stream; /* don't share a stream with multiple pins */ | ||
| 223 | }; | 224 | }; |
| 224 | 225 | ||
| 225 | int snd_hda_multi_out_dig_open(struct hda_codec *codec, | 226 | int snd_hda_multi_out_dig_open(struct hda_codec *codec, |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 0ee8ae4d4410..196ad3c9405d 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -957,6 +957,14 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
| 957 | break; | 957 | break; |
| 958 | } | 958 | } |
| 959 | 959 | ||
| 960 | /* AD1986A has a hardware problem that it can't share a stream | ||
| 961 | * with multiple output pins. The copy of front to surrounds | ||
| 962 | * causes noisy or silent outputs at a certain timing, e.g. | ||
| 963 | * changing the volume. | ||
| 964 | * So, let's disable the shared stream. | ||
| 965 | */ | ||
| 966 | spec->multiout.no_share_stream = 1; | ||
| 967 | |||
| 960 | return 0; | 968 | return 0; |
| 961 | } | 969 | } |
| 962 | 970 | ||
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index f9b2c435a130..04012237096c 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -111,7 +111,6 @@ struct sigmatel_spec { | |||
| 111 | unsigned int alt_switch: 1; | 111 | unsigned int alt_switch: 1; |
| 112 | unsigned int hp_detect: 1; | 112 | unsigned int hp_detect: 1; |
| 113 | unsigned int gpio_mute: 1; | 113 | unsigned int gpio_mute: 1; |
| 114 | unsigned int no_vol_knob :1; | ||
| 115 | 114 | ||
| 116 | unsigned int gpio_mask, gpio_data; | 115 | unsigned int gpio_mask, gpio_data; |
| 117 | 116 | ||
| @@ -342,42 +341,6 @@ static int stac92xx_aloopback_put(struct snd_kcontrol *kcontrol, | |||
| 342 | return 1; | 341 | return 1; |
| 343 | } | 342 | } |
| 344 | 343 | ||
| 345 | static int stac92xx_volknob_info(struct snd_kcontrol *kcontrol, | ||
| 346 | struct snd_ctl_elem_info *uinfo) | ||
| 347 | { | ||
| 348 | uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; | ||
| 349 | uinfo->count = 1; | ||
| 350 | uinfo->value.integer.min = 0; | ||
| 351 | uinfo->value.integer.max = 127; | ||
| 352 | return 0; | ||
| 353 | } | ||
| 354 | |||
| 355 | static int stac92xx_volknob_get(struct snd_kcontrol *kcontrol, | ||
| 356 | struct snd_ctl_elem_value *ucontrol) | ||
| 357 | { | ||
| 358 | ucontrol->value.integer.value[0] = kcontrol->private_value & 0xff; | ||
| 359 | return 0; | ||
| 360 | } | ||
| 361 | |||
| 362 | static int stac92xx_volknob_put(struct snd_kcontrol *kcontrol, | ||
| 363 | struct snd_ctl_elem_value *ucontrol) | ||
| 364 | { | ||
| 365 | struct hda_codec *codec = snd_kcontrol_chip(kcontrol); | ||
| 366 | unsigned int val = kcontrol->private_value & 0xff; | ||
| 367 | |||
| 368 | if (val == ucontrol->value.integer.value[0]) | ||
| 369 | return 0; | ||
| 370 | |||
| 371 | val = ucontrol->value.integer.value[0]; | ||
| 372 | kcontrol->private_value &= ~0xff; | ||
| 373 | kcontrol->private_value |= val; | ||
| 374 | |||
| 375 | snd_hda_codec_write_cache(codec, kcontrol->private_value >> 16, 0, | ||
| 376 | AC_VERB_SET_VOLUME_KNOB_CONTROL, val | 0x80); | ||
| 377 | return 1; | ||
| 378 | } | ||
| 379 | |||
| 380 | |||
| 381 | static struct hda_verb stac9200_core_init[] = { | 344 | static struct hda_verb stac9200_core_init[] = { |
| 382 | /* set dac0mux for dac converter */ | 345 | /* set dac0mux for dac converter */ |
| 383 | { 0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, | 346 | { 0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, |
| @@ -446,18 +409,6 @@ static struct hda_verb stac9205_core_init[] = { | |||
| 446 | .private_value = verb_read | (verb_write << 16), \ | 409 | .private_value = verb_read | (verb_write << 16), \ |
| 447 | } | 410 | } |
| 448 | 411 | ||
| 449 | #define STAC_VOLKNOB(knob_nid) \ | ||
| 450 | { \ | ||
| 451 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ | ||
| 452 | .name = "Master Playback Volume", \ | ||
| 453 | .count = 1, \ | ||
| 454 | .info = stac92xx_volknob_info, \ | ||
| 455 | .get = stac92xx_volknob_get, \ | ||
| 456 | .put = stac92xx_volknob_put, \ | ||
| 457 | .private_value = 127 | (knob_nid << 16), \ | ||
| 458 | } | ||
| 459 | |||
| 460 | |||
| 461 | static struct snd_kcontrol_new stac9200_mixer[] = { | 412 | static struct snd_kcontrol_new stac9200_mixer[] = { |
| 462 | HDA_CODEC_VOLUME("Master Playback Volume", 0xb, 0, HDA_OUTPUT), | 413 | HDA_CODEC_VOLUME("Master Playback Volume", 0xb, 0, HDA_OUTPUT), |
| 463 | HDA_CODEC_MUTE("Master Playback Switch", 0xb, 0, HDA_OUTPUT), | 414 | HDA_CODEC_MUTE("Master Playback Switch", 0xb, 0, HDA_OUTPUT), |
| @@ -487,7 +438,6 @@ static struct snd_kcontrol_new stac9205_mixer[] = { | |||
| 487 | }, | 438 | }, |
| 488 | STAC_INPUT_SOURCE(2), | 439 | STAC_INPUT_SOURCE(2), |
| 489 | STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0), | 440 | STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0), |
| 490 | STAC_VOLKNOB(0x24), | ||
| 491 | 441 | ||
| 492 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x1b, 0x0, HDA_INPUT), | 442 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x1b, 0x0, HDA_INPUT), |
| 493 | HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x1d, 0x0, HDA_OUTPUT), | 443 | HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x1d, 0x0, HDA_OUTPUT), |
| @@ -503,7 +453,6 @@ static struct snd_kcontrol_new stac9205_mixer[] = { | |||
| 503 | /* This needs to be generated dynamically based on sequence */ | 453 | /* This needs to be generated dynamically based on sequence */ |
| 504 | static struct snd_kcontrol_new stac922x_mixer[] = { | 454 | static struct snd_kcontrol_new stac922x_mixer[] = { |
| 505 | STAC_INPUT_SOURCE(2), | 455 | STAC_INPUT_SOURCE(2), |
| 506 | STAC_VOLKNOB(0x16), | ||
| 507 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x17, 0x0, HDA_INPUT), | 456 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x17, 0x0, HDA_INPUT), |
| 508 | HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x17, 0x0, HDA_INPUT), | 457 | HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x17, 0x0, HDA_INPUT), |
| 509 | HDA_CODEC_VOLUME_IDX("Mux Capture Volume", 0x0, 0x12, 0x0, HDA_OUTPUT), | 458 | HDA_CODEC_VOLUME_IDX("Mux Capture Volume", 0x0, 0x12, 0x0, HDA_OUTPUT), |
| @@ -517,7 +466,6 @@ static struct snd_kcontrol_new stac922x_mixer[] = { | |||
| 517 | 466 | ||
| 518 | static struct snd_kcontrol_new stac927x_mixer[] = { | 467 | static struct snd_kcontrol_new stac927x_mixer[] = { |
| 519 | STAC_INPUT_SOURCE(3), | 468 | STAC_INPUT_SOURCE(3), |
| 520 | STAC_VOLKNOB(0x24), | ||
| 521 | STAC_ANALOG_LOOPBACK(0xFEB, 0x7EB), | 469 | STAC_ANALOG_LOOPBACK(0xFEB, 0x7EB), |
| 522 | 470 | ||
| 523 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x18, 0x0, HDA_INPUT), | 471 | HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x18, 0x0, HDA_INPUT), |
| @@ -1931,8 +1879,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec, | |||
| 1931 | } | 1879 | } |
| 1932 | if (spec->multiout.hp_nid) { | 1880 | if (spec->multiout.hp_nid) { |
| 1933 | const char *pfx; | 1881 | const char *pfx; |
| 1934 | if (old_num_dacs == spec->multiout.num_dacs && | 1882 | if (old_num_dacs == spec->multiout.num_dacs) |
| 1935 | spec->no_vol_knob) | ||
| 1936 | pfx = "Master"; | 1883 | pfx = "Master"; |
| 1937 | else | 1884 | else |
| 1938 | pfx = "Headphone"; | 1885 | pfx = "Headphone"; |
| @@ -2489,7 +2436,6 @@ static int patch_stac9200(struct hda_codec *codec) | |||
| 2489 | codec->spec = spec; | 2436 | codec->spec = spec; |
| 2490 | spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); | 2437 | spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); |
| 2491 | spec->pin_nids = stac9200_pin_nids; | 2438 | spec->pin_nids = stac9200_pin_nids; |
| 2492 | spec->no_vol_knob = 1; | ||
| 2493 | spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, | 2439 | spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, |
| 2494 | stac9200_models, | 2440 | stac9200_models, |
| 2495 | stac9200_cfg_tbl); | 2441 | stac9200_cfg_tbl); |
| @@ -2544,7 +2490,6 @@ static int patch_stac925x(struct hda_codec *codec) | |||
| 2544 | codec->spec = spec; | 2490 | codec->spec = spec; |
| 2545 | spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); | 2491 | spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); |
| 2546 | spec->pin_nids = stac925x_pin_nids; | 2492 | spec->pin_nids = stac925x_pin_nids; |
| 2547 | spec->no_vol_knob = 1; | ||
| 2548 | spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, | 2493 | spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, |
| 2549 | stac925x_models, | 2494 | stac925x_models, |
| 2550 | stac925x_cfg_tbl); | 2495 | stac925x_cfg_tbl); |
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c index 5d601ad6da70..abac62866da8 100644 --- a/sound/soc/codecs/cs4270.c +++ b/sound/soc/codecs/cs4270.c | |||
| @@ -725,7 +725,8 @@ static int cs4270_probe(struct platform_device *pdev) | |||
| 725 | codec->owner = THIS_MODULE; | 725 | codec->owner = THIS_MODULE; |
| 726 | codec->dai = &cs4270_dai; | 726 | codec->dai = &cs4270_dai; |
| 727 | codec->num_dai = 1; | 727 | codec->num_dai = 1; |
| 728 | codec->private_data = codec + ALIGN(sizeof(struct snd_soc_codec), 4); | 728 | codec->private_data = (void *) codec + |
| 729 | ALIGN(sizeof(struct snd_soc_codec), 4); | ||
| 729 | 730 | ||
| 730 | socdev->codec = codec; | 731 | socdev->codec = codec; |
| 731 | 732 | ||
diff --git a/sound/soc/s3c24xx/s3c2443-ac97.c b/sound/soc/s3c24xx/s3c2443-ac97.c index 75acf7ef5528..758a2637e7ac 100644 --- a/sound/soc/s3c24xx/s3c2443-ac97.c +++ b/sound/soc/s3c24xx/s3c2443-ac97.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | 32 | ||
| 33 | #include <asm/hardware.h> | 33 | #include <asm/hardware.h> |
| 34 | #include <asm/io.h> | 34 | #include <asm/io.h> |
| 35 | #include <asm/arch/regs-ac97.h> | 35 | #include <asm/plat-s3c/regs-ac97.h> |
| 36 | #include <asm/arch/regs-gpio.h> | 36 | #include <asm/arch/regs-gpio.h> |
| 37 | #include <asm/arch/regs-clock.h> | 37 | #include <asm/arch/regs-clock.h> |
| 38 | #include <asm/arch/audio.h> | 38 | #include <asm/arch/audio.h> |
