ALSA: usb-audio - Add ignore_ctl_error parameter
Added the ignore_ctl_error parameter to enable/disable the control-error handling for mixer interfaces. It was a hard-coded ifdef, and now you can change it more easily. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
8a8f2662c5
commit
7a9b8063cf
@ -1983,6 +1983,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
device_setup - Device specific magic number (optional)
|
||||
- Influence depends on the device
|
||||
- Default: 0x0000
|
||||
ignore_ctl_error - Ignore any USB-controller regarding mixer
|
||||
interface (default: no)
|
||||
|
||||
This module supports multiple devices, autoprobe and hotplugging.
|
||||
|
||||
@ -1991,6 +1993,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
check.
|
||||
NB: async_unlink=0 would cause Oops. It remains just for
|
||||
debugging purpose (if any).
|
||||
NB: ignore_ctl_error=1 may help when you get an error at accessing
|
||||
the mixer element such as URB error -22. This happens on some
|
||||
buggy USB device or the controller.
|
||||
|
||||
Module snd-usb-caiaq
|
||||
--------------------
|
||||
|
@ -71,6 +71,7 @@ static int pid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 };
|
||||
static int nrpacks = 8; /* max. number of packets per urb */
|
||||
static int async_unlink = 1;
|
||||
static int device_setup[SNDRV_CARDS]; /* device parameter for this card*/
|
||||
static int ignore_ctl_error;
|
||||
|
||||
module_param_array(index, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(index, "Index value for the USB audio adapter.");
|
||||
@ -88,7 +89,9 @@ module_param(async_unlink, bool, 0444);
|
||||
MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
|
||||
module_param_array(device_setup, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(device_setup, "Specific device setup (if needed).");
|
||||
|
||||
module_param(ignore_ctl_error, bool, 0444);
|
||||
MODULE_PARM_DESC(ignore_ctl_error,
|
||||
"Ignore errors from USB controller for mixer interfaces.");
|
||||
|
||||
/*
|
||||
* debug the h/w constraints
|
||||
@ -3633,7 +3636,7 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
|
||||
if (err > 0) {
|
||||
/* create normal USB audio interfaces */
|
||||
if (snd_usb_create_streams(chip, ifnum) < 0 ||
|
||||
snd_usb_create_mixer(chip, ifnum) < 0) {
|
||||
snd_usb_create_mixer(chip, ifnum, ignore_ctl_error) < 0) {
|
||||
goto __error;
|
||||
}
|
||||
}
|
||||
|
@ -223,7 +223,8 @@ int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe,
|
||||
__u8 request, __u8 requesttype, __u16 value, __u16 index,
|
||||
void *data, __u16 size, int timeout);
|
||||
|
||||
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif);
|
||||
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
|
||||
int ignore_error);
|
||||
void snd_usb_mixer_disconnect(struct list_head *p);
|
||||
|
||||
int snd_usb_create_midi_interface(struct snd_usb_audio *chip, struct usb_interface *iface,
|
||||
|
@ -2014,7 +2014,8 @@ static void snd_audigy2nx_proc_read(struct snd_info_entry *entry,
|
||||
}
|
||||
}
|
||||
|
||||
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
|
||||
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
|
||||
int ignore_error)
|
||||
{
|
||||
static struct snd_device_ops dev_ops = {
|
||||
.dev_free = snd_usb_mixer_dev_free
|
||||
@ -2029,9 +2030,7 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
|
||||
return -ENOMEM;
|
||||
mixer->chip = chip;
|
||||
mixer->ctrlif = ctrlif;
|
||||
#ifdef IGNORE_CTL_ERROR
|
||||
mixer->ignore_ctl_error = 1;
|
||||
#endif
|
||||
mixer->ignore_ctl_error = ignore_error;
|
||||
mixer->id_elems = kcalloc(256, sizeof(*mixer->id_elems), GFP_KERNEL);
|
||||
if (!mixer->id_elems) {
|
||||
kfree(mixer);
|
||||
|
Loading…
Reference in New Issue
Block a user