@@ -147,29 +147,32 @@ static const struct video_device pwc_template = {
147147/***************************************************************************/
148148/* Private functions */
149149
150- static void * pwc_alloc_urb_buffer (struct device * dev ,
150+ static void * pwc_alloc_urb_buffer (struct usb_device * dev ,
151151 size_t size , dma_addr_t * dma_handle )
152152{
153+ struct device * dmadev = dev -> bus -> sysdev ;
153154 void * buffer = kmalloc (size , GFP_KERNEL );
154155
155156 if (!buffer )
156157 return NULL ;
157158
158- * dma_handle = dma_map_single (dev , buffer , size , DMA_FROM_DEVICE );
159- if (dma_mapping_error (dev , * dma_handle )) {
159+ * dma_handle = dma_map_single (dmadev , buffer , size , DMA_FROM_DEVICE );
160+ if (dma_mapping_error (dmadev , * dma_handle )) {
160161 kfree (buffer );
161162 return NULL ;
162163 }
163164
164165 return buffer ;
165166}
166167
167- static void pwc_free_urb_buffer (struct device * dev ,
168+ static void pwc_free_urb_buffer (struct usb_device * dev ,
168169 size_t size ,
169170 void * buffer ,
170171 dma_addr_t dma_handle )
171172{
172- dma_unmap_single (dev , dma_handle , size , DMA_FROM_DEVICE );
173+ struct device * dmadev = dev -> bus -> sysdev ;
174+
175+ dma_unmap_single (dmadev , dma_handle , size , DMA_FROM_DEVICE );
173176 kfree (buffer );
174177}
175178
@@ -274,6 +277,7 @@ static void pwc_frame_complete(struct pwc_device *pdev)
274277static void pwc_isoc_handler (struct urb * urb )
275278{
276279 struct pwc_device * pdev = (struct pwc_device * )urb -> context ;
280+ struct device * dmadev = urb -> dev -> bus -> sysdev ;
277281 int i , fst , flen ;
278282 unsigned char * iso_buf = NULL ;
279283
@@ -320,7 +324,7 @@ static void pwc_isoc_handler(struct urb *urb)
320324 /* Reset ISOC error counter. We did get here, after all. */
321325 pdev -> visoc_errors = 0 ;
322326
323- dma_sync_single_for_cpu (& urb -> dev -> dev ,
327+ dma_sync_single_for_cpu (dmadev ,
324328 urb -> transfer_dma ,
325329 urb -> transfer_buffer_length ,
326330 DMA_FROM_DEVICE );
@@ -371,7 +375,7 @@ static void pwc_isoc_handler(struct urb *urb)
371375 pdev -> vlast_packet_size = flen ;
372376 }
373377
374- dma_sync_single_for_device (& urb -> dev -> dev ,
378+ dma_sync_single_for_device (dmadev ,
375379 urb -> transfer_dma ,
376380 urb -> transfer_buffer_length ,
377381 DMA_FROM_DEVICE );
@@ -453,7 +457,7 @@ static int pwc_isoc_init(struct pwc_device *pdev)
453457 urb -> pipe = usb_rcvisocpipe (udev , pdev -> vendpoint );
454458 urb -> transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP ;
455459 urb -> transfer_buffer_length = ISO_BUFFER_SIZE ;
456- urb -> transfer_buffer = pwc_alloc_urb_buffer (& udev -> dev ,
460+ urb -> transfer_buffer = pwc_alloc_urb_buffer (udev ,
457461 urb -> transfer_buffer_length ,
458462 & urb -> transfer_dma );
459463 if (urb -> transfer_buffer == NULL ) {
@@ -516,7 +520,7 @@ static void pwc_iso_free(struct pwc_device *pdev)
516520 if (urb ) {
517521 PWC_DEBUG_MEMORY ("Freeing URB\n" );
518522 if (urb -> transfer_buffer )
519- pwc_free_urb_buffer (& urb -> dev -> dev ,
523+ pwc_free_urb_buffer (urb -> dev ,
520524 urb -> transfer_buffer_length ,
521525 urb -> transfer_buffer ,
522526 urb -> transfer_dma );
0 commit comments