.. | .. |
---|
69 | 69 | |
---|
70 | 70 | struct delayed_work work; |
---|
71 | 71 | int button_pressed; |
---|
72 | | - spinlock_t lock; |
---|
73 | 72 | struct mutex sysfslock; /* concurrent read and write */ |
---|
74 | 73 | }; |
---|
75 | 74 | |
---|
.. | .. |
---|
79 | 78 | { |
---|
80 | 79 | struct appledisplay *pdata = urb->context; |
---|
81 | 80 | struct device *dev = &pdata->udev->dev; |
---|
82 | | - unsigned long flags; |
---|
83 | 81 | int status = urb->status; |
---|
84 | 82 | int retval; |
---|
85 | 83 | |
---|
.. | .. |
---|
91 | 89 | dev_err(dev, |
---|
92 | 90 | "OVERFLOW with data length %d, actual length is %d\n", |
---|
93 | 91 | ACD_URB_BUFFER_LEN, pdata->urb->actual_length); |
---|
94 | | - /* fall through */ |
---|
| 92 | + fallthrough; |
---|
95 | 93 | case -ECONNRESET: |
---|
96 | 94 | case -ENOENT: |
---|
97 | 95 | case -ESHUTDOWN: |
---|
.. | .. |
---|
105 | 103 | goto exit; |
---|
106 | 104 | } |
---|
107 | 105 | |
---|
108 | | - spin_lock_irqsave(&pdata->lock, flags); |
---|
109 | | - |
---|
110 | 106 | switch(pdata->urbdata[1]) { |
---|
111 | 107 | case ACD_BTN_BRIGHT_UP: |
---|
112 | 108 | case ACD_BTN_BRIGHT_DOWN: |
---|
.. | .. |
---|
118 | 114 | pdata->button_pressed = 0; |
---|
119 | 115 | break; |
---|
120 | 116 | } |
---|
121 | | - |
---|
122 | | - spin_unlock_irqrestore(&pdata->lock, flags); |
---|
123 | 117 | |
---|
124 | 118 | exit: |
---|
125 | 119 | retval = usb_submit_urb(pdata->urb, GFP_ATOMIC); |
---|
.. | .. |
---|
234 | 228 | |
---|
235 | 229 | pdata->udev = udev; |
---|
236 | 230 | |
---|
237 | | - spin_lock_init(&pdata->lock); |
---|
238 | 231 | INIT_DELAYED_WORK(&pdata->work, appledisplay_work); |
---|
239 | 232 | mutex_init(&pdata->sysfslock); |
---|
240 | 233 | |
---|
.. | .. |
---|
266 | 259 | usb_rcvintpipe(udev, int_in_endpointAddr), |
---|
267 | 260 | pdata->urbdata, ACD_URB_BUFFER_LEN, appledisplay_complete, |
---|
268 | 261 | pdata, 1); |
---|
| 262 | + pdata->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; |
---|
269 | 263 | if (usb_submit_urb(pdata->urb, GFP_KERNEL)) { |
---|
270 | 264 | retval = -EIO; |
---|
271 | 265 | dev_err(&iface->dev, "Submitting URB failed\n"); |
---|
.. | .. |
---|
311 | 305 | if (pdata->urb) { |
---|
312 | 306 | usb_kill_urb(pdata->urb); |
---|
313 | 307 | cancel_delayed_work_sync(&pdata->work); |
---|
314 | | - if (pdata->urbdata) |
---|
315 | | - usb_free_coherent(pdata->udev, ACD_URB_BUFFER_LEN, |
---|
| 308 | + usb_free_coherent(pdata->udev, ACD_URB_BUFFER_LEN, |
---|
316 | 309 | pdata->urbdata, pdata->urb->transfer_dma); |
---|
317 | 310 | usb_free_urb(pdata->urb); |
---|
318 | 311 | } |
---|
.. | .. |
---|
349 | 342 | .disconnect = appledisplay_disconnect, |
---|
350 | 343 | .id_table = appledisplay_table, |
---|
351 | 344 | }; |
---|
352 | | - |
---|
353 | | -static int __init appledisplay_init(void) |
---|
354 | | -{ |
---|
355 | | - return usb_register(&appledisplay_driver); |
---|
356 | | -} |
---|
357 | | - |
---|
358 | | -static void __exit appledisplay_exit(void) |
---|
359 | | -{ |
---|
360 | | - usb_deregister(&appledisplay_driver); |
---|
361 | | -} |
---|
| 345 | +module_usb_driver(appledisplay_driver); |
---|
362 | 346 | |
---|
363 | 347 | MODULE_AUTHOR("Michael Hanselmann"); |
---|
364 | 348 | MODULE_DESCRIPTION("Apple Cinema Display driver"); |
---|
365 | 349 | MODULE_LICENSE("GPL"); |
---|
366 | | - |
---|
367 | | -module_init(appledisplay_init); |
---|
368 | | -module_exit(appledisplay_exit); |
---|