mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
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 <[email protected]> Cc: David Brownell <[email protected]> Cc: David Woodhouse <[email protected]> Cc: Grant Likely <[email protected]> Cc: Jean Delvare <[email protected]> Cc: Ben Dooks <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
b5f3294f0b
commit
75368bf6c2
4 changed files with 54 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue