diff options
Diffstat (limited to 'drivers/usb/gadget/f_audio.c')
| -rw-r--r-- | drivers/usb/gadget/f_audio.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/usb/gadget/f_audio.c b/drivers/usb/gadget/f_audio.c index c43c89ffa2c8..df77f6131c73 100644 --- a/drivers/usb/gadget/f_audio.c +++ b/drivers/usb/gadget/f_audio.c | |||
| @@ -56,13 +56,16 @@ static struct usb_interface_descriptor ac_interface_desc __initdata = { | |||
| 56 | DECLARE_UAC_AC_HEADER_DESCRIPTOR(2); | 56 | DECLARE_UAC_AC_HEADER_DESCRIPTOR(2); |
| 57 | 57 | ||
| 58 | #define UAC_DT_AC_HEADER_LENGTH UAC_DT_AC_HEADER_SIZE(F_AUDIO_NUM_INTERFACES) | 58 | #define UAC_DT_AC_HEADER_LENGTH UAC_DT_AC_HEADER_SIZE(F_AUDIO_NUM_INTERFACES) |
| 59 | /* 1 input terminal, 1 output terminal and 1 feature unit */ | ||
| 60 | #define UAC_DT_TOTAL_LENGTH (UAC_DT_AC_HEADER_LENGTH + UAC_DT_INPUT_TERMINAL_SIZE \ | ||
| 61 | + UAC_DT_OUTPUT_TERMINAL_SIZE + UAC_DT_FEATURE_UNIT_SIZE(0)) | ||
| 59 | /* B.3.2 Class-Specific AC Interface Descriptor */ | 62 | /* B.3.2 Class-Specific AC Interface Descriptor */ |
| 60 | static struct uac_ac_header_descriptor_2 ac_header_desc = { | 63 | static struct uac_ac_header_descriptor_2 ac_header_desc = { |
| 61 | .bLength = UAC_DT_AC_HEADER_LENGTH, | 64 | .bLength = UAC_DT_AC_HEADER_LENGTH, |
| 62 | .bDescriptorType = USB_DT_CS_INTERFACE, | 65 | .bDescriptorType = USB_DT_CS_INTERFACE, |
| 63 | .bDescriptorSubtype = UAC_HEADER, | 66 | .bDescriptorSubtype = UAC_HEADER, |
| 64 | .bcdADC = __constant_cpu_to_le16(0x0100), | 67 | .bcdADC = __constant_cpu_to_le16(0x0100), |
| 65 | .wTotalLength = __constant_cpu_to_le16(UAC_DT_AC_HEADER_LENGTH), | 68 | .wTotalLength = __constant_cpu_to_le16(UAC_DT_TOTAL_LENGTH), |
| 66 | .bInCollection = F_AUDIO_NUM_INTERFACES, | 69 | .bInCollection = F_AUDIO_NUM_INTERFACES, |
| 67 | .baInterfaceNr = { | 70 | .baInterfaceNr = { |
| 68 | [0] = F_AUDIO_AC_INTERFACE, | 71 | [0] = F_AUDIO_AC_INTERFACE, |
| @@ -252,12 +255,12 @@ static struct f_audio_buf *f_audio_buffer_alloc(int buf_size) | |||
| 252 | 255 | ||
| 253 | copy_buf = kzalloc(sizeof *copy_buf, GFP_ATOMIC); | 256 | copy_buf = kzalloc(sizeof *copy_buf, GFP_ATOMIC); |
| 254 | if (!copy_buf) | 257 | if (!copy_buf) |
| 255 | return (struct f_audio_buf *)-ENOMEM; | 258 | return ERR_PTR(-ENOMEM); |
| 256 | 259 | ||
| 257 | copy_buf->buf = kzalloc(buf_size, GFP_ATOMIC); | 260 | copy_buf->buf = kzalloc(buf_size, GFP_ATOMIC); |
| 258 | if (!copy_buf->buf) { | 261 | if (!copy_buf->buf) { |
| 259 | kfree(copy_buf); | 262 | kfree(copy_buf); |
| 260 | return (struct f_audio_buf *)-ENOMEM; | 263 | return ERR_PTR(-ENOMEM); |
| 261 | } | 264 | } |
| 262 | 265 | ||
| 263 | return copy_buf; | 266 | return copy_buf; |
| @@ -332,7 +335,7 @@ static int f_audio_out_ep_complete(struct usb_ep *ep, struct usb_request *req) | |||
| 332 | list_add_tail(©_buf->list, &audio->play_queue); | 335 | list_add_tail(©_buf->list, &audio->play_queue); |
| 333 | schedule_work(&audio->playback_work); | 336 | schedule_work(&audio->playback_work); |
| 334 | copy_buf = f_audio_buffer_alloc(audio_buf_size); | 337 | copy_buf = f_audio_buffer_alloc(audio_buf_size); |
| 335 | if (copy_buf < 0) | 338 | if (IS_ERR(copy_buf)) |
| 336 | return -ENOMEM; | 339 | return -ENOMEM; |
| 337 | } | 340 | } |
| 338 | 341 | ||
| @@ -576,6 +579,8 @@ static int f_audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt) | |||
| 576 | usb_ep_enable(out_ep, audio->out_desc); | 579 | usb_ep_enable(out_ep, audio->out_desc); |
| 577 | out_ep->driver_data = audio; | 580 | out_ep->driver_data = audio; |
| 578 | audio->copy_buf = f_audio_buffer_alloc(audio_buf_size); | 581 | audio->copy_buf = f_audio_buffer_alloc(audio_buf_size); |
| 582 | if (IS_ERR(audio->copy_buf)) | ||
| 583 | return -ENOMEM; | ||
| 579 | 584 | ||
| 580 | /* | 585 | /* |
| 581 | * allocate a bunch of read buffers | 586 | * allocate a bunch of read buffers |
| @@ -787,7 +792,7 @@ int __init audio_bind_config(struct usb_configuration *c) | |||
| 787 | return status; | 792 | return status; |
| 788 | 793 | ||
| 789 | add_fail: | 794 | add_fail: |
| 790 | gaudio_cleanup(&audio->card); | 795 | gaudio_cleanup(); |
| 791 | setup_fail: | 796 | setup_fail: |
| 792 | kfree(audio); | 797 | kfree(audio); |
| 793 | return status; | 798 | return status; |
