Commit fb66ebd8 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/hda' into for-linus

parents 29a4f2d3 491dc043
...@@ -359,6 +359,7 @@ STAC9227/9228/9229/927x ...@@ -359,6 +359,7 @@ STAC9227/9228/9229/927x
5stack-no-fp D965 5stack without front panel 5stack-no-fp D965 5stack without front panel
dell-3stack Dell Dimension E520 dell-3stack Dell Dimension E520
dell-bios Fixes with Dell BIOS setup dell-bios Fixes with Dell BIOS setup
volknob Fixes with volume-knob widget 0x24
auto BIOS setup (default) auto BIOS setup (default)
STAC92HD71B* STAC92HD71B*
......
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
#include "hda_codec.h" #include "hda_codec.h"
#include "hda_local.h" #include "hda_local.h"
/* define below to restrict the supported rates and formats */
/* #define LIMITED_RATE_FMT_SUPPORT */
struct nvhdmi_spec { struct nvhdmi_spec {
struct hda_multi_out multiout; struct hda_multi_out multiout;
...@@ -60,6 +63,22 @@ static struct hda_verb nvhdmi_basic_init[] = { ...@@ -60,6 +63,22 @@ static struct hda_verb nvhdmi_basic_init[] = {
{} /* terminator */ {} /* terminator */
}; };
#ifdef LIMITED_RATE_FMT_SUPPORT
/* support only the safe format and rate */
#define SUPPORTED_RATES SNDRV_PCM_RATE_48000
#define SUPPORTED_MAXBPS 16
#define SUPPORTED_FORMATS SNDRV_PCM_FMTBIT_S16_LE
#else
/* support all rates and formats */
#define SUPPORTED_RATES \
(SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\
SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |\
SNDRV_PCM_RATE_192000)
#define SUPPORTED_MAXBPS 24
#define SUPPORTED_FORMATS \
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
#endif
/* /*
* Controls * Controls
*/ */
...@@ -258,9 +277,9 @@ static struct hda_pcm_stream nvhdmi_pcm_digital_playback_8ch = { ...@@ -258,9 +277,9 @@ static struct hda_pcm_stream nvhdmi_pcm_digital_playback_8ch = {
.channels_min = 2, .channels_min = 2,
.channels_max = 8, .channels_max = 8,
.nid = Nv_Master_Convert_nid, .nid = Nv_Master_Convert_nid,
.rates = SNDRV_PCM_RATE_48000, .rates = SUPPORTED_RATES,
.maxbps = 16, .maxbps = SUPPORTED_MAXBPS,
.formats = SNDRV_PCM_FMTBIT_S16_LE, .formats = SUPPORTED_FORMATS,
.ops = { .ops = {
.open = nvhdmi_dig_playback_pcm_open, .open = nvhdmi_dig_playback_pcm_open,
.close = nvhdmi_dig_playback_pcm_close_8ch, .close = nvhdmi_dig_playback_pcm_close_8ch,
...@@ -273,9 +292,9 @@ static struct hda_pcm_stream nvhdmi_pcm_digital_playback_2ch = { ...@@ -273,9 +292,9 @@ static struct hda_pcm_stream nvhdmi_pcm_digital_playback_2ch = {
.channels_min = 2, .channels_min = 2,
.channels_max = 2, .channels_max = 2,
.nid = Nv_Master_Convert_nid, .nid = Nv_Master_Convert_nid,
.rates = SNDRV_PCM_RATE_48000, .rates = SUPPORTED_RATES,
.maxbps = 16, .maxbps = SUPPORTED_MAXBPS,
.formats = SNDRV_PCM_FMTBIT_S16_LE, .formats = SUPPORTED_FORMATS,
.ops = { .ops = {
.open = nvhdmi_dig_playback_pcm_open, .open = nvhdmi_dig_playback_pcm_open,
.close = nvhdmi_dig_playback_pcm_close_2ch, .close = nvhdmi_dig_playback_pcm_close_2ch,
......
...@@ -275,7 +275,7 @@ struct alc_spec { ...@@ -275,7 +275,7 @@ struct alc_spec {
struct snd_kcontrol_new *cap_mixer; /* capture mixer */ struct snd_kcontrol_new *cap_mixer; /* capture mixer */
unsigned int beep_amp; /* beep amp value, set via set_beep_amp() */ unsigned int beep_amp; /* beep amp value, set via set_beep_amp() */
const struct hda_verb *init_verbs[5]; /* initialization verbs const struct hda_verb *init_verbs[10]; /* initialization verbs
* don't forget NULL * don't forget NULL
* termination! * termination!
*/ */
......
...@@ -158,6 +158,7 @@ enum { ...@@ -158,6 +158,7 @@ enum {
STAC_D965_5ST_NO_FP, STAC_D965_5ST_NO_FP,
STAC_DELL_3ST, STAC_DELL_3ST,
STAC_DELL_BIOS, STAC_DELL_BIOS,
STAC_927X_VOLKNOB,
STAC_927X_MODELS STAC_927X_MODELS
}; };
...@@ -907,6 +908,16 @@ static struct hda_verb d965_core_init[] = { ...@@ -907,6 +908,16 @@ static struct hda_verb d965_core_init[] = {
{} {}
}; };
static struct hda_verb dell_3st_core_init[] = {
/* don't set delta bit */
{0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0x7f},
/* unmute node 0x1b */
{0x1b, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000},
/* select node 0x03 as DAC */
{0x0b, AC_VERB_SET_CONNECT_SEL, 0x01},
{}
};
static struct hda_verb stac927x_core_init[] = { static struct hda_verb stac927x_core_init[] = {
/* set master volume and direct control */ /* set master volume and direct control */
{ 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
...@@ -915,6 +926,14 @@ static struct hda_verb stac927x_core_init[] = { ...@@ -915,6 +926,14 @@ static struct hda_verb stac927x_core_init[] = {
{} {}
}; };
static struct hda_verb stac927x_volknob_core_init[] = {
/* don't set delta bit */
{0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0x7f},
/* enable analog pc beep path */
{0x01, AC_VERB_SET_DIGI_CONVERT_2, 1 << 5},
{}
};
static struct hda_verb stac9205_core_init[] = { static struct hda_verb stac9205_core_init[] = {
/* set master volume and direct control */ /* set master volume and direct control */
{ 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
...@@ -1999,6 +2018,7 @@ static unsigned int *stac927x_brd_tbl[STAC_927X_MODELS] = { ...@@ -1999,6 +2018,7 @@ static unsigned int *stac927x_brd_tbl[STAC_927X_MODELS] = {
[STAC_D965_5ST_NO_FP] = d965_5st_no_fp_pin_configs, [STAC_D965_5ST_NO_FP] = d965_5st_no_fp_pin_configs,
[STAC_DELL_3ST] = dell_3st_pin_configs, [STAC_DELL_3ST] = dell_3st_pin_configs,
[STAC_DELL_BIOS] = NULL, [STAC_DELL_BIOS] = NULL,
[STAC_927X_VOLKNOB] = NULL,
}; };
static const char *stac927x_models[STAC_927X_MODELS] = { static const char *stac927x_models[STAC_927X_MODELS] = {
...@@ -2010,6 +2030,7 @@ static const char *stac927x_models[STAC_927X_MODELS] = { ...@@ -2010,6 +2030,7 @@ static const char *stac927x_models[STAC_927X_MODELS] = {
[STAC_D965_5ST_NO_FP] = "5stack-no-fp", [STAC_D965_5ST_NO_FP] = "5stack-no-fp",
[STAC_DELL_3ST] = "dell-3stack", [STAC_DELL_3ST] = "dell-3stack",
[STAC_DELL_BIOS] = "dell-bios", [STAC_DELL_BIOS] = "dell-bios",
[STAC_927X_VOLKNOB] = "volknob",
}; };
static struct snd_pci_quirk stac927x_cfg_tbl[] = { static struct snd_pci_quirk stac927x_cfg_tbl[] = {
...@@ -2045,6 +2066,8 @@ static struct snd_pci_quirk stac927x_cfg_tbl[] = { ...@@ -2045,6 +2066,8 @@ static struct snd_pci_quirk stac927x_cfg_tbl[] = {
"Intel D965", STAC_D965_5ST), "Intel D965", STAC_D965_5ST),
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_INTEL, 0xff00, 0x2500, SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_INTEL, 0xff00, 0x2500,
"Intel D965", STAC_D965_5ST), "Intel D965", STAC_D965_5ST),
/* volume-knob fixes */
SND_PCI_QUIRK_VENDOR(0x10cf, "FSC", STAC_927X_VOLKNOB),
{} /* terminator */ {} /* terminator */
}; };
...@@ -5612,10 +5635,14 @@ static int patch_stac927x(struct hda_codec *codec) ...@@ -5612,10 +5635,14 @@ static int patch_stac927x(struct hda_codec *codec)
spec->dmic_nids = stac927x_dmic_nids; spec->dmic_nids = stac927x_dmic_nids;
spec->num_dmics = STAC927X_NUM_DMICS; spec->num_dmics = STAC927X_NUM_DMICS;
spec->init = d965_core_init; spec->init = dell_3st_core_init;
spec->dmux_nids = stac927x_dmux_nids; spec->dmux_nids = stac927x_dmux_nids;
spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids); spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids);
break; break;
case STAC_927X_VOLKNOB:
spec->num_dmics = 0;
spec->init = stac927x_volknob_core_init;
break;
default: default:
spec->num_dmics = 0; spec->num_dmics = 0;
spec->init = stac927x_core_init; spec->init = stac927x_core_init;
......
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