From: David Brownell <david-b@pacbell.net>
To: Domen Puncer <domen@coderock.org>
Cc: Dragos Carp <dragos.carp@toptica.com>, linuxppc-embedded@ozlabs.org
Subject: Re: [RFC 3/3] Re: [PATCH] mpc52xx_psc_spi: fix it for CONFIG_PPC_MERGE
Date: Fri, 25 May 2007 09:34:44 -0700 [thread overview]
Message-ID: <200705250934.47045.david-b@pacbell.net> (raw)
In-Reply-To: <20070525084750.GC23149@nd47.coderock.org>
On Friday 25 May 2007, Domen Puncer wrote:
> For clk.h, it does seem quite some code, compared what's there currently.
You're using it wrong then ...
> --- work-powerpc.git.orig/drivers/spi/mpc52xx_psc_spi.c
> +++ work-powerpc.git/drivers/spi/mpc52xx_psc_spi.c
> @@ -18,6 +18,7 @@
>
> #if defined(CONFIG_PPC_MERGE)
> #include <asm/of_platform.h>
> +#include <linux/clk.h>
> #else
> #include <linux/platform_device.h>
> #endif
> @@ -106,13 +107,52 @@ static void mpc52xx_psc_spi_activate_cs(
> /* Set clock frequency and bits per word
> * Because psc->ccr is defined as 16bit register instead of 32bit
> * just set the lower byte of BitClkDiv
> + * Because BitClkDiv is 8-bit on mpc5200. Lets stay compatible.
> */
> +#if defined(CONFIG_PPC_MERGE)
> ccr = in_be16(&psc->ccr);
> ccr &= 0xFF00;
> + {
> + u8 bitclkdiv = 2; /* minimum bitclkdiv */
> + int speed = cs->speed_hz ? cs->speed_hz : 1000000;
> + char clk_name[10];
> + struct clk *clk; // TODO into mps, clk_get, clk_put
> + int mclk;
> + int system;
> + /*
> + * pscclk = mclk/(bitclkdiv+1)) bitclkdiv is 8-bit, >= 2
> + * mclk = fsys/(mclkdiv+1) mclkdiv is 9-bit, >= 1
> + * as mclkdiv has higher precision, we want is as big as possible
> + * => we get < 0.002*clock error
> + */
> +
> + snprintf(clk_name, 10, "psc%i_mclk", spi->master->bus_num);
> +
> + clk = clk_get(&spi->dev, clk_name);
Don't expect spi->dev to have a clock. Instead, the host controller
has a clock, which would be looked up the probe() routine, then released
in remove(): clock = clk_get(dev, "clockname"), with the clock framework
using "dev" to identify which clock it returns. (That is, the function
clock for all SPI controllers would have the same name ... not for
example "spi1_fclk", "spi2_fclk", etc. but instead "spi_fclk".)
> + if (!clk)
> + dev_err(&spi->dev, "couldn't get %s clock\n", clk_name);
> +
> + system = clk_get_rate(clk_get_parent(clk)); // TODO, checking, refcounting
> + mclk = speed * (bitclkdiv+1);
> + if (system/mclk > 512) { /* bigger than mclkdiv */
> + bitclkdiv = system/512/speed;
> + mclk = speed * (bitclkdiv+1);
> + }
> +
> + if (clk_set_rate(clk, mclk))
> + dev_err(&spi->dev, "couldn't set %s's rate\n", clk_name);
> +
> + dev_info(&spi->dev, "clock: wanted: %i, got: %li\n", speed,
> + clk_round_rate(clk, mclk) / (bitclkdiv+1));
> +
> + ccr |= bitclkdiv;
> + }
> +#else
> if (cs->speed_hz)
> ccr |= (MCLK / cs->speed_hz - 1) & 0xFF;
> else /* by default SPI Clk 1MHz */
> ccr |= (MCLK / 1000000 - 1) & 0xFF;
> +#endif
> out_be16(&psc->ccr, ccr);
> mps->bits_per_word = cs->bits_per_word;
>
\
next prev parent reply other threads:[~2007-05-25 16:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-16 7:37 [PATCH] mpc52xx_psc_spi: fix it for CONFIG_PPC_MERGE Domen Puncer
2007-05-16 8:19 ` Sylvain Munaut
2007-05-16 16:11 ` David Brownell
2007-05-16 16:34 ` Sylvain Munaut
2007-05-18 7:44 ` Dragos Carp
2007-05-25 8:43 ` [RFC 1/3] " Domen Puncer
2007-05-25 14:50 ` Sylvain Munaut
2007-05-25 17:02 ` Grant Likely
2007-05-25 8:45 ` [RFC 2/3] " Domen Puncer
2007-05-25 8:47 ` [RFC 3/3] " Domen Puncer
2007-05-25 16:34 ` David Brownell [this message]
2007-05-25 18:00 ` Domen Puncer
2007-05-21 7:31 ` Dragos Carp
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=200705250934.47045.david-b@pacbell.net \
--to=david-b@pacbell.net \
--cc=domen@coderock.org \
--cc=dragos.carp@toptica.com \
--cc=linuxppc-embedded@ozlabs.org \
/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).