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. */
#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)
if (chip->caps & ES18XX_CONTROL) {
/* Hardware volume 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 */
snd_es18xx_config_write(chip, 0x62, chip->fm_port >> 8);
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 */
snd_es18xx_config_write(chip, 0x64, chip->mpu_port >> 8);
snd_es18xx_config_write(chip, 0x65, chip->mpu_port & 0xff);
......@@ -1404,7 +1404,7 @@ static int __init snd_es18xx_initialize(es18xx_t *chip)
snd_es18xx_mixer_write(chip, 0x7A, 0x68);
/* Enable and set hardware volume interrupt */
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
Joystick enabled
FM enabled */
......@@ -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 */
isapnp_cfg_begin(pdev->bus->number, pdev->devfn);
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(0x72, pdev->irq_resource[0].start); /* second IRQ */
isapnp_cfg_end();
......@@ -2147,16 +2147,18 @@ static int __init snd_audiodrive_probe(int dev)
return err;
}
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);
} else {
if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
snd_card_free(card);
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) {
printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->fm_port);
} else {
if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
snd_card_free(card);
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,
chip->mpu_port, 0,
irq, 0,
......
......@@ -30,8 +30,11 @@
#include <sound/control.h>
#include <sound/pcm.h>
#include <sound/rawmidi.h>
#ifdef CHIP1371
#include <sound/ac97_codec.h>
#else
#include <sound/ak4531_codec.h>
#endif
#define SNDRV_GET_ID
#include <sound/initval.h>
......@@ -352,13 +355,16 @@ struct _snd_ensoniq {
unsigned int rev; /* chip revision */
union {
#ifdef CHIP1371
struct {
ac97_t *ac97;
} es1371;
#else
struct {
int pclkdiv_lock;
ak4531_t *ak4531;
} es1370;
#endif
} u;
struct pci_dev *pci;
......
......@@ -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_audio_term usb_audio_term_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
request,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
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;
}
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len));
return 0;
}
......@@ -549,6 +554,39 @@ static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
* interface to ALSA control for feature/mixer units
*/
/*
* retrieve the minimum and maximum values for the specified control
*/
static int get_min_max(usb_mixer_elem_info_t *cval)
{
/* for failsafe */
cval->min = 0;
cval->max = 1;
if (cval->val_type == USB_MIXER_BOOLEAN ||
cval->val_type == USB_MIXER_INV_BOOLEAN) {
cval->initialized = 1;
} else {
int minchn = 0;
if (cval->cmask) {
int i;
for (i = 0; i < MAX_CHANNELS; i++)
if (cval->cmask & (1 << i)) {
minchn = i + 1;
break;
}
}
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, cval->control, cval->id);
return -EINVAL;
}
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)
{
......@@ -565,23 +603,8 @@ static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t
uinfo->value.integer.min = 0;
uinfo->value.integer.max = 1;
} else {
if (! cval->initialized) {
int minchn = 0;
if (cval->cmask) {
int i;
for (i = 0; i < MAX_CHANNELS; i++)
if (cval->cmask & (1 << i)) {
minchn = i + 1;
break;
}
}
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, cval->control, cval->id);
return -EINVAL;
}
cval->initialized = 1;
}
if (! cval->initialized)
get_min_max(cval);
uinfo->value.integer.min = 0;
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
for (c = 0; c < MAX_CHANNELS; c++) {
if (cval->cmask & (1 << c)) {
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) {
snd_printd(KERN_ERR "cannot get current value for control %d ch %d: err = %d\n", cval->control, c + 1, err);
return err;
......@@ -611,6 +640,12 @@ static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
} else {
/* master channel */
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) {
snd_printd(KERN_ERR "cannot get current value for control %d master ch: err = %d\n", cval->control, err);
return err;
......@@ -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++) {
if (cval->cmask & (1 << c)) {
err = get_cur_mix_value(cval, c + 1, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0)
return err;
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
} else {
/* master channel */
err = get_cur_mix_value(cval, 0, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0)
return err;
val = ucontrol->value.integer.value[0];
......@@ -680,7 +723,6 @@ static void build_feature_ctl(mixer_build_t *state, unsigned char *desc,
int nameid = desc[desc[0] - 1];
snd_kcontrol_t *kctl;
usb_mixer_elem_info_t *cval;
int minchn = 0;
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,
else {
int i, c = 0;
for (i = 0; i < 16; i++)
if (ctl_mask & (1 << i)) {
if (! minchn)
minchn = i + 1;
if (ctl_mask & (1 << i))
c++;
}
cval->channels = c;
}
/* get min/max values */
if (cval->val_type == USB_MIXER_BOOLEAN ||
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;
}
get_min_max(cval);
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
if (! kctl) {
......@@ -860,7 +889,6 @@ static void build_mixer_unit_ctl(mixer_build_t *state, unsigned char *desc,
int i, len;
snd_kcontrol_t *kctl;
usb_audio_term_t iterm;
int minchn = 0;
cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
if (! cval)
......@@ -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)) {
cval->cmask |= (1 << i);
cval->channels++;
if (! minchn)
minchn = i + 1;
}
}
/* get min/max values */
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 "cannot get min/max values for mixer (id %d)\n", unitid);
else
cval->initialized = 1;
get_min_max(cval);
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
if (! kctl) {
......@@ -944,6 +966,12 @@ static int mixer_ctl_procunit_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int err, 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)
return err;
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
int val, oval, err;
err = get_cur_ctl_value(cval, cval->control, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0)
return err;
val = ucontrol->value.integer.value[0];
......@@ -1099,13 +1131,7 @@ static int build_audio_procunit(mixer_build_t *state, int unitid, unsigned char
cval->channels = 1;
/* get min/max values */
if (get_ctl_value(cval, GET_MAX, cval->control, &cval->max) < 0 ||
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;
get_min_max(cval);
kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
if (! kctl) {
......@@ -1183,6 +1209,12 @@ static int mixer_ctl_selector_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t
int val, err;
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)
return err;
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
int val, oval, err;
err = get_cur_ctl_value(cval, 0, &oval);
#ifdef IGNORE_CTL_ERROR
if (err < 0)
return 0;
#endif
if (err < 0)
return err;
val = ucontrol->value.enumerated.item[0];
......
......@@ -38,7 +38,7 @@
/* Yamaha devices */
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1000),
USB_DEVICE(0x0499, 0x1000),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "UX256",
......@@ -47,7 +47,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1001),
USB_DEVICE(0x0499, 0x1001),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MU1000",
......@@ -56,7 +56,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1002),
USB_DEVICE(0x0499, 0x1002),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MU2000",
......@@ -65,7 +65,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1003),
USB_DEVICE(0x0499, 0x1003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MU500",
......@@ -74,7 +74,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1004),
USB_DEVICE(0x0499, 0x1004),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "UW500",
......@@ -83,7 +83,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1005),
USB_DEVICE(0x0499, 0x1005),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MOTIF6",
......@@ -92,7 +92,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1006),
USB_DEVICE(0x0499, 0x1006),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MOTIF7",
......@@ -101,7 +101,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1007),
USB_DEVICE(0x0499, 0x1007),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "MOTIF8",
......@@ -110,7 +110,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1008),
USB_DEVICE(0x0499, 0x1008),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "UX96",
......@@ -119,7 +119,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1009),
USB_DEVICE(0x0499, 0x1009),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "UX16",
......@@ -128,7 +128,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100a),
USB_DEVICE(0x0499, 0x100a),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "EOS BX",
......@@ -137,7 +137,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100e),
USB_DEVICE(0x0499, 0x100e),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "S08",
......@@ -146,7 +146,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x100f),
USB_DEVICE(0x0499, 0x100f),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "CLP-150",
......@@ -155,7 +155,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0499, 0x1010),
USB_DEVICE(0x0499, 0x1010),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Yamaha",
.product_name = "CLP-170",
......@@ -177,7 +177,7 @@
* class-specific descriptors.
*/
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0000),
USB_DEVICE(0x0582, 0x0000),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "UA-100",
......@@ -191,7 +191,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0002),
USB_DEVICE(0x0582, 0x0002),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UM-4",
......@@ -205,7 +205,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0003),
USB_DEVICE(0x0582, 0x0003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "SC-8850",
......@@ -219,7 +219,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0004),
USB_DEVICE(0x0582, 0x0004),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "U-8",
......@@ -233,7 +233,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0005),
USB_DEVICE(0x0582, 0x0005),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UM-2",
......@@ -247,7 +247,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0007),
USB_DEVICE(0x0582, 0x0007),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "SC-8820",
......@@ -261,7 +261,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0008),
USB_DEVICE(0x0582, 0x0008),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "PC-300",
......@@ -275,7 +275,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0009),
USB_DEVICE(0x0582, 0x0009),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UM-1",
......@@ -289,7 +289,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x000b),
USB_DEVICE(0x0582, 0x000b),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "SK-500",
......@@ -303,7 +303,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x000c),
USB_DEVICE(0x0582, 0x000c),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "SC-D70",
......@@ -317,7 +317,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0012),
USB_DEVICE(0x0582, 0x0012),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "Roland",
.product_name = "XV-5050",
......@@ -331,7 +331,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0014),
USB_DEVICE(0x0582, 0x0014),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UM-880",
......@@ -345,7 +345,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0016),
USB_DEVICE(0x0582, 0x0016),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "SD-90",
......@@ -359,7 +359,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0023),
USB_DEVICE(0x0582, 0x0023),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UM-550",
......@@ -373,7 +373,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0027),
USB_DEVICE(0x0582, 0x0027),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "SD-20",
......@@ -387,7 +387,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x0029),
USB_DEVICE(0x0582, 0x0029),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "SD-80",
......@@ -401,7 +401,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
USB_DEVICE(0x0582, 0x002b),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
.product_name = "UA-700",
......@@ -467,7 +467,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
USB_DEVICE(0x0763, 0x2001),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "M-Audio",
.product_name = "Quattro",
......@@ -477,7 +477,7 @@
}
},
{
USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
USB_DEVICE(0x0763, 0x2003),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "M-Audio",
.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