serial-u16550.c (6bd0dd5f0ec67f654ebf95be8ef414afae1eecb7) | serial-u16550.c (45203832df2fa9e94ca0a249ddb20d2b077e58cc) |
---|---|
1/* 2 * serial.c 3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>, 4 * Isaku Yamahata <yamahata@private.email.ne.jp>, 5 * George Hansper <ghansper@apana.org.au>, 6 * Hannu Savolainen 7 * 8 * This code is based on the code from ALSA 0.5.9, but heavily rewritten. --- 227 unchanged lines hidden (view full) --- 236 && uart->midi_input[substream]) 237 snd_rawmidi_receive(uart->midi_input[substream], 238 &c, 1); 239 } else if ((uart->filemode & SERIAL_MODE_INPUT_OPEN) && 240 uart->midi_input[substream]) 241 snd_rawmidi_receive(uart->midi_input[substream], &c, 1); 242 243 if (status & UART_LSR_OE) | 1/* 2 * serial.c 3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>, 4 * Isaku Yamahata <yamahata@private.email.ne.jp>, 5 * George Hansper <ghansper@apana.org.au>, 6 * Hannu Savolainen 7 * 8 * This code is based on the code from ALSA 0.5.9, but heavily rewritten. --- 227 unchanged lines hidden (view full) --- 236 && uart->midi_input[substream]) 237 snd_rawmidi_receive(uart->midi_input[substream], 238 &c, 1); 239 } else if ((uart->filemode & SERIAL_MODE_INPUT_OPEN) && 240 uart->midi_input[substream]) 241 snd_rawmidi_receive(uart->midi_input[substream], &c, 1); 242 243 if (status & UART_LSR_OE) |
244 snd_printk("%s: Overrun on device at 0x%lx\n", | 244 snd_printk(KERN_WARNING 245 "%s: Overrun on device at 0x%lx\n", |
245 uart->rmidi->name, uart->base); 246 } 247 248 /* remember the last stream */ 249 uart->prev_in = substream; 250 251 /* no need of check SERIAL_MODE_OUTPUT_OPEN because if not, 252 buffer is never filled. */ --- 378 unchanged lines hidden (view full) --- 631 } else { 632 /* Cannot write (buffer empty) - 633 * put char in buffer */ 634 snd_uart16550_write_buffer(uart, midi_byte); 635 } 636 } 637 } else { 638 if (!snd_uart16550_write_buffer(uart, midi_byte)) { | 246 uart->rmidi->name, uart->base); 247 } 248 249 /* remember the last stream */ 250 uart->prev_in = substream; 251 252 /* no need of check SERIAL_MODE_OUTPUT_OPEN because if not, 253 buffer is never filled. */ --- 378 unchanged lines hidden (view full) --- 632 } else { 633 /* Cannot write (buffer empty) - 634 * put char in buffer */ 635 snd_uart16550_write_buffer(uart, midi_byte); 636 } 637 } 638 } else { 639 if (!snd_uart16550_write_buffer(uart, midi_byte)) { |
639 snd_printk("%s: Buffer overrun on device at 0x%lx\n", | 640 snd_printk(KERN_WARNING 641 "%s: Buffer overrun on device at 0x%lx\n", |
640 uart->rmidi->name, uart->base); 641 return 0; 642 } 643 } 644 645 return 1; 646} 647 --- 162 unchanged lines hidden (view full) --- 810 printk(KERN_ERR "no UART detected at 0x%lx\n", iobase); 811 snd_uart16550_free(uart); 812 return -ENODEV; 813 } 814 815 if (irq >= 0 && irq != SNDRV_AUTO_IRQ) { 816 if (request_irq(irq, snd_uart16550_interrupt, 817 IRQF_DISABLED, "Serial MIDI", uart)) { | 642 uart->rmidi->name, uart->base); 643 return 0; 644 } 645 } 646 647 return 1; 648} 649 --- 162 unchanged lines hidden (view full) --- 812 printk(KERN_ERR "no UART detected at 0x%lx\n", iobase); 813 snd_uart16550_free(uart); 814 return -ENODEV; 815 } 816 817 if (irq >= 0 && irq != SNDRV_AUTO_IRQ) { 818 if (request_irq(irq, snd_uart16550_interrupt, 819 IRQF_DISABLED, "Serial MIDI", uart)) { |
818 snd_printk("irq %d busy. Using Polling.\n", irq); | 820 snd_printk(KERN_WARNING 821 "irq %d busy. Using Polling.\n", irq); |
819 } else { 820 uart->irq = irq; 821 } 822 } 823 uart->divisor = base / speed; 824 uart->speed = base / (unsigned int)uart->divisor; 825 uart->speed_base = base; 826 uart->prev_out = -1; --- 87 unchanged lines hidden (view full) --- 914 break; 915 case SNDRV_SERIAL_MS124W_MB: 916 outs[dev] = 16; 917 ins[dev] = 1; 918 break; 919 case SNDRV_SERIAL_GENERIC: 920 break; 921 default: | 822 } else { 823 uart->irq = irq; 824 } 825 } 826 uart->divisor = base / speed; 827 uart->speed = base / (unsigned int)uart->divisor; 828 uart->speed_base = base; 829 uart->prev_out = -1; --- 87 unchanged lines hidden (view full) --- 917 break; 918 case SNDRV_SERIAL_MS124W_MB: 919 outs[dev] = 16; 920 ins[dev] = 1; 921 break; 922 case SNDRV_SERIAL_GENERIC: 923 break; 924 default: |
922 snd_printk("Adaptor type is out of range 0-%d (%d)\n", | 925 snd_printk(KERN_ERR 926 "Adaptor type is out of range 0-%d (%d)\n", |
923 SNDRV_SERIAL_MAX_ADAPTOR, adaptor[dev]); 924 return -ENODEV; 925 } 926 927 if (outs[dev] < 1 || outs[dev] > SNDRV_SERIAL_MAX_OUTS) { | 927 SNDRV_SERIAL_MAX_ADAPTOR, adaptor[dev]); 928 return -ENODEV; 929 } 930 931 if (outs[dev] < 1 || outs[dev] > SNDRV_SERIAL_MAX_OUTS) { |
928 snd_printk("Count of outputs is out of range 1-%d (%d)\n", | 932 snd_printk(KERN_ERR 933 "Count of outputs is out of range 1-%d (%d)\n", |
929 SNDRV_SERIAL_MAX_OUTS, outs[dev]); 930 return -ENODEV; 931 } 932 933 if (ins[dev] < 1 || ins[dev] > SNDRV_SERIAL_MAX_INS) { | 934 SNDRV_SERIAL_MAX_OUTS, outs[dev]); 935 return -ENODEV; 936 } 937 938 if (ins[dev] < 1 || ins[dev] > SNDRV_SERIAL_MAX_INS) { |
934 snd_printk("Count of inputs is out of range 1-%d (%d)\n", | 939 snd_printk(KERN_ERR 940 "Count of inputs is out of range 1-%d (%d)\n", |
935 SNDRV_SERIAL_MAX_INS, ins[dev]); 936 return -ENODEV; 937 } 938 | 941 SNDRV_SERIAL_MAX_INS, ins[dev]); 942 return -ENODEV; 943 } 944 |
939 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); 940 if (err < 0) 941 return err; | 945 card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); 946 if (card == NULL) 947 return -ENOMEM; |
942 943 strcpy(card->driver, "Serial"); 944 strcpy(card->shortname, "Serial MIDI (UART16550A)"); 945 946 if ((err = snd_uart16550_create(card, 947 port[dev], 948 irq[dev], 949 speed[dev], --- 100 unchanged lines hidden --- | 948 949 strcpy(card->driver, "Serial"); 950 strcpy(card->shortname, "Serial MIDI (UART16550A)"); 951 952 if ((err = snd_uart16550_create(card, 953 port[dev], 954 irq[dev], 955 speed[dev], --- 100 unchanged lines hidden --- |