diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-30 14:44:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-30 14:44:35 -0400 |
commit | 4ac08d36aa9c556556c7b150caee263c6d542645 (patch) | |
tree | 52fb22d3230665237109d5e886609199c0e6f22c | |
parent | 0b54968f667585aa4b98a7225f4d4df63917703c (diff) | |
parent | 71c21b4cf62177a9d1ea46ff4c6073c907122226 (diff) |
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: ASoC: Fix WM9713 ALC Decay Time name
ALSA: ASoC: Fix some minor errors in mpc5200 psc i2s driver
ALSA: ASoC: Fix mono controls after conversion to support full int masks
ALSA: sound/ice1712: indentation & braces disagree - add braces
ALSA: usb - Add quirk for Edirol UA-25EX advanced modes
sound: struct device - replace bus_id with dev_name(), dev_set_name()
ALSA: hda - Add reboot notifier
ALSA: Warn when control names are truncated
ALSA: intel8x0 - add Dell Optiplex GX620 (AD1981B) to AC97 clock whitelist
ALSA: hda - Fix SPDIF mute on IDT/STAC codecs
ALSA: hda: Add HDA vendor ID for Wolfson Microelectronics
ALSA: hda - Add another HP model for AD1884A
-rw-r--r-- | include/sound/soc.h | 3 | ||||
-rw-r--r-- | sound/core/control.c | 7 | ||||
-rw-r--r-- | sound/pci/ac97/ac97_codec.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 29 | ||||
-rw-r--r-- | sound/pci/hda/patch_analog.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 4 | ||||
-rw-r--r-- | sound/pci/ice1712/ice1712.c | 6 | ||||
-rw-r--r-- | sound/pci/intel8x0.c | 1 | ||||
-rw-r--r-- | sound/soc/codecs/wm9713.c | 2 | ||||
-rw-r--r-- | sound/soc/fsl/mpc5200_psc_i2s.c | 14 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 2 | ||||
-rw-r--r-- | sound/usb/usbquirks.h | 30 |
13 files changed, 88 insertions, 18 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h index a1e0357a84d7..5e0189876afd 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -28,7 +28,8 @@ | |||
28 | */ | 28 | */ |
29 | #define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) \ | 29 | #define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) \ |
30 | ((unsigned long)&(struct soc_mixer_control) \ | 30 | ((unsigned long)&(struct soc_mixer_control) \ |
31 | {.reg = xreg, .shift = xshift, .max = xmax, .invert = xinvert}) | 31 | {.reg = xreg, .shift = xshift, .rshift = xshift, .max = xmax, \ |
32 | .invert = xinvert}) | ||
32 | #define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \ | 33 | #define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \ |
33 | ((unsigned long)&(struct soc_mixer_control) \ | 34 | ((unsigned long)&(struct soc_mixer_control) \ |
34 | {.reg = xreg, .max = xmax, .invert = xinvert}) | 35 | {.reg = xreg, .max = xmax, .invert = xinvert}) |
diff --git a/sound/core/control.c b/sound/core/control.c index 6d71f9a7ccbb..b0bf42691047 100644 --- a/sound/core/control.c +++ b/sound/core/control.c | |||
@@ -225,8 +225,13 @@ struct snd_kcontrol *snd_ctl_new1(const struct snd_kcontrol_new *ncontrol, | |||
225 | kctl.id.iface = ncontrol->iface; | 225 | kctl.id.iface = ncontrol->iface; |
226 | kctl.id.device = ncontrol->device; | 226 | kctl.id.device = ncontrol->device; |
227 | kctl.id.subdevice = ncontrol->subdevice; | 227 | kctl.id.subdevice = ncontrol->subdevice; |
228 | if (ncontrol->name) | 228 | if (ncontrol->name) { |
229 | strlcpy(kctl.id.name, ncontrol->name, sizeof(kctl.id.name)); | 229 | strlcpy(kctl.id.name, ncontrol->name, sizeof(kctl.id.name)); |
230 | if (strcmp(ncontrol->name, kctl.id.name) != 0) | ||
231 | snd_printk(KERN_WARNING | ||
232 | "Control name '%s' truncated to '%s'\n", | ||
233 | ncontrol->name, kctl.id.name); | ||
234 | } | ||
230 | kctl.id.index = ncontrol->index; | 235 | kctl.id.index = ncontrol->index; |
231 | kctl.count = ncontrol->count ? ncontrol->count : 1; | 236 | kctl.count = ncontrol->count ? ncontrol->count : 1; |
232 | access = ncontrol->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE : | 237 | access = ncontrol->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE : |
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index 6704acbca8c0..bd510eceff1f 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c | |||
@@ -1927,9 +1927,9 @@ static int snd_ac97_dev_register(struct snd_device *device) | |||
1927 | ac97->dev.bus = &ac97_bus_type; | 1927 | ac97->dev.bus = &ac97_bus_type; |
1928 | ac97->dev.parent = ac97->bus->card->dev; | 1928 | ac97->dev.parent = ac97->bus->card->dev; |
1929 | ac97->dev.release = ac97_device_release; | 1929 | ac97->dev.release = ac97_device_release; |
1930 | snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "%d-%d:%s", | 1930 | dev_set_name(&ac97->dev, "%d-%d:%s", |
1931 | ac97->bus->card->number, ac97->num, | 1931 | ac97->bus->card->number, ac97->num, |
1932 | snd_ac97_get_short_name(ac97)); | 1932 | snd_ac97_get_short_name(ac97)); |
1933 | if ((err = device_register(&ac97->dev)) < 0) { | 1933 | if ((err = device_register(&ac97->dev)) < 0) { |
1934 | snd_printk(KERN_ERR "Can't register ac97 bus\n"); | 1934 | snd_printk(KERN_ERR "Can't register ac97 bus\n"); |
1935 | ac97->dev.bus = NULL; | 1935 | ac97->dev.bus = NULL; |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 6447754ae56e..ba1ab737b55f 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -64,6 +64,7 @@ static struct hda_vendor_id hda_vendor_ids[] = { | |||
64 | { 0x14f1, "Conexant" }, | 64 | { 0x14f1, "Conexant" }, |
65 | { 0x17e8, "Chrontel" }, | 65 | { 0x17e8, "Chrontel" }, |
66 | { 0x1854, "LG" }, | 66 | { 0x1854, "LG" }, |
67 | { 0x1aec, "Wolfson Microelectronics" }, | ||
67 | { 0x434d, "C-Media" }, | 68 | { 0x434d, "C-Media" }, |
68 | { 0x8384, "SigmaTel" }, | 69 | { 0x8384, "SigmaTel" }, |
69 | {} /* terminator */ | 70 | {} /* terminator */ |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index f080f8ce0ecb..35722ec920cb 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <linux/slab.h> | 45 | #include <linux/slab.h> |
46 | #include <linux/pci.h> | 46 | #include <linux/pci.h> |
47 | #include <linux/mutex.h> | 47 | #include <linux/mutex.h> |
48 | #include <linux/reboot.h> | ||
48 | #include <sound/core.h> | 49 | #include <sound/core.h> |
49 | #include <sound/initval.h> | 50 | #include <sound/initval.h> |
50 | #include "hda_codec.h" | 51 | #include "hda_codec.h" |
@@ -397,6 +398,9 @@ struct azx { | |||
397 | 398 | ||
398 | /* for pending irqs */ | 399 | /* for pending irqs */ |
399 | struct work_struct irq_pending_work; | 400 | struct work_struct irq_pending_work; |
401 | |||
402 | /* reboot notifier (for mysterious hangup problem at power-down) */ | ||
403 | struct notifier_block reboot_notifier; | ||
400 | }; | 404 | }; |
401 | 405 | ||
402 | /* driver types */ | 406 | /* driver types */ |
@@ -1979,12 +1983,36 @@ static int azx_resume(struct pci_dev *pci) | |||
1979 | 1983 | ||
1980 | 1984 | ||
1981 | /* | 1985 | /* |
1986 | * reboot notifier for hang-up problem at power-down | ||
1987 | */ | ||
1988 | static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf) | ||
1989 | { | ||
1990 | struct azx *chip = container_of(nb, struct azx, reboot_notifier); | ||
1991 | azx_stop_chip(chip); | ||
1992 | return NOTIFY_OK; | ||
1993 | } | ||
1994 | |||
1995 | static void azx_notifier_register(struct azx *chip) | ||
1996 | { | ||
1997 | chip->reboot_notifier.notifier_call = azx_halt; | ||
1998 | register_reboot_notifier(&chip->reboot_notifier); | ||
1999 | } | ||
2000 | |||
2001 | static void azx_notifier_unregister(struct azx *chip) | ||
2002 | { | ||
2003 | if (chip->reboot_notifier.notifier_call) | ||
2004 | unregister_reboot_notifier(&chip->reboot_notifier); | ||
2005 | } | ||
2006 | |||
2007 | /* | ||
1982 | * destructor | 2008 | * destructor |
1983 | */ | 2009 | */ |
1984 | static int azx_free(struct azx *chip) | 2010 | static int azx_free(struct azx *chip) |
1985 | { | 2011 | { |
1986 | int i; | 2012 | int i; |
1987 | 2013 | ||
2014 | azx_notifier_unregister(chip); | ||
2015 | |||
1988 | if (chip->initialized) { | 2016 | if (chip->initialized) { |
1989 | azx_clear_irq_pending(chip); | 2017 | azx_clear_irq_pending(chip); |
1990 | for (i = 0; i < chip->num_streams; i++) | 2018 | for (i = 0; i < chip->num_streams; i++) |
@@ -2348,6 +2376,7 @@ static int __devinit azx_probe(struct pci_dev *pci, | |||
2348 | pci_set_drvdata(pci, card); | 2376 | pci_set_drvdata(pci, card); |
2349 | chip->running = 1; | 2377 | chip->running = 1; |
2350 | power_down_all_codecs(chip); | 2378 | power_down_all_codecs(chip); |
2379 | azx_notifier_register(chip); | ||
2351 | 2380 | ||
2352 | dev++; | 2381 | dev++; |
2353 | return err; | 2382 | return err; |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 2b00c4afdf97..d3fd432cb3ea 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -3860,6 +3860,7 @@ static const char *ad1884a_models[AD1884A_MODELS] = { | |||
3860 | 3860 | ||
3861 | static struct snd_pci_quirk ad1884a_cfg_tbl[] = { | 3861 | static struct snd_pci_quirk ad1884a_cfg_tbl[] = { |
3862 | SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE), | 3862 | SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE), |
3863 | SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE), | ||
3863 | SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD), | 3864 | SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD), |
3864 | {} | 3865 | {} |
3865 | }; | 3866 | }; |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 788fdc6f3264..df9b0bc7f878 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -566,10 +566,8 @@ static int stac92xx_smux_enum_put(struct snd_kcontrol *kcontrol, | |||
566 | nid = codec->slave_dig_outs[smux_idx - 1]; | 566 | nid = codec->slave_dig_outs[smux_idx - 1]; |
567 | if (spec->cur_smux[smux_idx] == smux->num_items - 1) | 567 | if (spec->cur_smux[smux_idx] == smux->num_items - 1) |
568 | val = AMP_OUT_MUTE; | 568 | val = AMP_OUT_MUTE; |
569 | if (smux_idx == 0) | ||
570 | nid = spec->multiout.dig_out_nid; | ||
571 | else | 569 | else |
572 | nid = codec->slave_dig_outs[smux_idx - 1]; | 570 | val = AMP_OUT_UNMUTE; |
573 | /* un/mute SPDIF out */ | 571 | /* un/mute SPDIF out */ |
574 | snd_hda_codec_write_cache(codec, nid, 0, | 572 | snd_hda_codec_write_cache(codec, nid, 0, |
575 | AC_VERB_SET_AMP_GAIN_MUTE, val); | 573 | AC_VERB_SET_AMP_GAIN_MUTE, val); |
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c index 5b442383fcda..58d7cda03de5 100644 --- a/sound/pci/ice1712/ice1712.c +++ b/sound/pci/ice1712/ice1712.c | |||
@@ -2688,12 +2688,13 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci, | |||
2688 | return err; | 2688 | return err; |
2689 | } | 2689 | } |
2690 | 2690 | ||
2691 | if (ice_has_con_ac97(ice)) | 2691 | if (ice_has_con_ac97(ice)) { |
2692 | err = snd_ice1712_pcm(ice, pcm_dev++, NULL); | 2692 | err = snd_ice1712_pcm(ice, pcm_dev++, NULL); |
2693 | if (err < 0) { | 2693 | if (err < 0) { |
2694 | snd_card_free(card); | 2694 | snd_card_free(card); |
2695 | return err; | 2695 | return err; |
2696 | } | 2696 | } |
2697 | } | ||
2697 | 2698 | ||
2698 | err = snd_ice1712_ac97_mixer(ice); | 2699 | err = snd_ice1712_ac97_mixer(ice); |
2699 | if (err < 0) { | 2700 | if (err < 0) { |
@@ -2715,12 +2716,13 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci, | |||
2715 | } | 2716 | } |
2716 | } | 2717 | } |
2717 | 2718 | ||
2718 | if (ice_has_con_ac97(ice)) | 2719 | if (ice_has_con_ac97(ice)) { |
2719 | err = snd_ice1712_pcm_ds(ice, pcm_dev++, NULL); | 2720 | err = snd_ice1712_pcm_ds(ice, pcm_dev++, NULL); |
2720 | if (err < 0) { | 2721 | if (err < 0) { |
2721 | snd_card_free(card); | 2722 | snd_card_free(card); |
2722 | return err; | 2723 | return err; |
2723 | } | 2724 | } |
2725 | } | ||
2724 | 2726 | ||
2725 | if (!c->no_mpu401) { | 2727 | if (!c->no_mpu401) { |
2726 | err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712, | 2728 | err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712, |
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index c88d1eace1c4..19d3391e229f 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c | |||
@@ -2702,6 +2702,7 @@ static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = { | |||
2702 | SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000), | 2702 | SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000), |
2703 | SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100), | 2703 | SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100), |
2704 | SND_PCI_QUIRK(0x1028, 0x0177, "AD1980", 48000), | 2704 | SND_PCI_QUIRK(0x1028, 0x0177, "AD1980", 48000), |
2705 | SND_PCI_QUIRK(0x1028, 0x01ad, "AD1981B", 48000), | ||
2705 | SND_PCI_QUIRK(0x1043, 0x80f3, "AD1985", 48000), | 2706 | SND_PCI_QUIRK(0x1043, 0x80f3, "AD1985", 48000), |
2706 | { } /* terminator */ | 2707 | { } /* terminator */ |
2707 | }; | 2708 | }; |
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c index aba402b3c999..945b32ed9884 100644 --- a/sound/soc/codecs/wm9713.c +++ b/sound/soc/codecs/wm9713.c | |||
@@ -140,7 +140,7 @@ SOC_SINGLE("Capture ADC Boost (+20dB) Switch", AC97_VIDEO, 6, 1, 0), | |||
140 | 140 | ||
141 | SOC_SINGLE("ALC Target Volume", AC97_CODEC_CLASS_REV, 12, 15, 0), | 141 | SOC_SINGLE("ALC Target Volume", AC97_CODEC_CLASS_REV, 12, 15, 0), |
142 | SOC_SINGLE("ALC Hold Time", AC97_CODEC_CLASS_REV, 8, 15, 0), | 142 | SOC_SINGLE("ALC Hold Time", AC97_CODEC_CLASS_REV, 8, 15, 0), |
143 | SOC_SINGLE("ALC Decay Time ", AC97_CODEC_CLASS_REV, 4, 15, 0), | 143 | SOC_SINGLE("ALC Decay Time", AC97_CODEC_CLASS_REV, 4, 15, 0), |
144 | SOC_SINGLE("ALC Attack Time", AC97_CODEC_CLASS_REV, 0, 15, 0), | 144 | SOC_SINGLE("ALC Attack Time", AC97_CODEC_CLASS_REV, 0, 15, 0), |
145 | SOC_ENUM("ALC Function", wm9713_enum[6]), | 145 | SOC_ENUM("ALC Function", wm9713_enum[6]), |
146 | SOC_SINGLE("ALC Max Volume", AC97_PCI_SVID, 11, 7, 0), | 146 | SOC_SINGLE("ALC Max Volume", AC97_PCI_SVID, 11, 7, 0), |
diff --git a/sound/soc/fsl/mpc5200_psc_i2s.c b/sound/soc/fsl/mpc5200_psc_i2s.c index 86923299bc10..94a02eaa4825 100644 --- a/sound/soc/fsl/mpc5200_psc_i2s.c +++ b/sound/soc/fsl/mpc5200_psc_i2s.c | |||
@@ -277,7 +277,7 @@ static int psc_i2s_trigger(struct snd_pcm_substream *substream, int cmd) | |||
277 | struct mpc52xx_psc __iomem *regs = psc_i2s->psc_regs; | 277 | struct mpc52xx_psc __iomem *regs = psc_i2s->psc_regs; |
278 | u16 imr; | 278 | u16 imr; |
279 | u8 psc_cmd; | 279 | u8 psc_cmd; |
280 | long flags; | 280 | unsigned long flags; |
281 | 281 | ||
282 | if (substream->pstr->stream == SNDRV_PCM_STREAM_CAPTURE) | 282 | if (substream->pstr->stream == SNDRV_PCM_STREAM_CAPTURE) |
283 | s = &psc_i2s->capture; | 283 | s = &psc_i2s->capture; |
@@ -699,9 +699,11 @@ static ssize_t psc_i2s_stat_store(struct device *dev, | |||
699 | return count; | 699 | return count; |
700 | } | 700 | } |
701 | 701 | ||
702 | DEVICE_ATTR(status, 0644, psc_i2s_status_show, NULL); | 702 | static DEVICE_ATTR(status, 0644, psc_i2s_status_show, NULL); |
703 | DEVICE_ATTR(playback_underrun, 0644, psc_i2s_stat_show, psc_i2s_stat_store); | 703 | static DEVICE_ATTR(playback_underrun, 0644, psc_i2s_stat_show, |
704 | DEVICE_ATTR(capture_overrun, 0644, psc_i2s_stat_show, psc_i2s_stat_store); | 704 | psc_i2s_stat_store); |
705 | static DEVICE_ATTR(capture_overrun, 0644, psc_i2s_stat_show, | ||
706 | psc_i2s_stat_store); | ||
705 | 707 | ||
706 | /* --------------------------------------------------------------------- | 708 | /* --------------------------------------------------------------------- |
707 | * OF platform bus binding code: | 709 | * OF platform bus binding code: |
@@ -819,8 +821,8 @@ static int __devinit psc_i2s_of_probe(struct of_device *op, | |||
819 | 821 | ||
820 | /* Register the SYSFS files */ | 822 | /* Register the SYSFS files */ |
821 | rc = device_create_file(psc_i2s->dev, &dev_attr_status); | 823 | rc = device_create_file(psc_i2s->dev, &dev_attr_status); |
822 | rc = device_create_file(psc_i2s->dev, &dev_attr_capture_overrun); | 824 | rc |= device_create_file(psc_i2s->dev, &dev_attr_capture_overrun); |
823 | rc = device_create_file(psc_i2s->dev, &dev_attr_playback_underrun); | 825 | rc |= device_create_file(psc_i2s->dev, &dev_attr_playback_underrun); |
824 | if (rc) | 826 | if (rc) |
825 | dev_info(psc_i2s->dev, "error creating sysfs files\n"); | 827 | dev_info(psc_i2s->dev, "error creating sysfs files\n"); |
826 | 828 | ||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 462e635dfc74..a3adbf06b1e5 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -1462,7 +1462,7 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, | |||
1462 | struct soc_mixer_control *mc = | 1462 | struct soc_mixer_control *mc = |
1463 | (struct soc_mixer_control *)kcontrol->private_value; | 1463 | (struct soc_mixer_control *)kcontrol->private_value; |
1464 | int max = mc->max; | 1464 | int max = mc->max; |
1465 | unsigned int shift = mc->min; | 1465 | unsigned int shift = mc->shift; |
1466 | unsigned int rshift = mc->rshift; | 1466 | unsigned int rshift = mc->rshift; |
1467 | 1467 | ||
1468 | if (max == 1) | 1468 | if (max == 1) |
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index 69689e79bf79..92115755d98e 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h | |||
@@ -1480,6 +1480,36 @@ YAMAHA_DEVICE(0x7010, "UB99"), | |||
1480 | } | 1480 | } |
1481 | } | 1481 | } |
1482 | }, | 1482 | }, |
1483 | { | ||
1484 | /* Advanced modes of the Edirol UA-25EX. | ||
1485 | * For the standard mode, UA-25EX has ID 0582:00e7, which | ||
1486 | * offers only 16-bit PCM at 44.1 kHz and no MIDI. | ||
1487 | */ | ||
1488 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6), | ||
1489 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1490 | .vendor_name = "EDIROL", | ||
1491 | .product_name = "UA-25EX", | ||
1492 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1493 | .type = QUIRK_COMPOSITE, | ||
1494 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1495 | { | ||
1496 | .ifnum = 0, | ||
1497 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1498 | }, | ||
1499 | { | ||
1500 | .ifnum = 1, | ||
1501 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1502 | }, | ||
1503 | { | ||
1504 | .ifnum = 2, | ||
1505 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1506 | }, | ||
1507 | { | ||
1508 | .ifnum = -1 | ||
1509 | } | ||
1510 | } | ||
1511 | } | ||
1512 | }, | ||
1483 | 1513 | ||
1484 | /* Guillemot devices */ | 1514 | /* Guillemot devices */ |
1485 | { | 1515 | { |