diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/sound/ac97_codec.h | 5 | ||||
| -rw-r--r-- | include/sound/hdspm.h | 179 | ||||
| -rw-r--r-- | include/sound/mixer_oss.h | 3 | ||||
| -rw-r--r-- | include/sound/pcm.h | 91 | ||||
| -rw-r--r-- | include/sound/version.h | 2 | 
5 files changed, 192 insertions, 88 deletions
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h index b602f475cdb..f1dcefe4532 100644 --- a/include/sound/ac97_codec.h +++ b/include/sound/ac97_codec.h @@ -96,6 +96,10 @@  #define AC97_FUNC_INFO		0x68	/* Function Information */  #define AC97_SENSE_INFO		0x6a	/* Sense Details */ +/* volume controls */ +#define AC97_MUTE_MASK_MONO	0x8000 +#define AC97_MUTE_MASK_STEREO	0x8080 +  /* slot allocation */  #define AC97_SLOT_TAG		0  #define AC97_SLOT_CMD_ADDR	1 @@ -138,6 +142,7 @@  #define AC97_BC_18BIT_ADC	0x0100	/* 18-bit ADC resolution */  #define AC97_BC_20BIT_ADC	0x0200	/* 20-bit ADC resolution */  #define AC97_BC_ADC_MASK	0x0300 +#define AC97_BC_3D_TECH_ID_MASK	0x7c00	/* Per-vendor ID of 3D enhancement */  /* general purpose */  #define AC97_GP_DRSS_MASK	0x0c00	/* double rate slot select */ diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h index 81990b2bcc9..1774ff5ff63 100644 --- a/include/sound/hdspm.h +++ b/include/sound/hdspm.h @@ -3,8 +3,8 @@  /*   *   Copyright (C) 2003 Winfried Ritsch (IEM)   *   based on hdsp.h from Thomas Charbonnel (thomas@undata.org) - *                       - *     + * + *   *   This program is free software; you can redistribute it and/or modify   *   it under the terms of the GNU General Public License as published by   *   the Free Software Foundation; either version 2 of the License, or @@ -23,50 +23,41 @@  /* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */  #define HDSPM_MAX_CHANNELS      64 -/* -------------------- IOCTL Peak/RMS Meters -------------------- */ - -/* peam rms level structure like we get from hardware  -   -   maybe in future we can memory map it so I just copy it -   to user on ioctl call now an dont change anything -   rms are made out of low and high values -   where (long) ????_rms = (????_rms_l >> 8) + ((????_rms_h & 0xFFFFFF00)<<24) -   (i asume so from the code) -*/ - -struct hdspm_peak_rms { +enum hdspm_io_type { +	MADI, +	MADIface, +	AIO, +	AES32, +	RayDAT +}; -	unsigned int level_offset[1024]; +enum hdspm_speed { +	ss, +	ds, +	qs +}; -	unsigned int input_peak[64]; -	unsigned int playback_peak[64]; -	unsigned int output_peak[64]; -	unsigned int xxx_peak[64];	/* not used */ +/* -------------------- IOCTL Peak/RMS Meters -------------------- */ -	unsigned int reserved[256];	/* not used */ +struct hdspm_peak_rms { +	uint32_t input_peaks[64]; +	uint32_t playback_peaks[64]; +	uint32_t output_peaks[64]; -	unsigned int input_rms_l[64]; -	unsigned int playback_rms_l[64]; -	unsigned int output_rms_l[64]; -	unsigned int xxx_rms_l[64];	/* not used */ +	uint64_t input_rms[64]; +	uint64_t playback_rms[64]; +	uint64_t output_rms[64]; -	unsigned int input_rms_h[64]; -	unsigned int playback_rms_h[64]; -	unsigned int output_rms_h[64]; -	unsigned int xxx_rms_h[64];	/* not used */ +	uint8_t speed; /* enum {ss, ds, qs} */ +	int status2;  }; -struct hdspm_peak_rms_ioctl { -	struct hdspm_peak_rms *peak; -}; - -/* use indirect access due to the limit of ioctl bit size */  #define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \ -	_IOR('H', 0x40, struct hdspm_peak_rms_ioctl) +	_IOR('H', 0x42, struct hdspm_peak_rms)  /* ------------ CONFIG block IOCTL ---------------------- */ -struct hdspm_config_info { +struct hdspm_config {  	unsigned char pref_sync_ref;  	unsigned char wordclock_sync_check;  	unsigned char madi_sync_check; @@ -80,18 +71,121 @@ struct hdspm_config_info {  	unsigned int analog_out;  }; -#define SNDRV_HDSPM_IOCTL_GET_CONFIG_INFO \ -	_IOR('H', 0x41, struct hdspm_config_info) +#define SNDRV_HDSPM_IOCTL_GET_CONFIG \ +	_IOR('H', 0x41, struct hdspm_config) + +/** + * If there's a TCO (TimeCode Option) board installed, + * there are further options and status data available. + * The hdspm_ltc structure contains the current SMPTE + * timecode and some status information and can be + * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the + * hdspm_status struct. + **/ + +enum hdspm_ltc_format { +	format_invalid, +	fps_24, +	fps_25, +	fps_2997, +	fps_30 +}; + +enum hdspm_ltc_frame { +	frame_invalid, +	drop_frame, +	full_frame +}; + +enum hdspm_ltc_input_format { +	ntsc, +	pal, +	no_video +}; + +struct hdspm_ltc { +	unsigned int ltc; +	enum hdspm_ltc_format format; +	enum hdspm_ltc_frame frame; +	enum hdspm_ltc_input_format input_format; +}; + +#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_mixer_ioctl) + +/** + * The status data reflects the device's current state + * as determined by the card's configuration and + * connection status. + **/ -/* get Soundcard Version */ +enum hdspm_sync { +	hdspm_sync_no_lock = 0, +	hdspm_sync_lock = 1, +	hdspm_sync_sync = 2 +}; + +enum hdspm_madi_input { +	hdspm_input_optical = 0, +	hdspm_input_coax = 1 +}; + +enum hdspm_madi_channel_format { +	hdspm_format_ch_64 = 0, +	hdspm_format_ch_56 = 1 +}; + +enum hdspm_madi_frame_format { +	hdspm_frame_48 = 0, +	hdspm_frame_96 = 1 +}; + +enum hdspm_syncsource { +	syncsource_wc = 0, +	syncsource_madi = 1, +	syncsource_tco = 2, +	syncsource_sync = 3, +	syncsource_none = 4 +}; + +struct hdspm_status { +	uint8_t card_type; /* enum hdspm_io_type */ +	enum hdspm_syncsource autosync_source; + +	uint64_t card_clock; +	uint32_t master_period; + +	union { +		struct { +			uint8_t sync_wc; /* enum hdspm_sync */ +			uint8_t sync_madi; /* enum hdspm_sync */ +			uint8_t sync_tco; /* enum hdspm_sync */ +			uint8_t sync_in; /* enum hdspm_sync */ +			uint8_t madi_input; /* enum hdspm_madi_input */ +			uint8_t channel_format; /* enum hdspm_madi_channel_format */ +			uint8_t frame_format; /* enum hdspm_madi_frame_format */ +		} madi; +	} card_specific; +}; + +#define SNDRV_HDSPM_IOCTL_GET_STATUS \ +	_IOR('H', 0x47, struct hdspm_status) + +/** + * Get information about the card and its add-ons. + **/ + +#define HDSPM_ADDON_TCO 1  struct hdspm_version { +	uint8_t card_type; /* enum hdspm_io_type */ +	char cardname[20]; +	unsigned int serial;  	unsigned short firmware_rev; +	int addons;  }; -#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdspm_version) - +#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)  /* ------------- get Matrix Mixer IOCTL --------------- */ @@ -103,7 +197,7 @@ struct hdspm_version {  /* equivalent to hardware definition, maybe for future feature of mmap of   * them   */ -/* each of 64 outputs has 64 infader and 64 outfader:  +/* each of 64 outputs has 64 infader and 64 outfader:     Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */  #define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS @@ -131,4 +225,5 @@ typedef struct hdspm_version hdspm_version_t;  typedef struct hdspm_channelfader snd_hdspm_channelfader_t;  typedef struct hdspm_mixer hdspm_mixer_t; -#endif				/* __SOUND_HDSPM_H */ + +#endif diff --git a/include/sound/mixer_oss.h b/include/sound/mixer_oss.h index 51fbcb4a277..13cb0b430a1 100644 --- a/include/sound/mixer_oss.h +++ b/include/sound/mixer_oss.h @@ -73,6 +73,9 @@ struct snd_mixer_oss_file {  	struct snd_mixer_oss *mixer;  }; +int snd_mixer_oss_ioctl_card(struct snd_card *card, +			     unsigned int cmd, unsigned long arg); +  #endif /* CONFIG_SND_MIXER_OSS */  #endif /* __SOUND_MIXER_OSS_H */ diff --git a/include/sound/pcm.h b/include/sound/pcm.h index e731f8d7193..430a9cc045e 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h @@ -136,48 +136,49 @@ struct snd_pcm_ops {  					 SNDRV_PCM_RATE_88200|SNDRV_PCM_RATE_96000)  #define SNDRV_PCM_RATE_8000_192000	(SNDRV_PCM_RATE_8000_96000|SNDRV_PCM_RATE_176400|\  					 SNDRV_PCM_RATE_192000) -#define SNDRV_PCM_FMTBIT_S8		(1ULL << SNDRV_PCM_FORMAT_S8) -#define SNDRV_PCM_FMTBIT_U8		(1ULL << SNDRV_PCM_FORMAT_U8) -#define SNDRV_PCM_FMTBIT_S16_LE		(1ULL << SNDRV_PCM_FORMAT_S16_LE) -#define SNDRV_PCM_FMTBIT_S16_BE		(1ULL << SNDRV_PCM_FORMAT_S16_BE) -#define SNDRV_PCM_FMTBIT_U16_LE		(1ULL << SNDRV_PCM_FORMAT_U16_LE) -#define SNDRV_PCM_FMTBIT_U16_BE		(1ULL << SNDRV_PCM_FORMAT_U16_BE) -#define SNDRV_PCM_FMTBIT_S24_LE		(1ULL << SNDRV_PCM_FORMAT_S24_LE) -#define SNDRV_PCM_FMTBIT_S24_BE		(1ULL << SNDRV_PCM_FORMAT_S24_BE) -#define SNDRV_PCM_FMTBIT_U24_LE		(1ULL << SNDRV_PCM_FORMAT_U24_LE) -#define SNDRV_PCM_FMTBIT_U24_BE		(1ULL << SNDRV_PCM_FORMAT_U24_BE) -#define SNDRV_PCM_FMTBIT_S32_LE		(1ULL << SNDRV_PCM_FORMAT_S32_LE) -#define SNDRV_PCM_FMTBIT_S32_BE		(1ULL << SNDRV_PCM_FORMAT_S32_BE) -#define SNDRV_PCM_FMTBIT_U32_LE		(1ULL << SNDRV_PCM_FORMAT_U32_LE) -#define SNDRV_PCM_FMTBIT_U32_BE		(1ULL << SNDRV_PCM_FORMAT_U32_BE) -#define SNDRV_PCM_FMTBIT_FLOAT_LE	(1ULL << SNDRV_PCM_FORMAT_FLOAT_LE) -#define SNDRV_PCM_FMTBIT_FLOAT_BE	(1ULL << SNDRV_PCM_FORMAT_FLOAT_BE) -#define SNDRV_PCM_FMTBIT_FLOAT64_LE	(1ULL << SNDRV_PCM_FORMAT_FLOAT64_LE) -#define SNDRV_PCM_FMTBIT_FLOAT64_BE	(1ULL << SNDRV_PCM_FORMAT_FLOAT64_BE) -#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE (1ULL << SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE) -#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE (1ULL << SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE) -#define SNDRV_PCM_FMTBIT_MU_LAW		(1ULL << SNDRV_PCM_FORMAT_MU_LAW) -#define SNDRV_PCM_FMTBIT_A_LAW		(1ULL << SNDRV_PCM_FORMAT_A_LAW) -#define SNDRV_PCM_FMTBIT_IMA_ADPCM	(1ULL << SNDRV_PCM_FORMAT_IMA_ADPCM) -#define SNDRV_PCM_FMTBIT_MPEG		(1ULL << SNDRV_PCM_FORMAT_MPEG) -#define SNDRV_PCM_FMTBIT_GSM		(1ULL << SNDRV_PCM_FORMAT_GSM) -#define SNDRV_PCM_FMTBIT_SPECIAL	(1ULL << SNDRV_PCM_FORMAT_SPECIAL) -#define SNDRV_PCM_FMTBIT_S24_3LE	(1ULL << SNDRV_PCM_FORMAT_S24_3LE) -#define SNDRV_PCM_FMTBIT_U24_3LE	(1ULL << SNDRV_PCM_FORMAT_U24_3LE) -#define SNDRV_PCM_FMTBIT_S24_3BE	(1ULL << SNDRV_PCM_FORMAT_S24_3BE) -#define SNDRV_PCM_FMTBIT_U24_3BE	(1ULL << SNDRV_PCM_FORMAT_U24_3BE) -#define SNDRV_PCM_FMTBIT_S20_3LE	(1ULL << SNDRV_PCM_FORMAT_S20_3LE) -#define SNDRV_PCM_FMTBIT_U20_3LE	(1ULL << SNDRV_PCM_FORMAT_U20_3LE) -#define SNDRV_PCM_FMTBIT_S20_3BE	(1ULL << SNDRV_PCM_FORMAT_S20_3BE) -#define SNDRV_PCM_FMTBIT_U20_3BE	(1ULL << SNDRV_PCM_FORMAT_U20_3BE) -#define SNDRV_PCM_FMTBIT_S18_3LE	(1ULL << SNDRV_PCM_FORMAT_S18_3LE) -#define SNDRV_PCM_FMTBIT_U18_3LE	(1ULL << SNDRV_PCM_FORMAT_U18_3LE) -#define SNDRV_PCM_FMTBIT_S18_3BE	(1ULL << SNDRV_PCM_FORMAT_S18_3BE) -#define SNDRV_PCM_FMTBIT_U18_3BE	(1ULL << SNDRV_PCM_FORMAT_U18_3BE) -#define SNDRV_PCM_FMTBIT_G723_24	(1ULL << SNDRV_PCM_FORMAT_G723_24) -#define SNDRV_PCM_FMTBIT_G723_24_1B	(1ULL << SNDRV_PCM_FORMAT_G723_24_1B) -#define SNDRV_PCM_FMTBIT_G723_40	(1ULL << SNDRV_PCM_FORMAT_G723_40) -#define SNDRV_PCM_FMTBIT_G723_40_1B	(1ULL << SNDRV_PCM_FORMAT_G723_40_1B) +#define _SNDRV_PCM_FMTBIT(fmt)		(1ULL << (__force int)SNDRV_PCM_FORMAT_##fmt) +#define SNDRV_PCM_FMTBIT_S8		_SNDRV_PCM_FMTBIT(S8) +#define SNDRV_PCM_FMTBIT_U8		_SNDRV_PCM_FMTBIT(U8) +#define SNDRV_PCM_FMTBIT_S16_LE		_SNDRV_PCM_FMTBIT(S16_LE) +#define SNDRV_PCM_FMTBIT_S16_BE		_SNDRV_PCM_FMTBIT(S16_BE) +#define SNDRV_PCM_FMTBIT_U16_LE		_SNDRV_PCM_FMTBIT(U16_LE) +#define SNDRV_PCM_FMTBIT_U16_BE		_SNDRV_PCM_FMTBIT(U16_BE) +#define SNDRV_PCM_FMTBIT_S24_LE		_SNDRV_PCM_FMTBIT(S24_LE) +#define SNDRV_PCM_FMTBIT_S24_BE		_SNDRV_PCM_FMTBIT(S24_BE) +#define SNDRV_PCM_FMTBIT_U24_LE		_SNDRV_PCM_FMTBIT(U24_LE) +#define SNDRV_PCM_FMTBIT_U24_BE		_SNDRV_PCM_FMTBIT(U24_BE) +#define SNDRV_PCM_FMTBIT_S32_LE		_SNDRV_PCM_FMTBIT(S32_LE) +#define SNDRV_PCM_FMTBIT_S32_BE		_SNDRV_PCM_FMTBIT(S32_BE) +#define SNDRV_PCM_FMTBIT_U32_LE		_SNDRV_PCM_FMTBIT(U32_LE) +#define SNDRV_PCM_FMTBIT_U32_BE		_SNDRV_PCM_FMTBIT(U32_BE) +#define SNDRV_PCM_FMTBIT_FLOAT_LE	_SNDRV_PCM_FMTBIT(FLOAT_LE) +#define SNDRV_PCM_FMTBIT_FLOAT_BE	_SNDRV_PCM_FMTBIT(FLOAT_BE) +#define SNDRV_PCM_FMTBIT_FLOAT64_LE	_SNDRV_PCM_FMTBIT(FLOAT64_LE) +#define SNDRV_PCM_FMTBIT_FLOAT64_BE	_SNDRV_PCM_FMTBIT(FLOAT64_BE) +#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE _SNDRV_PCM_FMTBIT(IEC958_SUBFRAME_LE) +#define SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE _SNDRV_PCM_FMTBIT(IEC958_SUBFRAME_BE) +#define SNDRV_PCM_FMTBIT_MU_LAW		_SNDRV_PCM_FMTBIT(MU_LAW) +#define SNDRV_PCM_FMTBIT_A_LAW		_SNDRV_PCM_FMTBIT(A_LAW) +#define SNDRV_PCM_FMTBIT_IMA_ADPCM	_SNDRV_PCM_FMTBIT(IMA_ADPCM) +#define SNDRV_PCM_FMTBIT_MPEG		_SNDRV_PCM_FMTBIT(MPEG) +#define SNDRV_PCM_FMTBIT_GSM		_SNDRV_PCM_FMTBIT(GSM) +#define SNDRV_PCM_FMTBIT_SPECIAL	_SNDRV_PCM_FMTBIT(SPECIAL) +#define SNDRV_PCM_FMTBIT_S24_3LE	_SNDRV_PCM_FMTBIT(S24_3LE) +#define SNDRV_PCM_FMTBIT_U24_3LE	_SNDRV_PCM_FMTBIT(U24_3LE) +#define SNDRV_PCM_FMTBIT_S24_3BE	_SNDRV_PCM_FMTBIT(S24_3BE) +#define SNDRV_PCM_FMTBIT_U24_3BE	_SNDRV_PCM_FMTBIT(U24_3BE) +#define SNDRV_PCM_FMTBIT_S20_3LE	_SNDRV_PCM_FMTBIT(S20_3LE) +#define SNDRV_PCM_FMTBIT_U20_3LE	_SNDRV_PCM_FMTBIT(U20_3LE) +#define SNDRV_PCM_FMTBIT_S20_3BE	_SNDRV_PCM_FMTBIT(S20_3BE) +#define SNDRV_PCM_FMTBIT_U20_3BE	_SNDRV_PCM_FMTBIT(U20_3BE) +#define SNDRV_PCM_FMTBIT_S18_3LE	_SNDRV_PCM_FMTBIT(S18_3LE) +#define SNDRV_PCM_FMTBIT_U18_3LE	_SNDRV_PCM_FMTBIT(U18_3LE) +#define SNDRV_PCM_FMTBIT_S18_3BE	_SNDRV_PCM_FMTBIT(S18_3BE) +#define SNDRV_PCM_FMTBIT_U18_3BE	_SNDRV_PCM_FMTBIT(U18_3BE) +#define SNDRV_PCM_FMTBIT_G723_24	_SNDRV_PCM_FMTBIT(G723_24) +#define SNDRV_PCM_FMTBIT_G723_24_1B	_SNDRV_PCM_FMTBIT(G723_24_1B) +#define SNDRV_PCM_FMTBIT_G723_40	_SNDRV_PCM_FMTBIT(G723_40) +#define SNDRV_PCM_FMTBIT_G723_40_1B	_SNDRV_PCM_FMTBIT(G723_40_1B)  #ifdef SNDRV_LITTLE_ENDIAN  #define SNDRV_PCM_FMTBIT_S16		SNDRV_PCM_FMTBIT_S16_LE @@ -490,7 +491,7 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream,  int snd_pcm_status(struct snd_pcm_substream *substream,  		   struct snd_pcm_status *status);  int snd_pcm_start(struct snd_pcm_substream *substream); -int snd_pcm_stop(struct snd_pcm_substream *substream, int status); +int snd_pcm_stop(struct snd_pcm_substream *substream, snd_pcm_state_t status);  int snd_pcm_drain_done(struct snd_pcm_substream *substream);  #ifdef CONFIG_PM  int snd_pcm_suspend(struct snd_pcm_substream *substream); @@ -748,8 +749,8 @@ static inline const struct snd_interval *hw_param_interval_c(const struct snd_pc  	return ¶ms->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL];  } -#define params_access(p) snd_mask_min(hw_param_mask((p), SNDRV_PCM_HW_PARAM_ACCESS)) -#define params_format(p) snd_mask_min(hw_param_mask((p), SNDRV_PCM_HW_PARAM_FORMAT)) +#define params_access(p) ((__force snd_pcm_access_t)snd_mask_min(hw_param_mask((p), SNDRV_PCM_HW_PARAM_ACCESS))) +#define params_format(p) ((__force snd_pcm_format_t)snd_mask_min(hw_param_mask((p), SNDRV_PCM_HW_PARAM_FORMAT)))  #define params_subformat(p) snd_mask_min(hw_param_mask((p), SNDRV_PCM_HW_PARAM_SUBFORMAT))  #define params_channels(p) hw_param_interval((p), SNDRV_PCM_HW_PARAM_CHANNELS)->min  #define params_rate(p) hw_param_interval((p), SNDRV_PCM_HW_PARAM_RATE)->min diff --git a/include/sound/version.h b/include/sound/version.h index bf69a5b7e65..8fc5321e1ec 100644 --- a/include/sound/version.h +++ b/include/sound/version.h @@ -1,3 +1,3 @@  /* include/version.h */ -#define CONFIG_SND_VERSION "1.0.23" +#define CONFIG_SND_VERSION "1.0.24"  #define CONFIG_SND_DATE ""  |