Merge branch 'fix/hda' into topic/hda
This commit is contained in:
Коммит
4c98ec1170
|
@ -1510,16 +1510,19 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
|
||||||
static int snd_pcm_oss_reset(struct snd_pcm_oss_file *pcm_oss_file)
|
static int snd_pcm_oss_reset(struct snd_pcm_oss_file *pcm_oss_file)
|
||||||
{
|
{
|
||||||
struct snd_pcm_substream *substream;
|
struct snd_pcm_substream *substream;
|
||||||
|
struct snd_pcm_runtime *runtime;
|
||||||
|
int i;
|
||||||
|
|
||||||
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
|
for (i = 0; i < 2; i++) {
|
||||||
if (substream != NULL) {
|
substream = pcm_oss_file->streams[i];
|
||||||
|
if (!substream)
|
||||||
|
continue;
|
||||||
|
runtime = substream->runtime;
|
||||||
snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DROP, NULL);
|
snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DROP, NULL);
|
||||||
substream->runtime->oss.prepare = 1;
|
runtime->oss.prepare = 1;
|
||||||
}
|
runtime->oss.buffer_used = 0;
|
||||||
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
|
runtime->oss.prev_hw_ptr_period = 0;
|
||||||
if (substream != NULL) {
|
runtime->oss.period_ptr = 0;
|
||||||
snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DROP, NULL);
|
|
||||||
substream->runtime->oss.prepare = 1;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2116,8 +2116,8 @@ static void cxt5066_update_speaker(struct hda_codec *codec)
|
||||||
struct conexant_spec *spec = codec->spec;
|
struct conexant_spec *spec = codec->spec;
|
||||||
unsigned int pinctl;
|
unsigned int pinctl;
|
||||||
|
|
||||||
snd_printdd("CXT5066: update speaker, hp_present=%d\n",
|
snd_printdd("CXT5066: update speaker, hp_present=%d, cur_eapd=%d\n",
|
||||||
spec->hp_present);
|
spec->hp_present, spec->cur_eapd);
|
||||||
|
|
||||||
/* Port A (HP) */
|
/* Port A (HP) */
|
||||||
pinctl = ((spec->hp_present & 1) && spec->cur_eapd) ? PIN_HP : 0;
|
pinctl = ((spec->hp_present & 1) && spec->cur_eapd) ? PIN_HP : 0;
|
||||||
|
@ -2125,11 +2125,20 @@ static void cxt5066_update_speaker(struct hda_codec *codec)
|
||||||
pinctl);
|
pinctl);
|
||||||
|
|
||||||
/* Port D (HP/LO) */
|
/* Port D (HP/LO) */
|
||||||
pinctl = ((spec->hp_present & 2) && spec->cur_eapd)
|
if (spec->dell_automute) {
|
||||||
? spec->port_d_mode : 0;
|
/* DELL AIO Port Rule: PortA> PortD> IntSpk */
|
||||||
/* Mute if Port A is connected on Thinkpad */
|
pinctl = (!(spec->hp_present & 1) && spec->cur_eapd)
|
||||||
if (spec->thinkpad && (spec->hp_present & 1))
|
? PIN_OUT : 0;
|
||||||
pinctl = 0;
|
} else if (spec->thinkpad) {
|
||||||
|
if (spec->cur_eapd)
|
||||||
|
pinctl = spec->port_d_mode;
|
||||||
|
/* Mute dock line-out if Port A (laptop HP) is present */
|
||||||
|
if (spec->hp_present& 1)
|
||||||
|
pinctl = 0;
|
||||||
|
} else {
|
||||||
|
pinctl = ((spec->hp_present & 2) && spec->cur_eapd)
|
||||||
|
? spec->port_d_mode : 0;
|
||||||
|
}
|
||||||
snd_hda_codec_write(codec, 0x1c, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
|
snd_hda_codec_write(codec, 0x1c, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
|
||||||
pinctl);
|
pinctl);
|
||||||
|
|
||||||
|
@ -2137,14 +2146,6 @@ static void cxt5066_update_speaker(struct hda_codec *codec)
|
||||||
pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0;
|
pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0;
|
||||||
snd_hda_codec_write(codec, 0x1f, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
|
snd_hda_codec_write(codec, 0x1f, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
|
||||||
pinctl);
|
pinctl);
|
||||||
|
|
||||||
if (spec->dell_automute) {
|
|
||||||
/* DELL AIO Port Rule: PortA > PortD > IntSpk */
|
|
||||||
pinctl = (!(spec->hp_present & 1) && spec->cur_eapd)
|
|
||||||
? PIN_OUT : 0;
|
|
||||||
snd_hda_codec_write(codec, 0x1c, 0,
|
|
||||||
AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* turn on/off EAPD (+ mute HP) as a master switch */
|
/* turn on/off EAPD (+ mute HP) as a master switch */
|
||||||
|
|
|
@ -4603,6 +4603,7 @@ static struct snd_pci_quirk alc880_cfg_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU),
|
SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU),
|
||||||
SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW),
|
SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW),
|
||||||
SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_LG),
|
SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_LG),
|
||||||
|
SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_LG),
|
||||||
SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_LG),
|
SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_LG),
|
||||||
SND_PCI_QUIRK(0x1854, 0x0077, "LG LW25", ALC880_LG_LW),
|
SND_PCI_QUIRK(0x1854, 0x0077, "LG LW25", ALC880_LG_LW),
|
||||||
SND_PCI_QUIRK(0x19db, 0x4188, "TCL S700", ALC880_TCL_S700),
|
SND_PCI_QUIRK(0x19db, 0x4188, "TCL S700", ALC880_TCL_S700),
|
||||||
|
|
|
@ -1627,6 +1627,8 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
|
||||||
static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = {
|
static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = {
|
||||||
SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02a1,
|
SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02a1,
|
||||||
"Alienware M17x", STAC_ALIENWARE_M17X),
|
"Alienware M17x", STAC_ALIENWARE_M17X),
|
||||||
|
SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x043a,
|
||||||
|
"Alienware M17x", STAC_ALIENWARE_M17X),
|
||||||
{} /* terminator */
|
{} /* terminator */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче