~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/isa/sb/emu8000_synth.c

Version: ~ [ linux-5.12-rc1 ] ~ [ linux-5.11.2 ] ~ [ linux-5.10.19 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.101 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.177 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.222 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.258 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.258 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
  3  *     and (c) 1999 Steve Ratcliffe <steve@parabola.demon.co.uk>
  4  *  Copyright (C) 1999-2000 Takashi Iwai <tiwai@suse.de>
  5  *
  6  *  Emu8000 synth plug-in routine
  7  *
  8  *   This program is free software; you can redistribute it and/or modify
  9  *   it under the terms of the GNU General Public License as published by
 10  *   the Free Software Foundation; either version 2 of the License, or
 11  *   (at your option) any later version.
 12  *
 13  *   This program is distributed in the hope that it will be useful,
 14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16  *   GNU General Public License for more details.
 17  *
 18  *   You should have received a copy of the GNU General Public License
 19  *   along with this program; if not, write to the Free Software
 20  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 21  */
 22 
 23 #include "emu8000_local.h"
 24 #include <linux/init.h>
 25 #include <linux/module.h>
 26 #include <sound/initval.h>
 27 
 28 MODULE_AUTHOR("Takashi Iwai, Steve Ratcliffe");
 29 MODULE_DESCRIPTION("Emu8000 synth plug-in routine");
 30 MODULE_LICENSE("GPL");
 31 
 32 /*----------------------------------------------------------------*/
 33 
 34 /*
 35  * create a new hardware dependent device for Emu8000
 36  */
 37 static int snd_emu8000_probe(struct device *_dev)
 38 {
 39         struct snd_seq_device *dev = to_seq_dev(_dev);
 40         struct snd_emu8000 *hw;
 41         struct snd_emux *emu;
 42 
 43         hw = *(struct snd_emu8000**)SNDRV_SEQ_DEVICE_ARGPTR(dev);
 44         if (hw == NULL)
 45                 return -EINVAL;
 46 
 47         if (hw->emu)
 48                 return -EBUSY; /* already exists..? */
 49 
 50         if (snd_emux_new(&emu) < 0)
 51                 return -ENOMEM;
 52 
 53         hw->emu = emu;
 54         snd_emu8000_ops_setup(hw);
 55 
 56         emu->hw = hw;
 57         emu->max_voices = EMU8000_DRAM_VOICES;
 58         emu->num_ports = hw->seq_ports;
 59 
 60         if (hw->memhdr) {
 61                 snd_printk(KERN_ERR "memhdr is already initialized!?\n");
 62                 snd_util_memhdr_free(hw->memhdr);
 63         }
 64         hw->memhdr = snd_util_memhdr_new(hw->mem_size);
 65         if (hw->memhdr == NULL) {
 66                 snd_emux_free(emu);
 67                 hw->emu = NULL;
 68                 return -ENOMEM;
 69         }
 70 
 71         emu->memhdr = hw->memhdr;
 72         emu->midi_ports = hw->seq_ports < 2 ? hw->seq_ports : 2; /* number of virmidi ports */
 73         emu->midi_devidx = 1;
 74         emu->linear_panning = 1;
 75         emu->hwdep_idx = 2; /* FIXED */
 76 
 77         if (snd_emux_register(emu, dev->card, hw->index, "Emu8000") < 0) {
 78                 snd_emux_free(emu);
 79                 snd_util_memhdr_free(hw->memhdr);
 80                 hw->emu = NULL;
 81                 hw->memhdr = NULL;
 82                 return -ENOMEM;
 83         }
 84 
 85         if (hw->mem_size > 0)
 86                 snd_emu8000_pcm_new(dev->card, hw, 1);
 87 
 88         dev->driver_data = hw;
 89 
 90         return 0;
 91 }
 92 
 93 
 94 /*
 95  * free all resources
 96  */
 97 static int snd_emu8000_remove(struct device *_dev)
 98 {
 99         struct snd_seq_device *dev = to_seq_dev(_dev);
100         struct snd_emu8000 *hw;
101 
102         if (dev->driver_data == NULL)
103                 return 0; /* no synth was allocated actually */
104 
105         hw = dev->driver_data;
106         if (hw->pcm)
107                 snd_device_free(dev->card, hw->pcm);
108         snd_emux_free(hw->emu);
109         snd_util_memhdr_free(hw->memhdr);
110         hw->emu = NULL;
111         hw->memhdr = NULL;
112         return 0;
113 }
114 
115 /*
116  *  INIT part
117  */
118 
119 static struct snd_seq_driver emu8000_driver = {
120         .driver = {
121                 .name = KBUILD_MODNAME,
122                 .probe = snd_emu8000_probe,
123                 .remove = snd_emu8000_remove,
124         },
125         .id = SNDRV_SEQ_DEV_ID_EMU8000,
126         .argsize = sizeof(struct snd_emu8000 *),
127 };
128 
129 module_snd_seq_driver(emu8000_driver);
130 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp