diff options
Diffstat (limited to 'drivers/base/platform.c')
-rw-r--r-- | drivers/base/platform.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 62a8768d96b3..ec993aa6a2ca 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -584,10 +584,25 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env) | |||
584 | { | 584 | { |
585 | struct platform_device *pdev = to_platform_device(dev); | 585 | struct platform_device *pdev = to_platform_device(dev); |
586 | 586 | ||
587 | add_uevent_var(env, "MODALIAS=platform:%s", pdev->name); | 587 | add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX, |
588 | (pdev->id_entry) ? pdev->id_entry->name : pdev->name); | ||
588 | return 0; | 589 | return 0; |
589 | } | 590 | } |
590 | 591 | ||
592 | static const struct platform_device_id *platform_match_id( | ||
593 | struct platform_device_id *id, | ||
594 | struct platform_device *pdev) | ||
595 | { | ||
596 | while (id->name[0]) { | ||
597 | if (strcmp(pdev->name, id->name) == 0) { | ||
598 | pdev->id_entry = id; | ||
599 | return id; | ||
600 | } | ||
601 | id++; | ||
602 | } | ||
603 | return NULL; | ||
604 | } | ||
605 | |||
591 | /** | 606 | /** |
592 | * platform_match - bind platform device to platform driver. | 607 | * platform_match - bind platform device to platform driver. |
593 | * @dev: device. | 608 | * @dev: device. |
@@ -604,7 +619,13 @@ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env) | |||
604 | static int platform_match(struct device *dev, struct device_driver *drv) | 619 | static int platform_match(struct device *dev, struct device_driver *drv) |
605 | { | 620 | { |
606 | struct platform_device *pdev = to_platform_device(dev); | 621 | struct platform_device *pdev = to_platform_device(dev); |
622 | struct platform_driver *pdrv = to_platform_driver(drv); | ||
623 | |||
624 | /* match against the id table first */ | ||
625 | if (pdrv->id_table) | ||
626 | return platform_match_id(pdrv->id_table, pdev) != NULL; | ||
607 | 627 | ||
628 | /* fall-back to driver name match */ | ||
608 | return (strcmp(pdev->name, drv->name) == 0); | 629 | return (strcmp(pdev->name, drv->name) == 0); |
609 | } | 630 | } |
610 | 631 | ||