diff options
Diffstat (limited to 'drivers/firmware/google/coreboot_table.c')
| -rw-r--r-- | drivers/firmware/google/coreboot_table.c | 22 | 
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c index 2a4469bf1b81..d4b6e581a6c6 100644 --- a/drivers/firmware/google/coreboot_table.c +++ b/drivers/firmware/google/coreboot_table.c @@ -28,8 +28,17 @@ static int coreboot_bus_match(struct device *dev, struct device_driver *drv)  {  	struct coreboot_device *device = CB_DEV(dev);  	struct coreboot_driver *driver = CB_DRV(drv); +	const struct coreboot_device_id *id; -	return device->entry.tag == driver->tag; +	if (!driver->id_table) +		return 0; + +	for (id = driver->id_table; id->tag; id++) { +		if (device->entry.tag == id->tag) +			return 1; +	} + +	return 0;  }  static int coreboot_bus_probe(struct device *dev) @@ -53,11 +62,20 @@ static void coreboot_bus_remove(struct device *dev)  		driver->remove(device);  } -static struct bus_type coreboot_bus_type = { +static int coreboot_bus_uevent(const struct device *dev, struct kobj_uevent_env *env) +{ +	struct coreboot_device *device = CB_DEV(dev); +	u32 tag = device->entry.tag; + +	return add_uevent_var(env, "MODALIAS=coreboot:t%08X", tag); +} + +static const struct bus_type coreboot_bus_type = {  	.name		= "coreboot",  	.match		= coreboot_bus_match,  	.probe		= coreboot_bus_probe,  	.remove		= coreboot_bus_remove, +	.uevent		= coreboot_bus_uevent,  };  static void coreboot_device_release(struct device *dev)  | 
