9
0
Fork 0

driver: Add platform_device_id mechanism

It is common for drivers to handle multiple similar devices. On
Linux the driver can distinguish between the devices using the
platform_device_id mechanism. Introduce the same for barebox.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2012-09-09 16:28:59 +02:00
parent 08a7d5a625
commit 420815465e
2 changed files with 25 additions and 1 deletions

View File

@ -24,7 +24,22 @@
static int platform_match(struct device_d *dev, struct driver_d *drv)
{
return strcmp(dev->name, drv->name) ? -1 : 0;
if (!strcmp(dev->name, drv->name))
return 0;
if (drv->id_table) {
struct platform_device_id *id = drv->id_table;
while (id->name) {
if (!strcmp(id->name, dev->name)) {
dev->id_entry = id;
return 0;
}
id++;
}
}
return -1;
}
static int platform_probe(struct device_d *dev)

View File

@ -60,6 +60,11 @@
struct filep;
struct bus_type;
struct platform_device_id {
const char *name;
unsigned long driver_data;
};
/** @brief Describes a particular device present in the system */
struct device_d {
/*! This member (and 'type' described below) is used to match with a
@ -99,6 +104,8 @@ struct device_d {
struct list_head parameters;
struct list_head cdevs;
struct platform_device_id *id_entry;
};
/** @brief Describes a driver present in the system */
@ -119,6 +126,8 @@ struct driver_d {
void (*shortinfo) (struct device_d *);
struct bus_type *bus;
struct platform_device_id *id_table;
};
/*@}*/ /* do not delete, doxygen relevant */