Sound fixes for 3.6-rc6

Just a few small / trivial regression fixes at this time.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iQIcBAABAgAGBQJQUYdMAAoJEGwxgFQ9KSmk88kP/1Qnl/fgqecvlmu8f2r0mrio
 K5RgmgdbTk5PyH6Y3gH5AArmHgZMrUZRb7oNX/+YCmBTTFexG7JAnWnMGESIsxsM
 jebU719bt+62g4UiLYjYVanN1tjxUZwPCfLzf7wjnsPkUj7tz+MVAntk3W49psue
 LomSTzvlGeCWWecdCRteaCk5MRkKNc4t6RgQd6njf/grf4jEQoVxDXYiHIN2uNxT
 YFkjnzHFOzcOIEtut2QDDd2Gi+4BWpVnbpNWTKfMXnyhsUibVBtpRV0D3KCK6N+m
 Lewp6B7/7PuWvb8jvxY7nJhidM8sr7zw4ucc46v4GV+DiYd2bVpl/r3tflfvRaRt
 289r5MpwdrjDcTlyoIr0Z8kKVLDDLCNUbnYq3L4JEh7TAb/0oOdeO1BImynVbQNf
 snHfpt8Cjl3O6SK2I9Pr2nvdSU2rqZ3RCVBshIHuEueleFAo5JLr1PeutObaMnTK
 MR0IDYFyPpsltPq0GjaH9n0xwOnL2xip27/r1iNjb/N9aeqP6Hxj7XsmMoPbSmFv
 RkwD+UoH6aenXqXsmu8A+fHkMqqproriQYXoQlJbTTXvAjFjo8++FYHPtDmMhxjW
 D74HRp28AofhyT8TaKDJM8C5YgGcBPZinwIP0iuScrsIiiYQ704LJbQrGZ0IcivH
 7AwlvnBrXl/IZ13G4DA6
 =13mk
 -----END PGP SIGNATURE-----

Merge tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Just a few small / trivial regression fixes at this time."

* tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: ice1724: Use linear scale for AK4396 volume control.
  ALSA: hda_intel: add position_fix quirk for Asus K53E
  ALSA: compress_core: fix open flags test in snd_compr_open()
  ALSA: hda - Fix Oops at codec reset/reconfig
  ALSA: usb-audio: Fix bogus error messages for delay accounting
  ALSA: hda - Fix missing Master volume for STAC9200/925x
This commit is contained in:
Linus Torvalds 2012-09-13 19:51:41 +08:00
commit fbcbe2b3c9
6 changed files with 14 additions and 8 deletions

View File

@ -80,14 +80,12 @@ static int snd_compr_open(struct inode *inode, struct file *f)
int maj = imajor(inode); int maj = imajor(inode);
int ret; int ret;
if (f->f_flags & O_WRONLY) if ((f->f_flags & O_ACCMODE) == O_WRONLY)
dirn = SND_COMPRESS_PLAYBACK; dirn = SND_COMPRESS_PLAYBACK;
else if (f->f_flags & O_RDONLY) else if ((f->f_flags & O_ACCMODE) == O_RDONLY)
dirn = SND_COMPRESS_CAPTURE; dirn = SND_COMPRESS_CAPTURE;
else { else
pr_err("invalid direction\n");
return -EINVAL; return -EINVAL;
}
if (maj == snd_major) if (maj == snd_major)
compr = snd_lookup_minor_data(iminor(inode), compr = snd_lookup_minor_data(iminor(inode),

View File

@ -2353,6 +2353,7 @@ int snd_hda_codec_reset(struct hda_codec *codec)
} }
if (codec->patch_ops.free) if (codec->patch_ops.free)
codec->patch_ops.free(codec); codec->patch_ops.free(codec);
memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
snd_hda_jack_tbl_clear(codec); snd_hda_jack_tbl_clear(codec);
codec->proc_widget_hook = NULL; codec->proc_widget_hook = NULL;
codec->spec = NULL; codec->spec = NULL;
@ -2368,7 +2369,6 @@ int snd_hda_codec_reset(struct hda_codec *codec)
codec->num_pcms = 0; codec->num_pcms = 0;
codec->pcm_info = NULL; codec->pcm_info = NULL;
codec->preset = NULL; codec->preset = NULL;
memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
codec->slave_dig_outs = NULL; codec->slave_dig_outs = NULL;
codec->spdif_status_reset = 0; codec->spdif_status_reset = 0;
module_put(codec->owner); module_put(codec->owner);

View File

@ -2701,6 +2701,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x1b43, "ASUS K53E", POS_FIX_POSBUF),
SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB), SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB), SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),

View File

@ -1075,7 +1075,7 @@ static struct snd_kcontrol_new stac_smux_mixer = {
static const char * const slave_pfxs[] = { static const char * const slave_pfxs[] = {
"Front", "Surround", "Center", "LFE", "Side", "Front", "Surround", "Center", "LFE", "Side",
"Headphone", "Speaker", "IEC958", "Headphone", "Speaker", "IEC958", "PCM",
NULL NULL
}; };

View File

@ -297,6 +297,7 @@ static int ak4396_dac_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem
} }
static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1); static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1);
static const DECLARE_TLV_DB_LINEAR(ak4396_db_scale, TLV_DB_GAIN_MUTE, 0);
static struct snd_kcontrol_new prodigy_hd2_controls[] __devinitdata = { static struct snd_kcontrol_new prodigy_hd2_controls[] __devinitdata = {
{ {
@ -307,7 +308,7 @@ static struct snd_kcontrol_new prodigy_hd2_controls[] __devinitdata = {
.info = ak4396_dac_vol_info, .info = ak4396_dac_vol_info,
.get = ak4396_dac_vol_get, .get = ak4396_dac_vol_get,
.put = ak4396_dac_vol_put, .put = ak4396_dac_vol_put,
.tlv = { .p = db_scale_wm_dac }, .tlv = { .p = ak4396_db_scale },
}, },
}; };

View File

@ -1140,6 +1140,12 @@ static void retire_playback_urb(struct snd_usb_substream *subs,
int processed = urb->transfer_buffer_length / stride; int processed = urb->transfer_buffer_length / stride;
int est_delay; int est_delay;
/* ignore the delay accounting when procssed=0 is given, i.e.
* silent payloads are procssed before handling the actual data
*/
if (!processed)
return;
spin_lock_irqsave(&subs->lock, flags); spin_lock_irqsave(&subs->lock, flags);
est_delay = snd_usb_pcm_delay(subs, runtime->rate); est_delay = snd_usb_pcm_delay(subs, runtime->rate);
/* update delay with exact number of samples played */ /* update delay with exact number of samples played */