mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-linus' into for-next
Resolved the conflicts with the latest HDA HDMI fixes. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
commit
6defb60ae4
|
@ -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(®ister_mutex);
|
mutex_lock(®ister_mutex);
|
||||||
snd_seq_oss_release(dp);
|
snd_seq_oss_release(dp);
|
||||||
mutex_unlock(®ister_mutex);
|
mutex_unlock(®ister_mutex);
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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)
|
||||||
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)
|
||||||
|
|
||||||
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[] = {
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
} 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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
{
|
{
|
||||||
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)
|
||||||
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 */
|
||||||
|
|
Loading…
Reference in New Issue