From: Henrique de Moraes Holschuh <hmh-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org>
To: lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Cc: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Henrique de Moraes Holschuh
<hmh-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org>,
linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: ACPI: thinkpad-acpi: store ThinkPad model information
Date: Sat, 14 Jul 2007 11:12:07 -0300 [thread overview]
Message-ID: <11844223362783-git-send-email-hmh@hmh.eng.br> (raw)
In-Reply-To: <11844223322928-git-send-email-hmh-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org>
Keep note of ThinkPad model, BIOS and EC firmware information, and log it
on startup. Makes for far more readable code in places, too.
Signed-off-by: Henrique de Moraes Holschuh <hmh-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org>
---
drivers/misc/thinkpad_acpi.c | 98 ++++++++++++++++++++++++++++++------------
drivers/misc/thinkpad_acpi.h | 17 ++++++-
2 files changed, 85 insertions(+), 30 deletions(-)
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index 44aa8c9..99500af 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -717,9 +717,19 @@ static int __init thinkpad_acpi_driver_init(struct ibm_init_struct *iibm)
printk(IBM_INFO "%s v%s\n", IBM_DESC, IBM_VERSION);
printk(IBM_INFO "%s\n", IBM_URL);
- if (ibm_thinkpad_ec_found)
- printk(IBM_INFO "ThinkPad EC firmware %s\n",
- ibm_thinkpad_ec_found);
+ printk(IBM_INFO "ThinkPad BIOS %s, EC %s\n",
+ (thinkpad_id.bios_version_str) ?
+ thinkpad_id.bios_version_str : "unknown",
+ (thinkpad_id.ec_version_str) ?
+ thinkpad_id.ec_version_str : "unknown");
+
+ if (thinkpad_id.vendor && thinkpad_id.model_str)
+ printk(IBM_INFO "%s %s\n",
+ (thinkpad_id.vendor == PCI_VENDOR_ID_IBM) ?
+ "IBM" : ((thinkpad_id.vendor ==
+ PCI_VENDOR_ID_LENOVO) ?
+ "Lenovo" : "Unknown vendor"),
+ thinkpad_id.model_str);
return 0;
}
@@ -2648,7 +2658,7 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
acpi_tmp7 = acpi_evalf(ec_handle, NULL, "TMP7", "qv");
- if (ibm_thinkpad_ec_found && experimental) {
+ if (thinkpad_id.ec_model && experimental) {
/*
* Direct EC access mode: sensors at registers
* 0x78-0x7F, 0xC0-0xC7. Registers return 0x00 for
@@ -3532,20 +3542,19 @@ static int __init fan_init(struct ibm_init_struct *iibm)
* Enable for TP-1Y (T43), TP-78 (R51e),
* TP-76 (R52), TP-70 (T43, R52), which are known
* to be buggy. */
- if (fan_control_initial_status == 0x07 &&
- ibm_thinkpad_ec_found &&
- ((ibm_thinkpad_ec_found[0] == '1' &&
- ibm_thinkpad_ec_found[1] == 'Y') ||
- (ibm_thinkpad_ec_found[0] == '7' &&
- (ibm_thinkpad_ec_found[1] == '6' ||
- ibm_thinkpad_ec_found[1] == '8' ||
- ibm_thinkpad_ec_found[1] == '0'))
- )) {
- printk(IBM_NOTICE
- "fan_init: initial fan status is "
- "unknown, assuming it is in auto "
- "mode\n");
- tp_features.fan_ctrl_status_undef = 1;
+ if (fan_control_initial_status == 0x07) {
+ switch (thinkpad_id.ec_model) {
+ case 0x5931: /* TP-1Y */
+ case 0x3837: /* TP-78 */
+ case 0x3637: /* TP-76 */
+ case 0x3037: /* TP-70 */
+ printk(IBM_NOTICE
+ "fan_init: initial fan status is "
+ "unknown, assuming it is in auto "
+ "mode\n");
+ tp_features.fan_ctrl_status_undef = 1;
+ ;;
+ }
}
} else {
printk(IBM_ERR
@@ -4279,13 +4288,30 @@ static void ibm_exit(struct ibm_struct *ibm)
/* Probing */
-static char *ibm_thinkpad_ec_found;
-
-static char* __init check_dmi_for_ec(void)
+static void __init get_thinkpad_model_data(struct thinkpad_id_data *tp)
{
struct dmi_device *dev = NULL;
char ec_fw_string[18];
+ if (!tp)
+ return;
+
+ memset(tp, 0, sizeof(*tp));
+
+ if (dmi_name_in_vendors("IBM"))
+ tp->vendor = PCI_VENDOR_ID_IBM;
+ else if (dmi_name_in_vendors("LENOVO"))
+ tp->vendor = PCI_VENDOR_ID_LENOVO;
+ else
+ return;
+
+ tp->bios_version_str = kstrdup(dmi_get_system_info(DMI_BIOS_VERSION),
+ GFP_KERNEL);
+ if (!tp->bios_version_str)
+ return;
+ tp->bios_model = tp->bios_version_str[0]
+ | (tp->bios_version_str[1] << 8);
+
/*
* ThinkPad T23 or newer, A31 or newer, R50e or newer,
* X32 or newer, all Z series; Some models must have an
@@ -4299,10 +4325,20 @@ static char* __init check_dmi_for_ec(void)
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);
+
+ tp->ec_version_str = kstrdup(ec_fw_string, GFP_KERNEL);
+ tp->ec_model = ec_fw_string[0]
+ | (ec_fw_string[1] << 8);
+ break;
}
}
- return NULL;
+
+ tp->model_str = kstrdup(dmi_get_system_info(DMI_PRODUCT_VERSION),
+ GFP_KERNEL);
+ if (strnicmp(tp->model_str, "ThinkPad", 8) != 0) {
+ kfree(tp->model_str);
+ tp->model_str = NULL;
+ }
}
static int __init probe_for_thinkpad(void)
@@ -4316,7 +4352,7 @@ static int __init probe_for_thinkpad(void)
* Non-ancient models have better DMI tagging, but very old models
* don't.
*/
- is_thinkpad = dmi_name_in_vendors("ThinkPad");
+ is_thinkpad = (thinkpad_id.model_str != NULL);
/* ec is required because many other handles are relative to it */
IBM_ACPIHANDLE_INIT(ec);
@@ -4332,7 +4368,7 @@ static int __init probe_for_thinkpad(void)
* false positives a damn great deal
*/
if (!is_thinkpad)
- is_thinkpad = dmi_name_in_vendors("IBM");
+ is_thinkpad = (thinkpad_id.vendor == PCI_VENDOR_ID_IBM);
if (!is_thinkpad && !force_load)
return -ENODEV;
@@ -4475,12 +4511,16 @@ static int __init thinkpad_acpi_module_init(void)
int ret, i;
/* Driver-level probe */
+
+ get_thinkpad_model_data(&thinkpad_id);
ret = probe_for_thinkpad();
- if (ret)
+ if (ret) {
+ thinkpad_acpi_module_exit();
return ret;
+ }
/* Driver initialization */
- ibm_thinkpad_ec_found = check_dmi_for_ec();
+
IBM_ACPIHANDLE_INIT(ecrd);
IBM_ACPIHANDLE_INIT(ecwr);
@@ -4590,7 +4630,9 @@ static void thinkpad_acpi_module_exit(void)
if (proc_dir)
remove_proc_entry(IBM_PROC_DIR, acpi_root_dir);
- kfree(ibm_thinkpad_ec_found);
+ kfree(thinkpad_id.bios_version_str);
+ kfree(thinkpad_id.ec_version_str);
+ kfree(thinkpad_id.model_str);
}
module_init(thinkpad_acpi_module_init);
diff --git a/drivers/misc/thinkpad_acpi.h b/drivers/misc/thinkpad_acpi.h
index fee0421..09b2282 100644
--- a/drivers/misc/thinkpad_acpi.h
+++ b/drivers/misc/thinkpad_acpi.h
@@ -175,9 +175,7 @@ static void tpacpi_remove_driver_attributes(struct device_driver *drv);
static int experimental;
static u32 dbg_level;
static int force_load;
-static char *ibm_thinkpad_ec_found;
-static char* check_dmi_for_ec(void);
static int thinkpad_acpi_module_init(void);
static void thinkpad_acpi_module_exit(void);
@@ -244,6 +242,21 @@ static struct {
u16 input_device_registered:1;
} tp_features;
+struct thinkpad_id_data {
+ unsigned int vendor; /* ThinkPad vendor:
+ * PCI_VENDOR_ID_IBM/PCI_VENDOR_ID_LENOVO */
+
+ char *bios_version_str; /* Something like 1ZET51WW (1.03z) */
+ char *ec_version_str; /* Something like 1ZHT51WW-1.04a */
+
+ u16 bios_model; /* Big Endian, TP-1Y = 0x5931, 0 = unknown */
+ u16 ec_model;
+
+ char *model_str;
+};
+
+static struct thinkpad_id_data thinkpad_id;
+
static struct list_head tpacpi_all_drivers;
static struct ibm_init_struct ibms_init[];
--
1.5.2.1
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
next prev parent reply other threads:[~2007-07-14 14:12 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-14 14:11 [GIT PULL] thinkpad-acpi queue for 2.6.23 (v2) Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: enable more hotkeys Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: update CMOS commands documentation Henrique de Moraes Holschuh
[not found] ` <11844223322928-git-send-email-hmh-N3TV7GIv+o9fyO9Q7EP/yw@public.gmane.org>
2007-07-14 14:11 ` ACPI: thinkpad-acpi: add DMI-based modalias Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: remove all uneeded initializers Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: update information on T43 thermal sensor 0xc1 Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: export hotkey maximum masks Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: export to sysfs the state of the radio slider switch Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: checkpoint sysfs interface version due to hotkey Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: register input device Henrique de Moraes Holschuh
2007-07-14 14:11 ` ACPI: thinkpad-acpi: add input device support to hotkey subdriver Henrique de Moraes Holschuh
2007-07-14 22:31 ` Matthew Garrett
[not found] ` <20070714223144.GA25782-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 18:12 ` Henrique de Moraes Holschuh
[not found] ` <20070715181233.GG14134-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 18:45 ` Matthew Garrett
[not found] ` <20070715184519.GD3235-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 20:03 ` Henrique de Moraes Holschuh
2007-07-15 20:12 ` [ibm-acpi-devel] " Matthew Garrett
2007-07-15 20:59 ` Henrique de Moraes Holschuh
2007-07-15 21:04 ` Matthew Garrett
2007-07-15 21:54 ` Henrique de Moraes Holschuh
[not found] ` <20070715215453.GJ19066-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 22:45 ` Matthew Garrett
2007-07-16 2:47 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
2007-07-16 15:46 ` Dmitry Torokhov
2007-07-16 15:51 ` Matthew Garrett
2007-07-16 18:19 ` Henrique de Moraes Holschuh
2007-07-16 18:37 ` Matthew Garrett
2007-07-14 14:12 ` ACPI: thinkpad-acpi: add power-management handler capability Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: export EV_SW SW_RADIO events Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: checkpoint sysfs interface version due to input layer Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: rename pci HID constant Henrique de Moraes Holschuh
2007-07-14 22:37 ` Matthew Garrett
[not found] ` <20070714223713.GC25782-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 18:02 ` Henrique de Moraes Holschuh
2007-07-15 18:34 ` Matthew Garrett
2007-07-15 21:18 ` Henrique de Moraes Holschuh
2007-07-15 21:23 ` Matthew Garrett
2007-07-14 14:12 ` pci-ids: add Lenovo PCI vendor ID Henrique de Moraes Holschuh
2007-07-15 11:52 ` Jeff Garzik
2007-07-15 21:22 ` Henrique de Moraes Holschuh
2007-07-14 14:12 ` Henrique de Moraes Holschuh [this message]
2007-07-14 14:12 ` ACPI: thinkpad-acpi: allow use of CMOS NVRAM for brightness control Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: react to Lenovo ThinkPad differences in hot key Henrique de Moraes Holschuh
2007-07-14 22:39 ` Matthew Garrett
[not found] ` <20070714223932.GD25782-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 17:59 ` Henrique de Moraes Holschuh
2007-07-15 18:31 ` Matthew Garrett
[not found] ` <20070715183150.GA3235-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 20:17 ` Henrique de Moraes Holschuh
[not found] ` <20070715201712.GD19066-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 20:24 ` Matthew Garrett
2007-07-14 14:12 ` ACPI: thinkpad-acpi: make sure DSDT TMPx readings don't return +128 Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: make EC-based thermal readings non-experimental Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: bump up version to 0.15 Henrique de Moraes Holschuh
2007-07-14 14:58 ` [GIT PULL] thinkpad-acpi queue for 2.6.23 (v2) Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad-acpi: make the input event mode the default Henrique de Moraes Holschuh
2007-07-14 22:33 ` Matthew Garrett
2007-07-15 18:05 ` Henrique de Moraes Holschuh
[not found] ` <20070715180529.GF14134-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 18:38 ` Matthew Garrett
2007-07-15 20:09 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
2007-07-15 20:13 ` Matthew Garrett
2007-07-15 21:14 ` Henrique de Moraes Holschuh
[not found] ` <20070715211421.GG19066-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 21:19 ` Matthew Garrett
[not found] ` <20070715211953.GA6527-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2007-07-15 22:08 ` Henrique de Moraes Holschuh
[not found] ` <20070715220801.GK19066-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-15 22:49 ` Matthew Garrett
2007-07-16 0:12 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
[not found] ` <20070716001239.GA31604-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-16 0:24 ` Matthew Garrett
2007-07-16 3:02 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
[not found] ` <20070716030254.GD31604-ZGHd14iZgfaRjzvQDGKj+xxZW9W5cXbT@public.gmane.org>
2007-07-16 15:27 ` Dmitry Torokhov
2007-07-16 18:21 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
2007-07-14 14:12 ` ACPI: thinkpad_acpi: use bool for boolean parameters Henrique de Moraes Holschuh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11844223362783-git-send-email-hmh@hmh.eng.br \
--to=hmh-n3tv7giv+o9fyo9q7ep/yw@public.gmane.org \
--cc=ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox