* [PATCH] spi/mpc5121: register spi child devices of spi node
@ 2010-07-26 22:59 Anatolij Gustschin
[not found] ` <1280185178-5002-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Anatolij Gustschin @ 2010-07-26 22:59 UTC (permalink / raw)
To: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: David Brownell, Anatolij Gustschin
Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
---
drivers/spi/mpc512x_psc_spi.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/drivers/spi/mpc512x_psc_spi.c b/drivers/spi/mpc512x_psc_spi.c
index c8d69fc..39e5faf 100644
--- a/drivers/spi/mpc512x_psc_spi.c
+++ b/drivers/spi/mpc512x_psc_spi.c
@@ -27,6 +27,7 @@
#include <linux/clk.h>
#include <linux/spi/spi.h>
#include <linux/fsl_devices.h>
+#include <linux/of_spi.h>
#include <asm/mpc52xx_psc.h>
struct mpc512x_psc_spi {
@@ -511,6 +512,7 @@ static int __devinit mpc512x_psc_spi_of_probe(struct of_device *op,
const u32 *regaddr_p;
u64 regaddr64, size64;
s16 id = -1;
+ int ret;
regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
if (!regaddr_p) {
@@ -533,8 +535,14 @@ static int __devinit mpc512x_psc_spi_of_probe(struct of_device *op,
id = *psc_nump;
}
- return mpc512x_psc_spi_do_probe(&op->dev, (u32) regaddr64, (u32) size64,
+ ret = mpc512x_psc_spi_do_probe(&op->dev, (u32) regaddr64, (u32) size64,
irq_of_parse_and_map(op->dev.of_node, 0), id);
+
+ if (!ret)
+ of_register_spi_devices(dev_get_drvdata(&op->dev),
+ op->dev.of_node);
+
+ return ret;
}
static int __devexit mpc512x_psc_spi_of_remove(struct of_device *op)
--
1.7.0.4
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <1280185178-5002-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
@ 2010-07-27 6:17 ` Baruch Siach
[not found] ` <20100727061744.GB22765-X57xyCW21FZ5l4KbKkTfamZHpeb/A1Y/@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Baruch Siach @ 2010-07-27 6:17 UTC (permalink / raw)
To: Anatolij Gustschin
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
David Brownell
Hi Anatolij,
On Tue, Jul 27, 2010 at 12:59:38AM +0200, Anatolij Gustschin wrote:
> Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
> ---
> drivers/spi/mpc512x_psc_spi.c | 10 +++++++++-
> 1 files changed, 9 insertions(+), 1 deletions(-)
You should CC Grant Likely on this. He is now the de-facto maintainer of the
SPI subsystem.
baruch
> diff --git a/drivers/spi/mpc512x_psc_spi.c b/drivers/spi/mpc512x_psc_spi.c
> index c8d69fc..39e5faf 100644
> --- a/drivers/spi/mpc512x_psc_spi.c
> +++ b/drivers/spi/mpc512x_psc_spi.c
> @@ -27,6 +27,7 @@
> #include <linux/clk.h>
> #include <linux/spi/spi.h>
> #include <linux/fsl_devices.h>
> +#include <linux/of_spi.h>
> #include <asm/mpc52xx_psc.h>
>
> struct mpc512x_psc_spi {
> @@ -511,6 +512,7 @@ static int __devinit mpc512x_psc_spi_of_probe(struct of_device *op,
> const u32 *regaddr_p;
> u64 regaddr64, size64;
> s16 id = -1;
> + int ret;
>
> regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
> if (!regaddr_p) {
> @@ -533,8 +535,14 @@ static int __devinit mpc512x_psc_spi_of_probe(struct of_device *op,
> id = *psc_nump;
> }
>
> - return mpc512x_psc_spi_do_probe(&op->dev, (u32) regaddr64, (u32) size64,
> + ret = mpc512x_psc_spi_do_probe(&op->dev, (u32) regaddr64, (u32) size64,
> irq_of_parse_and_map(op->dev.of_node, 0), id);
> +
> + if (!ret)
> + of_register_spi_devices(dev_get_drvdata(&op->dev),
> + op->dev.of_node);
> +
> + return ret;
> }
>
> static int __devexit mpc512x_psc_spi_of_remove(struct of_device *op)
> --
> 1.7.0.4
>
>
> ------------------------------------------------------------------------------
> The Palm PDK Hot Apps Program offers developers who use the
> Plug-In Development Kit to bring their C/C++ apps to Palm for a share
> of $1 Million in cash or HP Products. Visit us here for more details:
> http://ad.doubleclick.net/clk;226879339;13503038;l?
> http://clk.atdmt.com/CRS/go/247765532/direct/01/
> _______________________________________________
> spi-devel-general mailing list
> spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> https://lists.sourceforge.net/lists/listinfo/spi-devel-general
--
~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch-NswTu9S1W3P6gbPvEgmw2w@public.gmane.org - tel: +972.2.679.5364, http://www.tkos.co.il -
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <20100727061744.GB22765-X57xyCW21FZ5l4KbKkTfamZHpeb/A1Y/@public.gmane.org>
@ 2010-07-27 6:21 ` Grant Likely
2010-07-27 6:28 ` David Brownell
1 sibling, 0 replies; 19+ messages in thread
From: Grant Likely @ 2010-07-27 6:21 UTC (permalink / raw)
To: Baruch Siach
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
Anatolij Gustschin, David Brownell
On Tue, Jul 27, 2010 at 12:17 AM, Baruch Siach <baruch-NswTu9S1W3P6gbPvEgmw2w@public.gmane.org> wrote:
> Hi Anatolij,
>
> On Tue, Jul 27, 2010 at 12:59:38AM +0200, Anatolij Gustschin wrote:
>> Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
>> ---
>> drivers/spi/mpc512x_psc_spi.c | 10 +++++++++-
>> 1 files changed, 9 insertions(+), 1 deletions(-)
>
> You should CC Grant Likely on this. He is now the de-facto maintainer of the
> SPI subsystem.
He did cc me.
g.
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <20100727061744.GB22765-X57xyCW21FZ5l4KbKkTfamZHpeb/A1Y/@public.gmane.org>
2010-07-27 6:21 ` Grant Likely
@ 2010-07-27 6:28 ` David Brownell
[not found] ` <298403.16600.qm-g47maUHHHF9+W+z1sZEpBPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
1 sibling, 1 reply; 19+ messages in thread
From: David Brownell @ 2010-07-27 6:28 UTC (permalink / raw)
To: Anatolij Gustschin, Baruch Siach
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
There are things wrong with the concept of this
particular patch. First, that it's mpc5121-only.
Second, that it's not already handled as part of
registering the platform's SPI devices.
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <298403.16600.qm-g47maUHHHF9+W+z1sZEpBPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-07-27 6:37 ` Grant Likely
[not found] ` <AANLkTik9GYDGi3jnMdPdyOa6sFv4bo_+4b-RWMq7nW6x-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 7:14 ` [PATCH] spi/mpc5121: register spi child devices of spi node Feng Tang
1 sibling, 1 reply; 19+ messages in thread
From: Grant Likely @ 2010-07-27 6:37 UTC (permalink / raw)
To: David Brownell
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
Anatolij Gustschin
On Tue, Jul 27, 2010 at 12:28 AM, David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
> There are things wrong with the concept of this
> particular patch. First, that it's mpc5121-only.
> Second, that it's not already handled as part of
> registering the platform's SPI devices.
The reason is that in this use case the platform code doesn't provide
a list of spi devices. The list of devices is contained in the
flattened device tree, and the data is parsed after the spi bus is
created.
But you're right; the fact that each driver has to explicitly call
this function is a problem. I plan to write a patch to remove all
those calls in each driver and call it from the core spi core instead.
g.
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <AANLkTik9GYDGi3jnMdPdyOa6sFv4bo_+4b-RWMq7nW6x-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2010-07-27 6:47 ` David Brownell
2010-07-27 13:39 ` [PATCH] of/spi: call of_register_spi_devices() from spi core code Anatolij Gustschin
1 sibling, 0 replies; 19+ messages in thread
From: David Brownell @ 2010-07-27 6:47 UTC (permalink / raw)
To: Grant Likely
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
Anatolij Gustschin
> > Second, that it's not already handled as part of
> > registering the platform's SPI devices.
> The reason is that in this use case
> the platform code doesn't provide
> a list of spi devices. The list of devices is
> contained in the
> flattened device tree, and the data is parsed
> after the spi bus is created.
That's part of the (OF) platform code, then ...
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
2010-07-27 7:14 ` [PATCH] spi/mpc5121: register spi child devices of spi node Feng Tang
@ 2010-07-27 7:00 ` Grant Likely
[not found] ` <AANLkTikZ4MMqmM3jn8yh49kh5+qOh2nmaYDVBOYhbo-K-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 7:07 ` David Brownell
1 sibling, 1 reply; 19+ messages in thread
From: Grant Likely @ 2010-07-27 7:00 UTC (permalink / raw)
To: Feng Tang
Cc: David Brownell,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA
On Tue, Jul 27, 2010 at 1:14 AM, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> On Tue, 27 Jul 2010 14:28:57 +0800
> David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
>
>> There are things wrong with the concept of this
>> particular patch. First, that it's mpc5121-only.
>> Second, that it's not already handled as part of
>> registering the platform's SPI devices.
>>
>>
>
> Hi David, Grant,
>
> This actually brings up another topic: currently spi_register_board_info()
> has to be called before spi controller(master) get inited. But in some
> case, to solve some device dependency issue, some spi slave device need
> be delayed registering, can we adjust it to make register_board_info()
> be callable after spi controller is inited? Which makes spi bus like
> general pci/usb bus, where devices/drivers have no registering order limit.
Is spi_alloc_device()/spi_add_device() not suitable for your use-case?
g.
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
2010-07-27 7:14 ` [PATCH] spi/mpc5121: register spi child devices of spi node Feng Tang
2010-07-27 7:00 ` Grant Likely
@ 2010-07-27 7:07 ` David Brownell
[not found] ` <793633.1143.qm-4JhmkcZgSkk/JfqJOfUXs/u2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
1 sibling, 1 reply; 19+ messages in thread
From: David Brownell @ 2010-07-27 7:07 UTC (permalink / raw)
To: Feng Tang
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA
--- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> be delayed registering, can we adjust it to make
> register_board_info()
> be callable after spi controller is inited? Which makes spi
> bus like
> general pci/usb bus, where devices/drivers have no
> registering order limit.
They require parents to be registered before children.
In particular: bus segments before devices on them.
SPI is no different (nor should it be).
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <298403.16600.qm-g47maUHHHF9+W+z1sZEpBPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-07-27 6:37 ` Grant Likely
@ 2010-07-27 7:14 ` Feng Tang
2010-07-27 7:00 ` Grant Likely
2010-07-27 7:07 ` David Brownell
1 sibling, 2 replies; 19+ messages in thread
From: Feng Tang @ 2010-07-27 7:14 UTC (permalink / raw)
To: David Brownell
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA
On Tue, 27 Jul 2010 14:28:57 +0800
David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
> There are things wrong with the concept of this
> particular patch. First, that it's mpc5121-only.
> Second, that it's not already handled as part of
> registering the platform's SPI devices.
>
>
Hi David, Grant,
This actually brings up another topic: currently spi_register_board_info()
has to be called before spi controller(master) get inited. But in some
case, to solve some device dependency issue, some spi slave device need
be delayed registering, can we adjust it to make register_board_info()
be callable after spi controller is inited? Which makes spi bus like
general pci/usb bus, where devices/drivers have no registering order limit.
Thanks,
Feng
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
2010-07-27 7:27 ` Feng Tang
@ 2010-07-27 7:18 ` David Brownell
0 siblings, 0 replies; 19+ messages in thread
From: David Brownell @ 2010-07-27 7:18 UTC (permalink / raw)
To: Grant Likely, Feng Tang
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
--- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> > >
> know which spi_master it is connecting to, while our
> platform need kind
> of blind registering (just register something to spi-bus).
Sounding worse and worse. each device is going
to be connected to one specific controller, not
some random one. Get setup right, or the hardware
will be impossible to program correctly.
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <AANLkTikZ4MMqmM3jn8yh49kh5+qOh2nmaYDVBOYhbo-K-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2010-07-27 7:27 ` Feng Tang
2010-07-27 7:18 ` David Brownell
0 siblings, 1 reply; 19+ messages in thread
From: Feng Tang @ 2010-07-27 7:27 UTC (permalink / raw)
To: Grant Likely
Cc: David Brownell,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
On Tue, 27 Jul 2010 15:00:29 +0800
Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org> wrote:
> On Tue, Jul 27, 2010 at 1:14 AM, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> wrote:
> > On Tue, 27 Jul 2010 14:28:57 +0800
> > David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
> >
> >> There are things wrong with the concept of this
> >> particular patch. First, that it's mpc5121-only.
> >> Second, that it's not already handled as part of
> >> registering the platform's SPI devices.
> >>
> >>
> >
> > Hi David, Grant,
> >
> > This actually brings up another topic: currently
> > spi_register_board_info() has to be called before spi
> > controller(master) get inited. But in some case, to solve some
> > device dependency issue, some spi slave device need be delayed
> > registering, can we adjust it to make register_board_info() be
> > callable after spi controller is inited? Which makes spi bus like
> > general pci/usb bus, where devices/drivers have no registering
> > order limit.
>
> Is spi_alloc_device()/spi_add_device() not suitable for your use-case?
>
> g.
Yes, I've thought about that, but spi_alloc_device() is called when you
know which spi_master it is connecting to, while our platform need kind
of blind registering (just register something to spi-bus).
Thanks,
Feng
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
2010-07-27 7:33 ` Feng Tang
@ 2010-07-27 7:27 ` David Brownell
[not found] ` <200077.42951.qm-g47maUHHHF8P4eY3Ra60wvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: David Brownell @ 2010-07-27 7:27 UTC (permalink / raw)
To: Feng Tang
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
--- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> What I want to say is the matching mechanism between spi
> board info
> and spi master, currently they use bus number to match, but
> there is
> a ordering limit now. For general device/driver matching in
> linux
> device model, there is no such limit. Is it
> possible to remove the order limit?
I have no idea what you mean. Are you proposing
to change how SPI busses are identified? Lots of
busses are numbered, SPI isn't unique; a device on
PCI bus #2 is different from one on bus #1, etc.
What do you mean by "order limit" ????
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <793633.1143.qm-4JhmkcZgSkk/JfqJOfUXs/u2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-07-27 7:33 ` Feng Tang
2010-07-27 7:27 ` David Brownell
0 siblings, 1 reply; 19+ messages in thread
From: Feng Tang @ 2010-07-27 7:33 UTC (permalink / raw)
To: David Brownell
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
On Tue, 27 Jul 2010 15:07:28 +0800
David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
>
>
> --- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
>
> > be delayed registering, can we adjust it to make
> > register_board_info()
> > be callable after spi controller is inited? Which makes spi
> > bus like
> > general pci/usb bus, where devices/drivers have no
> > registering order limit.
>
> They require parents to be registered before children.
> In particular: bus segments before devices on them.
> SPI is no different (nor should it be).
>
Sorry, I made a wrong example.
What I want to say is the matching mechanism between spi board info
and spi master, currently they use bus number to match, but there is
a ordering limit now. For general device/driver matching in linux
device model, there is no such limit. Is it possible to remove the
order limit?
Thanks,
Feng
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
2010-07-27 7:52 ` Feng Tang
@ 2010-07-27 7:44 ` David Brownell
[not found] ` <395617.66036.qm-g47maUHHHF/6X00i2u5GFvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: David Brownell @ 2010-07-27 7:44 UTC (permalink / raw)
To: Feng Tang
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
--- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> In current spi core, spi_register_info() has to be
> called before the spi controller driver call
> spi_register_master(),
> then these board info will be matched and used to create a new spi device.
>
> But if spi_register_info() are called after its related spi master
> is registered, then these info will be ignored
> and never get to create a new spi device.
That doesn't seem necessary. Got patch?
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <200077.42951.qm-g47maUHHHF8P4eY3Ra60wvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-07-27 7:52 ` Feng Tang
2010-07-27 7:44 ` David Brownell
0 siblings, 1 reply; 19+ messages in thread
From: Feng Tang @ 2010-07-27 7:52 UTC (permalink / raw)
To: David Brownell
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
On Tue, 27 Jul 2010 15:27:50 +0800
David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
>
>
> --- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
>
> > What I want to say is the matching mechanism between spi
> > board info
> > and spi master, currently they use bus number to match, but
> > there is
> > a ordering limit now. For general device/driver matching in
> > linux
> > device model, there is no such limit. Is it
> > possible to remove the order limit?
>
>
> I have no idea what you mean. Are you proposing
> to change how SPI busses are identified? Lots of
> busses are numbered, SPI isn't unique; a device on
> PCI bus #2 is different from one on bus #1, etc.
>
> What do you mean by "order limit" ????
>
In current spi core, spi_register_info() has to be
called before the spi controller driver call spi_register_master(),
then these board info will be matched and used to create a new
spi device.
But if spi_register_info() are called after its related spi master
is registered, then these info will be ignored and never get to
create a new spi device.
This is the "order limit" I want to describe :)
Thanks,
Feng
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] spi/mpc5121: register spi child devices of spi node
[not found] ` <395617.66036.qm-g47maUHHHF/6X00i2u5GFvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-07-27 8:07 ` Feng Tang
0 siblings, 0 replies; 19+ messages in thread
From: Feng Tang @ 2010-07-27 8:07 UTC (permalink / raw)
To: David Brownell
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Anatolij Gustschin, alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
On Tue, 27 Jul 2010 15:44:48 +0800
David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org> wrote:
>
>
> --- On Tue, 7/27/10, Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
>
>
>
> > In current spi core, spi_register_info() has to be
> > called before the spi controller driver call
> > spi_register_master(),
> > then these board info will be matched and used to create a new spi
> > device.
> >
> > But if spi_register_info() are called after its related spi master
> > is registered, then these info will be ignored
> > and never get to create a new spi device.
>
> That doesn't seem necessary. Got patch?
>
>
I would first discuss it on mail list and get bless from you two.
I will try to make one patch.
Thanks,
Feng
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://ad.doubleclick.net/clk;226879339;13503038;l?
http://clk.atdmt.com/CRS/go/247765532/direct/01/
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH] of/spi: call of_register_spi_devices() from spi core code
[not found] ` <AANLkTik9GYDGi3jnMdPdyOa6sFv4bo_+4b-RWMq7nW6x-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 6:47 ` David Brownell
@ 2010-07-27 13:39 ` Anatolij Gustschin
[not found] ` <1280237967-2460-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
1 sibling, 1 reply; 19+ messages in thread
From: Anatolij Gustschin @ 2010-07-27 13:39 UTC (permalink / raw)
To: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: David Brownell, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ
Move of_register_spi_devices() call from some drivers to
spi_register_master(). Also change the function to use
the struct device_node pointer from master spi device
instead of passing it as function argument.
Since xilinx_spi_of.c and spi_ppc4xx.c drivers do not use
spi_register_master(), they still call of_register_spi_devices()
directly. Maybe these drivers should be reworked later.
Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
Cc: David Brownell <dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Cc: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
---
drivers/of/of_spi.c | 7 +++----
drivers/spi/mpc52xx_psc_spi.c | 9 +--------
drivers/spi/mpc52xx_spi.c | 2 --
drivers/spi/spi.c | 5 +++++
drivers/spi/spi_mpc8xxx.c | 3 ---
drivers/spi/spi_ppc4xx.c | 3 ++-
drivers/spi/xilinx_spi.c | 1 +
drivers/spi/xilinx_spi_of.c | 2 +-
include/linux/of_spi.h | 11 ++++++++---
9 files changed, 21 insertions(+), 22 deletions(-)
diff --git a/drivers/of/of_spi.c b/drivers/of/of_spi.c
index d504f1d..76a0529 100644
--- a/drivers/of/of_spi.c
+++ b/drivers/of/of_spi.c
@@ -15,12 +15,11 @@
/**
* of_register_spi_devices - Register child devices onto the SPI bus
* @master: Pointer to spi_master device
- * @np: parent node of SPI device nodes
*
- * Registers an spi_device for each child node of 'np' which has a 'reg'
+ * Registers an spi_device for each child node of master node which has a 'reg'
* property.
*/
-void of_register_spi_devices(struct spi_master *master, struct device_node *np)
+void of_register_spi_devices(struct spi_master *master)
{
struct spi_device *spi;
struct device_node *nc;
@@ -28,7 +27,7 @@ void of_register_spi_devices(struct spi_master *master, struct device_node *np)
int rc;
int len;
- for_each_child_of_node(np, nc) {
+ for_each_child_of_node(master->dev.of_node, nc) {
/* Alloc an spi_device */
spi = spi_alloc_device(master);
if (!spi) {
diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
index 7104cb7..a6eb5d4 100644
--- a/drivers/spi/mpc52xx_psc_spi.c
+++ b/drivers/spi/mpc52xx_psc_spi.c
@@ -17,7 +17,6 @@
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/of_platform.h>
-#include <linux/of_spi.h>
#include <linux/workqueue.h>
#include <linux/completion.h>
#include <linux/io.h>
@@ -470,7 +469,6 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
const u32 *regaddr_p;
u64 regaddr64, size64;
s16 id = -1;
- int rc;
regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
if (!regaddr_p) {
@@ -491,13 +489,8 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
id = *psc_nump + 1;
}
- rc = mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
+ return mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
irq_of_parse_and_map(op->dev.of_node, 0), id);
- if (rc == 0)
- of_register_spi_devices(dev_get_drvdata(&op->dev),
- op->dev.of_node);
-
- return rc;
}
static int __exit mpc52xx_psc_spi_of_remove(struct of_device *op)
diff --git a/drivers/spi/mpc52xx_spi.c b/drivers/spi/mpc52xx_spi.c
index b1a76bf..18e1c86 100644
--- a/drivers/spi/mpc52xx_spi.c
+++ b/drivers/spi/mpc52xx_spi.c
@@ -18,7 +18,6 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/spi/spi.h>
-#include <linux/of_spi.h>
#include <linux/io.h>
#include <linux/of_gpio.h>
#include <linux/slab.h>
@@ -512,7 +511,6 @@ static int __devinit mpc52xx_spi_probe(struct of_device *op,
if (rc)
goto err_register;
- of_register_spi_devices(master, op->dev.of_node);
dev_info(&ms->master->dev, "registered MPC5200 SPI bus\n");
return rc;
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index fdde706..626fa48 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -26,6 +26,7 @@
#include <linux/slab.h>
#include <linux/mod_devicetable.h>
#include <linux/spi/spi.h>
+#include <linux/of_spi.h>
/* SPI bustype and spi_master class are registered after board init code
@@ -544,6 +545,10 @@ int spi_register_master(struct spi_master *master)
/* populate children from any spi device tables */
scan_boardinfo(master);
status = 0;
+
+ /* Register devices from the device tree */
+ master->dev.of_node = dev->of_node;
+ of_register_spi_devices(master);
done:
return status;
}
diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
index 97ab0a8..89fea11 100644
--- a/drivers/spi/spi_mpc8xxx.c
+++ b/drivers/spi/spi_mpc8xxx.c
@@ -38,7 +38,6 @@
#include <linux/of_platform.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
-#include <linux/of_spi.h>
#include <linux/slab.h>
#include <sysdev/fsl_soc.h>
@@ -1299,8 +1298,6 @@ static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
goto err;
}
- of_register_spi_devices(master, np);
-
return 0;
err:
diff --git a/drivers/spi/spi_ppc4xx.c b/drivers/spi/spi_ppc4xx.c
index d53466a..0bcea55 100644
--- a/drivers/spi/spi_ppc4xx.c
+++ b/drivers/spi/spi_ppc4xx.c
@@ -545,7 +545,8 @@ static int __init spi_ppc4xx_of_probe(struct of_device *op,
}
dev_info(dev, "driver initialized\n");
- of_register_spi_devices(master, np);
+ master->dev.of_node = np;
+ of_register_spi_devices(master);
return 0;
diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c
index 1b47363..d101a84 100644
--- a/drivers/spi/xilinx_spi.c
+++ b/drivers/spi/xilinx_spi.c
@@ -390,6 +390,7 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
master->bus_num = bus_num;
master->num_chipselect = pdata->num_chipselect;
+ master->dev.of_node = dev->of_node;
xspi->mem = *mem;
xspi->irq = irq;
diff --git a/drivers/spi/xilinx_spi_of.c b/drivers/spi/xilinx_spi_of.c
index 4654805..0295bbf 100644
--- a/drivers/spi/xilinx_spi_of.c
+++ b/drivers/spi/xilinx_spi_of.c
@@ -81,7 +81,7 @@ static int __devinit xilinx_spi_of_probe(struct of_device *ofdev,
dev_set_drvdata(&ofdev->dev, master);
/* Add any subnodes on the SPI bus */
- of_register_spi_devices(master, ofdev->dev.of_node);
+ of_register_spi_devices(master);
return 0;
}
diff --git a/include/linux/of_spi.h b/include/linux/of_spi.h
index 5f71ee8..9e3e70f 100644
--- a/include/linux/of_spi.h
+++ b/include/linux/of_spi.h
@@ -9,10 +9,15 @@
#ifndef __LINUX_OF_SPI_H
#define __LINUX_OF_SPI_H
-#include <linux/of.h>
#include <linux/spi/spi.h>
-extern void of_register_spi_devices(struct spi_master *master,
- struct device_node *np);
+#if defined(CONFIG_OF_SPI) || defined(CONFIG_OF_SPI_MODULE)
+extern void of_register_spi_devices(struct spi_master *master);
+#else
+static inline void of_register_spi_devices(struct spi_master *master)
+{
+ return;
+}
+#endif /* CONFIG_OF_SPI */
#endif /* __LINUX_OF_SPI */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH] of/spi: call of_register_spi_devices() from spi core code
[not found] ` <1280237967-2460-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
@ 2010-07-27 17:40 ` Grant Likely
[not found] ` <AANLkTimG+QLksWVbQ63F=Bc1h-9946J1RO0qSavBAegO-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 19+ messages in thread
From: Grant Likely @ 2010-07-27 17:40 UTC (permalink / raw)
To: Anatolij Gustschin
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, David Brownell
On Tue, Jul 27, 2010 at 7:39 AM, Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org> wrote:
> Move of_register_spi_devices() call from some drivers to
> spi_register_master(). Also change the function to use
> the struct device_node pointer from master spi device
> instead of passing it as function argument.
>
> Since xilinx_spi_of.c and spi_ppc4xx.c drivers do not use
> spi_register_master(), they still call of_register_spi_devices()
> directly. Maybe these drivers should be reworked later.
>
> Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
> Cc: David Brownell <dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
> Cc: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> ---
> drivers/of/of_spi.c | 7 +++----
> drivers/spi/mpc52xx_psc_spi.c | 9 +--------
> drivers/spi/mpc52xx_spi.c | 2 --
> drivers/spi/spi.c | 5 +++++
> drivers/spi/spi_mpc8xxx.c | 3 ---
> drivers/spi/spi_ppc4xx.c | 3 ++-
> drivers/spi/xilinx_spi.c | 1 +
> drivers/spi/xilinx_spi_of.c | 2 +-
> include/linux/of_spi.h | 11 ++++++++---
> 9 files changed, 21 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/of/of_spi.c b/drivers/of/of_spi.c
> index d504f1d..76a0529 100644
> --- a/drivers/of/of_spi.c
> +++ b/drivers/of/of_spi.c
> @@ -15,12 +15,11 @@
> /**
> * of_register_spi_devices - Register child devices onto the SPI bus
> * @master: Pointer to spi_master device
> - * @np: parent node of SPI device nodes
> *
> - * Registers an spi_device for each child node of 'np' which has a 'reg'
> + * Registers an spi_device for each child node of master node which has a 'reg'
> * property.
> */
> -void of_register_spi_devices(struct spi_master *master, struct device_node *np)
> +void of_register_spi_devices(struct spi_master *master)
> {
> struct spi_device *spi;
> struct device_node *nc;
> @@ -28,7 +27,7 @@ void of_register_spi_devices(struct spi_master *master, struct device_node *np)
> int rc;
> int len;
if (!master->dev.of_node)
return;
>
> - for_each_child_of_node(np, nc) {
> + for_each_child_of_node(master->dev.of_node, nc) {
> /* Alloc an spi_device */
> spi = spi_alloc_device(master);
> if (!spi) {
> diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
> index 7104cb7..a6eb5d4 100644
> --- a/drivers/spi/mpc52xx_psc_spi.c
> +++ b/drivers/spi/mpc52xx_psc_spi.c
> @@ -17,7 +17,6 @@
> #include <linux/errno.h>
> #include <linux/interrupt.h>
> #include <linux/of_platform.h>
> -#include <linux/of_spi.h>
> #include <linux/workqueue.h>
> #include <linux/completion.h>
> #include <linux/io.h>
> @@ -470,7 +469,6 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
> const u32 *regaddr_p;
> u64 regaddr64, size64;
> s16 id = -1;
> - int rc;
>
> regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
> if (!regaddr_p) {
> @@ -491,13 +489,8 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
> id = *psc_nump + 1;
> }
>
> - rc = mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
> + return mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
> irq_of_parse_and_map(op->dev.of_node, 0), id);
> - if (rc == 0)
> - of_register_spi_devices(dev_get_drvdata(&op->dev),
> - op->dev.of_node);
> -
> - return rc;
> }
>
> static int __exit mpc52xx_psc_spi_of_remove(struct of_device *op)
> diff --git a/drivers/spi/mpc52xx_spi.c b/drivers/spi/mpc52xx_spi.c
> index b1a76bf..18e1c86 100644
> --- a/drivers/spi/mpc52xx_spi.c
> +++ b/drivers/spi/mpc52xx_spi.c
> @@ -18,7 +18,6 @@
> #include <linux/interrupt.h>
> #include <linux/delay.h>
> #include <linux/spi/spi.h>
> -#include <linux/of_spi.h>
> #include <linux/io.h>
> #include <linux/of_gpio.h>
> #include <linux/slab.h>
> @@ -512,7 +511,6 @@ static int __devinit mpc52xx_spi_probe(struct of_device *op,
> if (rc)
> goto err_register;
>
> - of_register_spi_devices(master, op->dev.of_node);
> dev_info(&ms->master->dev, "registered MPC5200 SPI bus\n");
>
> return rc;
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index fdde706..626fa48 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -26,6 +26,7 @@
> #include <linux/slab.h>
> #include <linux/mod_devicetable.h>
> #include <linux/spi/spi.h>
> +#include <linux/of_spi.h>
>
>
> /* SPI bustype and spi_master class are registered after board init code
> @@ -544,6 +545,10 @@ int spi_register_master(struct spi_master *master)
> /* populate children from any spi device tables */
> scan_boardinfo(master);
> status = 0;
> +
> + /* Register devices from the device tree */
> + master->dev.of_node = dev->of_node;
Drop this line. There must be a way for drivers to override the
behaviour. On i2c I solved this by still requiring the driver to copy
the of_node pointer into the master's dev structure. That gives
drivers the option to use another node for the list of spi child
devices or to skip broken spi busses.
So this line should still appear in each of the OF-aware SPI bus drivers.
> + of_register_spi_devices(master);
> done:
> return status;
> }
> diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
> index 97ab0a8..89fea11 100644
> --- a/drivers/spi/spi_mpc8xxx.c
> +++ b/drivers/spi/spi_mpc8xxx.c
> @@ -38,7 +38,6 @@
> #include <linux/of_platform.h>
> #include <linux/gpio.h>
> #include <linux/of_gpio.h>
> -#include <linux/of_spi.h>
> #include <linux/slab.h>
>
> #include <sysdev/fsl_soc.h>
> @@ -1299,8 +1298,6 @@ static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
> goto err;
> }
>
> - of_register_spi_devices(master, np);
> -
> return 0;
>
> err:
> diff --git a/drivers/spi/spi_ppc4xx.c b/drivers/spi/spi_ppc4xx.c
> index d53466a..0bcea55 100644
> --- a/drivers/spi/spi_ppc4xx.c
> +++ b/drivers/spi/spi_ppc4xx.c
> @@ -545,7 +545,8 @@ static int __init spi_ppc4xx_of_probe(struct of_device *op,
> }
>
> dev_info(dev, "driver initialized\n");
> - of_register_spi_devices(master, np);
> + master->dev.of_node = np;
> + of_register_spi_devices(master);
You can drop these lines. This drivers calls spi_bitbang_start, which
in turn calls spi_register_master().
>
> return 0;
>
> diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c
> index 1b47363..d101a84 100644
> --- a/drivers/spi/xilinx_spi.c
> +++ b/drivers/spi/xilinx_spi.c
> @@ -390,6 +390,7 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
>
> master->bus_num = bus_num;
> master->num_chipselect = pdata->num_chipselect;
> + master->dev.of_node = dev->of_node;
>
> xspi->mem = *mem;
> xspi->irq = irq;
> diff --git a/drivers/spi/xilinx_spi_of.c b/drivers/spi/xilinx_spi_of.c
> index 4654805..0295bbf 100644
> --- a/drivers/spi/xilinx_spi_of.c
> +++ b/drivers/spi/xilinx_spi_of.c
> @@ -81,7 +81,7 @@ static int __devinit xilinx_spi_of_probe(struct of_device *ofdev,
> dev_set_drvdata(&ofdev->dev, master);
>
> /* Add any subnodes on the SPI bus */
> - of_register_spi_devices(master, ofdev->dev.of_node);
> + of_register_spi_devices(master);
Ditto here, spi_bitbang_start() is used by this driver.
Overall though, this is the right direction. Thanks!
g.
>
> return 0;
> }
> diff --git a/include/linux/of_spi.h b/include/linux/of_spi.h
> index 5f71ee8..9e3e70f 100644
> --- a/include/linux/of_spi.h
> +++ b/include/linux/of_spi.h
> @@ -9,10 +9,15 @@
> #ifndef __LINUX_OF_SPI_H
> #define __LINUX_OF_SPI_H
>
> -#include <linux/of.h>
> #include <linux/spi/spi.h>
>
> -extern void of_register_spi_devices(struct spi_master *master,
> - struct device_node *np);
> +#if defined(CONFIG_OF_SPI) || defined(CONFIG_OF_SPI_MODULE)
> +extern void of_register_spi_devices(struct spi_master *master);
> +#else
> +static inline void of_register_spi_devices(struct spi_master *master)
> +{
> + return;
> +}
> +#endif /* CONFIG_OF_SPI */
>
> #endif /* __LINUX_OF_SPI */
> --
> 1.7.0.4
>
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v2] of/spi: call of_register_spi_devices() from spi core code
[not found] ` <AANLkTimG+QLksWVbQ63F=Bc1h-9946J1RO0qSavBAegO-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2010-07-27 20:35 ` Anatolij Gustschin
0 siblings, 0 replies; 19+ messages in thread
From: Anatolij Gustschin @ 2010-07-27 20:35 UTC (permalink / raw)
To: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, David Brownell
Move of_register_spi_devices() call from drivers to
spi_register_master(). Also change the function to use
the struct device_node pointer from master spi device
instead of passing it as function argument.
Signed-off-by: Anatolij Gustschin <agust-ynQEQJNshbs@public.gmane.org>
Cc: David Brownell <dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Cc: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
---
Changes in v2 as requested by Grant:
- check master->dev.of_node to prevent potential null
pointer dereference
- set master->dev.of_node in OF-aware SPI bus drivers
- also drop of_register_spi_devices() in xilinx_spi_of.c
and spi_ppc4xx.c drivers
drivers/of/of_spi.c | 10 ++++++----
drivers/spi/mpc512x_psc_spi.c | 1 +
drivers/spi/mpc52xx_psc_spi.c | 10 ++--------
drivers/spi/mpc52xx_spi.c | 3 +--
drivers/spi/spi.c | 4 ++++
drivers/spi/spi_mpc8xxx.c | 4 +---
drivers/spi/spi_ppc4xx.c | 2 +-
drivers/spi/xilinx_spi.c | 1 +
drivers/spi/xilinx_spi_of.c | 3 ---
include/linux/of_spi.h | 11 ++++++++---
10 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/drivers/of/of_spi.c b/drivers/of/of_spi.c
index d504f1d..1dbce58 100644
--- a/drivers/of/of_spi.c
+++ b/drivers/of/of_spi.c
@@ -15,12 +15,11 @@
/**
* of_register_spi_devices - Register child devices onto the SPI bus
* @master: Pointer to spi_master device
- * @np: parent node of SPI device nodes
*
- * Registers an spi_device for each child node of 'np' which has a 'reg'
+ * Registers an spi_device for each child node of master node which has a 'reg'
* property.
*/
-void of_register_spi_devices(struct spi_master *master, struct device_node *np)
+void of_register_spi_devices(struct spi_master *master)
{
struct spi_device *spi;
struct device_node *nc;
@@ -28,7 +27,10 @@ void of_register_spi_devices(struct spi_master *master, struct device_node *np)
int rc;
int len;
- for_each_child_of_node(np, nc) {
+ if (!master->dev.of_node)
+ return;
+
+ for_each_child_of_node(master->dev.of_node, nc) {
/* Alloc an spi_device */
spi = spi_alloc_device(master);
if (!spi) {
diff --git a/drivers/spi/mpc512x_psc_spi.c b/drivers/spi/mpc512x_psc_spi.c
index c8d69fc..b5539d3 100644
--- a/drivers/spi/mpc512x_psc_spi.c
+++ b/drivers/spi/mpc512x_psc_spi.c
@@ -440,6 +440,7 @@ static int __devinit mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
master->setup = mpc512x_psc_spi_setup;
master->transfer = mpc512x_psc_spi_transfer;
master->cleanup = mpc512x_psc_spi_cleanup;
+ master->dev.of_node = dev->of_node;
tempp = ioremap(regaddr, size);
if (!tempp) {
diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
index 7104cb7..bd81ff9 100644
--- a/drivers/spi/mpc52xx_psc_spi.c
+++ b/drivers/spi/mpc52xx_psc_spi.c
@@ -17,7 +17,6 @@
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/of_platform.h>
-#include <linux/of_spi.h>
#include <linux/workqueue.h>
#include <linux/completion.h>
#include <linux/io.h>
@@ -398,6 +397,7 @@ static int __init mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
master->setup = mpc52xx_psc_spi_setup;
master->transfer = mpc52xx_psc_spi_transfer;
master->cleanup = mpc52xx_psc_spi_cleanup;
+ master->dev.of_node = dev->of_node;
mps->psc = ioremap(regaddr, size);
if (!mps->psc) {
@@ -470,7 +470,6 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
const u32 *regaddr_p;
u64 regaddr64, size64;
s16 id = -1;
- int rc;
regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
if (!regaddr_p) {
@@ -491,13 +490,8 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
id = *psc_nump + 1;
}
- rc = mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
+ return mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
irq_of_parse_and_map(op->dev.of_node, 0), id);
- if (rc == 0)
- of_register_spi_devices(dev_get_drvdata(&op->dev),
- op->dev.of_node);
-
- return rc;
}
static int __exit mpc52xx_psc_spi_of_remove(struct of_device *op)
diff --git a/drivers/spi/mpc52xx_spi.c b/drivers/spi/mpc52xx_spi.c
index b1a76bf..56136ff 100644
--- a/drivers/spi/mpc52xx_spi.c
+++ b/drivers/spi/mpc52xx_spi.c
@@ -18,7 +18,6 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/spi/spi.h>
-#include <linux/of_spi.h>
#include <linux/io.h>
#include <linux/of_gpio.h>
#include <linux/slab.h>
@@ -439,6 +438,7 @@ static int __devinit mpc52xx_spi_probe(struct of_device *op,
master->setup = mpc52xx_spi_setup;
master->transfer = mpc52xx_spi_transfer;
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
+ master->dev.of_node = op->dev.of_node;
dev_set_drvdata(&op->dev, master);
@@ -512,7 +512,6 @@ static int __devinit mpc52xx_spi_probe(struct of_device *op,
if (rc)
goto err_register;
- of_register_spi_devices(master, op->dev.of_node);
dev_info(&ms->master->dev, "registered MPC5200 SPI bus\n");
return rc;
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index fdde706..a9e5c79 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -26,6 +26,7 @@
#include <linux/slab.h>
#include <linux/mod_devicetable.h>
#include <linux/spi/spi.h>
+#include <linux/of_spi.h>
/* SPI bustype and spi_master class are registered after board init code
@@ -544,6 +545,9 @@ int spi_register_master(struct spi_master *master)
/* populate children from any spi device tables */
scan_boardinfo(master);
status = 0;
+
+ /* Register devices from the device tree */
+ of_register_spi_devices(master);
done:
return status;
}
diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
index 97ab0a8..aad9ae1 100644
--- a/drivers/spi/spi_mpc8xxx.c
+++ b/drivers/spi/spi_mpc8xxx.c
@@ -38,7 +38,6 @@
#include <linux/of_platform.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
-#include <linux/of_spi.h>
#include <linux/slab.h>
#include <sysdev/fsl_soc.h>
@@ -1009,6 +1008,7 @@ mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
master->setup = mpc8xxx_spi_setup;
master->transfer = mpc8xxx_spi_transfer;
master->cleanup = mpc8xxx_spi_cleanup;
+ master->dev.of_node = dev->of_node;
mpc8xxx_spi = spi_master_get_devdata(master);
mpc8xxx_spi->dev = dev;
@@ -1299,8 +1299,6 @@ static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
goto err;
}
- of_register_spi_devices(master, np);
-
return 0;
err:
diff --git a/drivers/spi/spi_ppc4xx.c b/drivers/spi/spi_ppc4xx.c
index d53466a..0f5fa7e 100644
--- a/drivers/spi/spi_ppc4xx.c
+++ b/drivers/spi/spi_ppc4xx.c
@@ -407,6 +407,7 @@ static int __init spi_ppc4xx_of_probe(struct of_device *op,
master = spi_alloc_master(dev, sizeof *hw);
if (master == NULL)
return -ENOMEM;
+ master->dev.of_node = np;
dev_set_drvdata(dev, master);
hw = spi_master_get_devdata(master);
hw->master = spi_master_get(master);
@@ -545,7 +546,6 @@ static int __init spi_ppc4xx_of_probe(struct of_device *op,
}
dev_info(dev, "driver initialized\n");
- of_register_spi_devices(master, np);
return 0;
diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c
index 1b47363..d101a84 100644
--- a/drivers/spi/xilinx_spi.c
+++ b/drivers/spi/xilinx_spi.c
@@ -390,6 +390,7 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
master->bus_num = bus_num;
master->num_chipselect = pdata->num_chipselect;
+ master->dev.of_node = dev->of_node;
xspi->mem = *mem;
xspi->irq = irq;
diff --git a/drivers/spi/xilinx_spi_of.c b/drivers/spi/xilinx_spi_of.c
index 4654805..87cda09 100644
--- a/drivers/spi/xilinx_spi_of.c
+++ b/drivers/spi/xilinx_spi_of.c
@@ -80,9 +80,6 @@ static int __devinit xilinx_spi_of_probe(struct of_device *ofdev,
dev_set_drvdata(&ofdev->dev, master);
- /* Add any subnodes on the SPI bus */
- of_register_spi_devices(master, ofdev->dev.of_node);
-
return 0;
}
diff --git a/include/linux/of_spi.h b/include/linux/of_spi.h
index 5f71ee8..9e3e70f 100644
--- a/include/linux/of_spi.h
+++ b/include/linux/of_spi.h
@@ -9,10 +9,15 @@
#ifndef __LINUX_OF_SPI_H
#define __LINUX_OF_SPI_H
-#include <linux/of.h>
#include <linux/spi/spi.h>
-extern void of_register_spi_devices(struct spi_master *master,
- struct device_node *np);
+#if defined(CONFIG_OF_SPI) || defined(CONFIG_OF_SPI_MODULE)
+extern void of_register_spi_devices(struct spi_master *master);
+#else
+static inline void of_register_spi_devices(struct spi_master *master)
+{
+ return;
+}
+#endif /* CONFIG_OF_SPI */
#endif /* __LINUX_OF_SPI */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2010-07-27 20:35 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-26 22:59 [PATCH] spi/mpc5121: register spi child devices of spi node Anatolij Gustschin
[not found] ` <1280185178-5002-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
2010-07-27 6:17 ` Baruch Siach
[not found] ` <20100727061744.GB22765-X57xyCW21FZ5l4KbKkTfamZHpeb/A1Y/@public.gmane.org>
2010-07-27 6:21 ` Grant Likely
2010-07-27 6:28 ` David Brownell
[not found] ` <298403.16600.qm-g47maUHHHF9+W+z1sZEpBPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-07-27 6:37 ` Grant Likely
[not found] ` <AANLkTik9GYDGi3jnMdPdyOa6sFv4bo_+4b-RWMq7nW6x-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 6:47 ` David Brownell
2010-07-27 13:39 ` [PATCH] of/spi: call of_register_spi_devices() from spi core code Anatolij Gustschin
[not found] ` <1280237967-2460-1-git-send-email-agust-ynQEQJNshbs@public.gmane.org>
2010-07-27 17:40 ` Grant Likely
[not found] ` <AANLkTimG+QLksWVbQ63F=Bc1h-9946J1RO0qSavBAegO-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 20:35 ` [PATCH v2] " Anatolij Gustschin
2010-07-27 7:14 ` [PATCH] spi/mpc5121: register spi child devices of spi node Feng Tang
2010-07-27 7:00 ` Grant Likely
[not found] ` <AANLkTikZ4MMqmM3jn8yh49kh5+qOh2nmaYDVBOYhbo-K-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-27 7:27 ` Feng Tang
2010-07-27 7:18 ` David Brownell
2010-07-27 7:07 ` David Brownell
[not found] ` <793633.1143.qm-4JhmkcZgSkk/JfqJOfUXs/u2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-07-27 7:33 ` Feng Tang
2010-07-27 7:27 ` David Brownell
[not found] ` <200077.42951.qm-g47maUHHHF8P4eY3Ra60wvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-07-27 7:52 ` Feng Tang
2010-07-27 7:44 ` David Brownell
[not found] ` <395617.66036.qm-g47maUHHHF/6X00i2u5GFvu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-07-27 8:07 ` Feng Tang
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).