diff options
author | Pawel Moll <pawel.moll@arm.com> | 2014-08-08 16:32:58 +0100 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2014-10-02 10:19:34 -0400 |
commit | 514b82a52b7aaa413ab8f0e7db93a5ccd0540d09 (patch) | |
tree | 6244d14105f7a1a2833bb53c33e91e59c0a5a97f /drivers/char/tile-srom.c | |
parent | 4cde4cc87a19cfe7351e3d0fd87d8a49271781f6 (diff) | |
download | lwn-514b82a52b7aaa413ab8f0e7db93a5ccd0540d09.tar.gz lwn-514b82a52b7aaa413ab8f0e7db93a5ccd0540d09.zip |
char: tile-srom: Add real platform bus parent
Add a real platform bus device as a parent for
the srom class devices, to prevent non-platform
devices hanging from the bus root.
Signed-off-by: Pawel Moll <pawel.moll@arm.com>
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'drivers/char/tile-srom.c')
-rw-r--r-- | drivers/char/tile-srom.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/char/tile-srom.c b/drivers/char/tile-srom.c index bd377472dcfb..02e76ac6d282 100644 --- a/drivers/char/tile-srom.c +++ b/drivers/char/tile-srom.c @@ -76,6 +76,7 @@ MODULE_LICENSE("GPL"); static int srom_devs; /* Number of SROM partitions */ static struct cdev srom_cdev; +static struct platform_device *srom_parent; static struct class *srom_class; static struct srom_dev *srom_devices; @@ -350,7 +351,7 @@ static int srom_setup_minor(struct srom_dev *srom, int index) SROM_PAGE_SIZE_OFF, sizeof(srom->page_size)) < 0) return -EIO; - dev = device_create(srom_class, &platform_bus, + dev = device_create(srom_class, &srom_parent->dev, MKDEV(srom_major, index), srom, "%d", index); return PTR_ERR_OR_ZERO(dev); } @@ -415,6 +416,13 @@ static int srom_init(void) if (result < 0) goto fail_chrdev; + /* Create a parent device */ + srom_parent = platform_device_register_simple("srom", -1, NULL, 0); + if (IS_ERR(srom_parent)) { + result = PTR_ERR(srom_parent); + goto fail_pdev; + } + /* Create a sysfs class. */ srom_class = class_create(THIS_MODULE, "srom"); if (IS_ERR(srom_class)) { @@ -438,6 +446,8 @@ fail_class: device_destroy(srom_class, MKDEV(srom_major, i)); class_destroy(srom_class); fail_cdev: + platform_device_unregister(srom_parent); +fail_pdev: cdev_del(&srom_cdev); fail_chrdev: unregister_chrdev_region(dev, srom_devs); @@ -454,6 +464,7 @@ static void srom_cleanup(void) device_destroy(srom_class, MKDEV(srom_major, i)); class_destroy(srom_class); cdev_del(&srom_cdev); + platform_device_unregister(srom_parent); unregister_chrdev_region(MKDEV(srom_major, 0), srom_devs); kfree(srom_devices); } |