Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"All are boring small fixes in various parts:
- A few possible NULL-dereference or zero-division Oops fixes
- Fix vmaster slave volume notification
- Add codec ID for ALC233
- Various fixes in several ASoC WM codecs
- ASoC tegra i2c fix

Sorry if you wanted a thrilling adventure with huge sharks :)"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: ice1712: Initialize card->private_data properly
ALSA: hda - Add support of new codec ALC233
ALSA: hda/ca0132 - Avoid division by zero in dspxfr_one_seg()
ALSA: hda - check NULL pointer when creating SPDIF PCM switch
ALSA: hda - check NULL pointer when creating SPDIF controls
ASoC: wm5102: Apply a SYSCLK patch for later revs
ALSA: vmaster: Fix slave change notification
ASoC: tegra: fix I2S bit count mask
ALSA: seq: seq_oss_event: missing range checks
ASoC: wm8350: Use jiffies rather than msecs in schedule_delayed_work()
ASoC: wm5110: Correct OUT2/3 volume and switch names
ASoC: wm5102: Correct OUT2 volume and switch names
ASoC: wm8960: Fix ADC power bits
ASoC: wm8960: Correct register 0 and 1 defaults

+64 -25
+12 -2
sound/core/seq/oss/seq_oss_event.c
··· 285 285 static int 286 286 note_on_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, struct snd_seq_event *ev) 287 287 { 288 - struct seq_oss_synthinfo *info = &dp->synths[dev]; 288 + struct seq_oss_synthinfo *info; 289 + 290 + if (!snd_seq_oss_synth_is_valid(dp, dev)) 291 + return -ENXIO; 292 + 293 + info = &dp->synths[dev]; 289 294 switch (info->arg.event_passing) { 290 295 case SNDRV_SEQ_OSS_PROCESS_EVENTS: 291 296 if (! info->ch || ch < 0 || ch >= info->nr_voices) { ··· 345 340 static int 346 341 note_off_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, struct snd_seq_event *ev) 347 342 { 348 - struct seq_oss_synthinfo *info = &dp->synths[dev]; 343 + struct seq_oss_synthinfo *info; 344 + 345 + if (!snd_seq_oss_synth_is_valid(dp, dev)) 346 + return -ENXIO; 347 + 348 + info = &dp->synths[dev]; 349 349 switch (info->arg.event_passing) { 350 350 case SNDRV_SEQ_OSS_PROCESS_EVENTS: 351 351 if (! info->ch || ch < 0 || ch >= info->nr_voices) {
+4 -1
sound/core/vmaster.c
··· 213 213 } 214 214 if (!changed) 215 215 return 0; 216 - return slave_put_val(slave, ucontrol); 216 + err = slave_put_val(slave, ucontrol); 217 + if (err < 0) 218 + return err; 219 + return 1; 217 220 } 218 221 219 222 static int slave_tlv_cmd(struct snd_kcontrol *kcontrol,
+9 -2
sound/pci/hda/hda_codec.c
··· 3334 3334 return -EBUSY; 3335 3335 } 3336 3336 spdif = snd_array_new(&codec->spdif_out); 3337 + if (!spdif) 3338 + return -ENOMEM; 3337 3339 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { 3338 3340 kctl = snd_ctl_new1(dig_mix, codec); 3339 3341 if (!kctl) ··· 3433 3431 int snd_hda_create_spdif_share_sw(struct hda_codec *codec, 3434 3432 struct hda_multi_out *mout) 3435 3433 { 3434 + struct snd_kcontrol *kctl; 3435 + 3436 3436 if (!mout->dig_out_nid) 3437 3437 return 0; 3438 + 3439 + kctl = snd_ctl_new1(&spdif_share_sw, mout); 3440 + if (!kctl) 3441 + return -ENOMEM; 3438 3442 /* ATTENTION: here mout is passed as private_data, instead of codec */ 3439 - return snd_hda_ctl_add(codec, mout->dig_out_nid, 3440 - snd_ctl_new1(&spdif_share_sw, mout)); 3443 + return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl); 3441 3444 } 3442 3445 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw); 3443 3446
+6 -2
sound/pci/hda/patch_ca0132.c
··· 2298 2298 hda_frame_size_words = ((sample_rate_div == 0) ? 0 : 2299 2299 (num_chans * sample_rate_mul / sample_rate_div)); 2300 2300 2301 + if (hda_frame_size_words == 0) { 2302 + snd_printdd(KERN_ERR "frmsz zero\n"); 2303 + return -EINVAL; 2304 + } 2305 + 2301 2306 buffer_size_words = min(buffer_size_words, 2302 2307 (unsigned int)(UC_RANGE(chip_addx, 1) ? 2303 2308 65536 : 32768)); ··· 2313 2308 chip_addx, hda_frame_size_words, num_chans, 2314 2309 sample_rate_mul, sample_rate_div, buffer_size_words); 2315 2310 2316 - if ((buffer_addx == NULL) || (hda_frame_size_words == 0) || 2317 - (buffer_size_words < hda_frame_size_words)) { 2311 + if (buffer_size_words < hda_frame_size_words) { 2318 2312 snd_printdd(KERN_ERR "dspxfr_one_seg:failed\n"); 2319 2313 return -EINVAL; 2320 2314 }
+2
sound/pci/hda/patch_realtek.c
··· 3163 3163 case 0x10ec0290: 3164 3164 spec->codec_variant = ALC269_TYPE_ALC280; 3165 3165 break; 3166 + case 0x10ec0233: 3166 3167 case 0x10ec0282: 3167 3168 case 0x10ec0283: 3168 3169 spec->codec_variant = ALC269_TYPE_ALC282; ··· 3863 3862 */ 3864 3863 static const struct hda_codec_preset snd_hda_preset_realtek[] = { 3865 3864 { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 }, 3865 + { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 }, 3866 3866 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 }, 3867 3867 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 }, 3868 3868 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
+2
sound/pci/ice1712/ice1712.c
··· 2594 2594 snd_ice1712_proc_init(ice); 2595 2595 synchronize_irq(pci->irq); 2596 2596 2597 + card->private_data = ice; 2598 + 2597 2599 err = pci_request_regions(pci, "ICE1712"); 2598 2600 if (err < 0) { 2599 2601 kfree(ice);
+13 -2
sound/soc/codecs/wm5102.c
··· 573 573 { 0x025e, 0x0112 }, 574 574 }; 575 575 576 + static const struct reg_default wm5102_sysclk_revb_patch[] = { 577 + { 0x3081, 0x08FE }, 578 + { 0x3083, 0x00ED }, 579 + { 0x30C1, 0x08FE }, 580 + { 0x30C3, 0x00ED }, 581 + }; 582 + 576 583 static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w, 577 584 struct snd_kcontrol *kcontrol, int event) 578 585 { ··· 593 586 case 0: 594 587 patch = wm5102_sysclk_reva_patch; 595 588 patch_size = ARRAY_SIZE(wm5102_sysclk_reva_patch); 589 + break; 590 + default: 591 + patch = wm5102_sysclk_revb_patch; 592 + patch_size = ARRAY_SIZE(wm5102_sysclk_revb_patch); 596 593 break; 597 594 } 598 595 ··· 766 755 767 756 SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L, 768 757 ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1), 769 - SOC_DOUBLE_R("OUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, 758 + SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, 770 759 ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_MUTE_SHIFT, 1, 1), 771 760 SOC_SINGLE("EPOUT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L, 772 761 ARIZONA_OUT3L_MUTE_SHIFT, 1, 1), ··· 778 767 SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_1L, 779 768 ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_VOL_SHIFT, 780 769 0xbf, 0, digital_tlv), 781 - SOC_DOUBLE_R_TLV("OUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L, 770 + SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L, 782 771 ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_VOL_SHIFT, 783 772 0xbf, 0, digital_tlv), 784 773 SOC_SINGLE_TLV("EPOUT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L,
+8 -8
sound/soc/codecs/wm5110.c
··· 213 213 214 214 SOC_SINGLE("HPOUT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_1L, 215 215 ARIZONA_OUT1_OSR_SHIFT, 1, 0), 216 - SOC_SINGLE("OUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L, 216 + SOC_SINGLE("HPOUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L, 217 217 ARIZONA_OUT2_OSR_SHIFT, 1, 0), 218 - SOC_SINGLE("OUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L, 218 + SOC_SINGLE("HPOUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L, 219 219 ARIZONA_OUT3_OSR_SHIFT, 1, 0), 220 220 SOC_SINGLE("Speaker High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_4L, 221 221 ARIZONA_OUT4_OSR_SHIFT, 1, 0), ··· 226 226 227 227 SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L, 228 228 ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1), 229 - SOC_DOUBLE_R("OUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, 229 + SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, 230 230 ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_MUTE_SHIFT, 1, 1), 231 - SOC_DOUBLE_R("OUT3 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L, 231 + SOC_DOUBLE_R("HPOUT3 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L, 232 232 ARIZONA_DAC_DIGITAL_VOLUME_3R, ARIZONA_OUT3L_MUTE_SHIFT, 1, 1), 233 233 SOC_DOUBLE_R("Speaker Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_4L, 234 234 ARIZONA_DAC_DIGITAL_VOLUME_4R, ARIZONA_OUT4L_MUTE_SHIFT, 1, 1), ··· 240 240 SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_1L, 241 241 ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_VOL_SHIFT, 242 242 0xbf, 0, digital_tlv), 243 - SOC_DOUBLE_R_TLV("OUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L, 243 + SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L, 244 244 ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_VOL_SHIFT, 245 245 0xbf, 0, digital_tlv), 246 - SOC_DOUBLE_R_TLV("OUT3 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L, 246 + SOC_DOUBLE_R_TLV("HPOUT3 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L, 247 247 ARIZONA_DAC_DIGITAL_VOLUME_3R, ARIZONA_OUT3L_VOL_SHIFT, 248 248 0xbf, 0, digital_tlv), 249 249 SOC_DOUBLE_R_TLV("Speaker Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_4L, ··· 260 260 ARIZONA_OUTPUT_PATH_CONFIG_1R, 261 261 ARIZONA_OUT1L_PGA_VOL_SHIFT, 262 262 0x34, 0x40, 0, ana_tlv), 263 - SOC_DOUBLE_R_RANGE_TLV("OUT2 Volume", ARIZONA_OUTPUT_PATH_CONFIG_2L, 263 + SOC_DOUBLE_R_RANGE_TLV("HPOUT2 Volume", ARIZONA_OUTPUT_PATH_CONFIG_2L, 264 264 ARIZONA_OUTPUT_PATH_CONFIG_2R, 265 265 ARIZONA_OUT2L_PGA_VOL_SHIFT, 266 266 0x34, 0x40, 0, ana_tlv), 267 - SOC_DOUBLE_R_RANGE_TLV("OUT3 Volume", ARIZONA_OUTPUT_PATH_CONFIG_3L, 267 + SOC_DOUBLE_R_RANGE_TLV("HPOUT3 Volume", ARIZONA_OUTPUT_PATH_CONFIG_3L, 268 268 ARIZONA_OUTPUT_PATH_CONFIG_3R, 269 269 ARIZONA_OUT3L_PGA_VOL_SHIFT, 0x34, 0x40, 0, ana_tlv), 270 270
+2 -2
sound/soc/codecs/wm8350.c
··· 1301 1301 if (device_may_wakeup(wm8350->dev)) 1302 1302 pm_wakeup_event(wm8350->dev, 250); 1303 1303 1304 - schedule_delayed_work(&priv->hpl.work, 200); 1304 + schedule_delayed_work(&priv->hpl.work, msecs_to_jiffies(200)); 1305 1305 1306 1306 return IRQ_HANDLED; 1307 1307 } ··· 1318 1318 if (device_may_wakeup(wm8350->dev)) 1319 1319 pm_wakeup_event(wm8350->dev, 250); 1320 1320 1321 - schedule_delayed_work(&priv->hpr.work, 200); 1321 + schedule_delayed_work(&priv->hpr.work, msecs_to_jiffies(200)); 1322 1322 1323 1323 return IRQ_HANDLED; 1324 1324 }
+4 -4
sound/soc/codecs/wm8960.c
··· 53 53 * using 2 wire for device control, so we cache them instead. 54 54 */ 55 55 static const struct reg_default wm8960_reg_defaults[] = { 56 - { 0x0, 0x0097 }, 57 - { 0x1, 0x0097 }, 56 + { 0x0, 0x00a7 }, 57 + { 0x1, 0x00a7 }, 58 58 { 0x2, 0x0000 }, 59 59 { 0x3, 0x0000 }, 60 60 { 0x4, 0x0000 }, ··· 323 323 SND_SOC_DAPM_MIXER("Right Input Mixer", WM8960_POWER3, 4, 0, 324 324 wm8960_rin, ARRAY_SIZE(wm8960_rin)), 325 325 326 - SND_SOC_DAPM_ADC("Left ADC", "Capture", WM8960_POWER2, 3, 0), 327 - SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER2, 2, 0), 326 + SND_SOC_DAPM_ADC("Left ADC", "Capture", WM8960_POWER1, 3, 0), 327 + SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER1, 2, 0), 328 328 329 329 SND_SOC_DAPM_DAC("Left DAC", "Playback", WM8960_POWER2, 8, 0), 330 330 SND_SOC_DAPM_DAC("Right DAC", "Playback", WM8960_POWER2, 7, 0),
+1 -1
sound/soc/tegra/tegra20_i2s.h
··· 121 121 122 122 #define TEGRA20_I2S_TIMING_NON_SYM_ENABLE (1 << 12) 123 123 #define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0 124 - #define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7fff 124 + #define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff 125 125 #define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT) 126 126 127 127 /* Fields in TEGRA20_I2S_FIFO_SCR */
+1 -1
sound/soc/tegra/tegra30_i2s.h
··· 110 110 111 111 #define TEGRA30_I2S_TIMING_NON_SYM_ENABLE (1 << 12) 112 112 #define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0 113 - #define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7fff 113 + #define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff 114 114 #define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT) 115 115 116 116 /* Fields in TEGRA30_I2S_OFFSET */