Commit eb4458e9 authored by Jaroslav Kysela's avatar Jaroslav Kysela

ALSA update

  - ES18xx - fixed detection and initialization of opl3 and mpu401
  - ENS1370 - make inclusion of *_codec.h selective for each chipset
  - usb audio
    - unified get_min_max() function to retrieve the min and max values
    - added the debug condition to ignore the error at get/put callbacks
    - quirks - use USB_DEVICE without class interface
parent 68089abc
/* include/version.h. Generated automatically by configure. */ /* include/version.h. Generated automatically by configure. */
#define CONFIG_SND_VERSION "0.9.0rc3" #define CONFIG_SND_VERSION "0.9.0rc3"
#define CONFIG_SND_DATE " (Sun Oct 13 15:15:37 2002 UTC)" #define CONFIG_SND_DATE " (Mon Oct 14 16:41:26 2002 UTC)"
...@@ -1311,12 +1311,12 @@ static int __init snd_es18xx_initialize(es18xx_t *chip) ...@@ -1311,12 +1311,12 @@ static int __init snd_es18xx_initialize(es18xx_t *chip)
if (chip->caps & ES18XX_CONTROL) { if (chip->caps & ES18XX_CONTROL) {
/* Hardware volume IRQ */ /* Hardware volume IRQ */
snd_es18xx_config_write(chip, 0x27, chip->irq); snd_es18xx_config_write(chip, 0x27, chip->irq);
if (chip->fm_port > SNDRV_AUTO_PORT) { if (chip->fm_port > 0 && chip->fm_port != SNDRV_AUTO_PORT) {
/* FM I/O */ /* FM I/O */
snd_es18xx_config_write(chip, 0x62, chip->fm_port >> 8); snd_es18xx_config_write(chip, 0x62, chip->fm_port >> 8);
snd_es18xx_config_write(chip, 0x63, chip->fm_port & 0xff); snd_es18xx_config_write(chip, 0x63, chip->fm_port & 0xff);
} }
if (chip->mpu_port > SNDRV_AUTO_PORT) { if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
/* MPU-401 I/O */ /* MPU-401 I/O */
snd_es18xx_config_write(chip, 0x64, chip->mpu_port >> 8); snd_es18xx_config_write(chip, 0x64, chip->mpu_port >> 8);
snd_es18xx_config_write(chip, 0x65, chip->mpu_port & 0xff); snd_es18xx_config_write(chip, 0x65, chip->mpu_port & 0xff);
...@@ -1404,7 +1404,7 @@ static int __init snd_es18xx_initialize(es18xx_t *chip) ...@@ -1404,7 +1404,7 @@ static int __init snd_es18xx_initialize(es18xx_t *chip)
snd_es18xx_mixer_write(chip, 0x7A, 0x68); snd_es18xx_mixer_write(chip, 0x7A, 0x68);
/* Enable and set hardware volume interrupt */ /* Enable and set hardware volume interrupt */
snd_es18xx_mixer_write(chip, 0x64, 0x06); snd_es18xx_mixer_write(chip, 0x64, 0x06);
if (chip->mpu_port > SNDRV_AUTO_PORT) { if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
/* MPU401 share irq with audio /* MPU401 share irq with audio
Joystick enabled Joystick enabled
FM enabled */ FM enabled */
...@@ -2040,7 +2040,7 @@ static int __init snd_audiodrive_isapnp(int dev, struct snd_audiodrive *acard) ...@@ -2040,7 +2040,7 @@ static int __init snd_audiodrive_isapnp(int dev, struct snd_audiodrive *acard)
/* skip csn and logdev initialization - already done in isapnp_configure */ /* skip csn and logdev initialization - already done in isapnp_configure */
isapnp_cfg_begin(pdev->bus->number, pdev->devfn); isapnp_cfg_begin(pdev->bus->number, pdev->devfn);
isapnp_write_byte(0x27, pdev->irq_resource[0].start); /* Hardware Volume IRQ Number */ isapnp_write_byte(0x27, pdev->irq_resource[0].start); /* Hardware Volume IRQ Number */
if (snd_mpu_port[dev] > SNDRV_AUTO_PORT) if (snd_mpu_port[dev] != SNDRV_AUTO_PORT)
isapnp_write_byte(0x28, pdev->irq); /* MPU-401 IRQ Number */ isapnp_write_byte(0x28, pdev->irq); /* MPU-401 IRQ Number */
isapnp_write_byte(0x72, pdev->irq_resource[0].start); /* second IRQ */ isapnp_write_byte(0x72, pdev->irq_resource[0].start); /* second IRQ */
isapnp_cfg_end(); isapnp_cfg_end();
...@@ -2147,16 +2147,18 @@ static int __init snd_audiodrive_probe(int dev) ...@@ -2147,16 +2147,18 @@ static int __init snd_audiodrive_probe(int dev)
return err; return err;
} }
if (snd_fm_port[dev] > 0 && snd_fm_port[dev] != SNDRV_AUTO_PORT) {
if (snd_opl3_create(card, chip->fm_port, chip->fm_port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) { if (snd_opl3_create(card, chip->fm_port, chip->fm_port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) {
printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->port); printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->fm_port);
} else { } else {
if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
snd_card_free(card); snd_card_free(card);
return err; return err;
} }
} }
}
if (snd_mpu_port[dev] != SNDRV_AUTO_PORT) { if (snd_mpu_port[dev] > 0 && snd_mpu_port[dev] != SNDRV_AUTO_PORT) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX, if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
chip->mpu_port, 0, chip->mpu_port, 0,
irq, 0, irq, 0,
......
...@@ -30,8 +30,11 @@ ...@@ -30,8 +30,11 @@
#include <sound/control.h> #include <sound/control.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include <sound/rawmidi.h> #include <sound/rawmidi.h>
#ifdef CHIP1371
#include <sound/ac97_codec.h> #include <sound/ac97_codec.h>
#else
#include <sound/ak4531_codec.h> #include <sound/ak4531_codec.h>
#endif
#define SNDRV_GET_ID #define SNDRV_GET_ID
#include <sound/initval.h> #include <sound/initval.h>
...@@ -352,13 +355,16 @@ struct _snd_ensoniq { ...@@ -352,13 +355,16 @@ struct _snd_ensoniq {
unsigned int rev; /* chip revision */ unsigned int rev; /* chip revision */
union { union {
#ifdef CHIP1371
struct { struct {
ac97_t *ac97; ac97_t *ac97;
} es1371; } es1371;
#else
struct { struct {
int pclkdiv_lock; int pclkdiv_lock;
ak4531_t *ak4531; ak4531_t *ak4531;
} es1370; } es1370;
#endif
} u; } u;
struct pci_dev *pci; struct pci_dev *pci;
......
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
/* /*
*/ */
/* ignore error from controls - for debugging */
/* #define IGNORE_CTL_ERROR */
typedef struct usb_mixer_build mixer_build_t; typedef struct usb_mixer_build mixer_build_t;
typedef struct usb_audio_term usb_audio_term_t; typedef struct usb_audio_term usb_audio_term_t;
typedef struct usb_mixer_elem_info usb_mixer_elem_info_t; typedef struct usb_mixer_elem_info usb_mixer_elem_info_t;
...@@ -279,8 +282,10 @@ static int get_ctl_value(usb_mixer_elem_info_t *cval, int request, int validx, i ...@@ -279,8 +282,10 @@ static int get_ctl_value(usb_mixer_elem_info_t *cval, int request, int validx, i
request, request,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
validx, cval->ctrlif | (cval->id << 8), validx, cval->ctrlif | (cval->id << 8),
buf, val_len, HZ) < 0) buf, val_len, HZ) < 0) {
snd_printdd(KERN_ERR "cannot get ctl value: req = 0x%x, idx = 0x%x, val = 0x%x, type = %d\n", request, validx, cval->ctrlif | (cval->id << 8), cval->val_type);
return -EINVAL; return -EINVAL;
}
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len));
return 0; return 0;
} }
...@@ -549,23 +554,19 @@ static void usb_mixer_elem_free(snd_kcontrol_t *kctl) ...@@ -549,23 +554,19 @@ static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
* interface to ALSA control for feature/mixer units * interface to ALSA control for feature/mixer units
*/ */
/* get a feature/mixer unit info */ /*
static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) * retrieve the minimum and maximum values for the specified control
*/
static int get_min_max(usb_mixer_elem_info_t *cval)
{ {
usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL); /* for failsafe */
cval->min = 0;
cval->max = 1;
if (cval->val_type == USB_MIXER_BOOLEAN ||
cval->val_type == USB_MIXER_INV_BOOLEAN)
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
else
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
uinfo->count = cval->channels;
if (cval->val_type == USB_MIXER_BOOLEAN || if (cval->val_type == USB_MIXER_BOOLEAN ||
cval->val_type == USB_MIXER_INV_BOOLEAN) { cval->val_type == USB_MIXER_INV_BOOLEAN) {
uinfo->value.integer.min = 0; cval->initialized = 1;
uinfo->value.integer.max = 1;
} else { } else {
if (! cval->initialized) {
int minchn = 0; int minchn = 0;
if (cval->cmask) { if (cval->cmask) {
int i; int i;
...@@ -582,6 +583,28 @@ static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t ...@@ -582,6 +583,28 @@ static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t
} }
cval->initialized = 1; cval->initialized = 1;
} }
return 0;
}
/* get a feature/mixer unit info */
static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
{
usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
if (cval->val_type == USB_MIXER_BOOLEAN ||
cval->val_type == USB_MIXER_INV_BOOLEAN)
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
else
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
uinfo->count = cval->channels;
if (cval->val_type == USB_MIXER_BOOLEAN ||
cval->val_type == USB_MIXER_INV_BOOLEAN) {
uinfo->value.integer.min = 0;
uinfo->value.integer.max = 1;
} else {
if (! cval->initialized)
get_min_max(cval);
uinfo->value.integer.min = 0; uinfo->value.integer.min = 0;
uinfo->value.integer.max = cval->max - cval->min; uinfo->value.integer.max = cval->max - cval->min;
} }
...@@ -599,6 +622,12 @@ static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -599,6 +622,12 @@ static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
for (c = 0; c < MAX_CHANNELS; c++) { for (c = 0; c < MAX_CHANNELS; c++) {
if (cval->cmask & (1 << c)) { if (cval->cmask & (1 << c)) {
err = get_cur_mix_value(cval, c + 1, &val); err = get_cur_mix_value(cval, c + 1, &val);
#ifdef IGNORE_CTL_ERROR
if (err < 0) {
ucontrol->value.integer.value[0] = cval->min;
return 0;
}
#endif
if (err < 0) { if (err < 0) {
snd_printd(KERN_ERR "cannot get current value for control %d ch %d: err = %d\n", cval->control, c + 1, err); snd_printd(KERN_ERR "cannot get current value for control %d ch %d: err = %d\n", cval->control, c + 1, err);
return err; return err;
...@@ -611,6 +640,12 @@ static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -611,6 +640,12 @@ static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
} else { } else {
/* master channel */ /* master channel */
err = get_cur_mix_value(cval, 0, &val); err = get_cur_mix_value(cval, 0, &val);
#ifdef IGNORE_CTL_ERROR
if (err < 0) {
ucontrol->value.integer.value[0] = cval->min;
return 0;
}
#endif
if (err < 0) { if (err < 0) {
snd_printd(KERN_ERR "cannot get current value for control %d master ch: err = %d\n", cval->control, err); snd_printd(KERN_ERR "cannot get current value for control %d master ch: err = %d\n", cval->control, err);
return err; return err;
...@@ -633,6 +668,10 @@ static int mixer_ctl_feature_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -633,6 +668,10 @@ static int mixer_ctl_feature_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
for (c = 0; c < MAX_CHANNELS; c++) { for (c = 0; c < MAX_CHANNELS; c++) {
if (cval->cmask & (1 << c)) { if (cval->cmask & (1 << c)) {
err = get_cur_mix_value(cval, c + 1, &oval); err = get_cur_mix_value(cval, c + 1, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0) if (err < 0)
return err; return err;
val = ucontrol->value.integer.value[cnt]; val = ucontrol->value.integer.value[cnt];
...@@ -647,6 +686,10 @@ static int mixer_ctl_feature_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -647,6 +686,10 @@ static int mixer_ctl_feature_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
} else { } else {
/* master channel */ /* master channel */
err = get_cur_mix_value(cval, 0, &oval); err = get_cur_mix_value(cval, 0, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0) if (err < 0)
return err; return err;
val = ucontrol->value.integer.value[0]; val = ucontrol->value.integer.value[0];
...@@ -680,7 +723,6 @@ static void build_feature_ctl(mixer_build_t *state, unsigned char *desc, ...@@ -680,7 +723,6 @@ static void build_feature_ctl(mixer_build_t *state, unsigned char *desc,
int nameid = desc[desc[0] - 1]; int nameid = desc[desc[0] - 1];
snd_kcontrol_t *kctl; snd_kcontrol_t *kctl;
usb_mixer_elem_info_t *cval; usb_mixer_elem_info_t *cval;
int minchn = 0;
control++; /* change from zero-based to 1-based value */ control++; /* change from zero-based to 1-based value */
...@@ -705,26 +747,13 @@ static void build_feature_ctl(mixer_build_t *state, unsigned char *desc, ...@@ -705,26 +747,13 @@ static void build_feature_ctl(mixer_build_t *state, unsigned char *desc,
else { else {
int i, c = 0; int i, c = 0;
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
if (ctl_mask & (1 << i)) { if (ctl_mask & (1 << i))
if (! minchn)
minchn = i + 1;
c++; c++;
}
cval->channels = c; cval->channels = c;
} }
/* get min/max values */ /* get min/max values */
if (cval->val_type == USB_MIXER_BOOLEAN || get_min_max(cval);
cval->val_type == USB_MIXER_INV_BOOLEAN) {
cval->max = 1;
cval->initialized = 1;
} else {
if (get_ctl_value(cval, GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 ||
get_ctl_value(cval, GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0)
snd_printd(KERN_ERR "%d:%d: cannot get min/max values for control %d (id %d)\n", cval->id, cval->ctrlif, control, unitid);
else
cval->initialized = 1;
}
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
if (! kctl) { if (! kctl) {
...@@ -860,7 +889,6 @@ static void build_mixer_unit_ctl(mixer_build_t *state, unsigned char *desc, ...@@ -860,7 +889,6 @@ static void build_mixer_unit_ctl(mixer_build_t *state, unsigned char *desc,
int i, len; int i, len;
snd_kcontrol_t *kctl; snd_kcontrol_t *kctl;
usb_audio_term_t iterm; usb_audio_term_t iterm;
int minchn = 0;
cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL); cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
if (! cval) if (! cval)
...@@ -878,17 +906,11 @@ static void build_mixer_unit_ctl(mixer_build_t *state, unsigned char *desc, ...@@ -878,17 +906,11 @@ static void build_mixer_unit_ctl(mixer_build_t *state, unsigned char *desc,
if (check_matrix_bitmap(desc + 9 + num_ins, in_ch, i, num_outs)) { if (check_matrix_bitmap(desc + 9 + num_ins, in_ch, i, num_outs)) {
cval->cmask |= (1 << i); cval->cmask |= (1 << i);
cval->channels++; cval->channels++;
if (! minchn)
minchn = i + 1;
} }
} }
/* get min/max values */ /* get min/max values */
if (get_ctl_value(cval, GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 || get_min_max(cval);
get_ctl_value(cval, GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0)
snd_printd(KERN_ERR "cannot get min/max values for mixer (id %d)\n", unitid);
else
cval->initialized = 1;
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
if (! kctl) { if (! kctl) {
...@@ -944,6 +966,12 @@ static int mixer_ctl_procunit_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -944,6 +966,12 @@ static int mixer_ctl_procunit_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int err, val; int err, val;
err = get_cur_ctl_value(cval, cval->control, &val); err = get_cur_ctl_value(cval, cval->control, &val);
#ifdef IGNORE_CTL_ERROR
if (err < 0) {
ucontrol->value.integer.value[0] = cval->min;
return 0;
}
#endif
if (err < 0) if (err < 0)
return err; return err;
val = get_relative_value(cval, val); val = get_relative_value(cval, val);
...@@ -958,6 +986,10 @@ static int mixer_ctl_procunit_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -958,6 +986,10 @@ static int mixer_ctl_procunit_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int val, oval, err; int val, oval, err;
err = get_cur_ctl_value(cval, cval->control, &oval); err = get_cur_ctl_value(cval, cval->control, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0) if (err < 0)
return err; return err;
val = ucontrol->value.integer.value[0]; val = ucontrol->value.integer.value[0];
...@@ -1099,13 +1131,7 @@ static int build_audio_procunit(mixer_build_t *state, int unitid, unsigned char ...@@ -1099,13 +1131,7 @@ static int build_audio_procunit(mixer_build_t *state, int unitid, unsigned char
cval->channels = 1; cval->channels = 1;
/* get min/max values */ /* get min/max values */
if (get_ctl_value(cval, GET_MAX, cval->control, &cval->max) < 0 || get_min_max(cval);
get_ctl_value(cval, GET_MIN, cval->control, &cval->min) < 0)
snd_printd(KERN_ERR "cannot get min/max values for proc/ext control=%d, id=%d\n", cval->control, unitid);
else if (cval->max <= cval->min)
snd_printd(KERN_ERR "invalid min/max values (%d/%d) for proc/ext unit control=%d, id=%d\n", cval->min, cval->max, cval->control, unitid);
else
cval->initialized = 1;
kctl = snd_ctl_new1(&mixer_procunit_ctl, cval); kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
if (! kctl) { if (! kctl) {
...@@ -1183,6 +1209,12 @@ static int mixer_ctl_selector_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -1183,6 +1209,12 @@ static int mixer_ctl_selector_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int val, err; int val, err;
err = get_cur_ctl_value(cval, 0, &val); err = get_cur_ctl_value(cval, 0, &val);
#ifdef IGNORE_CTL_ERROR
if (err < 0) {
ucontrol->value.enumerated.item[0] = 0;
return 0;
}
#endif
if (err < 0) if (err < 0)
return err; return err;
val = get_relative_value(cval, val); val = get_relative_value(cval, val);
...@@ -1197,6 +1229,10 @@ static int mixer_ctl_selector_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t ...@@ -1197,6 +1229,10 @@ static int mixer_ctl_selector_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int val, oval, err; int val, oval, err;
err = get_cur_ctl_value(cval, 0, &oval); err = get_cur_ctl_value(cval, 0, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0) if (err < 0)
return err; return err;
val = ucontrol->value.enumerated.item[0]; val = ucontrol->value.enumerated.item[0];
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
/* Yamaha devices */ /* Yamaha devices */
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1000), USB_DEVICE(0x0499, 0x1000),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "UX256", .product_name = "UX256",
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1001), USB_DEVICE(0x0499, 0x1001),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MU1000", .product_name = "MU1000",
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1002), USB_DEVICE(0x0499, 0x1002),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MU2000", .product_name = "MU2000",
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1003), USB_DEVICE(0x0499, 0x1003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MU500", .product_name = "MU500",
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1004), USB_DEVICE(0x0499, 0x1004),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "UW500", .product_name = "UW500",
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1005), USB_DEVICE(0x0499, 0x1005),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MOTIF6", .product_name = "MOTIF6",
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1006), USB_DEVICE(0x0499, 0x1006),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MOTIF7", .product_name = "MOTIF7",
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1007), USB_DEVICE(0x0499, 0x1007),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "MOTIF8", .product_name = "MOTIF8",
...@@ -110,7 +110,7 @@ ...@@ -110,7 +110,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1008), USB_DEVICE(0x0499, 0x1008),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "UX96", .product_name = "UX96",
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1009), USB_DEVICE(0x0499, 0x1009),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "UX16", .product_name = "UX16",
...@@ -128,7 +128,7 @@ ...@@ -128,7 +128,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100a), USB_DEVICE(0x0499, 0x100a),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "EOS BX", .product_name = "EOS BX",
...@@ -137,7 +137,7 @@ ...@@ -137,7 +137,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100e), USB_DEVICE(0x0499, 0x100e),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "S08", .product_name = "S08",
...@@ -146,7 +146,7 @@ ...@@ -146,7 +146,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100f), USB_DEVICE(0x0499, 0x100f),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "CLP-150", .product_name = "CLP-150",
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1010), USB_DEVICE(0x0499, 0x1010),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha", .vendor_name = "Yamaha",
.product_name = "CLP-170", .product_name = "CLP-170",
...@@ -177,7 +177,7 @@ ...@@ -177,7 +177,7 @@
* class-specific descriptors. * class-specific descriptors.
*/ */
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0000), USB_DEVICE(0x0582, 0x0000),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "UA-100", .product_name = "UA-100",
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0002), USB_DEVICE(0x0582, 0x0002),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UM-4", .product_name = "UM-4",
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0003), USB_DEVICE(0x0582, 0x0003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "SC-8850", .product_name = "SC-8850",
...@@ -219,7 +219,7 @@ ...@@ -219,7 +219,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0004), USB_DEVICE(0x0582, 0x0004),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "U-8", .product_name = "U-8",
...@@ -233,7 +233,7 @@ ...@@ -233,7 +233,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0005), USB_DEVICE(0x0582, 0x0005),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UM-2", .product_name = "UM-2",
...@@ -247,7 +247,7 @@ ...@@ -247,7 +247,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0007), USB_DEVICE(0x0582, 0x0007),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "SC-8820", .product_name = "SC-8820",
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0008), USB_DEVICE(0x0582, 0x0008),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "PC-300", .product_name = "PC-300",
...@@ -275,7 +275,7 @@ ...@@ -275,7 +275,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0009), USB_DEVICE(0x0582, 0x0009),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UM-1", .product_name = "UM-1",
...@@ -289,7 +289,7 @@ ...@@ -289,7 +289,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x000b), USB_DEVICE(0x0582, 0x000b),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "SK-500", .product_name = "SK-500",
...@@ -303,7 +303,7 @@ ...@@ -303,7 +303,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x000c), USB_DEVICE(0x0582, 0x000c),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "SC-D70", .product_name = "SC-D70",
...@@ -317,7 +317,7 @@ ...@@ -317,7 +317,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0012), USB_DEVICE(0x0582, 0x0012),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland", .vendor_name = "Roland",
.product_name = "XV-5050", .product_name = "XV-5050",
...@@ -331,7 +331,7 @@ ...@@ -331,7 +331,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0014), USB_DEVICE(0x0582, 0x0014),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UM-880", .product_name = "UM-880",
...@@ -345,7 +345,7 @@ ...@@ -345,7 +345,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0016), USB_DEVICE(0x0582, 0x0016),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "SD-90", .product_name = "SD-90",
...@@ -359,7 +359,7 @@ ...@@ -359,7 +359,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0023), USB_DEVICE(0x0582, 0x0023),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UM-550", .product_name = "UM-550",
...@@ -373,7 +373,7 @@ ...@@ -373,7 +373,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0027), USB_DEVICE(0x0582, 0x0027),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "SD-20", .product_name = "SD-20",
...@@ -387,7 +387,7 @@ ...@@ -387,7 +387,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0029), USB_DEVICE(0x0582, 0x0029),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "SD-80", .product_name = "SD-80",
...@@ -401,7 +401,7 @@ ...@@ -401,7 +401,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b), USB_DEVICE(0x0582, 0x002b),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL", .vendor_name = "EDIROL",
.product_name = "UA-700", .product_name = "UA-700",
...@@ -467,7 +467,7 @@ ...@@ -467,7 +467,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), USB_DEVICE(0x0763, 0x2001),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "M-Audio", .vendor_name = "M-Audio",
.product_name = "Quattro", .product_name = "Quattro",
...@@ -477,7 +477,7 @@ ...@@ -477,7 +477,7 @@
} }
}, },
{ {
USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), USB_DEVICE(0x0763, 0x2003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "M-Audio", .vendor_name = "M-Audio",
.product_name = "AudioPhile", .product_name = "AudioPhile",
......
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