@ -291,16 +291,15 @@ static int get_abs_value(struct usb_mixer_elem_info *cval, int val)
static int get_ctl_value_v1 ( struct usb_mixer_elem_info * cval , int request , int validx , int * value_ret )
{
struct snd_usb_audio * chip = cval - > mixer - > chip ;
unsigned char buf [ 2 ] ;
int val_len = cval - > val_type > = USB_MIXER_S16 ? 2 : 1 ;
int timeout = 10 ;
while ( timeout - - > 0 ) {
if ( snd_usb_ctl_msg ( cval - > mixer - > chip - > dev ,
usb_rcvctrlpipe ( cval - > mixer - > chip - > dev , 0 ) ,
request ,
if ( snd_usb_ctl_msg ( chip - > dev , usb_rcvctrlpipe ( chip - > dev , 0 ) , request ,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN ,
validx , cval - > mixer - > ctrlif | ( cval - > id < < 8 ) ,
validx , snd_usb_ctrl_intf ( chip ) | ( cval - > id < < 8 ) ,
buf , val_len , 100 ) > = val_len ) {
* value_ret = convert_signed_value ( cval , snd_usb_combine_bytes ( buf , val_len ) ) ;
return 0 ;
@ -313,6 +312,7 @@ static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, int v
static int get_ctl_value_v2 ( struct usb_mixer_elem_info * cval , int request , int validx , int * value_ret )
{
struct snd_usb_audio * chip = cval - > mixer - > chip ;
unsigned char buf [ 2 + 3 * sizeof ( __u16 ) ] ; /* enough space for one range */
unsigned char * val ;
int ret , size ;
@ -328,16 +328,14 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, int v
memset ( buf , 0 , sizeof ( buf ) ) ;
ret = snd_usb_ctl_msg ( cval - > mixer - > chip - > dev ,
usb_rcvctrlpipe ( cval - > mixer - > chip - > dev , 0 ) ,
bRequest ,
ret = snd_usb_ctl_msg ( chip - > dev , usb_rcvctrlpipe ( chip - > dev , 0 ) , bRequest ,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN ,
validx , cval - > mixer - > ctrlif | ( cval - > id < < 8 ) ,
validx , snd_usb_ctrl_intf ( chip ) | ( cval - > id < < 8 ) ,
buf , size , 1000 ) ;
if ( ret < 0 ) {
snd_printk ( KERN_ERR " cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d \n " ,
request , validx , cval - > mixer - > ctrlif | ( cval - > id < < 8 ) , cval - > val_type ) ;
request , validx , snd_usb_ctrl_intf ( chip ) | ( cval - > id < < 8 ) , cval - > val_type ) ;
return ret ;
}
@ -413,6 +411,7 @@ static int get_cur_mix_value(struct usb_mixer_elem_info *cval,
int snd_usb_mixer_set_ctl_value ( struct usb_mixer_elem_info * cval ,
int request , int validx , int value_set )
{
struct snd_usb_audio * chip = cval - > mixer - > chip ;
unsigned char buf [ 2 ] ;
int val_len , timeout = 10 ;
@ -435,15 +434,14 @@ int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval,
buf [ 0 ] = value_set & 0xff ;
buf [ 1 ] = ( value_set > > 8 ) & 0xff ;
while ( timeout - - > 0 )
if ( snd_usb_ctl_msg ( cval - > mixer - > chip - > dev ,
usb_sndctrlpipe ( cval - > mixer - > chip - > dev , 0 ) ,
request ,
if ( snd_usb_ctl_msg ( chip - > dev ,
usb_sndctrlpipe ( chip - > dev , 0 ) , request ,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT ,
validx , cval - > mixer - > ctrlif | ( cval - > id < < 8 ) ,
validx , snd_usb_ctrl_intf ( chip ) | ( cval - > id < < 8 ) ,
buf , val_len , 100 ) > = 0 )
return 0 ;
snd_printdd ( KERN_ERR " cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x \n " ,
request , validx , cval - > mixer - > ctrlif | ( cval - > id < < 8 ) , cval - > val_type , buf [ 0 ] , buf [ 1 ] ) ;
request , validx , snd_usb_ctrl_intf ( chip ) | ( cval - > id < < 8 ) , cval - > val_type , buf [ 0 ] , buf [ 1 ] ) ;
return - EINVAL ;
}
@ -761,6 +759,8 @@ static void usb_mixer_elem_free(struct snd_kcontrol *kctl)
*/
static int get_min_max ( struct usb_mixer_elem_info * cval , int default_min )
{
struct snd_usb_audio * chip = cval - > mixer - > chip ;
/* for failsafe */
cval - > min = default_min ;
cval - > max = cval - > min + 1 ;
@ -783,7 +783,7 @@ static int get_min_max(struct usb_mixer_elem_info *cval, int default_min)
if ( get_ctl_value ( cval , UAC_GET_MAX , ( cval - > control < < 8 ) | minchn , & cval - > max ) < 0 | |
get_ctl_value ( cval , UAC_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 - > mixer - > ctrlif , cval - > control , cval - > id ) ;
cval - > id , snd_usb_ctrl_intf ( chip ) , cval - > control , cval - > id ) ;
return - EINVAL ;
}
if ( get_ctl_value ( cval , UAC_GET_RES , ( cval - > control < < 8 ) | minchn , & cval - > res ) < 0 ) {
@ -1913,7 +1913,7 @@ static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer)
struct usb_host_interface * hostif ;
void * p ;
hostif = & usb_ifnum_to_if ( mixer - > chip - > dev , mixer - > ctrlif ) - > altsetting [ 0 ] ;
hostif = mixer - > chip - > ctrl_intf ;
memset ( & state , 0 , sizeof ( state ) ) ;
state . chip = mixer - > chip ;
state . mixer = mixer ;
@ -2005,7 +2005,7 @@ static void snd_usb_mixer_proc_read(struct snd_info_entry *entry,
list_for_each_entry ( mixer , & chip - > mixer_list , list ) {
snd_iprintf ( buffer ,
" USB Mixer: usb_id=0x%08x, ctrlif=%i, ctlerr=%i \n " ,
chip - > usb_id , mixer - > ctrlif ,
chip - > usb_id , snd_usb_ctrl_intf ( chip ) ,
mixer - > ignore_ctl_error ) ;
snd_iprintf ( buffer , " Card: %s \n " , chip - > card - > longname ) ;
for ( unitid = 0 ; unitid < MAX_ID_ELEMS ; unitid + + ) {
@ -2123,7 +2123,7 @@ static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer)
int buffer_length ;
unsigned int epnum ;
hostif = & usb_ifnum_to_if ( mixer - > chip - > dev , mixer - > ctrlif ) - > altsetting [ 0 ] ;
hostif = mixer - > chip - > ctrl_intf ;
/* we need one interrupt input endpoint */
if ( get_iface_desc ( hostif ) - > bNumEndpoints < 1 )
return 0 ;
@ -2166,7 +2166,6 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
if ( ! mixer )
return - ENOMEM ;
mixer - > chip = chip ;
mixer - > ctrlif = ctrlif ;
mixer - > ignore_ctl_error = ignore_error ;
mixer - > id_elems = kcalloc ( MAX_ID_ELEMS , sizeof ( * mixer - > id_elems ) ,
GFP_KERNEL ) ;