mirror of https://gitee.com/openkylin/linux.git
staging: most: Use managed buffer allocation
Clean up the driver with the new managed buffer allocation API. Also remove the unnecessary checks of channels in hw_params callback as this is guaranteed by the hw constraints in anyway. After these cleanups, the hw_params and hw_free callbacks became empty, hence dropped. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20191210141356.18074-2-tiwai@suse.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0988161a98
commit
7e6d24d9bc
|
@ -322,45 +322,6 @@ static int pcm_close(struct snd_pcm_substream *substream)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* pcm_hw_params - implements hw_params callback function for PCM middle layer
|
||||
* @substream: sub-stream pointer
|
||||
* @hw_params: contains the hardware parameters set by the application
|
||||
*
|
||||
* This is called when the hardware parameters is set by the application, that
|
||||
* is, once when the buffer size, the period size, the format, etc. are defined
|
||||
* for the PCM substream. Many hardware setups should be done is this callback,
|
||||
* including the allocation of buffers.
|
||||
*
|
||||
* Returns 0 on success or error code otherwise.
|
||||
*/
|
||||
static int pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *hw_params)
|
||||
{
|
||||
struct channel *channel = substream->private_data;
|
||||
|
||||
if ((params_channels(hw_params) > channel->pcm_hardware.channels_max) ||
|
||||
(params_channels(hw_params) < channel->pcm_hardware.channels_min)) {
|
||||
pr_err("Requested number of channels not supported.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
|
||||
}
|
||||
|
||||
/**
|
||||
* pcm_hw_free - implements hw_free callback function for PCM middle layer
|
||||
* @substream: substream pointer
|
||||
*
|
||||
* This is called to release the resources allocated via hw_params.
|
||||
* This function will be always called before the close callback is called.
|
||||
*
|
||||
* Returns 0 on success or error code otherwise.
|
||||
*/
|
||||
static int pcm_hw_free(struct snd_pcm_substream *substream)
|
||||
{
|
||||
return snd_pcm_lib_free_pages(substream);
|
||||
}
|
||||
|
||||
/**
|
||||
* pcm_prepare - implements prepare callback function for PCM middle layer
|
||||
* @substream: substream pointer
|
||||
|
@ -463,8 +424,6 @@ static const struct snd_pcm_ops pcm_ops = {
|
|||
.open = pcm_open,
|
||||
.close = pcm_close,
|
||||
.ioctl = snd_pcm_lib_ioctl,
|
||||
.hw_params = pcm_hw_params,
|
||||
.hw_free = pcm_hw_free,
|
||||
.prepare = pcm_prepare,
|
||||
.trigger = pcm_trigger,
|
||||
.pointer = pcm_pointer,
|
||||
|
@ -661,8 +620,7 @@ static int audio_probe_channel(struct most_interface *iface, int channel_id,
|
|||
pcm->private_data = channel;
|
||||
strscpy(pcm->name, device_name, sizeof(pcm->name));
|
||||
snd_pcm_set_ops(pcm, direction, &pcm_ops);
|
||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
|
||||
NULL, 0, 0);
|
||||
snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue