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 ---