#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
+#include <linux/string.h>
#include <linux/proc_fs.h>
#include <linux/backlight.h>
#include <asm/uaccess.h>
* control */
};
-static int ibm_thinkpad_ec_found;
+static char* ibm_thinkpad_ec_found = NULL;
struct ibm_struct {
char *name;
ibm_exit(&ibms[i]);
remove_proc_entry(IBM_DIR, acpi_root_dir);
+
+ if (ibm_thinkpad_ec_found)
+ kfree(ibm_thinkpad_ec_found);
}
-static int __init check_dmi_for_ec(void)
+static char* __init check_dmi_for_ec(void)
{
struct dmi_device *dev = NULL;
+ char ec_fw_string[18];
/*
* ThinkPad T23 or newer, A31 or newer, R50e or newer,
* See http://thinkwiki.org/wiki/List_of_DMI_IDs
*/
while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, NULL, dev))) {
- if (strstr(dev->name, "IBM ThinkPad Embedded Controller"))
- return 1;
+ if (sscanf(dev->name,
+ "IBM ThinkPad Embedded Controller -[%17c",
+ ec_fw_string) == 1) {
+ ec_fw_string[sizeof(ec_fw_string) - 1] = 0;
+ ec_fw_string[strcspn(ec_fw_string, " ]")] = 0;
+ return kstrdup(ec_fw_string, GFP_KERNEL);
+ }
}
- return 0;
+ return NULL;
}
static int __init acpi_ibm_init(void)
/* Models with newer firmware report the EC in DMI */
ibm_thinkpad_ec_found = check_dmi_for_ec();
+ if (ibm_thinkpad_ec_found)
+ printk(IBM_INFO "ThinkPad EC firmware %s\n",
+ ibm_thinkpad_ec_found);
/* these handles are not required */
IBM_HANDLE_INIT(vid);