Changeset 224 for GPL/branches/alsa-resync1/alsa-kernel/drivers/mtpav.c
- Timestamp:
- Jul 26, 2007, 7:21:09 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/branches/alsa-resync1/alsa-kernel/drivers/mtpav.c
r215 r224 52 52 53 53 #include <sound/driver.h> 54 #include <asm/io.h>55 54 #include <linux/init.h> 55 #include <linux/interrupt.h> 56 56 #include <linux/slab.h> 57 57 #include <linux/ioport.h> … … 61 61 #include <sound/rawmidi.h> 62 62 #include <linux/delay.h> 63 64 #include <asm/io.h> 63 65 64 66 /* … … 134 136 u8 hwport; 135 137 u8 mode; 138 u8 running_status; 136 139 snd_rawmidi_substream_t *input; 137 140 snd_rawmidi_substream_t *output; … … 204 207 static int translate_hwport_to_subdevice(mtpav_t *chip, int hwport) 205 208 { 206 int p ort;209 int p; 207 210 if (hwport <= 0x00) /* all ports */ 208 211 return chip->num_ports + MTPAV_PIDX_BROADCAST; 209 212 else if (hwport <= 0x08) { /* single port */ 210 p ort= hwport - 1;211 if (p ort>= chip->num_ports)212 p ort= 0;213 return p ort;213 p = hwport - 1; 214 if (p >= chip->num_ports) 215 p = 0; 216 return p; 214 217 } else if (hwport <= 0x10) { /* remote port */ 215 p ort= hwport - 0x09 + chip->num_ports;216 if (p ort>= chip->num_ports * 2)217 p ort= chip->num_ports;218 return p ort;218 p = hwport - 0x09 + chip->num_ports; 219 if (p >= chip->num_ports * 2) 220 p = chip->num_ports; 221 return p; 219 222 } else if (hwport == 0x11) /* computer port */ 220 223 return chip->num_ports + MTPAV_PIDX_COMPUTER; … … 300 303 u8 outbyte; 301 304 305 // Get the outbyte first, so we can emulate running status if 306 // necessary 307 if (snd_rawmidi_transmit(substream, &outbyte, 1) != 1) 308 return; 309 302 310 // send port change command if necessary 303 311 … … 309 317 //snd_printk("new outport: 0x%x\n", (unsigned int) port->hwport); 310 318 319 if (!(outbyte & 0x80) && port->running_status) 320 snd_mtpav_send_byte(mtp_card, port->running_status); 311 321 } 312 322 313 323 // send data 314 324 315 while (snd_rawmidi_transmit(substream, &outbyte, 1) == 1) 325 do { 326 if (outbyte & 0x80) 327 port->running_status = outbyte; 328 316 329 snd_mtpav_send_byte(mtp_card, outbyte); 330 } while (snd_rawmidi_transmit(substream, &outbyte, 1) == 1); 317 331 } 318 332 … … 334 348 static void snd_mtpav_portscan(mtpav_t *chip) // put mtp into smart routing mode 335 349 { 336 u8 p ort;337 338 for (p ort = 0; port < 8; port++) {350 u8 p; 351 352 for (p = 0; p < 8; p++) { 339 353 snd_mtpav_send_byte(chip, 0xf5); 340 snd_mtpav_send_byte(chip, p ort);354 snd_mtpav_send_byte(chip, p); 341 355 snd_mtpav_send_byte(chip, 0xfe); 342 356 } … … 349 363 { 350 364 unsigned long flags; 351 mtpav_port_t *port = &mtp_card->ports[substream->number];365 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 352 366 353 367 //printk("mtpav port: %d opened\n", (int) substream->number); 354 368 spin_lock_irqsave(&mtp_card->spinlock, flags); 355 port ->mode |= MTPAV_MODE_INPUT_OPENED;356 port ->input = substream;369 portp->mode |= MTPAV_MODE_INPUT_OPENED; 370 portp->input = substream; 357 371 if (mtp_card->share_irq++ == 0) 358 372 snd_mtpav_mputreg(mtp_card, CREG, (SIGC_INTEN | SIGC_WRITE)); // enable pport interrupts … … 367 381 { 368 382 unsigned long flags; 369 mtpav_port_t *port = &mtp_card->ports[substream->number];370 371 //printk("mtpav port: %d closed\n", (int) port );383 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 384 385 //printk("mtpav port: %d closed\n", (int) portp); 372 386 373 387 spin_lock_irqsave(&mtp_card->spinlock, flags); 374 388 375 port ->mode &= (~MTPAV_MODE_INPUT_OPENED);376 port ->input = NULL;389 portp->mode &= (~MTPAV_MODE_INPUT_OPENED); 390 portp->input = NULL; 377 391 if (--mtp_card->share_irq == 0) 378 392 snd_mtpav_mputreg(mtp_card, CREG, 0); // disable pport interrupts … … 388 402 { 389 403 unsigned long flags; 390 mtpav_port_t *port = &mtp_card->ports[substream->number];404 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 391 405 392 406 spin_lock_irqsave(&mtp_card->spinlock, flags); 393 407 if (up) 394 port ->mode |= MTPAV_MODE_INPUT_TRIGGERED;408 portp->mode |= MTPAV_MODE_INPUT_TRIGGERED; 395 409 else 396 port ->mode &= ~MTPAV_MODE_INPUT_TRIGGERED;410 portp->mode &= ~MTPAV_MODE_INPUT_TRIGGERED; 397 411 spin_unlock_irqrestore(&mtp_card->spinlock, flags); 398 412 … … 415 429 /* process each port */ 416 430 for (p = 0; p <= chip->num_ports * 2 + MTPAV_PIDX_BROADCAST; p++) { 417 mtpav_port_t *port = &mtp_card->ports[p];418 if ((port ->mode & MTPAV_MODE_OUTPUT_TRIGGERED) && port->output)419 snd_mtpav_output_port_write(port , port->output);431 mtpav_port_t *portp = &mtp_card->ports[p]; 432 if ((portp->mode & MTPAV_MODE_OUTPUT_TRIGGERED) && portp->output) 433 snd_mtpav_output_port_write(portp, portp->output); 420 434 } 421 435 spin_unlock(&chip->spinlock); … … 425 439 static void snd_mtpav_add_output_timer(mtpav_t *chip) 426 440 { 441 init_timer(&chip->timer); 427 442 chip->timer.function = snd_mtpav_output_timer; 428 443 chip->timer.data = (unsigned long) mtp_card; … … 443 458 { 444 459 unsigned long flags; 445 mtpav_port_t *port = &mtp_card->ports[substream->number];460 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 446 461 447 462 spin_lock_irqsave(&mtp_card->spinlock, flags); 448 port ->mode |= MTPAV_MODE_OUTPUT_OPENED;449 port ->output = substream;463 portp->mode |= MTPAV_MODE_OUTPUT_OPENED; 464 portp->output = substream; 450 465 spin_unlock_irqrestore(&mtp_card->spinlock, flags); 451 466 return 0; … … 458 473 { 459 474 unsigned long flags; 460 mtpav_port_t *port = &mtp_card->ports[substream->number];475 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 461 476 462 477 spin_lock_irqsave(&mtp_card->spinlock, flags); 463 port ->mode &= (~MTPAV_MODE_OUTPUT_OPENED);464 port ->output = NULL;478 portp->mode &= (~MTPAV_MODE_OUTPUT_OPENED); 479 portp->output = NULL; 465 480 spin_unlock_irqrestore(&mtp_card->spinlock, flags); 466 481 return 0; … … 473 488 { 474 489 unsigned long flags; 475 mtpav_port_t *port = &mtp_card->ports[substream->number];490 mtpav_port_t *portp = &mtp_card->ports[substream->number]; 476 491 477 492 spin_lock_irqsave(&mtp_card->spinlock, flags); 478 493 if (up) { 479 if (! (port ->mode & MTPAV_MODE_OUTPUT_TRIGGERED)) {494 if (! (portp->mode & MTPAV_MODE_OUTPUT_TRIGGERED)) { 480 495 if (mtp_card->istimer++ == 0) 481 496 snd_mtpav_add_output_timer(mtp_card); 482 port ->mode |= MTPAV_MODE_OUTPUT_TRIGGERED;497 portp->mode |= MTPAV_MODE_OUTPUT_TRIGGERED; 483 498 } 484 499 } else { 485 port ->mode &= ~MTPAV_MODE_OUTPUT_TRIGGERED;500 portp->mode &= ~MTPAV_MODE_OUTPUT_TRIGGERED; 486 501 if (--mtp_card->istimer == 0) 487 502 snd_mtpav_remove_output_timer(mtp_card); … … 499 514 static void snd_mtpav_inmidi_process(mtpav_t *mcrd, u8 inbyte) 500 515 { 501 mtpav_port_t *port ;502 503 if ( mcrd->inmidiport > mcrd->num_ports * 2 + MTPAV_PIDX_BROADCAST)516 mtpav_port_t *portp; 517 518 if ((int)mcrd->inmidiport > mcrd->num_ports * 2 + MTPAV_PIDX_BROADCAST) 504 519 return; 505 520 506 port = &mcrd->ports[mcrd->inmidiport];507 if (port ->mode & MTPAV_MODE_INPUT_TRIGGERED) {521 portp = &mcrd->ports[mcrd->inmidiport]; 522 if (portp->mode & MTPAV_MODE_INPUT_TRIGGERED) { 508 523 spin_unlock(&mcrd->spinlock); 509 snd_rawmidi_receive(port ->input, &inbyte, 1);524 snd_rawmidi_receive(portp->input, &inbyte, 1); 510 525 spin_lock(&mcrd->spinlock); 511 526 } … … 681 696 static mtpav_t *new_mtpav(void) 682 697 { 683 mtpav_t *ncrd = (mtpav_t *) snd_ kcalloc(sizeof(mtpav_t), GFP_KERNEL);698 mtpav_t *ncrd = (mtpav_t *) snd_magic_kcalloc(mtpav_t, 0, GFP_KERNEL); 684 699 if (ncrd != NULL) { 685 700 spin_lock_init(&ncrd->spinlock); … … 714 729 kfree_nocheck(crd->res_port); 715 730 } 716 if (crd != NULL) 717 kfree(crd); 731 snd_magic_kfree(crd); 718 732 } 719 733 … … 790 804 #ifndef MODULE 791 805 792 /* format is: snd-mtpav= snd_enable,index,id,806 /* format is: snd-mtpav=enable,index,id, 793 807 port,irq,hwports */ 794 808
Note:
See TracChangeset
for help on using the changeset viewer.
