| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */
|
|---|
| 2 | /*
|
|---|
| 3 | * Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
|
|---|
| 4 | * Takashi Iwai <tiwai@suse.de>
|
|---|
| 5 | *
|
|---|
| 6 | * SB16ASP/AWE32 CSP control
|
|---|
| 7 | */
|
|---|
| 8 | #ifndef __SOUND_SB16_CSP_H
|
|---|
| 9 | #define __SOUND_SB16_CSP_H
|
|---|
| 10 |
|
|---|
| 11 | #include <sound/sb.h>
|
|---|
| 12 | #include <sound/hwdep.h>
|
|---|
| 13 | #include <linux/firmware.h>
|
|---|
| 14 | #include <uapi/sound/sb16_csp.h>
|
|---|
| 15 |
|
|---|
| 16 | struct snd_sb_csp;
|
|---|
| 17 |
|
|---|
| 18 | /* indices for the known CSP programs */
|
|---|
| 19 | enum {
|
|---|
| 20 | CSP_PROGRAM_MULAW,
|
|---|
| 21 | CSP_PROGRAM_ALAW,
|
|---|
| 22 | CSP_PROGRAM_ADPCM_INIT,
|
|---|
| 23 | CSP_PROGRAM_ADPCM_PLAYBACK,
|
|---|
| 24 | CSP_PROGRAM_ADPCM_CAPTURE,
|
|---|
| 25 |
|
|---|
| 26 | CSP_PROGRAM_COUNT
|
|---|
| 27 | };
|
|---|
| 28 |
|
|---|
| 29 | /*
|
|---|
| 30 | * CSP operators
|
|---|
| 31 | */
|
|---|
| 32 | struct snd_sb_csp_ops {
|
|---|
| 33 | int (*csp_use) (struct snd_sb_csp * p);
|
|---|
| 34 | int (*csp_unuse) (struct snd_sb_csp * p);
|
|---|
| 35 | int (*csp_autoload) (struct snd_sb_csp * p, snd_pcm_format_t pcm_sfmt, int play_rec_mode);
|
|---|
| 36 | int (*csp_start) (struct snd_sb_csp * p, int sample_width, int channels);
|
|---|
| 37 | int (*csp_stop) (struct snd_sb_csp * p);
|
|---|
| 38 | int (*csp_qsound_transfer) (struct snd_sb_csp * p);
|
|---|
| 39 | };
|
|---|
| 40 |
|
|---|
| 41 | /*
|
|---|
| 42 | * CSP private data
|
|---|
| 43 | */
|
|---|
| 44 | struct snd_sb_csp {
|
|---|
| 45 | struct snd_sb *chip; /* SB16 DSP */
|
|---|
| 46 | int used; /* usage flag - exclusive */
|
|---|
| 47 | char codec_name[16]; /* name of codec */
|
|---|
| 48 | unsigned short func_nr; /* function number */
|
|---|
| 49 | unsigned int acc_format; /* accepted PCM formats */
|
|---|
| 50 | int acc_channels; /* accepted channels */
|
|---|
| 51 | int acc_width; /* accepted sample width */
|
|---|
| 52 | int acc_rates; /* accepted sample rates */
|
|---|
| 53 | int mode; /* MODE */
|
|---|
| 54 | int run_channels; /* current CSP channels */
|
|---|
| 55 | int run_width; /* current sample width */
|
|---|
| 56 | int version; /* CSP version (0x10 - 0x1f) */
|
|---|
| 57 | int running; /* running state */
|
|---|
| 58 |
|
|---|
| 59 | struct snd_sb_csp_ops ops; /* operators */
|
|---|
| 60 |
|
|---|
| 61 | spinlock_t q_lock; /* locking */
|
|---|
| 62 | int q_enabled; /* enabled flag */
|
|---|
| 63 | int qpos_left; /* left position */
|
|---|
| 64 | int qpos_right; /* right position */
|
|---|
| 65 | int qpos_changed; /* position changed flag */
|
|---|
| 66 |
|
|---|
| 67 | struct snd_kcontrol *qsound_switch;
|
|---|
| 68 | struct snd_kcontrol *qsound_space;
|
|---|
| 69 |
|
|---|
| 70 | struct mutex access_mutex; /* locking */
|
|---|
| 71 |
|
|---|
| 72 | const struct firmware *csp_programs[CSP_PROGRAM_COUNT];
|
|---|
| 73 | };
|
|---|
| 74 |
|
|---|
| 75 | int snd_sb_csp_new(struct snd_sb *chip, int device, struct snd_hwdep ** rhwdep);
|
|---|
| 76 | #endif /* __SOUND_SB16_CSP */
|
|---|