2019-05-27 09:55:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-17 02:20:36 +04:00
/*
* Copyright ( c ) 1999 by Uros Bizjak < uros @ kss - loka . si >
* Takashi Iwai < tiwai @ suse . de >
*
* SB16ASP / AWE32 CSP control
*/
2012-10-09 12:49:13 +04:00
# ifndef __SOUND_SB16_CSP_H
# define __SOUND_SB16_CSP_H
2005-04-17 02:20:36 +04:00
2012-10-02 21:01:25 +04:00
# include <sound/sb.h>
# include <sound/hwdep.h>
2006-11-06 11:18:34 +03:00
# include <linux/firmware.h>
2012-10-09 12:49:13 +04:00
# include <uapi/sound/sb16_csp.h>
2005-04-17 02:20:36 +04:00
2005-11-17 16:34:36 +03:00
struct snd_sb_csp ;
2005-04-17 02:20:36 +04:00
2006-11-06 11:18:34 +03:00
/* indices for the known CSP programs */
enum {
CSP_PROGRAM_MULAW ,
CSP_PROGRAM_ALAW ,
CSP_PROGRAM_ADPCM_INIT ,
CSP_PROGRAM_ADPCM_PLAYBACK ,
CSP_PROGRAM_ADPCM_CAPTURE ,
CSP_PROGRAM_COUNT
} ;
2005-04-17 02:20:36 +04:00
/*
* CSP operators
*/
2005-11-17 16:34:36 +03:00
struct snd_sb_csp_ops {
int ( * csp_use ) ( struct snd_sb_csp * p ) ;
int ( * csp_unuse ) ( struct snd_sb_csp * p ) ;
2018-07-26 00:19:44 +03:00
int ( * csp_autoload ) ( struct snd_sb_csp * p , snd_pcm_format_t pcm_sfmt , int play_rec_mode ) ;
2005-11-17 16:34:36 +03:00
int ( * csp_start ) ( struct snd_sb_csp * p , int sample_width , int channels ) ;
int ( * csp_stop ) ( struct snd_sb_csp * p ) ;
int ( * csp_qsound_transfer ) ( struct snd_sb_csp * p ) ;
} ;
2005-04-17 02:20:36 +04:00
/*
* CSP private data
*/
struct snd_sb_csp {
2005-11-17 16:34:36 +03:00
struct snd_sb * chip ; /* SB16 DSP */
2005-04-17 02:20:36 +04:00
int used ; /* usage flag - exclusive */
char codec_name [ 16 ] ; /* name of codec */
unsigned short func_nr ; /* function number */
unsigned int acc_format ; /* accepted PCM formats */
int acc_channels ; /* accepted channels */
int acc_width ; /* accepted sample width */
int acc_rates ; /* accepted sample rates */
int mode ; /* MODE */
int run_channels ; /* current CSP channels */
int run_width ; /* current sample width */
int version ; /* CSP version (0x10 - 0x1f) */
int running ; /* running state */
2005-11-17 16:34:36 +03:00
struct snd_sb_csp_ops ops ; /* operators */
2005-04-17 02:20:36 +04:00
spinlock_t q_lock ; /* locking */
int q_enabled ; /* enabled flag */
int qpos_left ; /* left position */
int qpos_right ; /* right position */
int qpos_changed ; /* position changed flag */
2005-11-17 16:34:36 +03:00
struct snd_kcontrol * qsound_switch ;
struct snd_kcontrol * qsound_space ;
2005-04-17 02:20:36 +04:00
2006-01-16 18:33:08 +03:00
struct mutex access_mutex ; /* locking */
2006-11-06 11:18:34 +03:00
const struct firmware * csp_programs [ CSP_PROGRAM_COUNT ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-11-17 16:34:36 +03:00
int snd_sb_csp_new ( struct snd_sb * chip , int device , struct snd_hwdep * * rhwdep ) ;
2005-04-17 02:20:36 +04:00
# endif /* __SOUND_SB16_CSP */