summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2017-05-23 17:07:47 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-05-25 15:41:20 +0200
commit7975bd4cca05a99aa14964cfa22366ee64da50ad (patch)
tree9f0e08014defb9025a076b2b4dc009f8b392e1c1
parentdd246486f94694edb86e898a24a61ebf2f2fdba4 (diff)
downloadop-kernel-dev-7975bd4cca05a99aa14964cfa22366ee64da50ad.zip
op-kernel-dev-7975bd4cca05a99aa14964cfa22366ee64da50ad.tar.gz
firmware: vpd: remove platform driver
There is no reason why VPD should register platform device and driver, given that we do not use their respective kobjects to attach attributes, nor do we need suspend/resume hooks, or any other features of device core. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Guenter Roeck <groeck@chromium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/firmware/google/vpd.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c
index 4f8f99e..d28f62f 100644
--- a/drivers/firmware/google/vpd.c
+++ b/drivers/firmware/google/vpd.c
@@ -22,8 +22,6 @@
#include <linux/kobject.h>
#include <linux/list.h>
#include <linux/module.h>
-#include <linux/of_address.h>
-#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
@@ -279,47 +277,37 @@ static int vpd_sections_init(phys_addr_t physaddr)
ret = vpd_section_init("rw", &rw_vpd,
physaddr + sizeof(struct vpd_cbmem) +
header.ro_size, header.rw_size);
- if (ret)
+ if (ret) {
+ vpd_section_destroy(&ro_vpd);
return ret;
+ }
}
return 0;
}
-static int vpd_probe(struct platform_device *pdev)
-{
- int ret;
- struct lb_cbmem_ref entry;
-
- ret = coreboot_table_find(CB_TAG_VPD, &entry, sizeof(entry));
- if (ret)
- return ret;
-
- return vpd_sections_init(entry.cbmem_addr);
-}
-
-static struct platform_driver vpd_driver = {
- .probe = vpd_probe,
- .driver = {
- .name = "vpd",
- },
-};
-
static int __init vpd_platform_init(void)
{
- struct platform_device *pdev;
-
- pdev = platform_device_register_simple("vpd", -1, NULL, 0);
- if (IS_ERR(pdev))
- return PTR_ERR(pdev);
+ struct lb_cbmem_ref entry;
+ int err;
vpd_kobj = kobject_create_and_add("vpd", firmware_kobj);
if (!vpd_kobj)
return -ENOMEM;
- platform_driver_register(&vpd_driver);
+ err = coreboot_table_find(CB_TAG_VPD, &entry, sizeof(entry));
+ if (err)
+ goto err_kobject_put;
+
+ err = vpd_sections_init(entry.cbmem_addr);
+ if (err)
+ goto err_kobject_put;
return 0;
+
+err_kobject_put:
+ kobject_put(vpd_kobj);
+ return err;
}
static void __exit vpd_platform_exit(void)
OpenPOWER on IntegriCloud