diff options
Diffstat (limited to 'sound/core/pcm_native.c')
| -rw-r--r-- | sound/core/pcm_native.c | 19 | 
1 files changed, 15 insertions, 4 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index f1646735bde6..704ea75199e4 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -178,6 +178,16 @@ void snd_pcm_stream_unlock_irqrestore(struct snd_pcm_substream *substream,  }  EXPORT_SYMBOL_GPL(snd_pcm_stream_unlock_irqrestore); +/* Run PCM ioctl ops */ +static int snd_pcm_ops_ioctl(struct snd_pcm_substream *substream, +			     unsigned cmd, void *arg) +{ +	if (substream->ops->ioctl) +		return substream->ops->ioctl(substream, cmd, arg); +	else +		return snd_pcm_lib_ioctl(substream, cmd, arg); +} +  int snd_pcm_info(struct snd_pcm_substream *substream, struct snd_pcm_info *info)  {  	struct snd_pcm *pcm = substream->pcm; @@ -448,8 +458,9 @@ static int fixup_unreferenced_params(struct snd_pcm_substream *substream,  		m = hw_param_mask_c(params, SNDRV_PCM_HW_PARAM_FORMAT);  		i = hw_param_interval_c(params, SNDRV_PCM_HW_PARAM_CHANNELS);  		if (snd_mask_single(m) && snd_interval_single(i)) { -			err = substream->ops->ioctl(substream, -					SNDRV_PCM_IOCTL1_FIFO_SIZE, params); +			err = snd_pcm_ops_ioctl(substream, +						SNDRV_PCM_IOCTL1_FIFO_SIZE, +						params);  			if (err < 0)  				return err;  		} @@ -971,7 +982,7 @@ static int snd_pcm_channel_info(struct snd_pcm_substream *substream,  		return -EINVAL;  	memset(info, 0, sizeof(*info));  	info->channel = channel; -	return substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_CHANNEL_INFO, info); +	return snd_pcm_ops_ioctl(substream, SNDRV_PCM_IOCTL1_CHANNEL_INFO, info);  }  static int snd_pcm_channel_info_user(struct snd_pcm_substream *substream, @@ -1647,7 +1658,7 @@ static int snd_pcm_pre_reset(struct snd_pcm_substream *substream, int state)  static int snd_pcm_do_reset(struct snd_pcm_substream *substream, int state)  {  	struct snd_pcm_runtime *runtime = substream->runtime; -	int err = substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_RESET, NULL); +	int err = snd_pcm_ops_ioctl(substream, SNDRV_PCM_IOCTL1_RESET, NULL);  	if (err < 0)  		return err;  	runtime->hw_ptr_base = 0;  | 
