Update of /cvsroot/alsa/alsa-kernel/usb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8502
Modified Files: usbaudio.h usbmixer.c usbmixer_maps.c Log Message: added fix and workaround for the mixer problem on SB Extigy. Index: usbaudio.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/usb/usbaudio.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- usbaudio.h 19 Jan 2004 19:33:46 -0000 1.23 +++ usbaudio.h 9 Mar 2004 16:57:34 -0000 1.24 @@ -136,6 +136,8 @@ struct list_head midi_list; /* list of midi interfaces */ int next_midi_device; + + unsigned int ignore_ctl_error; /* for mixer */ }; /* Index: usbmixer.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/usb/usbmixer.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- usbmixer.c 26 Sep 2003 14:29:05 -0000 1.24 +++ usbmixer.c 9 Mar 2004 16:57:36 -0000 1.25 @@ -667,13 +667,11 @@ 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) { + if (cval->chip->ignore_ctl_error) { + ucontrol->value.integer.value[0] = cval->min; + return 0; + } snd_printd(KERN_ERR "cannot get current value for control %d ch %d: err = %d\n", cval->control, c + 1, err); return err; } @@ -685,13 +683,11 @@ } 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) { + if (cval->chip->ignore_ctl_error) { + ucontrol->value.integer.value[0] = cval->min; + return 0; + } snd_printd(KERN_ERR "cannot get current value for control %d master ch: err = %d\n", cval->control, err); return err; } @@ -713,12 +709,11 @@ 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) + if (err < 0) { + if (cval->chip->ignore_ctl_error) + return 0; return err; + } val = ucontrol->value.integer.value[cnt]; val = get_abs_value(cval, val); if (oval != val) { @@ -732,10 +727,8 @@ } else { /* master channel */ err = get_cur_mix_value(cval, 0, &oval); -#ifdef IGNORE_CTL_ERROR - if (err < 0) + if (err < 0 && cval->chip->ignore_ctl_error) return 0; -#endif if (err < 0) return err; val = ucontrol->value.integer.value[0]; @@ -1025,12 +1018,10 @@ int err, val; err = get_cur_ctl_value(cval, cval->control << 8, &val); -#ifdef IGNORE_CTL_ERROR - if (err < 0) { + if (err < 0 && cval->chip->ignore_ctl_error) { ucontrol->value.integer.value[0] = cval->min; return 0; } -#endif if (err < 0) return err; val = get_relative_value(cval, val); @@ -1045,12 +1036,11 @@ int val, oval, err; err = get_cur_ctl_value(cval, cval->control << 8, &oval); -#ifdef IGNORE_CTL_ERROR - if (err < 0) - return 0; -#endif - if (err < 0) + if (err < 0) { + if (cval->chip->ignore_ctl_error) + return 0; return err; + } val = ucontrol->value.integer.value[0]; val = get_abs_value(cval, val); if (val != oval) { @@ -1274,14 +1264,13 @@ 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) + if (cval->chip->ignore_ctl_error) { + ucontrol->value.enumerated.item[0] = 0; + return 0; + } return err; + } val = get_relative_value(cval, val); ucontrol->value.enumerated.item[0] = val; return 0; @@ -1294,12 +1283,11 @@ 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) + if (err < 0) { + if (cval->chip->ignore_ctl_error) + return 0; return err; + } val = ucontrol->value.enumerated.item[0]; val = get_abs_value(cval, val); if (val != oval) { @@ -1509,9 +1497,13 @@ for (map = usbmix_ctl_maps; map->vendor; map++) { if (map->vendor == dev->idVendor && map->product == dev->idProduct) { state.map = map->map; + chip->ignore_ctl_error = map->ignore_ctl_error; break; } } +#ifdef IGNORE_CTL_ERROR + chip->ignore_ctl_error = 1; +#endif desc = NULL; while ((desc = snd_usb_find_csint_desc(hostif->extra, hostif->extralen, desc, OUTPUT_TERMINAL)) != NULL) { Index: usbmixer_maps.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/usb/usbmixer_maps.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- usbmixer_maps.c 16 Jul 2003 11:38:05 -0000 1.5 +++ usbmixer_maps.c 9 Mar 2004 16:57:36 -0000 1.6 @@ -30,6 +30,7 @@ int vendor; int product; const struct usbmix_name_map *map; + int ignore_ctl_error; }; /* @@ -86,6 +87,7 @@ { 26, "IEC958 Optical Playback" }, /* OT */ { 27, NULL }, /* DISABLED: EU (for what?) */ /* 28: FU speaker (mute) */ + { 29, NULL }, /* Digital Input Playback Source? */ { 0 } /* terminator */ }; @@ -117,8 +119,8 @@ */ static struct usbmix_ctl_map usbmix_ctl_maps[] = { - { 0x41e, 0x3000, extigy_map }, - { 0xc45, 0x1158, justlink_map }, + { 0x41e, 0x3000, extigy_map, 1 }, + { 0xc45, 0x1158, justlink_map, 0 }, { 0 } /* terminator */ }; ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog