mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 10:45:49 +00:00
ASoC: simple-card-utils: add asoc_simple_card_convert_fixup()
Current simple/audio scu card drivers are supporting same convert-rate/convert-channels on DT, but doesn't use same function for it. Encapsulation is one of simple card util's purpose. Let's add asoc_simple_card_parse_convert/asoc_simple_card_convert_fixup Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
616c3b15f5
commit
13bb1cc0ad
@ -22,6 +22,11 @@ struct asoc_simple_dai {
|
||||
struct clk *clk;
|
||||
};
|
||||
|
||||
struct asoc_simple_card_data {
|
||||
u32 convert_rate;
|
||||
u32 convert_channels;
|
||||
};
|
||||
|
||||
int asoc_simple_card_parse_daifmt(struct device *dev,
|
||||
struct device_node *node,
|
||||
struct device_node *codec,
|
||||
@ -90,4 +95,9 @@ void asoc_simple_card_canonicalize_cpu(struct snd_soc_dai_link *dai_link,
|
||||
|
||||
int asoc_simple_card_clean_reference(struct snd_soc_card *card);
|
||||
|
||||
void asoc_simple_card_convert_fixup(struct asoc_simple_card_data *data,
|
||||
struct snd_pcm_hw_params *params);
|
||||
void asoc_simple_card_parse_convert(struct device *dev, char *prefix,
|
||||
struct asoc_simple_card_data *data);
|
||||
|
||||
#endif /* __SIMPLE_CARD_UTILS_H */
|
||||
|
@ -13,6 +13,46 @@
|
||||
#include <linux/of_graph.h>
|
||||
#include <sound/simple_card_utils.h>
|
||||
|
||||
void asoc_simple_card_convert_fixup(struct asoc_simple_card_data *data,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_interval *rate = hw_param_interval(params,
|
||||
SNDRV_PCM_HW_PARAM_RATE);
|
||||
struct snd_interval *channels = hw_param_interval(params,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS);
|
||||
|
||||
if (data->convert_rate)
|
||||
rate->min =
|
||||
rate->max = data->convert_rate;
|
||||
|
||||
if (data->convert_channels)
|
||||
channels->min =
|
||||
channels->max = data->convert_channels;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(asoc_simple_card_convert_fixup);
|
||||
|
||||
void asoc_simple_card_parse_convert(struct device *dev, char *prefix,
|
||||
struct asoc_simple_card_data *data)
|
||||
{
|
||||
struct device_node *np = dev->of_node;
|
||||
char prop[128];
|
||||
|
||||
if (!prefix)
|
||||
prefix = "";
|
||||
|
||||
/* sampling rate convert */
|
||||
snprintf(prop, sizeof(prop), "%s%s", prefix, "convert-rate");
|
||||
of_property_read_u32(np, prop, &data->convert_rate);
|
||||
|
||||
/* channels transfer */
|
||||
snprintf(prop, sizeof(prop), "%s%s", prefix, "convert-channels");
|
||||
of_property_read_u32(np, prop, &data->convert_channels);
|
||||
|
||||
dev_dbg(dev, "convert_rate %d\n", data->convert_rate);
|
||||
dev_dbg(dev, "convert_channels %d\n", data->convert_channels);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(asoc_simple_card_parse_convert);
|
||||
|
||||
int asoc_simple_card_parse_daifmt(struct device *dev,
|
||||
struct device_node *node,
|
||||
struct device_node *codec,
|
||||
|
Loading…
Reference in New Issue
Block a user