1 /* 2 * Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si> 3 * Takashi Iwai <tiwai@suse.de> 4 * 5 * SB16ASP/AWE32 CSP control 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * 21 */ 22 #ifndef __SOUND_SB16_CSP_H 23 #define __SOUND_SB16_CSP_H 24 25 #include <sound/sb.h> 26 #include <sound/hwdep.h> 27 #include <linux/firmware.h> 28 #include <uapi/sound/sb16_csp.h> 29 30 struct snd_sb_csp; 31 32 /* indices for the known CSP programs */ 33 enum { 34 CSP_PROGRAM_MULAW, 35 CSP_PROGRAM_ALAW, 36 CSP_PROGRAM_ADPCM_INIT, 37 CSP_PROGRAM_ADPCM_PLAYBACK, 38 CSP_PROGRAM_ADPCM_CAPTURE, 39 40 CSP_PROGRAM_COUNT 41 }; 42 43 /* 44 * CSP operators 45 */ 46 struct snd_sb_csp_ops { 47 int (*csp_use) (struct snd_sb_csp * p); 48 int (*csp_unuse) (struct snd_sb_csp * p); 49 int (*csp_autoload) (struct snd_sb_csp * p, int pcm_sfmt, int play_rec_mode); 50 int (*csp_start) (struct snd_sb_csp * p, int sample_width, int channels); 51 int (*csp_stop) (struct snd_sb_csp * p); 52 int (*csp_qsound_transfer) (struct snd_sb_csp * p); 53 }; 54 55 /* 56 * CSP private data 57 */ 58 struct snd_sb_csp { 59 struct snd_sb *chip; /* SB16 DSP */ 60 int used; /* usage flag - exclusive */ 61 char codec_name[16]; /* name of codec */ 62 unsigned short func_nr; /* function number */ 63 unsigned int acc_format; /* accepted PCM formats */ 64 int acc_channels; /* accepted channels */ 65 int acc_width; /* accepted sample width */ 66 int acc_rates; /* accepted sample rates */ 67 int mode; /* MODE */ 68 int run_channels; /* current CSP channels */ 69 int run_width; /* current sample width */ 70 int version; /* CSP version (0x10 - 0x1f) */ 71 int running; /* running state */ 72 73 struct snd_sb_csp_ops ops; /* operators */ 74 75 spinlock_t q_lock; /* locking */ 76 int q_enabled; /* enabled flag */ 77 int qpos_left; /* left position */ 78 int qpos_right; /* right position */ 79 int qpos_changed; /* position changed flag */ 80 81 struct snd_kcontrol *qsound_switch; 82 struct snd_kcontrol *qsound_space; 83 84 struct mutex access_mutex; /* locking */ 85 86 const struct firmware *csp_programs[CSP_PROGRAM_COUNT]; 87 }; 88 89 int snd_sb_csp_new(struct snd_sb *chip, int device, struct snd_hwdep ** rhwdep); 90 #endif /* __SOUND_SB16_CSP */ 91