From: Mark Brown <broonie@opensource.wolfsonmicro.com>
To: Timur Tabi <timur@freescale.com>
Cc: ALSA development <alsa-devel@alsa-project.org>,
Liam Girdwood <lrg@slimlogic.co.uk>
Subject: Re: asoc: problem with snd_soc_dai_set_fmt()
Date: Thu, 29 Apr 2010 23:18:08 +0100 [thread overview]
Message-ID: <20100429221808.GB23958@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <4BD9F889.4010106@freescale.com>
On Thu, Apr 29, 2010 at 04:22:17PM -0500, Timur Tabi wrote:
> Let's say the DAI driver has not defined a .set_fmt() function. This means
> that if the fabric driver does this:
*machine*
> 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.
Right, but really this is the case - the driver has completely ignored
what the machine driver was trying to do. It may be that the default
behaviour is what was asked for, but it may also be that you've asked
for I2S format and got DSP format or something similiarly incompatible.
> 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;
> }
Due to the above issue I don't think this is a good idea - we really
ought to let the machine driver know if the request it made was ignored
in case it is trying to set up something that can't be supported.
Another short term option would be to change the error code to be
something a bit more distinctive than -EINVAL. If we want to support
very generic machine drivers that genuinely don't know what hardware is
able to do I think we'd be be better off doing something like adding
capability masks to the drivers so these functions can validate what
they're being asked to do, at which point we know the actual format so
returning 0 isn't an issue.
The current expectation is that the machine driver knows what the
hardware is capable of and won't try to set anything silly, in the case
of fixed format devices that don't implement set_fmt() that consists of
just not calling set_fmt() for the DAI at all.
There is a genuine problem with the above code, BTW - the check for
driver->ops has got lost in the suffle.
next prev parent reply other threads:[~2010-04-29 22:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-29 21:22 asoc: problem with snd_soc_dai_set_fmt() Timur Tabi
2010-04-29 22:18 ` Mark Brown [this message]
2010-04-29 23:30 ` Timur Tabi
2010-04-30 10:37 ` Mark Brown
2010-04-30 1:28 ` jassi brar
2010-04-30 8:58 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100429221808.GB23958@opensource.wolfsonmicro.com \
--to=broonie@opensource.wolfsonmicro.com \
--cc=alsa-devel@alsa-project.org \
--cc=lrg@slimlogic.co.uk \
--cc=timur@freescale.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).