diff options
author | Mike Lockwood <lockwood@google.com> | 2012-05-11 09:00:40 -0700 |
---|---|---|
committer | Mike Lockwood <lockwood@google.com> | 2012-05-15 16:35:42 -0700 |
commit | 319e822875f67ed9e4bcca3213ef80b018922ae0 (patch) | |
tree | a84afb3505e2e4fdea8afff62f2d207144d31ff8 /drivers | |
parent | 8a2755204da8afdbefc317874087e7823ae71f42 (diff) | |
download | kernel_samsung_aries-319e822875f67ed9e4bcca3213ef80b018922ae0.zip kernel_samsung_aries-319e822875f67ed9e4bcca3213ef80b018922ae0.tar.gz kernel_samsung_aries-319e822875f67ed9e4bcca3213ef80b018922ae0.tar.bz2 |
Add ACCESSORY_SET_AUDIO_MODE control request and ioctl
The control request will be used by the host to enable/disable USB audio
and the ioctl will be used by userspace to read the audio mode
Signed-off-by: Mike Lockwood <lockwood@google.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/gadget/f_accessory.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/usb/gadget/f_accessory.c b/drivers/usb/gadget/f_accessory.c index 05e65e5..3bcd2de 100644 --- a/drivers/usb/gadget/f_accessory.c +++ b/drivers/usb/gadget/f_accessory.c @@ -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; } } |