hc
2024-09-20 cf4ce59b3b70238352c7f1729f0f7223214828ad
kernel/sound/usb/usx2y/usbusx2y.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * usbusy2y.c - ALSA USB US-428 Driver
34 *
....@@ -16,7 +17,7 @@
1617
1718 2004-10-26 Karsten Wiese
1819 Version 0.8.6:
19
- wake_up() process waiting in usX2Y_urbs_start() on error.
20
+ wake_up() process waiting in usx2y_urbs_start() on error.
2021
2122 2004-10-21 Karsten Wiese
2223 Version 0.8.5:
....@@ -47,7 +48,7 @@
4748 2004-06-12 Karsten Wiese
4849 Version 0.6.3:
4950 Made it thus the following rule is enforced:
50
- "All pcm substreams of one usX2Y have to operate at the same rate & format."
51
+ "All pcm substreams of one usx2y have to operate at the same rate & format."
5152
5253 2004-04-06 Karsten Wiese
5354 Version 0.6.0:
....@@ -114,20 +115,6 @@
114115 The firmware has been sniffed from win2k us-428 driver 3.09.
115116
116117 * Copyright (c) 2002 - 2004 Karsten Wiese
117
- *
118
- * This program is free software; you can redistribute it and/or modify
119
- * it under the terms of the GNU General Public License as published by
120
- * the Free Software Foundation; either version 2 of the License, or
121
- * (at your option) any later version.
122
- *
123
- * This program is distributed in the hope that it will be useful,
124
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
125
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
126
- * GNU General Public License for more details.
127
- *
128
- * You should have received a copy of the GNU General Public License
129
- * along with this program; if not, write to the Free Software
130
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
131118 */
132119
133120 #include <linux/init.h>
....@@ -164,163 +151,161 @@
164151 MODULE_PARM_DESC(enable, "Enable "NAME_ALLCAPS".");
165152
166153
167
-static int snd_usX2Y_card_used[SNDRV_CARDS];
154
+static int snd_usx2y_card_used[SNDRV_CARDS];
168155
169
-static void usX2Y_usb_disconnect(struct usb_device* usb_device, void* ptr);
170
-static void snd_usX2Y_card_private_free(struct snd_card *card);
156
+static void usx2y_usb_disconnect(struct usb_device* usb_device, void* ptr);
157
+static void snd_usx2y_card_private_free(struct snd_card *card);
171158
172159 /*
173160 * pipe 4 is used for switching the lamps, setting samplerate, volumes ....
174161 */
175
-static void i_usX2Y_Out04Int(struct urb *urb)
162
+static void i_usx2y_out04_int(struct urb *urb)
176163 {
177164 #ifdef CONFIG_SND_DEBUG
178165 if (urb->status) {
179166 int i;
180
- struct usX2Ydev *usX2Y = urb->context;
181
- for (i = 0; i < 10 && usX2Y->AS04.urb[i] != urb; i++);
182
- snd_printdd("i_usX2Y_Out04Int() urb %i status=%i\n", i, urb->status);
167
+ struct usx2ydev *usx2y = urb->context;
168
+ for (i = 0; i < 10 && usx2y->as04.urb[i] != urb; i++);
169
+ snd_printdd("i_usx2y_out04_int() urb %i status=%i\n", i, urb->status);
183170 }
184171 #endif
185172 }
186173
187
-static void i_usX2Y_In04Int(struct urb *urb)
174
+static void i_usx2y_in04_int(struct urb *urb)
188175 {
189176 int err = 0;
190
- struct usX2Ydev *usX2Y = urb->context;
191
- struct us428ctls_sharedmem *us428ctls = usX2Y->us428ctls_sharedmem;
177
+ struct usx2ydev *usx2y = urb->context;
178
+ struct us428ctls_sharedmem *us428ctls = usx2y->us428ctls_sharedmem;
192179
193
- usX2Y->In04IntCalls++;
180
+ usx2y->in04_int_calls++;
194181
195182 if (urb->status) {
196183 snd_printdd("Interrupt Pipe 4 came back with status=%i\n", urb->status);
197184 return;
198185 }
199186
200
- // printk("%i:0x%02X ", 8, (int)((unsigned char*)usX2Y->In04Buf)[8]); Master volume shows 0 here if fader is at max during boot ?!?
187
+ // printk("%i:0x%02X ", 8, (int)((unsigned char*)usx2y->in04_buf)[8]); Master volume shows 0 here if fader is at max during boot ?!?
201188 if (us428ctls) {
202189 int diff = -1;
203
- if (-2 == us428ctls->CtlSnapShotLast) {
190
+ if (-2 == us428ctls->ctl_snapshot_last) {
204191 diff = 0;
205
- memcpy(usX2Y->In04Last, usX2Y->In04Buf, sizeof(usX2Y->In04Last));
206
- us428ctls->CtlSnapShotLast = -1;
192
+ memcpy(usx2y->in04_last, usx2y->in04_buf, sizeof(usx2y->in04_last));
193
+ us428ctls->ctl_snapshot_last = -1;
207194 } else {
208195 int i;
209196 for (i = 0; i < 21; i++) {
210
- if (usX2Y->In04Last[i] != ((char*)usX2Y->In04Buf)[i]) {
197
+ if (usx2y->in04_last[i] != ((char*)usx2y->in04_buf)[i]) {
211198 if (diff < 0)
212199 diff = i;
213
- usX2Y->In04Last[i] = ((char*)usX2Y->In04Buf)[i];
200
+ usx2y->in04_last[i] = ((char*)usx2y->in04_buf)[i];
214201 }
215202 }
216203 }
217204 if (0 <= diff) {
218
- int n = us428ctls->CtlSnapShotLast + 1;
219
- if (n >= N_us428_ctl_BUFS || n < 0)
205
+ int n = us428ctls->ctl_snapshot_last + 1;
206
+ if (n >= N_US428_CTL_BUFS || n < 0)
220207 n = 0;
221
- memcpy(us428ctls->CtlSnapShot + n, usX2Y->In04Buf, sizeof(us428ctls->CtlSnapShot[0]));
222
- us428ctls->CtlSnapShotDiffersAt[n] = diff;
223
- us428ctls->CtlSnapShotLast = n;
224
- wake_up(&usX2Y->us428ctls_wait_queue_head);
208
+ memcpy(us428ctls->ctl_snapshot + n, usx2y->in04_buf, sizeof(us428ctls->ctl_snapshot[0]));
209
+ us428ctls->ctl_snapshot_differs_at[n] = diff;
210
+ us428ctls->ctl_snapshot_last = n;
211
+ wake_up(&usx2y->us428ctls_wait_queue_head);
225212 }
226213 }
227214
228215
229
- if (usX2Y->US04) {
230
- if (0 == usX2Y->US04->submitted)
216
+ if (usx2y->us04) {
217
+ if (0 == usx2y->us04->submitted)
231218 do {
232
- err = usb_submit_urb(usX2Y->US04->urb[usX2Y->US04->submitted++], GFP_ATOMIC);
233
- } while (!err && usX2Y->US04->submitted < usX2Y->US04->len);
219
+ err = usb_submit_urb(usx2y->us04->urb[usx2y->us04->submitted++], GFP_ATOMIC);
220
+ } while (!err && usx2y->us04->submitted < usx2y->us04->len);
234221 } else
235
- if (us428ctls && us428ctls->p4outLast >= 0 && us428ctls->p4outLast < N_us428_p4out_BUFS) {
236
- if (us428ctls->p4outLast != us428ctls->p4outSent) {
237
- int j, send = us428ctls->p4outSent + 1;
238
- if (send >= N_us428_p4out_BUFS)
222
+ if (us428ctls && us428ctls->p4out_last >= 0 && us428ctls->p4out_last < N_US428_P4OUT_BUFS) {
223
+ if (us428ctls->p4out_last != us428ctls->p4out_sent) {
224
+ int j, send = us428ctls->p4out_sent + 1;
225
+ if (send >= N_US428_P4OUT_BUFS)
239226 send = 0;
240
- for (j = 0; j < URBS_AsyncSeq && !err; ++j)
241
- if (0 == usX2Y->AS04.urb[j]->status) {
227
+ for (j = 0; j < URBS_ASYNC_SEQ && !err; ++j)
228
+ if (0 == usx2y->as04.urb[j]->status) {
242229 struct us428_p4out *p4out = us428ctls->p4out + send; // FIXME if more than 1 p4out is new, 1 gets lost.
243
- usb_fill_bulk_urb(usX2Y->AS04.urb[j], usX2Y->dev,
244
- usb_sndbulkpipe(usX2Y->dev, 0x04), &p4out->val.vol,
245
- p4out->type == eLT_Light ? sizeof(struct us428_lights) : 5,
246
- i_usX2Y_Out04Int, usX2Y);
247
- err = usb_submit_urb(usX2Y->AS04.urb[j], GFP_ATOMIC);
248
- us428ctls->p4outSent = send;
230
+ usb_fill_bulk_urb(usx2y->as04.urb[j], usx2y->dev,
231
+ usb_sndbulkpipe(usx2y->dev, 0x04), &p4out->val.vol,
232
+ p4out->type == ELT_LIGHT ? sizeof(struct us428_lights) : 5,
233
+ i_usx2y_out04_int, usx2y);
234
+ err = usb_submit_urb(usx2y->as04.urb[j], GFP_ATOMIC);
235
+ us428ctls->p4out_sent = send;
249236 break;
250237 }
251238 }
252239 }
253240
254241 if (err)
255
- snd_printk(KERN_ERR "In04Int() usb_submit_urb err=%i\n", err);
242
+ snd_printk(KERN_ERR "in04_int() usb_submit_urb err=%i\n", err);
256243
257
- urb->dev = usX2Y->dev;
244
+ urb->dev = usx2y->dev;
258245 usb_submit_urb(urb, GFP_ATOMIC);
259246 }
260247
261248 /*
262249 * Prepare some urbs
263250 */
264
-int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y)
251
+int usx2y_async_seq04_init(struct usx2ydev *usx2y)
265252 {
266253 int err = 0,
267254 i;
268255
269
- usX2Y->AS04.buffer = kmalloc_array(URBS_AsyncSeq,
270
- URB_DataLen_AsyncSeq, GFP_KERNEL);
271
- if (NULL == usX2Y->AS04.buffer) {
256
+ usx2y->as04.buffer = kmalloc_array(URBS_ASYNC_SEQ,
257
+ URB_DATA_LEN_ASYNC_SEQ, GFP_KERNEL);
258
+ if (NULL == usx2y->as04.buffer) {
272259 err = -ENOMEM;
273260 } else
274
- for (i = 0; i < URBS_AsyncSeq; ++i) {
275
- if (NULL == (usX2Y->AS04.urb[i] = usb_alloc_urb(0, GFP_KERNEL))) {
261
+ for (i = 0; i < URBS_ASYNC_SEQ; ++i) {
262
+ if (NULL == (usx2y->as04.urb[i] = usb_alloc_urb(0, GFP_KERNEL))) {
276263 err = -ENOMEM;
277264 break;
278265 }
279
- usb_fill_bulk_urb( usX2Y->AS04.urb[i], usX2Y->dev,
280
- usb_sndbulkpipe(usX2Y->dev, 0x04),
281
- usX2Y->AS04.buffer + URB_DataLen_AsyncSeq*i, 0,
282
- i_usX2Y_Out04Int, usX2Y
266
+ usb_fill_bulk_urb( usx2y->as04.urb[i], usx2y->dev,
267
+ usb_sndbulkpipe(usx2y->dev, 0x04),
268
+ usx2y->as04.buffer + URB_DATA_LEN_ASYNC_SEQ*i, 0,
269
+ i_usx2y_out04_int, usx2y
283270 );
284
- err = usb_urb_ep_type_check(usX2Y->AS04.urb[i]);
271
+ err = usb_urb_ep_type_check(usx2y->as04.urb[i]);
285272 if (err < 0)
286273 break;
287274 }
288275 return err;
289276 }
290277
291
-int usX2Y_In04_init(struct usX2Ydev *usX2Y)
278
+int usx2y_in04_init(struct usx2ydev *usx2y)
292279 {
293
- if (! (usX2Y->In04urb = usb_alloc_urb(0, GFP_KERNEL)))
280
+ if (! (usx2y->in04_urb = usb_alloc_urb(0, GFP_KERNEL)))
294281 return -ENOMEM;
295282
296
- if (! (usX2Y->In04Buf = kmalloc(21, GFP_KERNEL))) {
297
- usb_free_urb(usX2Y->In04urb);
283
+ if (! (usx2y->in04_buf = kmalloc(21, GFP_KERNEL)))
298284 return -ENOMEM;
299
- }
300285
301
- init_waitqueue_head(&usX2Y->In04WaitQueue);
302
- usb_fill_int_urb(usX2Y->In04urb, usX2Y->dev, usb_rcvintpipe(usX2Y->dev, 0x4),
303
- usX2Y->In04Buf, 21,
304
- i_usX2Y_In04Int, usX2Y,
286
+ init_waitqueue_head(&usx2y->in04_wait_queue);
287
+ usb_fill_int_urb(usx2y->in04_urb, usx2y->dev, usb_rcvintpipe(usx2y->dev, 0x4),
288
+ usx2y->in04_buf, 21,
289
+ i_usx2y_in04_int, usx2y,
305290 10);
306
- if (usb_urb_ep_type_check(usX2Y->In04urb))
291
+ if (usb_urb_ep_type_check(usx2y->in04_urb))
307292 return -EINVAL;
308
- return usb_submit_urb(usX2Y->In04urb, GFP_KERNEL);
293
+ return usb_submit_urb(usx2y->in04_urb, GFP_KERNEL);
309294 }
310295
311
-static void usX2Y_unlinkSeq(struct snd_usX2Y_AsyncSeq *S)
296
+static void usx2y_unlinkseq(struct snd_usx2y_async_seq *s)
312297 {
313298 int i;
314
- for (i = 0; i < URBS_AsyncSeq; ++i) {
315
- usb_kill_urb(S->urb[i]);
316
- usb_free_urb(S->urb[i]);
317
- S->urb[i] = NULL;
299
+ for (i = 0; i < URBS_ASYNC_SEQ; ++i) {
300
+ usb_kill_urb(s->urb[i]);
301
+ usb_free_urb(s->urb[i]);
302
+ s->urb[i] = NULL;
318303 }
319
- kfree(S->buffer);
304
+ kfree(s->buffer);
320305 }
321306
322307
323
-static const struct usb_device_id snd_usX2Y_usb_id_table[] = {
308
+static const struct usb_device_id snd_usx2y_usb_id_table[] = {
324309 {
325310 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
326311 .idVendor = 0x1604,
....@@ -339,7 +324,7 @@
339324 { /* terminator */ }
340325 };
341326
342
-static int usX2Y_create_card(struct usb_device *device,
327
+static int usx2y_create_card(struct usb_device *device,
343328 struct usb_interface *intf,
344329 struct snd_card **cardp)
345330 {
....@@ -348,20 +333,20 @@
348333 int err;
349334
350335 for (dev = 0; dev < SNDRV_CARDS; ++dev)
351
- if (enable[dev] && !snd_usX2Y_card_used[dev])
336
+ if (enable[dev] && !snd_usx2y_card_used[dev])
352337 break;
353338 if (dev >= SNDRV_CARDS)
354339 return -ENODEV;
355340 err = snd_card_new(&intf->dev, index[dev], id[dev], THIS_MODULE,
356
- sizeof(struct usX2Ydev), &card);
341
+ sizeof(struct usx2ydev), &card);
357342 if (err < 0)
358343 return err;
359
- snd_usX2Y_card_used[usX2Y(card)->card_index = dev] = 1;
360
- card->private_free = snd_usX2Y_card_private_free;
361
- usX2Y(card)->dev = device;
362
- init_waitqueue_head(&usX2Y(card)->prepare_wait_queue);
363
- mutex_init(&usX2Y(card)->pcm_mutex);
364
- INIT_LIST_HEAD(&usX2Y(card)->midi_list);
344
+ snd_usx2y_card_used[usx2y(card)->card_index = dev] = 1;
345
+ card->private_free = snd_usx2y_card_private_free;
346
+ usx2y(card)->dev = device;
347
+ init_waitqueue_head(&usx2y(card)->prepare_wait_queue);
348
+ mutex_init(&usx2y(card)->pcm_mutex);
349
+ INIT_LIST_HEAD(&usx2y(card)->midi_list);
365350 strcpy(card->driver, "USB "NAME_ALLCAPS"");
366351 sprintf(card->shortname, "TASCAM "NAME_ALLCAPS"");
367352 sprintf(card->longname, "%s (%x:%x if %d at %03d/%03d)",
....@@ -369,14 +354,14 @@
369354 le16_to_cpu(device->descriptor.idVendor),
370355 le16_to_cpu(device->descriptor.idProduct),
371356 0,//us428(card)->usbmidi.ifnum,
372
- usX2Y(card)->dev->bus->busnum, usX2Y(card)->dev->devnum
357
+ usx2y(card)->dev->bus->busnum, usx2y(card)->dev->devnum
373358 );
374359 *cardp = card;
375360 return 0;
376361 }
377362
378363
379
-static int usX2Y_usb_probe(struct usb_device *device,
364
+static int usx2y_usb_probe(struct usb_device *device,
380365 struct usb_interface *intf,
381366 const struct usb_device_id *device_id,
382367 struct snd_card **cardp)
....@@ -391,10 +376,10 @@
391376 le16_to_cpu(device->descriptor.idProduct) != USB_ID_US428))
392377 return -EINVAL;
393378
394
- err = usX2Y_create_card(device, intf, &card);
379
+ err = usx2y_create_card(device, intf, &card);
395380 if (err < 0)
396381 return err;
397
- if ((err = usX2Y_hwdep_new(card, device)) < 0 ||
382
+ if ((err = usx2y_hwdep_new(card, device)) < 0 ||
398383 (err = snd_card_register(card)) < 0) {
399384 snd_card_free(card);
400385 return err;
....@@ -406,63 +391,64 @@
406391 /*
407392 * new 2.5 USB kernel API
408393 */
409
-static int snd_usX2Y_probe(struct usb_interface *intf, const struct usb_device_id *id)
394
+static int snd_usx2y_probe(struct usb_interface *intf, const struct usb_device_id *id)
410395 {
411396 struct snd_card *card;
412397 int err;
413398
414
- err = usX2Y_usb_probe(interface_to_usbdev(intf), intf, id, &card);
399
+ err = usx2y_usb_probe(interface_to_usbdev(intf), intf, id, &card);
415400 if (err < 0)
416401 return err;
417402 dev_set_drvdata(&intf->dev, card);
418403 return 0;
419404 }
420405
421
-static void snd_usX2Y_disconnect(struct usb_interface *intf)
406
+static void snd_usx2y_disconnect(struct usb_interface *intf)
422407 {
423
- usX2Y_usb_disconnect(interface_to_usbdev(intf),
408
+ usx2y_usb_disconnect(interface_to_usbdev(intf),
424409 usb_get_intfdata(intf));
425410 }
426411
427
-MODULE_DEVICE_TABLE(usb, snd_usX2Y_usb_id_table);
428
-static struct usb_driver snd_usX2Y_usb_driver = {
412
+MODULE_DEVICE_TABLE(usb, snd_usx2y_usb_id_table);
413
+static struct usb_driver snd_usx2y_usb_driver = {
429414 .name = "snd-usb-usx2y",
430
- .probe = snd_usX2Y_probe,
431
- .disconnect = snd_usX2Y_disconnect,
432
- .id_table = snd_usX2Y_usb_id_table,
415
+ .probe = snd_usx2y_probe,
416
+ .disconnect = snd_usx2y_disconnect,
417
+ .id_table = snd_usx2y_usb_id_table,
433418 };
434419
435
-static void snd_usX2Y_card_private_free(struct snd_card *card)
420
+static void snd_usx2y_card_private_free(struct snd_card *card)
436421 {
437
- kfree(usX2Y(card)->In04Buf);
438
- usb_free_urb(usX2Y(card)->In04urb);
439
- if (usX2Y(card)->us428ctls_sharedmem)
440
- snd_free_pages(usX2Y(card)->us428ctls_sharedmem, sizeof(*usX2Y(card)->us428ctls_sharedmem));
441
- if (usX2Y(card)->card_index >= 0 && usX2Y(card)->card_index < SNDRV_CARDS)
442
- snd_usX2Y_card_used[usX2Y(card)->card_index] = 0;
422
+ kfree(usx2y(card)->in04_buf);
423
+ usb_free_urb(usx2y(card)->in04_urb);
424
+ if (usx2y(card)->us428ctls_sharedmem)
425
+ free_pages_exact(usx2y(card)->us428ctls_sharedmem,
426
+ sizeof(*usx2y(card)->us428ctls_sharedmem));
427
+ if (usx2y(card)->card_index >= 0 && usx2y(card)->card_index < SNDRV_CARDS)
428
+ snd_usx2y_card_used[usx2y(card)->card_index] = 0;
443429 }
444430
445431 /*
446432 * Frees the device.
447433 */
448
-static void usX2Y_usb_disconnect(struct usb_device *device, void* ptr)
434
+static void usx2y_usb_disconnect(struct usb_device *device, void* ptr)
449435 {
450436 if (ptr) {
451437 struct snd_card *card = ptr;
452
- struct usX2Ydev *usX2Y = usX2Y(card);
438
+ struct usx2ydev *usx2y = usx2y(card);
453439 struct list_head *p;
454
- usX2Y->chip_status = USX2Y_STAT_CHIP_HUP;
455
- usX2Y_unlinkSeq(&usX2Y->AS04);
456
- usb_kill_urb(usX2Y->In04urb);
440
+ usx2y->chip_status = USX2Y_STAT_CHIP_HUP;
441
+ usx2y_unlinkseq(&usx2y->as04);
442
+ usb_kill_urb(usx2y->in04_urb);
457443 snd_card_disconnect(card);
458444 /* release the midi resources */
459
- list_for_each(p, &usX2Y->midi_list) {
445
+ list_for_each(p, &usx2y->midi_list) {
460446 snd_usbmidi_disconnect(p);
461447 }
462
- if (usX2Y->us428ctls_sharedmem)
463
- wake_up(&usX2Y->us428ctls_wait_queue_head);
448
+ if (usx2y->us428ctls_sharedmem)
449
+ wake_up(&usx2y->us428ctls_wait_queue_head);
464450 snd_card_free(card);
465451 }
466452 }
467453
468
-module_usb_driver(snd_usX2Y_usb_driver);
454
+module_usb_driver(snd_usx2y_usb_driver);