diff options
Diffstat (limited to 'drivers/firmware/dmi-id.c')
| -rw-r--r-- | drivers/firmware/dmi-id.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c index b6e1eb77d14..94a58a082b9 100644 --- a/drivers/firmware/dmi-id.c +++ b/drivers/firmware/dmi-id.c @@ -11,7 +11,7 @@ #include <linux/init.h> #include <linux/dmi.h> #include <linux/device.h> -#include <linux/autoconf.h> +#include <linux/slab.h> struct dmi_device_attribute{ struct device_attribute dev_attr; @@ -140,7 +140,7 @@ static struct attribute_group sys_dmi_attribute_group = { .attrs = sys_dmi_attributes, }; -static struct attribute_group* sys_dmi_attribute_groups[] = { +static const struct attribute_group* sys_dmi_attribute_groups[] = { &sys_dmi_attribute_group, NULL }; @@ -173,14 +173,11 @@ static struct device *dmi_dev; if (dmi_get_system_info(_field)) \ sys_dmi_attributes[i++] = &sys_dmi_##_name##_attr.dev_attr.attr; -extern int dmi_available; - -static int __init dmi_id_init(void) +/* In a separate function to keep gcc 3.2 happy - do NOT merge this in + dmi_id_init! */ +static void __init dmi_id_init_attr_table(void) { - int ret, i; - - if (!dmi_available) - return -ENODEV; + int i; /* Not necessarily all DMI fields are available on all * systems, hence let's built an attribute table of just @@ -205,6 +202,16 @@ static int __init dmi_id_init(void) ADD_DMI_ATTR(chassis_serial, DMI_CHASSIS_SERIAL); ADD_DMI_ATTR(chassis_asset_tag, DMI_CHASSIS_ASSET_TAG); sys_dmi_attributes[i++] = &sys_dmi_modalias_attr.attr; +} + +static int __init dmi_id_init(void) +{ + int ret; + + if (!dmi_available) + return -ENODEV; + + dmi_id_init_attr_table(); ret = class_register(&dmi_class); if (ret) @@ -217,15 +224,17 @@ static int __init dmi_id_init(void) } dmi_dev->class = &dmi_class; - strcpy(dmi_dev->bus_id, "id"); + dev_set_name(dmi_dev, "id"); dmi_dev->groups = sys_dmi_attribute_groups; ret = device_register(dmi_dev); if (ret) - goto fail_class_unregister; + goto fail_free_dmi_dev; return 0; +fail_free_dmi_dev: + kfree(dmi_dev); fail_class_unregister: class_unregister(&dmi_class); |
