aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.c53
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.h2
2 files changed, 13 insertions, 42 deletions
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
index b4ec716de7da..0025847743f3 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.c
+++ b/drivers/usb/misc/sisusbvga/sisusb.c
@@ -79,14 +79,12 @@ sisusb_free_buffers(struct sisusb_usb_data *sisusb)
79 79
80 for (i = 0; i < NUMOBUFS; i++) { 80 for (i = 0; i < NUMOBUFS; i++) {
81 if (sisusb->obuf[i]) { 81 if (sisusb->obuf[i]) {
82 usb_buffer_free(sisusb->sisusb_dev, sisusb->obufsize, 82 kfree(sisusb->obuf[i]);
83 sisusb->obuf[i], sisusb->transfer_dma_out[i]);
84 sisusb->obuf[i] = NULL; 83 sisusb->obuf[i] = NULL;
85 } 84 }
86 } 85 }
87 if (sisusb->ibuf) { 86 if (sisusb->ibuf) {
88 usb_buffer_free(sisusb->sisusb_dev, sisusb->ibufsize, 87 kfree(sisusb->ibuf);
89 sisusb->ibuf, sisusb->transfer_dma_in);
90 sisusb->ibuf = NULL; 88 sisusb->ibuf = NULL;
91 } 89 }
92} 90}
@@ -230,8 +228,7 @@ sisusb_bulk_completeout(struct urb *urb)
230 228
231static int 229static int
232sisusb_bulkout_msg(struct sisusb_usb_data *sisusb, int index, unsigned int pipe, void *data, 230sisusb_bulkout_msg(struct sisusb_usb_data *sisusb, int index, unsigned int pipe, void *data,
233 int len, int *actual_length, int timeout, unsigned int tflags, 231 int len, int *actual_length, int timeout, unsigned int tflags)
234 dma_addr_t transfer_dma)
235{ 232{
236 struct urb *urb = sisusb->sisurbout[index]; 233 struct urb *urb = sisusb->sisurbout[index];
237 int retval, byteswritten = 0; 234 int retval, byteswritten = 0;
@@ -245,9 +242,6 @@ sisusb_bulkout_msg(struct sisusb_usb_data *sisusb, int index, unsigned int pipe,
245 urb->transfer_flags |= tflags; 242 urb->transfer_flags |= tflags;
246 urb->actual_length = 0; 243 urb->actual_length = 0;
247 244
248 if ((urb->transfer_dma = transfer_dma))
249 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
250
251 /* Set up context */ 245 /* Set up context */
252 sisusb->urbout_context[index].actual_length = (timeout) ? 246 sisusb->urbout_context[index].actual_length = (timeout) ?
253 NULL : actual_length; 247 NULL : actual_length;
@@ -297,8 +291,8 @@ sisusb_bulk_completein(struct urb *urb)
297} 291}
298 292
299static int 293static int
300sisusb_bulkin_msg(struct sisusb_usb_data *sisusb, unsigned int pipe, void *data, int len, 294sisusb_bulkin_msg(struct sisusb_usb_data *sisusb, unsigned int pipe, void *data,
301 int *actual_length, int timeout, unsigned int tflags, dma_addr_t transfer_dma) 295 int len, int *actual_length, int timeout, unsigned int tflags)
302{ 296{
303 struct urb *urb = sisusb->sisurbin; 297 struct urb *urb = sisusb->sisurbin;
304 int retval, readbytes = 0; 298 int retval, readbytes = 0;
@@ -311,9 +305,6 @@ sisusb_bulkin_msg(struct sisusb_usb_data *sisusb, unsigned int pipe, void *data,
311 urb->transfer_flags |= tflags; 305 urb->transfer_flags |= tflags;
312 urb->actual_length = 0; 306 urb->actual_length = 0;
313 307
314 if ((urb->transfer_dma = transfer_dma))
315 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
316
317 sisusb->completein = 0; 308 sisusb->completein = 0;
318 retval = usb_submit_urb(urb, GFP_ATOMIC); 309 retval = usb_submit_urb(urb, GFP_ATOMIC);
319 if (retval == 0) { 310 if (retval == 0) {
@@ -422,8 +413,7 @@ static int sisusb_send_bulk_msg(struct sisusb_usb_data *sisusb, int ep, int len,
422 thispass, 413 thispass,
423 &transferred_len, 414 &transferred_len,
424 async ? 0 : 5 * HZ, 415 async ? 0 : 5 * HZ,
425 tflags, 416 tflags);
426 sisusb->transfer_dma_out[index]);
427 417
428 if (result == -ETIMEDOUT) { 418 if (result == -ETIMEDOUT) {
429 419
@@ -432,29 +422,16 @@ static int sisusb_send_bulk_msg(struct sisusb_usb_data *sisusb, int ep, int len,
432 return -ETIME; 422 return -ETIME;
433 423
434 continue; 424 continue;
425 }
435 426
436 } else if ((result == 0) && !async && transferred_len) { 427 if ((result == 0) && !async && transferred_len) {
437 428
438 thispass -= transferred_len; 429 thispass -= transferred_len;
439 if (thispass) { 430 buffer += transferred_len;
440 if (sisusb->transfer_dma_out) {
441 /* If DMA, copy remaining
442 * to beginning of buffer
443 */
444 memcpy(buffer,
445 buffer + transferred_len,
446 thispass);
447 } else {
448 /* If not DMA, simply increase
449 * the pointer
450 */
451 buffer += transferred_len;
452 }
453 }
454 431
455 } else 432 } else
456 break; 433 break;
457 }; 434 }
458 435
459 if (result) 436 if (result)
460 return result; 437 return result;
@@ -530,8 +507,7 @@ static int sisusb_recv_bulk_msg(struct sisusb_usb_data *sisusb, int ep, int len,
530 thispass, 507 thispass,
531 &transferred_len, 508 &transferred_len,
532 5 * HZ, 509 5 * HZ,
533 tflags, 510 tflags);
534 sisusb->transfer_dma_in);
535 511
536 if (transferred_len) 512 if (transferred_len)
537 thispass = transferred_len; 513 thispass = transferred_len;
@@ -3132,8 +3108,7 @@ static int sisusb_probe(struct usb_interface *intf,
3132 3108
3133 /* Allocate buffers */ 3109 /* Allocate buffers */
3134 sisusb->ibufsize = SISUSB_IBUF_SIZE; 3110 sisusb->ibufsize = SISUSB_IBUF_SIZE;
3135 if (!(sisusb->ibuf = usb_buffer_alloc(dev, SISUSB_IBUF_SIZE, 3111 if (!(sisusb->ibuf = kmalloc(SISUSB_IBUF_SIZE, GFP_KERNEL))) {
3136 GFP_KERNEL, &sisusb->transfer_dma_in))) {
3137 dev_err(&sisusb->sisusb_dev->dev, "Failed to allocate memory for input buffer"); 3112 dev_err(&sisusb->sisusb_dev->dev, "Failed to allocate memory for input buffer");
3138 retval = -ENOMEM; 3113 retval = -ENOMEM;
3139 goto error_2; 3114 goto error_2;
@@ -3142,9 +3117,7 @@ static int sisusb_probe(struct usb_interface *intf,
3142 sisusb->numobufs = 0; 3117 sisusb->numobufs = 0;
3143 sisusb->obufsize = SISUSB_OBUF_SIZE; 3118 sisusb->obufsize = SISUSB_OBUF_SIZE;
3144 for (i = 0; i < NUMOBUFS; i++) { 3119 for (i = 0; i < NUMOBUFS; i++) {
3145 if (!(sisusb->obuf[i] = usb_buffer_alloc(dev, SISUSB_OBUF_SIZE, 3120 if (!(sisusb->obuf[i] = kmalloc(SISUSB_OBUF_SIZE, GFP_KERNEL))) {
3146 GFP_KERNEL,
3147 &sisusb->transfer_dma_out[i]))) {
3148 if (i == 0) { 3121 if (i == 0) {
3149 dev_err(&sisusb->sisusb_dev->dev, "Failed to allocate memory for output buffer\n"); 3122 dev_err(&sisusb->sisusb_dev->dev, "Failed to allocate memory for output buffer\n");
3150 retval = -ENOMEM; 3123 retval = -ENOMEM;
diff --git a/drivers/usb/misc/sisusbvga/sisusb.h b/drivers/usb/misc/sisusbvga/sisusb.h
index cf0b4a5883f6..55492a5930bd 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.h
+++ b/drivers/usb/misc/sisusbvga/sisusb.h
@@ -123,8 +123,6 @@ struct sisusb_usb_data {
123 int numobufs; /* number of obufs = number of out urbs */ 123 int numobufs; /* number of obufs = number of out urbs */
124 char *obuf[NUMOBUFS], *ibuf; /* transfer buffers */ 124 char *obuf[NUMOBUFS], *ibuf; /* transfer buffers */
125 int obufsize, ibufsize; 125 int obufsize, ibufsize;
126 dma_addr_t transfer_dma_out[NUMOBUFS];
127 dma_addr_t transfer_dma_in;
128 struct urb *sisurbout[NUMOBUFS]; 126 struct urb *sisurbout[NUMOBUFS];
129 struct urb *sisurbin; 127 struct urb *sisurbin;
130 unsigned char urbstatus[NUMOBUFS]; 128 unsigned char urbstatus[NUMOBUFS];