Commit 7e6d24d9 authored by Takashi Iwai's avatar Takashi Iwai Committed by Greg Kroah-Hartman
Browse files

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: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20191210141356.18074-2-tiwai@suse.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0988161a
Loading
Loading
Loading
Loading
+1 −43
Original line number Diff line number Diff line
@@ -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;