spi: add support for device table matching
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> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: Jean Delvare <khali@linux-fr.org> Cc: Ben Dooks <ben-linux@fluff.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
b5f3294f0b
commit
75368bf6c2
@@ -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);
|
||||
@@ -734,7 +737,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;
|
||||
@@ -802,4 +805,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 */
|
||||
|
Reference in New Issue
Block a user