Message ID | 20221121134608.3713033-2-ckeepax@opensource.cirrus.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/9] sound: sdw: Add hw_params to SoundWire config helper function | expand |
On 21/11/2022 13:46, Charles Keepax wrote: > The conversation from hw_params to SoundWire config is pretty s/conversation/conversion > standard as such most of the conversation can be handled by the new > snd_sdw_params_to_config helper function. > > Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> > --- > sound/soc/codecs/max98373-sdw.c | 31 +++++++++++-------------------- > 1 file changed, 11 insertions(+), 20 deletions(-) > > diff --git a/sound/soc/codecs/max98373-sdw.c b/sound/soc/codecs/max98373-sdw.c > index 899965b19d12d..3cd1be743d9ee 100644 > --- a/sound/soc/codecs/max98373-sdw.c > +++ b/sound/soc/codecs/max98373-sdw.c > @@ -10,6 +10,7 @@ > #include <linux/slab.h> > #include <sound/pcm.h> > #include <sound/pcm_params.h> > +#include <sound/sdw.h> > #include <sound/soc.h> > #include <sound/tlv.h> > #include <linux/of.h> > @@ -533,10 +534,8 @@ static int max98373_sdw_dai_hw_params(struct snd_pcm_substream *substream, > struct snd_soc_component *component = dai->component; > struct max98373_priv *max98373 = > snd_soc_component_get_drvdata(component); > - > - struct sdw_stream_config stream_config; > - struct sdw_port_config port_config; > - enum sdw_data_direction direction; > + struct sdw_stream_config stream_config = {0}; > + struct sdw_port_config port_config = {0}; > struct sdw_stream_data *stream; > int ret, chan_sz, sampling_rate; > > @@ -548,28 +547,20 @@ static int max98373_sdw_dai_hw_params(struct snd_pcm_substream *substream, > if (!max98373->slave) > return -EINVAL; > > + snd_sdw_params_to_config(substream, params, &stream_config, &port_config); > + > if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { > - direction = SDW_DATA_DIR_RX; > port_config.num = 1; > + > + if (max98373->slot) { > + stream_config.ch_count = max98373->slot; > + port_config.ch_mask = max98373->rx_mask; > + } > } else { > - direction = SDW_DATA_DIR_TX; > port_config.num = 3; > - } > > - stream_config.frame_rate = params_rate(params); > - stream_config.bps = snd_pcm_format_width(params_format(params)); > - stream_config.direction = direction; > - > - if (max98373->slot && direction == SDW_DATA_DIR_RX) { > - stream_config.ch_count = max98373->slot; > - port_config.ch_mask = max98373->rx_mask; > - } else { > /* only IV are supported by capture */ > - if (direction == SDW_DATA_DIR_TX) > - stream_config.ch_count = 2; Has this special case gone missing or is it already guaranteed by the DAI config? > - else > - stream_config.ch_count = params_channels(params); > - > + stream_config.ch_count = 2; > port_config.ch_mask = GENMASK((int)stream_config.ch_count - 1, 0); this is already done by snd_sdw_params_to_config()
On Mon, Nov 21, 2022 at 04:31:42PM +0000, Richard Fitzgerald wrote: > On 21/11/2022 13:46, Charles Keepax wrote: > >The conversation from hw_params to SoundWire config is pretty > s/conversation/conversion > lol oops thanks for that will resend to fix that up its the whole series. > > if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { > >- direction = SDW_DATA_DIR_RX; > > port_config.num = 1; > >+ > >+ if (max98373->slot) { > >+ stream_config.ch_count = max98373->slot; > >+ port_config.ch_mask = max98373->rx_mask; > >+ } > > } else { > >- direction = SDW_DATA_DIR_TX; > > port_config.num = 3; > >- } > >- stream_config.frame_rate = params_rate(params); > >- stream_config.bps = snd_pcm_format_width(params_format(params)); > >- stream_config.direction = direction; > >- > >- if (max98373->slot && direction == SDW_DATA_DIR_RX) { > >- stream_config.ch_count = max98373->slot; > >- port_config.ch_mask = max98373->rx_mask; > >- } else { > > /* only IV are supported by capture */ > >- if (direction == SDW_DATA_DIR_TX) > >- stream_config.ch_count = 2; > Has this special case gone missing or is it already guaranteed by the > DAI config? > This special case is still there, it is just below where you made your next comment. All this case equates to is if direction is TX/CAPTURE set the number of channels to 2. > >- else > >- stream_config.ch_count = params_channels(params); > >- > >+ stream_config.ch_count = 2; > > port_config.ch_mask = GENMASK((int)stream_config.ch_count - 1, 0); > this is already done by snd_sdw_params_to_config() Not in this case because we just forced the channel count to 2, so we probably need to regenerate the mask too. Thanks, Charles
diff --git a/sound/soc/codecs/max98373-sdw.c b/sound/soc/codecs/max98373-sdw.c index 899965b19d12d..3cd1be743d9ee 100644 --- a/sound/soc/codecs/max98373-sdw.c +++ b/sound/soc/codecs/max98373-sdw.c @@ -10,6 +10,7 @@ #include <linux/slab.h> #include <sound/pcm.h> #include <sound/pcm_params.h> +#include <sound/sdw.h> #include <sound/soc.h> #include <sound/tlv.h> #include <linux/of.h> @@ -533,10 +534,8 @@ static int max98373_sdw_dai_hw_params(struct snd_pcm_substream *substream, struct snd_soc_component *component = dai->component; struct max98373_priv *max98373 = snd_soc_component_get_drvdata(component); - - struct sdw_stream_config stream_config; - struct sdw_port_config port_config; - enum sdw_data_direction direction; + struct sdw_stream_config stream_config = {0}; + struct sdw_port_config port_config = {0}; struct sdw_stream_data *stream; int ret, chan_sz, sampling_rate; @@ -548,28 +547,20 @@ static int max98373_sdw_dai_hw_params(struct snd_pcm_substream *substream, if (!max98373->slave) return -EINVAL; + snd_sdw_params_to_config(substream, params, &stream_config, &port_config); + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - direction = SDW_DATA_DIR_RX; port_config.num = 1; + + if (max98373->slot) { + stream_config.ch_count = max98373->slot; + port_config.ch_mask = max98373->rx_mask; + } } else { - direction = SDW_DATA_DIR_TX; port_config.num = 3; - } - stream_config.frame_rate = params_rate(params); - stream_config.bps = snd_pcm_format_width(params_format(params)); - stream_config.direction = direction; - - if (max98373->slot && direction == SDW_DATA_DIR_RX) { - stream_config.ch_count = max98373->slot; - port_config.ch_mask = max98373->rx_mask; - } else { /* only IV are supported by capture */ - if (direction == SDW_DATA_DIR_TX) - stream_config.ch_count = 2; - else - stream_config.ch_count = params_channels(params); - + stream_config.ch_count = 2; port_config.ch_mask = GENMASK((int)stream_config.ch_count - 1, 0); }
The conversation from hw_params to SoundWire config is pretty standard as such most of the conversation can be handled by the new snd_sdw_params_to_config helper function. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> --- sound/soc/codecs/max98373-sdw.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-)