| /* 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 |