From: Grant Likely <grant.likely@secretlab.ca>
To: Henk Stegeman <henk.stegeman@gmail.com>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: Chipselect in SPI binding with mpc5200-psc-spi
Date: Fri, 13 Feb 2009 08:19:04 -0700 [thread overview]
Message-ID: <fa686aa40902130719k1d16f936o4776cff371db16ae@mail.gmail.com> (raw)
In-Reply-To: <ae4f76fd0902130240g72b3cdf1l21b8f7ec8ad17e76@mail.gmail.com>
On Fri, Feb 13, 2009 at 3:40 AM, Henk Stegeman <henk.stegeman@gmail.com> wrote:
> I'm busy adding support for slave deviced behind mpc52xx-psc-spi.
> One complication I have is that my SPI slave device has an interrupt output
> to the CPU.
> My idea is to add it as a gpios property in the slave device's
> configuration:
>
> spi@2400 { // PSC3 (SPI IF to the IO-controller )
> device_type = "spi";
> #address-cells = <1>;
> #size-cells = <0>;
> compatible = "fsl,mpc5200-psc-spi","fsl,mpc5200b-psc-spi";
> cell-index = <2>;
> reg = <0x2400 0x100>;
> interrupts = <2 3 0>;
> interrupt-parent = <&mpc5200_pic>;
> gpios = <&gpt4 0 0>;
>
> io-controller@0 {
> compatible = "microkey,smc4000io";
> spi-max-frequency = <1000000>;
> reg = <0>;
> // gpios: first is IRQ to cpu
> gpios = <&gpt6 0 0>;
> };
There is a better way to do this, and driver support for it is
currently merged into Ben Herrenschmidt's -next tree.
Do this instead:
io-controller@0 {
compatible = "microkey,smc4000io";
spi-max-frequency = <1000000>;
reg = <0>;
interrupt-controller = < &gpt6 >; // Use GPT6 as
the IRQ controller
interrupts = < 1 >; // And make it rising edge.
};
Then add these two properties to the GPT node:
interrupt-controller;
#interrupt-cells = <1>;
Then you can use normal irq_of_parse_and_map() to set up your handler.
> How should I then register my spi slave driver? My smc4000io_probe function
> gets called correctly by of_spi support but when I register as follows:
>
> static struct spi_driver smc4000io_driver = {
> .driver = {
> .name = "smc4000io",
> .bus = &spi_bus_type,
> .owner = THIS_MODULE,
> },
> .probe = smc4000io_probe,
> .remove = __devexit_p(smc4000io_remove),
> };
>
> static int __init smc4000io_init(void)
> {
> return spi_register_driver(&smc4000io_driver);
> }
>
> static void __exit smc4000io_exit(void)
> {
> spi_unregister_driver(&smc4000io_driver);
> }
>
> module_init(smc4000io_init);
Yes, this is right. The psc_spi driver automatically registers all
spi children that it finds in the device tree onto the SPI bus.
Therefore registering an spi_driver() is the right thing to do.
> But when I do:
>
> static struct of_platform_driver smc4000_spi_of_driver = {
> .name = "smc4000io",
> .match_table = smc4000io_of_match,
> .probe = smc4000io_of_probe,
> .remove = __devexit_p(smc4000io_of_remove),
> };
>
> static int __init smc4000io_init(void)
> {
> return of_register_platform_driver(&smc4000_spi_of_driver);
> }
> module_init(smc4000io_init);
>
> Then my smc4000io_of_probe function never gets called.
Correct. of_platform_driver isn't useful in this case because the
device cannot exist independently of the SPI bus. Plus an
of_platform_device doesn't provide any information about the SPI bus
itself.
g.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
next prev parent reply other threads:[~2009-02-13 15:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-29 13:43 Chipselect in SPI binding with mpc5200-psc-spi Henk Stegeman
2008-10-29 14:45 ` Grant Likely
2009-02-13 10:40 ` Henk Stegeman
2009-02-13 15:19 ` Grant Likely [this message]
2009-02-13 15:52 ` Henk Stegeman
2009-06-15 16:36 ` Kári Davíðsson
2009-06-15 17:31 ` Grant Likely
2009-06-16 10:41 ` Kári Davíðsson
2009-07-07 14:31 ` Henk Stegeman
2009-07-07 15:57 ` Grant Likely
2009-07-08 13:07 ` Henk Stegeman
-- strict thread matches above, loose matches on Subject: below --
2009-03-27 21:14 Yann Pelletier
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=fa686aa40902130719k1d16f936o4776cff371db16ae@mail.gmail.com \
--to=grant.likely@secretlab.ca \
--cc=henk.stegeman@gmail.com \
--cc=linuxppc-dev@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).