Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: [ALSA] hda - Fix capture mute Widget for stac9250/9251 [ALSA] snd-pcsp - fix pcsp_treble_info() to honour an item number [ALSA] hda - Added support for Foxconn P35AX-S mainboard [ALSA] hda - Fix COEF and EAPD in ALC889 auto-configuration mode [ALSA] hda - Fix noise on VT1708 codec [ALSA] hda - Add model for ASUS P5K-E/WIFI-AP
This commit is contained in:
commit
32522bfdae
|
@ -24,7 +24,8 @@ static DEFINE_SPINLOCK(i8253_lock);
|
||||||
/* default timer freq for PC-Speaker: 18643 Hz */
|
/* default timer freq for PC-Speaker: 18643 Hz */
|
||||||
#define DIV_18KHZ 64
|
#define DIV_18KHZ 64
|
||||||
#define MAX_DIV DIV_18KHZ
|
#define MAX_DIV DIV_18KHZ
|
||||||
#define CUR_DIV() (MAX_DIV >> chip->treble)
|
#define CALC_DIV(d) (MAX_DIV >> (d))
|
||||||
|
#define CUR_DIV() CALC_DIV(chip->treble)
|
||||||
#define PCSP_MAX_TREBLE 1
|
#define PCSP_MAX_TREBLE 1
|
||||||
|
|
||||||
/* unfortunately, with hrtimers 37KHz does not work very well :( */
|
/* unfortunately, with hrtimers 37KHz does not work very well :( */
|
||||||
|
@ -36,7 +37,8 @@ static DEFINE_SPINLOCK(i8253_lock);
|
||||||
#define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1)
|
#define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1)
|
||||||
#define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV)
|
#define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV)
|
||||||
#define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble))
|
#define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble))
|
||||||
#define PCSP_RATE() (PIT_TICK_RATE / CUR_DIV())
|
#define PCSP_CALC_RATE(i) (PIT_TICK_RATE / CALC_DIV(i))
|
||||||
|
#define PCSP_RATE() PCSP_CALC_RATE(chip->treble)
|
||||||
#define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE
|
#define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE
|
||||||
#define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE
|
#define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE
|
||||||
#define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1)
|
#define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1)
|
||||||
|
|
|
@ -50,7 +50,8 @@ static int pcsp_treble_info(struct snd_kcontrol *kcontrol,
|
||||||
uinfo->value.enumerated.items = chip->max_treble + 1;
|
uinfo->value.enumerated.items = chip->max_treble + 1;
|
||||||
if (uinfo->value.enumerated.item > chip->max_treble)
|
if (uinfo->value.enumerated.item > chip->max_treble)
|
||||||
uinfo->value.enumerated.item = chip->max_treble;
|
uinfo->value.enumerated.item = chip->max_treble;
|
||||||
sprintf(uinfo->value.enumerated.name, "%d", PCSP_RATE());
|
sprintf(uinfo->value.enumerated.name, "%d",
|
||||||
|
PCSP_CALC_RATE(uinfo->value.enumerated.item));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2858,6 +2858,7 @@ static const char *ad1988_models[AD1988_MODEL_LAST] = {
|
||||||
static struct snd_pci_quirk ad1988_cfg_tbl[] = {
|
static struct snd_pci_quirk ad1988_cfg_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG),
|
SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG),
|
||||||
SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG),
|
SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG),
|
||||||
|
SND_PCI_QUIRK(0x1043, 0x8277, "Asus P5K-E/WIFI-AP", AD1988_6STACK_DIG),
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -853,6 +853,7 @@ do_sku:
|
||||||
case 0x10ec0269:
|
case 0x10ec0269:
|
||||||
case 0x10ec0862:
|
case 0x10ec0862:
|
||||||
case 0x10ec0662:
|
case 0x10ec0662:
|
||||||
|
case 0x10ec0889:
|
||||||
snd_hda_codec_write(codec, 0x14, 0,
|
snd_hda_codec_write(codec, 0x14, 0,
|
||||||
AC_VERB_SET_EAPD_BTLENABLE, 2);
|
AC_VERB_SET_EAPD_BTLENABLE, 2);
|
||||||
snd_hda_codec_write(codec, 0x15, 0,
|
snd_hda_codec_write(codec, 0x15, 0,
|
||||||
|
@ -877,6 +878,7 @@ do_sku:
|
||||||
case 0x10ec0883:
|
case 0x10ec0883:
|
||||||
case 0x10ec0885:
|
case 0x10ec0885:
|
||||||
case 0x10ec0888:
|
case 0x10ec0888:
|
||||||
|
case 0x10ec0889:
|
||||||
snd_hda_codec_write(codec, 0x20, 0,
|
snd_hda_codec_write(codec, 0x20, 0,
|
||||||
AC_VERB_SET_COEF_INDEX, 7);
|
AC_VERB_SET_COEF_INDEX, 7);
|
||||||
tmp = snd_hda_codec_read(codec, 0x20, 0,
|
tmp = snd_hda_codec_read(codec, 0x20, 0,
|
||||||
|
@ -7743,6 +7745,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP),
|
SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP),
|
||||||
SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG),
|
SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG),
|
||||||
SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
|
SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
|
||||||
|
SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG),
|
||||||
SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG),
|
SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG),
|
||||||
SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC),
|
SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC),
|
||||||
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD),
|
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD),
|
||||||
|
|
|
@ -840,7 +840,7 @@ static struct snd_kcontrol_new stac92hd71bxx_mixer[] = {
|
||||||
static struct snd_kcontrol_new stac925x_mixer[] = {
|
static struct snd_kcontrol_new stac925x_mixer[] = {
|
||||||
STAC_INPUT_SOURCE(1),
|
STAC_INPUT_SOURCE(1),
|
||||||
HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT),
|
||||||
HDA_CODEC_MUTE("Capture Switch", 0x09, 0, HDA_OUTPUT),
|
HDA_CODEC_MUTE("Capture Switch", 0x14, 0, HDA_OUTPUT),
|
||||||
HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT),
|
||||||
{ } /* end */
|
{ } /* end */
|
||||||
};
|
};
|
||||||
|
|
|
@ -447,6 +447,23 @@ static struct hda_pcm_stream vt1708_pcm_analog_playback = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct hda_pcm_stream vt1708_pcm_analog_s16_playback = {
|
||||||
|
.substreams = 1,
|
||||||
|
.channels_min = 2,
|
||||||
|
.channels_max = 8,
|
||||||
|
.nid = 0x10, /* NID to query formats and rates */
|
||||||
|
/* We got noisy outputs on the right channel on VT1708 when
|
||||||
|
* 24bit samples are used. Until any workaround is found,
|
||||||
|
* disable the 24bit format, so far.
|
||||||
|
*/
|
||||||
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
|
.ops = {
|
||||||
|
.open = via_playback_pcm_open,
|
||||||
|
.prepare = via_playback_pcm_prepare,
|
||||||
|
.cleanup = via_playback_pcm_cleanup
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static struct hda_pcm_stream vt1708_pcm_analog_capture = {
|
static struct hda_pcm_stream vt1708_pcm_analog_capture = {
|
||||||
.substreams = 2,
|
.substreams = 2,
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
|
@ -899,6 +916,9 @@ static int patch_vt1708(struct hda_codec *codec)
|
||||||
|
|
||||||
spec->stream_name_analog = "VT1708 Analog";
|
spec->stream_name_analog = "VT1708 Analog";
|
||||||
spec->stream_analog_playback = &vt1708_pcm_analog_playback;
|
spec->stream_analog_playback = &vt1708_pcm_analog_playback;
|
||||||
|
/* disable 32bit format on VT1708 */
|
||||||
|
if (codec->vendor_id == 0x11061708)
|
||||||
|
spec->stream_analog_playback = &vt1708_pcm_analog_s16_playback;
|
||||||
spec->stream_analog_capture = &vt1708_pcm_analog_capture;
|
spec->stream_analog_capture = &vt1708_pcm_analog_capture;
|
||||||
|
|
||||||
spec->stream_name_digital = "VT1708 Digital";
|
spec->stream_name_digital = "VT1708 Digital";
|
||||||
|
|
Loading…
Reference in a new issue