Commit 6defb60a authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'for-linus' into for-next

Resolved the conflicts with the latest HDA HDMI fixes.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parents 03367bf7 790b415c
...@@ -149,8 +149,6 @@ odev_release(struct inode *inode, struct file *file) ...@@ -149,8 +149,6 @@ odev_release(struct inode *inode, struct file *file)
if ((dp = file->private_data) == NULL) if ((dp = file->private_data) == NULL)
return 0; return 0;
snd_seq_oss_drain_write(dp);
mutex_lock(&register_mutex); mutex_lock(&register_mutex);
snd_seq_oss_release(dp); snd_seq_oss_release(dp);
mutex_unlock(&register_mutex); mutex_unlock(&register_mutex);
......
...@@ -127,7 +127,6 @@ int snd_seq_oss_write(struct seq_oss_devinfo *dp, const char __user *buf, int co ...@@ -127,7 +127,6 @@ int snd_seq_oss_write(struct seq_oss_devinfo *dp, const char __user *buf, int co
unsigned int snd_seq_oss_poll(struct seq_oss_devinfo *dp, struct file *file, poll_table * wait); unsigned int snd_seq_oss_poll(struct seq_oss_devinfo *dp, struct file *file, poll_table * wait);
void snd_seq_oss_reset(struct seq_oss_devinfo *dp); void snd_seq_oss_reset(struct seq_oss_devinfo *dp);
void snd_seq_oss_drain_write(struct seq_oss_devinfo *dp);
/* */ /* */
void snd_seq_oss_process_queue(struct seq_oss_devinfo *dp, abstime_t time); void snd_seq_oss_process_queue(struct seq_oss_devinfo *dp, abstime_t time);
......
...@@ -435,22 +435,6 @@ snd_seq_oss_release(struct seq_oss_devinfo *dp) ...@@ -435,22 +435,6 @@ snd_seq_oss_release(struct seq_oss_devinfo *dp)
} }
/*
* Wait until the queue is empty (if we don't have nonblock)
*/
void
snd_seq_oss_drain_write(struct seq_oss_devinfo *dp)
{
if (! dp->timer->running)
return;
if (is_write_mode(dp->file_mode) && !is_nonblock_mode(dp->file_mode) &&
dp->writeq) {
while (snd_seq_oss_writeq_sync(dp->writeq))
;
}
}
/* /*
* reset sequencer devices * reset sequencer devices
*/ */
......
...@@ -2936,13 +2936,6 @@ static int patch_generic_hdmi(struct hda_codec *codec) ...@@ -2936,13 +2936,6 @@ static int patch_generic_hdmi(struct hda_codec *codec)
is_broxton(codec)) is_broxton(codec))
codec->core.link_power_control = 1; codec->core.link_power_control = 1;
if (codec_has_acomp(codec)) {
codec->depop_delay = 0;
spec->i915_audio_ops.audio_ptr = codec;
spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
}
if (hdmi_parse_codec(codec) < 0) { if (hdmi_parse_codec(codec) < 0) {
if (spec->i915_bound) if (spec->i915_bound)
snd_hdac_i915_exit(&codec->bus->core); snd_hdac_i915_exit(&codec->bus->core);
...@@ -2964,6 +2957,18 @@ static int patch_generic_hdmi(struct hda_codec *codec) ...@@ -2964,6 +2957,18 @@ static int patch_generic_hdmi(struct hda_codec *codec)
init_channel_allocations(); init_channel_allocations();
if (codec_has_acomp(codec)) {
codec->depop_delay = 0;
spec->i915_audio_ops.audio_ptr = codec;
/* intel_audio_codec_enable() or intel_audio_codec_disable()
* will call pin_eld_notify with using audio_ptr pointer
* We need make sure audio_ptr is really setup
*/
wmb();
spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
}
WARN_ON(spec->dyn_pcm_assign && !codec_has_acomp(codec)); WARN_ON(spec->dyn_pcm_assign && !codec_has_acomp(codec));
return 0; return 0;
} }
......
...@@ -5412,6 +5412,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { ...@@ -5412,6 +5412,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC), SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK), SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK),
SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK), SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK),
SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572), SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS), SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK), SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
......
...@@ -2879,7 +2879,7 @@ static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl ...@@ -2879,7 +2879,7 @@ static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl
{ {
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
ucontrol->value.enumerated.item[0] = hdsp_dds_offset(hdsp); ucontrol->value.integer.value[0] = hdsp_dds_offset(hdsp);
return 0; return 0;
} }
...@@ -2891,7 +2891,7 @@ static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl ...@@ -2891,7 +2891,7 @@ static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl
if (!snd_hdsp_use_is_exclusive(hdsp)) if (!snd_hdsp_use_is_exclusive(hdsp))
return -EBUSY; return -EBUSY;
val = ucontrol->value.enumerated.item[0]; val = ucontrol->value.integer.value[0];
spin_lock_irq(&hdsp->lock); spin_lock_irq(&hdsp->lock);
if (val != hdsp_dds_offset(hdsp)) if (val != hdsp_dds_offset(hdsp))
change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0; change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0;
......
...@@ -1601,6 +1601,9 @@ static void hdspm_set_dds_value(struct hdspm *hdspm, int rate) ...@@ -1601,6 +1601,9 @@ static void hdspm_set_dds_value(struct hdspm *hdspm, int rate)
{ {
u64 n; u64 n;
if (snd_BUG_ON(rate <= 0))
return;
if (rate >= 112000) if (rate >= 112000)
rate /= 4; rate /= 4;
else if (rate >= 56000) else if (rate >= 56000)
...@@ -2215,6 +2218,8 @@ static int hdspm_get_system_sample_rate(struct hdspm *hdspm) ...@@ -2215,6 +2218,8 @@ static int hdspm_get_system_sample_rate(struct hdspm *hdspm)
} else { } else {
/* slave mode, return external sample rate */ /* slave mode, return external sample rate */
rate = hdspm_external_sample_rate(hdspm); rate = hdspm_external_sample_rate(hdspm);
if (!rate)
rate = hdspm->system_sample_rate;
} }
} }
...@@ -2260,8 +2265,11 @@ static int snd_hdspm_put_system_sample_rate(struct snd_kcontrol *kcontrol, ...@@ -2260,8 +2265,11 @@ static int snd_hdspm_put_system_sample_rate(struct snd_kcontrol *kcontrol,
ucontrol) ucontrol)
{ {
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol); struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
int rate = ucontrol->value.integer.value[0];
hdspm_set_dds_value(hdspm, ucontrol->value.enumerated.item[0]); if (rate < 27000 || rate > 207000)
return -EINVAL;
hdspm_set_dds_value(hdspm, ucontrol->value.integer.value[0]);
return 0; return 0;
} }
...@@ -4449,7 +4457,7 @@ static int snd_hdspm_get_tco_word_term(struct snd_kcontrol *kcontrol, ...@@ -4449,7 +4457,7 @@ static int snd_hdspm_get_tco_word_term(struct snd_kcontrol *kcontrol,
{ {
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol); struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
ucontrol->value.enumerated.item[0] = hdspm->tco->term; ucontrol->value.integer.value[0] = hdspm->tco->term;
return 0; return 0;
} }
...@@ -4460,8 +4468,8 @@ static int snd_hdspm_put_tco_word_term(struct snd_kcontrol *kcontrol, ...@@ -4460,8 +4468,8 @@ static int snd_hdspm_put_tco_word_term(struct snd_kcontrol *kcontrol,
{ {
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol); struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
if (hdspm->tco->term != ucontrol->value.enumerated.item[0]) { if (hdspm->tco->term != ucontrol->value.integer.value[0]) {
hdspm->tco->term = ucontrol->value.enumerated.item[0]; hdspm->tco->term = ucontrol->value.integer.value[0];
hdspm_tco_write(hdspm); hdspm_tco_write(hdspm);
......
...@@ -1123,6 +1123,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip) ...@@ -1123,6 +1123,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */ case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */
case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */ case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */ case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */ case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */ case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */ case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
......
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