ASoC: simple-card: Remove support for setting differing DAI formats
Having to set different formats on the CPU side and the CODEC side of a DAI link is usually indication that something is terribly wrong and in most cases is a result of a broken driver that implements a set_fmt() callback which does not follow the specification. In the past this feature has been used to work around broken drivers, rather than fixing them. We don't really want to encourage this, so remove support for setting different formats on both ends of the link. Along the way switch to static DAI format setup by setting the the dai_fmt field of the snd_soc_dai_link rather than calling snd_soc_dai_fmt(). Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
947a37cd38
commit
1efb53a220
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
struct asoc_simple_dai {
|
struct asoc_simple_dai {
|
||||||
const char *name;
|
const char *name;
|
||||||
unsigned int fmt;
|
|
||||||
unsigned int sysclk;
|
unsigned int sysclk;
|
||||||
int slots;
|
int slots;
|
||||||
int slot_width;
|
int slot_width;
|
||||||
|
|
|
@ -125,14 +125,6 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai,
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (set->fmt) {
|
|
||||||
ret = snd_soc_dai_set_fmt(dai, set->fmt);
|
|
||||||
if (ret && ret != -ENOTSUPP) {
|
|
||||||
dev_err(dai->dev, "simple-card: set_fmt error\n");
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (set->sysclk) {
|
if (set->sysclk) {
|
||||||
ret = snd_soc_dai_set_sysclk(dai, 0, set->sysclk, 0);
|
ret = snd_soc_dai_set_sysclk(dai, 0, set->sysclk, 0);
|
||||||
if (ret && ret != -ENOTSUPP) {
|
if (ret && ret != -ENOTSUPP) {
|
||||||
|
@ -269,12 +261,10 @@ static int asoc_simple_card_parse_daifmt(struct device_node *node,
|
||||||
struct device_node *codec,
|
struct device_node *codec,
|
||||||
char *prefix, int idx)
|
char *prefix, int idx)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx);
|
||||||
struct device *dev = simple_priv_to_dev(priv);
|
struct device *dev = simple_priv_to_dev(priv);
|
||||||
struct device_node *bitclkmaster = NULL;
|
struct device_node *bitclkmaster = NULL;
|
||||||
struct device_node *framemaster = NULL;
|
struct device_node *framemaster = NULL;
|
||||||
struct simple_dai_props *dai_props = simple_priv_to_props(priv, idx);
|
|
||||||
struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai;
|
|
||||||
struct asoc_simple_dai *codec_dai = &dai_props->codec_dai;
|
|
||||||
unsigned int daifmt;
|
unsigned int daifmt;
|
||||||
|
|
||||||
daifmt = snd_soc_of_parse_daifmt(node, prefix,
|
daifmt = snd_soc_of_parse_daifmt(node, prefix,
|
||||||
|
@ -289,8 +279,7 @@ static int asoc_simple_card_parse_daifmt(struct device_node *node,
|
||||||
*/
|
*/
|
||||||
dev_dbg(dev, "Revert to legacy daifmt parsing\n");
|
dev_dbg(dev, "Revert to legacy daifmt parsing\n");
|
||||||
|
|
||||||
cpu_dai->fmt = codec_dai->fmt =
|
daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) |
|
||||||
snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) |
|
|
||||||
(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
|
(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
|
||||||
} else {
|
} else {
|
||||||
if (codec == bitclkmaster)
|
if (codec == bitclkmaster)
|
||||||
|
@ -299,11 +288,10 @@ static int asoc_simple_card_parse_daifmt(struct device_node *node,
|
||||||
else
|
else
|
||||||
daifmt |= (codec == framemaster) ?
|
daifmt |= (codec == framemaster) ?
|
||||||
SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS;
|
SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS;
|
||||||
|
|
||||||
cpu_dai->fmt = daifmt;
|
|
||||||
codec_dai->fmt = daifmt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dai_link->dai_fmt = daifmt;
|
||||||
|
|
||||||
of_node_put(bitclkmaster);
|
of_node_put(bitclkmaster);
|
||||||
of_node_put(framemaster);
|
of_node_put(framemaster);
|
||||||
|
|
||||||
|
@ -379,13 +367,12 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
|
||||||
dai_link->init = asoc_simple_card_dai_init;
|
dai_link->init = asoc_simple_card_dai_init;
|
||||||
|
|
||||||
dev_dbg(dev, "\tname : %s\n", dai_link->stream_name);
|
dev_dbg(dev, "\tname : %s\n", dai_link->stream_name);
|
||||||
dev_dbg(dev, "\tcpu : %s / %04x / %d\n",
|
dev_dbg(dev, "\tformat : %04x\n", dai_link->dai_fmt);
|
||||||
|
dev_dbg(dev, "\tcpu : %s / %d\n",
|
||||||
dai_link->cpu_dai_name,
|
dai_link->cpu_dai_name,
|
||||||
dai_props->cpu_dai.fmt,
|
|
||||||
dai_props->cpu_dai.sysclk);
|
dai_props->cpu_dai.sysclk);
|
||||||
dev_dbg(dev, "\tcodec : %s / %04x / %d\n",
|
dev_dbg(dev, "\tcodec : %s / %d\n",
|
||||||
dai_link->codec_dai_name,
|
dai_link->codec_dai_name,
|
||||||
dai_props->codec_dai.fmt,
|
|
||||||
dai_props->codec_dai.sysclk);
|
dai_props->codec_dai.sysclk);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -572,14 +559,13 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
|
||||||
dai_link->codec_name = cinfo->codec;
|
dai_link->codec_name = cinfo->codec;
|
||||||
dai_link->cpu_dai_name = cinfo->cpu_dai.name;
|
dai_link->cpu_dai_name = cinfo->cpu_dai.name;
|
||||||
dai_link->codec_dai_name = cinfo->codec_dai.name;
|
dai_link->codec_dai_name = cinfo->codec_dai.name;
|
||||||
|
dai_link->dai_fmt = cinfo->daifmt;
|
||||||
dai_link->init = asoc_simple_card_dai_init;
|
dai_link->init = asoc_simple_card_dai_init;
|
||||||
memcpy(&priv->dai_props->cpu_dai, &cinfo->cpu_dai,
|
memcpy(&priv->dai_props->cpu_dai, &cinfo->cpu_dai,
|
||||||
sizeof(priv->dai_props->cpu_dai));
|
sizeof(priv->dai_props->cpu_dai));
|
||||||
memcpy(&priv->dai_props->codec_dai, &cinfo->codec_dai,
|
memcpy(&priv->dai_props->codec_dai, &cinfo->codec_dai,
|
||||||
sizeof(priv->dai_props->codec_dai));
|
sizeof(priv->dai_props->codec_dai));
|
||||||
|
|
||||||
priv->dai_props->cpu_dai.fmt |= cinfo->daifmt;
|
|
||||||
priv->dai_props->codec_dai.fmt |= cinfo->daifmt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
snd_soc_card_set_drvdata(&priv->snd_card, priv);
|
snd_soc_card_set_drvdata(&priv->snd_card, priv);
|
||||||
|
|
Loading…
Reference in New Issue