From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
To: Zidan Wang <b50113@freescale.com>
Cc: alsa-devel@alsa-project.org, lars@metafoo.de, tiwai@suse.de,
linux-kernel@vger.kernel.org, broonie@kernel.org,
patches@opensource.wolfsonmicro.com, lgirdwood@gmail.com,
Li.Xiubo@freescale.com
Subject: Re: [PATCH 2/4] ASoC: wm8960: Let wm8960 driver configure its bit clock and frame clock
Date: Tue, 6 Jan 2015 13:32:47 +0000 [thread overview]
Message-ID: <20150106133247.GQ14516@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1419997154-860-2-git-send-email-b50113@freescale.com>
On Wed, Dec 31, 2014 at 11:39:12AM +0800, Zidan Wang wrote:
> wm8960 codec driver missing configure its bit clock and frame clock, so add
> support for it. It will calculate a appropriate frequency dividing ratio
> according to the system clock, bit clock and frame clock, then set the
> corresponding registers.
>
> Signed-off-by: Zidan Wang <b50113@freescale.com>
> ---
> sound/soc/codecs/wm8960.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 108 insertions(+)
>
> diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
> index 1a5f47b..86a5489 100644
> --- a/sound/soc/codecs/wm8960.c
> +++ b/sound/soc/codecs/wm8960.c
> @@ -127,6 +127,8 @@ struct wm8960_priv {
> struct snd_soc_dapm_widget *out3;
> bool deemph;
> int playback_fs;
> + int bclk;
> + int sysclk;
> struct wm8960_data pdata;
> };
>
> @@ -563,6 +565,79 @@ static struct {
> { 8000, 5 },
> };
>
> +/* Multiply 256 for internal 256 div */
> +static const int dac_divs[] = { 256, 384, 512, 768, 1024, 1408, 1536 };
> +
> +/* Multiply 10 to eliminate decimials */
> +static const int bclk_divs[] = {
> + 10, 15, 20, 30, 40, 55, 60, 80, 110,
> + 120, 160, 220, 240, 320, 320, 320
> +};
> +
> +static void wm8960_configure_clocking(struct snd_soc_codec *codec,
> + int stream, int lrclk)
> +{
> + struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
> + u16 iface1 = snd_soc_read(codec, WM8960_IFACE1);
> + u16 iface2 = snd_soc_read(codec, WM8960_IFACE2);
> + int i, j;
> +
> + if (!(iface1 & (1<<6))) {
> + dev_dbg(codec->dev,
> + "Codec is slave mode, no need to configure clock\n");
> + return;
> + }
> +
> + if (!wm8960->sysclk) {
> + dev_dbg(codec->dev, "No SYSCLK configured\n");
> + return;
> + }
> +
> + if (!wm8960->bclk || !lrclk) {
> + dev_dbg(codec->dev, "No audio clocks configured\n");
> + return;
> + }
> +
> + for (i = 0; i < ARRAY_SIZE(dac_divs); ++i) {
> + if (wm8960->sysclk == lrclk * dac_divs[i]) {
> + for (j = 0; j < ARRAY_SIZE(bclk_divs); ++j) {
> + if (wm8960->sysclk == wm8960->bclk *
> + bclk_divs[j] / 10) {
> + /* configure frame clock */
> + if (iface2 & (1<<6))
> + /* If ADCLRC configure as GPIO
> + * pin, DACLRC pin is used as
> + * a frame clock for ADCs and
> + * DACs */
> + snd_soc_update_bits(codec,
> + WM8960_CLOCK1,
> + 0x7 << 3,
> + i << 3);
The indentation is getting pretty horrific here can we do some
things to ease that a little. You could flip the polarity of the
two if statements and use continues instead for example that
would help a lot.
Thanks,
Charles
> + else if (SNDRV_PCM_STREAM_PLAYBACK
> + == stream)
> + snd_soc_update_bits(codec,
> + WM8960_CLOCK1,
> + 0x7 << 3,
> + i << 3);
> + else if (SNDRV_PCM_STREAM_CAPTURE
> + == stream)
> + snd_soc_update_bits(codec,
> + WM8960_CLOCK1,
> + 0x7 << 6,
> + i << 6);
> +
> + /* configure bit clock */
> + snd_soc_update_bits(codec,
> + WM8960_CLOCK2, 0xf, j);
> + return;
> + }
> + }
> + }
> + }
> +
> + dev_err(codec->dev, "Unsupported sysclk %d\n", wm8960->sysclk);
> +}
> +
next prev parent reply other threads:[~2015-01-06 13:32 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-31 3:39 [PATCH 1/4] ASoC: wm8960: Let wm8960 codec driver manage its own MCLK Zidan Wang
2014-12-31 3:39 ` [alsa-devel][PATCH 2/4] ASoC: wm8960: Let wm8960 driver configure its bit clock and frame clock Zidan Wang
2015-01-06 13:32 ` Charles Keepax [this message]
2014-12-31 3:39 ` [alsa-devel][PATCH 3/4] ASoC: wm8960: use pr_debug instead of pr_err Zidan Wang
2014-12-31 3:39 ` [alsa-devel][PATCH 4/4] ASoC: wm8960: Fix capture sample rate from 11250 to 11025 Zidan Wang
2015-01-06 13:28 ` Charles Keepax
2015-01-06 17:38 ` Mark Brown
2015-01-06 17:37 ` [PATCH 1/4] ASoC: wm8960: Let wm8960 codec driver manage its own MCLK 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=20150106133247.GQ14516@opensource.wolfsonmicro.com \
--to=ckeepax@opensource.wolfsonmicro.com \
--cc=Li.Xiubo@freescale.com \
--cc=alsa-devel@alsa-project.org \
--cc=b50113@freescale.com \
--cc=broonie@kernel.org \
--cc=lars@metafoo.de \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@opensource.wolfsonmicro.com \
--cc=tiwai@suse.de \
/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).