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

TOMOYO Linux Cross Reference
Linux/sound/pci/emu10k1/emu10k1_synth.c

Version: ~ [ linux-5.16 ] ~ [ linux-5.15.13 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.90 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.170 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.224 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.261 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.296 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.298 ] ~ [ 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) 2000 Takashi Iwai <tiwai@suse.de>
  3  *
  4  *  Routines for control of EMU10K1 WaveTable synth
  5  *
  6  *   This program is free software; you can redistribute it and/or modify
  7  *   it under the terms of the GNU General Public License as published by
  8  *   the Free Software Foundation; either version 2 of the License, or
  9  *   (at your option) any later version.
 10  *
 11  *   This program is distributed in the hope that it will be useful,
 12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  *   GNU General Public License for more details.
 15  *
 16  *   You should have received a copy of the GNU General Public License
 17  *   along with this program; if not, write to the Free Software
 18  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 19  */
 20 
 21 #include "emu10k1_synth_local.h"
 22 #include <linux/init.h>
 23 #include <linux/module.h>
 24 
 25 MODULE_AUTHOR("Takashi Iwai");
 26 MODULE_DESCRIPTION("Routines for control of EMU10K1 WaveTable synth");
 27 MODULE_LICENSE("GPL");
 28 
 29 /*
 30  * create a new hardware dependent device for Emu10k1
 31  */
 32 static int snd_emu10k1_synth_new_device(struct snd_seq_device *dev)
 33 {
 34         struct snd_emux *emux;
 35         struct snd_emu10k1 *hw;
 36         struct snd_emu10k1_synth_arg *arg;
 37         unsigned long flags;
 38 
 39         arg = SNDRV_SEQ_DEVICE_ARGPTR(dev);
 40         if (arg == NULL)
 41                 return -EINVAL;
 42 
 43         if (arg->seq_ports <= 0)
 44                 return 0; /* nothing */
 45         if (arg->max_voices < 1)
 46                 arg->max_voices = 1;
 47         else if (arg->max_voices > 64)
 48                 arg->max_voices = 64;
 49 
 50         if (snd_emux_new(&emux) < 0)
 51                 return -ENOMEM;
 52 
 53         snd_emu10k1_ops_setup(emux);
 54         hw = arg->hwptr;
 55         emux->hw = hw;
 56         emux->max_voices = arg->max_voices;
 57         emux->num_ports = arg->seq_ports;
 58         emux->pitch_shift = -501;
 59         emux->memhdr = hw->memhdr;
 60         /* maximum two ports */
 61         emux->midi_ports = arg->seq_ports < 2 ? arg->seq_ports : 2;
 62         /* audigy has two external midis */
 63         emux->midi_devidx = hw->audigy ? 2 : 1;
 64         emux->linear_panning = 0;
 65         emux->hwdep_idx = 2; /* FIXED */
 66 
 67         if (snd_emux_register(emux, dev->card, arg->index, "Emu10k1") < 0) {
 68                 snd_emux_free(emux);
 69                 return -ENOMEM;
 70         }
 71 
 72         spin_lock_irqsave(&hw->voice_lock, flags);
 73         hw->synth = emux;
 74         hw->get_synth_voice = snd_emu10k1_synth_get_voice;
 75         spin_unlock_irqrestore(&hw->voice_lock, flags);
 76 
 77         dev->driver_data = emux;
 78 
 79         return 0;
 80 }
 81 
 82 static int snd_emu10k1_synth_delete_device(struct snd_seq_device *dev)
 83 {
 84         struct snd_emux *emux;
 85         struct snd_emu10k1 *hw;
 86         unsigned long flags;
 87 
 88         if (dev->driver_data == NULL)
 89                 return 0; /* not registered actually */
 90 
 91         emux = dev->driver_data;
 92 
 93         hw = emux->hw;
 94         spin_lock_irqsave(&hw->voice_lock, flags);
 95         hw->synth = NULL;
 96         hw->get_synth_voice = NULL;
 97         spin_unlock_irqrestore(&hw->voice_lock, flags);
 98 
 99         snd_emux_free(emux);
100         return 0;
101 }
102 
103 /*
104  *  INIT part
105  */
106 
107 static int __init alsa_emu10k1_synth_init(void)
108 {
109         
110         static struct snd_seq_dev_ops ops = {
111                 snd_emu10k1_synth_new_device,
112                 snd_emu10k1_synth_delete_device,
113         };
114         return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, &ops,
115                                               sizeof(struct snd_emu10k1_synth_arg));
116 }
117 
118 static void __exit alsa_emu10k1_synth_exit(void)
119 {
120         snd_seq_device_unregister_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH);
121 }
122 
123 module_init(alsa_emu10k1_synth_init)
124 module_exit(alsa_emu10k1_synth_exit)
125 

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