50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0
 | |
|  *
 | |
|  * linux/sound/sdw.h -- SoundWire helpers for ALSA/ASoC
 | |
|  *
 | |
|  * Copyright (c) 2022 Cirrus Logic Inc.
 | |
|  *
 | |
|  * Author: Charles Keepax <ckeepax@opensource.cirrus.com>
 | |
|  */
 | |
| 
 | |
| #include <linux/soundwire/sdw.h>
 | |
| #include <sound/asound.h>
 | |
| #include <sound/pcm.h>
 | |
| #include <sound/pcm_params.h>
 | |
| 
 | |
| #ifndef __INCLUDE_SOUND_SDW_H
 | |
| #define __INCLUDE_SOUND_SDW_H
 | |
| 
 | |
| /**
 | |
|  * snd_sdw_params_to_config() - Conversion from hw_params to SoundWire config
 | |
|  *
 | |
|  * @substream: Pointer to the PCM substream structure
 | |
|  * @params: Pointer to the hardware params structure
 | |
|  * @stream_config: Stream configuration for the SoundWire audio stream
 | |
|  * @port_config: Port configuration for the SoundWire audio stream
 | |
|  *
 | |
|  * This function provides a basic conversion from the hw_params structure to
 | |
|  * SoundWire configuration structures. The user will at a minimum need to also
 | |
|  * set the port number in the port config, but may also override more of the
 | |
|  * setup, or in the case of a complex user, not use this helper at all and
 | |
|  * open-code everything.
 | |
|  */
 | |
| static inline void snd_sdw_params_to_config(struct snd_pcm_substream *substream,
 | |
| 					    struct snd_pcm_hw_params *params,
 | |
| 					    struct sdw_stream_config *stream_config,
 | |
| 					    struct sdw_port_config *port_config)
 | |
| {
 | |
| 	stream_config->frame_rate = params_rate(params);
 | |
| 	stream_config->ch_count = params_channels(params);
 | |
| 	stream_config->bps = snd_pcm_format_width(params_format(params));
 | |
| 
 | |
| 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 | |
| 		stream_config->direction = SDW_DATA_DIR_RX;
 | |
| 	else
 | |
| 		stream_config->direction = SDW_DATA_DIR_TX;
 | |
| 
 | |
| 	port_config->ch_mask = GENMASK(stream_config->ch_count - 1, 0);
 | |
| }
 | |
| 
 | |
| #endif
 |