Commit fbcbe2b3 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 6a2a2b85 3737e2be
...@@ -80,14 +80,12 @@ static int snd_compr_open(struct inode *inode, struct file *f) ...@@ -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),
......
...@@ -2353,6 +2353,7 @@ int snd_hda_codec_reset(struct hda_codec *codec) ...@@ -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) ...@@ -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);
......
...@@ -2701,6 +2701,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { ...@@ -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),
......
...@@ -1075,7 +1075,7 @@ static struct snd_kcontrol_new stac_smux_mixer = { ...@@ -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
}; };
......
...@@ -297,6 +297,7 @@ static int ak4396_dac_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem ...@@ -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 = { ...@@ -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 },
}, },
}; };
......
...@@ -1140,6 +1140,12 @@ static void retire_playback_urb(struct snd_usb_substream *subs, ...@@ -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 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment