forked from Minki/linux
Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
This commit is contained in:
commit
8aa19ad84c
@ -527,6 +527,8 @@ struct _snd_ac97 {
|
||||
struct device dev;
|
||||
};
|
||||
|
||||
#define to_ac97_t(d) container_of(d, struct _snd_ac97, dev)
|
||||
|
||||
/* conditions */
|
||||
static inline int ac97_is_audio(ac97_t * ac97)
|
||||
{
|
||||
|
@ -1059,7 +1059,7 @@ typedef struct {
|
||||
unsigned char spk71; /* Has 7.1 speakers */
|
||||
unsigned char sblive51; /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
|
||||
unsigned char spdif_bug; /* Has Spdif phasing bug */
|
||||
unsigned char ac97_chip; /* Has an AC97 chip */
|
||||
unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */
|
||||
unsigned char ecard; /* APS EEPROM */
|
||||
const char *driver;
|
||||
const char *name;
|
||||
|
@ -245,7 +245,7 @@ static pxa2xx_pcm_client_t pxa2xx_ac97_pcm_client = {
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int pxa2xx_ac97_do_suspend(snd_card_t *card, unsigned int state)
|
||||
static int pxa2xx_ac97_do_suspend(snd_card_t *card, pm_message_t state)
|
||||
{
|
||||
if (card->power_state != SNDRV_CTL_POWER_D3cold) {
|
||||
pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data;
|
||||
|
@ -914,6 +914,7 @@ static int __init alsa_card_opl3sa2_init(void)
|
||||
#endif
|
||||
#ifdef CONFIG_PNP
|
||||
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
||||
pnp_unregister_driver(&opl3sa2_pnp_driver);
|
||||
#endif
|
||||
return -ENODEV;
|
||||
}
|
||||
@ -927,6 +928,7 @@ static void __exit alsa_card_opl3sa2_exit(void)
|
||||
#ifdef CONFIG_PNP
|
||||
/* PnP cards first */
|
||||
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
||||
pnp_unregister_driver(&opl3sa2_pnp_driver);
|
||||
#endif
|
||||
for (idx = 0; idx < SNDRV_CARDS; idx++)
|
||||
snd_card_free(snd_opl3sa2_legacy[idx]);
|
||||
|
@ -17,25 +17,21 @@
|
||||
#include <linux/string.h>
|
||||
|
||||
/*
|
||||
* Codec families have names seperated by commas, so we search for an
|
||||
* individual codec name within the family string.
|
||||
* Let drivers decide whether they want to support given codec from their
|
||||
* probe method. Drivers have direct access to the ac97_t structure and may
|
||||
* decide based on the id field amongst other things.
|
||||
*/
|
||||
static int ac97_bus_match(struct device *dev, struct device_driver *drv)
|
||||
{
|
||||
return (strstr(dev->bus_id, drv->name) != NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ac97_bus_suspend(struct device *dev, pm_message_t state)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (dev->driver && dev->driver->suspend) {
|
||||
ret = dev->driver->suspend(dev, state, SUSPEND_DISABLE);
|
||||
if (ret == 0)
|
||||
ret = dev->driver->suspend(dev, state, SUSPEND_SAVE_STATE);
|
||||
if (ret == 0)
|
||||
ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN);
|
||||
}
|
||||
if (dev->driver && dev->driver->suspend)
|
||||
ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -43,13 +39,8 @@ static int ac97_bus_resume(struct device *dev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (dev->driver && dev->driver->resume) {
|
||||
if (dev->driver && dev->driver->resume)
|
||||
ret = dev->driver->resume(dev, RESUME_POWER_ON);
|
||||
if (ret == 0)
|
||||
ret = dev->driver->resume(dev, RESUME_RESTORE_STATE);
|
||||
if (ret == 0)
|
||||
ret = dev->driver->resume(dev, RESUME_ENABLE);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1557,7 +1557,7 @@ static int snd_ac97_modem_build(snd_card_t * card, ac97_t * ac97)
|
||||
|
||||
/* build modem switches */
|
||||
for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_modem_switches); idx++)
|
||||
if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_modem_switches[idx], ac97))) < 0)
|
||||
if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ac97_controls_modem_switches[idx], ac97))) < 0)
|
||||
return err;
|
||||
|
||||
/* build chip specific controls */
|
||||
@ -1828,7 +1828,6 @@ static int snd_ac97_dev_register(snd_device_t *device)
|
||||
|
||||
ac97->dev.bus = &ac97_bus_type;
|
||||
ac97->dev.parent = ac97->bus->card->dev;
|
||||
ac97->dev.platform_data = ac97;
|
||||
ac97->dev.release = ac97_device_release;
|
||||
snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "card%d-%d", ac97->bus->card->number, ac97->num);
|
||||
if ((err = device_register(&ac97->dev)) < 0) {
|
||||
|
@ -2752,7 +2752,11 @@ AC97_DOUBLE("Modem Speaker Volume", 0x5c, 14, 12, 3, 1)
|
||||
|
||||
static int patch_si3036_specific(ac97_t * ac97)
|
||||
{
|
||||
return patch_build_controls(ac97, snd_ac97_controls_si3036, ARRAY_SIZE(snd_ac97_controls_si3036));
|
||||
int idx, err;
|
||||
for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_si3036); idx++)
|
||||
if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_si3036[idx], ac97))) < 0)
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct snd_ac97_build_ops patch_si3036_ops = {
|
||||
|
@ -1993,8 +1993,10 @@ static int __devinit snd_ali_mixer(ali_t * codec)
|
||||
if ((err = snd_ac97_mixer(codec->ac97_bus, &ac97, &codec->ac97[i])) < 0) {
|
||||
snd_printk("ali mixer %d creating error.\n", i);
|
||||
if(i == 0)
|
||||
return err;
|
||||
}
|
||||
return err;
|
||||
codec->num_of_codecs = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (codec->spdif_support) {
|
||||
|
@ -756,9 +756,12 @@ static emu_chip_details_t emu_chip_details[] = {
|
||||
.sblive51 = 1} ,
|
||||
/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
|
||||
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
|
||||
.driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]",
|
||||
.driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
|
||||
.id = "Live",
|
||||
.emu10k1_chip = 1,
|
||||
.ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
|
||||
* share the same IDs!
|
||||
*/
|
||||
.sblive51 = 1} ,
|
||||
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
|
||||
.driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
|
||||
|
@ -810,8 +810,14 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
|
||||
ac97.private_data = emu;
|
||||
ac97.private_free = snd_emu10k1_mixer_free_ac97;
|
||||
ac97.scaps = AC97_SCAP_NO_SPDIF;
|
||||
if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0)
|
||||
return err;
|
||||
if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) {
|
||||
if (emu->card_capabilities->ac97_chip == 1)
|
||||
return err;
|
||||
snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n");
|
||||
snd_printd(KERN_INFO" Proceeding without ac97 mixers...\n");
|
||||
snd_device_free(emu->card, pbus);
|
||||
goto no_ac97; /* FIXME: get rid of ugly gotos.. */
|
||||
}
|
||||
if (emu->audigy) {
|
||||
/* set master volume to 0 dB */
|
||||
snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000);
|
||||
@ -836,6 +842,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
|
||||
for (; *c; c++)
|
||||
remove_ctl(card, *c);
|
||||
} else {
|
||||
no_ac97:
|
||||
if (emu->card_capabilities->ecard)
|
||||
strcpy(emu->card->mixername, "EMU APS");
|
||||
else if (emu->audigy)
|
||||
|
@ -881,10 +881,8 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec)
|
||||
struct hda_gspec *spec;
|
||||
int err;
|
||||
|
||||
if(!codec->afg) {
|
||||
snd_printdd("hda_generic: no generic modem yet\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
if(!codec->afg)
|
||||
return 0;
|
||||
|
||||
spec = kzalloc(sizeof(*spec), GFP_KERNEL);
|
||||
if (spec == NULL) {
|
||||
|
@ -1137,6 +1137,7 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream)
|
||||
pos = azx_sd_readl(azx_dev, SD_LPIB);
|
||||
if (chip->position_fix == POS_FIX_FIFO)
|
||||
pos += azx_dev->fifo_size;
|
||||
#if 0 /* disabled temprarily, auto-correction doesn't work well... */
|
||||
else if (chip->position_fix == POS_FIX_AUTO && azx_dev->period_updating) {
|
||||
/* check the validity of DMA position */
|
||||
unsigned int diff = 0;
|
||||
@ -1157,6 +1158,10 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream)
|
||||
}
|
||||
azx_dev->period_updating = 0;
|
||||
}
|
||||
#else
|
||||
else if (chip->position_fix == POS_FIX_AUTO)
|
||||
pos += azx_dev->fifo_size;
|
||||
#endif
|
||||
}
|
||||
if (pos >= azx_dev->bufsize)
|
||||
pos = 0;
|
||||
|
@ -1385,8 +1385,8 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE("CLFE Playback Volume", 0x0e, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE("Side Playback Volume", 0x0f, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE("CLFE Playback Switch", 0x0e, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
|
||||
PIN_CTL_TEST("Front Pin Mode", 0x14),
|
||||
PIN_CTL_TEST("Surround Pin Mode", 0x15),
|
||||
PIN_CTL_TEST("CLFE Pin Mode", 0x16),
|
||||
@ -1409,18 +1409,6 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
|
||||
HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x09, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x09, 0x0, HDA_INPUT),
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "Input Source",
|
||||
.count = 2,
|
||||
.info = alc_mux_enum_info,
|
||||
.get = alc_mux_enum_get,
|
||||
.put = alc_mux_enum_put,
|
||||
},
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "Channel Mode",
|
||||
@ -2243,7 +2231,7 @@ static snd_kcontrol_new_t alc260_base_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT),
|
||||
{
|
||||
@ -2270,7 +2258,7 @@ static snd_kcontrol_new_t alc260_hp_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Capture Volume", 0x05, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Capture Switch", 0x05, 0x0, HDA_INPUT),
|
||||
{
|
||||
@ -2501,7 +2489,7 @@ static snd_kcontrol_new_t alc882_base_mixer[] = {
|
||||
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
|
||||
ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
||||
ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
|
@ -442,7 +442,7 @@ static char* stateName[] = {
|
||||
"Setup for play",
|
||||
"Playing",
|
||||
"Monitor mode on",
|
||||
"Calibrating"
|
||||
"Calibrating",
|
||||
"Invalid"
|
||||
};
|
||||
|
||||
|
@ -2147,11 +2147,13 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
|
||||
{ .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K },
|
||||
{ .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */
|
||||
{ .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */
|
||||
{ .subvendor = 0x1019, .subdevice = 0xa101, .action = VIA_DXS_SRC },
|
||||
{ .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */
|
||||
{ .subvendor = 0x1025, .subdevice = 0x0046, .action = VIA_DXS_SRC }, /* Acer Aspire 1524 WLMi */
|
||||
{ .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/
|
||||
{ .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */
|
||||
{ .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/
|
||||
{ .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */
|
||||
{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */
|
||||
{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
|
||||
{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */
|
||||
|
@ -988,6 +988,7 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||
case 0x33:
|
||||
case 0x29:
|
||||
case 0x24:
|
||||
case 0x50:
|
||||
case 0x5c:
|
||||
chip->num_freqs = ARRAY_SIZE(tumbler_freqs);
|
||||
chip->model = PMAC_SNAPPER;
|
||||
|
@ -1444,9 +1444,9 @@ static snd_pcm_hardware_t snd_usb_playback =
|
||||
SNDRV_PCM_INFO_BATCH |
|
||||
SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
||||
.buffer_bytes_max = (256*1024),
|
||||
.buffer_bytes_max = 1024 * 1024,
|
||||
.period_bytes_min = 64,
|
||||
.period_bytes_max = (128*1024),
|
||||
.period_bytes_max = 512 * 1024,
|
||||
.periods_min = 2,
|
||||
.periods_max = 1024,
|
||||
};
|
||||
@ -1458,9 +1458,9 @@ static snd_pcm_hardware_t snd_usb_capture =
|
||||
SNDRV_PCM_INFO_BATCH |
|
||||
SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
||||
.buffer_bytes_max = (256*1024),
|
||||
.buffer_bytes_max = 1024 * 1024,
|
||||
.period_bytes_min = 64,
|
||||
.period_bytes_max = (128*1024),
|
||||
.period_bytes_max = 512 * 1024,
|
||||
.periods_min = 2,
|
||||
.periods_max = 1024,
|
||||
};
|
||||
|
@ -237,6 +237,16 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
||||
.map = audigy2nx_map,
|
||||
.selector_map = audigy2nx_selectors,
|
||||
},
|
||||
{
|
||||
/* Hercules DJ Console (Windows Edition) */
|
||||
.id = USB_ID(0x06f8, 0xb000),
|
||||
.ignore_ctl_error = 1,
|
||||
},
|
||||
{
|
||||
/* Hercules DJ Console (Macintosh Edition) */
|
||||
.id = USB_ID(0x06f8, 0xd002),
|
||||
.ignore_ctl_error = 1,
|
||||
},
|
||||
{
|
||||
.id = USB_ID(0x08bb, 0x2702),
|
||||
.map = linex_map,
|
||||
|
@ -117,6 +117,10 @@ YAMAHA_DEVICE(0x103a, NULL),
|
||||
YAMAHA_DEVICE(0x103b, NULL),
|
||||
YAMAHA_DEVICE(0x103c, NULL),
|
||||
YAMAHA_DEVICE(0x103d, NULL),
|
||||
YAMAHA_DEVICE(0x103e, NULL),
|
||||
YAMAHA_DEVICE(0x103f, NULL),
|
||||
YAMAHA_DEVICE(0x1040, NULL),
|
||||
YAMAHA_DEVICE(0x1041, NULL),
|
||||
YAMAHA_DEVICE(0x2000, "DGP-7"),
|
||||
YAMAHA_DEVICE(0x2001, "DGP-5"),
|
||||
YAMAHA_DEVICE(0x2002, NULL),
|
||||
@ -1010,6 +1014,40 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
|
||||
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||
.vendor_name = "Roland",
|
||||
/* RD-700SX, RD-300SX */
|
||||
.ifnum = 0,
|
||||
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||
.data = & (const snd_usb_midi_endpoint_info_t) {
|
||||
.out_cables = 0x0003,
|
||||
.in_cables = 0x0003
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* Guillemot devices */
|
||||
{
|
||||
/*
|
||||
* This is for the "Windows Edition" where the external MIDI ports are
|
||||
* the only MIDI ports; the control data is reported through HID
|
||||
* interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
|
||||
* compliant USB MIDI ports for external MIDI and controls.
|
||||
*/
|
||||
USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
|
||||
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||
.vendor_name = "Hercules",
|
||||
.product_name = "DJ Console (WE)",
|
||||
.ifnum = 4,
|
||||
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||
.data = & (const snd_usb_midi_endpoint_info_t) {
|
||||
.out_cables = 0x0001,
|
||||
.in_cables = 0x0001
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* Midiman/M-Audio devices */
|
||||
{
|
||||
@ -1339,10 +1377,20 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||
}
|
||||
},
|
||||
|
||||
/* TerraTec devices */
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
|
||||
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||
.vendor_name = "TerraTec",
|
||||
.product_name = "PHASE 26",
|
||||
.ifnum = 3,
|
||||
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
|
||||
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||
.vendor_name = "Terratec",
|
||||
.vendor_name = "TerraTec",
|
||||
.product_name = "PHASE 26",
|
||||
.ifnum = 3,
|
||||
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||
|
Loading…
Reference in New Issue
Block a user