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:
parent
08a7d5a625
commit
420815465e
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue