@ -40,7 +40,7 @@
# define BULK_BUFFER_SIZE 16384
# define ACC_STRING_SIZE 256
# define PROTOCOL_VERSION 1
# define PROTOCOL_VERSION 2
/* String IDs */
# define INTERFACE_STRING_INDEX 0
@ -78,6 +78,8 @@ struct acc_dev {
/* set to 1 if we have a pending start request */
int start_requested ;
int audio_mode ;
/* synchronize access to our device file */
atomic_t open_excl ;
@ -510,6 +512,8 @@ static long acc_ioctl(struct file *fp, unsigned code, unsigned long value)
break ;
case ACCESSORY_IS_START_REQUESTED :
return dev - > start_requested ;
case ACCESSORY_GET_AUDIO_MODE :
return dev - > audio_mode ;
}
if ( ! src )
return - EINVAL ;
@ -586,6 +590,10 @@ static int acc_ctrlrequest(struct usb_composite_dev *cdev,
cdev - > gadget - > ep0 - > driver_data = dev ;
cdev - > req - > complete = acc_complete_set_string ;
value = w_length ;
} else if ( b_request = = ACCESSORY_SET_AUDIO_MODE & &
w_index = = 0 & & w_length = = 0 ) {
dev - > audio_mode = w_value ;
value = 0 ;
}
} else if ( b_requestType = = ( USB_DIR_IN | USB_TYPE_VENDOR ) ) {
if ( b_request = = ACCESSORY_GET_PROTOCOL ) {
@ -600,6 +608,7 @@ static int acc_ctrlrequest(struct usb_composite_dev *cdev,
memset ( dev - > uri , 0 , sizeof ( dev - > uri ) ) ;
memset ( dev - > serial , 0 , sizeof ( dev - > serial ) ) ;
dev - > start_requested = 0 ;
dev - > audio_mode = 0 ;
}
}