Linux Audio

Check our new training course

Loading...
v4.17
 
 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
30struct snd_sb_csp;
31
32/* indices for the known CSP programs */
33enum {
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 */
46struct 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 */
58struct 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
89int snd_sb_csp_new(struct snd_sb *chip, int device, struct snd_hwdep ** rhwdep);
90#endif /* __SOUND_SB16_CSP */
v6.8
 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
16struct snd_sb_csp;
17
18/* indices for the known CSP programs */
19enum {
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 */
32struct 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 */
44struct 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
75int snd_sb_csp_new(struct snd_sb *chip, int device, struct snd_hwdep ** rhwdep);
76#endif /* __SOUND_SB16_CSP */