Loading sound/core/oss/pcm_oss.c +11 −8 Original line number Original line Diff line number Diff line Loading @@ -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]; snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DROP, NULL); if (!substream) substream->runtime->oss.prepare = 1; continue; } runtime = substream->runtime; substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE]; if (substream != NULL) { 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; runtime->oss.prev_hw_ptr_period = 0; runtime->oss.period_ptr = 0; } } return 0; return 0; } } Loading sound/pci/hda/patch_conexant.c +16 −15 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -2125,11 +2125,20 @@ static void cxt5066_update_speaker(struct hda_codec *codec) pinctl); pinctl); /* Port D (HP/LO) */ /* Port D (HP/LO) */ if (spec->dell_automute) { /* DELL AIO Port Rule: PortA> PortD> IntSpk */ pinctl = (!(spec->hp_present & 1) && spec->cur_eapd) ? PIN_OUT : 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) pinctl = ((spec->hp_present & 2) && spec->cur_eapd) ? spec->port_d_mode : 0; ? spec->port_d_mode : 0; /* Mute if Port A is connected on Thinkpad */ } if (spec->thinkpad && (spec->hp_present & 1)) pinctl = 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); Loading @@ -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 */ Loading sound/pci/hda/patch_realtek.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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), Loading sound/pci/hda/patch_sigmatel.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ }; }; Loading Loading
sound/core/oss/pcm_oss.c +11 −8 Original line number Original line Diff line number Diff line Loading @@ -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]; snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DROP, NULL); if (!substream) substream->runtime->oss.prepare = 1; continue; } runtime = substream->runtime; substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE]; if (substream != NULL) { 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; runtime->oss.prev_hw_ptr_period = 0; runtime->oss.period_ptr = 0; } } return 0; return 0; } } Loading
sound/pci/hda/patch_conexant.c +16 −15 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -2125,11 +2125,20 @@ static void cxt5066_update_speaker(struct hda_codec *codec) pinctl); pinctl); /* Port D (HP/LO) */ /* Port D (HP/LO) */ if (spec->dell_automute) { /* DELL AIO Port Rule: PortA> PortD> IntSpk */ pinctl = (!(spec->hp_present & 1) && spec->cur_eapd) ? PIN_OUT : 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) pinctl = ((spec->hp_present & 2) && spec->cur_eapd) ? spec->port_d_mode : 0; ? spec->port_d_mode : 0; /* Mute if Port A is connected on Thinkpad */ } if (spec->thinkpad && (spec->hp_present & 1)) pinctl = 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); Loading @@ -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 */ Loading
sound/pci/hda/patch_realtek.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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), Loading
sound/pci/hda/patch_sigmatel.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ }; }; Loading