From 8a5afd29dc16a9e687f63195cb635ecd611482d0 Mon Sep 17 00:00:00 2001 From: James Courtier-Dutton Date: Thu, 20 Oct 2005 22:57:51 +0200 Subject: [ALSA] snd-ca0106: Add midi support. Modules: PCI drivers,CA0106 driver Author: Tilman Kranz Signed-off-by: James Courtier-Dutton --- sound/pci/ca0106/ca_midi.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 sound/pci/ca0106/ca_midi.h (limited to 'sound/pci/ca0106/ca_midi.h') diff --git a/sound/pci/ca0106/ca_midi.h b/sound/pci/ca0106/ca_midi.h new file mode 100644 index 000000000000..95c8e1c170b1 --- /dev/null +++ b/sound/pci/ca0106/ca_midi.h @@ -0,0 +1,72 @@ +/* + * Copyright 10/16/2005 Tilman Kranz + * Creative Audio MIDI, for the CA0106 Driver + * Version: 0.0.1 + * + * Changelog: + * See ca_midi.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include + +#define CA_MIDI_MODE_INPUT MPU401_MODE_INPUT +#define CA_MIDI_MODE_OUTPUT MPU401_MODE_OUTPUT + +typedef struct ca_midi ca_midi_t; +struct ca_midi { + + snd_rawmidi_t *rmidi; + snd_rawmidi_substream_t *substream_input; + snd_rawmidi_substream_t *substream_output; + + void *dev_id; + + spinlock_t input_lock; + spinlock_t output_lock; + spinlock_t open_lock; + + unsigned int channel; + + unsigned int midi_mode; + int port; + int tx_enable, rx_enable; + int ipr_tx, ipr_rx; + + int input_avail, output_ready; + int ack, reset, enter_uart; + + void (*interrupt)(ca_midi_t *midi, unsigned int status); + void (*interrupt_enable)(ca_midi_t *midi, int intr); + void (*interrupt_disable)(ca_midi_t *midi, int intr); + + unsigned char (*read)(ca_midi_t *midi, int idx); + void (*write)(ca_midi_t *midi, int data, int idx); + + /* get info from dev_id */ + snd_card_t *(*get_dev_id_card)(void *dev_id); + int (*get_dev_id_port)(void *dev_id); +}; + +void ca_midi_interrupt(ca_midi_t *midi, unsigned int status); + +int __devinit ca_midi_init(void *card, ca_midi_t *midi, int device, char *name); + +void ca_midi_free(ca_midi_t *midi); + -- cgit v1.2.3 From 7cf4783b31607ad13b84bed14ea2ca446364985a Mon Sep 17 00:00:00 2001 From: James Courtier-Dutton Date: Sat, 22 Oct 2005 11:45:55 +0200 Subject: [ALSA] ca0106: Cosmetic changes. Modules: CA0106 driver Just tidying up the code. Making more functions static. Signed-off-by: James Courtier-Dutton --- sound/pci/ca0106/ca0106_main.c | 30 +++++++++++++++--------------- sound/pci/ca0106/ca_midi.c | 4 ++-- sound/pci/ca0106/ca_midi.h | 3 --- 3 files changed, 17 insertions(+), 20 deletions(-) (limited to 'sound/pci/ca0106/ca_midi.h') diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index aaaef9e66af6..ee58d16002e5 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -1331,27 +1331,33 @@ static int __devinit snd_ca0106_create(snd_card_t *card, } -void ca0106_midi_interrupt_enable(ca_midi_t *midi, int intr){ +static void ca0106_midi_interrupt_enable(ca_midi_t *midi, int intr) +{ snd_ca0106_intr_enable((ca0106_t *)(midi->dev_id), intr); } -void ca0106_midi_interrupt_disable(ca_midi_t *midi, int intr){ +static void ca0106_midi_interrupt_disable(ca_midi_t *midi, int intr) +{ snd_ca0106_intr_disable((ca0106_t *)(midi->dev_id), intr); } -unsigned char ca0106_midi_read(ca_midi_t *midi, int idx){ +static unsigned char ca0106_midi_read(ca_midi_t *midi, int idx) +{ return (unsigned char)snd_ca0106_ptr_read((ca0106_t *)(midi->dev_id), midi->port + idx, 0); } -void ca0106_midi_write(ca_midi_t *midi, int data, int idx){ +static void ca0106_midi_write(ca_midi_t *midi, int data, int idx) +{ snd_ca0106_ptr_write((ca0106_t *)(midi->dev_id), midi->port + idx, 0, data); } -snd_card_t *ca0106_dev_id_card(void *dev_id){ +static snd_card_t *ca0106_dev_id_card(void *dev_id) +{ return ((ca0106_t *)dev_id)->card; } -int ca0106_dev_id_port(void *dev_id){ +static int ca0106_dev_id_port(void *dev_id) +{ return ((ca0106_t *)dev_id)->port; } @@ -1457,19 +1463,13 @@ static int __devinit snd_ca0106_probe(struct pci_dev *pci, return err; } -#ifdef CONFIG_SND_DEBUG_DETECT - printk("ca0106: probe for MIDI channel A ..."); -#endif + snd_printdd("ca0106: probe for MIDI channel A ..."); if ((err = snd_ca0106_midi(chip,CA0106_MIDI_CHAN_A)) < 0) { snd_card_free(card); -#ifdef CONFIG_SND_DEBUG_DETECT - printk(" failed, err=0x%x\n",err); -#endif + snd_printdd(" failed, err=0x%x\n",err); return err; } -#ifdef CONFIG_SND_DEBUG_DETECT - printk(" done.\n"); -#endif + snd_printdd(" done.\n"); snd_ca0106_proc_init(chip); diff --git a/sound/pci/ca0106/ca_midi.c b/sound/pci/ca0106/ca_midi.c index f439d14876b0..9cc0c67ace99 100644 --- a/sound/pci/ca0106/ca_midi.c +++ b/sound/pci/ca0106/ca_midi.c @@ -49,7 +49,7 @@ static void ca_midi_clear_rx(ca_midi_t *midi) #endif } -void ca_midi_interrupt(ca_midi_t *midi, unsigned int status) { +static void ca_midi_interrupt(ca_midi_t *midi, unsigned int status) { unsigned char byte; if (midi->rmidi == NULL) { @@ -258,7 +258,7 @@ static snd_rawmidi_ops_t ca_midi_input = .trigger = ca_midi_input_trigger, }; -void ca_midi_free(ca_midi_t *midi) { +static void ca_midi_free(ca_midi_t *midi) { midi->interrupt = NULL; midi->interrupt_enable = NULL; midi->interrupt_disable = NULL; diff --git a/sound/pci/ca0106/ca_midi.h b/sound/pci/ca0106/ca_midi.h index 95c8e1c170b1..b452cec2bf57 100644 --- a/sound/pci/ca0106/ca_midi.h +++ b/sound/pci/ca0106/ca_midi.h @@ -64,9 +64,6 @@ struct ca_midi { int (*get_dev_id_port)(void *dev_id); }; -void ca_midi_interrupt(ca_midi_t *midi, unsigned int status); - int __devinit ca_midi_init(void *card, ca_midi_t *midi, int device, char *name); -void ca_midi_free(ca_midi_t *midi); -- cgit v1.2.3