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-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
sound: do not set DEVNAME for OSS devices
ALSA: hda - Add sanity check in PCM open callback
ALSA: hda - Call snd_pcm_lib_hw_rates() again after codec open callback
ALSA: hda - Avoid invalid formats and rates with shared SPDIF
ALSA: hda - Improve ASUS eeePC 1000 mixer
ALSA: hda - Add GPIO1 control at muting with HP laptops
ALSA: usx2y - reparent sound device
ALSA: snd_usb_caiaq: reparent sound device
sound: virtuoso: fix Xonar D1/DX silence after resume
ASoC: Only disable pxa2xx-i2s clocks if we enabled them
ALSA: hda - Add quirk for HP 6930p
ALSA: hda - Add missing static to patch_ca0110()
ASoC: OMAP: fix OMAP1510 broken PCM pointer callback
ASoC: remove BROKEN from Efika and pcm030 fabric drivers
ASoC: Fix typo in MPC5200 PSC AC97 driver Kconfig

+80 -40
+10 -4
sound/pci/hda/hda_codec.c
··· 3470 3470 } 3471 3471 mutex_lock(&codec->spdif_mutex); 3472 3472 if (mout->share_spdif) { 3473 - runtime->hw.rates &= mout->spdif_rates; 3474 - runtime->hw.formats &= mout->spdif_formats; 3475 - if (mout->spdif_maxbps < hinfo->maxbps) 3476 - hinfo->maxbps = mout->spdif_maxbps; 3473 + if ((runtime->hw.rates & mout->spdif_rates) && 3474 + (runtime->hw.formats & mout->spdif_formats)) { 3475 + runtime->hw.rates &= mout->spdif_rates; 3476 + runtime->hw.formats &= mout->spdif_formats; 3477 + if (mout->spdif_maxbps < hinfo->maxbps) 3478 + hinfo->maxbps = mout->spdif_maxbps; 3479 + } else { 3480 + mout->share_spdif = 0; 3481 + /* FIXME: need notify? */ 3482 + } 3477 3483 } 3478 3484 mutex_unlock(&codec->spdif_mutex); 3479 3485 }
+7
sound/pci/hda/hda_intel.c
··· 1454 1454 mutex_unlock(&chip->open_mutex); 1455 1455 return err; 1456 1456 } 1457 + snd_pcm_limit_hw_rates(runtime); 1457 1458 spin_lock_irqsave(&chip->reg_lock, flags); 1458 1459 azx_dev->substream = substream; 1459 1460 azx_dev->running = 0; ··· 1464 1463 snd_pcm_set_sync(substream); 1465 1464 mutex_unlock(&chip->open_mutex); 1466 1465 1466 + if (snd_BUG_ON(!runtime->hw.channels_min || !runtime->hw.channels_max)) 1467 + return -EINVAL; 1468 + if (snd_BUG_ON(!runtime->hw.formats)) 1469 + return -EINVAL; 1470 + if (snd_BUG_ON(!runtime->hw.rates)) 1471 + return -EINVAL; 1467 1472 return 0; 1468 1473 } 1469 1474
+27 -1
sound/pci/hda/patch_analog.c
··· 3746 3746 { } /* end */ 3747 3747 }; 3748 3748 3749 + static int ad1884a_mobile_master_sw_put(struct snd_kcontrol *kcontrol, 3750 + struct snd_ctl_elem_value *ucontrol) 3751 + { 3752 + struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3753 + int ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol); 3754 + int mute = (!ucontrol->value.integer.value[0] && 3755 + !ucontrol->value.integer.value[1]); 3756 + /* toggle GPIO1 according to the mute state */ 3757 + snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 3758 + mute ? 0x02 : 0x0); 3759 + return ret; 3760 + } 3761 + 3749 3762 static struct snd_kcontrol_new ad1884a_mobile_mixers[] = { 3750 3763 HDA_CODEC_VOLUME("Master Playback Volume", 0x21, 0x0, HDA_OUTPUT), 3751 - HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT), 3764 + /*HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT),*/ 3765 + { 3766 + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3767 + .name = "Master Playback Switch", 3768 + .info = snd_hda_mixer_amp_switch_info, 3769 + .get = snd_hda_mixer_amp_switch_get, 3770 + .put = ad1884a_mobile_master_sw_put, 3771 + .private_value = HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT), 3772 + }, 3752 3773 HDA_CODEC_VOLUME("PCM Playback Volume", 0x20, 0x5, HDA_INPUT), 3753 3774 HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), 3754 3775 HDA_CODEC_VOLUME("Mic Capture Volume", 0x14, 0x0, HDA_INPUT), ··· 3890 3869 /* unsolicited event for pin-sense */ 3891 3870 {0x11, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_HP_EVENT}, 3892 3871 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_MIC_EVENT}, 3872 + /* allow to touch GPIO1 (for mute control) */ 3873 + {0x01, AC_VERB_SET_GPIO_MASK, 0x02}, 3874 + {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02}, 3875 + {0x01, AC_VERB_SET_GPIO_DATA, 0x02}, /* first muted */ 3893 3876 { } /* end */ 3894 3877 }; 3895 3878 ··· 4003 3978 SND_PCI_QUIRK(0x103c, 0x3037, "HP 2230s", AD1884A_LAPTOP), 4004 3979 SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE), 4005 3980 SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x3070, "HP", AD1884A_MOBILE), 3981 + SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x30d0, "HP laptop", AD1884A_LAPTOP), 4006 3982 SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x30e0, "HP laptop", AD1884A_LAPTOP), 4007 3983 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x3600, "HP laptop", AD1884A_LAPTOP), 4008 3984 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD),
+1 -1
sound/pci/hda/patch_ca0110.c
··· 510 510 } 511 511 512 512 513 - int patch_ca0110(struct hda_codec *codec) 513 + static int patch_ca0110(struct hda_codec *codec) 514 514 { 515 515 struct ca0110_spec *spec; 516 516 int err;
+5 -19
sound/pci/hda/patch_realtek.c
··· 12876 12876 { } 12877 12877 }; 12878 12878 12879 - /* bind volumes of both NID 0x0c and 0x0d */ 12880 - static struct hda_bind_ctls alc269_epc_bind_vol = { 12881 - .ops = &snd_hda_bind_vol, 12882 - .values = { 12883 - HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT), 12884 - HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT), 12885 - 0 12886 - }, 12887 - }; 12888 - 12889 12879 static struct snd_kcontrol_new alc269_eeepc_mixer[] = { 12890 - HDA_CODEC_MUTE("iSpeaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), 12891 - HDA_BIND_VOL("LineOut Playback Volume", &alc269_epc_bind_vol), 12892 - HDA_CODEC_MUTE("LineOut Playback Switch", 0x15, 0x0, HDA_OUTPUT), 12880 + HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), 12881 + HDA_CODEC_MUTE("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), 12882 + HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 12883 + HDA_CODEC_MUTE("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), 12893 12884 { } /* end */ 12894 12885 }; 12895 12886 ··· 12893 12902 }; 12894 12903 12895 12904 /* FSC amilo */ 12896 - static struct snd_kcontrol_new alc269_fujitsu_mixer[] = { 12897 - HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), 12898 - HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 12899 - HDA_BIND_VOL("PCM Playback Volume", &alc269_epc_bind_vol), 12900 - { } /* end */ 12901 - }; 12905 + #define alc269_fujitsu_mixer alc269_eeepc_mixer 12902 12906 12903 12907 static struct hda_verb alc269_quanta_fl1_verbs[] = { 12904 12908 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},
+2
sound/pci/oxygen/virtuoso.c
··· 635 635 636 636 static void xonar_d1_resume(struct oxygen *chip) 637 637 { 638 + oxygen_set_bits8(chip, OXYGEN_FUNCTION, OXYGEN_FUNCTION_RESET_CODEC); 639 + msleep(1); 638 640 cs43xx_init(chip); 639 641 xonar_enable_output(chip); 640 642 }
+3 -3
sound/soc/fsl/Kconfig
··· 33 33 config SND_SOC_MPC5200_AC97 34 34 tristate "Freescale MPC5200 PSC in AC97 mode driver" 35 35 depends on PPC_MPC52xx && PPC_BESTCOMM 36 - select AC97_BUS 36 + select SND_SOC_AC97_BUS 37 37 select SND_MPC52xx_DMA 38 38 select PPC_BESTCOMM_GEN_BD 39 39 help ··· 41 41 42 42 config SND_MPC52xx_SOC_PCM030 43 43 tristate "SoC AC97 Audio support for Phytec pcm030 and WM9712" 44 - depends on PPC_MPC5200_SIMPLE && BROKEN 44 + depends on PPC_MPC5200_SIMPLE 45 45 select SND_SOC_MPC5200_AC97 46 46 select SND_SOC_WM9712 47 47 help ··· 50 50 51 51 config SND_MPC52xx_SOC_EFIKA 52 52 tristate "SoC AC97 Audio support for bbplan Efika and STAC9766" 53 - depends on PPC_EFIKA && BROKEN 53 + depends on PPC_EFIKA 54 54 select SND_SOC_MPC5200_AC97 55 55 select SND_SOC_STAC9766 56 56 help
+7 -4
sound/soc/omap/omap-pcm.c
··· 216 216 dma_addr_t ptr; 217 217 snd_pcm_uframes_t offset; 218 218 219 - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 220 - ptr = omap_get_dma_src_pos(prtd->dma_ch); 221 - else 219 + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { 222 220 ptr = omap_get_dma_dst_pos(prtd->dma_ch); 221 + offset = bytes_to_frames(runtime, ptr - runtime->dma_addr); 222 + } else if (!(cpu_is_omap1510())) { 223 + ptr = omap_get_dma_src_pos(prtd->dma_ch); 224 + offset = bytes_to_frames(runtime, ptr - runtime->dma_addr); 225 + } else 226 + offset = prtd->period_index * runtime->period_size; 223 227 224 - offset = bytes_to_frames(runtime, ptr - runtime->dma_addr); 225 228 if (offset >= runtime->buffer_size) 226 229 offset = 0; 227 230
+6 -1
sound/soc/pxa/pxa2xx-i2s.c
··· 167 167 168 168 BUG_ON(IS_ERR(clk_i2s)); 169 169 clk_enable(clk_i2s); 170 + dai->private_data = dai; 170 171 pxa_i2s_wait(); 171 172 172 173 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ··· 256 255 if ((SACR1 & (SACR1_DREC | SACR1_DRPL)) == (SACR1_DREC | SACR1_DRPL)) { 257 256 SACR0 &= ~SACR0_ENB; 258 257 pxa_i2s_wait(); 259 - clk_disable(clk_i2s); 258 + if (dai->private_data != NULL) { 259 + clk_disable(clk_i2s); 260 + dai->private_data = NULL; 261 + } 260 262 } 261 263 } 262 264 ··· 340 336 return PTR_ERR(clk_i2s); 341 337 342 338 pxa_i2s_dai.dev = &dev->dev; 339 + pxa_i2s_dai.private_data = NULL; 343 340 ret = snd_soc_register_dai(&pxa_i2s_dai); 344 341 if (ret != 0) 345 342 clk_put(clk_i2s);
+4 -1
sound/sound_core.c
··· 10 10 #include <linux/module.h> 11 11 #include <linux/device.h> 12 12 #include <linux/err.h> 13 + #include <linux/kdev_t.h> 14 + #include <linux/major.h> 13 15 #include <sound/core.h> 14 16 15 17 #ifdef CONFIG_SOUND_OSS_CORE ··· 31 29 32 30 static char *sound_nodename(struct device *dev) 33 31 { 32 + if (MAJOR(dev->devt) == SOUND_MAJOR) 33 + return NULL; 34 34 return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev)); 35 35 } 36 36 ··· 108 104 #include <linux/types.h> 109 105 #include <linux/kernel.h> 110 106 #include <linux/sound.h> 111 - #include <linux/major.h> 112 107 #include <linux/kmod.h> 113 108 114 109 #define SOUND_STEP 16
+6 -4
sound/usb/caiaq/device.c
··· 35 35 #include "input.h" 36 36 37 37 MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>"); 38 - MODULE_DESCRIPTION("caiaq USB audio, version 1.3.17"); 38 + MODULE_DESCRIPTION("caiaq USB audio, version 1.3.18"); 39 39 MODULE_LICENSE("GPL"); 40 40 MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," 41 41 "{Native Instruments, RigKontrol3}," ··· 349 349 log("Unable to set up control system (ret=%d)\n", ret); 350 350 } 351 351 352 - static int create_card(struct usb_device* usb_dev, struct snd_card **cardp) 352 + static int create_card(struct usb_device *usb_dev, 353 + struct usb_interface *intf, 354 + struct snd_card **cardp) 353 355 { 354 356 int devnum; 355 357 int err; ··· 376 374 dev->chip.usb_id = USB_ID(le16_to_cpu(usb_dev->descriptor.idVendor), 377 375 le16_to_cpu(usb_dev->descriptor.idProduct)); 378 376 spin_lock_init(&dev->spinlock); 379 - snd_card_set_dev(card, &usb_dev->dev); 377 + snd_card_set_dev(card, &intf->dev); 380 378 381 379 *cardp = card; 382 380 return 0; ··· 463 461 struct snd_card *card; 464 462 struct usb_device *device = interface_to_usbdev(intf); 465 463 466 - ret = create_card(device, &card); 464 + ret = create_card(device, intf, &card); 467 465 468 466 if (ret < 0) 469 467 return ret;
+1 -1
sound/usb/usx2y/us122l.c
··· 514 514 US122L(card)->chip.dev->bus->busnum, 515 515 US122L(card)->chip.dev->devnum 516 516 ); 517 - snd_card_set_dev(card, &device->dev); 518 517 *cardp = card; 519 518 return 0; 520 519 } ··· 530 531 if (err < 0) 531 532 return err; 532 533 534 + snd_card_set_dev(card, &intf->dev); 533 535 if (!us122l_create_card(card)) { 534 536 snd_card_free(card); 535 537 return -EINVAL;
+1 -1
sound/usb/usx2y/usbusx2y.c
··· 364 364 0,//us428(card)->usbmidi.ifnum, 365 365 usX2Y(card)->chip.dev->bus->busnum, usX2Y(card)->chip.dev->devnum 366 366 ); 367 - snd_card_set_dev(card, &device->dev); 368 367 *cardp = card; 369 368 return 0; 370 369 } ··· 387 388 err = usX2Y_create_card(device, &card); 388 389 if (err < 0) 389 390 return err; 391 + snd_card_set_dev(card, &intf->dev); 390 392 if ((err = usX2Y_hwdep_new(card, device)) < 0 || 391 393 (err = snd_card_register(card)) < 0) { 392 394 snd_card_free(card);