Commit ae445b91 authored by Linus Torvalds's avatar Linus Torvalds

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 - Allow all formats as default for Nvidia HDMI
  ALSA: aaci: ARM1176 aaci-pl041 AC97 register read timeout
  ALSA: hda - Fix volume-knob setup for Dell laptops with STAC9228
  ALSA: hda - Fix mute sound with STAC9227/9228 codecs
  ALSA: bt87x - Add a whitelist for Pinnacle PCTV (11bd:0012)
  ALSA: hda - Fix overflow of spec->init_verbs in patch_realtek.c
  ALSA: ice1724 - Make call to set hw params succeed on ESI Juli@
  ALSA: ice1724: Fix surround on Chaintech AV-710
  ALSA: hda - Add full rates/formats support for Nvidia HDMI
parents 54753fdb fb66ebd8
...@@ -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*
......
...@@ -937,6 +937,7 @@ static int __devinit aaci_probe_ac97(struct aaci *aaci) ...@@ -937,6 +937,7 @@ static int __devinit aaci_probe_ac97(struct aaci *aaci)
struct snd_ac97 *ac97; struct snd_ac97 *ac97;
int ret; int ret;
writel(0, aaci->base + AC97_POWERDOWN);
/* /*
* Assert AACIRESET for 2us * Assert AACIRESET for 2us
*/ */
......
...@@ -808,6 +808,8 @@ static struct pci_device_id snd_bt87x_ids[] = { ...@@ -808,6 +808,8 @@ static struct pci_device_id snd_bt87x_ids[] = {
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x1002, 0x0001, GENERIC), BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x1002, 0x0001, GENERIC),
/* Leadtek Winfast tv 2000xp delux */ /* Leadtek Winfast tv 2000xp delux */
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x107d, 0x6606, GENERIC), BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x107d, 0x6606, GENERIC),
/* Pinnacle PCTV */
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x11bd, 0x0012, GENERIC),
/* Voodoo TV 200 */ /* Voodoo TV 200 */
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x121a, 0x3000, GENERIC), BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x121a, 0x3000, GENERIC),
/* Askey Computer Corp. MagicTView'99 */ /* Askey Computer Corp. MagicTView'99 */
......
...@@ -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;
......
...@@ -52,11 +52,13 @@ static int __devinit snd_vt1724_amp_init(struct snd_ice1712 *ice) ...@@ -52,11 +52,13 @@ static int __devinit snd_vt1724_amp_init(struct snd_ice1712 *ice)
/* only use basic functionality for now */ /* only use basic functionality for now */
ice->num_total_dacs = 2; /* only PSDOUT0 is connected */ /* VT1616 6ch codec connected to PSDOUT0 using packed mode */
ice->num_total_dacs = 6;
ice->num_total_adcs = 2; ice->num_total_adcs = 2;
/* Chaintech AV-710 has another codecs, which need initialization */ /* Chaintech AV-710 has another WM8728 codec connected to PSDOUT4
/* initialize WM8728 codec */ (shared with the SPDIF output). Mixer control for this codec
is not yet supported. */
if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AV710) { if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AV710) {
for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2) for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2)
wm_put(ice, wm_inits[i], wm_inits[i+1]); wm_put(ice, wm_inits[i], wm_inits[i+1]);
......
...@@ -648,7 +648,7 @@ static int snd_vt1724_set_pro_rate(struct snd_ice1712 *ice, unsigned int rate, ...@@ -648,7 +648,7 @@ static int snd_vt1724_set_pro_rate(struct snd_ice1712 *ice, unsigned int rate,
(inb(ICEMT1724(ice, DMA_PAUSE)) & DMA_PAUSES)) { (inb(ICEMT1724(ice, DMA_PAUSE)) & DMA_PAUSES)) {
/* running? we cannot change the rate now... */ /* running? we cannot change the rate now... */
spin_unlock_irqrestore(&ice->reg_lock, flags); spin_unlock_irqrestore(&ice->reg_lock, flags);
return -EBUSY; return ((rate == ice->cur_rate) && !force) ? 0 : -EBUSY;
} }
if (!force && is_pro_rate_locked(ice)) { if (!force && is_pro_rate_locked(ice)) {
spin_unlock_irqrestore(&ice->reg_lock, flags); spin_unlock_irqrestore(&ice->reg_lock, flags);
......
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