[alsa-devel] asoc: problem with snd_soc_dai_set_fmt()
Timur Tabi
timur at freescale.com
Thu Apr 29 23:22:17 CEST 2010
There is a problem with snd_soc_dai_set_fmt():
int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{
if (dai->driver && dai->driver->ops->set_fmt)
return dai->driver->ops->set_fmt(dai, fmt);
else
return -EINVAL;
}
Let's say the DAI driver has not defined a .set_fmt() function. This means
that if the fabric driver does this:
ret = snd_soc_dai_set_fmt(cpu_dai, machine_data->dai_format);
if (ret < 0) {
dev_err(dev, "could not set CPU driver audio format\n");
return ret;
}
It's going to think that the DAI driver *rejected* the DAI format. What
this means is that I cannot make this function optional. I have to define
this function in my CPU driver.
May I propose this:
int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{
if (dai->driver && dai->driver->ops->set_fmt)
return dai->driver->ops->set_fmt(dai, fmt);
else
return 0;
}
--
Timur Tabi
Linux kernel developer at Freescale
More information about the Alsa-devel
mailing list