Commit 22deb791 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 - Fix invalid amp value for STAC925x
  ASoC: Fix the power update function for snd_soc_dapm_value_mux
  sound: virtuoso: do not overwrite EEPROM on Xonar D2/D2X
  ALSA: hda - Fix HP dv5 mic input
  ALSA: hda - Fix missing initialization of NID 0x0e for STAC925x
  ALSA: USB quirk for Logitech Quickcam Pro 9000 name
  ALSA: hda - Fix stac92hd83xxx_amp_nids[]
  ALSA: hda - Add automatic model setting for Samsung Q45
  ALSA: hda - Don't reset HP pinctl in patch_sigmatel.c
  ALSA: hda: stac92hd8xxx amp mixers
  ALSA: hda - Fix silent headphone output on Panasonic CF-74
  ALSA: hda - Update model descriptions in patch_sigmatel.c
  ALSA: hda - Use queue_delayed_work()
  ALSA: hda - Add quirk for another HP dv5
  ALSA: hda - Add support of NVidia MCP78 HDMI
  ALSA: hda - Fix a typo
  ALSA: hda - More fixes on Gateway entries
  ALSA: patch_sigmatel: Add missing Gateway entries and autodetection
  ALSA: hda - Add a new function to seek for a codec ID
parents 5839b414 7c4958ee
...@@ -275,7 +275,8 @@ STAC9200 ...@@ -275,7 +275,8 @@ STAC9200
dell-m25 Dell Inspiron E1505n dell-m25 Dell Inspiron E1505n
dell-m26 Dell Inspiron 1501 dell-m26 Dell Inspiron 1501
dell-m27 Dell Inspiron E1705/9400 dell-m27 Dell Inspiron E1705/9400
gateway Gateway laptops with EAPD control gateway-m4 Gateway laptops with EAPD control
gateway-m4-2 Gateway laptops with EAPD control
panasonic Panasonic CF-74 panasonic Panasonic CF-74
STAC9205/9254 STAC9205/9254
...@@ -302,6 +303,7 @@ STAC9220/9221 ...@@ -302,6 +303,7 @@ STAC9220/9221
macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3) macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3)
imac-intel Intel iMac (eq. type 2) imac-intel Intel iMac (eq. type 2)
imac-intel-20 Intel iMac (newer version) (eq. type 3) imac-intel-20 Intel iMac (newer version) (eq. type 3)
ecs202 ECS/PC chips
dell-d81 Dell (unknown) dell-d81 Dell (unknown)
dell-d82 Dell (unknown) dell-d82 Dell (unknown)
dell-m81 Dell (unknown) dell-m81 Dell (unknown)
...@@ -310,9 +312,13 @@ STAC9220/9221 ...@@ -310,9 +312,13 @@ STAC9220/9221
STAC9202/9250/9251 STAC9202/9250/9251
================== ==================
ref Reference board, base config ref Reference board, base config
m1 Some Gateway MX series laptops (NX560XL)
m1-2 Some Gateway MX series laptops (MX6453)
m2 Some Gateway MX series laptops (M255)
m2-2 Some Gateway MX series laptops m2-2 Some Gateway MX series laptops
m3 Some Gateway MX series laptops
m5 Some Gateway MX series laptops (MP6954)
m6 Some Gateway NX series laptops m6 Some Gateway NX series laptops
pa6 Gateway NX860 series
STAC9227/9228/9229/927x STAC9227/9228/9229/927x
======================= =======================
...@@ -329,6 +335,7 @@ STAC92HD71B* ...@@ -329,6 +335,7 @@ STAC92HD71B*
dell-m4-1 Dell desktops dell-m4-1 Dell desktops
dell-m4-2 Dell desktops dell-m4-2 Dell desktops
dell-m4-3 Dell desktops dell-m4-3 Dell desktops
hp-m4 HP dv laptops
STAC92HD73* STAC92HD73*
=========== ===========
...@@ -337,6 +344,7 @@ STAC92HD73* ...@@ -337,6 +344,7 @@ STAC92HD73*
dell-m6-amic Dell desktops/laptops with analog mics dell-m6-amic Dell desktops/laptops with analog mics
dell-m6-dmic Dell desktops/laptops with digital mics dell-m6-dmic Dell desktops/laptops with digital mics
dell-m6 Dell desktops/laptops with both type of mics dell-m6 Dell desktops/laptops with both type of mics
dell-eq Dell desktops/laptops
STAC92HD83* STAC92HD83*
=========== ===========
......
...@@ -2723,6 +2723,67 @@ int snd_hda_check_board_config(struct hda_codec *codec, ...@@ -2723,6 +2723,67 @@ int snd_hda_check_board_config(struct hda_codec *codec,
} }
EXPORT_SYMBOL_HDA(snd_hda_check_board_config); EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
/**
* snd_hda_check_board_codec_sid_config - compare the current codec
subsystem ID with the
config table
This is important for Gateway notebooks with SB450 HDA Audio
where the vendor ID of the PCI device is:
ATI Technologies Inc SB450 HDA Audio [1002:437b]
and the vendor/subvendor are found only at the codec.
* @codec: the HDA codec
* @num_configs: number of config enums
* @models: array of model name strings
* @tbl: configuration table, terminated by null entries
*
* Compares the modelname or PCI subsystem id of the current codec with the
* given configuration table. If a matching entry is found, returns its
* config value (supposed to be 0 or positive).
*
* If no entries are matching, the function returns a negative value.
*/
int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
int num_configs, const char **models,
const struct snd_pci_quirk *tbl)
{
const struct snd_pci_quirk *q;
/* Search for codec ID */
for (q = tbl; q->subvendor; q++) {
unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
if (vendorid == codec->subsystem_id)
break;
}
if (!q->subvendor)
return -1;
tbl = q;
if (tbl->value >= 0 && tbl->value < num_configs) {
#ifdef CONFIG_SND_DEBUG_DETECT
char tmp[10];
const char *model = NULL;
if (models)
model = models[tbl->value];
if (!model) {
sprintf(tmp, "#%d", tbl->value);
model = tmp;
}
snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
"for config %x:%x (%s)\n",
model, tbl->subvendor, tbl->subdevice,
(tbl->name ? tbl->name : "Unknown device"));
#endif
return tbl->value;
}
return -1;
}
EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
/** /**
* snd_hda_add_new_ctls - create controls from the array * snd_hda_add_new_ctls - create controls from the array
* @codec: the HDA codec * @codec: the HDA codec
...@@ -2815,7 +2876,7 @@ void snd_hda_power_down(struct hda_codec *codec) ...@@ -2815,7 +2876,7 @@ void snd_hda_power_down(struct hda_codec *codec)
return; return;
if (power_save(codec)) { if (power_save(codec)) {
codec->power_transition = 1; /* avoid reentrance */ codec->power_transition = 1; /* avoid reentrance */
schedule_delayed_work(&codec->power_work, queue_delayed_work(codec->bus->workq, &codec->power_work,
msecs_to_jiffies(power_save(codec) * 1000)); msecs_to_jiffies(power_save(codec) * 1000));
} }
} }
......
...@@ -296,6 +296,9 @@ void snd_print_pcm_bits(int pcm, char *buf, int buflen); ...@@ -296,6 +296,9 @@ void snd_print_pcm_bits(int pcm, char *buf, int buflen);
int snd_hda_check_board_config(struct hda_codec *codec, int num_configs, int snd_hda_check_board_config(struct hda_codec *codec, int num_configs,
const char **modelnames, const char **modelnames,
const struct snd_pci_quirk *pci_list); const struct snd_pci_quirk *pci_list);
int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
int num_configs, const char **models,
const struct snd_pci_quirk *tbl);
int snd_hda_add_new_ctls(struct hda_codec *codec, int snd_hda_add_new_ctls(struct hda_codec *codec,
struct snd_kcontrol_new *knew); struct snd_kcontrol_new *knew);
......
...@@ -160,6 +160,7 @@ static int patch_nvhdmi(struct hda_codec *codec) ...@@ -160,6 +160,7 @@ static int patch_nvhdmi(struct hda_codec *codec)
*/ */
static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
{ .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi }, { .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi },
{ .id = 0x10de0006, .name = "MCP78 HDMI", .patch = patch_nvhdmi },
{ .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi }, { .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi },
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi }, { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi },
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi }, { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi },
...@@ -167,6 +168,7 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { ...@@ -167,6 +168,7 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
}; };
MODULE_ALIAS("snd-hda-codec-id:10de0002"); MODULE_ALIAS("snd-hda-codec-id:10de0002");
MODULE_ALIAS("snd-hda-codec-id:10de0006");
MODULE_ALIAS("snd-hda-codec-id:10de0007"); MODULE_ALIAS("snd-hda-codec-id:10de0007");
MODULE_ALIAS("snd-hda-codec-id:10de0067"); MODULE_ALIAS("snd-hda-codec-id:10de0067");
MODULE_ALIAS("snd-hda-codec-id:10de8001"); MODULE_ALIAS("snd-hda-codec-id:10de8001");
......
...@@ -10573,6 +10573,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = { ...@@ -10573,6 +10573,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = {
SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU), SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU),
SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA), SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA),
SND_PCI_QUIRK(0x144d, 0xc039, "Samsung Q1U EL", ALC262_ULTRA), SND_PCI_QUIRK(0x144d, 0xc039, "Samsung Q1U EL", ALC262_ULTRA),
SND_PCI_QUIRK(0x144d, 0xc510, "Samsung Q45", ALC262_HIPPO),
SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000 y410", ALC262_LENOVO_3000), SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000 y410", ALC262_LENOVO_3000),
SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8), SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8),
SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31), SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31),
......
This diff is collapsed.
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* SPI 0 -> 1st PCM1796 (front) * SPI 0 -> 1st PCM1796 (front)
* SPI 1 -> 2nd PCM1796 (surround) * SPI 1 -> 2nd PCM1796 (surround)
* SPI 2 -> 3rd PCM1796 (center/LFE) * SPI 2 -> 3rd PCM1796 (center/LFE)
* SPI 4 -> 4th PCM1796 (back) * SPI 4 -> 4th PCM1796 (back) and EEPROM self-destruct (do not use!)
* *
* GPIO 2 -> M0 of CS5381 * GPIO 2 -> M0 of CS5381
* GPIO 3 -> M1 of CS5381 * GPIO 3 -> M1 of CS5381
...@@ -207,6 +207,12 @@ static void xonar_gpio_changed(struct oxygen *chip); ...@@ -207,6 +207,12 @@ static void xonar_gpio_changed(struct oxygen *chip);
static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec,
u8 reg, u8 value) u8 reg, u8 value)
{ {
/*
* We don't want to do writes on SPI 4 because the EEPROM, which shares
* the same pin, might get confused and broken. We'd better take care
* that the driver works with the default register values ...
*/
#if 0
/* maps ALSA channel pair number to SPI output */ /* maps ALSA channel pair number to SPI output */
static const u8 codec_map[4] = { static const u8 codec_map[4] = {
0, 1, 2, 4 0, 1, 2, 4
...@@ -217,6 +223,7 @@ static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, ...@@ -217,6 +223,7 @@ static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec,
(codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) | (codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) |
OXYGEN_SPI_CEN_LATCH_CLOCK_HI, OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
(reg << 8) | value); (reg << 8) | value);
#endif
} }
static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec, static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec,
...@@ -750,6 +757,9 @@ static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -12700, 100, 0); ...@@ -750,6 +757,9 @@ static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -12700, 100, 0);
static int xonar_d2_control_filter(struct snd_kcontrol_new *template) static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
{ {
if (!strncmp(template->name, "Master Playback ", 16))
/* disable volume/mute because they would require SPI writes */
return 1;
if (!strncmp(template->name, "CD Capture ", 11)) if (!strncmp(template->name, "CD Capture ", 11))
/* CD in is actually connected to the video in pin */ /* CD in is actually connected to the video in pin */
template->private_value ^= AC97_CD ^ AC97_VIDEO; template->private_value ^= AC97_CD ^ AC97_VIDEO;
...@@ -840,9 +850,8 @@ static const struct oxygen_model model_xonar_d2 = { ...@@ -840,9 +850,8 @@ static const struct oxygen_model model_xonar_d2 = {
.dac_volume_min = 0x0f, .dac_volume_min = 0x0f,
.dac_volume_max = 0xff, .dac_volume_max = 0xff,
.misc_flags = OXYGEN_MISC_MIDI, .misc_flags = OXYGEN_MISC_MIDI,
.function_flags = OXYGEN_FUNCTION_SPI | .function_flags = OXYGEN_FUNCTION_SPI,
OXYGEN_FUNCTION_ENABLE_SPI_4_5, .dac_i2s_format = OXYGEN_I2S_FORMAT_I2S,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
}; };
......
...@@ -720,7 +720,8 @@ static int dapm_mux_update_power(struct snd_soc_dapm_widget *widget, ...@@ -720,7 +720,8 @@ static int dapm_mux_update_power(struct snd_soc_dapm_widget *widget,
struct snd_soc_dapm_path *path; struct snd_soc_dapm_path *path;
int found = 0; int found = 0;
if (widget->id != snd_soc_dapm_mux) if (widget->id != snd_soc_dapm_mux &&
widget->id != snd_soc_dapm_value_mux)
return -ENODEV; return -ENODEV;
if (!snd_soc_test_bits(widget->codec, e->reg, mask, val)) if (!snd_soc_test_bits(widget->codec, e->reg, mask, val))
......
...@@ -128,6 +128,14 @@ ...@@ -128,6 +128,14 @@
.bInterfaceClass = USB_CLASS_AUDIO, .bInterfaceClass = USB_CLASS_AUDIO,
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
}, },
{
USB_DEVICE(0x046d, 0x0990),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
.vendor_name = "Logitech, Inc.",
.product_name = "QuickCam Pro 9000",
.ifnum = QUIRK_NO_INTERFACE
}
},
/* /*
* Yamaha devices * Yamaha devices
......
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