Now my driver gets probed.
This "modalias" error was due to wrong "compatible" attribute of
my of node.
But I still need to have the call to of_register_spi_devices().
The attached patch shows what I mean.
rg
kd
Grant Likely wrote:
On Mon, Jun 15, 2009 at 10:36 AM, Kári
Davíðsson<kari.davids...@marel.com> wrote:
Is this true?
Grant Likely wrote:
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.
I am writing an SPI protocol driver and I find that my driver
is never probed.
I tried to add and call to of_register_spi_devices() in the
drivers/spi/mpc52xx_psc_spi.c::mpc52xx_psc_spi_of_probe() function,
without much effect besided that the DTS node is parsed but the driver probe
is not called, actually it complains about a modalias for my node is
missing.
What do you see when you look in /sys/bus/spi/devices? You should see
a directory for your device. What do you see in /sys/bus/spi/drivers?
In here you should see your driver. If they are both there, then you
just have a problem matching your driver name to the device name.
g.
Index: drivers/spi/mpc52xx_psc_spi.c
===================================================================
--- drivers/spi/mpc52xx_psc_spi.c (revision 548)
+++ drivers/spi/mpc52xx_psc_spi.c (working copy)
@@ -22,6 +22,7 @@
#include <linux/delay.h>
#include <linux/spi/spi.h>
#include <linux/fsl_devices.h>
+#include <linux/of_spi.h>
#include <asm/mpc52xx.h>
#include <asm/mpc52xx_psc.h>
@@ -371,7 +372,7 @@
/* bus_num is used only for the case dev->platform_data == NULL */
static int __init mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
- u32 size, unsigned int irq, s16 bus_num)
+ u32 size, unsigned int irq, s16 bus_num, struct
spi_master ** pmaster)
{
struct fsl_spi_platform_data *pdata = dev->platform_data;
struct mpc52xx_psc_spi *mps;
@@ -439,6 +440,10 @@
if (ret < 0)
goto unreg_master;
+ dev_info(dev, "Activated\n");
+
+ *pmaster = master;
+
return ret;
unreg_master:
@@ -474,6 +479,8 @@
const u32 *regaddr_p;
u64 regaddr64, size64;
s16 id = -1;
+ int res;
+ struct spi_master * master = NULL;;
regaddr_p = of_get_address(op->node, 0, &size64, NULL);
if (!regaddr_p) {
@@ -495,8 +502,16 @@
id = *psc_nump + 1;
}
- return mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
- irq_of_parse_and_map(op->node, 0), id);
+ res = mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
+ irq_of_parse_and_map(op->node, 0), id,
&master);
+
+ if( master != NULL )
+ {
+ /* Add any subnodes on the SPI bus */
+ of_register_spi_devices( master, op->node);
+ }
+
+ return res;
}
static int __exit mpc52xx_psc_spi_of_remove(struct of_device *op)
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev