From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ben Dooks <ben@fluff.org>,
David Brownell <dbrownell@users.sourceforge.net>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
linux-kernel@vger.kernel.org, lm-sensors@lm-sensors.org,
Grant Likely <grant.likely@secretlab.ca>,
linuxppc-dev@ozlabs.org, linux-mtd@lists.infradead.org,
Jean Delvare <khali@linux-fr.org>,
David Woodhouse <dwmw2@infradead.org>
Subject: [PATCH 1/6] spi: Add support for device table matching
Date: Fri, 31 Jul 2009 04:40:58 +0400 [thread overview]
Message-ID: <20090731004058.GA8371@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090731003957.GA23982@oksana.dev.rtsoft.ru>
With this patch spi drivers can use standard spi_driver.id_table and
MODULE_DEVICE_TABLE() mechanisms to bind against the devices. Just
like we do with I2C drivers.
This is useful when a single driver supports several variants of
devices but it is not possible to detect them in run-time (like
non-JEDEC chips probing in drivers/mtd/devices/m25p80.c), and
when platform_data usage is overkill.
This patch also makes life a lot easier on OpenFirmware platforms,
since with OF we extensively use proper device IDs in modaliases.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/spi/spi.c | 23 +++++++++++++++++++++++
include/linux/mod_devicetable.h | 10 ++++++++++
include/linux/spi/spi.h | 10 ++++++++--
scripts/mod/file2alias.c | 13 +++++++++++++
4 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 70845cc..8518a6e 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -59,9 +59,32 @@ static struct device_attribute spi_dev_attrs[] = {
* and the sysfs version makes coldplug work too.
*/
+static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
+ const struct spi_device *sdev)
+{
+ while (id->name[0]) {
+ if (!strcmp(sdev->modalias, id->name))
+ return id;
+ id++;
+ }
+ return NULL;
+}
+
+const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
+{
+ const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
+
+ return spi_match_id(sdrv->id_table, sdev);
+}
+EXPORT_SYMBOL_GPL(spi_get_device_id);
+
static int spi_match_device(struct device *dev, struct device_driver *drv)
{
const struct spi_device *spi = to_spi_device(dev);
+ const struct spi_driver *sdrv = to_spi_driver(drv);
+
+ if (sdrv->id_table)
+ return !!spi_match_id(sdrv->id_table, spi);
return strcmp(spi->modalias, drv->name) == 0;
}
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 1bf5900..b34f1ef 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -399,6 +399,16 @@ struct i2c_device_id {
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
+/* spi */
+
+#define SPI_NAME_SIZE 32
+
+struct spi_device_id {
+ char name[SPI_NAME_SIZE];
+ kernel_ulong_t driver_data /* Data private to the driver */
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
+};
+
/* dmi */
enum dmi_field {
DMI_NONE,
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index c47c4b4..2b444df 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -20,6 +20,7 @@
#define __LINUX_SPI_H
#include <linux/device.h>
+#include <linux/mod_devicetable.h>
/*
* INTERFACES between SPI master-side drivers and SPI infrastructure.
@@ -86,7 +87,7 @@ struct spi_device {
int irq;
void *controller_state;
void *controller_data;
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
/*
* likely need more hooks for more protocol options affecting how
@@ -145,6 +146,7 @@ struct spi_message;
/**
* struct spi_driver - Host side "protocol" driver
+ * @id_table: List of SPI devices supported by this driver
* @probe: Binds this driver to the spi device. Drivers can verify
* that the device is actually present, and may need to configure
* characteristics (such as bits_per_word) which weren't needed for
@@ -170,6 +172,7 @@ struct spi_message;
* MMC, RTC, filesystem character device nodes, and hardware monitoring.
*/
struct spi_driver {
+ const struct spi_device_id *id_table;
int (*probe)(struct spi_device *spi);
int (*remove)(struct spi_device *spi);
void (*shutdown)(struct spi_device *spi);
@@ -732,7 +735,7 @@ struct spi_board_info {
* controller_data goes to spi_device.controller_data,
* irq is copied too
*/
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
const void *platform_data;
void *controller_data;
int irq;
@@ -800,4 +803,7 @@ spi_unregister_device(struct spi_device *spi)
device_unregister(&spi->dev);
}
+extern const struct spi_device_id *
+spi_get_device_id(const struct spi_device *sdev);
+
#endif /* __LINUX_SPI_H */
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 40e0045..9d446e3 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -657,6 +657,15 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
return 1;
}
+/* Looks like: S */
+static int do_spi_entry(const char *filename, struct spi_device_id *id,
+ char *alias)
+{
+ sprintf(alias, "%s", id->name);
+
+ return 1;
+}
+
static const struct dmifield {
const char *prefix;
int field;
@@ -853,6 +862,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_table(symval, sym->st_size,
sizeof(struct i2c_device_id), "i2c",
do_i2c_entry, mod);
+ else if (sym_is(symname, "__mod_spi_device_table"))
+ do_table(symval, sym->st_size,
+ sizeof(struct spi_device_id), "spi",
+ do_spi_entry, mod);
else if (sym_is(symname, "__mod_dmi_device_table"))
do_table(symval, sym->st_size,
sizeof(struct dmi_system_id), "dmi",
--
1.6.3.3
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ben Dooks <ben@fluff.org>,
David Brownell <dbrownell@users.sourceforge.net>,
David Woodhouse <dwmw2@infradead.org>,
Grant Likely <grant.likely@secretlab.ca>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Jean Delvare <khali@linux-fr.org>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
lm-sensors@lm-sensors.org, linuxppc-dev@ozlabs.org
Subject: [lm-sensors] [PATCH 1/6] spi: Add support for device table matching
Date: Fri, 31 Jul 2009 00:40:58 +0000 [thread overview]
Message-ID: <20090731004058.GA8371@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090731003957.GA23982@oksana.dev.rtsoft.ru>
With this patch spi drivers can use standard spi_driver.id_table and
MODULE_DEVICE_TABLE() mechanisms to bind against the devices. Just
like we do with I2C drivers.
This is useful when a single driver supports several variants of
devices but it is not possible to detect them in run-time (like
non-JEDEC chips probing in drivers/mtd/devices/m25p80.c), and
when platform_data usage is overkill.
This patch also makes life a lot easier on OpenFirmware platforms,
since with OF we extensively use proper device IDs in modaliases.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/spi/spi.c | 23 +++++++++++++++++++++++
include/linux/mod_devicetable.h | 10 ++++++++++
include/linux/spi/spi.h | 10 ++++++++--
scripts/mod/file2alias.c | 13 +++++++++++++
4 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 70845cc..8518a6e 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -59,9 +59,32 @@ static struct device_attribute spi_dev_attrs[] = {
* and the sysfs version makes coldplug work too.
*/
+static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
+ const struct spi_device *sdev)
+{
+ while (id->name[0]) {
+ if (!strcmp(sdev->modalias, id->name))
+ return id;
+ id++;
+ }
+ return NULL;
+}
+
+const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
+{
+ const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
+
+ return spi_match_id(sdrv->id_table, sdev);
+}
+EXPORT_SYMBOL_GPL(spi_get_device_id);
+
static int spi_match_device(struct device *dev, struct device_driver *drv)
{
const struct spi_device *spi = to_spi_device(dev);
+ const struct spi_driver *sdrv = to_spi_driver(drv);
+
+ if (sdrv->id_table)
+ return !!spi_match_id(sdrv->id_table, spi);
return strcmp(spi->modalias, drv->name) = 0;
}
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 1bf5900..b34f1ef 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -399,6 +399,16 @@ struct i2c_device_id {
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
+/* spi */
+
+#define SPI_NAME_SIZE 32
+
+struct spi_device_id {
+ char name[SPI_NAME_SIZE];
+ kernel_ulong_t driver_data /* Data private to the driver */
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
+};
+
/* dmi */
enum dmi_field {
DMI_NONE,
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index c47c4b4..2b444df 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -20,6 +20,7 @@
#define __LINUX_SPI_H
#include <linux/device.h>
+#include <linux/mod_devicetable.h>
/*
* INTERFACES between SPI master-side drivers and SPI infrastructure.
@@ -86,7 +87,7 @@ struct spi_device {
int irq;
void *controller_state;
void *controller_data;
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
/*
* likely need more hooks for more protocol options affecting how
@@ -145,6 +146,7 @@ struct spi_message;
/**
* struct spi_driver - Host side "protocol" driver
+ * @id_table: List of SPI devices supported by this driver
* @probe: Binds this driver to the spi device. Drivers can verify
* that the device is actually present, and may need to configure
* characteristics (such as bits_per_word) which weren't needed for
@@ -170,6 +172,7 @@ struct spi_message;
* MMC, RTC, filesystem character device nodes, and hardware monitoring.
*/
struct spi_driver {
+ const struct spi_device_id *id_table;
int (*probe)(struct spi_device *spi);
int (*remove)(struct spi_device *spi);
void (*shutdown)(struct spi_device *spi);
@@ -732,7 +735,7 @@ struct spi_board_info {
* controller_data goes to spi_device.controller_data,
* irq is copied too
*/
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
const void *platform_data;
void *controller_data;
int irq;
@@ -800,4 +803,7 @@ spi_unregister_device(struct spi_device *spi)
device_unregister(&spi->dev);
}
+extern const struct spi_device_id *
+spi_get_device_id(const struct spi_device *sdev);
+
#endif /* __LINUX_SPI_H */
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 40e0045..9d446e3 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -657,6 +657,15 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
return 1;
}
+/* Looks like: S */
+static int do_spi_entry(const char *filename, struct spi_device_id *id,
+ char *alias)
+{
+ sprintf(alias, "%s", id->name);
+
+ return 1;
+}
+
static const struct dmifield {
const char *prefix;
int field;
@@ -853,6 +862,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_table(symval, sym->st_size,
sizeof(struct i2c_device_id), "i2c",
do_i2c_entry, mod);
+ else if (sym_is(symname, "__mod_spi_device_table"))
+ do_table(symval, sym->st_size,
+ sizeof(struct spi_device_id), "spi",
+ do_spi_entry, mod);
else if (sym_is(symname, "__mod_dmi_device_table"))
do_table(symval, sym->st_size,
sizeof(struct dmi_system_id), "dmi",
--
1.6.3.3
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ben Dooks <ben@fluff.org>,
David Brownell <dbrownell@users.sourceforge.net>,
linux-kernel@vger.kernel.org, lm-sensors@lm-sensors.org,
linuxppc-dev@ozlabs.org, linux-mtd@lists.infradead.org,
Jean Delvare <khali@linux-fr.org>,
David Woodhouse <dwmw2@infradead.org>
Subject: [PATCH 1/6] spi: Add support for device table matching
Date: Fri, 31 Jul 2009 04:40:58 +0400 [thread overview]
Message-ID: <20090731004058.GA8371@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090731003957.GA23982@oksana.dev.rtsoft.ru>
With this patch spi drivers can use standard spi_driver.id_table and
MODULE_DEVICE_TABLE() mechanisms to bind against the devices. Just
like we do with I2C drivers.
This is useful when a single driver supports several variants of
devices but it is not possible to detect them in run-time (like
non-JEDEC chips probing in drivers/mtd/devices/m25p80.c), and
when platform_data usage is overkill.
This patch also makes life a lot easier on OpenFirmware platforms,
since with OF we extensively use proper device IDs in modaliases.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/spi/spi.c | 23 +++++++++++++++++++++++
include/linux/mod_devicetable.h | 10 ++++++++++
include/linux/spi/spi.h | 10 ++++++++--
scripts/mod/file2alias.c | 13 +++++++++++++
4 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 70845cc..8518a6e 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -59,9 +59,32 @@ static struct device_attribute spi_dev_attrs[] = {
* and the sysfs version makes coldplug work too.
*/
+static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
+ const struct spi_device *sdev)
+{
+ while (id->name[0]) {
+ if (!strcmp(sdev->modalias, id->name))
+ return id;
+ id++;
+ }
+ return NULL;
+}
+
+const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
+{
+ const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
+
+ return spi_match_id(sdrv->id_table, sdev);
+}
+EXPORT_SYMBOL_GPL(spi_get_device_id);
+
static int spi_match_device(struct device *dev, struct device_driver *drv)
{
const struct spi_device *spi = to_spi_device(dev);
+ const struct spi_driver *sdrv = to_spi_driver(drv);
+
+ if (sdrv->id_table)
+ return !!spi_match_id(sdrv->id_table, spi);
return strcmp(spi->modalias, drv->name) == 0;
}
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 1bf5900..b34f1ef 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -399,6 +399,16 @@ struct i2c_device_id {
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
+/* spi */
+
+#define SPI_NAME_SIZE 32
+
+struct spi_device_id {
+ char name[SPI_NAME_SIZE];
+ kernel_ulong_t driver_data /* Data private to the driver */
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
+};
+
/* dmi */
enum dmi_field {
DMI_NONE,
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index c47c4b4..2b444df 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -20,6 +20,7 @@
#define __LINUX_SPI_H
#include <linux/device.h>
+#include <linux/mod_devicetable.h>
/*
* INTERFACES between SPI master-side drivers and SPI infrastructure.
@@ -86,7 +87,7 @@ struct spi_device {
int irq;
void *controller_state;
void *controller_data;
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
/*
* likely need more hooks for more protocol options affecting how
@@ -145,6 +146,7 @@ struct spi_message;
/**
* struct spi_driver - Host side "protocol" driver
+ * @id_table: List of SPI devices supported by this driver
* @probe: Binds this driver to the spi device. Drivers can verify
* that the device is actually present, and may need to configure
* characteristics (such as bits_per_word) which weren't needed for
@@ -170,6 +172,7 @@ struct spi_message;
* MMC, RTC, filesystem character device nodes, and hardware monitoring.
*/
struct spi_driver {
+ const struct spi_device_id *id_table;
int (*probe)(struct spi_device *spi);
int (*remove)(struct spi_device *spi);
void (*shutdown)(struct spi_device *spi);
@@ -732,7 +735,7 @@ struct spi_board_info {
* controller_data goes to spi_device.controller_data,
* irq is copied too
*/
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
const void *platform_data;
void *controller_data;
int irq;
@@ -800,4 +803,7 @@ spi_unregister_device(struct spi_device *spi)
device_unregister(&spi->dev);
}
+extern const struct spi_device_id *
+spi_get_device_id(const struct spi_device *sdev);
+
#endif /* __LINUX_SPI_H */
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 40e0045..9d446e3 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -657,6 +657,15 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
return 1;
}
+/* Looks like: S */
+static int do_spi_entry(const char *filename, struct spi_device_id *id,
+ char *alias)
+{
+ sprintf(alias, "%s", id->name);
+
+ return 1;
+}
+
static const struct dmifield {
const char *prefix;
int field;
@@ -853,6 +862,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_table(symval, sym->st_size,
sizeof(struct i2c_device_id), "i2c",
do_i2c_entry, mod);
+ else if (sym_is(symname, "__mod_spi_device_table"))
+ do_table(symval, sym->st_size,
+ sizeof(struct spi_device_id), "spi",
+ do_spi_entry, mod);
else if (sym_is(symname, "__mod_dmi_device_table"))
do_table(symval, sym->st_size,
sizeof(struct dmi_system_id), "dmi",
--
1.6.3.3
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ben Dooks <ben@fluff.org>,
David Brownell <dbrownell@users.sourceforge.net>,
David Woodhouse <dwmw2@infradead.org>,
Grant Likely <grant.likely@secretlab.ca>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Jean Delvare <khali@linux-fr.org>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
lm-sensors@lm-sensors.org, linuxppc-dev@ozlabs.org
Subject: [PATCH 1/6] spi: Add support for device table matching
Date: Fri, 31 Jul 2009 04:40:58 +0400 [thread overview]
Message-ID: <20090731004058.GA8371@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090731003957.GA23982@oksana.dev.rtsoft.ru>
With this patch spi drivers can use standard spi_driver.id_table and
MODULE_DEVICE_TABLE() mechanisms to bind against the devices. Just
like we do with I2C drivers.
This is useful when a single driver supports several variants of
devices but it is not possible to detect them in run-time (like
non-JEDEC chips probing in drivers/mtd/devices/m25p80.c), and
when platform_data usage is overkill.
This patch also makes life a lot easier on OpenFirmware platforms,
since with OF we extensively use proper device IDs in modaliases.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/spi/spi.c | 23 +++++++++++++++++++++++
include/linux/mod_devicetable.h | 10 ++++++++++
include/linux/spi/spi.h | 10 ++++++++--
scripts/mod/file2alias.c | 13 +++++++++++++
4 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 70845cc..8518a6e 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -59,9 +59,32 @@ static struct device_attribute spi_dev_attrs[] = {
* and the sysfs version makes coldplug work too.
*/
+static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
+ const struct spi_device *sdev)
+{
+ while (id->name[0]) {
+ if (!strcmp(sdev->modalias, id->name))
+ return id;
+ id++;
+ }
+ return NULL;
+}
+
+const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
+{
+ const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
+
+ return spi_match_id(sdrv->id_table, sdev);
+}
+EXPORT_SYMBOL_GPL(spi_get_device_id);
+
static int spi_match_device(struct device *dev, struct device_driver *drv)
{
const struct spi_device *spi = to_spi_device(dev);
+ const struct spi_driver *sdrv = to_spi_driver(drv);
+
+ if (sdrv->id_table)
+ return !!spi_match_id(sdrv->id_table, spi);
return strcmp(spi->modalias, drv->name) == 0;
}
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 1bf5900..b34f1ef 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -399,6 +399,16 @@ struct i2c_device_id {
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
+/* spi */
+
+#define SPI_NAME_SIZE 32
+
+struct spi_device_id {
+ char name[SPI_NAME_SIZE];
+ kernel_ulong_t driver_data /* Data private to the driver */
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
+};
+
/* dmi */
enum dmi_field {
DMI_NONE,
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index c47c4b4..2b444df 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -20,6 +20,7 @@
#define __LINUX_SPI_H
#include <linux/device.h>
+#include <linux/mod_devicetable.h>
/*
* INTERFACES between SPI master-side drivers and SPI infrastructure.
@@ -86,7 +87,7 @@ struct spi_device {
int irq;
void *controller_state;
void *controller_data;
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
/*
* likely need more hooks for more protocol options affecting how
@@ -145,6 +146,7 @@ struct spi_message;
/**
* struct spi_driver - Host side "protocol" driver
+ * @id_table: List of SPI devices supported by this driver
* @probe: Binds this driver to the spi device. Drivers can verify
* that the device is actually present, and may need to configure
* characteristics (such as bits_per_word) which weren't needed for
@@ -170,6 +172,7 @@ struct spi_message;
* MMC, RTC, filesystem character device nodes, and hardware monitoring.
*/
struct spi_driver {
+ const struct spi_device_id *id_table;
int (*probe)(struct spi_device *spi);
int (*remove)(struct spi_device *spi);
void (*shutdown)(struct spi_device *spi);
@@ -732,7 +735,7 @@ struct spi_board_info {
* controller_data goes to spi_device.controller_data,
* irq is copied too
*/
- char modalias[32];
+ char modalias[SPI_NAME_SIZE];
const void *platform_data;
void *controller_data;
int irq;
@@ -800,4 +803,7 @@ spi_unregister_device(struct spi_device *spi)
device_unregister(&spi->dev);
}
+extern const struct spi_device_id *
+spi_get_device_id(const struct spi_device *sdev);
+
#endif /* __LINUX_SPI_H */
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 40e0045..9d446e3 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -657,6 +657,15 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
return 1;
}
+/* Looks like: S */
+static int do_spi_entry(const char *filename, struct spi_device_id *id,
+ char *alias)
+{
+ sprintf(alias, "%s", id->name);
+
+ return 1;
+}
+
static const struct dmifield {
const char *prefix;
int field;
@@ -853,6 +862,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_table(symval, sym->st_size,
sizeof(struct i2c_device_id), "i2c",
do_i2c_entry, mod);
+ else if (sym_is(symname, "__mod_spi_device_table"))
+ do_table(symval, sym->st_size,
+ sizeof(struct spi_device_id), "spi",
+ do_spi_entry, mod);
else if (sym_is(symname, "__mod_dmi_device_table"))
do_table(symval, sym->st_size,
sizeof(struct dmi_system_id), "dmi",
--
1.6.3.3
next prev parent reply other threads:[~2009-07-31 0:41 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-31 0:39 [PATCH v2 0/6] Device table matching for SPI subsystem Anton Vorontsov
2009-07-31 0:39 ` Anton Vorontsov
2009-07-31 0:39 ` Anton Vorontsov
2009-07-31 0:39 ` [lm-sensors] " Anton Vorontsov
2009-07-31 0:40 ` Anton Vorontsov [this message]
2009-07-31 0:40 ` [PATCH 1/6] spi: Add support for device table matching Anton Vorontsov
2009-07-31 0:40 ` Anton Vorontsov
2009-07-31 0:40 ` [lm-sensors] " Anton Vorontsov
2009-07-31 0:41 ` [PATCH 2/6] mtd: m25p80: Convert to " Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table Anton Vorontsov
2009-08-04 2:54 ` [PATCH 2/6] mtd: m25p80: Convert to device table matching David Brownell
2009-08-04 2:54 ` David Brownell
2009-08-04 2:54 ` David Brownell
2009-08-04 2:54 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table David Brownell
2009-08-18 21:44 ` [PATCH 2/6] mtd: m25p80: Convert to device table matching Anton Vorontsov
2009-08-18 21:44 ` Anton Vorontsov
2009-08-18 21:44 ` Anton Vorontsov
2009-08-18 21:44 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table Anton Vorontsov
2009-08-18 21:46 ` [PATCH 1/2] mtd: m25p80: Rework probing/JEDEC code Anton Vorontsov
2009-08-18 21:46 ` Anton Vorontsov
2010-06-12 6:27 ` Barry Song
2010-06-12 6:27 ` Barry Song
2010-06-12 6:27 ` Barry Song
2010-06-18 13:32 ` Anton Vorontsov
2010-06-18 13:32 ` Anton Vorontsov
2010-06-21 2:42 ` [Uclinux-dist-devel] [PATCH 1/2] mtd: m25p80: Reworkprobing/JEDEC code Song, Barry
2010-06-21 2:42 ` Song, Barry
2010-06-21 2:42 ` Song, Barry
2010-06-21 3:27 ` Barry Song
2010-06-21 3:27 ` Barry Song
2010-06-21 3:27 ` Barry Song
2010-06-21 7:15 ` Anton Vorontsov
2010-06-21 7:15 ` Anton Vorontsov
2010-06-21 7:22 ` Barry Song
2010-06-21 7:22 ` Barry Song
2010-06-21 7:22 ` Barry Song
2010-06-21 7:39 ` Anton Vorontsov
2010-06-21 7:39 ` Anton Vorontsov
2010-06-21 10:31 ` Barry Song
2010-06-21 10:31 ` Barry Song
2010-06-21 10:31 ` Barry Song
2010-06-21 11:20 ` Anton Vorontsov
2010-06-21 11:20 ` Anton Vorontsov
2010-06-21 16:34 ` Mike Frysinger
2010-06-21 16:34 ` Mike Frysinger
2010-06-21 16:34 ` Mike Frysinger
2010-06-21 16:47 ` Anton Vorontsov
2010-06-21 16:47 ` Anton Vorontsov
2010-06-21 16:54 ` Mike Frysinger
2010-06-21 16:54 ` Mike Frysinger
2010-06-21 16:54 ` Mike Frysinger
2010-06-22 6:37 ` Barry Song
2010-06-22 6:37 ` Barry Song
2010-06-22 6:37 ` Barry Song
2010-06-22 16:55 ` Anton Vorontsov
2010-06-22 16:55 ` Anton Vorontsov
2010-06-22 16:57 ` [PATCH 1/2] mtd: m25p80: Fix false-positive probing Anton Vorontsov
2010-06-22 16:57 ` Anton Vorontsov
2010-06-22 17:56 ` Mike Frysinger
2010-06-22 17:56 ` Mike Frysinger
2010-07-08 5:57 ` Artem Bityutskiy
2010-07-08 5:57 ` Artem Bityutskiy
2010-06-22 16:57 ` [PATCH 2/2] mtd: m25p80: Make jedec_probe() return proper errno values Anton Vorontsov
2010-06-22 16:57 ` Anton Vorontsov
2009-08-18 21:46 ` [PATCH 2/2] mtd: m25p80: Add support for CAT25xxx serial EEPROMs Anton Vorontsov
2009-08-18 21:46 ` Anton Vorontsov
2009-09-22 23:25 ` Andrew Morton
2009-09-22 23:25 ` Andrew Morton
2009-09-22 23:40 ` Anton Vorontsov
2009-09-22 23:40 ` Anton Vorontsov
2009-09-22 23:40 ` Anton Vorontsov
2009-09-22 21:17 ` [PATCH 2/6] mtd: m25p80: Convert to device table matching Andrew Morton
2009-09-22 21:17 ` Andrew Morton
2009-09-22 21:17 ` Andrew Morton
2009-09-22 23:01 ` Anton Vorontsov
2009-09-22 23:01 ` Anton Vorontsov
2009-09-22 23:01 ` Anton Vorontsov
2009-09-22 23:43 ` David Woodhouse
2009-09-22 23:43 ` David Woodhouse
2009-09-22 23:43 ` David Woodhouse
2009-09-22 23:52 ` Andrew Morton
2009-09-22 23:52 ` Andrew Morton
2009-09-22 23:52 ` Andrew Morton
2009-09-22 23:55 ` Anton Vorontsov
2009-09-22 23:55 ` Anton Vorontsov
2009-09-22 23:55 ` Anton Vorontsov
2009-09-23 0:02 ` Andrew Morton
2009-09-23 0:02 ` Andrew Morton
2009-09-23 0:02 ` Andrew Morton
2009-08-12 20:45 ` Michael Barkowski
2009-08-12 20:45 ` Michael Barkowski
2009-08-12 20:45 ` Michael Barkowski
2009-08-12 20:45 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table Michael Barkowski
2009-08-12 20:58 ` [PATCH 2/6] mtd: m25p80: Convert to device table matching Anton Vorontsov
2009-08-12 20:58 ` Anton Vorontsov
2009-08-12 20:58 ` Anton Vorontsov
2009-08-12 20:58 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table Anton Vorontsov
2009-08-12 20:58 ` [PATCH 2/6] mtd: m25p80: Convert to device table matching Michael Barkowski
2009-08-12 20:58 ` Michael Barkowski
2009-08-12 20:58 ` Michael Barkowski
2009-08-12 20:58 ` [lm-sensors] [PATCH 2/6] mtd: m25p80: Convert to device table Michael Barkowski
2009-07-31 0:41 ` [PATCH 3/6] of: Remove "stm,m25p40" alias Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` [lm-sensors] " Anton Vorontsov
2009-07-31 0:41 ` [PATCH 4/6] hwmon: adxx: Convert to device table matching Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` [lm-sensors] [PATCH 4/6] hwmon: adxx: Convert to device table Anton Vorontsov
2009-07-31 0:41 ` [PATCH 5/6] hwmon: lm70: Convert to device table matching Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` [lm-sensors] [PATCH 5/6] hwmon: lm70: Convert to device table Anton Vorontsov
2009-07-31 0:41 ` [PATCH 6/6] spi: Prefix modalias with "spi:" Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` Anton Vorontsov
2009-07-31 0:41 ` [lm-sensors] " Anton Vorontsov
2009-08-10 7:35 ` [PATCH v2 0/6] Device table matching for SPI subsystem Artem Bityutskiy
2009-08-10 7:35 ` Artem Bityutskiy
2009-08-10 7:35 ` Artem Bityutskiy
2009-08-10 7:35 ` [lm-sensors] [PATCH v2 0/6] Device table matching for SPI Artem Bityutskiy
2009-08-18 21:44 ` [PATCH v2 0/6] Device table matching for SPI subsystem Anton Vorontsov
2009-08-18 21:44 ` Anton Vorontsov
2009-08-18 21:44 ` Anton Vorontsov
2009-08-18 21:44 ` [lm-sensors] [PATCH v2 0/6] Device table matching for SPI Anton Vorontsov
2009-08-25 14:14 ` [PATCH v2 0/6] Device table matching for SPI subsystem Artem Bityutskiy
2009-08-25 14:14 ` Artem Bityutskiy
2009-08-25 14:14 ` Artem Bityutskiy
2009-08-25 14:14 ` [lm-sensors] [PATCH v2 0/6] Device table matching for SPI Artem Bityutskiy
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=20090731004058.GA8371@oksana.dev.rtsoft.ru \
--to=avorontsov@ru.mvista.com \
--cc=akpm@linux-foundation.org \
--cc=ben@fluff.org \
--cc=benh@kernel.crashing.org \
--cc=dbrownell@users.sourceforge.net \
--cc=dwmw2@infradead.org \
--cc=grant.likely@secretlab.ca \
--cc=khali@linux-fr.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=lm-sensors@lm-sensors.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.