Merge patch series "Putting some basic order on isa extension lists"
[platform/kernel/linux-rpi.git] / include / sound / sdw.h
1 /* SPDX-License-Identifier: GPL-2.0
2  *
3  * linux/sound/sdw.h -- SoundWire helpers for ALSA/ASoC
4  *
5  * Copyright (c) 2022 Cirrus Logic Inc.
6  *
7  * Author: Charles Keepax <ckeepax@opensource.cirrus.com>
8  */
9
10 #include <linux/soundwire/sdw.h>
11 #include <sound/asound.h>
12 #include <sound/pcm.h>
13 #include <sound/pcm_params.h>
14
15 #ifndef __INCLUDE_SOUND_SDW_H
16 #define __INCLUDE_SOUND_SDW_H
17
18 /**
19  * snd_sdw_params_to_config() - Conversion from hw_params to SoundWire config
20  *
21  * @substream: Pointer to the PCM substream structure
22  * @params: Pointer to the hardware params structure
23  * @stream_config: Stream configuration for the SoundWire audio stream
24  * @port_config: Port configuration for the SoundWire audio stream
25  *
26  * This function provides a basic conversion from the hw_params structure to
27  * SoundWire configuration structures. The user will at a minimum need to also
28  * set the port number in the port config, but may also override more of the
29  * setup, or in the case of a complex user, not use this helper at all and
30  * open-code everything.
31  */
32 static inline void snd_sdw_params_to_config(struct snd_pcm_substream *substream,
33                                             struct snd_pcm_hw_params *params,
34                                             struct sdw_stream_config *stream_config,
35                                             struct sdw_port_config *port_config)
36 {
37         stream_config->frame_rate = params_rate(params);
38         stream_config->ch_count = params_channels(params);
39         stream_config->bps = snd_pcm_format_width(params_format(params));
40
41         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
42                 stream_config->direction = SDW_DATA_DIR_RX;
43         else
44                 stream_config->direction = SDW_DATA_DIR_TX;
45
46         port_config->ch_mask = GENMASK(stream_config->ch_count - 1, 0);
47 }
48
49 #endif